Mon calendrier fonctionne correctement tel qu'écrit, mais si j'ajoute un autre événement le même jour, il n'affiche que le premier événement enregistré dans la base de données. Je dois pouvoir afficher plusieurs événements le même jour.
J'ai essayé d'utiliser les boucles for/next et while dans mon code pour extraire des informations de la base de données. Rien de tout cela ne fonctionne de la façon dont le code est écrit. Ce lien vous montrera le calendrier de travail tel qu'écrit : Grims World Blog Voici mon code :
<?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"; ?>
Si la requête SQL est correcte et
$events
renvoie des résultats valides, utilisez :Selon la documentation php, la fonction mysqli_fetch_assoc récupère une ligne de données de l'ensemble de résultats et la renvoie sous forme de tableau associatif. Chaque appel ultérieur à cette fonction renverra la ligne suivante dans l'ensemble de résultats (ou null s'il n'y a plus de lignes), nous devons donc utiliser une boucle
while()
while()
pour parcourir l'ensemble de résultats. (Bien qu'il y ait des conséquences... faire cela).Pour améliorer davantage le code, vous pouvez d'abord vérifier s'il y a des résultats en utilisant la fonction intégrée
mysqli_num_rows
mysqli_num_rows
. Nous n'avons pas besoin de parcourir les résultats s'il n'y a aucun événement pour une date calendaire donnée, nous pouvons donc l'ignorer.Votre code pourrait ressembler à :
REMARQUE - J'ai modifié votre variable
juste à des fins de bonnes pratiques générales et de cohérence, mais techniquement, ce n'est pas nécessaire.$events
变量更改为$results
en$results
Aussi
pour vos requêtes SQL, ce qui est plus sûr. 🎜ORDER BY
- Pensez à utiliser la clauseORDER BY dans SQL (Documentation
) pour trier les événements par ordre chronologique dans l'ensemble de résultats. Aussi - Pensez à utiliser des Prepared Statements