Dans le chapitre précédent nous avons créé la page d’édition d’article (disponible ICI, si vous ne l’avez pas encore lu). Dans ce dernier chapitre de la première partie de cette formation, nous allons voir créer une extension à la page edit.php pour ajouter la possibilité de supprimer les articles.
Comment supprimer un article depuis la page d’édition ?
Premièrement, reprenons notre fichier edit.php que nous avons créé dans le chapitre précédent.
Dans la partie de code où l’on affiche tous les articles, nous allons rajouter un bouton ‘Supprimer’ après celui ‘Editer’.
echo ('<a href=../article.php?id='.$data['ID'].'>'.$data['title'].'</a> | <a href=edit.php?id='.$data['ID'].'>Editer</a> | <a href=edit.php&id='.$data['ID'].'&delete=1>Supprimer</a><br /><br />');
Vous noterez que j’ai rajouter ‘&delete=1’ dans l’url. Cela car nous voulous que lorsque l’on clique sur ‘Supprimer’ cela ne supprime pas tout de suite l’article mais nous affiche un message de confirmation.
Nous allons aussi modifier deux autres lignes:
Celle qui vérifie que $_GET[‘id’] n’est pas vide par:
<?php if (!empty($_GET['id']) && empty($_GET['delete'])){
Pour être sur que $_GET[‘delete’] est vide et que donc c’est bien une modification que l’on veut faire et pas une suppression.
Et aussi la ligne du else {} qui va se transformer en else if (){} cela permet de rajouter une condition lorsque celle du if (){} n’est pas vérifiée.
Nous avons donc à la place du else {} ceci:
<?php }} else if (empty($_GET['id'])){
Finalement, on ajoute ce code:
if (!empty($_GET['id']) && $_GET['delete'] == 1){
}
dans lequel on placera les instructions à effectuer lorsque nous avons cliqué sur ‘Supprimer’
Ce code donne ceci:
<a href="edit.php?id=<?php echo ($_GET['id']);?>&delete=2"><button>Supprimer définitivement</button></a>
Ce dernier crée un bouton nommé ‘Supprimer définitivement’. Nous ajoutons un lien sur ce bouton avec l’ID de l’article que l’on veut supprimer ainsi que &delete=2. Précédemment nous avions mit &delete=1. Lorsque delete = 1 la page affiche le message de confirmation et lorsque delete = 2 cela exécutera le code que nous allons écrire pour supprimer les informations relatives à l’article dans la base de données.
Le code de la query pour supprimer un article est le suivant:
DELETE FROM articles WHERE id = $id
Mais avant d’exécuter ce code, il nous faut vérifier qu’un ID est spécifié dans la barre d’adresse ainsi que delete est égal à 2.
Transcrit en langage PHP, cela donne:
if (!empty($_GET['id']) && $GET['delete'] == 2){
Lorsque l’on assemble ces deux dernières parties, nous obtenons ceci:
if (!empty($_GET['id']) && $_GET['delete'] == 2){
$id = $_GET['id'];
$query = "DELETE FROM articles WHERE id = $id";
$delete = mysqli_query($conn, $query);
if ($delete){
echo "L'article a bien été supprimé <br />";
echo "<a href='../index.php'>Retour à l'acceuil</a>";
} else{
echo 'Une erreur est survenue lors de la suppression';
}
}
Maintenant nous devons tester ce code, pour valider son efficience:
On accède à ./admin/edit.php
Le bouton ‘Supprimer’ a bien été ajouté, on clique dessus
On valide le choix de supprimer l’article, au passage, le bouton ‘supprimer définitivement’ s’affiche normalement et ramène vers la bonne url.
Pour finir, lorsque l’on clique sur le bouton, cela affiche le message de validation indiquant que l’article a bien été supprimé. (Comme vous le voyez sur l’image, les deux messages ‘echo’ sont collés, j’ai corrigé ce problème dans la version finale du fichier). Notre code est donc 100% fonctionnel.
Voici donc le fichier edit.php final:
<?php
$conn = mysqli_connect('localhost', 'root','', 'cms');
if (!empty($_POST) && !empty($_GET['id'])){
$id = $_GET['id'];
$data[0] = $_POST['title'];
$data[1] = $_POST['subtitle'];
$data[2] = $_POST['content'];
$data[3] = $_POST['note'];
$query = "UPDATE articles
SET title = '$data[0]', subtitle = '$data[1]', content = '$data[2]', note = '$data[3]'
WHERE ID = $id
";
$update = mysqli_query($conn, $query);
if ($update){
echo 'Article mis à jour ! <br />';
} else {
echo 'Une erreur est arrivée';
}
}
if (!empty($_GET['id']) && $_GET['delete'] == 2){
$id = $_GET['id'];
$query = "DELETE FROM articles WHERE ```
id
``` = $id";
$delete = mysqli_query($conn, $query);
if ($delete){
echo "L'article a bien été supprimé <br />";
echo "<a href='../index.php'>Retour à l'acceuil</a>";
} else{
echo 'Une erreur est survenue lors de la suppression';
}
}
?>
<html>
<head>
<title>Page d'édition</title>
<meta charset="utf-8" />
</head>
<body>
<?php if (!empty($_GET['id']) && empty($_GET['delete'])){
$id = $_GET['id'];
$sql = "SELECT * FROM articles WHERE ID = '$id'";
$result = mysqli_query($conn, $sql);
while ($data = mysqli_fetch_assoc($result)){;?>
<form method="post">
<input type="text" placeholder="Titre" name="title" required value="<?php echo ($data['title']); ?>" /><br /><br />
<input type="text" placeholder="Sous-titre" name="subtitle" required value="<?php echo ($data['subtitle']); ?>" /><br /><br />
Contenu de l'article:<br />
<textarea name="content" required><?php echo ($data['content']); ?></textarea><br /><br />
1.<input type="radio" name="note" value="1" <?php if ($data['note'] == "1"){echo('checked');}else{}?>/><br /><br />
2.<input type="radio" name="note" value="2" <?php if ($data['note'] == "2"){echo('checked');}else{}?>/><br /><br />
3.<input type="radio" name="note" value="3" <?php if ($data['note'] == "3"){echo('checked');}else{}?>/><br /><br />
<input type="submit" name="submit" value="Mettre à jour"/>
</form>
<?php }} else if (empty($_GET['id'])){
$sql = "SELECT * FROM articles";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0){
while ($data = mysqli_fetch_assoc($result)){
echo ('<a href=../article.php?id='.$data['ID'].'>'.$data['title'].'</a> | <a href=edit.php?id='.$data['ID'].'>Editer</a> | <a href=edit.php?id='.$data['ID'].'&delete=1>Supprimer</a><br /><br />');
}
}
}
if (!empty($_GET['id']) && $_GET['delete'] == 1){ ?>
Voulez vous vraiment supprimer cet article ? <br /><br />
<a href="edit.php?id=<?php echo ($_GET['id']);?>&delete=2"><button>Supprimer définitivement</button></a>
<?php } ?>
</body>
</html>
C’était le dernier chapitre de la première partie de cette formation. Le code complet sera partagé mercredi prochain (à 15H). Sinon, vous pouvez toujours récupérer le code de chaque page sur chacun des septs articles de cette première partie.
La semaine prochaine nous attaquerons la seconde partie de la formation. Cette seconde partie est centrée sur le déploiement et l’optimisation. Par exemple nous avons 3 fichiers différents dans lesquels nous effectuons une connexion à la base de données avec toujours le même code. Pour cela, il sera plus simple d’avoir un fichier config.php dans lequel les variables sont définies. Au moins, si un jour vos informations de connexions changent, vous n’aurez pas à parcourir tous les fichiers pour chercher à quel endroit cela pose problème mais seulement à changer les valeurs des variables du fichier config.php.
N’hésitez pas à partager si vous pensez que cela peut aussi permettre d’aider d’autres personnes.
Merci pour votre présence sur le blog, on avance ensemble !