0

私は自分の Web サイト用に ajax コメント システムを作成しており、特定のフィールドを持つコメントについてデータベースにクエリを実行しています。次に、返された結果の数が 3 より大きいか、3 以下かどうかを調べます (3 には特定の理由があります)。3 より大きい場合は、変数 = 3 を設定しますが、3 以下の場合は、返された行数に等しい変数を設定します (mysql_num_rows())。次に、ループの前にいくつかのテキストをエコーし​​、次にループ内の内容をエコーし​​、ループの後にさらに内容をエコーし​​ます。何らかの理由で、for ループが指定された時間よりも多く実行されています。非常に奇妙なのは、次のコメントに移動する前に同じコメントを 3 回エコーし、それを 3 回エコーしていることです。for ループの後、合計 9 個のコメントがあります。コメントを配置している場所に 3 つのコメントしか収まらないため、これは私のデザインでは機能しません。PHPに送信する情報に基づいて必要な情報を取得するために複数回クエリを実行する必要があるため、forループは数回ネストされています(これも特定の理由です)。もう1つのことは、PHPは、返された結果の数が9回以上の場合にのみ、コメントをエコーし​​ます3 未満の場合は 3 で問題ありません。このコードを 50 回繰り返しましたが、何も見つかりません。多分あなたたちはできるでしょう。私が使用しているコードは次のとおりです。


                $comments = mysql_query("SELECT * FROM comments WHERE profid = '".$row['id']."'");
                $numComments = mysql_num_rows($comments);
                $totalCommComments = 0;
                if ($numComments > 0) {
                    if (mysql_num_rows($comments) > 3) {
                        $totalCommComments = 3;
                        echo '
        <div class="comments">
            <div class="commContainer">
                <ul class="'.$totalCommComments.'Comm">';
                        while ($get1 = mysql_fetch_array($comments)) {
                        for ($l = 1;$l<$totalCommComments;$l++) {
                            echo 'STUFF IS ECHOED HERE';
                        }
                        }  
                        echo '
                 </ul>
            </div>
       </div>';

でクラスを確認できるので、変数$totalCommCommentsが 3 に設定されていることがわかります<ul>

PS。これは完全なコードではなく、関連するコードのみです。他のすべては、このクエリを作成するために必要な他の情報を別のデータベースにクエリしています。


どうもありがとう

4

3 に答える 3

4
$comments = mysql_query("SELECT * FROM comments WHERE profid = {$row['id']}");
$numComments = mysql_num_rows($comments);
if ($numComments > 0) { ?>
   <div class="comments">
       <div class="commContainer">
           <ul class="shortComments">
               <?php $i = 0;
               while ($i++ < 3 && $get1 = mysql_fetch_assoc($comments)) { ?>
                   <li class='comment'><?=$get1['comment']?></li>
               <?php } ?>
           </ul>
       </div>
   </div>
<?php } ?>

それを試してください。そこには冗長なコードがたくさんあります

これを編集し続ける方法はたくさんあります。何をしようとしているのかをお知らせいただければ、このコードを更新できます

于 2012-04-12T15:58:35.747 に答える
1

while ステートメントの for を削除します。

while ($get1 = mysql_fetch_array($comments)) {
                    for ($l = 1;$l<$totalCommComments;$l++) {
                        echo 'STUFF IS ECHOED HERE';
                    }
                    }

ただあるべき

while ($get1 = mysql_fetch_array($comments)) {

                        echo $get1['whatever'];

                    }  

この while はすべてのコメントを自動的にループします。追加する for は、返された結果を3倍にしています

于 2012-04-12T16:06:04.737 に答える
0

$numComments はコメントの数です。$totalCommComments は 0 または 3 の可能性があります。$numComments 反復を含む while があり、反復ごとに 0 または 3 反復の for があります。これは、$numComments * $totalCommComments の反復があることを意味しますが、これは完全に正常です。

私の意見では、インデックス作成とループ条件を修正する必要がある単一のループが必要です。

于 2012-04-12T16:10:31.897 に答える