0

私はこのコードを長い間見てきましたが、どこに問題があるのか​​ わかりません..

function getComment($topic_id){
    $sql = "SELECT * FROM comment WHERE topic_id='$topic_id' ORDER BY time DESC LIMIT 20";
    $result = mysql_query($sql);
    //the "id of the comment willl be used in maing the like box"
    while($output = mysql_fetch_assoc($result)){
    $qry = "SELECT username, avatar2 FROM user WHERE user_id='".$output['user_id']."'";
    $rst = mysql_query($qry);
    $out = mysql_fetch_assoc($rst);
    $disp = '
        <div class="tmain">
            <h3 class="underlinebold">Topic Title<span class="not_left">
                <ul>
                    <li><i class="icon-time" style="margin-top:5px;"></i>time: '. getTime($output["time"]) .' ago</li>
                    <li><i class="icon-pencil" style="margin-top:5px;"></i>Edit</li>
                    <li><span class="badge badge-inverse">#2</span></li>
                </ul>
            </span></h3>
            <div class="postWrap">
                <div class="userInfo">
                    <ul>
                        <li><img src="'. $out["avatar2"] .'" /></li>
                        <li>'. $out["username"] .'</li>
                        <li>'. commentNo($output["user_id"]) .'</li>
                    </ul>
                </div>
                <div class="comment">
                    <div class="commentText">'.
                     $output["content"].'</div>
                    <ul class="below">
                        <li><i class="icon-flag" style="margin-top:3px;"> </i>Report</li>
                        <li><i class="icon-edit" style="margin-top:3px;"> </i>Quote</li>
                        <li><i class="icon-thumbs-down" style="margin-top:3px;"> </i>Mtcheew...(<span>0</span>)</li>
                        <li><i class="icon-thumbs-up" style="margin-top:3px;"> </i>Correct!(<span>0</span>)</li>
                    </ul>
                </div>
            </div>
        </div>
    ';
    return $disp;
    }

}

コードは、特定のトピックに関連するすべてのコメントを取得し、トピック ページに表示することを想定しています..しかし、最後に投稿されたコードのみが表示され、他には何も表示されません..どこが間違っているのかわかりません..

ここでテスト フォーラムの効果を確認できます。

4

1 に答える 1

4

ループを通過するたびに、の値が$disp現在の行に置き換えられます。置き換えるのではなく追加する必要があります。

$disp .= '<div class="tmain"> ... </div>';
      ^

また、ステートメントはループのreturn $disp;にある必要があります。ループの最初の反復中に戻っています。while

また、ユーザー名/アバターごとに個別のクエリを実行するのではなく、結合を使用してメイン クエリで実行する必要があります。

SELECT c.*, u.username, u.avatar
FROM comment c
JOIN user u ON u.user_id = c.user_id
WHERE topic_id = '$topic_id'
ORDER BY time DESC
LIMIT 20
于 2013-05-26T03:40:56.320 に答える