Suppression des catégories

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.
Nous allons voir maintenant comment supprimer une catégorie.

Étape 1 :

On ouvre le fichier des fonctions "fonctions.php" et on y insère le code suivant :
//fonction pour supprimer un dossier et son contenu
function advRmDir( $dir )
{
    // ajout du slash a la fin du chemin s'il n'y est pas
    if( !preg_match( "#/^.*/$/#", $dir ) ) $dir .= '/';
 
    // Ouverture du répertoire demande
    $handle = @opendir( $dir );
 
    // si pas d'erreur d'ouverture du dossier on lance le scan
    if( $handle != false )
    {
        // Parcours du répertoire
        while( $item = readdir($handle) )
        {
            if($item != "." && $item != "..")
            {
                if( is_dir( $dir.$item ) )
                advRmDir( $dir.$item );
                else unlink( $dir.$item );
            }
        }
        // Fermeture du répertoire
        closedir($handle);
        //pour free qui n'efface pas les dossiers, on renomme le dossier
        //rename($dir,"../supprime-moi");
        // suppression du répertoire
        $res = rmdir( $dir );
    }
    else $res = false;
    return $res;
}
Cette fonction permet d'explorer et de supprimer un dossier ainsi que son contenu.
Vous pouvez voir en fin de la fonction le code suivant :
        //pour free qui n'efface pas les dossiers, on renomme le dossier
        //rename($dir,"../supprime-moi");
        // suppression du répertoire
        $res = rmdir( $dir );
Pour la création du site sous WampServer, on utilise la fonction rmdir() pour supprimer intégralement le dossier visé. Sous "free.fr", cette fonction est interdite alors pour pallier à ce manque, nous utilisons la fonction rename() qui comme son nom l'indique, permet de renommer un dossier.
Souvenez vous bien que si vous utilisez cette fonction sous free.fr, vous devez impérativement intervertir les 2 dernières fonctions comme ci-dessous :
        //pour free qui n'efface pas les dossiers, on renomme le dossier
        rename($dir,"../supprime-moi");
        // suppression du répertoire
        //$res = rmdir( $dir );
Étape 2 :

Ceci fait, nous allons maintenant créer le fichier qui va nous permettre de supprimer les catégories. Si nous revenons sur la partie concernant la page d'accueil de l'administration, on constate la présence du lien suivant :
<a href="supprimer-categorie.php?id='.$affiche['id'].'&rewrite='.$affiche['titre_rewrite'].'"><img src="images/supprimer.png" alt="Supprimer"/></a>
Le fichier que nous allons créer à partir du gabarit du dossier admin va donc ce nommer "supprimer-categorie.php" et va nous permettre de faire transiter par l'url l'identifiant et le titre ré écrit de la catégorie.

Étape 3 :

Récupération des données et vérifications.
Avant de supprimer une catégorie, nous devons vérifier que celle-ci est vide de tout article car il serait dommage de perdre bêtement des articles. Dans la foulée, on met en place le formulaire qui va nous permettre de supprimer la catégorie.
<!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 une cat&eacute;gorie</title>
  <link href="style.css" rel="stylesheet" type="text/css"/>
 
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<h1>Supprimer une cat&eacute;gorie</h1>
 
<?php
$id = $_GET["id"];
 
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
include('../fonctions.php');
 
//On vérifie que la catégorie ne comporte aucun article
$result = mysql_query("SELECT id_categorie FROM CONTENU WHERE id_categorie = $id");
if(mysql_num_rows($result) != 0)
{
    echo '<div class="erreur"><p>Cette cat&eacute;gorie comporte actuellement un ou des articles! Il vous est donc impossible de la supprimer.<br/><a href="javascript:history.back()">Retour page pr&eacute;c&eacute;dente</a></p></div>';
}
?>
 
<div class="cadre">Attention, vous êtes sur le point de supprimer la catégorie « <?php echo $_GET["rewrite"];?> »!</div>
<form action="supprimer-categorie.php?id=<?php echo $id;?>&rewrite=<?php echo $_GET["rewrite"];?>" method="post">
  <p><input name="Supprimer" value="Supprimer la cat&eacute;gorie N°<?php echo $id;?>" type="submit" /></p>
</form>
 
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Étape 4 :

Le contrôle est "Ok", on supprime la catégorie de la base de données :
if(isset($_POST["Supprimer"]))
{
    //On efface la catégorie
    $efface_donnees = mysql_query("DELETE FROM CATEGORIES WHERE id = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_donnees) {
        die('Requête invalide : ' . mysql_error());
    }
Étape 5 :

La catégorie étant supprimé, on supprime maintenant le dossier correspondant :
    else {
        //url du dossier à supprimer
        $dir = '../'.$_GET["rewrite"].'';
        //on supprime le dossier et son contenu 
        advRmDir($dir);
        //on informe que le message est supprimé
        echo '<div class="ok"><p>La cat&eacute;gorie « '.$_GET["rewrite"].' » à &eacute;t&eacute; supprim&eacute; avec succès. <a href=index.php>Retour à l\'administration.</a></p></div>';
        //On ferme else
    }
    // On ferme isset($_POST["Supprimer"]))
}
?>
Le fichier "supprimer-categorie.php" dans son ensemble avec l'ajout d'un masquage du formulaire :
<!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 une cat&eacute;gorie</title>
  <link href="style.css" rel="stylesheet" type="text/css"/>
 
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<h1>Supprimer une cat&eacute;gorie</h1>
 
<?php
$id = $_GET["id"];
$masquer_formulaire = 0;
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
include('../fonctions.php');
 
//On vérifie que la catégorie ne comporte aucun article
$result = mysql_query("SELECT id_categorie FROM CONTENU WHERE id_categorie = $id");
if(mysql_num_rows($result) != 0)
{
    echo '<div class="erreur"><p>Cette cat&eacute;gorie comporte actuellement un ou des articles! Il vous est donc impossible de la supprimer.<br/><a href="javascript:history.back()">Retour page pr&eacute;c&eacute;dente</a></p></div>';
    //on masque le formulaire
    $masquer_formulaire=1;
}
 
if(isset($_POST["Supprimer"]))
{
    //On efface la catégorie
    $efface_donnees = mysql_query("DELETE FROM CATEGORIES WHERE id = $id");
 
    //Si il y a une erreur, on crie ^^
    if (!$efface_donnees) {
        die('Requête invalide : ' . mysql_error());
    }
    else {
        //url du dossier à supprimer
        $dir = '../'.$_GET["rewrite"].'';
        //on supprime le dossier et son contenu
        advRmDir($dir);
 
        //on informe que le message est supprimé
        echo '<div class="ok"><p>La cat&eacute;gorie « '.$_GET["rewrite"].' » à &eacute;t&eacute; supprim&eacute; avec succès. <a href=index.php>Retour à l\'administration.</a></p></div>';
        //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) {
?>
 
<div class="cadre">Attention, vous êtes sur le point de supprimer la catégorie « <?php echo $_GET["rewrite"];?> »!</div>
<form action="supprimer-categorie.php?id=<?php echo $id;?>&rewrite=<?php echo $_GET["rewrite"];?>" method="post">
  <p><input name="Supprimer" value="Supprimer la cat&eacute;gorie N°<?php echo $id;?>" type="submit" /></p>
</form>
 
<?php
//masquage du formulaire
}
?>
 
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Interdiction de supprimer la catégorie
Supprimer une catégorie
Catégorie supprimé
Voir/déposer un commentaire (0) | Signaler un problème