我有这段代码,
$q = $dbc -> prepare ("SELECT * FROM tasks ORDER BY date_time LIMIT 0, 15");
$q -> execute();
echo '<form action="/adminpanel?tab=process" method="post">
<input type="hidden" name="deletetask" />';
while ($todo = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<div id="update"><div><strong>'
. $todo['date_time'] . '</strong><span>' . $todo['type']
. '</span></div><p>' . $todo['message']
. '</p><input class="checkbox" name="deletetask" value="'
. $todo['date_time'] . '" type="checkbox" /></div>';
}
echo '<input type="submit" value="Delete Tasks" /></form>';
现在一切都按预期工作,除了一件事,我还没有在互联网上找到任何答案。我的while循环总是有多行,并且几乎总是希望从中删除多个。
正如此脚本所示,表格确实有效,但它只会删除最后点击的复选框。我理解为什么会这样做,但我不明白如何克服这个问题我正在使用PDO和预备语句。
答案 0 :(得分:3)
您为每个复选框分配了相同的name="deletetask"
。因此,当您提交表单时,您只会收到最后选择的deletetask
值。所以,你的错误就在这里
<input class="checkbox" name="deletetask" value=
应该是
<input class="checkbox" name="deletetask[]" value=
因此您需要将deletetask
重命名为deletetask[]
,以便您的复选框以数组的形式发送,而不是像
$todelete = $_POST['deletetask'];
//or $_GET, if you are submitting form through get. But I would recommend you using POST
$stmt = $pdo->prepare("DELETE FROM table WHERE id = ?");
foreach ($todelete as $id)
$stmt->execute($id);
答案 1 :(得分:1)
以下是从数据库中执行多次删除的简单方法:
HTML
<input type="checkbox" name="del[]" value="your id">
<input type="checkbox" name="del[]" value="your id">
<input type="checkbox" name="del[]" value="your id">
<input type="checkbox" name="del[]" value="your id">
PHP
$ids = array();
foreach ($_POST['del'] as $pval) {
$ids[] = (int)$pval;
}
$ids = implode(',',$ids);
$query = $db->prepare("DELETE FROM `pages` WHERE `pages_id` IN ( $ids )");
$query->execute();