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

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

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

目次

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

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

サンプル・プログラム

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

解説:checked属性の付け方

 141:     //処理選択ラジオボタン
 142:     $str_radio = '';
 143:     $i = 1;
 144:     foreach ($RailWays as $key=>$val) {
 145:         $str_radio ."<input type=\"radio\" name=\"railway\" value=\"{$key}\" {$val} />{$key}<br />\n";
 146:         $i++;
 147:     }

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

 186: //checkedを設定する
 187: else if (isset($_POST['railway'])) {
 188:     $val = mb_convert_encoding($_POST['railway'], INTERNAL_ENCODING, 'auto');
 189:     $RailWays[$val] = 'checked';
 190: }

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

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

解説:連想配列作成支援

  98: /**
  99:  * 文字列から連想配列を生成する
 100:  * @param   string $delimiter 区切り文字
 101:  * @param   string $str $delimiterで区切られた文字列
 102:  * @param   array  $arr 連想配列を格納する領域
 103:  * @return  int 連想配列の要素数
 104: */
 105: function explodeArray($delimiter, $str, &$arr) {
 106:     $arr2 = explode($delimiter, $str);
 107:     $cnt = 0;
 108:     foreach ($arr2 as $val) {
 109:         $arr[$val] = NULL;      //値の初期値
 110:         $cnt++;
 111:     }
 112:     return $cnt;
 113: }

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

このユーザー関数は、カンマで区切られた文字列 '中央線,総武線,山手線,京浜東北線,埼京線,湘南新宿ライン' を渡すと、連想配列
$RailWays['中央線'] = NULL
$RailWays['総武線'] = NULL
$RailWays['山手線'] = NULL
...
を返してくれるというものである。
長大なラジオボタンのリストを作るのは面倒だ。この関数を利用していただければ幸いである。

参考サイト

(この項おわり)
header