【PHP】カレンダーを作成してみよう-2

PHP

PHPではデータベースやフォームから取得した値をブラウザ上に表示させる際に悪意のあるコードを実行させないために「htmlspecialchars」を使い文字をエスケープすることが一般的です。以下のような関数を定義しておきます。

function h($s){
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

「preg_match」関数を利用すれば正規表現のパターンでマッチするかどうかを判断できます。この場合はクエリ文字列「?t=2020-06」などのように年4桁と月2桁となっているかチェックしています。この記述は、クエリ文字列「t」でYYYY-mmの形で指定された年月を、それ以外は本日の年月を指定します。

try{
    if (!isset($_GET['t'])|| !preg_match('/\A\d{4}-\d{2}\z/',$_GET['t'])){
        throw new Exception();
    }
    $thisMonth = new DateTime($_GET['t']);
} catch (Exception $e){
    $thisMonth = new DateTime('first day of this month');
}


$thisMonthはDateTime型のオブジェクトなので値を操作する場合は、「clone」を使って別変数を使い計算させましょう。このカレンダーアプリは左のリンクをクリックすることで前月、右のリンクをクリックすると次月に移動するので、「modify」を利用して前後1か月の年月を取得しています。

$dt = clone $thisMonth;
$prev = $dt->modify('-1 month')->format('Y-m');
$dt = clone $thisMonth;
$next = $dt->modify('+1 month')->format('Y-m');

$yearMonth = $thisMonth->format('Y-m');

今回はこのぐらいにして次回に続きを書こうと思います。

コメント

タイトルとURLをコピーしました