PHPでラジオボタンの状態を引き継ぐ

(1/1)
HTML は、1 回のリクエストとレスポンスの間に、「接続→通信→切断」という一連の処理が行われる。このため、前のページの状態をいったん保管しないと、その状態を引き継ぐことができない。そこで、GET 変数や POST 変数、セッション変数、Cookie を使って引き継ぐことになる。
HTML フォームで入力されたテキストは、GET 変数や POST 変数で引き継ぐことができる。では、ラジオボタンの状態はどうやって引き継げばいいだろうか。

サンプル・プログラム

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

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

0064: $i = 1;
0065: foreach ($RailWays as $key=>$val) {
0066: $out_body .=<<< EOT
0067: <input type="radio" name="railway" value="$key" $val />$key<br />
0068: 
0069: EOT;
0070:     $i++;
0071: }

ラジオボタンは、HTML フォームに name="railway" として配置している。
選択されたラジオボタンの value の値は、POST 変数 $_POST['railway'] に格納される。そこで、$_POST['railway'] の値があるラジオボタンに checked 属性を付加すればいい。
では、どうやってその判断を行うか――ここでは、連想配列を使うことにする。

0040: //checkedを設定する
0041: else if (isset($_POST['railway'])) {
0042:     $val = mb_convert_encoding($_POST['railway'], $InternalEncoding, 'auto');
0043:     $RailWays[$val] = 'checked';
0044: }

あらかじめ連想配列 $RailWays を用意する。
添え字はラジオボタンの value の内容と同じである。値として、NULL または 'checked' を入れるようにするのである。

この方法は、もちろん GET 変数でもそのまま適用できる。

サンプル・プログラムの解説:連想配列作成支援

0014: /**
0015:  * 文字列から連想配列を生成する
0016:  * @param string $delimiter 区切り文字
0017:  * @param string $str $delimiterで区切られた文字列
0018:  * @param array  $arr 連想配列を格納する領域
0019:  * @return int 連想配列の要素数
0020: */
0021: function explodeArray($delimiter$str, &$arr) {
0022:     $arr2 = explode($delimiter$str);
0023:     $cnt = 0;
0024:     foreach ($arr2 as $val) {
0025:         $arr[$val] = NULL;       //値の初期値
0026:         $cnt++;
0027:     }
0028:     return $cnt;
0029: }

おまけ機能として、連想配列 $RailWays を用意するための支援関数 explodeArray を用意した。

このユーザー関数は、カンマで区切られた文字列 '中央線,総武線,山手線,京浜東北線,埼京線,湘南新宿ライン' を渡すと、連想配列
  $RailWays['中央線'] = NULL
  $RailWays['総武線'] = NULL
  $RailWays['山手線'] = NULL
  ...
を返してくれるというものである。

長大なラジオボタンのリストを作るのは面倒だ。この関数を利用していただければ幸いである。

参考サイト

(この項おわり)
header