サンプル・プログラムの実行例
サンプル・プログラム
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: //--年月日を表示
ここでは、日(day)の作り方のみを解説する。
ある年(year)、月(month)の日数は、「PHPで祝日を求める」で紹介したユーザー関数 getDaysInMonth を流用する。
getDaysInMonth で得られた値だけ、for ループを回し、optionタグを発生させる。
この際、引数として与えられた $day と同じ日には selected 属性を付けておく。
このプルダウンメニューが変化したら、JavaScript の onChange イベントで submit 駆動し、form 内容を送信するようにしている。これは年(year)、月(month)の場合も同様で、これを行うことで、年・月を変更した際に月の日数を計算し直すことになる。
ただし、いちいちサーバサイドで計算させることはサーバに負荷がかかるので、この処理は、本来はクライアントサイドでJavaScriptで行わせるのが良いだろう。JavaScriptによる処理については、「jQueryで年月日セレクタを用意する」をご覧いただきたい。
参考サイト
- PHPで祝日を求める:ぱふぅ家のホームページ
- PHPで閏年かどうか判定する:ぱふぅ家のホームページ
- jQueryで年月日セレクタを用意する:ぱふぅ家のホームページ
(2021年4月24日)PHP8対応,リファラ・チェック改良