我的帖子/评论系统无法正确显示

时间:2011-11-24 05:07:16

标签: php sql

我的帖子和评论邮寄部分代码出了问题。我对编码比较陌生,我甚至不确定这是否是最好的方法。代码将发布,并正确评论,但问题是它将无法正确显示。会发生什么事情,当它显示它将以正确的顺序和评论拉动blab,但评论在每个帖子上重复。

因此,为了进一步澄清,它看起来像这样......

  • Post 1
  • 评论1
  • 评论2
  • 评论3

  • 发布2

  • 评论1
  • 评论2
  • 评论3
  • 评论4

  • 发布3

  • 评论1
  • 评论2
  • 评论3
  • 评论4
  • 评论5

数字代表ids

这是我的代码。

// ------- MEMBER BLABS OUTPUT CONSTRUCTION ---------

$sql_blabs = mysql_query("SELECT id, mem_id, the_blab, blab_date, blab_type, device, fromid FROM blabbing WHERE mem_id='$id' ORDER BY blab_date DESC LIMIT 30");

while($row = mysql_fetch_array($sql_blabs)){

    $blabid = $row["id"];
    $fromid = $row["fromid"];
    $blab_device = $row["device"];

        $sql_comments = mysql_query("SELECT * FROM blab_comments WHERE blab_id='$blabid' ORDER BY id ASC");
        $count_comment = mysql_num_rows($sql_comments);
        if($count_comment > 0){
        while($row2=mysql_fetch_array($sql_comments)){
            $comment_mem_id = $row2['mem_id'];
            $com_blab_id = $row2['blab_id'];
            $comment_txt = $row2['the_comment'];
            $comment_date = $row2['comment_date'];
            $convertedTime = ($myObject -> convert_datetime($comment_date));
            $whenComment = ($myObject -> makeAgo($convertedTime));
            $sql_comment_user = mysql_query("SELECT firstname, lastname FROM myMembers WHERE id='$comment_mem_id' LIMIT 1");
            while($row3 = mysql_fetch_array($sql_comment_user)){
            $firstname = $row3['firstname']; 
            $lastname = $row3['lastname']; 
            $comment_user = $firstname.' '.$lastname;
            }
            $comment_pic = check_pic("members", $comment_mem_id, "40", "profile");
            ///////  Mechanism to Display Real Name Next to Username - real name(username) //////////////////////////
            $DisplayCommentList .='
                <div style="background-color:#e3eaf3; width:auto; height:auto; word-wrap: break-word;">
                <div style="margin-right:10px; margin:8px; width:40px; height:40px; overflow:hidden; display:inline-block;">'.$comment_pic.'</div>
                <div style="float:right; width:390px; margin-bottom:8px; margin-top:3px;">
                    <span class="liteGreyColor textsize9" style="width:auto;">'.$whenComment.' 
                        <a href="profile.php?id=' . $fromid . '"><strong>'.$comment_user.'</strong></a> said via <em>'.$blab_device.'</em>
                    </span><br />'.$comment_txt.'<br />
                </div>
            </div>
            <hr style="margin:0px; clear:both; margin-left:8px;" />';
        }
        }else{
            $DisplayCommentList = "";
        }

    $uid = $row["mem_id"];
    $the_blab = $row["the_blab"];
    $the_blab = ($activeLinkObject -> makeActiveLink($the_blab));
    $blab_date = $row["blab_date"];
    $convertedTime = ($myObject -> convert_datetime($blab_date));
    $whenBlab = ($myObject -> makeAgo($convertedTime));
    $blab_date = $row["blab_date"];
    $blab_type = $row["blab_type"];
    $blab_pic = check_pic("members", $fromid, "60", "profile");
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        $usersql = mysql_query("SELECT firstname, lastname FROM myMembers WHERE id='$fromid' LIMIT 1");
        while($row = mysql_fetch_assoc($usersql)){
            $fromuser = $row["firstname"];
            $fromuserLast = $row["lastname"];
            $fromusername = $fromuser . ' ' . $fromuserLast;
            if(isset($_SESSION['idx'])){

                $blabberDisplayList .= '
                    <table style="background-image:url(images/white_title.png); color:#333; border:#F0F0F0 1px solid; border-top: 0px; padding-bottom:10px;" cellpadding="0" cellspacing="0" width="100%">
                        <tr>
                        <td width="18%" valign="top"><div id="blab_pic" style="overflow:hidden; width:60px; margin:10px 0px 10px 10px;">' . $blab_pic . '</div></td>
                        <td width="82%" valign="top" style="line-height:1.5em; padding-top:7px;">
                        <span id="myTable" class="liteGreyColor textsize9">' . $whenBlab . ' <a href="profile.php?id=' . $fromid . '"><strong>' . $fromusername . '</strong></a> said via <em>' . $blab_device . '</em></span><br />
                         ' . $the_blab . '
                        </td>
                        </tr>
                        <tr>
                        <td width="18%" valign="top"></td>
                        <td width="82%" style="line-height:1.5em; padding-right:15px; background-color:#e3eaf3;" valign="top">
                        '.$DisplayCommentList.'
                        <div id="new_comment'.$blabid.'" style="display:none;">

                        </div>
                        <textarea id="Comment'.$blabid.'" style="width:99%; margin-top:8px; margin-left:8px;" rows="1"></textarea><br />
                        <input style="color:#666; float:right; background-color:transparent; border:0px; margin-left:8px; margin-right:8px;" type="submit" value="comment" onclick="javascript:SendComment(\''.$blabid.'\');" />
                        </td>
                        </tr></table>';

}}}
// ------- END MEMBER BLABS OUTPUT CONSTRUCTION ---------

2 个答案:

答案 0 :(得分:0)

不是100%确定你的问题是什么,但我发现你的变量初始化有些问题。相反......缺乏初始化! ; O)

在循环使用初始化变量的数据集之前,尤其是是一种很好的做法。

您可能遇到的一个问题,例如,在您的条件if($count_comment > 0)中,显然需要变量初始化。假设您有一个迭代,其中$ count_comment&gt; 0,遍历循环,设置所有comment数据,然后循环外的第一件事命中$comment_pic = check_pic("members", $comment_mem_id, "40", "profile");

第一次,工作正常。第二次,假设用户2没有评论。前往if($count_comment > 0),不进行循环,直接进入$comment_pic = check_pic("members", $comment_mem_id, "40", "profile"); ...你能看到问题吗,朋友?您的评论值在第一次迭代时仍然相同。

在这个示例中,只需在使用它时添加$comment_mem_id = "";第一件事就可以解决问题。

好运!

**更新:我可能误读了那里的时间,但基本上这个想法是一样的:你应该初始化你的变量,以免你遇到难以追踪的错误。

答案 1 :(得分:0)

答案是将评论查询放入函数中。在循环遍历blabs时,它会在每次传递时循环遍历“所有”注释。我现在开始了:)。谢谢你的帮助!