制作我自己的留言板并用PHP显示帖子?

时间:2011-11-20 15:18:32

标签: php forum

首先看一下我希望它看起来的这个例子,

LOGIN

电子邮件:aa@aa.aa
密码:aaaaaa

转到此页面http://www.nomomon.com/forums.php?email=aa@aa.aa&v=21828

你看到回复是如何互相缩进的,这就是我希望它看起来的样子,现在是我的努力;

首先我设置了所有内容并设置了工作留言板,只是没有正确显示帖子回复,每个帖子都有父帖ID等...

这是我的尝试,适用于第一个回复,但不会像给定示例那样使用正确的parentID进行每个帖子回复的迭代?

while ($post = $q -> fetch(PDO::FETCH_ASSOC)) {
    echo '<p class="spacerTop"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&amp;view=' . $post['postID'] . '">' . $post['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post['posterID'] . '">' . $post['username'] . '</a></p>';
    $q = $dbc -> prepare("SELECT boardposts.*, accounts.username FROM boardposts INNER JOIN accounts WHERE boardposts.posterID = accounts.id AND boardposts.parentID = ?");
    $q -> execute(array($post['postID']));
    while ($post2 = $q -> fetch(PDO::FETCH_ASSOC)) {
          echo '<p class="spacerTop" style="margin: 0 0 0 20px;"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&amp;view=' . $post2['postID'] . '">' . $post2['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post2['posterID'] . '">' . $post2['username'] . '</a></p>';
          $q = $dbc -> prepare("SELECT boardposts.*, accounts.username FROM boardposts INNER JOIN accounts WHERE boardposts.posterID = accounts.id AND boardposts.parentID = ?");
          $q -> execute(array($post2['postID']));
          while ($post3 = $q -> fetch(PDO::FETCH_ASSOC)) {
                echo '<p class="spacerTop" style="margin: 0 0 0 40px;"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&amp;view=' . $post3['postID'] . '">' . $post3['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post3['posterID'] . '">' . $post3['username'] . '</a></p>';
          }
    }
}

我的第一个想法是用父ID显示每个帖子,然后为这些回复显示另一个while循环,最后是另一个while循环,但它不能按照我想要的方式工作,因为它只显示第一个回复回复。

1 个答案:

答案 0 :(得分:0)

嗯,首先,您最终将不得不重新考虑该功能(除非您只想显示最多3个响应)。递归地执行它会很诱人(因为递归适用于这种类型的问题),但是有一种方法可以在没有递归的情况下完成它。无论如何,现在已经不在了,为什么它不能正常工作。您的代码似乎是合理的,但您确定SQL查询返回正确的结果吗?您是否在没有PHP的情况下尝试过它,只需执行查询并查看您获得的内容?不完全确定是否需要INNER JOIN。

SELECT `postID`, `topic`, `subject`, `posterID`,`username`, `id`
FROM `boardposts`, `account`
WHERE `boardposts`.`posterID` = `accounts`.`id` AND `boardposts`.`parentID` = ?

我不记得了,但你可能必须在select子句中使用表名(就像你现在正在做的那样),尽管我觉得它们可能是可选的。在任何情况下,请确保您的查询首先返回正确的结果。