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"; foreach ($short_days as $key=>$val) { echo "".$val." | \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"; } 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"; if (date('w',mktime (0,0,0,$cMonth,$d,$cYear)) == 6) { echo " "; } } echo "
|
| \n"; echo "
\n"; echo "\n"; ?>
如果 SQL 查询正确并且
$events
返回有效结果,请使用:根据php 文档,mysqli_fetch_assoc 函数从结果集中获取一行数据并将其作为关联数组返回。对该函数的每次后续调用都将返回结果集中的下一行(如果没有更多行,则返回 null),因此我们需要使用
while()
循环来循环结果集。 (虽然有结果......这样做)。要进一步改进代码,您可以首先使用
mysqli_num_rows
内置函数检查是否有任何结果。如果给定的日历日期没有任何事件,我们不需要循环结果,因此我们可以跳过它。您的代码可能类似于:
注意- 我已将您的
$events
变量更改为$results
,只是为了一般最佳实践目的和一致性,但从技术上来说这是这样没有必要。另外- 考虑在 SQL 中使用
ORDER BY
子句 (文档),以便在结果集中按时间顺序对事件进行排序。另外- 考虑使用准备好的语句 用于您的 SQL 查询,这更安全。