So zeigen Sie mehrere Ereignisse pro Tag in meinem PHP-Kalendercode an
P粉950128819
P粉950128819 2023-09-06 10:03:16
0
1
540

Mein Kalender funktioniert einwandfrei, aber wenn ich am selben Tag ein weiteres Ereignis hinzufüge, wird nur das erste in der Datenbank aufgezeichnete Ereignis angezeigt. Ich muss in der Lage sein, mehrere Ereignisse am selben Tag anzuzeigen.

Ich habe versucht, for/next-Schleifen und while-Schleifen in meinem Code zu verwenden, um Informationen aus der Datenbank zu extrahieren. Nichts davon funktioniert so, wie der Code geschrieben ist. Dieser Link zeigt Ihnen den Arbeitskalender wie geschrieben: Grims World Blog Das ist mein Code:

'Sun', '2'=>'Mon', '3'=>'Tue', '4'=>'Wed', '5'=>'Thu', '6'=>'Fri', '7'=>'Sat'); $day=date('d'); $endDate=date('t',mktime(0,0,0,$cMonth,$day,$cYear)); echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "\n"; echo "
 «« Prev ".date("F Y",strtotime($cYear."-".$cMonth."-01"))." Next »» 
\n"; echo "\n"; echo "
\n"; echo "\n"; foreach ($short_days as $key=>$val) { echo "\n"; } echo "\n"; $s=date('w', mktime (0,0,0,$cMonth,1,$cYear)); for ($ds=1; $ds<=$s; $ds++) { echo "\n"; } for ($d=1; $d<=$endDate; $d++) { if (date('w',mktime (0,0,0,$cMonth,$d,$cYear)) == 0) { echo "\n"; } $events = mysqli_query($connect, "SELECT * FROM `posts` WHERE SUBSTR(date,7,4)='$cYear' AND month='$cMonth' AND day='$d'"); $rows = mysqli_fetch_assoc($events); $post_id = $rows['id']; $post_title = $rows['title']; $evday = $rows['day']; if ($evday) { echo "\n"; if (date('w',mktime (0,0,0,$cMonth,$d,$cYear)) == 6) { echo ""; } } echo "
".$val."
\n"; } elseif ($d == $day && $cMonth == date('m')) { echo "\n"; } else { echo "\n"; } if ($d == $day && $cMonth == date('m') && $d <> $evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "$d\n"; } elseif ($d == $day && $cMonth == date('m') && $d == $evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "$d\n"; } elseif ($evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "$d\n"; } else { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "$d\n"; } echo "
\n"; echo "\n"; ?>

P粉950128819
P粉950128819

Antworte allen (1)
P粉561438407

如果 SQL 查询正确并且$events返回有效结果,请使用:

while($row = mysqli_fetch_assoc($events)) { # output events echo '
'; print_r($row); echo '
'; }

根据php 文档,mysqli_fetch_assoc 函数从结果集中获取一行数据并将其作为关联数组返回。对该函数的每次后续调用都将返回结果集中的下一行(如果没有更多行,则返回 null),因此我们需要使用while()循环来循环结果集。 (虽然有结果......这样做)。

要进一步改进代码,您可以首先使用mysqli_num_rows内置函数检查是否有任何结果。如果给定的日历日期没有任何事件,我们不需要循环结果,因此我们可以跳过它。

您的代码可能类似于:

$sql = "SELECT * FROM posts WHERE SUBSTR(date,7,4)='$cYear' AND month='$cMonth' AND day='$d' "; $results = mysqli_query($connect, $sql); if(mysqli_num_rows($results)) // only if there are results { while($row = mysqli_fetch_assoc($results)) { $post_id = $row['id']; $post_title = $row['title']; // ... # output echo '

'.$post_title.'

'; } }

注意- 我已将您的$events变量更改为$results,只是为了一般最佳实践目的和一致性,但从技术上来说这是这样没有必要。

另外- 考虑在 SQL 中使用ORDER BY子句 (文档),以便在结果集中按时间顺序对事件进行排序。
另外- 考虑使用准备好的语句 用于您的 SQL 查询,这更安全。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!