会員登録フォームなどでactionが自身だった場合、再入力させるのは手間なのでよく下記のような形でvalueにPOST送信して前回入力したものが残るような仕組みがあります。
<input type="email" name="email" value="<?php echo h(filter_input(INPUT_POST, 'email')); ?>" maxlength="50" >
テキストボックスは分かるのですが、
ラジオボックスとプルダウンリストの場合はどこにPOST送信すればいいのでしょうか?
<input type="radio" name="sex" value="男性" />男性 <input type="radio" name="sex" value="女性" />女性 <select name="pref"> <option value="東京都">"東京都"</option> <option value="大阪">"大阪"</option> <option value="福岡">"福岡"</option> </select>
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
「どこにPOST送信すれば」の意味がちょっと難解ですけど
おそらくこういう事じゃないでしょうか....
php
1<input type="radio" name="sex" value="男性" <?php if( h(filter_input(INPUT_POST, 'sex') === '男性') echo 'checked="checked"' ?>/>男性 2<input type="radio" name="sex" value="女性" <?php if( h(filter_input(INPUT_POST, 'sex') === '女性') echo 'checked="checked"' ?> />女性 3 4<select name="pref"> 5<option value="東京都" <?php if( h(filter_input(INPUT_POST, 'pref') === '東京都') echo 'selected="true"' ?>>"東京都"</option> 6<option value="大阪" <?php if( h(filter_input(INPUT_POST, 'pref') === '大阪') echo 'selected="true"' ?>>"大阪"</option> 7<option value="福岡" <?php if( h(filter_input(INPUT_POST, 'pref') === '福岡') echo 'selected="true"' ?>>"福岡"</option> 8</select>
投稿2016/06/09 21:33
退会済みユーザー
総合スコア0
0
php
1<?php 2 3class Sex 4{ 5 6 function getSex() 7 { 8 $options = '<input type="radio" name="sex" value="男性" />男性 9<input type="radio" name="sex" value="女性" />女性'; 10 return $options; 11 } 12 13} 14?>
これは、イけてませんね…
このクラスは、性別のラジオボタンを生成するというごく限られた時だけ利用する関数となっていて、全く汎用性がありません。
男性・女性のセレクトボックスを生成する必要が出た時に、もう一つメソッドを作るんですか?
同じページに、もし性別を選ぶ項目を複数配置することになったら、name属性の違うものを生成するメソッドを追加するんですか?
クラスにするメリットが全くないダメプログラムです。
以下に例を示します。下の例の方が汎用性があるのがわかりますよね。
php
1<?php 2 3class FormHelper 4{ 5 6 /** 7 * radioボタンを生成する 8 * @param string $name name属性の値 9 * @param array $arr value=>string の連想配列 10 * @param string $defaultValue 初期値 11 */ 12 public static function radio($name, array $arr, $defaultValue = null) 13 { 14 $html = ""; 15 foreach ($arr as $key => $val) { 16 $html .= sprintf('<label><input type="radio" name="%s" value="%s"%s> %s</label>' 17 , $name 18 , $key 19 , ($defaultValue == $key) ? ' checked="checked"' : '' 20 , $val); 21 } 22 return $html; 23 } 24 25 public static function select($name, array $arr, $defaultValue = null) 26 { 27 //todo 28 } 29 30 public static function checkbox($name, array $arr, $defaultValue = null) 31 { 32 //todo 33 } 34 35} 36 37$name = 'sex'; 38$arr = array('1' => '男性', '2' => '女性'); 39$sex = filter_input(INPUT_POST, $name); 40echo FormHelper::radio($name, $arr, $sex); 41 42$name = 'pref'; 43$arr = array('1' => '北海道', '2' => '青森', ....); 44$pref = filter_input(INPUT_POST, $name); 45echo FormHelper::radio($name, $arr, $pref);
投稿2016/06/11 18:52
編集2016/06/12 04:07退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
たとえばこんな感じにすると汎用的にいろいろできます
<?PHP $checked["sex"]=array("男性"=>"","女性"=>""); if(isset($_REQUEST["sex"])){$checked["sex"][$_REQUEST["sex"]]=" checked";} $selected["pref"]=array("default"=>" selected","東京"=>"","大阪"=>"","福岡"=>""); if(isset($_REQUEST["pref"])){$selected["pref"][$_REQUEST["pref"]]=" selected";} print <<<eod <form> <p> <input type="radio" name="sex" value="男性"{$checked["sex"]["男性"]}>男性 <input type="radio" name="sex" value="女性"{$checked["sex"]["女性"]}>女性 </p> <p> <select name="pref"> <option value=""{$selected["pref"]["default"]}>==選択==</option> <option value="東京"{$selected["pref"]["東京"]}>東京</option> <option value="大阪"{$selected["pref"]["大阪"]}>大阪</option> <option value="福岡"{$selected["pref"]["福岡"]}>福岡</option> </select> </p> <p> <input type="submit" value="go"> </p> </form> eod;
もちろんヒアドキュメントを使わずに、つどつどprintしてもよいです
投稿2016/06/10 02:17
総合スコア114843
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/09 23:50
2016/06/10 00:17
退会済みユーザー
2016/06/10 03:15
2016/06/10 11:30
退会済みユーザー
2016/06/10 13:09