Удаление элементов из базы данных с помощью флажков с формами в php

#php #mysql #html

#php #mysql #HTML

Вопрос:

У меня есть таблица, в которой отображается информация из таблицы mysql, и в последнем столбце у меня есть такой флажок :

 <form method="POST" action="php/delete.php">
  <thead>
    <tr
      <th>Nom</th>
      <th>Espéce</th>
      <th>Cri</th>
      <th>Propiétaire</th>
      <th>Age (années)</th>
      <th><input type="submit" name="supprimer" value="Supprimer" /></th>
    </tr>
  </thead>
  <tbody>
    <?php
      $connexion = mysql_connect($hote, $login, $mdp);
      mysql_select_db($bd, $connexion);
      $req = "Select * from animaux;";
      $resultat = mysql_query($req, $connexion);
      while (list($id, $nom, $esp, $cri, $prop, $age) = mysql_fetch_row($resultat)) {
    ?>
      <tr>
        <td><?= $nom ?> </td>
        <td><?= $esp ?></td>
        <td><?= $cri ?></td>
        <td><?= $prop ?></td>
        <td><?= $age ?></td>
        <td> <input type="checkbox" name="choix[]" value=<?= $id ?>></td>
      </tr>
  <?php } ?>
  </form>
 

Я использую следующий скрипт для удаления строк :

   include("../BD/bd_params.inc.php");

  $connexion = mysql_connect($hote,$login,$mdp);
  mysql_select_db($bd, $connexion);

  $del = $_POST['choix'];

  foreach ($del as $val) {
    $req = "delete from `animaux` where id = '$val'";
    $resultat = mysql_query($req,$connexion);

    if (!resultat) {
      die('Requête invalide : ' . mysql_error());
      break;
    } 
  }
 

Однако, когда я отправляю форму, ничего не происходит, ничего не отображается и ничего не удаляется. Кто-нибудь знает, что может быть причиной того, что мой скрипт не работает?

(о, и извините за мой английский …)

Комментарии:

1. Для меня это выглядит правильно. Попробуйте включить ошибки и посмотреть, получите ли вы какую-либо информацию.

2. в верхней части вашего скрипта добавьте error_reporting(E_ALL); и ini_set('display_errors', 'on');

3. он ничего не печатает… Однако теперь я могу удалять только элемент за раз, даже если выбрано несколько. И когда я добавляю var_dump($_POST); , когда я устанавливаю несколько флажков, это показывает : array(2) { ["supprimer"]=> string(9) "Supprimer" ["choix"]=> array(1) { [0]=> string(1) "6" } } . Итак, по-видимому, массив ‘choir’ не работает должным образом…

4. Хорошо, по-видимому, это работает только с первым установленным флажком. Кроме того, в массиве единственным значением является строка, поэтому я должен привести ее перед выполнением любого sql-запроса. Есть идеи, как получить все значения в массиве POST?

5. если вы сделаете a print_r($_POST) , что вы увидите?

Ответ №1:

 if (!resultat) {
 

должно быть

 if (!$resultat) {
     ^--missing $
 

Вызов ‘break’ является излишним. die() убьет скрипт, поэтому разрыв будет невозможен.

Вы проверили, что на сервер что-то отправляется. Что var_dump($_POST) показывает?

Комментарии:

1. var_dump($_POST); Шоу array(2) { ["supprimer"]=> string(9) "Supprimer" ["choix"]=> array(1) { [0]=> string(1) "1" } } . Я думаю, мне нужно преобразовать строки в целые числа?

2. ОК. Итак, отправляется флажок. Итак… Добавьте некоторые выходные данные отладки: var_dump($req); var_dump($resultat) , etc … и посмотрите, что получится.

3. var_dump($req) : string(36) "delete from animaux where id = '1'" var_dump($resultat)` : bool(true)

4. В соответствии с этим операция с БД сработала. Вам нужно будет проверить, почему на самом деле ничего не удаляется.

5. Сейчас это работает, но только если id < 5 и если установлен только один флажок.

Ответ №2:

Я создал новую версию вашего pastebin здесь:

http://pastebin.com/KdqscV87

По сути, вы хотите открыть форму перед запуском цикла и закрыть форму после завершения цикла.

Я удалил форму hidden ( class="invisible" ) (вы не можете иметь форму внутри формы) из цикла. Я не уверен, что вам там нужно, но это не будет работать внутри другой формы.

Комментарии:

1. Спасибо, это работает! (скрытое class="invisible" на самом деле появляется при <th>nom</th> нажатии. это заставляет исчезнуть первую форму и появиться эту благодаря javascript.)

2. О, хорошо. Я бы сказал, чтобы создать эту форму после цикла, а затем манипулировать ею с помощью javascript, чтобы показать ее там, где она вам нужна, с правильными идентификаторами и т.д. когда вы нажимаете на этот th. Таким образом, у вас не будет нескольких форм, только одна, которую вы можете изменить в зависимости от того, что было нажато.

3. Вы имеете в виду использование функции javascript, в которой указан идентификатор нажатого элемента, и благодаря этому отображаются соответствующие значения в другой форме?