Création de la page permettant la suppression des articles

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Pour supprimer un article, il faut prendre plusieurs choses en considérations :
  • Supprimer l'enregistrement de l'article en BD.
  • Supprimer le fichier associé à l'article dans le bon répertoire.
  • Supprimer les commentaires associés à l'article.
Nous créons donc un nouveau fichier nommé "supprimer-article.php" à partir du gabarit du dossier "admin". Si nous remontons sur le tutoriel concernant l'affichage des articles par catégorie "fichier : voir-categorie.php", on voit que nous avons effectué un lien qui transmet des informations à la page que nous nous apprêtons à créer..pour rappel, voici le lien en question :
<a href="supprimer-article.php?id='.$affiche['id'].'&rewrite='.$affiche['titre_rewrite'].'&cat='.$id.'"><img src="images/supprimer.png" alt="Supprimer"/></a>
Ce lien transmet :
  • L'identifiant de l'article.
  • Le titre ré écrit de l'article.
  • l’identifiant de la catégorie dont dépend l'article.
 
Le gabarit :
<?php include('../fonctions.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  <title>Supprimer un article</title> 
  <link href="style.css" rel="stylesheet" type="text/css"/>
</head>
 
<body>
 
<div id="moncadre">
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Supprimer un article</h1>
<!--ici notre code-->
</div>
<?php include('footer.php');?>
</div>
 
</body>
</html>
Dans un premier temps, on créé un mini formulaire avec un simple bouton "Supprimer" qui re-transmet les informations qui transites par l'url :
<form action="supprimer-article.php?id=<?php echo $_GET["id"];?>&rewrite=<?php echo ''.$_GET["rewrite"].'';?>&cat=<?php echo $_GET["cat"];?>" method="post">
  <p><input name="Supprimer" value="Supprimer l'article N°<?php echo $id;?>" type="submit" /></p>
</form>
Au dessus de ce formulaire commence le code PHP.
 
On récupère quelques données qui transites par l'url, on initialise le masquage du formulaire, on se connecte à la BD, on informe :
<?php
$id = $_GET["id"];
$categorie = $_GET["cat"];
 
$masquer_formulaire = 0;
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
 
echo '<div class="cadre"><p>Attention : vous êtes sur le point de supprimer l\'article « '.$_GET["rewrite"].' » ainsi que le ou les commentaires associés à cet article!!</p></div>';
L'action de "Supprimer" a été faite, on va chercher le nom du dossier qui correspond à l'article :
if(isset($_POST["Supprimer"]))
{
    //on va chercher le nom du dossier correspondant à l'article
    $dossier_article = mysql_query("SELECT titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($categorie)."'");
    while($nom_dossier = mysql_fetch_array($dossier_article))
    {
        $nom_du_dossier=$nom_dossier['titre_rewrite'];
    }
On supprime l'article en BD :
    //On efface l'article
    $efface_donnees = mysql_query("DELETE FROM CONTENU WHERE id = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_donnees) {
        die('Requête invalide : ' . mysql_error());
    }
On supprimer les commentaires associés à l'article :
    //On efface les commentaires associés à l'article
    $efface_commentaire = mysql_query("DELETE FROM COMMENTAIRE WHERE id_page = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_commentaire) {
        die('Requête invalide : ' . mysql_error());
    }
Tout c'est bien passé, on supprimer le fichier qui correspond à l'article :
    else {
        //Tout est ok, on vérifie que le fichier correspondant à l'article est présent sur le serveur
        if (file_exists('../'.$nom_du_dossier.'/'.$_GET["rewrite"].'')) {
            //on supprime le fichier correspondant à l'article
            unlink('../'.$nom_du_dossier.'/'.$_GET["rewrite"].'');
            //on informe que l'article est supprimé
            echo '<div class="ok"><p>L\'article « '.$_GET["rewrite"].' » à &eacute;t&eacute; supprim&eacute; avec succès. <a href=index.php>Retour à l\'administration.</a></p></div>';
        }
Si un truc cloche, on informe le webmaster :
        else{
            echo '<div class="erreur">Le fichier "'.$_GET["rewrite"].'" ou le dossier "'.$nom_du_dossier.'" n\'existe pas sur le serveur!</div>';
            echo '../'.$nom_du_dossier.'/'.$_GET["rewrite"].'';
        }
        //On ferme else
    }
Enfin, on ferme tout et on cache le formulaire :
    //on masque le formulaire
    $masquer_formulaire=1;
    // On ferme isset($_POST["Supprimer"]))
}
//on masque le formulaire si tout est ok
if($masquer_formulaire == 0) {
?>
Pour finir, en dessous du formulaire, on ajoute l'accolade qui permet de cacher ou non le formulaire :
<?php
//masquage du formulaire
}
?>
Le fichier "supprimer-article.php" dans son ensemble :
<?php
include('../fonctions.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
 
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  <title>Supprimer un article</title> 
  <link href="style.css" rel="stylesheet" type="text/css"/>
 
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<h1>Supprimer un article</h1>
 
<?php
$id = $_GET["id"];
$categorie = $_GET["cat"];
 
$masquer_formulaire = 0;
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
 
echo '<div class="cadre"><p>Attention : vous êtes sur le point de supprimer l\'article « '.$_GET["rewrite"].' » ainsi que le ou les commentaires associés à cet article!!</p></div>';
 
if(isset($_POST["Supprimer"]))
{
    //on va chercher le nom du dossier correspondant à l'article
    $dossier_article = mysql_query("SELECT titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($categorie)."'");
    while($nom_dossier = mysql_fetch_array($dossier_article))
    {
        $nom_du_dossier=$nom_dossier['titre_rewrite'];
    }
 
    //On efface l'article
    $efface_donnees = mysql_query("DELETE FROM CONTENU WHERE id = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_donnees) {
        die('Requête invalide : ' . mysql_error());
    }
    //On efface les commentaires associés à l'article
    $efface_commentaire = mysql_query("DELETE FROM COMMENTAIRE WHERE id_page = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_commentaire) {
        die('Requête invalide : ' . mysql_error());
    }   
    else {
        //Tout est ok, on vérifie que le fichier correspondant à l'article est présent sur le serveur
        if (file_exists('../'.$nom_du_dossier.'/'.$_GET["rewrite"].'')) {
            //on supprime le fichier correspondant à l'article
            unlink('../'.$nom_du_dossier.'/'.$_GET["rewrite"].'');
            //on informe que l'article est supprimé
            echo '<div class="ok"><p>L\'article « '.$_GET["rewrite"].' » à &eacute;t&eacute; supprim&eacute; avec succès. <a href=index.php>Retour à l\'administration.</a></p></div>';
        }
        else{
            echo '<div class="erreur">Le fichier "'.$_GET["rewrite"].'" ou le dossier "'.$nom_du_dossier.'" n\'existe pas sur le serveur!</div>';
            echo '../'.$nom_du_dossier.'/'.$_GET["rewrite"].'';
        }
        //On ferme else
    }
    //on masque le formulaire
    $masquer_formulaire=1;
    // On ferme isset($_POST["Supprimer"]))
}
//on masque le formulaire si tout est ok
if($masquer_formulaire == 0) {
?>
 
<form action="supprimer-article.php?id=<?php echo $_GET["id"];?>&rewrite=<?php echo ''.$_GET["rewrite"].'';?>&cat=<?php echo $_GET["cat"];?>" method="post">
  <p><input name="Supprimer" value="Supprimer l'article N°<?php echo $id;?>" type="submit" /></p>
</form>
 
<?php
//masquage du formulaire
}
?>
 
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Voir/déposer un commentaire (0) | Signaler un problème