HTML按钮通过post方法调用php代码,但SQL查询不工作


HTML button calls php code via post method but SQL query doesn't work

我试图在每一行上建立一个"删除"按钮的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的参数中放置"以结束字符串

我发现这里有几个问题:

  1. $_POST['myForm']不存在,只有$_POST['Id']存在。

  2. 除非你定义了$Id,我们看不到,这将是空的,所以使用$_POST['Id']代替。

  3. 可能只是问题中的一个打字错误,但是带有查询的字符串没有关闭

  4. 在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,并在查询中需要用户输入的地方使用准备好的语句。