質問
現在取り組んでいる以下のPHPスクリプトに問題があります。私がやろうとしているのは、日付までに注文されている5つのイベントを含むリストを作成することです。私のデータベースには、イベント付きのテーブルがあります。各イベントには、日付(DateTime)、ID、名前があります。 PHPが行う必要があるのは、イベントでテーブルをチェックし、すでに合格したイベントをフィルタリングすることです。イベントがすでに通過している場合、それは表示されていません。それでもそれが起こらなければならない場合、それは表示されます。
問題は、doでループ中に、スクリプトが実行されたときに次の行に移動しないように見えることです。たとえば、データベーステーブルに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) . " " . $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
?>
解決
コードは日付を1回ロードし、その後毎回今日と比較します。動く
$datum_unix = strtotime($rij_kalender['datum']);
日付チェックの前に、ループに。
他のヒント
これを試して:
<?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) . " " . $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
?>
所属していません StackOverflow