Kalendar saya berfungsi dengan baik seperti yang ditulis, tetapi jika saya menambah acara lain pada hari yang sama, ia hanya memaparkan acara pertama yang direkodkan dalam pangkalan data. Saya perlu dapat memaparkan berbilang acara pada hari yang sama.
Saya cuba menggunakan gelung untuk/seterusnya dan gelung while dalam kod saya untuk mengekstrak maklumat daripada pangkalan data. Tiada satu pun daripadanya berfungsi dengan cara kod ditulis. Pautan ini akan menunjukkan kepada anda kalendar kerja seperti yang ditulis: Blog Dunia Grims Ini kod saya:
'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"; ?>
Jika pertanyaan SQL adalah betul dan
$events
mengembalikan hasil yang sah, gunakan:Menurut dokumentasiphp, fungsi mysqli_fetch_assoc mengambil satu baris data daripada set hasil dan mengembalikannya sebagai tatasusunan bersekutu. Setiap panggilan seterusnya ke fungsi ini akan mengembalikan baris seterusnya dalam set hasil (atau batal jika tiada lagi baris), jadi kita perlu menggunakan gelung
while()
while()
untuk menggelung ke atas set hasil. (Walaupun ada akibatnya...buat begini).Untuk menambah baik kod lagi, anda boleh menyemak dahulu sama ada terdapat sebarang hasil menggunakan fungsi
mysqli_num_rows
mysqli_num_rows
terbina dalam. Kami tidak perlu mengulangi keputusan jika tiada acara untuk tarikh kalendar tertentu, jadi kami boleh melangkaunya.Kod anda mungkin kelihatan seperti:
NOTA- Saya telah menukar pembolehubah
hanya untuk tujuan amalan terbaik umum dan konsisten, tetapi secara teknikal ia tidak perlu.$events
变量更改为$results
anda kepada$results
Juga
untuk pertanyaan SQL anda, yang lebih selamat.ORDER BY
- Pertimbangkan untuk menggunakan klausaORDER BYdalam SQL (Dokumentasi
) untuk mengisih acara mengikut kronologi dalam set hasil.Juga- Pertimbangkan untuk menggunakan Penyata Disediakan