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
$requete = "SELECT * FROM auteurs";
// envoi de la requête
$listeAuteurs = $db->query($requete)->fetchAll(PDO::FETCH_OBJ);
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='<?php echo $auteur->id; ?>'
Ce qui permet de créer chaque case avec une valeur unique.
<input type='checkbox' name='supp[]' value=' echo $auteur->id; ' />
Ce qui donne :
<form action='' method='post'>
<ul>
foreach ($listeAuteurs as $auteur) {
<li>
<input type='checkbox' name='supp[]' value=' echo $auteur->id; ' />
echo $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')
{
...
}
Il faut récupérer les variables envoyées par le formulaire et les nettoyer.
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
Le tableau contient uniquement les identifiants des cases cochées.
Chaque identifiant récupéré doit être supprimé de la table.
foreach ($_POST['supp'] as $id) {
// création de la requête
$sql = "DELETE FROM auteurs WHERE id='$id'";
// envoi de la requête
$db->exec($sql);
}
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 :
"DELETE FROM auteurs WHERE id='17'"
"DELETE FROM auteurs WHERE id='18'"
"DELETE FROM auteurs WHERE id='19'"
Ce qui nous donne :
<?php
// ouverture de la connexion
...
// suppression des données
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// récupération des données
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
// suppression des enregistrements
foreach ($_POST['supp'] as $id) {
// création de la requête
$sql = "DELETE FROM auteurs WHERE id='$id'";
// envoi de la requête
$db->exec($sql);
}
}
// création de la requête
$requete = "SELECT * FROM auteurs";
// envoi de la requête
$listeAuteurs = $db->query($requete)->fetchAll(PDO::FETCH_OBJ);
?>
HTML généré
