Синтактична грешка в цикъла (безкраен цикъл)

Опитвам се да покажа изображения от 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='/bg".$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='/bg".$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'ing

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