Création de la page permettant la modification 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.
Nous allons maintenant voir comment modifier les articles. Comme d'habitude, nous partons du gabarit du dossier "admin" pour créer ce fichier que l'on va nommer "modifier-article.php" :
<?php
session_start();
$_SESSION['IsAuthorized']=true;
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>Modifier un article</title>
  <link href="style.css" rel="stylesheet" type="text/css"/>
  <script type="text/javascript" src="../ckeditor/ckeditor.js"></script>
 
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<h1>Modifier un article</h1>
<!--ici le code-->
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Étape 1 :

On créé dans un premier temps le formulaire permettant la modification des données. Dans l'objectif de raccourcir ce tutoriel, toutes les variables y sont directement intégrés :
<?php if(isset($message_ok)) echo $message_ok;
//On masque le formulaire
if($masquer_formulaire == 0) {
?>
<form action="#ok" method="post">
<?php if(isset($alerte_article_exist)) echo $alerte_article_exist;?>
<?php if(isset($alerte0)) echo $alerte0;?>
   <p>Titre de la page :<br/>
    <input name="titre" size="65" value="<?php echo $titre;?>" type="text"/>
   </p>
 
<?php if(isset($alerte1)) echo $alerte1;?>
  <p>Description de la page :<br/>
   <textarea name="description" rows="10" cols="50" ><?php echo $description;?></textarea>
  </p>
 
  <?php if(isset($alerte2)) echo $alerte2;?>
  <p>Contenu de la page :<br/>
   <textarea name="contenu" rows="10" cols="50" ><?php echo $contenu;?></textarea>
<script type="text/javascript">
 CKEDITOR.replace( 'contenu',
 {
 	filebrowserBrowseUrl : '/ckfinder/ckfinder.html',
 	filebrowserImageBrowseUrl : '/ckfinder/ckfinder.html?type=Images',
 	filebrowserFlashBrowseUrl : '/ckfinder/ckfinder.html?type=Flash',
 	filebrowserUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files&currentFolder=/archive/',
 	filebrowserImageUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images&currentFolder=/cars/',
 	filebrowserFlashUploadUrl : '/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
 } 
 );
</script>
  </p>
 
  <?php if(isset($alerte3)) echo $alerte3;?>
  <p>Catégorie :<br/>
  <select name="cat">
  <option value="">Selectionnez une catégorie</option>
<?php
//On sélectionne les données pour créer le formulaire déroulant
$categorie = mysql_query("SELECT id,nom_categorie FROM CATEGORIES ORDER BY id ASC");
while($affiche = mysql_fetch_array($categorie))
{
	echo '<option value="'.$affiche['id'].'" ';
	if ($affiche['id']==$id_categorie) {echo "selected='selected'";}
	echo '>'.$affiche['nom_categorie'].'</option>';
}
?>
  </select>
  </p>
  <?php if(isset($alerte4)) echo $alerte4;?>
  <p>Afficher l article ? :<br/>
  <select name="valide">
  <option value="">Sélectionnez un choix</option>
  <option value="oui"<?php if ($valide=="oui") {echo "selected='selected'";}?>>Oui</option>
  <option value="non"<?php if ($valide=="non") {echo "selected='selected'";}?>>Non</option>
  </select>
  </p>
  <?php if(isset($alerte5)) echo $alerte5;?>
  <p>Afficher le système de commentaire ? :<br/>
  <select name="commentaire">
  <option value="">Sélectionnez un choix</option>
  <option value="oui" <?php if($commentaire=="oui"){echo "selected='selected'";}?>>Oui</option>
  <option value="non" <?php if($commentaire=="non"){echo "selected='selected'";}?>>Non</option>
  </select>
  </p>
<p>
   <input name="Valider" value="Valider" type="submit"/>
   <input name="Effacer" value="Effacer" type="reset"/>
 </p>
</form>
<?php
//Fin masque formulaire
}
?>
Étape 2 :

Dans le fichier permettant l'affichage des articles par catégorie "voir-categorie.php" nous avons créé des liens dont un qui transmet certaines données permettant la modification des articles. Pour rappel, voici le lien en question :
<a href="modifier-article.php?id='.$affiche['id'].'&rewrite='.$affiche['titre_rewrite'].'&cat='.$id.'"><img src="images/modifier.png" alt="Modifier"/></a>
Tout naturelement, nous récupérons ces données :
<?php
//on récupère tout ce qui est transmit par l'url
$id_transmit=$_GET['id'];
$numero_categorie_transmit = $_GET['cat'];
$nom_du_fichier_transmit = ''.$_GET['rewrite'].'';
On se connecte à la base de données et on initialise le masquage du formulaire :
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
//initialisation du masquage du formulaire
$masquer_formulaire = 0;
On sélectionne les données pour les afficher dans le formulaire :
//On sélectionne les données pour les afficher dans le formulaire
$page = mysql_query("SELECT * FROM CONTENU WHERE id='".mysql_real_escape_string($id_transmit)."'");
while($affiche = mysql_fetch_array($page))
{
    $id_categorie=$affiche['id_categorie'];
    $titre=$affiche['titre'];
    $description=nl2br($affiche['description']);
    $contenu=stripcslashes($affiche['texte']);
    $valide=$affiche['valide'];
    $commentaire=$affiche['commentaire'];
}
Étape 3 :

Le formulaire est validé, on passe au traitement des variables :
//Traitement du formulaire
if(isset($_POST["Valider"]))
{
    $titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
    $description = htmlspecialchars(stripcslashes($_POST["description"]));
    $contenu = stripcslashes($_POST["contenu"]);
    $categorie = $_POST["cat"];
    //Pour le pseudo rewrite
    $titre_rewrite = ''.OptimiseUrl($titre).'.php';
    $valide = $_POST["valide"];
    $commentaire = $_POST["commentaire"];
On vérifie si l'article (le titre) existe en BD :
    //On regarde si le titre existe déja. Si le titre na pas changé, on risque une erreur puisque la requête ci-dessous va chercher un titre qui correspond..c'est pour ça que l'on ajoute une recherche sur un identifiant différent.
        $article_exist = mysql_query("SELECT titre_rewrite FROM CONTENU WHERE titre_rewrite='".mysql_real_escape_string($titre_rewrite)."' AND id!='".mysql_real_escape_string($id_transmit)."'");
        $total = mysql_num_rows($article_exist);
        if($total >= 1){
        $alerte_article_exist ='<div class="erreur"><a name="ok"></a>Il existe déja un article portant ce titre.</div>';
        }
On vérifie les données du formulaire :
    //Vérification du formulaire
    else if(empty($titre)){
        $alerte0 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';
    }
    else if(empty($description)){
        $alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.</div>';
    }
    else if(empty($contenu)){
        $alerte2 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de contenu.</div>';
    }
    else if(empty($categorie)){
        $alerte3 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas sélectionné de catégorie.</div>';
    }
    else if(empty($valide)){
        $alerte4 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas sélectionné votre choix.</div>';
    }
    else if(empty($commentaire)){
        $alerte5 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas sélectionné votre choix.</div>';
    }
Tout est Ok, on va maintenant chercher le nom du dossier qui correspond à la catégorie dont dépend l'article au cas ou l'article change de répertoire. Pour rappel, quand un article est enregistré en BD, un fichier PHP est automatiquement créé. Si l'article est supprimé, modifié ou change de catégorie, il faut également pouvoir supprimer, modifié ou déplacer le fichier qui correspond à l'article...
    //Si tout est ok
    else
    {
/* On va chercher le nom du dossier (catégorie) au cas ou l'article change de repertoire */
        $dossier = mysql_query("SELECT titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($numero_categorie_transmit)."'");
        while($nom_transmit = mysql_fetch_array($dossier))
        {
            $nom_du_dossier_actuel=$nom_transmit['titre_rewrite'];
        }
        /*Ci dessous l'url du fichier actuel (article) à supprimer au cas ou l'article à changé de catégorie.         Note : On récupère l'url du fichier avant la modification en bd afin de comparer si l'article à changé de répertoire         */
        $url_du_fichier_actuel = '../'.$nom_du_dossier_actuel.'/'.$nom_du_fichier_transmit.'';
On passe maintenant à l'enregistrement des données :
 
        //On enregistre les données
        $result = mysql_query(" UPDATE CONTENU SET id_categorie='".mysql_real_escape_string($categorie)."', titre='".mysql_real_escape_string($titre)."', description='".mysql_real_escape_string($description)."', texte='".mysql_real_escape_string($contenu)."', titre_rewrite='".mysql_real_escape_string($titre_rewrite)."', valide='".mysql_real_escape_string($valide)."', commentaire='".mysql_real_escape_string($commentaire)."' WHERE id = '$id_transmit'");
 
        //Si il y a une erreur, on crie ^^
        if (!$result) {
            die('Requête invalide : ' . mysql_error());
        }
        else{
            //Si tout est ok, on informe le webmaster
            $message_ok = '<div class="ok"><a name="ok"></a>Page modifi&eacute;e avec succ&egrave;s! Redirection automatique en cours...<img src="images/loading.gif" alt="Loading"/></div>';
        //on masque le formulaire
        $masquer_formulaire=1;
Etape 4 :

Les données sont à présent enregistrés en BD, il faut maintenant vérifié si l'article à changé de titre et/ou de catégorie.
            /*             On va maintenant chercher le nom du dossier une fois de plus mais après enregistrement             */
            $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'];
            }
Cas 1 :

On vérifie si le fichier existe sur le serveur et si pour une raison indéterminé le fichier n'existe pas, on le créé :
            //----------------Cas 1- Le fichier n'existe pas--------------------------------------
            //Si pour une raison inconnu le fichier n'existe pas, on le créé
            if(!file_exists($url_du_fichier_actuel)){
                //On créé le nouveau fichier
                $fichier_a_ouvrir = fopen ('../'.$nom_du_dossier.'/'.$titre_rewrite.'', "w+");
                //on écrit le code php suivant
                fwrite($fichier_a_ouvrir,"<?php include('../page1.php');?>");
                //on ferme
                fclose ($fichier_a_ouvrir);
            }
Cas 2 :

Aucun changement de catégorie mais le titre a été modifié. On renomme simplement le fichier correspondant à l'article :
            //----------------------Cas 2 - Aucun changement de catégorie mais le titre a été modifié------------------------------------------
            //Si la catégorie est la même mais que le titre a été modifié
            else if($categorie == $numero_categorie_transmit && $nom_du_fichier_transmit != $titre_rewrite){
                //on teste dabord si le fichier existe (normalement oui)
                if(file_exists($url_du_fichier_actuel))
                {
                    //on renomme le fichier
                    rename ($url_du_fichier_actuel, '../'.$nom_du_dossier.'/'.$titre_rewrite.'');
                }
                else{
                    echo 'Impossible de renommer le fichier car il est inexistant!';
                }
            }
Cas 3 :

Si l'article change de catégorie, le fichier change de répertoire. Il faut donc supprimer le fichier correspondant à l'article de l'ancien répertoire (catégorie) puis le re créer dans la bonne catégorie :
            //-------------------------Cas 3 - L'article change de catégorie----------------------------------------
            //Si l'article change de catégorie, le fichier change de répertoire
            else if($categorie != $numero_categorie_transmit){
                //on supprime le fichier correspondant à l'article
                unlink($url_du_fichier_actuel);
                //puis on créé le nouveau fichier dans la nouvelle catégorie
                $fichier_a_ouvrir = fopen ('../'.$nom_du_dossier.'/'.$titre_rewrite.'', "w+");
                //on écrit le code php suivant
                fwrite($fichier_a_ouvrir,"<?php include('../page1.php');?>");
                //on ferme
                fclose ($fichier_a_ouvrir);
            }
Les changements sont à présent effectués, on redirige l'admin vers la catégorie dont dépend l'article modifié et on referme tout :
            //on redirige vers la catégorie correspondante
            echo '<script type="text/javascript"> window.setTimeout("location=(\'voir-categorie.php?id='.$categorie.'\');",6000) </script>';
        }
        //On ferme else
    }
    //On ferme if(isset($_POST["Valider"]))
}
Voir/déposer un commentaire (0) | Signaler un problème