PHPで年月日を入力(プルダウン方式)

(1/1)
PHPでプルダウンメニューを使って年月日を入力するフォームを作る。日数は大の月と小の月によって変わるようにし、とくに閏年の2月の入力に気をつける。

(2021年4月24日)PHP8対応,リファラ・チェック改良

サンプル・プログラムの実行例

PHPで年月日を入力(プルダウン方式)

サンプル・プログラム

圧縮ファイルの内容
selYMD.phpサンプル・プログラム本体。
selYMD.php 更新履歴
バージョン 更新日 内容
1.1 2021/04/24 PHP8対応,リファラ・チェック改良
1.0 2009/08/19

ある年月に対応する日数をプルダウンメニューにする

 176:     //表示用HTML
 177:     $outstr = '';
 178: //--プルダウンメニュー
 179:     if ($mode) {
 180:         $name = 'exec';
 181: //--年
 182:     $outstr .=<<< EOT
 183: <select name="year" onChange="submit();">
 184: 
 185: EOT;
 186:     for ($y = $year - 3$y <$year + 3$y++) {
 187:         $selected = ($y == $year? 'selected' : '';
 188:         $outstr .=<<< EOT
 189: <option value="{$y}" {$selected}>{$y}</option>
 190: 
 191: EOT;
 192:     }
 193:     $outstr .=<<< EOT
 194: </select>年
 195: 
 196: EOT;
 197: 
 198: //--月
 199:     $outstr .=<<< EOT
 200: <select name="month" onChange="submit();">
 201: 
 202: EOT;
 203:     for ($m = 1$m <12$m++) {
 204:         $selected = ($m == $month? 'selected' : '';
 205:         $outstr .=<<< EOT
 206: <option value="{$m}" {$selected}>{$m}</option>
 207: 
 208: EOT;
 209:     }
 210:     $outstr .=<<< EOT
 211: </select>月
 212: 
 213: EOT;
 214: 
 215: //--日
 216:     $dd = getDaysInMonth($year, $month);
 217:     $outstr .=<<< EOT
 218: <select name="day" onChange="submit();">
 219: 
 220: EOT;
 221:     for ($d = 1$d <$dd$d++) {
 222:         $selected = ($d == $day? 'selected' : '';
 223:         $outstr .=<<< EOT
 224: <option value="{$d}" {$selected}>{$d}</option>
 225: 
 226: EOT;
 227:     }
 228:     $outstr .=<<< EOT
 229: </select>日
 230: 
 231: EOT;
 232: 
 233: //--年月日を表示

プルダウンメニューは、年(year)、月(month)、日(day)を別々のタグにする。
ここでは、日(day)の作り方のみを解説する。

ある年(year)、月(month)の日数は、「PHPで祝日を求める」で紹介したユーザー関数 getDaysInMonth を流用する。
getDaysInMonth で得られた値だけ、for ループを回し、optionタグを発生させる。
この際、引数として与えられた $day と同じ日には selected 属性を付けておく。

このプルダウンメニューが変化したら、JavaScript の onChange イベントで submit 駆動し、form 内容を送信するようにしている。これは年(year)、月(month)の場合も同様で、これを行うことで、年・月を変更した際に月の日数を計算し直すことになる。

ただし、いちいちサーバサイドで計算させることはサーバに負荷がかかるので、この処理は、本来はクライアントサイドでJavaScriptで行わせるのが良いだろう。JavaScriptによる処理については、「jQueryで年月日セレクタを用意する」をご覧いただきたい。

参考サイト

(この項おわり)
header