- ベストアンサー
ドロップダウン、ラジオボタン、チェックボックス保持
- PHPでドロップダウン、ラジオボタン、チェックボックスの入力値を保持する方法を教えてください。
- 会員登録サイトの入力画面から確認画面に遷移した後、入力内容を修正すると、チェックボックスがはずれ、ドロップダウンとラジオボタンの値が元に戻ってしまいます。
- どのようなPHPのコードを記述すれば、入力値を保持することができるでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ざっとこんな感じで //nyuryoku.php <?PHP session_start(); $checked=array(); $selected=array(); $value=array(); function p($a,$b){ $tmp=$a; foreach($b as $val){ if(!isset($tmp[$val])) return false; $tmp=$tmp[$val]; } if(!is_array($tmp)) print htmlspecialchars($tmp); } $c1=isset($_SESSION["c1"])?$_SESSION["c1"]:null; foreach((array) $c1 as $val){ $checked["c1"][$val]=" checked"; } $c2=isset($_SESSION["c2"])?$_SESSION["c2"]:null; foreach((array) $c2 as $val){ $checked["c2"][$val]=" checked"; } $r1=(isset($_SESSION["r1"]) and !empty($_SESSION["r1"]))?$_SESSION["r1"]:"g"; $checked["r1"][$r1]=" checked"; $r2=(isset($_SESSION["r2"]) and !empty($_SESSION["r2"]))?$_SESSION["r2"]:"j"; $checked["r2"][$r2]=" checked"; $s1=isset($_SESSION["s1"])?$_SESSION["s1"]:0; $selected["s1"][$s1]=" selected"; $s2=isset($_SESSION["s2"])?$_SESSION["s2"]:0; $selected["s2"][$s2]=" selected"; $t1=isset($_SESSION["t1"])?$_SESSION["t1"]:""; $value["t1"]=$t1; $t2=isset($_SESSION["t2"])?$_SESSION["t2"]:""; $value["t2"]=$t2; ?> <form action="kakunin.php"> C1: <input type="checkbox" name="c1[]" value="a"<?PHP p($checked,array("c1","a")); ?>>a <input type="checkbox" name="c1[]" value="b"<?PHP p($checked,array("c1","b")); ?>>b <input type="checkbox" name="c1[]" value="c"<?PHP p($checked,array("c1","c")); ?>>c <br> C2: <input type="checkbox" name="c2[]" value="d"<?PHP p($checked,array("c2","d")); ?>>d <input type="checkbox" name="c2[]" value="e"<?PHP p($checked,array("c2","e")); ?>>e <input type="checkbox" name="c2[]" value="f"<?PHP p($checked,array("c2","f")); ?>>f <br> R1: <input type="radio" name="r1" value="g"<?PHP p($checked,array("r1","g")); ?>>g <input type="radio" name="r1" value="h"<?PHP p($checked,array("r1","h")); ?>>h <input type="radio" name="r1" value="i"<?PHP p($checked,array("r1","i")); ?>>i <br> R2: <input type="radio" name="r2" value="j"<?PHP p($checked,array("r2","j")); ?>>j <input type="radio" name="r2" value="k"<?PHP p($checked,array("r2","k")); ?>>k <input type="radio" name="r2" value="l"<?PHP p($checked,array("r2","l")); ?>>l<br> S1:<select name="s1"> <option value="" <?PHP p($selected,array("s1",0)); ?>>選択して!</option> <option value="m"<?PHP p($selected,array("s1","m")); ?>>m</option> <option value="n"<?PHP p($selected,array("s1","n")); ?>>n</option> <option value="o"<?PHP p($selected,array("s1","o")); ?>>o</option> </select><br> S2:<select name="s2"> <option value="" <?PHP p($selected,array("s2",0)); ?>>選択して!</option> <option value="p"<?PHP p($selected,array("s2","p")); ?>>p</option> <option value="q"<?PHP p($selected,array("s2","q")); ?>>q</option> <option value="r"<?PHP p($selected,array("s2","r")); ?>>r</option> </select> <br> T1:<input type="text" name="t1" value="<?PHP p($value,array("t1")); ?>"><br> T2:<input type="text" name="t2" value="<?PHP p($value,array("t2")); ?>"><br> <input type="submit" value="確認する"> </form> つづく・・・
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
//kakunin.php <?PHP session_start(); $c1=$_SESSION["c1"]=(isset($_REQUEST["c1"]) and is_array($_REQUEST["c1"]))?$_REQUEST["c1"]:false; $c1_txt=""; if($c1===false){ $c1_txt.="ありません"; }else{ foreach($c1 as $val){ if($c1_txt!=="") $c1_txt.=","; $c1_txt.=$val; } } $c2=$_SESSION["c2"]=(isset($_REQUEST["c2"]) and is_array($_REQUEST["c2"]))?$_REQUEST["c2"]:false; $c2_txt=""; if($c2===false){ $c2_txt.="ありません"; }else{ foreach($c2 as $val){ if($c2_txt!=="") $c2_txt.=","; $c2_txt.=$val; } } $r1=$_SESSION["r1"]=isset($_REQUEST["r1"])?$_REQUEST["r1"]:false; $r1_txt=$r1===false?"不明":$r1; $r2=$_SESSION["r2"]=isset($_REQUEST["r2"])?$_REQUEST["r2"]:false; $r2_txt=$r2===false?"不明":$r2; $s1=$_SESSION["s1"]=(isset($_REQUEST["s1"]) and $_REQUEST["s1"]!=="")?$_REQUEST["s1"]:false; $s1_txt=$s1===false?"不明":$s1; $s2=$_SESSION["s2"]=(isset($_REQUEST["s2"]) and $_REQUEST["s2"]!=="")?$_REQUEST["s2"]:false; $s2_txt=$s2===false?"不明":$s2; $t1_txt=$_SESSION["t1"]=(isset($_REQUEST["t1"]))?$_REQUEST["t1"]:""; $t2_txt=$_SESSION["t2"]=(isset($_REQUEST["t2"]))?$_REQUEST["t2"]:""; ?> 選ばれたC1は<?PHP print htmlspecialchars($c1_txt); ?><br> 選ばれたC2は<?PHP print htmlspecialchars($c2_txt); ?><br> 選ばれたR1は<?PHP print htmlspecialchars($r1_txt); ?><br> 選ばれたR2は<?PHP print htmlspecialchars($r2_txt); ?><br> 選ばれたS1は<?PHP print htmlspecialchars($s1_txt); ?><br> 選ばれたS2は<?PHP print htmlspecialchars($s2_txt); ?><br> T1の値は<?PHP print htmlspecialchars($t1_txt); ?><br> T2の値は<?PHP print htmlspecialchars($t2_txt); ?><br> [ <a href="nyuryoku.php">戻る</a> | <a href="toroku.php">登録</a> ] //touroku.php <?PHP session_start(); $pattern="/\?.*$/"; $filename="kakunin.php"; $refname=preg_replace($pattern,"",basename($_SERVER["HTTP_REFERER"])); if($filename!==$refname) header("Location:nyuryoku.php"); print_r($_SESSION); ?>
お礼
参考にさせてもらいます。 丁寧にありがとうございました!
- emoemoemosan
- ベストアンサー率54% (20/37)
補足 >押されたボタンのパラメータだけが送信されるので、それで差分できます。 エンターキーが押されて送信されることも鑑みて、 デフォルトでは送信処理、修正ボタンが押されたときのみ修正画面の表示にしてやると良いと思います。
お礼
なるほど。 パソコンのエンターキーのことは頭にありませんでした! 補足ありがとうございます!
- emoemoemosan
- ベストアンサー率54% (20/37)
セッションを使わなくても、フォームに 「送信」「入力内容を修正する」 のふたつのsubmitボタンを用意してやると、 押されたボタンのパラメータだけが送信されるので、それで差分できます。 「入力内容を修正する」が押された場合に、 再び入力フォームを出して、フォーム送信されたデータをフォームへ反映させておけば言い訳です。 オプションの選択については selected="selected" ラジオボタン、チェックボックスについては checked="checked" を選択したい要素の属性にたしてやればいいです。 生成方法は、この場合だと選択する都道府県の配列を作っておいて、 ループでoption要素を生成。 ポストされてきたjuusyoの値をループ毎チェックして、 もし同じなら選択属性をoption要素に付加。 こんな感じでよいと思います。
お礼
ありがとうございます。 selected="selected"・checked="checked"をたすんですね! 勉強させてもらいます。
- yambejp
- ベストアンサー率51% (3827/7415)
>「入力内容を修正する」をクリックして戻った時 ・セッションでデータを保持して ・セッションデータをもとにチェックや選択状態を指示してやる
お礼
補足に書いてしまってすみません。 回答ありがとうございます!! SESSIONについて調べましたが、わかりやすいものが出てこなくやはり解決できていない状態です。 初心者ですみません。
補足
phpの書き方がわからないのです。 テキストのフォームは <input name="name" type="text" id="name" size="20" maxlength="20" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>/> で戻ったときも内容が保持できています。 ドロップダウン、ラジオボタン、チェックボックスに value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?> を記述してもうまくいきません。。
お礼
サンプルありがとうございます! すごく勉強になります。