Удалить несколько строк с PDO и флажками, используя подготовленные операторы? - PullRequest
3 голосов
/ 29 августа 2011

У меня есть этот код,

$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 и подготовленные заявления.

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Вы присваиваете одинаковые 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);
2 голосов
/ 26 октября 2013

Вот простой способ сделать несколько удалений из базы данных:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...