Boucle while() qui me fait des misères...

AlexCode

AlexCode Le 30 juin 2016 à 14:20 (Édité le 25 janvier 2019 à 17:51)

Bonjour à tous,

Dans un premier temps je voudrai remercier Primfx pour l'ensemble de ses vidéos, son travail et sa bonne humeur. Grâce à toi j'ai pu me mettre à jour en terme de PDO et apprendre sur de nombreux points ! Merci Primfx !

Alors voila, je code un petit projet perso qui me permet notamment de développer mes compétence en php surtout au niveau des requêtes...

Ma base de donnée pour le moment est organisée de cette manière :
  • une table "users" : avec les informations de l'utilisateur, nom, prenom, avatar...
  • une table "post_user" : avec l'ensemble des information des posts : le titre, le contenu, la date...
  • une table "post_comment" : dans laquelle j'ai les commentaires pour les posts, avec la date, l'id de l'utilisateur qui à posté le commentaire.
Le code suivant correspond à l'affichage de l'ensemble des posts d'un utilisateur sur la page perso... 
  • La première requête $sql via le if et le while me donne l'ensemble des posts de l'utilisateur via sa variable de sessions $_SESSION["uid"].
<?php
$sql = $bdd->prepare("SELECT * FROM post_user WHERE post_creator_id= post_creator_id ORDER BY post_date DESC");
$sql->bindValue('post_creator_id', $_SESSION["uid"], PDO::PARAM_STR);
$sql->execute();
if ($sql->rowcount() > 0)
{
   while ($row = $sql->fetch(PDO::FETCH_ASSOC))
   {
        $reqidcreator = $bdd->prepare("SELECT * FROM users WHERE id = :id");
      $reqidcreator->execute(array(
         'id' => $row['post_creator_id']
         ));
         $info_creator_id = $reqidcreator->fetch();
         $sql3 = $bdd->query("SELECT count(DISTINCT comment_creator_id) as nb FROM post_comment WHERE post_id='".$row['id']."'");
            $nb = $sql3->fetch();
            $nb_user = $nb['nb'];
         $sql4 = $bdd->query("SELECT count(*) as nb FROM post_comment WHERE post_id='".$row['id']."'");
            $nb = $sql4->fetch();
            $nb_comment = $nb['nb'];
         ?>                  
            <div>
               <a><img src='users/avatar/<?php echo $info_creator_id["avatar"] ?>'/></a>
               <div>
                  <a><?php echo $row["post_creator_firstname"] ?></a>
                  <a><?php echo  $row['post_creator_lastname'] ?></a>
                  <div> <?php echo getRelativeTime($row['post_date']) ?></div>
               </div>
               <div>
                  <div><a href='URL.php?id=<?php echo $row['id'] ?>'><?php echo $row['post_title'] ?></a></div>
                  <div><a href='URL.php?id=<?php echo $row['id'] ?>'><?php echo $row['post_content'] ?></a>...</div>
               </div>
               <div>
                  <nav>
                     <ul>
                        <li><a><img src='users/avatar/default.jpg'/></a></li>
                     </ul>
                     <ul>
                        <li><?php echo $nb_user ?></li>
                     </ul>
                  </nav>
               </div>
            </div>
         <?php
   }
}
else
{
   echo "<p>Vous n'avez encore pas créer de discussion.</p>";         
}
?>
L'affichage de l'ensemble des posts, avec l'ensemble des informations marche niquel... Mon seul soucis est le suivant.

J'aimerai afficher les avatars des personnes qui ont publié dans le post un peu comme cet exemple :



J'ai notamment réussi via ce code, ça marche niquel, je récupère l'id de l'utilisateur qui commente et je l'utilise pour obtenir son avatar.
<?php
   $sql2 = $bdd->query("SELECT DISTINCT comment_creator_id FROM post_comment WHERE post_id='".$id."' LIMIT 0,10");
   while ($row2= $sql2->fetch(PDO::FETCH_ASSOC))
   {
      $getidcreator = htmlentities($row['comment_creator_id']);
      $reqidcreator = $bdd->prepare("SELECT * FROM users WHERE id = :id");
      $reqidcreator->execute(array(
         'id' => $getidcreator
         ));
         $idcreatorinfo = $reqidcreator->fetch();
      echo
      "
      <li><a><img src='users/avatar/".$idcreatorinfo["avatar"]."'/></a></li>
      ";
   }
?>
Le seul soucis c'est que lorsque je l'intègre dans ma première boucle while(), je n'arrive plus à lister l'ensemble de mes posts de l'utilisateur. J'ai l'impression que le second while() est dominant sur le premier... 

Un grand post qui j'espère sera le plus clair possible ! Si vous avez des questions ou remarques il ne faut pas hésiter.

Merci à vous tous !

Alex
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte