删除多个mysql行,复选框无效


Delete multiple mysql rows with check box not working

这是我的问题:我的代码没有任何错误,但我的问题是,当我单击"删除多个"按钮时,它甚至不会重新加载页面。

注意:顺便说一句,我创建了redirect_to();函数,所以不要因为认为这是php函数或任何而感到困惑

PHP代码:

 display_errors(E_ALL);
if(isset($_POST['muldelete'])) {
$mul = $_POST['checkdelete'];
$sql = "DELETE FROM cmarkers WHERE id = " . $mul;
$result = mysqli_query($db, $sql);
redirect_to("elerts.php");
}

HTML代码:

 <form action="elerts.php" method="post">
<table class="table table-striped">
  <tr>
  <td> </td>
      <td>Date</td>
  <td>Comment</td>
  <td>Actions</td>
  </tr>
  <?php
  $sql = "SELECT * FROM cmarkers";
      $result = $db->query($sql);
  while ($row = mysqli_fetch_assoc($result)) {
  ?>
  <tr>
    <td><input type="checkbox" name="checkdelete[]" value="<?php echo $row['id']; ?>" /></td>
  <td><?php echo $row['date']; ?></td>
  <td><?php echo $row['comment']; ?></td>
  <td><a href="delete_elert.php?id=<?php echo $row['id']; ?>">Delete</a><a href="edit_elert.php?id=<?php echo $row['id']; ?>">Edit</a></td>
  </tr>

  <?php 
  }
  ?>
  <input type="submit" name="muldelete" value="Delete Multiple" />
</table>
</form>

谢谢

如果您需要更多信息,请让我知道

首先,您的代码包含一些注意和放置错误。

  • td外部的<table>之间的输入不正确
  • 如果按值生成一个表单,则不能进行多次删除删除

修复它们。

获取muldelete的数组

必须向所有选中的输入添加数组字段符号将名称"muldelete"聚集到post数组中。

<td><input type="checkbox" name="checkdelete[]" value="<?php $row['id']; ?>" /></td>

PHP端

现在您可以获取整个删除数组,如下所示:

if(!empty($_POST["muldelete"]))
{
   $mul = join(',', $_POST['checkdelete']);
   // Using IN() to make only one query for all records instead of multiple
   // ex: IN(3, 4, 54, 8)
   $query = "DELETE FROM cmarkers WHERE id IN(".$mul.")";
   $result = mysqli_query($db, $query);
   redirect_to("elerts.php");
}

安全

如果ID是整数值,则可以防止字符串注入sql查询

$mul = array_map(function($id)
{
   return intval($id);
}, $mul);

您的按钮位于<form></form>标记之外,因此它与表单元素或表单方法完全无关。不应该为每个复选框使用不同的表单,而是应该用表单标签包围整个表格,从而确保所有复选框和按钮都处于相同的表单中。

<form method='post' action='elerts.php'>
    <table class="table table-striped">
        ...all your table data including checkboxes...
        <input type="submit" name="muldelete" value="Delete Multiple" />
    </table>
</form>

我认为是因为您关闭表单标记的时间早于提交按钮。试着把整张桌子都放进去,应该能奏效。

PHP应该看起来像

 display_errors(E_ALL);
if(isset($_POST['muldelete'])) {
$mul = implode(',',$_POST['checkdelete']);
$sql = "DELETE FROM cmarkers WHERE id IN(" . $mul.")";
$result = mysqli_query($db, $sql);
redirect_to("elerts.php");
}