2014-09-10 5 views
0

Попытка отобразить шесть последних сообщений из моей установки PhpBB. Я доволен тем, как все работает, однако он показывает шесть копий одного и того же (самого последнего) сообщения, а не уникальные уникальные посты.Показаны шесть последних сообщений PhpBB вместо шести экземпляров последнего сообщения

Просто чтобы подтвердить, у меня есть 7 общих сообщений на форумах.

<?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

Посмотрите на ваши петлях более подробно, особенно цикл, в котором вы просматриваете сообщения, чтобы печатать их. В этом цикле вы хотите получить информацию об авторе, выполнить различные биты преобразования текста и затем распечатать итоговую запись. Откуда появляется '$ post_text'? Когда вы его установили? Печатает ли вы, что вы думаете, что он распечатывает? –

+0

@ialarmedalien $ post_text исходит от $ post_text = $ row ["post_text"]; Которая извлекает текст сообщения phpbb из базы данных. Кажется, что я показываю вещи так, как я их хочу, только все шесть «записей» показывают одну и ту же запись. – Skulburn

+0

Посмотрите на цикл, в котором установлены $ post_text и т. Д.; он просматривает все сообщения на форуме и устанавливает эти переменные в соответствующие значения. Тем не менее, он сохраняет данные только из * последнего * сообщения, потому что каждый цикл перезаписывает данные из предыдущего цикла. Вы понимаете проблему сейчас? –

ответ

1

Вы можете решить эту проблему с помощью одного цикла и получать ваши почтовые данные и информацию о пользователях в то же время, используя комбинированный запрос к phpbb_posts таблицы и phpbb_users таблице:

## 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

Очень приятно! Никогда не рассматривал комбинированные запросы раньше. Очень полезно! +1 – Mallander