Partage
  • Partager sur Facebook
  • Partager sur Twitter

répondre a une réponse de commentaire

    18 février 2021 à 17:25:36

    bonjour

    je voudrais savoir quelle est la meilleur façon de faire.

    je pense faire comme plus bas mais j'aime pas les 2 boucles, il y a une autre façon ?

    <div>visu_article</div>
    <?php
    $mesliv= $bdd->prepare("SELECT * FROM livredor WHERE idast = :idan AND valide = :val AND rep = 0 ORDER BY date DESC $limit");
    	$mesliv->execute(array(
    	'idan' => $idan,
    	'val' => 1
    	));
    	
    $col = 0;
    $nid = 0;
    $elements = $mesliv->fetchAll();
      // Affichage commentaire de article
      foreach ($elements as $elemcom)
      {
    ?>
    <div class="commentaire">
    <?php
    //affiche reponse du commentaire echo $reponse_article; $reponse= $bdd->query("SELECT * FROM livredor WHERE idast = $idan AND rep= 1); foreach ($elements as $elemcom) { echo $reponse_de_la_reponse; } ?> <div class="formulaire reponse"> <form>même formulaire que pour repondre a l'article sauf que rep = 1 </form> </div> </div> <?php }



    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2021 à 17:59:29

      Bonjour,

      Il faut toujours éviter de faire une requête dans une boucle ... Cela se fait par une jointure, et une boucle un peu plus élaborée en PHP.

      Mais je ne comprends pas bien ... ici ta variable $elements sera un tableau avec un seul élément non ?

      Dans tous les cas, le code pourrait ressembler à ceci :

      <?php
      $mesliv= $bdd->prepare("
      	SELECT
      		C.id AS id_comment,
      		C.texte AS commentaire,
      		C.auteur AS auteur_commentaire,
      		R.id AS id_reponse,
      		R.texte AS reponse,
      		R.auteur AS auteur_reponse
      	FROM
      		livredor C
      			LEFT JOIN livredor R
      				ON R.idast = C.idast
      				AND R.rep = 1
      				AND R.valide = :val
      	WHERE
      		C.idast = :idan
      		AND C.valide = :val
      		AND C.rep = 0
      	ORDER BY
      		C.date DESC,
      		R.date ASC
      	$limit"
      );
      $mesliv->execute(array(
      	'idan' => $idan,
      	'val' => 1
      ));
      $commentaires = $mesliv->fetchAll();
      
      $commentairePrecedent = 0;
      foreach( $commentaires as $commentaire ) {
      	// Si commentaire non encore passé alors on affiche
      	if( $commentairePrecedent != $commentaire['id_comment'] ) {
      		echo '<div class="commentaire">'.$commentaire['commentaire'].' (par '.$commentaire['auteur_commentaire'].')</div>';
      	}
      	// Dans tous les cas on affiche la réponse
      	echo '<div class="reponse">'.$commentaire['reponse'].' (par '.$commentaire['auteur_reponse'].'</div>';
      	
      	$commentairePrecedent = $commentaire['id_comment'];
      }

      Attention, dans la requête, il faut expressément reprendre les colonnes nécessaires et les aliaser pour qu'il n'y ait pas ambiguïté. J'ai dans cet exemple imaginer les colonnes idtexte et auteur, je te laisse adapter à ta structure réelle ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        19 février 2021 à 17:06:56

        merci pour ton code.

        en modifiant, j'ai du faire une connerie:

        indefini c.date donc forcement erreur sur $livdate

        si réponse a 1 commentaire ça écrit cette réponse sur les autres aussi.

        $col = 0;
        $nid = 0;
        $mesliv= $bdd->prepare("
            SELECT
        		C.avatar AS avat_comm,
        		C.categ AS categ_comm,
        		C.soucateg AS scateg_com,
        		C.titreastu AS titastuc_com,
                C.id AS id_comment,
                C.text AS commentaire,
                C.user AS auteur_commentaire,
        		R.avatar AS avat_rep,
        		R.categ AS categ_rep,
        		R.soucateg AS scateg_rep,
        		R.titreastu AS titastuc_rep,
                R.id AS id_reponse,
                R.text AS reponse,
                R.user AS auteur_reponse
            FROM
                livredor C
                    LEFT JOIN livredor R
                        ON R.idast = C.idast
                        AND R.rep = 1
                        AND R.valide = :val
            WHERE
                C.idast = :idan
                AND C.valide = :val
                AND C.rep = 0
            ORDER BY
                C.date DESC,
                R.date ASC
            $limit"
        );
        $mesliv->execute(array(
            'idan' => $idan,
            'val' => 1
        ));
        $commentaires = $mesliv->fetchAll();
         
        $commentairePrecedent = 0;
        foreach( $commentaires as $commentaire ) {
        	
        	$comdate = $commentaire['C.date'];
        	$repcomm = veriftext($commentaire['reponse']);
        	 $repuser = $commentaire['auteur_reponse'];
        	 $avat_rep = $commentaire['avat_rep'];
        
            // Si commentaire non encore passé alors on affiche
            if( $commentairePrecedent != $commentaire['id_comment'] ) {
        		$idcoment = $commentaire['id_comment'];
        		$texte_com = veriftext($commentaire['commentaire']);
        		$usercom = $commentaire['auteur_commentaire'];
        		$avat_com = $commentaire['avat_comm'];
        		$categor = $commentaire['categ_comm'];
        		$sous_categor = $commentaire['scateg_com'];
        		$titre_astuc = $commentaire['titastuc_com'];
            }
        
        	if ($avat_com == NULL)
        	{
        		$lookavatar = "avatar.jpg";
        	}
        	else
        	{
        		$lookavatar = $avat_com ;
        	}
        	
        	 $livdate = $bdd->query("SELECT DATE_FORMAT(date, 'Du %d/%m/%Y') AS date FROM livredor WHERE date = '$comdate'");
        	 $livdate = $livdate->fetch();
        	 $livdate = $livdate['date'];
        


        ma table :

        -
        Edité par maxtrident 19 février 2021 à 17:23:15

        • Partager sur Facebook
        • Partager sur Twitter
          19 février 2021 à 17:28:37

          Cela n'a rien à voir avec $livDate. A la ligne 43 tu écris :

          $comdate = $commentaire['C.date'];

          Mais il n'y a pas cette colonne dans le SELECT de ta requête ... Donc $comdate contient null ...

          Au lieu de t'emmerder avec ça, rajoute simplement la colonne date dans ta requête ... et cela t'affranchit de la requête $livdate ...

          maxtrident a écrit:

          si réponse a 1 commentaire ça écrit cette réponse sur les autres aussi

          Je ne suis pas sûr d'avoir compris (surtout sans exemple ...) mais je pense qu'il faut aussi trier ta requête par id.

          Une correction du code serait :

          <?php
          $col = 0;
          $nid = 0;
          $mesliv = $bdd->prepare("
          	SELECT
          		DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
          		C.avatar AS avat_comm,
          		C.categ AS categ_comm,
          		C.soucateg AS scateg_com,
          		C.titreastu AS titastuc_com,
          		C.id AS id_comment,
          		C.text AS commentaire,
          		C.user AS auteur_commentaire,
          		DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
          		R.avatar AS avat_rep,
          		R.categ AS categ_rep,
          		R.soucateg AS scateg_rep,
          		R.titreastu AS titastuc_rep,
          		R.id AS id_reponse,
          		R.text AS reponse,
          		R.user AS auteur_reponse
          	FROM
          		livredor C
          			LEFT JOIN livredor R
          				ON R.idast = C.idast
          				AND R.rep = 1
          				AND R.valide = :val
          	WHERE
          		C.idast = :idan
          		AND C.valide = :val
          		AND C.rep = 0
          	ORDER BY
          		C.date DESC,
          		C.id ASC,
          		R.date ASC
          	$limit"
          );
          $mesliv->execute(array(
          	'idan' => $idan,
          	'val' => 1
          ));
          $commentaires = $mesliv->fetchAll();
          
          $commentairePrecedent = 0;
          foreach( $commentaires as $commentaire ) {
          	$comdate = $commentaire['date_comm']
          	$repcomm = veriftext($commentaire['reponse']);
          	$repuser = $commentaire['auteur_reponse'];
          	$avat_rep = $commentaire['avat_rep'];
          	
          	// Si commentaire non encore passé alors on affiche
          	if( $commentairePrecedent != $commentaire['id_comment'] ) {
          		$idcoment = $commentaire['id_comment'];
          		$texte_com = veriftext($commentaire['commentaire']);
          		$usercom = $commentaire['auteur_commentaire'];
          		$avat_com = $commentaire['avat_comm'];
          		$categor = $commentaire['categ_comm'];
          		$sous_categor = $commentaire['scateg_com'];
          		$titre_astuc = $commentaire['titastuc_com'];
          		
          		if ($avat_com == NULL) $lookavatar = "avatar.jpg";
          		else $lookavatar = $avat_com ;
          		
          		// Il faut afficher ici le commentaire
          	}
          	// Il faut afficher ici la réponse
          	
          	$commentairePrecedent = $commentaire['id_comment']
          }
          ?>

          -
          Edité par Benzouye 19 février 2021 à 17:28:51

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            19 février 2021 à 18:21:06

            si tu as bien compris si je fait une réponse d'un commentaire ça l'affiche sur les autres.

            j'avais fait une condition pour la réponse.

             je doit vraiment le séparer de la condition $commentairePrecedent ?

            <?php
            if( $commentairePrecedent != $commentaire['id_comment'] ) {
            .
            .
            
            <div class="blockcom4" id="lview<?php echo $nid;?>" style="display:none;">
            <div class="blockcom4h">
            Rédigé par : <a ponclick="document.plusinfo<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($usercom)?>"><span class="bleu"><?php echo ucfirst($usercom).' </span></a>'.$comdate; ?>
            &nbsp;&nbsp;&nbsp;Catégorie : <a ponclick="document.catego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette catégorie"><span class="bleu"><?php echo ucfirst($categor).' </span></a>';?>
            &nbsp;&nbsp;&nbsp;Sous-Catégorie : <a ponclick="document.socatego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette Sous-catégorie"><span class="bleu"><?php echo ucfirst($sous_categor).' </span></a>';?><br>
            </div>
            
            <p class="textcom"><?php echo nl2br($texte_com);?></p>
            
            <?php
            //reponse sur commentaire
            if (!empty($repcomm) AND !empty($repuser)) {
            	?>
            <div class="voirrepmp">
            Réponse de : <a ponclick="document.plusinfo2<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($repuser)?>"><span class="bleu"><?php echo ucfirst($repuser).' </span></a>'.$repdate; ?>
            
            <p class="textcom"><?php echo nl2br($repcomm);?></p>
            
            </div>
            <?php
            }
            .
            .
            }
            

            je vais voir demain ci je doit séparer

            -
            Edité par maxtrident 19 février 2021 à 18:21:47

            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2021 à 19:16:18

              Les réponses doivent être en dehors du if, pas à l'intérieur, cf. mes lignes commentées dans le message précédent...

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                20 février 2021 à 14:48:16

                je vois toujours la réponse sur tous les autres commentaires...faut peut etre que j'ajoute une colonne idrep avec l'id du commentaire qu'on répond.


                -
                Edité par maxtrident 20 février 2021 à 16:20:19

                • Partager sur Facebook
                • Partager sur Twitter
                  20 février 2021 à 18:21:48

                  Peux-tu poster un exemple de données de la table en question ?

                  Avec le résultat obtenu pour ces données et le code exact que tu exécutes...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    21 février 2021 à 12:08:15

                    j'ai modifier mon formulaire car oublié la boucle donc créé autant de réponse que de commentaire...

                    maintenant ça enregistre bien 1 seul réponse mais me l'affiche sur tous les autres commentaires aussi.

                    <div class="blockcom4" id="lview<?php echo $nid;?>" style="display:none;">
                    <div class="blockcom4h">
                    <?php
                     if( $commentairePrecedent != $commentaire['id_comment'] ) {
                    ?>	 
                    Rédigé par : <a ponclick="document.plusinfo<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($usercom)?>"><span class="bleu"><?php echo ucfirst($usercom).' </span></a>'.$comdate; ?>
                    &nbsp;&nbsp;&nbsp;Catégorie : <a ponclick="document.catego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette catégorie"><span class="bleu"><?php echo ucfirst($categor).' </span></a>';?>
                    &nbsp;&nbsp;&nbsp;Sous-Catégorie : <a ponclick="document.socatego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette Sous-catégorie"><span class="bleu"><?php echo ucfirst($sous_categor).' </span></a>';?><br>
                    </div>
                    
                    <p class="textcom"><?php echo nl2br($texte_com);?></p>
                    
                    <?php
                     }
                    //reponse sur commentaire
                    if (!empty($repcomm) AND !empty($repuser)) {
                    	?>
                    <div class="voirrepmp">
                    Réponse de : <a ponclick="document.plusinfo2<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($repuser)?>"><span class="bleu"><?php echo ucfirst($repuser).' </span></a>'.$repdate; ?>
                    
                    <p class="textcom"><?php echo nl2br($repcomm);?></p>
                    
                    </div>
                    <?php
                    }
                    ?>
                    <div class="repscom">
                    <div class="inforepo">Répondre uniquement sur le commentaire ou <a id="newcom<?php echo $nid;?>" ponclick="affichElement10('afficher');">Cliquer ici pour écrire un nouveau commentaire sur L'astuce.</a></div>
                    <form method="POST" name="reponse<?php echo $nid;?>" action="Voir_Astuce">
                     <input type="hidden" name="voiruser" value="<?php echo $usercom; ?>"/>
                     <input type="hidden" name="idanon" value="<?php echo $idan;?>"/> 
                    <input type="hidden" name="comenta" value="comenta"/>
                    <input type="hidden" name="repcom" value="repcom"/>
                    <input type="hidden" name="idcoment" value="<?php echo $idrep;?>"/>
                    <input type="hidden" name="user_comrep" value="<?php echo $repuser;?>"/>  
                    <center><textarea name="textrep" maxlength="500" min="5" max="500" required pattern="^[A-Za-z0-9.@€éèçàêâûô?,!€]+$" id="texcom<?php echo $nid;?>" cols="92" rows="4"></textarea>
                    <a ponclick="document.reponse<?php echo $nid;?>.submit();">Envoyer la réponse</a>
                    </center>
                    </form>
                    </div>
                    <div class="moinmes"><a ponclick="viewblock('blockviewm<?php echo $nid;?>');">⬆Voir moins⬆</a></div>
                    </div>
                    
                    <?php
                    $nid++;
                    $commentairePrecedent = $commentaire['id_comment'];
                    }
                    }

                    vla encore un truc louche quand je dépasse 10 commentaire ça bug sans voir aucune erreur, j'ai mis le debug de la requet.

                    -
                    Edité par maxtrident 21 février 2021 à 14:12:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 février 2021 à 15:34:59

                      Je crois commencer à comprendre ...

                      Dans ta base de données, il n'y a aucun moyen de savoir à quel commentaire une réponse est affectée ... donc la réponse (rep=1) est affecté à chaque commentaire ...

                      Dans l'exemple donné, comment peut-on déterminer à quel commentaire est affectée la réponse id=53 ? Le sais-tu seulement ?

                      Je pense qu'au lieu de stocker 0 ou 1 dans la colonne rep, il faudrait stocker l'id du commentaire correspondant...

                      -
                      Edité par Benzouye 21 février 2021 à 16:25:47

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                        21 février 2021 à 18:01:36

                        j'ai modifié et ça enregistre bien id du commentaire dans idrep, mais ça m'affiche encore la réponse sur tous les commentaires.

                        si tu as une idée pourquoi une fois 10 commentaires ça bloque.

                            SELECT
                                DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
                                C.avatar AS avat_comm,
                                C.categ AS categ_comm,
                                C.soucateg AS scateg_com,
                                C.titreastu AS titastuc_com,
                                C.id AS id_comment,
                                C.text AS commentaire,
                                C.user AS auteur_commentaire,
                                DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
                                R.avatar AS avat_rep,
                                R.categ AS categ_rep,
                                R.soucateg AS scateg_rep,
                                R.titreastu AS titastuc_rep,
                                R.id AS id_reponse,
                                R.text AS reponse,
                                R.user AS auteur_reponse
                            FROM
                                livredor C
                                    LEFT JOIN livredor R
                                        ON R.idast = C.idast
                                        AND R.idrep != 0
                                        AND R.valide = :val
                            WHERE
                                C.idast = :idan
                                AND C.valide = :val
                                AND C.idrep = 0
                            ORDER BY
                                C.date DESC,
                                C.id ASC,
                                R.date ASC
                            $limit"



                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 février 2021 à 19:54:36

                          Maintenant,il faut modifier la requête pour que la jointure se fasse sur idrep : R.idrep = C.id

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            22 février 2021 à 11:21:32

                            merci impec en plus ça ne beug plus sauf si je réponds encore sur le même commentaire.

                            tu as une idée comment je peut faire ?

                              si iderp a plusieurs fois la même id ça plante.

                            -
                            Edité par maxtrident 22 février 2021 à 11:34:48

                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 février 2021 à 12:26:33

                              Je n'ai pas compris ...

                              Peux-tu préciser le problème ? Avec des copies d'écran et les données correspondantes.

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                22 février 2021 à 12:39:37

                                si je réponds plus de 1 fois au même commentaire ça n'affiche pas le 2eme commentaire et ça plante.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 février 2021 à 13:18:26

                                  Bonjour,

                                  Peux-tu exécuter cette requête dans PHPMyAdmin, est poster son retour ici :

                                  SELECT
                                  	DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
                                  	C.avatar AS avat_comm,
                                  	C.categ AS categ_comm,
                                  	C.soucateg AS scateg_com,
                                  	C.titreastu AS titastuc_com,
                                  	C.id AS id_comment,
                                  	C.text AS commentaire,
                                  	C.user AS auteur_commentaire,
                                  	DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
                                  	R.avatar AS avat_rep,
                                  	R.categ AS categ_rep,
                                  	R.soucateg AS scateg_rep,
                                  	R.titreastu AS titastuc_rep,
                                  	R.id AS id_reponse,
                                  	R.text AS reponse,
                                  	R.user AS auteur_reponse
                                  FROM
                                  	livredor C
                                  		LEFT JOIN livredor R
                                  			ON R.idrep = C.id
                                  			AND R.valide = 1
                                  WHERE
                                  	C.idast = 71
                                  	AND C.valide = 1
                                  	AND C.idrep = 0
                                  ORDER BY
                                  	C.date DESC,
                                  	R.date ASC
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                    22 février 2021 à 13:43:37

                                    On voit bien que les deux réponses ressortent.

                                    Donc soit la requête que tu as dans ton code n'est pas celle-ci, soit le code n'est pas correct.

                                    Peux-tu reposter tout le code incluant la requête SQL et la boucle foreach en entier ?

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                      22 février 2021 à 14:13:30

                                      ça doit etre surement ça le pb moi j'enregistre l'id du commentaire.

                                      je peut pas tous mettre j'ai + de 900 lignes en plus pleins de onclick que je doit rennomer a cause du blocage.

                                      $col = 0;
                                      $nid = 0;
                                      $mesliv = $bdd->prepare("
                                          SELECT
                                              DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
                                              C.avatar AS avat_comm,
                                              C.categ AS categ_comm,
                                              C.soucateg AS scateg_com,
                                              C.titreastu AS titastuc_com,
                                              C.id AS id_comment,
                                              C.text AS commentaire,
                                              C.user AS auteur_commentaire,
                                              DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
                                              R.avatar AS avat_rep,
                                              R.categ AS categ_rep,
                                              R.soucateg AS scateg_rep,
                                              R.titreastu AS titastuc_rep,
                                              R.id AS id_reponse,
                                              R.text AS reponse,
                                              R.user AS auteur_reponse
                                      	FROM
                                              livredor C
                                                  LEFT JOIN livredor R
                                                      ON R.idast = C.idast
                                                      AND R.idrep != 0
                                                      AND R.valide = :val
                                      				AND R.idrep = C.id
                                          WHERE
                                              C.idast = :idan
                                              AND C.valide = :val
                                              AND C.idrep = 0
                                          ORDER BY
                                              C.date DESC,
                                              C.id ASC,
                                              R.date ASC
                                          $limit"
                                      );
                                      $mesliv->execute(array(
                                          'idan' => $idan,
                                          'val' => 1
                                      ));
                                       $mesliv->debugDumpParams();
                                      $commentaires = $mesliv->fetchAll();
                                      
                                      $commentairePrecedent = 0;
                                      foreach( $commentaires as $commentaire ) {
                                      		
                                      	$repcomm = veriftext($commentaire['reponse']);
                                      	 $repuser = $commentaire['auteur_reponse'];
                                      	 $avat_rep = $commentaire['avat_rep'];
                                      	 $repdate = $commentaire['date_rep'];
                                      	 $idrep = $commentaire['id_reponse'];
                                      	 
                                      
                                          // Si commentaire non encore passé alors on affiche
                                          if( $commentairePrecedent != $commentaire['id_comment'] ) {
                                      		$idcoment = $commentaire['id_comment'];
                                      		$texte_com = veriftext($commentaire['commentaire']);
                                      		$usercom = $commentaire['auteur_commentaire'];
                                      		$avat_com = $commentaire['avat_comm'];
                                      		$categor = $commentaire['categ_comm'];
                                      		$sous_categor = $commentaire['scateg_com'];
                                      		$titre_astuc = $commentaire['titastuc_com'];
                                      		$comdate = $commentaire['date_comm'];
                                          }
                                      .
                                      .
                                      .
                                      <div class="blockcom4" id="lview<?php echo $nid;?>" style="display:none;">
                                      <div class="blockcom4h">
                                      <?php
                                       if( $commentairePrecedent != $commentaire['id_comment'] ) {
                                      ?>	 
                                      Rédigé par : <a ponclick="document.plusinfo<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($usercom)?>"><span class="bleu"><?php echo ucfirst($usercom).' </span></a>'.$comdate; ?>
                                      &nbsp;&nbsp;&nbsp;Catégorie : <a ponclick="document.catego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette catégorie"><span class="bleu"><?php echo ucfirst($categor).' </span></a>';?>
                                      &nbsp;&nbsp;&nbsp;Sous-Catégorie : <a ponclick="document.socatego<?php echo $nid;?>.submit();" title ="Cliquer pour voir les astuces de cette Sous-catégorie"><span class="bleu"><?php echo ucfirst($sous_categor).' </span></a>';?><br>
                                      </div>
                                      
                                      <p class="textcom"><?php echo nl2br($texte_com);?></p>
                                      
                                      <?php
                                       }
                                      //reponse sur commentaire
                                      if (!empty($repcomm) AND !empty($repuser)) {
                                      	?>
                                      <div class="voirrepmp">
                                      Réponse de : <a ponclick="document.plusinfo2<?php echo $nid;?>.submit();" title ="Cliquer pour avoir plus Information sur <?php echo ucfirst($repuser)?>"><span class="bleu"><?php echo ucfirst($repuser).' </span></a>'.$repdate; ?>
                                      
                                      <p class="textcom"><?php echo nl2br($repcomm);?></p>
                                      
                                      </div>
                                      <?php
                                      }
                                      ?>
                                      <div class="repscom">
                                      <div class="inforepo">Répondre uniquement sur le commentaire ou <a id="newcom<?php echo $nid;?>" ponclick="affichElement10('afficher');">Cliquer ici pour écrire un nouveau commentaire sur L'astuce.</a></div>
                                      <form method="POST" name="reponse<?php echo $nid;?>" action="Voir_Astuce">
                                       <input type="hidden" name="voiruser" value="<?php echo $usercom; ?>"/>
                                       <input type="hidden" name="idanon" value="<?php echo $idan;?>"/> 
                                      <input type="hidden" name="comenta" value="comenta"/>
                                      <input type="hidden" name="repcom" value="repcom"/>
                                      <input type="hidden" name="idcoment" value="<?php echo $idcoment;?>"/>
                                      <input type="hidden" name="user_comrep" value="<?php echo $repuser;?>"/>  
                                      <center><textarea name="textrep" maxlength="500" min="5" max="500" required pattern="^[A-Za-z0-9.@€éèçàêâûô?,!€]+$" id="texcom<?php echo $nid;?>" cols="92" rows="4"></textarea>
                                      <a ponclick="document.reponse<?php echo $nid;?>.submit();">Envoyer la réponse</a>
                                      </center>
                                      </form>
                                      </div>
                                      <div class="moinmes"><a ponclick="viewblock('blockviewm<?php echo $nid;?>');">⬆Voir moins⬆</a></div>
                                      </div>
                                      
                                      <?php
                                      $nid++;
                                      $commentairePrecedent = $commentaire['id_comment'];
                                      }
                                      }
                                      ?>
                                      
                                      </div> 	

                                      et l'enregistrement du commentaire

                                      $text = secu_donnees3($_POST['textrep']);
                                      echo $idcoment = $_POST['idcoment'];
                                      	$voiruser = $_POST['voiruser'];
                                      	$user_com = $_POST['user_comrep'];
                                      	$idrep = $idcoment;
                                      
                                      		$hclan = date('G:i:s');
                                      	 $datetcha = date('Y-m-d H:i:s');
                                      	 
                                      	 $req = $bdd->prepare("INSERT INTO livredor SET idast = :idast, titreastu = :titastuce, categ = :categ, soucateg = :soucateg, user_astuce = :redige, user = :user, text = :text, date = :date, avatar = :avatar, valide = :valide, idrep = :idrep");
                                      	$req->execute(array(
                                      	'idast'=> $idan,
                                      	'titastuce'=> $titre_astuce,
                                      	'categ'=> $categorie,
                                      	'soucateg'=> $sous_categorie,
                                      	'redige'=> $user_redig,
                                      	'user'=> $log,
                                          'text' => $text,
                                      	'date' => $datetcha,
                                      	'avatar' => $avatarperso,
                                      	'valide' => 1,
                                      	'idrep' => $idrep
                                      	));
                                      





                                      -
                                      Edité par maxtrident 22 février 2021 à 14:38:59

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        22 février 2021 à 17:11:27

                                        Ton code est difficile à lire car il n'est pas indenté ...

                                        Par ailleurs, tu répètes la condition if, ligne 56 et 72 ... Pourquoi ne pas tout mettre dans le même if ?

                                        Après pour comprendre pourquoi réponse 2 ne s'affiche pas, je te conseille de mettre des var_dump dans le code pour voir ce que valent les variables, notamment juste avec la ligne 84, c'est là que ça cloche ...

                                        Déplacement vers un forum plus approprié

                                        Le sujet est déplacé de la section Base de données vers la section PHP

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                          23 février 2021 à 11:34:49

                                          bonjour

                                          j'ai tous enlevé et on voit bien que la réponse2  n'est pas dans le bloc 1 mais en créer un autre...donc je pige pas.

                                          $col = 0;
                                          $nid = 0;
                                          $mesliv = $bdd->prepare("
                                              SELECT
                                                  DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
                                                  C.avatar AS avat_comm,
                                                  C.categ AS categ_comm,
                                                  C.soucateg AS scateg_com,
                                                  C.titreastu AS titastuc_com,
                                                  C.id AS id_comment,
                                                  C.text AS commentaire,
                                                  C.user AS auteur_commentaire,
                                                  DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
                                                  R.avatar AS avat_rep,
                                                  R.categ AS categ_rep,
                                                  R.soucateg AS scateg_rep,
                                                  R.titreastu AS titastuc_rep,
                                                  R.id AS id_reponse,
                                                  R.text AS reponse,
                                                  R.user AS auteur_reponse
                                          	FROM
                                                  livredor C
                                                      LEFT JOIN livredor R
                                                          ON R.idast = C.idast
                                                          AND R.idrep != 0
                                                          AND R.valide = :val
                                          				AND R.idrep = C.id
                                              WHERE
                                                  C.idast = :idan
                                                  AND C.valide = :val
                                                  AND C.idrep = 0
                                              ORDER BY
                                                  C.date DESC,
                                                  C.id ASC,
                                                  R.date ASC
                                              $limit"
                                          );
                                          $mesliv->execute(array(
                                              'idan' => $idan,
                                              'val' => 1
                                          ));
                                           $mesliv->debugDumpParams();
                                          $commentaires = $mesliv->fetchAll();
                                          
                                          $commentairePrecedent = 0;
                                          foreach( $commentaires as $commentaire ) {
                                          		
                                          	$repcomm = veriftext($commentaire['reponse']);
                                          	 $repuser = $commentaire['auteur_reponse'];
                                          	 $avat_rep = $commentaire['avat_rep'];
                                          	 $repdate = $commentaire['date_rep'];
                                          	 $idrep = $commentaire['id_reponse'];
                                          	 
                                          
                                              // Si commentaire non encore passé alors on affiche
                                          
                                          		$idcoment = $commentaire['id_comment'];
                                          		$texte_com = veriftext($commentaire['commentaire']);
                                          		$usercom = $commentaire['auteur_commentaire'];
                                          		$avat_com = $commentaire['avat_comm'];
                                          		$categor = $commentaire['categ_comm'];
                                          		$sous_categor = $commentaire['scateg_com'];
                                          		$titre_astuc = $commentaire['titastuc_com'];
                                          		$comdate = $commentaire['date_comm'];
                                          
                                          ?>
                                          
                                          <div class="blockcom4" id="lview<?php echo $nid;?>">
                                          <?php
                                           if( $commentairePrecedent != $commentaire['id_comment'] ) 
                                           {
                                          ?>	 
                                          <p class="textcom"><?php echo nl2br($texte_com);?></p>
                                          
                                          <?php
                                           }
                                          //reponse sur commentaire
                                          ?>
                                          <div class="voirrepmp">
                                          Réponse de : <br>
                                          <p class="textcom"><?php echo nl2br($repcomm);?></p>
                                          
                                          </div>
                                          <!--hr pour séparer les commentaire -->
                                          <hr>
                                          <?php
                                          $nid++;
                                          $commentairePrecedent = $commentaire['id_comment'];
                                          }

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 février 2021 à 13:07:12

                                            Le comportement de ton code est normal.

                                            Ici, chaque itération de la boucle foreach ouvre une div blockcom4, il faut que tu maîtrises l'ouverture et la fermeture de cette div dans le if ...

                                            <?php
                                            $col = 0;
                                            $nid = 0;
                                            $mesliv = $bdd->prepare("
                                            	SELECT
                                            		DATE_FORMAT( C.date, 'Du %d/%m/%Y') AS date_comm,
                                            		C.avatar AS avat_comm,
                                            		C.categ AS categ_comm,
                                            		C.soucateg AS scateg_com,
                                            		C.titreastu AS titastuc_com,
                                            		C.id AS id_comment,
                                            		C.text AS commentaire,
                                            		C.user AS auteur_commentaire,
                                            		DATE_FORMAT( R.date, 'Du %d/%m/%Y') AS date_rep,
                                            		R.avatar AS avat_rep,
                                            		R.categ AS categ_rep,
                                            		R.soucateg AS scateg_rep,
                                            		R.titreastu AS titastuc_rep,
                                            		R.id AS id_reponse,
                                            		R.text AS reponse,
                                            		R.user AS auteur_reponse
                                            	FROM
                                            		livredor C
                                            			LEFT JOIN livredor R
                                            				AND R.valide = :val
                                            				AND R.idrep = C.id
                                            	WHERE
                                            		C.idast = :idan
                                            		AND C.valide = :val
                                            		AND C.idrep = 0
                                            	ORDER BY
                                            		C.date DESC,
                                            		C.id ASC,
                                            		R.date ASC
                                            	$limit"
                                            );
                                            $mesliv->execute(array(
                                            	'idan' => $idan,
                                            	'val' => 1
                                            ));
                                            $commentaires = $mesliv->fetchAll();
                                            
                                            $premiereLigne = true;
                                            $commentairePrecedent = 0;
                                            foreach( $commentaires as $commentaire ) {
                                            	$repcomm = veriftext($commentaire['reponse']);
                                            	$repuser = $commentaire['auteur_reponse'];
                                            	$avat_rep = $commentaire['avat_rep'];
                                            	$repdate = $commentaire['date_rep'];
                                            	$idrep = $commentaire['id_reponse'];
                                            	
                                            	$idcoment = $commentaire['id_comment'];
                                            	$texte_com = veriftext($commentaire['commentaire']);
                                            	$usercom = $commentaire['auteur_commentaire'];
                                            	$avat_com = $commentaire['avat_comm'];
                                            	$categor = $commentaire['categ_comm'];
                                            	$sous_categor = $commentaire['scateg_com'];
                                            	$titre_astuc = $commentaire['titastuc_com'];
                                            	$comdate = $commentaire['date_comm'];
                                            	
                                            	if( $commentairePrecedent != $commentaire['id_comment'] ) {
                                            		// Si pas premiere ligne alors on ferme la div précédente
                                            		if( !$premiereLigne ) {
                                            ?>
                                            	</div>
                                            <?php
                                            		}
                                            		// On ouvre une nouvelle div
                                            ?>
                                            	<div class="blockcom4" id="lview<?php echo $nid;?>">
                                            		<p class="textcom"><?php echo nl2br($texte_com);?></p>
                                            <?php
                                            	}
                                            ?>
                                            		<div class="voirrepmp">
                                            			Réponse de : <br>
                                            			<p class="textcom"><?php echo nl2br($repcomm);?></p>
                                            		</div>
                                            		<hr>
                                            <?php
                                            	$nid++;
                                            	$commentairePrecedent = $commentaire['id_comment'];
                                            	$premiereLigne = false;
                                            }
                                            	// Ferme la dernière div
                                            ?>
                                            	</div>

                                            Au passage, le <hr> pourrait être retiré au profit d'un CSS border-bottom sur la classe voirrepmp ...

                                            Sans méchanceté, je te conseille quand même de reprendre le cours HTML/CSS et PHP/MySQL car tu as apparemment des lacunes assez importantes ...

                                            -
                                            Edité par Benzouye 23 février 2021 à 13:07:26

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                              23 février 2021 à 14:00:45

                                              j'avais tous viré pour  ça n'a rien a voir avec mon scipt origine pas de hr .

                                              dans un 1er temps, je fait voir les commentaires uniquement 3 lignes sur un div, une fois cliqué dessus ça ferme le div et remplace un autre div qui fait montrer tous le commentaire avec les réponses et formulaire pour répondre.

                                              je comprenais  pas car ça fonctionné bien quand il y avait une seul réponse.

                                              j'avais pas pensé à fermer avant le div

                                               merci, je vais essayé de  modifier.

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              répondre a une réponse de commentaire

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown