Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Lecture du tutoriel

Système de commentaire de news

Avatar
Auteur : Red
Créé : le 28/11/2005 22:04:46
Modifié : le 21/07/2008 23:57:22
Noter et commenter ce tutoriel
Imprimer ce tutoriel
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)
Bonjour les Zéros !


Je vais vous proposer de créer un système qui permet aux visiteurs de votre site d'écrire des commentaires concernant les news de votre site. Cela nécessite un peu de logique, un minimum de connaissances php/mysql, et surtout, cela vous permettra sûrement de mieux comprendre comment peut fonctionner un forum (du moins je l'espère ^^ ).

Prêts ? Bon, c'est parti.
Sommaire du chapitre :

Créer le système

É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 :

Citation
id (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 : HTML
1
<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 : HTML
1
<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
1
<?php mysql_close(); ?>


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 : Autre
1
<em><a href="commentaires.php?idnews=<?php echo $donnees['id']; ?>&amp;titrenews=<?php echo htmlspecialchars($donnees['titre']); ?>">Visionner les commentaires ? <!-- Atttention ! Ici, $donnees est l'array des news ! -->

Allez, un petit plus :
Code : PHP
1
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é !

Pour aller plus loin...

On ne va pas s'arrêter en si bon chemin ! Voici une liste d'idées d'élargissements possibles.




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.

Ceci étant mon premier tuto, j'espère qu'il vous a plu, aussi bien par son contenu que par sa présentation !
J'ai remarqué dans les commentaires qu'un certain nombre de personnes ont eu du mal à l'adapter. Les erreurs pouvant varier dans chaque cas, je n'ai pas pu répondre à tout le monde. Le conseil que je peux vous donner est d'être très rigoureux à propos de l'utilisation des variables. J'entends par là vérifier les noms, être certain de savoir à quoi elles correspondent, et surtout, ne pas calquer ce que je vous présente à ce que vous avez déjà réalisé, sinon cela ne marchera pas, vous pouvez en être sûr.
À bientôt.
Auteur : Red
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 392 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0195s (0.0079s)