Остановить непрерывную генерацию таблицы - PullRequest
0 голосов
/ 09 июня 2009

Я пытаюсь не допустить повторения данных в следующей таблице, как при зацикливании тех же данных, при сбое браузера:

Вот запрос:

$posts = mysqli_fetch_assoc(mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time")); 

А вот код таблицы:

<table width="100%" class="tborder">
    <tr>
        <th class="tcat">Name</th>
        <th class="tcat">Reply</th>
    </tr>
    <?php
        $colour="1";
        while($posts) {
            if($colour == "1"){
                 echo ("<tr class='alt1'>");
                 $f1 = $posts['by'];
                 $f2 = $posts['content'];
                 $colour = "2";
            }
            else {
                 echo "<tr class='alt2'>";
                 $f1 = $posts['by'];
                 $f2 = $posts['content'];
                 $colour = "1";
            }
            ?>
            <td><?php echo $f1; ?></td>
            <td><?php echo $f2; ?></td>
        </tr>
        <?}?>
</table>

Обратите внимание, что я использую mysqli, а не mysql.

Ответы [ 2 ]

4 голосов
/ 09 июня 2009

Вы не прогрессируете через набор результатов. mysqli_query получает ваш набор результатов, и mysqli_fetch_assoc проходит через него. Вам нужно что-то вроде этого:

$results = mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time");
while ($posts = mysqli_fetch_assoc($results)) {
    // table construction code goes here
}
4 голосов
/ 09 июня 2009

Проблема в строке while($posts){.

Вы пишете код, который говорит: «Продолжайте, пока кто-то не установит переменную posts в null или false», но затем вы никогда не коснетесь ее ... так что она будет работать вечно.

Обновление

Если бы вы взглянули на ваш запрос еще раз, похоже, вы запутались в том, как он должен работать. Вот как это должно выглядеть:

$result = mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time");
...
$post = mysql_fetch_assoc($result); // fetch first row
while( $post ) { // will keep going until $post gets set to null or false
  ...
  $post = mysql_fetch_assoc($result); // fetch next row and re-run the loop
}

Вы заметите, что вызов mysqli_query выделен. mysqli_query выполняет запрос к базе данных, а затем дает вам «дескриптор» списка строк, которые возвращаются из запроса. Это обычная путаница, так как в основном люди ожидают, что она даст им массив всех строк, а не «дескриптор».

Затем вам нужно позвонить mysql_fetch_assoc, чтобы вывести первую строку из списка, что-то с ней сделать, а затем повторно несколько раз вызвать mysql_fetch_assoc, чтобы получить следующую строку.

Когда заканчивается количество строк, mysql_fetch_assoc вернет null вместо правильной строки, так что вы можете проверить, когда вы закончили, и остановить цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...