我有这个代码应该删除其复选框被选中的所有行(使用复选框多次删除)。
if (isset($_POST['del'])) {
$stmt = $db->prepare("DELETE FROM `$tbl_name` WHERE id=:id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$ids = array();
foreach ($_POST['del'] as $pval) {
$ids[] = (int)$pval;
$ids = implode(',',$ids);
$stmt->execute();
}
echo '<h1>Entries deleted.</h1>';
}
这是表单生成代码:
echo '<td><input type="checkbox" name="del[]" value="' . (int)$row['id'] . '"></td>';
如果选中单个复选框或单个删除,一切正常。 但对于多个复选框,会导致致命错误:
Fatal error: [] operator not supported for strings in
我错过了什么?
答案 0 :(得分:4)
此行导致致命错误,因为您使用$ids
的字符串结果覆盖数组implode()
,但在下一次循环迭代尝试使用[]
再次附加到它。
$ids = implode(',',$ids);
应该删除。您已绑定$id
,因此您可以execute()
在循环中$id
。
if (isset($_POST['del'])) {
// Prepare the statement before the loop
$stmt = $db->prepare("DELETE FROM `$tbl_name` WHERE id=:id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
// Execute the prepared statement in the loop with the ids from $_POST
// This is all you need, since $id is bound
foreach ($_POST['del'] as $id) {
$stmt->execute();
}
echo '<h1>Entries deleted.</h1>';
}
该方法使用循环。如果将$_POST['del']
中的每个值与其自己的?
绑定,也可以使用位置参数执行单个语句。这是更多的工作,如果您要在每个循环中删除批次项目,这可能是值得的。