Leçons PHP - leçon 3.4 - Travail avec la base de données MySQL. Requêtes de suppression DELETE.
Dans la leçon précédente, nous avons vu comment ajouter de nouvelles méthodes à notre classe de gestion simpleCMS, maintenant ajoutons une méthode pour supprimer une entrée : delete().
Nous allons ajouter la méthode comme d’habitude :
public function delete($mid){ }
Comme vous le voyez, nous passons le paramètre $mid - l’ID de notre enregistrement. Si vous vous souvenez de la leçon précédente, nous avions décidé d’utiliser une autre méthode pour passer ce paramètre, directement via la requête GET, mais ici nous allons essayer une autre méthode.
Donc, la méthode est définie, écrivons maintenant le traitement dans le fichier index.php :
switch ($_GET['admin']){ case 'add': print $obj->display_admin(); // si la variable vaut 'add', afficher le formulaire d’ajout break; case 'update': print $obj->display_update(); // si la variable vaut 'update', afficher le formulaire de modification break; case 'delete': if($_GET['mid']){ // si la variable vaut 'delete', vérifier la présence de mid $obj->delete($_GET['mid']); // appeler la méthode de suppression print $obj->display_public(); // sinon afficher les messages }else{ print '<p>mid non sélectionné !</p>'; print $obj->display_public(); // afficher la liste des messages } break; default: print $obj->display_public(); // si la variable n’existe pas, afficher les messages }
Pour que tout fonctionne correctement et que le message soit supprimé, l’URL doit être :
http://test/index.php?admin=delete&mid=7
Dans ce cas, le message avec mid=7 sera supprimé. Pour cela, écrivons l’implémentation de la méthode delete() :
public function delete($mid){ mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error()); }
Analysons la requête mysql DELETE pour supprimer une entrée. On commence par le mot DELETE, suivi de FROM. Après FROM, on indique la table dont il faut supprimer des enregistrements (ATTENTION ! sans condition WHERE, toutes les entrées seront supprimées !), puis on indique la condition de suppression. Ici, nous ciblons l’entrée dont mid correspond au paramètre passé à la méthode. Enfin, on vérifie si la requête a réussi ou non.
Comme mentionné précédemment, notre méthode sera appelée quand l’URL contient deux paramètres : admin=delete&mid=7. Pour cela, ajoutons des liens sous chaque message, en modifiant la méthode display_public() :
public function display_public() { // méthode d’affichage des messages $content = ''; $sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // requête de sélection $result = mysql_query($sql) or die(mysql_error()); // on stocke le résultat de la requête while($row = mysql_fetch_array($result)){ // on traite chaque ligne avec mysql_fetch_array() $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // div contenant le message $content .= '<span class="time">#' . $row['mid'] . ' du ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; // affichage de la date et du titre $content .= '<p>' . $row['bodytext'] . '</p>'; // affichage du contenu du message $content .= '<p>'; $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">Modifier le message</a>'; // lien vers modification $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">Supprimer le message</a>'; // lien vers suppression $content .= '</p>'; $content .= '</div>'; // fin du div } $content .= '<p><a href="/index.php?admin=add">Ajouter un message</a></p>'; return $content; }
Maintenant, quand on clique sur le lien « supprimer », le message est bien supprimé comme prévu. On peut rapidement enlever les messages inutiles directement sur le site, sans passer par PhpMyAdmin.
Il reste à ajouter un petit espacement entre les liens modifier et supprimer :
.post a{ padding-right: 5px; }
Je pense que cette leçon est terminée, dans la prochaine leçon nous étudierons une autre commande importante pour sélectionner à partir de plusieurs tables : JOIN.