Système de commentaire PHP

Système de commentaire PHP - PHP - Programmation

Marsh Posté le 05-07-2010 à 14:25:11    

Bonjour, j'ai un système de commentaire en PHP dans lequel j'aimerai ajouter une fonctionnalité de réponse à un post en particulier, c'est à dire la possibilité de pouvoir répondre à quelqu'un et faire en sorte d'afficher cette réponse juste au dessous de son post.
J'ai une table commentaires qui contient les champs suivants : id, nom, commentaire, date et un champs post_id qui prend la valeur de l'id du commentaire auquel on répond.
Jusque là pas de problème et lorsque j'affiche les commentaires la réponse vient bien se placer au dessous du post auquel on répond.
Cependant si l'on répond de nouveau à une réponse, là cette réponse vient se placer à la fin de la liste des commentaires.
Voici mon script pour afficher les commentaires, je suis bien conscient de l'erreur qui cause le problème mais je n'arrive pas à trouver la bonne méthode pour pouvoir répondre et aux commentaires et aux réponses de commentaires :  

Code :
  1. $req = $bdd->prepare('SELECT * FROM commentaires');
  2.   $req->execute();
  3.   while($data = $req->fetch(PDO::FETCH_OBJ))
  4.   {
  5.     if($data->post_id==0)
  6.     {
  7.       echo '<div class="commentaires">';
  8.       echo '<p>'.$data->nom.'</p><br />';
  9.       echo '<p>'.$data->commentaire.'</p><br />';
  10.       echo '</div>';
  11.     }
  12.     $req2 = $bdd->prepare('SELECT * FROM commentaires WHERE post_id=:id');
  13.     $req2->execute(array('id'=>$data->id));
  14.     while($data2 = $req2->fetch(PDO::FETCH_OBJ))
  15.     {
  16.       echo '<div class="reponse">';
  17.       echo '<p>'.$data2->nom.'</p><br />';
  18.       echo '<p>'.$data2->commentaire.'</p><br />';
  19.       echo '</div>';
  20.     }
  21.   }


 
Quelqu'un pourrait-il me donner un coup de main ?
Merci.

Reply

Marsh Posté le 05-07-2010 à 14:25:11   

Reply

Marsh Posté le 05-07-2010 à 14:48:22    

pourquoi créer un systeme complet avec bdd et tout ? [:cerveau mlc]  
 
T'es au courant que les commentaires ça s'ecrit // ou /* */ ? [:naunaud128]


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 05-07-2010 à 14:53:17    

Euh "pourquoi créer un système complet avec bdd et tout ?" tu fais comment pour stocker 15000 commentaires sans bdd ?  et tu me parles de commentaires à écrire dans la code avec des // ou des /* */, t'as pas du comprendre la question.... pour écrire des trucs pareil la prochaine fois économise ton clavier!

Reply

Marsh Posté le 05-07-2010 à 15:13:47    

Je sais, j'avais envie de faire l'emmerdeur pour une fois pour un finisterien comme moi :o
 
Désolé [:hank hullet-derire]


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 05-07-2010 à 15:47:52    

Vu ce que tu veux faire, il n'y a que deux solutions :  
1) une fonction récursive.
2) une boucle et l'utilisation des tableaux (ou d'objets selon tes habitudes) pour recréer l'arborescence des messages avant de commencer à afficher les données.
 
En français, une fonction récursive, c'est une fonction qui est capable de s'appeler elle même.
 
La première méthode à l'avantage de consommer moins de mémoire du côté de php.
La seconde à l'avantage de nécessiter beaucoup moins de requêtes sql et donc d'être plus rapide.

Reply

Marsh Posté le 05-07-2010 à 15:50:46    

Salut omega, merci pour ta réponse. Comment écrirais tu cette fonction par exemple, parce que là je ne vois pas trop comment faire.
Merci.

Reply

Marsh Posté le 05-07-2010 à 16:15:04    

pense a PDO::FETCH_GROUP t'auras pas besoin de faire 2 requêtes

Reply

Marsh Posté le 05-07-2010 à 16:28:40    

function test($id){
//la requette sur l'id
//si des résultats alors on boucle
//pour chacun, on l'affiche puis on appelle la fonction "test" avec l'id de la réponse courante
//fin de la boucle
// fin de la fonction
}
 
 
Voilà pour le principe de base de la fonction récursive.
 
 
stealth35 > A ma connaissance PDO::FETCH_GROUP ne fait pas de récursif. C'est bon si on a juste un niveau de regroupement, quand on en a deux ou plus, ça ne marche plus


Message édité par omega2 le 05-07-2010 à 16:32:52
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed