Синтаксическая ошибка цикла while (бесконечный цикл)

Я пытаюсь отобразить изображения из базы данных MySQL в таблице, по три в ряд. Я могу это сделать, но проблема в том, что это было в моем исходном коде, поэтому, если бы у вас была только одна строка в вашей таблице MySQL, она все равно запускала бы код три раза на строку и оставляла две пустые <td> (и оставляла одну пустую если у вас было две строки). Я пытался запустить цикл, в котором говорилось, что если у вас осталось менее трех строк, запустите цикл столько раз и выйдите. Я снова и снова просматривал этот код и разговаривал с самим собой, но, похоже, не могу найти, в чем проблема. Ошибка, которую я получаю, заключается в том, что он запускает цикл бесконечно. В настоящее время у меня есть две строки, поэтому цикл выполняется дважды за <tr>, но навсегда.

Я думал, что добавление 3 к $rowcounter остановит цикл. $rowcounter начинается с 0, цикл выполняется. 3 добавляется к $rowcounter (что делает его равным 3), что делает его больше, чем $num_rows_temp (которое будет равно двум, поскольку есть только две строки), и цикл не будет выполняться. Опять же, проблема должна быть в первом цикле while, потому что он бесконечно генерирует новые строки в моей таблице... Есть ли причина, по которой к $rowcounter не было бы добавлено 3?

(Кроме того, пожалуйста, игнорируйте объявления переменных в fetch_arrays. Они будут использоваться для функциональности, как только я заработаю цикл. Хотя сейчас они выглядят легкомысленными...)

Может кто-нибудь, пожалуйста, помогите мне понять, что я здесь не так? Спасибо большое.

<?php
$rowcounter=0;

if($num_rows_temp==0){
echo "No pictures yet!";
}
else{
//BEGIN JOB POSTING                             
    while($rowcounter<=$num_rows_temp){
        $remaining=$num_rows_temp-$rowcounter;
        $counter=1;
        echo "<tr>";
        //IF THE REMAINING AMOUNT OF ROWS IS LESS THAN THREE, RUN THE WHILE LOOP
        //FOR THE AMOUNT OF REMAINING ROWS
        if ($remaining>0 && $remaining<3){
            while($counter<=$remaining){
                $row_temp = mysqli_fetch_array($result_temp, MYSQL_NUM);
                $id = $row_temp[0];
                $location = $row_temp[1];
                $name = $row_temp[2];
                $email = $row_temp[3];
                echo "<td>
                <a href='".$location."'>
                <img class=\"g-thumbnail\" src='".$location."' width=\"200\" height=\"200\" />
                </a>
                </td>";
                $counter++; 
             } //END WHILE
          } //END IF
          else{
              while($counter<=3){
                  $row_temp = mysqli_fetch_array($result_temp, MYSQL_NUM);
                  $id = $row_temp[0];
                  $location = $row_temp[1];
                  $name = $row_temp[2];
                  $email = $row_temp[3];
                  echo "<td>
                  <a href='".$location."'>
                  <img class=\"g-thumbnail\" src='".$location."' width=\"200\" height=\"200\" />
                  </a>
                  </td>";
                  $counter++;   
               } //END WHILE
           } //END ELSE
           echo "</tr>";
           $rowcounter+3;
        } //END WHILE
    } //END ELSE
?>

person MillerMedia    schedule 25.11.2012    source источник
comment
Вы не добавляете 3 к счетчику строк, вы устанавливаете его равным 3. Попробуйте выполнить $rowcounter += 3; вместо.   -  person FreudianSlip    schedule 25.11.2012
comment
@FreudianSlip Не устанавливая значение 3. $rowcounter+3; вообще ничего не делает.   -  person Anirudh Ramanathan    schedule 25.11.2012


Ответы (1)


Ваш $rowcounter+3; не увеличивается $rowcounter. Изменить на-

$rowcounter +=3;

Как есть, $rowcounter+3; будет работать только в том случае, если вы повторяете

echo $rowcounter+3;  // would echo 3 each time

Также вы устанавливаете $counter внутри цикла while

while($rowcounter<=$num_rows_temp){
    $remaining=$num_rows_temp-$rowcounter;
    $counter=1;

Поэтому, даже если вы увеличиваете его, делая

$counter++;

Он будет установлен обратно на 1, как только он снова запустит цикл while(). Вам нужно объявить об этом до while().

person Sean    schedule 25.11.2012