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

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

ただいまの
回答率

90.48%

  • PHP

    20812questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,856

yamanoharu0129

score 39

課題で、$_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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

エラーが出ているのはこの部分です。 
//カレンダーに表示する年月を取得します。
$year = $_GET['y'];
$month = $_GET['m'];

Notice: Undefined index: なので、
以下の様に変更します。
//カレンダーに表示する年月を取得します。
if (isset($_GET['y'])) {
    $year = $_GET['y'];
}
if (isset($_GET['m'])) {
    $month = $_GET['m'];
}
ただし、このままではGETパラメータを何も指定しなかった場合に同じくエラーが出ますので、以下の様にすればパラメータを指定しなかった場合は、初期値は今年の今月になります。
//カレンダーに表示する年月を取得します。
if (isset($_GET['y']) && isset($_GET['m'])) {
    $year = $_GET['y'];
    $month = $_GET['m'];
} else {
    $date = new DateTime();
    $year = $date->format('Y');
    $month = $date->format('n');
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    java カレンダー作成

    追記:JDKのバージョンは1.6.0_19です。 そして指示によりimportは使用できないようになっています。 コマンドライン引数で年月の値を引き渡し(201604の

  • 解決済

    java カレンダー 土曜日改行

    4/22質問内容を少々修正いたしました。 ?????に何を入れれば土曜日で改行となりますでしょうか? ヒントとして、【int week = cal.get(java.util.

  • 受付中

    サーブレットを直接表示させたい

    前提・実現したいこと スケジュールを登録、更新、削除するwebアプリケーションを作成しています サーブレットの名前をアドレスバーに打ち込んだら直接サーブレットの内容が表示される

  • 解決済

    一年分の日曜日の取得

    一年分の日曜日の取得について下記のように書いてみましたが、行き詰まっております。 配列として年が変わるたびに日曜日を取得したいのですが、どう修正すればよいかどなたか教えて頂けます

  • 解決済

    DBから取得した予定を組み込んだカレンダー作成

    前提・実現したいこと PHPでカレンダーを作成しています。ただ日付を表示するところまではできたのですが、データベースから取得したスケジュールを表示させる方法がわかりません。 予

  • 解決済

    縦型のカレンダーを出力したい PHP

    最終的には画像のように送信ボタンを押したら、選択年月が曜日と合わせて テーブルで出力されるカレンダーを作りたいのですが、 月初の曜日を月末まで連続して出力する処理の書き方がわか

  • 解決済

    PHP JavaScript 非表示の状態からプルダウンメニューで選択し、 内容を表示させたい

    画像1 ↓ 画像2 画像1.画像2のように非表示の状態からプルダウンメニューで選択し、 javascriptを使い内容を表示させたいです。 送信ボタンに関数

  • 解決済

    PHPでカレンダーを表示させたいのですが・・・

    PHPでカレンダーを表示したいのですが・・・。 表示形式は 1日(日) 2日(月) 3日(火) と続くようにしていきます。 これは実際にできました。これを使って、土曜日は青、日

同じタグがついた質問を見る

  • PHP

    20812questions

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