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
$sql = "SELECT * FROM auteurs";
3
4
// envoi de la requête
5
$statement = $db->prepare($sql);
6
$statement->execute();
7
$listeAuteurs = $statement->fetchAll();

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='<?= $auteur->id; ?>'

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

1
<input type='checkbox' name='supp[]' value='<?= $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='<?= $auteur->id; ?>' />
6
     <?= $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
}

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

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

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

Ce qui nous donne :

1
<?php
2
  // ouverture de la connexion
3
  ...
4
5
  // suppression des données
6
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
7
    // création de la requête
8
    $sql = "DELETE FROM auteurs WHERE id=:id";
9
    $statement = $db->prepare($sql);
10
    // envoi des requêtes
11
    foreach ($_POST['supp'] as $id) {
12
      $statement->execute(['id' => $id]);
13
    }
14
  }
15
16
  // création de la requête
17
  $sql = "SELECT * FROM auteurs";
18
19
  // envoi de la requête
20
  $statement = $db->prepare($sql);
21
  $statement->execute();
22
  $listeAuteurs = $statement->fetchAll();
23
?>

HTML généré

HTML généré - Formulaire Supprimer