0

各日付内のイベントを表示するこのカレンダーを開発しています。ユーザーに表示されるイベントは、ユーザーが関連しているイベントにすぎません。関係は、MySQLの多対多テーブルを介して作成されます。正常に動作しています。ユーザーに関連するイベントがない場合にのみ問題が発生します。その場合、in_arrayphp関数は私にこのエラーを与えます:

注意:未定義の変数:C:\ xampp \ htdocs \ sistema-navalha\calendario_teste.phpの51行目のcleanDataArray

警告:in_array()は、パラメーター2が配列であり、51行目のC:\ xampp \ htdocs \ sistema-navalha\calendario_teste.phpでnullが指定されていることを想定しています。

問題は、後でin_array関数によって計算される値がユーザーから与えられないことですが、合理的な代替案を見つけることができません。この状況で重要なコードは次のとおりです。

$stmt = $db->prepare("SELECT * FROM events WHERE
                      id_events = ( SELECT id_events FROM relationship_events WHERE id_user = ?)");
$stmt->bindParam(1, $idUser);
$stmt->execute();

$rawTimeStamps = $stmt->fetchAll(PDO::FETCH_ASSOC);
$cleanDateArray = array();

foreach ($rawTimeStamps as $t) {
$rawDate = $t['start'];
$rawDate = getdate($rawDate);
$cleanDate = mktime(0,0,0,$rawDate['mon'],$rawDate['mday'],$rawDate['year']);
$cleanDataArray[] = $cleanDate;
}

for($list_day = 1; $list_day <= $days_in_month; $list_day++):
    
    $calendar.= '<td class="calendar-day">';
        $timestamp = mktime(0,0,0,$month,$list_day,$year);
        if (in_array($timestamp, $cleanDataArray)) {

        $date = getdate($timestamp);
        $time_start = mktime(0,0,0,$date['mon'],$date['mday'],$date['year']);
        $time_end = mktime(23,59,59,$date['mon'],$date['mday'],$date['year']);
        $stmt = $db->prepare('SELECT title FROM events WHERE start BETWEEN ? AND ?');
        $stmt->bindParam(1,$time_start,PDO::PARAM_INT);
        $stmt->bindParam(2,$time_end,PDO::PARAM_INT);
        $stmt->execute();
        $events = $stmt->fetch(PDO::FETCH_ASSOC);

        $calendar.= '<div class="day-number day-number-event"><a href="#">'.$list_day.'</a></div><p>'.$events["title"].'</p>';
        } else {
        $calendar.= '<div class="day-number day-number-noevent">'.$list_day.'</div><div id="calendar-events"></div>';
        }

    $calendar.= '</td>';
    if($running_day == 6):
        $calendar.= '</tr>';
        if(($day_counter+1) != $days_in_month):
            $calendar.= '<tr class="calendar-row">';
        endif;
        $running_day = -1;
        $days_in_this_week = 0;
    endif;
    $days_in_this_week++; $running_day++; $day_counter++;
endfor;

誰かが解決策を持っていることを願っています

4

2 に答える 2

3

スペルミスがあり、cleanDateArray として初期化されており、cleanDataArray を渡しています...cleanDataArray はレコード取得ループの外で初期化されていません。初期化を変更するだけで問題ありません。

于 2012-11-05T19:38:46.947 に答える
2

チェックを入れるだけ、!empty()チェックの前にin_array

if (!empty($cleanDataArray) && in_array($timestamp, $cleanDataArray)) {
于 2012-11-05T19:38:45.443 に答える