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

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

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

PHP初心者です。 今会員登録のサイトを作っています。 入力画面(エラーチェック)→確認画面→登録完了 のページを作っているのですが、確認画面から「入力内容を修正する」をクリックして戻った時、チェックボックスははずれ、ドロップダウン、ラジオボタンは元の値に戻ってしまっています。 保持する場合、どのようなPHPを書けばよいでしょうか? ↓はドロップダウンのサンプルです。 <dt> <label for="juusyo">住所</label> </dt> <dd> <select name="juusyo"> <option value="群馬県">群馬県</option> <option value="埼玉県">埼玉県</option> <option value="神奈川県">神奈川県</option> <option value="千葉県">千葉県</option> <option value="東京都">東京都</option> <option value="山梨県">山梨県</option> <option value="長野県">長野県</option> <option value="新潟県">新潟県</option> </select> <input type="submit" name="kakunin" value="確認する"> </form> どなたかご教授くださればうれしいです。

  • PHP
  • 回答数5
  • ありがとう数5

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

  • ベストアンサー
  • 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'); ?> を記述してもうまくいきません。。

関連するQ&A

  • ドロップダウンリストの表示について

    下記のサンプルソースにてドロップダウンリストを作成、表示させた場合 リストボックス右側の下向矢印をクリックすると 北海道~福井県 までの20の県と、ボックス右側にはスクロールバーが表示されます。 また、福井県以降の県はスクロールバーの移動で表示されます。 例えばこれを・・・ リストボックス右側の下向矢印をクリックした時に表示される県を 北海道から群馬県までの10の県にしたい。 群馬県以降はリストボックス右側のスクロールバーの 下方向移動で表示させる。 ようにしたいのですが・・・ なるべくならば HTML&CSS のみでこれを行いたいのですが どなたかアドバイス宜しくお願い致します。 ~ サンプルソース ~ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>サンプル</title> </head> <body> <select name="prefecture"> <option value="北海道">北海道</option> <option value="青森県">青森県</option> <option value="秋田県">秋田県</option> <option value="岩手県">岩手県</option> <option value="山形県">山形県</option> <option value="宮城県">宮城県</option> <option value="福島県">福島県</option> <option value="茨城県">茨城県</option> <option value="栃木県">栃木県</option> <option value="群馬県">群馬県</option> <option value="埼玉県">埼玉県</option> <option value="神奈川県">神奈川県</option> <option value="千葉県">千葉県</option> <option value="東京都">東京都</option> <option value="山梨県">山梨県</option> <option value="長野県">長野県</option> <option value="新潟県">新潟県</option> <option value="富山県">富山県</option> <option value="石川県">石川県</option> <option value="福井県">福井県</option> <option value="岐阜県">岐阜県</option> <option value="静岡県">静岡県</option> <option value="愛知県">愛知県</option> <option value="三重県">三重県</option> <option value="滋賀県">滋賀県</option> <option value="京都府">京都府</option> <option value="大阪府">大阪府</option> <option value="兵庫県">兵庫県</option> <option value="奈良県">奈良県</option> <option value="和歌山県">和歌山県</option> <option value="鳥取県">鳥取県</option> <option value="島根県">島根県</option> <option value="岡山県">岡山県</option> <option value="広島県">広島県</option> <option value="山口県">山口県</option> <option value="徳島県">徳島県</option> <option value="香川県">香川県</option> <option value="愛媛県">愛媛県</option> <option value="高知県">高知県</option> <option value="福岡県">福岡県</option> <option value="佐賀県">佐賀県</option> <option value="長崎県">長崎県</option> <option value="熊本県">熊本県</option> <option value="大分県">大分県</option> <option value="宮崎県">宮崎県</option> <option value="鹿児島県">鹿児島県</option> <option value="沖縄県">沖縄県</option> </select> </body> </html>

    • ベストアンサー
    • HTML
  • HTMLのドロップダウンリストについて

    <select> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> </select> 上記のようなドロップダウンリストがあり、 ドロップダウンリストが選択されている状態で、キーボードのテンキーを押すと、ドロップダウンリスト上の数字が選択状態になるような処理を行いたいのですが、どなかた教えて頂けないでしょうか。 例としてはANAのTOPページにある「搭乗日」が参考になると思われます。 http://www.ana.co.jp/

  • ドロップダウンリストの情報を送る方法

    某メールフォームを改造中です。 またまた壁に当たってしまったので教えてください。 入力フォームはhtml、記入確認画面もhtmlです。 まず、入力フォームにて、送信先アドレスをドロップダウンリストより設定します。ただし、これは、設定ファイルを呼び出すだけで、直接メールアドレスを設定するわけではありません。 送付先<SELECT name="settei"> <OPTION value="info.cgi">INFORMATION</OPTION> <OPTION value="order.cgi">ORDER</OPTION> </SELECT> という感じです。 次に、入力確認画面に移動するのですが、その際、もちろんですが、「value」のほうを表示してしまいます。(送付先:$info.cgi) これを表示させず、入力画面→確認画面までは、表示された名前(上記なら、送付先:INFORMATIONなど)を表示して、確認画面→CGIに移動時に始めて「value=info.cgi」を渡す事など可能ですか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 関東地方の隣接県の認識について

    関東地方は、東京都、神奈川県、埼玉県、千葉県、茨城県、栃木県、群馬県の1都6県からなります。(山梨県が関東地方に含まれる局面もあります。)福島県、新潟県、長野県、山梨県、静岡県は関東地方に隣接し、関東地方を取り囲んでいます。これら東京都、神奈川県、埼玉県、千葉県、茨城県、栃木県、群馬県、山梨県、長野県、新潟県、福島県、静岡県の1都11県は広域首都圏として、また、関東地方と関東地方の隣接県のうち、福島県と静岡県を除く甲信越地方は、関東甲信越地方として、また、関東地方と山梨県は首都圏として、さらに東京都、神奈川県、埼玉県、千葉県、茨城県の一部は東京圏を構成し、それぞれ、東京地方との経済的一体性を有しています。あなたはこの事実を知っていましたか?また、関東地方の隣接県のうち、認識していなかった県はどの県ですか?

  • フォームのドロップダウンで未選択のチェックをしたいのですが、下記のよう

    フォームのドロップダウンで未選択のチェックをしたいのですが、下記のようにしたのですがうまくいきません。・・・原因は id[1] だと思うのですが、こういう場合JavaScriptには、どのように記述すればよいのでしょうか? ※ドロップダウンの name="id[1]" は、変更できません。 よろしくお願いします。 <script language="JavaScript"> <!-- function check(){ if(document.cart_quantity.id[1].selectedIndex == 0){ alert('選択してください'); return false; } return true; } //--> </script> <form name="cart_quantity" method="post" action="" onSubmit="return check()"> <select gtbfieldid="272" name="id[1]" id="attrib-1"> <option value="1" selected="selected">選択してください</option> <option value="2">いちご</option> <option value="3">みかん</option> <option value="4">りんご</option> </select> <input type="submit" value="送信" name="submit"> </form>

  • 花が綺麗な観光地教えてください

    こんにちは! 9月19日に日帰りで旅行に行って来たいと思っていますが、予定が全然立っていません。 花が綺麗な所に行きたいと思っています。 山形、福島、東京、神奈川、埼玉、茨城、栃木、群馬、山梨、新潟、長野、富山辺りでよいところは ないでしょうか?この近辺でもOKです! 是非教えてください!

  • VB6でWEBのラジオボタンの操作方法がわかりません

    始めまして、VB初心者です。 VB6でWEBのラジオボタンの操作方法が解りません。 以下のようなHTMLのWEBページがあります。 ラジオボタンをVB6にて操作(チェック)したいのですがどうしても出来ません。 テキスト入力の項目には入力できました。 IE.Document.All("test").Value = "テスト" 上記にてテストと入力できました。 HTMLソース <table> <tr> <td>選択してください </td> <td colSpan="2"><!-- <select name="j_type"> <option value="10">A</option> <option value="11">B</option> <option value="20">C</option> <option value="30">D</option> <option value="40">E</option> <option value="50">F</option> <option value="99">G</option> </select> <label><input type="checkbox" value="10" name="jArr[]">A</label>&nbsp; <label><input type="checkbox" value="11" name="jArr[]">B</label>&nbsp; <label><input type="checkbox" value="20" name="jArr[]">C</label>&nbsp; <label><input type="checkbox" value="30" name="jArr[]">D</label>&nbsp; <label><input type="checkbox" value="40" name="jArr[]">E</label>&nbsp; <label><input type="checkbox" value="50" name="jArr[]">F</label>&nbsp; <label><input type="checkbox" value="99" name="jArr[]">G</label>&nbsp;<br> </td> </table> </table> <p> </p> <table> <tr> <td>選択しましたか?</td> <td><label><input type="radio" CHECKED value="0" name="c_exp">はい</label> <label><input type="radio" value="1" name="c_exp">いいえ</label></td> </table> 自分で作った(ホームページ作成ソフト)WEBにVBから操作したいと思ったのですが、単純にvalueにて数値を入れてもだめなのでしょうか? 宜しくお願いいたします。

  • PHP プルダウンメニュー

    現在PHPを勉強しているのですが、どうしても分からない問題がありましたのでご質問をさせて頂きました。 私がしたいのは登録フォームの中で都道府県で例えば、(東京)が選択されたら、確認画面にとんだ際に選択された(東京)と表示されるようにしたのです。 したがコードになります。 //HTML 都道府県: <select name="prefecture"><option value="">▼選択して下さい</option> <option value="北海道">北海道</option> <option value="青森県">青森県</option> <option value="岩手県">岩手県</option> <option value="宮城県">宮城県</option> <option value="秋田県">秋田県</option> <option value="山形県">山形県</option> <option value="福島県">福島県</option> <option value="茨城県">茨城県</option> <option value="栃木県">栃木県</option> <option value="群馬県">群馬県</option> <option value="埼玉県">埼玉県</option> <option value="千葉県">千葉県</option> <option value="東京都">東京都</option> <option value="神奈川県">神奈川県</option> <option value="新潟県">新潟県</option> <option value="富山県">富山県</option> <option value="石川県">石川県</option> <option value="福井県">福井県</option> <option value="山梨県">山梨県</option> <option value="長野県">長野県</option> <option value="岐阜県">岐阜県</option> <option value="静岡県">静岡県</option> <option value="愛知県">愛知県</option> <option value="三重県">三重県</option> <option value="滋賀県">滋賀県</option> <option value="京都府">京都府</option> <option value="大阪府">大阪府</option> <option value="兵庫県">兵庫県</option> <option value="奈良県">奈良県</option> <option value="和歌山県">和歌山県</option> <option value="鳥取県">鳥取県</option> <option value="島根県">島根県</option> <option value="岡山県">岡山県</option> <option value="広島県">広島県</option> <option value="山口県">山口県</option> <option value="徳島県">徳島県</option> <option value="香川県">香川県</option> <option value="愛媛県">愛媛県</option> <option value="高知県">高知県</option> <option value="福岡県">福岡県</option> <option value="佐賀県">佐賀県</option> <option value="長崎県">長崎県</option> <option value="熊本県">熊本県</option> <option value="大分県">大分県</option> <option value="宮崎県">宮崎県</option> <option value="鹿児島県">鹿児島県</option> <option value="沖縄県">沖縄県</option> </select> //PHP if(!isset($_POST["prefecture"])){ $prefecture = "未入力です。再入力をお願いいたします。"; } elseif(empty($_POST["prefecture"])){ $prefecture = "未入力です。再入力をお願いいたします。"; } else { $prefecture = $_POST["prefecture"]; } <tr> <td>都道府県 </td> <td><?php $arr1 = array(); //var_dump($value1); echo $arr1[$prefecture]; $prefecture = $arr1[$prefecture]; ?></td></tr> ただしこれだけでは値が受け取れておりません。 配列の基本なのかもしれませんが、色々調べても分かりませんでした。 どのたかご存知の方お教えお願いできませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • wordpress カテゴリのドロップダウン

    wordpress、ウィジェットのカテゴリをドロップダウン表示にした際、以下になります。 <option value='-1'>カテゴリーを選択</option> 以下、続く・・・ この「カテゴリーを選択」の文字を変更するにはどこを編集しますか? jQueryで無理やり、 jQuery("select option[value='-1']").text("変更後のテキスト"); などと試しましたが、ソースのみ変更され出力はそのままでした。。

    • ベストアンサー
    • PHP
  • 山梨~関東の雪

    昨日山梨~東京・神奈川 雪かなり降ったと思うのですが、どれくらい降りましたか!? また、東京・埼玉・神奈川以外(群馬・栃木・茨城とか)は雪どれくらい降りましたか? 山間部の方は結構降ったのでしょうか? また、長野県中信辺りは降りましたか? どれくらい降りましたか?

専門家に質問してみよう