簡體   English   中英

使用預處理語句刪除PDO和復選框的多行?

[英]Delete multiple rows with PDO and checkboxes using prepared statements?

我有這個代碼,

$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和准備好的語句。

您為每個復選框分配相同的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);

以下是從數據庫中執行多次刪除的簡單方法:

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM