Problème de réponse à un commentaire sur un système de comme

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de réponse à un commentaire sur un système de comme

Re: Problème de réponse à un commentaire sur un système de c

par Aiglichon » 04 sept. 2014, 17:45

C'est exactement ce que j'ai fais ! Ou alors on ne se comprends pas ^^

J'ai tout recommencé et c'est déjà un peu mieux qu'avant, j'arrive à afficher les commentaires dans l'ordre que je le souhaite. Les sous-commentaire s'affichent bien sous leurs commentaires parents, mais quand je veux répondre à un sous-commentaire il ne s'affiche pas... Je vais me pencher encore plus sur le problème mais je vais y arriver !

Voici mon code :

Code : Tout sélectionner

<?php //Affichage des commentaires $req_comment = "SELECT * FROM comment WHERE comment.id_reply=0 ORDER BY comment.id ASC"; $result_comment = mysql_query($req_comment) or die(mysql_error()); while($data = mysql_fetch_object($result_comment)){ echo $data->message . '<br/>'; $req_rep = "SELECT * FROM comment WHERE comment.id_reply=$data->id ORDER BY comment.id"; $result_rep = mysql_query($req_rep) or die(mysql_error()); while($data_rep = mysql_fetch_object($result_rep)){ echo $data_rep->message . '<br/>'; $req_rep2 = "SELECT * FROM comment WHERE comment.id_reply=$data_rep->id ORDER BY comment.id"; $result_rep2 = mysql_query($req_rep2) or die(mysql_error()); while($data_rep2 = mysql_fetch_object($result_rep2)){ echo $data_rep2->message . '<br/>'; } } } ?>

Le problème c'est qu'à chaque fois qu'on réponds à une sous-commentaire je suis obligé de refaire un while. Du coup si j'ai 50 sous commentaires en cascade je peux pas faire 50 white oO Pourriez-vous m'aider ? Existe t-il un moyen de répéter la fonction autant de fois qu'il y ai de sous commentaires?

Merci

Re: Problème de réponse à un commentaire sur un système de c

par sirakawa » 04 sept. 2014, 17:28

Une solution classique est de représenter l'arbre sous cette forme ( bis repetita placent):
id : id unique du commentaire
id_ducommentateur : autoincrement integer
texteducommentaire
id du fils : nul au départ

Quand un sous commentaire arrive, on note l'id du commentaire parent, on l'enregistre, on relève son id (last_inset_id) et on met à jour l'enregistrement du commentaire parent.
Ca permet ca:
text 1
commentaire 1 de texte 1
commentaire du commentaire 1
commentaire du commentaire 1 du commentaire
commentaire du commentaire 1
commentaire 2 de texte 1

C'est assez long à mettre en place (coté BDD); mais une fois les fonctions de création et mise à jour au point (vérification par phpmyadmin au équivalent), la situation s'éclaircit nettement.

Re: Problème de réponse à un commentaire sur un système de c

par Aiglichon » 04 sept. 2014, 16:32

Non je ne vais pas continuer dans ma lancé si elle est fausse :oops:

Pourrais-tu m'aider ou m'indiquer le chemin à suivre pour réussir à faire ce que je veux ? Je cherche depuis la fin de matinée et je commence à perdre espoir #-o

Merci

Re: Problème de réponse à un commentaire sur un système de c

par sirakawa » 04 sept. 2014, 16:24

id-reply tgel que concu ne peut pas faire le travauil demandé précisément par ce qu'il contient l'id du commentaire dont il est censé dépendre.
Il s'agit là d'un problème banal de parcours d'arbre dont je viens d suggérer une implantation.
Libre à toi de continuer dans l'erreur
.

Re: Problème de réponse à un commentaire sur un système de c

par Aiglichon » 04 sept. 2014, 14:20

Dans mon code, j'ai mis une condition permettant d'identifier si les données sont un commentaire ou une réponse à un commentaire "if(id_reply == 0){". J'arrive à les afficher mais pas en dessous du commentaire parent :/

Auriez-vous un script qui permettrait de m'aider ou de tout recommencer au mieux ?

Merci

Re: Problème de réponse à un commentaire sur un système de c

par sirakawa » 04 sept. 2014, 13:03

Tu n'as rien là-dedans, me semble-t-il, permettant de savoir qu'il s'agit d'un sous-commentaire
Je ne suis pas familier de ce genre de programmes, mais les commentaires tels que tu les vois forment un arbre
Une structure comme ça permettrait peut etre de gérer la chose et de distinguer les niveaux de commentaires
commentaire principal identifié par l'article auquel il se rapporte
fils : champ ajouté contenant l'id du premier commentaire de ce commentaire (idem pour les sous-commentaires)

Re: Problème de réponse à un commentaire sur un système de c

par Aiglichon » 04 sept. 2014, 11:30

Bjr,
Donne la structure de ta table comment, ca aidera pour aider, ouaf
En passant, si tu te sers de mysql, comme tu initialise il faudrait passer à mysqli
Bonjour ! Merci de l'intérêt que tu porte à mon problème. Voici la structure de ma table comment :

id <-- id de mon commentaire ou sous-commentaire
name <-- nom de la personne qui poste un commentaire ou sous-commentaire
email <-- email de la personne qui poste un commentaire ou sous-commentaire
website <-- site de la personne qui poste un commentaire ou sous-commentaire
message <-- commentaire ou sous commentaire de la personne qui poste
id_art <-- id de l'article auquel est affecté un commentaire
date_comment <-- date du commentaire ou sous-commentaire
id_reply <-- Si c'est un sous commentaire, il récupère l'id du commentaire auquel la personne a voulu répondre
admin <-- ca c'est pour moi pour valider un commentaire ou non

Re: Problème de réponse à un commentaire sur un système de c

par sirakawa » 03 sept. 2014, 16:37

Bjr,
Donne la structure de ta table comment, ca aidera pour aider, ouaf
En passant, si tu te sers de mysql, comme tu initialise il faudrait passer à mysqli

Problème de réponse à un commentaire sur un système de comme

par Aiglichon » 03 sept. 2014, 12:42

Bonjour à tous, je viens vers vous car je suis en pleine création d'un blog pour mon portfolio, tout est prêt don mon premier article qui n'attend que d'être publié ! Le système de commentaire est créé, l'utilisateur peut aussi répondre à un commentaire mais le commentaire se met tout en bas au lieu de se mettre sous le commentaire en question. Pas facile d'expliquer, voici un petit "schéma" de ce que j'aimerais avoir :

------------------------------------------------------------------------------------
Commentaire 1

Commentaire 2
--> Sous commentaire 1 du commentaire 2
--> Sous commentaire 2 du commentaire 2
------> Sous sous commentaire 1 du sous commentaire 2
--> Sous commentaire 3 du commentaire 2

Commentaire 3
--> Sous commentaire 1 du commentaire 3


De mon côté les commentaires et sous commentaire s'affichent dans l'ordre que je les envoie...
Pour info, les sous-commentaires récupèrent l'id du commentaire (id_reply).
Voici mon code :

Code : Tout sélectionner

<?php //Affichage des commentaires $req_comment = "SELECT *, DATE_FORMAT(date_comment, '%W %d %M %Y à %H:%i') AS date_creation_fr FROM comment WHERE id_art = $num_art AND admin = '1'"; $result_comment = mysql_query($req_comment) or die(mysql_error()); while($data = mysql_fetch_object($result_comment)){ $message = stripslashes(str_replace( "\n", '<br/>', $data->message )); if($data->id_reply == 0){ ?> <div class="comments_send" style="border-top: 1px solid #c1c1c1;"> <?php if(empty($data->website)){ echo '<div class="name_comment">' . $data->name . ' :</div>'; } else{ ?> <a href="<?php echo $data->website; ?>" target="_blank"><span class="name"><?php echo $data->name; ?> :</span></a> <?php } ?> <span class="date"><?php echo $data->date_creation_fr ?></span> <br/> <span><?php echo $message; ?></span> <br/> <a class='normal' rel="shadowbox[Mixed];width=600;height=375" href="#apparition<?php echo $data->id ?>"> Répondre </a> <div id="apparition<?php echo $data->id ?>" style="display:none;"> <span class="reply_at">Répondre à <?php echo $data->name; ?></span> <form class="form_reply" action="../comment_recept.php" method="post"> <div class="input_left"> <input type="text" name="name" placeholder="Nom*" value="<?php echo $_SESSION['session_name']; ?>"><br/> <input type="text" name="website" placeholder="Site Web" value="<?php echo $_SESSION['session_website']; ?>"> </div> <div class="input_right"> <input type="text" name="email" placeholder="E-mail* (Ne sera pas affiché)" value="<?php echo $_SESSION['session_email']; ?>"><br/> <input type="text" name="capcha" placeholder="Combien font 15+3 ?*"> </div> <input type="hidden" name="id_form" value="<?php echo $data->id; ?>" /> <textarea name="comment" placeholder="Votre message*"><?php echo $_SESSION['session_comment']; ?></textarea> <input class="send_comment" type="submit" value="Envoyer"> </form> </div> </div> <?php } if($data->id_reply != 0){ ?> <div class="comments_send"> <div class="comments_reply"> <div class="arrow"> <img src="../img/arrow_reply.png" alt="Réponse de <?php echo $data_reply->name; ?> à <?php echo $data->name; ?>"> </div> <?php $req_nrv = "SELECT * FROM comment WHERE id = $data->id_reply"; $result_nrv = mysql_query($req_nrv) or die(mysql_error()); while($data_nrv = mysql_fetch_object($result_nrv)){ ?> <div class="text_reply"> <?php if(empty($data->website)){ echo '<span class="name_comment">' . $data->name . '</span>' . ' à ' . $data_nrv->name . ' :'; } else{ ?> <a href="<?php echo $data->website; ?>" target="_blank"><span class="name"><?php echo $data->name; ?></span></a> à <?php echo $data_nrv->name; ?> : <?php } ?> <br/> <span class="date"><?php echo $data->date_creation_fr ?></span> <br/> <span><?php echo $message; ?></span> <br/> </div> <?php } ?> </div> </div> <?php } ?> <?php } ?>
J'espère que vous saurez m'aider. J'ai essayé pas mal de solutions, après 2 jours à coder je pensais avoir enfin trouvé la solution donc je test et là surprise ça ne fonctionne pas :/ Je compte sur vous pour que vous puissiez m'indiquer la solution que je puisse comprendre mes erreurs et avancer dans mon travail. Je suis disponible pour d'éventuelles questions, mon problème et mon code ne sont peut-être pas assez clairs.

Merci à vous :D