課題で、$_GET[’’]を使って、URLに入力された年月のカレンダーを作っています。完成は以下です。
例えば、
https://127.0.0.1/Q4.php?y=2015&m=8
だと、yとmに分けて、
$year = $_GET['y']; //年
$month = $_GET['m']; //月
として取得します。
ここまでは出来、値の入力で正しく表示出来たのですが、ここから翌月や昨月に遷移することが出来ません。リンクをクリックして遷移すると、URLが、
https://127.0.0.1/Q4.php?year_month=199102
とyear_monthに代わってしまい、これでエラーが出ます。
このコードは、PHP逆引きレシピのdateで値を取得してカレンダーを表示するサンプルがベースで、年月の部分だけ変更して、y=とm=の入力で使えるようにしています。私の理解不足ですが、year_monthの部分をここからどのように変更すればいいかわかりません。
以下は画像の時点でのコードです。
年月の取得の、
$year = $_GET['y']; //年
$month = $_GET['m']; //月
の部分がベースのコードから変えています。
どうすればよいでしょうか。回答お願いします。
<head> <style type="text/css"> th,td { text-align: center; } .sunday { background-color: #FFC0C0; } .saturday { background-color: #C0C0FF; } </style> </head> <body> <?php require_once 'Calendar/Month/Weeks.php'; //曜日クラス名 $weekdayDefines = array(array('日','sunday'),array('月','monday'), array('火','tuesday'),array('水','wednesday'), array('木','thursday'),array('金','friday'), array('土','saturday')); //カレンダーの左側指定 $weekdayBase = 0; //0:日曜~6:土曜 //カレンダーに表示する年月を取得します。 $year = $_GET['y']; $month = $_GET['m']; //GETパラメータが指定されている場合は値を検証してから表示年月を取得 if(isset($_GET['year_month'])){ $yyyymm = trim($_GET['year_month']); //YYYYMM形式であれば年月を取得 if(preg_match('/^([12]\d{3})(1[012]|0[1-9])$/', $yyyymm, $match)) { $year = (int) $match[1]; $month = (int) $match[2]; } } //カレンダーデータを生成します。 $calendar = new Calendar_Month_Weeks($year, $month, $weekdayBase); $calendar->build(); //カレンダーの曜日部分を表示します。 $thisMonth = $calendar->thisMonth(TRUE); //今月 $prevMonth = $calendar->prevMonth(TRUE); //先月 $nextMonth = $calendar->nextMonth(TRUE); //来月 $prevMonthUrl = '?year_month='.date('Ym', $prevMonth); $nextMonthUrl = '?year_month='.date('Ym', $nextMonth); $thisMonthText = date('Y/m',$thisMonth); ?> <table border="1"> <thead> <tr> <td><a href="<?php echo $prevMonthUrl;?>"><<</a></td> <th colspan="5"><?php echo $thisMonthText;?></th> <td><a href="<?php echo $nextMonthUrl;?>">>></a></td> </tr> <tr> <?php for ($i = 0; $i < 7; $i++) { $weekday = ($weekdayBase + $i) % 7; $weekdayText = $weekdayDefines[$weekday][0]; $weekdayClass = $weekdayDefines[$weekday][1]; echo '<th class="'.$weekdayClass .'">',$weekdayText,'</th>'; } ?> </tr> </thead> <tbody> <?php //カレンダーの日付部分を表示します。 while ($days = $calendar->fetch()) { $days->build(); $weekday = 0; echo '<tr>'; while ($day = $days->fetch()) { $weekdayClass = $weekdayDefines[$weekday][1]; if($day->isEmpty()){ $dayText = " "; }else{ $dayText = $day->thisDay(); } echo '<td class="'.$weekdayClass .'">',$dayText,'</td>'; $weekday++; } echo '</tr>'; } ?> </tbody> </table> </body> </html>

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。