2016-02-07 1 views
0

Je suis codage mes propres forums (pour des raisons d'apprentissage) et essaie de trouver une solution aux suivantes:écho après la boucle se termine plutôt que lorsque la boucle

J'ai messages du forum stockés dans la base de données et quand je veux afficher ces messages, j'ai mis chaque poste de mySQL dans un tableau (messages $ [] []), puis une boucle à travers ces réseaux pour les sorties sur le htmlpage:

if (count($posts) > 0) { 
    for ($x = 0; $x < count($posts); $x++) { 
     echo ' 
     <div class="post-header">' . $posts[$x][3] . '<text style="float:right">#' . ($x+1) . '</text></div> 
     <div class="post"> 
      <div class="post-user ">'; 
      if(login_check($mysqli) && (permission_check($mysqli) == 2 || permission_check($mysqli) == 3 || $username == $posts[$x][5])) { 
       echo '<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&postID=' . $posts[$x][1] . '&mode=edit">Edit</a><br>'; 
      } 
      echo '<a href="../profile/?profile="' . $posts[$x][5] . '">' . $posts[$x][5] . '</a> 
      <br> 
      </div> 
      <div class="post-text">' . $bbcode->parse($posts[$x][4]) . '</div> 
     </div><br>'; 
    } 
} 

bien que cela fonctionne parfaitement bien que je souhaite la echo pour afficher seulement après la fin de la boucle. Pour le moment, cela se répercute en temps réel et chaque message du forum est ajouté au code HTML jusqu'à la fin de la boucle, ce qui semble se charger très lentement.

+1

Pourquoi ne pas simplement le stocker dans un var? et quand les boucles finissent par faire écho ça? – AersolKing

+1

Que voulez-vous dire par: "qui a l'air de se charger très lentement"? Si vous faites écho dans la boucle ou en dehors de la boucle n'a pas vraiment d'importance quand il s'agit de la vitesse. Vous répétez toujours la même quantité de données et avez le même nombre d'itérations dans votre boucle. –

Répondre

1

Pour répondre à votre question:

  if (count($posts) > 0) { 
       $sexy = ''; 
       for ($x = 0; $x < count($posts); $x++) { 
        $sexy .=' 
        <div class="post-header">' . $posts[$x][3] . '<text style="float:right">#' . ($x+1) . '</text></div> 
        <div class="post"> 
         <div class="post-user ">'; 
         if(login_check($mysqli) && (permission_check($mysqli) == 2 || permission_check($mysqli) == 3 || $username == $posts[$x][5])) { 
          $sexy .='<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&postID=' . $posts[$x][1] . '&mode=edit">Edit</a><br>'; 
         } 
         $sexy .='<a href="../profile/?profile="' . $posts[$x][5] . '">' . $posts[$x][5] . '</a> 
         <br> 
         </div> 
         <div class="post-text">' . $bbcode->parse($posts[$x][4]) . '</div> 
        </div><br>'; 
       } 
       echo $sexy; 
      } 

Cela fera écho à la fin de la boucle. Mais si vous reconnaissez un chargement lent, optez pour la «pagination» de vos résultats, par exemple, affichez seulement 50 par page et montrez une navigation en bas. Une autre possiblilty pour augmenter la responsabilité et montrer tout une fois qu'il arrive, avec flush: http://php.net/manual/de/function.flush.php

+1

dans php + n'est pas l'opérateur de concatanation son (période) –

+0

Je n'ai actuellement que 16 messages sur ma page de test, mais j'ai paginé activé pour un maximum de 25 messages, mais il semble toujours charger lentement (même après l'ajout ce que @Saurabh Sinha a fait) – Matt

+0

Je vais créer une nouvelle question puisque celle-ci a été répondue :) – Matt

1

S'il vous plaît essayer

$responseString = ''; 
if (count($posts) > 0) { 
    for ($x = 0; $x < count($posts); $x++) { 
     $responseString .= ' 
     <div class="post-header">' . $posts[$x][3] . '<text style="float:right">#' . ($x+1) . '</text></div> 
     <div class="post"> 
      <div class="post-user ">'; 
      if(login_check($mysqli) && (permission_check($mysqli) == 2 || permission_check($mysqli) == 3 || $username == $posts[$x][5])) { 
       $responseString .= '<a href="posting.php?topicID='. $topicID . '&forumID=' . $forumID . '&postID=' . $posts[$x][1] . '&mode=edit">Edit</a><br>'; 
      } 
      $responseString .= '<a href="../profile/?profile="' . $posts[$x][5] . '">' . $posts[$x][5] . '</a> 
      <br> 
      </div> 
      <div class="post-text">' . $bbcode->parse($posts[$x][4]) . '</div> 
     </div><br>'; 
    } 
} 
echo $responseString; 
+0

vous auriez simplement besoin de créer une variable et au lieu d'utiliser echo vous pouvez simplement assigner la valeur à cette variable et continuer à l'ajouter tout au long de la boucle. Une fois la boucle terminée. vous pouvez faire écho au même –

+0

Cela répond parfaitement à ma question et @magnus Eriksson a déclaré, alors que cela ne tient pas de l'affichage des informations jusqu'à la fin (merci!) Je suis encore en train de charger lentement. Je n'ai que 16 posts, avec très peu de texte. Devrais-je ajouter tous les messages dans un tableau avant que la page ne se charge, puis afficher ce qui est requis quand on le demande? Désolé pour les questions! – Matt