Gestion des commentaires

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.
Comme vous le savez (ou peut être pas), nous allons inclure un système de commentaires au site et nous allons donc maintenant créer une page qui va nous permettent d'afficher les 25 derniers commentaires.
 
Nous créons un nouveau fichier nommé "commentaire.php" toujours à partir du gabarit :
<!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" />
<link href="style.css" rel="stylesheet" type="text/css"/>
<title>Commentaire</title>
</head>
 
<body>
 
<div id="moncadre">
<?php include('menu.php');?>
<div class="cadrecentrale">
<h1>Commentaire</h1>
<!--code ici-->
</div>
<?php include('footer.php');?>
</div>
 
</body>
 
</html>
Cette page doit nous permettre de voir en un clin d’œil les commentaires en attentes, validés, black-listés, d'accéder à une page permettant la modification/suppression/validation/black-liste du commentaire et d’accéder à une page permettant de répondre.
Nous allons "caser" tout ces éléments dans un simple tableau XHTML dont le style CSS associé à ce tableau se trouve dans le fichier "style.css" du dossier "admin" :
td {
text-align: center;
border: 1px solid #FFFFFF;
background-color:#FBFBFB ;
color:#000000;
}
.hauttd {
text-align: center;
font-weight: bold;
background-color:#ECFAFF;
}
.attentetd {
background-color: #FBFBFB;
}
.bannitd {
background-color: #000;
color: #FFF;
}
.validertd{
background-color: #669900;
}
Note : si je vous montre le style css associé au tableau, c'est pour bien comprendre la mise en forme qui va suivre .
Sous le "<h1>", on se fait un petit mémo :
<span style="border:1px solid black;margin:5px;padding:5px;" class="attentetd">En attente</span>
<span style="border:1px solid black;margin:5px;padding:5px;" class="validertd">Valider</span>
<span style="border:1px solid black;margin:5px;padding:5px;" class="bannitd">Banni</span>
On va chercher les info. en BD :
<?php
include('../fonctions.php');
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
//On sélectionne les données des catégories
$result = mysql_query("SELECT id,id_page,pseudo,date,validation FROM COMMENTAIRE ORDER BY id DESC LIMIT 25");
Si rien, on informe le webmaster :
//Si rien, on informe le webmaster
if(mysql_num_rows($result) == 0)
{
    echo '<div class="cadre"><p>Aucun commentaire pour le moment!</p></div>';
}
Si notre table "COMMENTAIRE" contient quelque chose, on affiche nos données en créant le début du tableau XHTML :
//Il y a quelque chose, on affiche
else {
 
    echo '<table style="width: 100%;" cellpadding="2" cellspacing="2"> <tbody>     <tr>     <td class="hauttd">Pseudo/Date</td>     <td class="hauttd">Modifier/valider</td>     <td class="hauttd">Répondre</td>     </tr>';
Ceci fait, on boucle sur les éléments trouvés et en fonction du statut du commentaire, on change la couleur de la cellule du tableau (<td></td>) :
    while($affiche = mysql_fetch_array($result))
    {
        //On attribue une couleur différente selon le statut
        if($affiche['validation'] == 0){$td='<td class="attentetd">';}
        if($affiche['validation'] == 1){$td='<td class="validertd">';}
        if($affiche['validation'] == 2){$td='<td class="bannitd">';}
On affiche les données et on effectue un lien (lien image) vers une futur page pour modifier le commentaire :
        //On affiche les données
        echo '<tr>'.$td.'Commentaire de '.$affiche['pseudo'].' déposé le '.convertit_date($affiche['date']).'</td>     '.$td.'<a href="modifier-commentaire.php?id='.$affiche['id'].'&page='.$affiche['id_page'].'&statut='.$affiche['validation'].'"><img src="images/modifier.png" alt="Modifier"/></a></td>     '.$td.'';
On effectue un second lien (lien image) vers une futur page pour répondre aux commentaires.
Pour répondre à un commentaire il faut 2 conditions :
  1. Qu'il soit validé au préalable.
  2. Que ce ne soit pas l'admin. qu'il l'est posté.
        //Si c'est l'admin, il ne peut se répondre à lui même donc on bloque l'image
        //Si le commentaire na pas été validé, on ne peut pas répondre également
        if($affiche['pseudo']!=$pseudo_admin AND $affiche['validation']==1){
            echo '<a href="repondre-commentaire.php?id='.$affiche['id'].'&page='.$affiche['id_page'].'&pseudo='.$affiche['pseudo'].'"><img src="images/repondre.png" alt="Répondre"/></a>';
        }
Puis on ferme tout :
        echo '</td></tr>';
    }
    echo '</tbody></table>';
    //On ferme else
}
?>
Si vous ne l'avez pas remarqué, une nouvelle fonction est utilisé dans ce code "convertit_date()" et cette fonction permet d'afficher la date en version textuel du dépôt du commentaire. On ouvre donc le fichier des fonctions "fonctions.php" et on y insère le code suivant :
/*fonction pour convertir un timestamp en date française le jours et le mois étant écrit tout en minuscule, on ajoute "ucwords" qui transforme la première lettre de chaque mot en majuscule */
function convertit_date($timestamp_actuel) {
    setlocale(LC_TIME,'fr_FR','french','French_France.1252','fr_FR.ISO8859-1','fra');
    return ucwords(strftime("%A %d %B %Y", $timestamp_actuel));
}
Le fichier "commentaire.php" dans son ensemble :
<!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" />
<link href="style.css" rel="stylesheet" type="text/css"/>
<title>Commentaire</title>
 
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<h1>Commentaire</h1>
<span style="border:1px solid black;margin:5px;padding:5px;" class="attentetd">En attente</span>
<span style="border:1px solid black;margin:5px;padding:5px;" class="validertd">Valider</span>
<span style="border:1px solid black;margin:5px;padding:5px;" class="bannitd">Banni</span>
<?php
include('../fonctions.php');
//On se connecte à la base de données
include('../connexion_bd.php');
connexion_bd();
//On sélectionne les données des catégories
$result = mysql_query("SELECT id,id_page,pseudo,date,validation FROM COMMENTAIRE ORDER BY id DESC LIMIT 25");
//Si rien, on informe le webmaster
if(mysql_num_rows($result) == 0)
{
    echo '<div class="cadre"><p>Aucun commentaire pour le moment!</p></div>';
}
//Il y a quelque chose, on affiche
else {
 
    echo '<table style="width: 100%;" cellpadding="2" cellspacing="2"> <tbody>     <tr>     <td class="hauttd">Pseudo/Date</td>     <td class="hauttd">Modifier/valider</td>     <td class="hauttd">Répondre</td>     </tr>';
    while($affiche = mysql_fetch_array($result))
    {
        //On attribue une couleur différente selon le statut
        if($affiche['validation'] == 0){$td='<td class="attentetd">';}
        if($affiche['validation'] == 1){$td='<td class="validertd">';}
        if($affiche['validation'] == 2){$td='<td class="bannitd">';}
        //On affiche les données
        echo '<tr>'.$td.'Commentaire de '.$affiche['pseudo'].' déposé le '.convertit_date($affiche['date']).'</td>     '.$td.'<a href="modifier-commentaire.php?id='.$affiche['id'].'&page='.$affiche['id_page'].'&statut='.$affiche['validation'].'"><img src="images/modifier.png" alt="Modifier"/></a></td>     '.$td.'';
        //Si c'est l'admin, il ne peut se répondre à lui même donc on bloque l'image
        //Si le commentaire na pas été validé, on ne peut pas répondre également
        if($affiche['pseudo']!=$pseudo_admin AND $affiche['validation']==1){
            echo '<a href="repondre-commentaire.php?id='.$affiche['id'].'&page='.$affiche['id_page'].'&pseudo='.$affiche['pseudo'].'"><img src="images/repondre.png" alt="Répondre"/></a>';
        }
        echo '</td></tr>';
    }
    echo '</tbody></table>';
    //On ferme else
}
?>
 
 
</div>
 
<?php include('footer.php');?>
 
</div>
 
</body>
 
</html>
Voir/déposer un commentaire (0) | Signaler un problème