1

現在取り組んでいる以下のphpスクリプトに問題があります。私がやろうとしているのは、日付順に表示されている 5 つのイベントのリストを作成することです。私のデータベースには、イベントを含むテーブルがあります。各イベントには、日付 (DATETIME)、ID、および名前があります。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

?>
4

2 に答える 2

1

コードは日付を1回ロードしてから、毎回今日と比較します。動く

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

日付チェックの前に、ループに入ります。

于 2011-05-04T18:08:20.097 に答える
0

これを試して:

<?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

?>
于 2011-05-04T18:10:50.707 に答える