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

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

(2021年4月11日)PHP8対応,リファラ・チェック追加.

目次

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

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

サンプル・プログラム

圧縮ファイルの内容
checked2.phpサンプル・プログラム本体。

解説:checked属性の付け方

0141:     //処理選択チェックボックス
0142:     $str_check = '';
0143:     $i = 1;
0144:     foreach ($RailWays as $key=>$val) {
0145:         $str_check .= "<input type=\"checkbox\" id=\"railway[{$i}]\" name=\"railway[{$i}]\" value=\"{$key}\" {$val} />{$key}<br />\n";
0146:         $i++;
0147:     }

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

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

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

解説:すべてチェック

0189: else if (isset($_POST['all'])) {
0190:     foreach ($RailWays as $key=>$val) {
0191:         $RailWays[$key] = 'checked';
0192:     }

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

参考サイト

(この項おわり)
header