Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Étape 1 : prérequis
Il faut tout d'abord que vous ayez fait le TP
Système de news du cours officiel. Je m'en servirai comme base. De plus, il faut les mêmes connaissances, pas besoin de plus !
Étape 2 : préparation
Je vais vous expliquer brièvement ce qu'il va nous falloir pour créer ces scripts.
Attention, nous allons nous servir des variables de type $_POST et $_GET : si vous avez un peu de mal avec, révisez-les impérativement.
Dans un premier temps, il va falloir créer une nouvelle table SQL. Ensuite, une page php supplémentaire sera suffisante pour permettre d'écrire ou de lire les commentaires de la news en question. Et puis... c'est tout !
Vous devez faire un lien sur chaque news qui envoie sur la page commentaire.php avec une variable $_GET contenant l'id de la news, pour ne pas se mêler les pinceaux.
Étape 3 : réalisation
La table SQL
Vous allez créer une nouvelle table, on l'appellera commentaires (à défaut d'être original...). Celle-ci devra comporter quatre champs au strict minimum :
Citationid (int(11) ; auto_increment ; index) qui sera l'id du commentaire (ce qu'il faut toujours)
pseudo (varchar(255)) qui sera le pseudo laissé par le "commentateur"
message (text) qui sera le message laissé par le "commentateur"
idnews (int(11)) qui sera l'id de la news à laquelle sera lié le commentaire.
La page des commentaires
Notre table est créée, il nous faut à présent coder la page commentaires.php. Dans celle-ci, vous allez présenter votre page comme d'habitude et comme toutes les autres (c'est-à-dire mettre la balise <html>, <!DOCTYPE>, etc...).
L'adresse de la page devrait ressembler à ceci :
commentaires.php?idnews=1&titre=Recette de cuisine par exemple. On s'occupera des liens plus tard. On peut présenter vite fait bien fait la page, de cette manière comme d'une autre :
Code : HTML1 | <h1>Commentez la news : <q><?php echo $_GET['titrenews']; ?></q></h1>
|
Tout d'abord, la première chose à faire comme toujours : récupérer les informations contenues dans la table SQL.
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
mysql_connect("L'hôte", "Pseudo", "Mot de passe");
mysql_select_db("Nom de la base de données");
$infos = mysql_query('SELECT * FROM commentaires WHERE idnews=' . $_GET['idnews'] . ' ORDER BY id DESC')or die (mysql_error()); /*Ici on liste les commentaires dans l'ordre décroissant où le champ idnews est le même que celui de la variable contenue dans l'adresse de la page*/
while ($donnees = mysql_fetch_array($infos)) /*Une boucle pour écrire les données*/
{
$pseudo = stripslashes($donnees['pseudo']);
$message = stripslashes($donnees['message']);
?>
|
Jusque-là j'espère que tout va bien, il ne devrait pas y avoir trop de soucis avec les commentaires.

Allez, on y retourne, et cette fois-ci, avec du code html pour
écrire les données de manière cohérente.
Code : HTML1 | <p><strong><?php echo htmlspecialchars($pseudo); ?></strong> a commenté :<br /><?php echo nl2br(htmlspecialchars($message)); ?></p>
|
C'est pas trop difficile, ça ?

Il va faire pour chaque commentaire un paragraphe, avec en première ligne
Untel a commenté : et à la ligne d'en-dessous, le message en lui-même. Ensuite :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <?php
} /*On n'oublie surtout pas de fermer la boucle ! */
if (isset($_POST['message']) AND isset($_POST['pseudo']))
{
if($_POST['message'] != '' AND $_POST['pseudo'] != '')
{
$auteur = mysql_real_escape_string($_POST['pseudo']);
$message = mysql_real_escape_string($_POST['message']); // Si vous ne connaissez pas cette fonction, dites vous simplement qu'elle remplace addslashes()
$idcomment = $_POST['idcomment']; /* Tout ce charabia est une petite vérification : on fait attention à ce que l'auteur ait rempli tous les champs. Quels champs ? Ceux du formulaire que l'on va créer un peu plus bas :)*/
mysql_query ("INSERT INTO commentaires VALUES('', '" . $auteur . "', '" . $message . "', '" . $idcomment . "')")or die (mysql_error()); /* Là, on entre juste les données dans une nouvelle entrée de la table SQL...*/
echo "Merci d'avoir commenté !";
}
}
?>
|
Et à présent, la dernière partie de la page... le
formulaire ! Le plus simple, ouf.
Code : HTML 1
2
3
4
5
6
7
8
9
10 | <form method="post">
<p>
<label>Votre pseudo : <input type="text" name="pseudo" /><br/></label>
<label>Laissez votre message ! <br/>
<textarea name="message" rows="5" cols="25"></textarea><br/></label>
<br/><br/>
<input type="hidden" name="idcomment" value="<?php echo $_GET['idnews']; ?>" />
<input type="submit" value="Envoyer !" />
</p>
</form>
|
Là non plus, rien de bien méchant... Mais, pour conclure cette page, un dernier petit truc :
Code : PHP
Quelques changements sur la page news.php
Je ne veux pas chambouler votre script de news... alors on va rajouter uniquement une petite parcelle de code en en-tête ou en fin de news, selon votre goût :
Code : Autre1
| <em><a href="commentaires.php?idnews=<?php echo $donnees['id']; ?>&titrenews=<?php echo htmlspecialchars($donnees['titre']); ?>">Visionner les commentaires ? <!-- Atttention ! Ici, $donnees est l'array des news ! --> |
Allez, un petit plus :
Code : PHP1
2
3
4
5
6
7 | (<?php /*Combien a-t-on de commentaires sur cette news ?*/
$infos_com = mysql_query('SELECT COUNT(*) AS nb_com FROM commentaires WHERE idnews=' . $donnees['id']);
$donnees_com = mysql_fetch_array($infos_com);
$totalDesCommentaires = $donnees_com['nb_com'];
echo $totalDesCommentaires;
?>)
</a>
|
Et voilà, terminé !
On ne va pas s'arrêter en si bon chemin ! Voici une liste d'idées d'élargissements possibles.
- Créer un skin, parce que c'est pas joli joli, mais ça, je vous laisse vous en charger pour la cohérence du design vis-à-vis de votre site.
- Rajouter un champ timestamp à la table, pour savoir quand le commentaire a été posté.
- Créer un système de membres, pour autoriser uniquement les membres de votre site à poster, ou alors rajouter un champ modération à la table SQL, pour savoir si vous publiez le commentaire ou non. Pour cela, dans l'administration, vous devez créer un système de validation des commentaires... Tout ceci est bien entendu totalement facultatif.
- Ajouter un système de notation ? Afin d'évaluer la pertinence de la news. Rajoutez tout simplement un champ note, et une liste déroulante.
- Créer un système de smileys, ou de bbCode (mais là, c'est vraiment à vous de vous débrouiller
).
- Laissez vagabonder votre imagination...
Attention, j'édite cette partie pour vous signaler qu'il s'agit précisément d'un tutoriel théorique. En réalité, je vous déconseille d'employer une variable $_GET pour écrire le titre de la page (même si vous ne risquez pas grand-chose, ce n'est pas très propre et c'est modifiable par l'utilisateur). Vous pouvez faire une requête SQL pour récupérer le titre de la news où l'id est celui du $_GET. De plus, n'hésitez pas à vérifier votre id de news avec un is_numeric() afin d'éviter les failles de sécurité... L'important est de savoir adapter ce tuto à VOTRE script, pas de le copier-coller.