Supprimer des enregistrements

Principe

La réalisation de la suppression des enregistrements d'une table, correspond à un formulaire dont le contenu est l'affichage des enregistrements de cette table, chacun étant précédé d'une case à cocher dont l'attribut value dépend de l'identifiant de l'enregistrement.

Formulaire Supprimer

MéthodeRécupérer les données

Comme pour l'affichage, nous récupérons les données de la base et nous les affectons à l'objet $liste.

1
// création de la requête
2
$requete = "SELECT * FROM auteurs";
3
4
// envoi de la requête
5
$listeAuteurs = $db->query($requete)->fetchAll(PDO::FETCH_OBJ);

MéthodeAfficher les données.

Le formulaire de suppression correspond à la page d'affichage à laquelle on ajoute des cases à cocher qui signalent les ressources à supprimer.

Pour le HTML, on reprend l'affichage que l'on encadre par un formulaire qui pointe sur lui-même.

1
<form action='' method='post'>
2
...
3
</form>

Chaque enregistrement est précédé d'une case à cocher.

L'attribut name est de type tableau. Exemple supp[ ]

L'attribut value vaut l'id de la ressource : value='<?php echo $auteur->id; ?>'

Ce qui permet de créer chaque case avec une valeur unique.

1
<input type='checkbox' name='supp[]' value='<?php echo $auteur->id; ?>' />

Ce qui donne :

1
<form action='' method='post'>
2
 <ul>
3
   <?php foreach ($listeAuteurs as $auteur) { ?>
4
   <li>
5
     <input type='checkbox' name='supp[]' value='<?php echo $auteur->id; ?>' />
6
     <?php echo $auteur->nom . ' ' . $auteur->prenom; ?>
7
   </li>
8
   <?php } ?>
9
 </ul>
10
 <div><input type='submit' value='supprimer' /></div>
11
</form>

MéthodeTraiter les données

Cette page faisant appel à elle-même pour le traitement, elle est donc appelée soit par l'utilisateur soit par le formulaire.

Nous devons vérifier dans quel cas nous nous trouvons :

1
if($_SERVER['REQUEST_METHOD'] == 'POST')
2
{
3
...
4
}

Il faut récupérer les variables envoyées par le formulaire et les nettoyer.

1
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
2

Le tableau contient uniquement les identifiants des cases cochées.

Chaque identifiant récupéré doit être supprimé de la table.

1
foreach ($_POST['supp'] as $id) {
2
  // création de la requête
3
  $sql = "DELETE FROM auteurs WHERE id='$id'";
4
  // envoi de la requête
5
  $db->exec($sql);
6
}

Les chaînes de caractères suivantes sont générées à chaque tour de boucle et affectées à la variable $sql qui est envoyée à la base de données :

1
"DELETE FROM auteurs WHERE id='17'"
2
"DELETE FROM auteurs WHERE id='18'"
3
"DELETE FROM auteurs WHERE id='19'"

Ce qui nous donne :

1
<?php
2
  // ouverture de la connexion
3
  ...
4
  // suppression des données
5
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
6
    // récupération des données
7
    $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
8
    // suppression des enregistrements
9
    foreach ($_POST['supp'] as $id) {
10
      // création de la requête
11
      $sql = "DELETE FROM auteurs WHERE id='$id'";
12
      // envoi de la requête
13
      $db->exec($sql);
14
    }
15
  }
16
  // création de la requête
17
  $requete = "SELECT * FROM auteurs";
18
  // envoi de la requête
19
  $listeAuteurs = $db->query($requete)->fetchAll(PDO::FETCH_OBJ);
20
?>

HTML généré

HTML généré - Formulaire Supprimer