phpでカレンダーと用事がある日を分かるようにしたい
初めて質問します。
phpを学び始めて2~3ヶ月の初心者です。
現在、phpでカレンダーを制作しているのですが、予定がある日の表示がうまくできずに困っています。
##発生している問題・エラーメッセージ
カレンダーを表示させる事はできましたが、予定の表示が最後しか表示されません。
php
1calendar.php 2<?php 3require './data.php'; 4 5$base_url = 'http://****/calendar_test/'; 6 7function funcIsAjax(){ 8 if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 9 return true; 10 11 return false; 12} 13 14if(funcIsAjax()) header("Content-type: text/plain; charset=UTF-8"); 15else {header("Location: {$base_url}"); exit;} 16 17date_default_timezone_set('Asia/Tokyo'); //タイムゾーンの設定 18 19$today = $_POST; 20extract($today); 21 22$thisMonth = new DateTime($today); 23$dt = clone $thisMonth; 24$prev = $dt->modify('-1 month')->format('Y-m'); 25$dt = clone $thisMonth; 26$next = $dt->modify('+1 month')->format('Y-m'); 27 28$yearMonth = $thisMonth->format('Y F'); 29$month = $thisMonth->format('Y-m'); 30 31// カレンダー表示 32// 前月表示 33$tr = '<div class="cal_tr">'; 34$tail = null; 35//前月の最終日を習得 36$lastDayOfPrevMonth = new DateTime('last day of ' . $yearMonth . ' -1 month'); 37while ($lastDayOfPrevMonth->format('N') < 7) { 38 $tail = sprintf('<div></div>', $lastDayOfPrevMonth->format('d')) . $tail; 39 $tail = sprintf('<div class="cal cal_td empty"><div class="cal_body"></div></div>', $lastDayOfPrevMonth->format('d')) . $tail; 40 $lastDayOfPrevMonth->sub(new DateInterval('P1D')); 41 $prevmanth = $lastDayOfPrevMonth->format('Y-m'); 42} 43 44// 当月表示 45$body = null; 46$period = new DatePeriod ( 47 new DateTime('first day of' . $yearMonth), 48 new DateInterval('P1D'), 49 new DateTime('first day of' . $yearMonth . '+1 month') 50); 51 52$today = new DateTime('today'); 53 foreach ($period as $day) { 54 if ($day->format('N') === '1'){ 55 $body .= '</div></div>'; 56 $body .= '<div class="cal_tr">'; 57 } 58 $days = $day->format('Y-m-d'); 59 60 foreach($holiday as $key) { 61 $id = $key['id']; 62 $user = $key['account_id']; 63 $kana = $key['account_kana']; 64 $from = $key['datetime_from']; 65 $to = $key['datetime_from']; 66 $type = $key['holiday_type']; 67 } 68 if($from == $days) { 69 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 70 $body .= sprintf('<div class="cal cal_td" data-date="' . $days . '"><div class="cal_date day_%d %s">%d</div><div class="cal_plan"></div><div class="cal_body"><div class="area_btn" data-user="' . $user . ' data-user="' . $kana . ' "data-from="' . $from . '" data-to="' . $to . '" data-type="' . $type . '">' . $type . '/' . ' ' .$user .'</div></div></div>', $day->format('w'), $todayClass, $day->format('d')); 71 } else { 72 $todayClass = ($day->format('Y-m-d') === $today->format('Y-m-d')) ? 'today' : ''; 73 $body .= sprintf('<div class="cal cal_td" data-date="' . $days . '"><div class="cal_date day_%d %s">%d</div><div class="cal_plan"></div><div class="cal_body"></div></div>', $day->format('w'), $todayClass, $day->format('d')); 74 75 } 76 } 77 78// 次月表示 79$head = null; 80$firstDayOfNextMonth = new DateTime('first day of' . $yearMonth . '+1 month'); 81// var_dump($firstDayOfNextMonth->format('N')); 82while($firstDayOfNextMonth->format('N') > 1) { 83 $head .= '<div class="cal cal_td empty">' . $firstDayOfNextMonth->format('d'); 84 $head .= '<div class="cal_body"></div>'; 85 $head .= '</div>'; 86 87 $firstDayOfNextMonth->add(new DateInterval('P1D')); 88 $nextMonth = $firstDayOfNextMonth->format('Y-m'); 89} 90 91echo $tr . $tail . $body . $head; 92 93?>
php
1data.php 2<?php 3$holiday[] = array( 4 'id'=> '0111' 5 ,'account_id' => '山田 太郎' 6 ,'account_kana' => 'ヤマダ タロウ' 7 ,'datetime_from' => '2019-10-23' 8 ,'datetime_to' => '2019-10-23' 9 ,'holiday_type' => '有休' 10); 11$holiday[] = array( 12 'id'=> '0112' 13 ,'account_id' => '山本 次郎' 14 ,'account_kana' => 'ヤマモト ジロウ' 15 ,'datetime_from' => '2019-11-10' 16 ,'datetime_to' => '2019-10-12' 17 ,'holiday_type' => '有休' 18); 19$holiday[] = array( 20 'id' => '0113' 21 ,'account_id' => '田中 三郎' 22 ,'account_kana' => 'タナカ サブロウ' 23 ,'datetime_from' => '2019-09-10' 24 ,'datetime_to' => '2019-09-11' 25 ,'holiday_type' => '有休' 26); 27 28?>
##試したこと
index.phpをロードしたらAjaxでcalendar.phpを読みに行く仕組みになっています。
foreachの入れ子の仕方、if文の分岐の仕方等トライしてみましたがうまくいきません。
プログラミングを始めてまだ初心者で、まだまだ理解できていない点も多々あるかと思いますがよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー