Rumah > Soal Jawab > teks badan
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:
<?php $cMonth = isset($_REQUEST["month"]) ? $cMonth = intval($_REQUEST["month"]) : $cMonth = date("m"); $cYear = isset($_REQUEST["year"]) ? $cYear = intval($_REQUEST["year"]) : $cYear = date("Y"); $prev_year = $cYear; $prev_year2 = $cYear-1; $next_year = $cYear; $next_year2 = $cYear+1; $prev_month = $cMonth-1; $next_month = $cMonth+1; if ($cMonth == 12 ) { $next_month = 1; $next_year = $next_year2; } elseif ($cMonth == 1 ) { $prev_month = 12; $prev_year = $prev_year2; } $short_days = array('1'=>'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 "<table width='100%' align='center' border='0' cellpadding='0' cellspacing='5'><tr bgcolor='white'>\n"; echo "<td align='left'><a class='caldate3' href='".$_SERVER['PHP_SELF']."?month=$prev_month&year=$prev_year' title='Previous Month'> <big>««</big> Prev</a></td>\n"; echo "<td align='center'><a class='mcaldate2' href='#' title='Current Month'> ".date("F Y",strtotime($cYear."-".$cMonth."-01"))." </a></td>\n"; echo "<td align='right'><a class='caldate3' href='".$_SERVER['PHP_SELF']."?month=$next_month&year=$next_year' title='Next Month'>Next <big>»»</big> </a></td></tr>\n"; echo "<tr><td colspan='3' height='5'></td>\n"; echo "</tr></table>\n"; echo "<table width='100%' align='center' border='0' cellpadding='0' cellspacing='0'><tr><td class='norm'>\n"; echo "<table width='100%' align='center' border='0' cellpadding='2' cellspacing='1'><tr bgcolor='#000' height='20'>\n"; foreach ($short_days as $key=>$val) { echo "<td width='14%' align='center'><span style='font-size:14px; color:#ffff00;'><b>".$val."</b></span></td>\n"; } echo "</tr><tr>\n"; $s=date('w', mktime (0,0,0,$cMonth,1,$cYear)); for ($ds=1; $ds<=$s; $ds++) { echo "<td class='norm' height='20' align='center' valign='middle'></td>\n"; } for ($d=1; $d<=$endDate; $d++) { if (date('w',mktime (0,0,0,$cMonth,$d,$cYear)) == 0) { echo "</tr><tr>\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 "<td height='20' class='event' align='center' valign='middle'>\n"; } elseif ($d == $day && $cMonth == date('m')) { echo "<td height='20' class='today' align='center' valign='middle'>\n"; } else { echo "<td height='20' class='norm' align='center' valign='middle'>\n"; } if ($d == $day && $cMonth == date('m') && $d <> $evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "<span class='cal2'><a class='cal2' href='#' title='Today'>$d</a></span>\n"; } elseif ($d == $day && $cMonth == date('m') && $d == $evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "<a class='cal2' href='post.php?id=$post_id' title='Today - $post_title'>$d</a>\n"; } elseif ($evday) { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "<a class='ecal' href='post.php?id=$post_id' title='$post_title'>$d</a>\n"; } else { $d = str_pad($d,2,'0',STR_PAD_LEFT); echo "<span class='noevt'>$d</span>\n"; } echo "</td>\n"; if (date('w',mktime (0,0,0,$cMonth,$d,$cYear)) == 6) { echo "</tr>"; } } echo "</table></td></tr><tr><td height='8'></td>\n"; echo "</tr></table>\n"; echo "</td></tr></table>\n"; ?>
P粉5614384072023-09-07 00:12:02
Jika pertanyaan SQL adalah betul dan $events
mengembalikan hasil yang sah, gunakan:
while($row = mysqli_fetch_assoc($events)) { # output events echo '<pre>'; print_r($row); echo '</pre>'; }
Menurut dokumentasi php, fungsi < code>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:
$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 '<p>'.$post_title.'</p>'; } }
NOTA - Saya telah menukar pembolehubah $events
变量更改为 $results
anda kepada $results
JugaORDER BY
- Pertimbangkan untuk menggunakan klausa ORDER BY dalam SQL (Dokumentasi
) untuk mengisih acara mengikut kronologi dalam set hasil.
Juga - Pertimbangkan untuk menggunakan < /a>Penyata Disediakan