Comment afficher plusieurs événements par jour dans mon code de calendrier php
P粉950128819
P粉950128819 2023-09-06 10:03:16
0
1
650

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&amp;year=$prev_year' title='Previous Month'>&nbsp;<big>&laquo;&laquo;</big>&nbsp;Prev</a></td>\n";
echo "<td align='center'><a class='mcaldate2' href='#' title='Current Month'>&nbsp;".date("F Y",strtotime($cYear."-".$cMonth."-01"))."&nbsp;</a></td>\n";
echo "<td align='right'><a class='caldate3' href='".$_SERVER['PHP_SELF']."?month=$next_month&amp;year=$next_year' title='Next Month'>Next&nbsp;<big>&raquo;&raquo;</big>&nbsp;</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粉950128819
P粉950128819

répondre à tous(1)
P粉561438407

Si la requête SQL est correcte et $events renvoie des résultats valides, utilisez :

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

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_rowsmysqli_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 à :

$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>';
    }
}

REMARQUE - J'ai modifié votre variable $events 变量更改为 $results en $results

juste à des fins de bonnes pratiques générales et de cohérence, mais techniquement, ce n'est pas nécessaire.

AussiORDER BY - Pensez à utiliser la clause ORDER BY dans SQL (Documentation
) pour trier les événements par ordre chronologique dans l'ensemble de résultats. Aussi - Pensez à utiliser des Prepared Statements

pour vos requêtes SQL, ce qui est plus sûr. 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal