我试图在每一行上建立一个"删除"按钮的html表,一旦按下,调用以项目ID为参数的sql查询,从我的DB上的"篮子"表中删除一个项目。至于现在,当按钮被按下时,什么也没有发生。我认为问题应该是我传递的参数,因为当我更改查询以在按下按钮时删除特定ID时,它确实工作得很好。
这是我的代码的一部分:(如果你需要整个文件,我将提供其余的代码)
html部分: <td>
<form name="myForm" method="post" action="<?php $_SERVER['PHP_SELF'];?>" >
<input type="submit" class="css3button" value="remove" / > </td>
<input type="hidden" name="Id" id="Id" value="<?php echo $Id; ?>" />
</form>
</td>
php部分:if(isset($_POST['myForm'])){
$removal = sprintf("DELETE FROM Basket WHERE Id='%s'" ,mysql_real_escape_string($Id));
$remove_result = mysql_query($removal);
if (!$remove_result ) {
echo "DB Error, could not query the database'n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
}
在sprintf
的参数中放置"以结束字符串
我发现这里有几个问题:
-
$_POST['myForm']
不存在,只有$_POST['Id']
存在。 -
除非你定义了
$Id
,我们看不到,这将是空的,所以使用$_POST['Id']
代替。 -
可能只是问题中的一个打字错误,但是带有查询的字符串没有关闭
-
在HTML表单中,您使用
<?php echo $Id; ?>
,所以您需要再次验证$Id
保存一些数据,并且不是null/undefined。
试题:
if(isset($_POST['Id'])){
$removal = sprintf("DELETE FROM Basket WHERE Id='%s'" ,mysql_real_escape_string($_POST['Id']));
$remove_result = mysql_query($removal);
if (!$remove_result ) {
echo "DB Error, could not query the database'n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
}
你的代码不会被认为是不安全的,但你真的应该放弃mysql_*
库,转而使用PDO或MySQLi,并在查询中需要用户输入的地方使用准备好的语句。