recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment afficher plusieurs événements par jour dans mon code de calendrier php

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粉950128819P粉950128819451 Il y a quelques jours638

répondre à tous(1)je répondrai

  • P粉561438407

    P粉5614384072023-09-07 00:12:02

    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 < code>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 < /a>Prepared Statements

    pour vos requêtes SQL, ce qui est plus sûr. 🎜

    répondre
    0
  • Annulerrépondre