【问题标题】:Delete multiple rows from mysql with checkbox使用复选框从mysql中删除多行
【发布时间】:2013-01-24 16:59:31
【问题描述】:

我有一个查询,它显示一个包含消息信息的表格,我还有一个列,一旦他们勾选了他们想要的消息,我就有一个选项可以选择用户想要使用复选框删除的消息要删除,他们然后单击提交按钮,该按钮将他们带到处理页面,在该页面中执行删除每个选定消息的 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';
          }
}

【问题讨论】:

  • 如果你在执行之前回显你生成的删除查询,我想你会看到你的问题。
  • @JoachimIsaksson 好的,谢谢!
  • 那么message_id总是整数吗?

标签: php mysql sql checkbox


【解决方案1】:
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'] 的内容进行更多测试。我们不希望邪恶的人做傻事。

【讨论】:

  • 感谢您的帮助,不幸的是它似乎仍然无法正常工作; message_id 被发送到第二页,但是 SQL 语句没有。
  • @cobra_fast: "(int)$_POST['check_list'])" 中的 (int) 的目的是什么?
【解决方案2】:

据我所知,您的代码没有任何问题,您真的应该在 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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2019-08-24
    • 2012-04-26
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多