提问人:Crespum 提问时间:1/4/2023 更新时间:1/4/2023 访问量:121
如何使用复选框删除带有php和mysql的行
How can I use checkboxes to delete rows with php and mysql
问:
我创建了一个包含数据库信息的表,并尝试创建复选框以便能够更轻松地删除行,但有些东西无法正常工作。
我有一个带有表单的按钮:
<form action="delete-register.php" method="post">
<button type="button" class="btn btn-primary"><span class="fe fe-file-plus fe-12 mr-2"></span>New</button>
<button type="submit" name="delete" class="btn btn-secondary"><span class="fe fe-trash fe-12 mr-2"></span>Delete</button>
</form>
我有带有复选框的行:
<form action="delete-register.php" method="post">
<td>
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $row['id']; ?>" name="selected[]" value="<?php echo $row['id']; ?>">
<label class="custom-control-label" for="<?php echo $row['id']; ?>"></label>
</div>
</td>
</form>
还有delete-register.php:
if (isset($_POST['delete'])) {
if (isset($_POST['selected'])) {
foreach ($_POST['selected'] as $id) {
$query = "DELETE FROM registers WHERE id = $id";
mysqli_query($conn, $query);
}
header('Location: registers.php');
exit;
}
}
问题是“selected”始终为 null,因此不会从数据库中删除任何内容。 我该如何解决这个问题?
答:
0赞
Ken Lee
1/4/2023
#1
请注意,提交的数据将在以下范围内<form>....</form>
由于您有两个表单,因此当您单击第一个表单中的提交按钮时,它不会将第二个表单的数据发送到服务器。
因此,请将第二张表格更改为:
<form action="delete-register.php" method="post">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $row['id']; ?>" name="selected[]" value="<?php echo $row['id']; ?>">
<label class="custom-control-label" for="<?php echo $row['id']; ?>"></label>
</div>
<input type=submit name=delete>
</form>
[附加说明]
如果您想坚持使用第一个表单来触发删除操作,那么请:
- 在第 1 个窗体中,将删除从“提交”更改为“按钮”
- 将 OnClick 事件添加到此删除按钮,以便触发第二个表单的提交
- 确保您在第二个表单中有一个称为“删除”的隐藏字段,因为您指定在 PHP 脚本中包含此字段
- 您可能已经注意到,我在第二份表格中添加了表格,以便于通过表格 1 触发提交
id=form2
所以这是修改后的代码:
<form method="post">
<button type="button" class="btn btn-primary"><span class="fe fe-file-plus fe-12 mr-2"></span>New</button>
<button type="button" name="delete" class="btn btn-secondary"
onclick='document.getElementById("form2").submit()';
><span class="fe fe-trash fe-12 mr-2"></span>Delete</button>
</form>
<form id=form2 action="delete-register.php" method="post">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $row['id']; ?>" name="selected[]" value="<?php echo $row['id']; ?>">
<label class="custom-control-label" for="<?php echo $row['id']; ?>"></label>
</div>
<input type=hidden name=delete value="delete">
</form>
评论
0赞
Crespum
1/4/2023
是的,我有一个第二形式的循环。我不知道这种对 2 种形式的干扰,谢谢。如果我添加一个新条目,它将由于循环而创建多个条目。我是否无法使用我在第一个表单上创建的“删除”按钮?我想使用它,因为它在页面的另一个角落。
0赞
Ken Lee
1/4/2023
请参阅我修订后的答案中的“附加备注”,以做您想做的事
0赞
Crespum
1/4/2023
我尝试并结果:如果我选择第一行中的复选框,它会删除,但如果我选择第一行以外的另一个不会删除。
0赞
Ken Lee
1/4/2023
它应该可以工作 - 请尝试此沙盒:createchhk.com/SOanswers/testSO4Jan2023.php(例如选择 2 和 3,然后单击删除,看看会发生什么)
0赞
Crespum
1/4/2023
沙盒运行良好。
评论
delete-register.php
并bind_param
将任何数据添加到查询中。不要使用字符串插值或串联来实现此目的,因为您已经创建了严重的 SQL 注入错误。切勿将 或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。mysqli
$_POST
$_GET