2012-07-01 42 views
0

我确实有编程经验,但是对于PHP来说是新的。我遇到了一个我从本教程中学习的例子。我仔细观察了它数百万次,搜索了一下,等等。我不知道为什么我的代码不工作。从MySQL删除PHP的问题

其目的是基本上只是测试从sql中插入和删除sql,使用添加记录和删除记​​录按钮。 “添加记录”按钮可以很好地工作,但删除不会重新加载页面。继承人的代码...

<?php // sqltest.php 

require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST['author']) && 
    isset($_POST['title']) && 
    isset($_POST['type'])  && 
    isset($_POST['year'])  && 
    isset($_POST['isbn'])) 
{ 
    $author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

    if (isset($_POST['delete']) && $isbn != "") 
    { 
     echo "worked!!!!!!!!!!!!!!"; 
     $query = "DELETE FROM classics WHERE isbn='$isbn'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 

     //if (!mysql_query($query, $db_server)) 
     //echo "DELETE failed: $query" . mysql_error(); 
    } 
    else 
    { 
     echo "nooooooooooooooooooo"; 
     $query = "INSERT INTO classics VALUES" . 
     "('$author', '$title', '$type', '$year', '$isbn')"; 
     if (!mysql_query($query, $db_server)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

echo <<<_END 
<form action="sqltest.php" method="post"><pre> 
Author <input type="text" name="author" /> 
Title <input type="text" name="title" /> 
Type <input type="text" name="type" /> 
Year <input type="text" name="year" /> 
ISBN <input type="text" name="isbn" /> 
<input type='submit' value='ADD RECORD' /> 
</pre></form> 
_END; 



$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

$rows = mysql_num_rows($result); 

for ($j = 0 ; $j < $rows ; ++$j) 
{ 
     $row = mysql_fetch_row($result); 

echo <<<_END 
<pre> 
Author $row[0] 
Title $row[1] 
Type $row[2] 
Year $row[3] 
ISBN $row[4] 
<form action="sqltest.php" method="post"> 
<input type="hidden" name="delete" value="yes" /> 
<input type="hidden" name='isbn' value="$row[4]" /> 
<input type='submit' value='DELETE RECORD' /> 
</form> 
</pre> 
_END; 
} 

mysql_close($db_server); 

function get_post($var) 
{ 
    return mysql_real_escape_string($_POST[$var]); 
} 

?> 

我已经看了很多次,仍然不知道为什么这不起作用。 for循环是否使这个按钮不起作用?请注意,你会看到回声“工作!!!”;并在其他回声“noooooooo”;这是我测试按钮是否正在测试,但没有打印。所以,也许我错过了按钮代码本身的东西?此外,没有打印错误,并且我的编辑(和我自己)错过了语法错误(如果是这种情况)。

在关闭数据库之前,删除按钮的代码在最后。

感谢您的帮助提前。

+0

在'$ _POST'上做一个'var_dump()'并确保你得到了你期望的值 –

+0

@JohnConde嘿刚刚注意到了这一点。对不起,在这里做你的小菜,但我怎么去做呢?新来这个=( 谢谢你的输入! – TheNoob

+0

找到了这个代码在这里看看的答案:http://stackoverflow.com/questions/14077539/php-cant-add-content-text-book-example 它不起作用的原因是因为删除的if/else语句嵌套在另一个if语句中 如果你对它的工作不感兴趣 – 2013-01-29 21:47:52

回答

-2

您没有名为delete的表单字段,因此您的删除代码路径不可能被采用。

我猜你正在尝试使用提交按钮的值来决定怎么做?在这种情况下,您还会错过提交按钮上的name属性 - 没有该属性,它就不能提交表单中的任何值。你可能想:

<input type="submit" name="submit" value="DELETE RECORD" /> 

,然后有

if (isset($_POST['submit']) && ($_POST['submit'] == 'DELETE RECORD')) { 
    ... 
} 
+0

他的表单中有一个删除字段 – Rawkode

+0

@rawkode:d'oh ...在代码长度方面没有足够的滚动。 –

+0

感谢您的输入。我尝试过,结果相同。这真的很烦人。lol再次感谢 – TheNoob

2

你的问题是你的第一个if块。

你检查张贴的变量authortitletypeyearisbn的存在。而在您的删除代码中,发送的唯一变量是deleteisbn。因此第一个if块被完全遗漏(包括删除码)。

您需要修改第一个ifif(isset($_POST)) { // a form has been posted。那么它应该工作。

另一种方式来做到这一点:

if(isset($_POST['delete']) && isset($_POST['isbn']) && !empty($_POST['isbn'])){ 
    //delete code here 
} 

if(isset($_POST['author']) && isset($_POST['title']) && isset....){ 
    // insert code here 
} 

编辑:改写代码:

<?php // sqltest.php 

// I don't know what's in here, so I've left it 
require_once 'login.php'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

mysql_select_db($db_database, $db_server) 
    or die("Unable to select database: " . mysql_error()); 

if (isset($_POST)) 
{ 

    if (isset($_POST['delete']) && !empty($_POST['isbn'])) 
    { 
     echo "Deleting"; 
     $query = "DELETE FROM classics WHERE isbn='".mysql_real_escape_string($_POST['isbn'])."'"; 
     $result = mysql_query($query) or die(mysql_error()); 
     if(mysql_affected_rows($result) > 0) echo 'user deleted'; 
    } 
    else 
    { 
     echo "Inserting"; 
     $query = "INSERT INTO classics VALUES ('".mysql_real_escape_string($_POST['author'])."', '".mysql_real_escape_string($_POST['title'])."', '".mysql_real_escape_string($_POST['type'])."', '".mysql_real_escape_string($_POST['year'])."', '".mysql_real_escape_string($_POST['isbn'])."')"; 
     if (!mysql_query($query)) 
     { 
      echo "INSERT failed: $query" . mysql_error(); 
     } 
    } 
} 

// you don't need echo's here... just html 
?> 

<form action="sqltest.php" method="post"> 
    <pre> 
     Author <input type="text" name="author" /> 
     Title <input type="text" name="title" /> 
     Type <input type="text" name="type" /> 
     Year <input type="text" name="year" /> 
     ISBN <input type="text" name="isbn" /> 
     <input type='submit' value='ADD RECORD' /> 
    </pre> 
</form> 

<?php 

$query = "SELECT * FROM classics"; 

$result = mysql_query($query); 

if (!$result) die ("Database access failed: " . mysql_error()); 

// a better way to do this: 
while($row = mysql_fetch_array($result)){ 
?> 

<pre> 
    Author <?php echo $row[0]; ?> 
    Title <?php echo $row[1]; ?> 
    Type <?php echo $row[2]; ?> 
    Year <?php echo $row[3]; ?> 
    ISBN <?php echo $row[4]; ?> 
    <form action="sqltest.php" method="post"> 
     <input type="hidden" name="delete" value="yes" /> 
     <input type="hidden" name='isbn' value="<?php echo $row[4]; ?>" /> 
     <input type='submit' value='DELETE RECORD' /> 
    </form> 
</pre> 

<?php 
} 

mysql_close($db_server); 

?> 
+0

同样的结果= /它的表现与您描述的完全相同augh,非常感谢你的输入! – TheNoob

+0

虽然当我测试它时,它打印了行[0]行[1],当我h它删除它有相同的结果。 = /我正在阅读你现在发布的链接。感谢您的输入 – TheNoob

+0

@TheNoob请参阅我的编辑。我已经将你的代码重写为a)更易读b)通过几点教育你(比如更好/更简单的循环db行)以及c)希望解决你的问题。请仔细看看它是否有效。 –

0

验证您的表单中使用的方法。请确保它的帖子是这样的:

形式action="yourpage.php" method="POST"

,并在上面的代码中,替换以下:

$author = get_post('author'); 
    $title = get_post('title'); 
    $type = get_post('type'); 
    $year = get_post('year'); 
    $isbn = get_post('isbn'); 

$author = $_POST['author']; 
$title = $_POST['title']; 
$type = $_POST['type']; 
$year = $_POST['year']; 
$isbn = $_POST['isbn']; 

最后,没有必要检查再次如果$isbn不为空,就像您在isset()方法中那样。因此,在下面的,如果删除$isbn!=""

if (isset($_POST['delete']) && $isbn != "") 
    { 
} 

变为:

if (isset($_POST['delete'])) 
    { 
} 

既然你正在测试,检查,如果用户点击删除按钮不太重要。因此,您也可以稍后将其删除并稍后添加它,因为您确定该代码在单击删除按钮后可以访问。