这是我的问题:我的代码没有任何错误,但我的问题是,当我单击"删除多个"按钮时,它甚至不会重新加载页面。
注意:顺便说一句,我创建了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");
}