2014-09-10 3 views
0

Essayer d'afficher six des derniers messages de mon installation PhpBB. Je suis content de la façon dont tout cela fonctionne, mais il montre six exemplaires du même article (le plus récent), et pas les derniers articles de taille.Affichage de six derniers messages PhpBB au lieu de six copies du dernier message

Juste pour confirmer, j'ai un total de sept messages sur les forums.

<?php 

$con = mysqli_connect("localhost", "dbuser", "dbpass", "dbname"); 

$users = mysqli_query($con, "SELECT * FROM phpbb_user_group WHERE group_id='8'"); 
while($row = mysqli_fetch_array($users)) { 
     $developers[] = $row["user_id"]; 
} 

$post = mysqli_query($con, "SELECT * FROM phpbb_posts"); 
while($row = mysqli_fetch_array($post)) { 
     $topic_id = $row["topic_id"]; 
     $forum_id = $row["forum_id"]; 
     $post_id = $row["post_id"]; 
     $post_text = $row["post_text"]; 
     $post_time = $row["post_time"]; 
} 

$username = mysqli_query($con, "SELECT * FROM phpbb_users WHERE user_id='2'"); 
while($row = mysqli_fetch_array($username)) { 
     $postauthor = $row["username"]; 


if (strlen($post_text) > 10) 
    $post_text = wordwrap($post_text, 120); 
    $post_text = explode("\n", $post_text); 
    $post_text = $post_text[0] . '...'; 

$result = mysqli_query($con, "SELECT * FROM phpbb_posts WHERE poster_id='2' LIMIT 6"); 
while($row = mysqli_fetch_array($result)) { 
     $content = '<div onclick="location.href=\'http://test.mythros.net/forum/viewtopic.php?f=' . $forum_id .  '&amp;p=' . $topic_id . '#p' . $post_id . '\';" class="forum-latest-box">'; 
     $content .=  '<div class="forum-latest-userbar">'; 
     $content .=      '<div class="forum-latest-avatar">'; 
     $content .=        '<img src="https://minotar.net/helm/' . $postauthor . '/40.png">'; 
     $content .=      '</div>'; 
     $content .=      '<h1>' . $postauthor . '</h1>'; 
     $content .=    '</div>'; 
     $content .=    '<div class="forum-latest-content">'; 
     $content .=      '<div class="forum-latest-text">'; 
     $content .=        '"' . $post_text . '"'; 
     $content .=      '</div>'; 
     $content .=      '<div class="forum-latest-meta">'; 
     $content .=        gmdate("F j, Y, g:i a", $post_time); 
     $content .=      '</div>'; 
     $content .=    '</div>'; 
     $content .=  '</div>'; 
     echo $content; 
} 

?> 
+0

Regardez vos boucles plus en détail, en particulier la boucle où vous passez par les messages pour les imprimer. Sur cette boucle, vous voulez obtenir les informations sur l'auteur, faire les différents bits de transformation de texte, puis imprimer le message qui en résulte. D'où vient le '$ post_text'? Quand l'avez-vous mis? Imprime-t-il ce que vous pensez qu'il imprime? –

+0

@ialarmedalien $ posttexte provient de $ post_text = $ row ["posttexte"]; Ce qui extrait le texte de la publication phpbb de la base de données. Il semble afficher les choses comme je les veux, seulement les six 'entrées' montrent les mêmes informations. – Skulburn

+0

Regardez la boucle où $ post_text, etc., sont en cours de définition; Il passe en revue tous les messages sur le forum et définit ces variables sur les valeurs appropriées. Cependant, il ne sauvegarde que les données du * dernier * post, car chaque boucle écrase les données de la boucle précédente. Comprenez-vous le problème maintenant? –

Répondre

1

Vous pouvez résoudre ce problème en utilisant une seule boucle et obtenir vos données de poste et les informations utilisateur en même temps en utilisant la requête combinée à la table phpbb_posts et phpbb_users table:

## Line break added to the query for legibility 
$result = mysqli_query($con, 
"SELECT 
    p.post_id AS post_id, 
    p.topic_id AS topic_id, 
    p.forum_id AS forum_id, 
    p.post_time AS post_time, 
    p.post_subject AS subject, 
    p.post_text AS post_text 
    IFNULL(m.username, 'Guest') AS username, 
    FROM phpbb_posts AS p 
    LEFT JOIN phpbb_users AS m ON (m.user_id = p.poster_id) 
    ORDER BY phpbb_posts.post_time DESC LIMIT 6"); 

while($row = mysqli_fetch_array($result)) { 
# $row now contains the post information and the user info, so you can grab all your data, 
# process the post text, and print it out at the same time. 
    $post_text = $row["post_text"]; 
    # do your text transformation 
    if (strlen($post_text) > 10) 
    ... (etc.) 
    # now set up your content 
    $content = '<div onclick="location.href=\'http://test.mythros.net/forum/viewtopic.php?f=' . $row["forum_id"] .'&amp;p=' . $row["topic_id"] . '#p' . $row["post_id"] . '\';" class="forum-latest-box">'; 
    ... (etc.) 

} 
+0

Très bien! Jamais vraiment regardé dans les requêtes combinées avant. Très utile! +1 – Mallander

Questions connexes