PHPでチェックボックスの状態を引き継ぐ

(1/1)
PHP でラジオボタンの状態を引き継ぐ」では、ページ遷移した際に GET 変数や POST 変数でラジオボタンの状態を引き継ぐ方法を紹介した。今回は、同様の方法でチェックボックスの状態を引き継ぐプログラムを作ることにする。
ラジオボタンとは異なり、複数の状態を引き継ぐ必要がある点に注意が必要だ。

サンプル・プログラム

サンプル・プログラム checked2.php を実行してみてほしい。
チェックボタンをチェックして「実行」ボタンを押下する。すると、画面表示は全く変わらないが、タイトル右横の「回数」は増えている。とくに、チェックボタンのチェック箇所を複数にして試してみていただきたい。
じつは、きちんと画面遷移は行われている。そして、チェックボタンの状態も引き継がれているのである。
その仕組みを説明しよう――。

サンプル・プログラムの解説:checked属性の付け方

0046: //checkedを設定する
0047: else if (isset($_POST['railway'])) {
0048:     foreach ($_POST['railway'] as $val) {
0049:         $val = mb_convert_encoding($val$InternalEncoding, 'auto');
0050:         $RailWays[$val] = 'checked';
0051:     }
0052: }

チェックボックスは、HTML フォームに name="railway[I]" として配置している。これは、「PHP でチェックボックスを配列のように扱う」で述べたように、PHP にはチェックボックスを配列のようにして扱う機能があることを利用している。

選択されたチェックボックスの value の値は、POST 変数 $_POST['railway'][I] に格納される。そこで、$_POST['railway'][I] の値があるチェックボックスに checked 属性を付加すればいい。

checked 属性を付加するかどうかの判断は、「PHP でラジオボタンの状態を引き継ぐ」と同様に連想配列を使って行う。

サンプル・プログラムの解説:すべてチェック

0040: //全てチェック
0041: else if (isset($_POST['all'])) {
0042:     foreach ($RailWays as $key=>$val) {
0043:         $RailWays[$key] = 'checked';
0044:     }

おまけ機能として、チェックボックスすべてにチェックを付けるルーチンを用意した。
これはクライアントサイド(JavaScript)でも実現できる。

参考サイト

(この項おわり)
header