0

我正在为我的网站制作一个 ajax 评论系统,并且我正在查询我的数据库以获取具有特定字段的任何评论。然后我查看返回结果的数量是否大于 3,或者小于/等于 3(我对 3 有特定原因)。如果它大于 3,我设置一个变量 = 3,但如果它小于/等于 3,我将变量设置为等于返回的行数(mysql_num_rows())。然后我在循环之前回显一些文本,然后在循环中回显内容,然后在循环之后回显更多内容。出于某种原因,我的 for 循环运行时间超过了给定时间。非常奇怪的是,它在移动到下一条评论并回显 3 次之前,重复了相同的评论 3 次。在 for 循环之后,我总共有 9 条评论。这不适用于我的设计,因为我只能放置 3 条评论。我的 for 循环嵌套在一段时间内,因为我需要多次查询才能根据我发送给 php 的信息获取所需的信息(这也是具体原因)。另一件事,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 将自动循环所有评论,你要添加的是使返回结果增加三倍的原因

于 2012-04-12T16:06:04.737 回答
0

$numComments is the number of comments, $totalCommComments might be 0 or 3. You have a while which has $numComments iteration and for each iteration you have a for with either 0 or 3 iterations. This means that you will have $numComments * $totalCommComments iterations, which is perfectly normal.

In my opinion you should have a single loop, where your indexing and loop condition should be corrected.

于 2012-04-12T16:10:31.897 回答