使用复选框从mysql中删除多行

时间:2013-01-24 16:59:31

标签: php mysql sql checkbox

我有一个查询显示一个包含消息信息的表,我还有一个列,可以选择用户选中要删除的消息,一旦他们勾选了他们想要的消息要删除,他们然后单击一个提交按钮,将其带到进程页面,在该页面中删除每个选定消息的SQL语句;但是,声明似乎不起作用,这是我到目前为止所做的:

消息显示页面:

if ($_SESSION['user_session'] == "$current_user")
{
    {
     echo "<table border='1'>
     <tr>
     <th>Message ID</th>
     <th>Username</th>
     <th>Subject</th>
     <th>Message</th>
     <th>Delete?</th>
     </tr>";

        while($row = mysql_fetch_array($result))
         {
          echo "<tr>";
          echo "<td>" . $row['message_id'] . "</td>";
          echo "<td>" . $row['username'] . "</td>";
          echo "<td>" . $row['sub'] . "</td>";
          echo "<td>" . $row['message'] . "</td>";
          echo "<td><input type='checkbox' name='check_list[]' value='" .     $row['message_id'] . "' /></td>";
          echo "</tr>";
             }
      echo "</table>";
     }
}

SQL语句的过程页面:

if(!empty($_POST['check_list']))
{
    foreach($_POST['check_list'] as $check)
    {
    //connection to the database
    $dbhandle = mysql_connect("XXX", "XXX", "XXX")
    or die("Unable to connect to MySQL");

    //select a database to work with
    $selected = mysql_select_db("XXX",$dbhandle)
    or die("Could not select examples");

    //execute the SQL query to update the "returned" field to 1 wherever the loan_id is     checked.
    $result = mysql_query("DELETE FROM message WHERE message_id='$check'");
    }

              if ($result)
          {
              echo 'Messages Deleted';
          }
}

2 个答案:

答案 0 :(得分:0)

if(!empty($_POST['check_list']))
{
    $dbhandle = mysql_connect("XXX", "XXX", "XXX") or die("Unable to connect to MySQL");
    $selected = mysql_select_db("XXX",$dbhandle) or die("Could not select examples");

    $result = mysql_query("DELETE FROM message WHERE message_id IN (" . implode(',', $_POST['check_list']) . ")", $dbhandle);
    if ($result !== false)
        echo 'Messages deleted.';
}

显然,在执行查询之前,您应该对$_POST['check_list']的内容进行更多测试。我们不希望邪恶的人做傻事。

答案 1 :(得分:0)

据我所知,您的代码没有任何问题,您应该在SQL查询之前尝试var_dump($check)输出它包含的内容,并在第二次开始时尝试var_dump($_POST['check_list'])页。

另外,我建议您在执行多个必要连接时取出foreach的数据库连接,如下所示:

if(!empty($_POST['check_list'])) {
    // Output the variable $_POST['check_list']
    var_dump($_POST['check_list']);

    //connection to the database
    $dbhandle = mysql_connect("XXX", "XXX", "XXX") or die("Unable to connect to MySQL");

    //select a database to work with
    $selected = mysql_select_db("XXX",$dbhandle) or die("Could not select examples");

    foreach($_POST['check_list'] as $check) {
        // Output the $check variable to see what it contains
        var_dump($check);

        //execute the SQL query to update the "returned" field to 1 wherever the loan_id is     checked.
        $result = mysql_query("DELETE FROM message WHERE message_id='$check'");

        // For each $check, verify what message_id got deleted
        if ($result) {
            echo 'Message ID Deleted: ' . $check;
        }
    }
}