Строка не будет увеличиваться в цикле do-while - PullRequest
1 голос
/ 04 мая 2011

У меня возникли некоторые проблемы с PHP-скриптом, над которым я сейчас работаю. То, что я пытаюсь сделать, - это составить список из 5 отображаемых событий, упорядоченных по дате. В моей базе данных есть таблица с событиями. Каждое событие имеет дату (DATETIME), идентификатор и имя. Php нужно проверить таблицу с событиями и отфильтровать уже пройденные. Если событие уже прошло, оно не отображается. Если это все еще должно произойти, это показано.

Теперь проблема в том, что в цикле do while сценарий, по-видимому, не переходит к следующему ряду после выполнения. Например: если в таблице базы данных содержится 10 событий, то при тестировании она будет в 10 раз больше отображаться в первой строке таблицы.

Мне нужно знать, что я делаю неправильно, или есть ли способ увеличить число строк после каждого запуска цикла.

<?php 

    $test_query_kalender = "SELECT * FROM kalender ORDER BY datum ASC";  
    $test_result_kalender = mysql_query($test_query_kalender);
    $rij_kalender = mysql_fetch_assoc($test_result_kalender);

$vandaag_unix = time();
$datum_unix = strtotime($rij_kalender['datum']);
$i = 0; //this variable is used to insure that only 5 items are being shown on the page

do{     
if($datum_unix >= $vandaag_unix) //checks if the date of the event has already passed 
{  
    //if the date has not passed, the event will be shown
    echo "<p>" . date("d-m-Y", $datum_unix) . "&nbsp;&nbsp;" . $rij_kalender['naam'] . "</p>";
    $i++;
} 

else
{ //if it has already passed then it should put nothing, but for testing I put a line in it
    echo "<p>" . $rij_kalender['naam'] . "</p>";
}

} while(($i <= 4) && ($rij_kalender = mysql_fetch_assoc($test_result_kalender)));

echo "<p>While loop finished</p>"; //just some checking

?>

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Ваш код загружает дату один раз, а затем каждый раз сравнивает ее с сегодняшним днем.Переместите

$datum_unix = strtotime($rij_kalender['datum']);

в цикл до проверки даты.

0 голосов
/ 04 мая 2011

Попробуйте это:

<?php 

    $test_query_kalender = "SELECT * FROM kalender ORDER BY datum ASC";  
    $test_result_kalender = mysql_query($test_query_kalender);
    $rij_kalender = mysql_fetch_assoc($test_result_kalender);

$vandaag_unix = time();
$datum_unix = strtotime($rij_kalender['datum']);
$i = 0; //this variable is used to insure that only 5 items are being shown on the page

while($rij_kalender = mysql_fetch_assoc($test_result_kalender))
{
  $datum_unix = strtotime($rij_kalender['datum']);
  if($datum_unix >= $vandaag_unix) //checks if the date of the event has already passed 
  {  
    //if the date has not passed, the event will be shown
    echo "<p>" . date("d-m-Y", $datum_unix) . "&nbsp;&nbsp;" . $rij_kalender['naam'] . "</p>";
    $i++;
  } 
  else
  { 
    //if it has already passed then it should put nothing, but for testing I put a line in it
    echo "<p>" . $rij_kalender['naam'] . "</p>";
  }

  if ($i == 5) break;
}

echo "<p>While loop finished</p>"; //just some checking

?>
...