• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ドロップダウン、ラジオボタン、チェックボックス保持)

ドロップダウン、ラジオボタン、チェックボックス保持

このQ&Aのポイント
  • PHPでドロップダウン、ラジオボタン、チェックボックスの入力値を保持する方法を教えてください。
  • 会員登録サイトの入力画面から確認画面に遷移した後、入力内容を修正すると、チェックボックスがはずれ、ドロップダウンとラジオボタンの値が元に戻ってしまいます。
  • どのようなPHPのコードを記述すれば、入力値を保持することができるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

ざっとこんな感じで //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> つづく・・・

ashitano_kaze
質問者

お礼

サンプルありがとうございます! すごく勉強になります。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

//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); ?>

ashitano_kaze
質問者

お礼

参考にさせてもらいます。 丁寧にありがとうございました!

回答No.3

補足 >押されたボタンのパラメータだけが送信されるので、それで差分できます。 エンターキーが押されて送信されることも鑑みて、 デフォルトでは送信処理、修正ボタンが押されたときのみ修正画面の表示にしてやると良いと思います。

ashitano_kaze
質問者

お礼

なるほど。 パソコンのエンターキーのことは頭にありませんでした! 補足ありがとうございます!

回答No.2

セッションを使わなくても、フォームに 「送信」「入力内容を修正する」 のふたつのsubmitボタンを用意してやると、 押されたボタンのパラメータだけが送信されるので、それで差分できます。 「入力内容を修正する」が押された場合に、 再び入力フォームを出して、フォーム送信されたデータをフォームへ反映させておけば言い訳です。 オプションの選択については selected="selected" ラジオボタン、チェックボックスについては checked="checked" を選択したい要素の属性にたしてやればいいです。 生成方法は、この場合だと選択する都道府県の配列を作っておいて、 ループでoption要素を生成。 ポストされてきたjuusyoの値をループ毎チェックして、 もし同じなら選択属性をoption要素に付加。 こんな感じでよいと思います。

ashitano_kaze
質問者

お礼

ありがとうございます。 selected="selected"・checked="checked"をたすんですね! 勉強させてもらいます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>「入力内容を修正する」をクリックして戻った時 ・セッションでデータを保持して ・セッションデータをもとにチェックや選択状態を指示してやる

ashitano_kaze
質問者

お礼

補足に書いてしまってすみません。 回答ありがとうございます!! SESSIONについて調べましたが、わかりやすいものが出てこなくやはり解決できていない状態です。 初心者ですみません。

ashitano_kaze
質問者

補足

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'); ?> を記述してもうまくいきません。。