cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk memaparkan berbilang acara setiap hari dalam kod kalendar php saya

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&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粉950128819434 hari yang lalu610

membalas semua(1)saya akan balas

  • P粉561438407

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

    hanya untuk tujuan amalan terbaik umum dan konsisten, tetapi secara teknikal ia tidak perlu.

    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

    untuk pertanyaan SQL anda, yang lebih selamat. 🎜

    balas
    0
  • Batalbalas