質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6688閲覧

$_GETを使ってURLから値を取得しカレンダーを表示する

yamanoharu0129

総合スコア47

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/08/02 03:25

課題で、$_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;?>">&lt;&lt;</a></td> <th colspan="5"><?php echo $thisMonthText;?></th> <td><a href="<?php echo $nextMonthUrl;?>">&gt;&gt;</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 = "&nbsp;"; }else{ $dayText = $day->thisDay(); } echo '<td class="'.$weekdayClass .'">',$dayText,'</td>'; $weekday++; } echo '</tr>'; } ?> </tbody> </table> </body> </html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーが出ているのはこの部分です。

php

1//カレンダーに表示する年月を取得します。 2$year = $_GET['y']; 3$month = $_GET['m'];

Notice: Undefined index: なので、
以下の様に変更します。

php

1//カレンダーに表示する年月を取得します。 2if (isset($_GET['y'])) { 3 $year = $_GET['y']; 4} 5if (isset($_GET['m'])) { 6 $month = $_GET['m']; 7}

ただし、このままではGETパラメータを何も指定しなかった場合に同じくエラーが出ますので、以下の様にすればパラメータを指定しなかった場合は、初期値は今年の今月になります。

php

1//カレンダーに表示する年月を取得します。 2if (isset($_GET['y']) && isset($_GET['m'])) { 3 $year = $_GET['y']; 4 $month = $_GET['m']; 5} else { 6 $date = new DateTime(); 7 $year = $date->format('Y'); 8 $month = $date->format('n'); 9}

投稿2015/08/02 04:30

編集2015/08/02 04:37
rik

総合スコア1151

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php

1//$prevMonthUrl = '?year_month='.date('Ym', $prevMonth); 2//$nextMonthUrl = '?year_month='.date('Ym', $nextMonth); 3$prevMonthUrl = '?year=' . date('Y', $prevMonth) . '&month=' . date('m', $prevMonth); 4$prevMonthUrl = '?year=' . date('Y', $nextMonth) . '&month=' . date('m', $nextMonth);

投稿2015/08/02 03:45

nanndemoiikara

総合スコア775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問