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.
Méthode : Ré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.
// création de la requête
$sql = "SELECT * FROM auteurs";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute();
$listeAuteurs = $statement->fetchAll();
Méthode : Afficher 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.
<form action='' method='post'>
...
</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.
<input type='checkbox' name='supp[]' value='= $auteur->id; ' />
Ce qui donne :
<form action='' method='post'>
<ul>
foreach ($listeAuteurs as $auteur) {
<li>
<input type='checkbox' name='supp[]' value='= $auteur->id; ' />
= $auteur->nom . ' ' . $auteur->prenom;
</li>
}
</ul>
<div><input type='submit' value='supprimer' /></div>
</form>
Méthode : Traiter 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 :
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
...
}
Le tableau $_POST contient uniquement les identifiants des cases cochées.
Chaque identifiant récupéré doit être supprimé de la table.
// création de la requête
$sql = "DELETE FROM auteurs WHERE id=:id";
$statement = $db->prepare($sql);
// envoi des requêtes
foreach ($_POST['supp'] as $id) {
$statement->execute(['id' => $id]);
}
Ce qui nous donne :
<?php
// ouverture de la connexion
...
// suppression des données
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// création de la requête
$sql = "DELETE FROM auteurs WHERE id=:id";
$statement = $db->prepare($sql);
// envoi des requêtes
foreach ($_POST['supp'] as $id) {
$statement->execute(['id' => $id]);
}
}
// création de la requête
$sql = "SELECT * FROM auteurs";
// envoi de la requête
$statement = $db->prepare($sql);
$statement->execute();
$listeAuteurs = $statement->fetchAll();
?>
HTML généré