Création de la page permettant la rédaction 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 créer la page qui permet de rédiger les articles.

Cette page doit disposer au minimum :
  • D'un champ titre.
  • D'un champ description.
  • D'un champ pour le contenu.
  • D'une liste déroulante pour sélectionner la catégorie.
A cela, nous allons ajouter en plus une option permettant de mettre l'article en attente ou pas et une seconde option permettant d'afficher ou pas le système de commentaires sur l'article.

Toujours à partir du gabarit du dossier "admin", nous créons une page nommé "ajouter-page.php". Comme nous allons utiliser le logiciel CKEditor comme éditeur de texte et CKFinder pour la partie upload, on intègre directement la sessions pour éviter les intrusions ainsi que l'appel au Javascript.
<?php
session_start();
$IsAuthorized = true;
 
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
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>Ajouter 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>Ajouter un article</h1>
 
<!--code ici-->
 
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Ceci fait, nous allons mettre en place le formulaire pour l'enregistrement des données. Histoire de ne pas faire un tutoriel à rallonge, j'ai intégré directement toutes les variables d'erreurs à celui-ci :
<?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 if (!empty($_POST["titre"])) { echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES)); } ?>" type="text"/>
    </p>
 
    <?php if(isset($alerte1)) echo $alerte1;?>
    <p>Description de la page :<br/>
    <textarea name="description" rows="10" cols="50" ><?php
    if (!empty($_POST["description"])) {
        echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));
    }
    ?></textarea>
    </p>
 
    <?php if(isset($alerte2)) echo $alerte2;?>
    <p>Contenu de la page :<br/>
    <textarea name="contenu" rows="10" cols="50" ><?php
    if (!empty($_POST["contenu"])) {
        echo stripcslashes(htmlspecialchars($_POST["contenu"],ENT_QUOTES));
    }
    ?></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="">Sélectionnez une catégorie</option>
    <?php
    //On affiche les catégories
    $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(isset($_POST["cat"]) && $_POST["cat"]==$affiche['id']){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(isset($_POST["valide"]) && $_POST["valide"]=="oui"){echo "selected='selected'";}?>>Oui</option>
<option value="non" <?php if(isset($_POST["valide"]) && $_POST["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(isset($_POST["commentaire"]) && $_POST["commentaire"]=="oui"){echo "selected='selected'";}?>>Oui</option>
<option value="non" <?php if(isset($_POST["commentaire"]) && $_POST["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
}
?>
Concernant la partie permettant d'écrire le contenu de la page, soit :
    <p>Contenu de la page :<br/>
    <textarea name="contenu" rows="10" cols="50" ><?php
    if (!empty($_POST["contenu"])) {
        echo stripcslashes(htmlspecialchars($_POST["contenu"],ENT_QUOTES));
    }
    ?></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>
On demande par l'appel d'un Javascript que le textarea soit remplacé par le logiciel CKEditor tout en y intégrant le gestionnaire d'upload CKFinder.

On passe maintenant au traitement des données du formulaire (code à placer au dessus du formulaire):
<?php
//Initialisation du masquage du formulaire
$masquer_formulaire = 0;
//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"];
    $date = time();
    $valide = $_POST["valide"];
    $commentaire = $_POST["commentaire"];
    //Pour le pseudo rewrite
    $titre_rewrite = ''.OptimiseUrl($titre).'.php';
Bon, rien d'extraordinaire...

On vérifie ensuite que le titre de l'article n'existe pas déjà en base de données. Pour info, quand nous créons un article, son titre (Mon titre) ainsi que le nom de la page (mon-titre.php) sont enregistrés en BD et un fichier est créé automatiquement sur le serveur correspondant au nom de la page enregistré. Si le titre existe déjà en BD et si on ne vérifie pas au préalable, le fichier déjà présent sur le serveur sera écrasé par le nouveau.
    //On regarde si le titre existe déjà, sinon ça va écraser le fichier déjà présent
    $article_exist = mysql_query("SELECT titre_rewrite FROM CONTENU WHERE titre_rewrite='".mysql_real_escape_string($titre_rewrite)."'");
    $total = mysql_num_rows($article_exist);
    if($total >= 1){
        $alerte_article_exist ='<div class="erreur"><a name="ok"></a>Il existe déjà un article portant ce titre.</div>';
    }
Ce contrôle effectué, nous passons au contrôle 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>';
    }
Avant d'enregistrer, on va chercher le titre ré-écrit de la catégorie sélectionné pour enregistrer le fichier qui va être créé dans le bon dossier.
//Si tout est ok, on va chercher le titre ré écrit de la catégorie afin d'insérer le fichier au bon endroit
    else
    {
        $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'];
        }
Ceci fait, on enregistre les données du formulaire :
        // on enregistre les données
        $result = mysql_query("INSERT INTO CONTENU VALUES ( '', '".mysql_real_escape_string($categorie)."', '".mysql_real_escape_string($titre)."', '".mysql_real_escape_string($description)."', '".mysql_real_escape_string($contenu)."', '".mysql_real_escape_string($date)."', '".mysql_real_escape_string($titre_rewrite)."', '".mysql_real_escape_string($valide)."', '".mysql_real_escape_string($commentaire)."' ) ");
        //Si il y a une erreur, on crie ^^
        if (!$result) {
            die('Requête invalide : ' . mysql_error());
        }
Maintenant que les données sont enregistrés en BD, on passe à la création physique du fichier sur le serveur correspondant au titre de l'article :
        else{
            //----------------------Création du fichier pour le pseudo rewrite------------------------------------
            //On vérifie si le fichier existe..on ne sait jamais!
            if(!file_exists('../'.$nom_du_dossier.'/'.$titre_rewrite.''))
            {
                //comme il n'existe pas, on le créé
                $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);
            }
            //-----------------Le fichier est créé et existe maintenant sur le serveur-------------------------------
On informe le webmaster :
           //Si tout est ok, on informe le webmaster
            $message_ok = '<div class="ok"><a name="ok"></a>Page enregistr&eacute;e avec succ&egrave;s! Redirection automatique en cours...<img src="images/loading.gif" alt="Loading"/></div>';
On masque le formulaire :
            //on masque le formulaire
            $masquer_formulaire=1;
On redirige vers la catégorie qui à été sélectionné pour l'article et on ferme 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"]))
}
?>
Page pour la rédaction des articles

Voir/déposer un commentaire (0) | Signaler un problème