サンプル・プログラムの実行例
ラジオボタンをチェックして「実行」ボタンを押下する。すると、画面表示は全く変わらないが、タイトル右横の「回数」は増えている。
じつは、きちんと画面遷移は行われている。そして、ラジオボタンの状態も引き継がれているのである。
その仕組みを説明しよう――。
サンプル・プログラム
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: }
選択されたラジオボタンの 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: }
添え字はラジオボタンの 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['中央線'] = NULLを返してくれるというものである。
$RailWays['総武線'] = NULL
$RailWays['山手線'] = NULL
...
長大なラジオボタンのリストを作るのは面倒だ。この関数を利用していただければ幸いである。
参考サイト
- PHPで入力値を検査する(ぱふぅ家のホームページ)
HTMLフォームで入力されたテキストは、GET変数やPOST変数で引き継ぐことができる。では、ラジオボタンの状態はどうやって引き継げばいいだろうか。
(2021年4月11日)PHP8対応,リファラ・チェック追加.