• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:検索時の選択内容を保持する方法)

検索時の選択内容を保持する方法

このQ&Aのポイント
  • PHPでテキスト、ラジオボタン、チェックボックスが複数入り混じった検索システムを作成し、検索した結果の入力内容を保持したいです。
  • テキストの内容は<input type="text" name="name" size="50" value="<?= $_POST['name'] ?>">とすることで保持できましたが、ラジオボタンとチェックボックスはまとめて設定する方法がわかりません。
  • 初心者のため検索ワードが的確でなかったり、目的の答えにたどり着けない状況です。質問の方をさせていただきます。

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

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

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう 私の場合こんな処理をしています。 (実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが) <? //checkbox if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked"; if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked"; //radio if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked"; //select if(isset($_REQUEST["test_d"])) $selected["test_d"][$_REQUEST["test_d"]]=" selected"; print <<<eof <form> <input type="checkbox" name="test_a" value="1"{$checked["test_a"]}>A <input type="checkbox" name="test_b" value="1"{$checked["test_b"]}>B <input type="radio" name="test_c" value="1"{$checked["test_c"][1]}>C-1 <input type="radio" name="test_c" value="2"{$checked["test_c"][2]}>C-2 <input type="radio" name="test_c" value="3"{$checked["test_c"][3]}>C-3 <select name="test_d"> <option value="">---</option> <option value="1"{$selected["test_d"][1]}>D-1</option> <option value="2"{$selected["test_d"][2]}>D-2</option> <option value="3"{$selected["test_d"][3]}>D-3</option> </select> <input type="submit" value="go"> </form> eof; ?>

rabbit-kimura
質問者

お礼

ス、スマートっ!!!! しかも、的確すぎて、超初心者の私でもめちゃ応用(増やすだけですが)利用させていだだけました!! デザインがなかなかまとまらず、良く気分でデザイン変更するので、 修正が簡単なこちらをメインで使用させていただきましたので、 ベストアンサーとさせていただきました♪♪

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

渡しの場合は、そもそものinputタグ自体を出力するような関数を作って、ソレを表示するようにする、という方法を取ります。 checkboxやradioの場合は、$_POSTに渡された値が含まれていたら、checked="checked"という属性をinputタグにくっつける、という方法になりますので、結局HTMLのテンプレートの中身はぐちゃぐちゃになりがちなので。 <?php function input($type, $name, $value, $attributes=array()){ $tag = '<input type="%s" name="%s" value="%s"%s />'; //必ずエスケープする $value = htmlspecialchars($value, ENT_QUOTES); //属性値の構成 $str_attr = ""; foreach($attributes as $attr=>$val) $str_attr .= ' '.$attr.'="'.$val.'"'; //タグを構成して返す return sprintf($tag, $type, $name, $value, $str_attr); } function input_text($name, $default_value, $attributes=array()){ if(isset($_POST[$name])){ $value = $_POST[$name]; }else{ $value = $default_value; } return input('text', $name, $value, $attributes); } function input_radio($name, $default_value, $attributes=array()){ if(isset($_POST[$name])){ if($_POST[$name] == $default_value){ $attributes['checked'] = 'checked'; }else{ if(isset($attributes['checked'])){ unset($attributes['checked']); } } } return input('radio', $name, $default_value, $attributes); } function input_checkbox($name, $default_value, $attributes=array()){ if(isset($_POST[$name])){ if($_POST[$name] == $default_value){ $attributes['checked'] = 'checked'; }else{ if(isset($attributes['checked'])){ unset($attributes['checked']); } } } return input('checkbox', $name, $default_value, $attributes); } ?><form action="" method="POST"> お名前:<?php echo input_text('name', '', array('size'=>30, 'maxlength'=>30))?><br /> <br /> 職業:<br /> <?php echo input_radio('jb', '会社員')?>会社員<br /> <?php echo input_radio('jb', '学生')?>学生<br /> <br /> 選択:<br /> <?php echo input_checkbox('hb1', '選択1')?>選択1<br /> <?php echo input_checkbox('hb2', '選択2')?>選択2<br /> <?php echo input_checkbox('hb3', '選択3')?>選択3<br /> <br /> <input type="submit" value="テスト" /> </form> こんな感じにします。 checkboxのあたりは、作ったプログラムの構成によっては、色々修正する必要がありますが、そこら辺は上手く味付けしてください。

rabbit-kimura
質問者

お礼

お早い回答、本当にありがとうございました!! しかも、こんなに丁寧に書いていただいて… ご参考&勉強のやりがいが出てきます!! 作業が遅く完成はまだまだで、上手くはないですが、味付けさせて利用させていただきました!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 検索時の選択内容を保持する方法 2

    昨日こちらのURL『http://okwave.jp/qa/q6477112.html』にて質問させていただきました。 ご回答を締め切らせていただいたため、誠に勝手ながら新たに質問の方させていただきました。 PHP検索フォーム、検索時の選択内容を保持する方法にて、先日ご回答いただいた 下記のコードを基本として利用しているのですが、 <? //checkbox if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked"; if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked"; //radio if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked"; //select if(isset($_REQUEST["test_d"])) $selected["test_d"][$_REQUEST["test_d"]]=" selected"; print <<<eof <form> <input type="checkbox" name="test_a" value="1"{$checked["test_a"]}>A <input type="checkbox" name="test_b" value="1"{$checked["test_b"]}>B <input type="radio" name="test_c" value="1"{$checked["test_c"][1]}>C-1 <input type="radio" name="test_c" value="2"{$checked["test_c"][2]}>C-2 <input type="radio" name="test_c" value="3"{$checked["test_c"][3]}>C-3 <select name="test_d"> <option value="">---</option> <option value="1"{$selected["test_d"][1]}>D-1</option> <option value="2"{$selected["test_d"][2]}>D-2</option> <option value="3"{$selected["test_d"][3]}>D-3</option> </select> <input type="submit" value="go"> </form> eof; ?> 複数選択のチェックボックスがある場合の方法をご存じの方いらっしゃいましたら、 是非ともご教授お願い致します。 複数チェックボックスは、 <input type="checkbox" name="bungu[0]" value="鉛筆" >鉛筆 <input type="checkbox" name="bungu[1]" value="定規" >定規 <input type="checkbox" name="bungu[2]" value="色鉛筆" >色鉛筆 <input type="checkbox" name="bungu[3]" value="ペン" >ペン <input type="checkbox" name="bungu[4]" value="絵具" >絵具 <input type="checkbox" name="bungu[5]" value="ハサミ" >ハサミ <input type="checkbox" name="bungu[6]" value="ボールペン" >ボールペン というようなものを利用しています。

    • ベストアンサー
    • PHP
  • 選択肢によって入力必須が変わるフォームの入力チェックJavaScrip

    選択肢によって入力必須が変わるフォームの入力チェックJavaScript フォームの入力チェックのJavaScriptを作成しています。 特定のラジオボタンにチェックを入れた場合のみ、 入力必須になるテキストボックスの 入力チェックJavaScriptを教えてください。 ラジオボタンが複数あるフォームで、 <input type="radio" name="type" value="type1" /> <label>タイプ1</label> <input type="radio" name="type" value="type2" /> <label>タイプ2</label> タイプ2を選んだ場合のみ、必須項目にしたいテキストボックスがあります。 <input type="text" name="name1" /> テキストボックスが空白だった場合にアラートを出すJavaScriptは 現在このようになっています。 (参考にしていたサイトがあるのですが、忘れてしまいました・・・。) $(function(){ $("form1").submit(function(){ if($("input[name='name1']").val()==""){ $("input[name='name1']").css("border","1px solid #A70F00"); alert('必須項目に未入力があります'); return false; }) }) このJavaScriptをさらに、if文で括って、 name="type" の value が type2 であれば・・・、という処理を追加すればよいのだと 思いますが、書き方が分からず困っています。 どうかよろしくお願いします。

  • PHPでのフォームバリデートと値保持について

    いつもお世話になってます。PHP+Apache(+MySQL)の環境です。 フォーム(ラジオ、チェック、プルダウン、テキスト)に入力された内容をチェックし,すべて正しければ確認画面、間違いがあればフォーム画面にもどるが、その際、正しい項目の入力内容は保持したまま、さらに、間違いの項目に対して、エラーの内容を各項目のところ(ページ上部にまとめて表示するのではなく)に表示したいです。 要は、フォームの各種要素の値を保持する方法 と 入力規則の各種(値有無、条件合致等)チェックとフラグ表示をしたいです。 フォーム入力 └値有無チェック   ├全てあたいがあれば─内容確認┬送信(完了)   │                    └もどって修正(値保持したまま)   └値抜け、違反(チェックボックスで指定選択数オーバー、文字数オーバー等)があれば・・・      └入力画面にもどる(正しい項目は値保持、間違っている部分にはエラー内容のフラグ表示) <状況>フォームから値を受信し、空白の場合に当該項目に”未回答です!!”というメッセージを表示するところまでできています。違反なく入力されたところにメッセージは表示されませんが、値が消えます(保持されません)。 #vali.php if(!isset($_POST['exec'])){ include('temp/anc.php'); exit; } if(isset($_POST['exec'])){ function HTMLsc($str){中身省略します} $ErrorMsg = array(); $ErrorCnt = 0; for($i=1; $i<5; $i++){ $num = "q".$i; $$num = HTMLsc($_POST["$num"]); if(empty($$num)){ $ErrorMsg["$i"] = "未回答です"; $ErrorCnt++; }else{ /*この部分に作り込むのかなぁ?*/ } } if($ErrorCnt != 0){ include('temp/anc.php'); exit; } include('temp/comp.php'); } ----------- #anc.php <!-- 項目ごとに簡単に記述します --> <? if(isset($ErrorMsg[1])){echo $ErrorMsg[1];}?> <h3>問1.元気ですか?</h3> <input type="radio" name="q1" value="1">はい <input type="radio" name="q2" value="2">いいえ <? if(isset($ErrorMsg[1])){echo $ErrorMsg[1];}?> <h3>問2.朝なに食べた?</h3> <input type="checkbox" name="q2[]" value="1">ごはん <input type="checkbox" name="q2[]" value="2">パン <input type="checkbox" name="q2[]" value="3">みそ汁 <input type="checkbox" name="q2[]" value="4">牛乳 <? if(isset($ErrorMsg[1])){echo $ErrorMsg[1];}?> <h3>問3.起きてまず何する?</h3> <select name="q3"> <option value="1">顔洗う</option> <option value="2">歯磨く</option> <option value="3">ぼーっとする</option> </select> <input type="checkbox" name="q2[]" value="4">牛乳 <? if(isset($ErrorMsg[4])){echo $ErrorMsg[4];}?> <h3>問4.なんか書いて</h3> <input type="text" name="q4" value="<?php echo $_POST["q4"];?>"> <input type="submit" name="exec" value="終了・確認"> ※ラジオボタンの数、チェックボックスの数、プルダウン項目数は変化に耐えうる構造がよいです。参考サイトの紹介でもOKです。結構探しましたが単独での参考しかありませんでした

    • ベストアンサー
    • PHP
  • javaScriptで検索結果の保持

    いま大変困っております。お力をお貸し下さい。 ラジオボタンとプルダウンメニューで検索条件を指定し検索した場合、検索結果表示ページにその検索条件が保持されているという設定を行いたいのですが、javaScript初心者なものでどのように設定したらよいのか分からず困っております。 参考となるサイトなどありましたら教えて頂きたいのですが・・・ ・一部ですが、下記のようなHTMLになっております。 <FORM action="" method=post> <P><INPUT type=radio value=a name=test>:1<INPUT type=radio value=b name=test>:2</P> <P>&nbsp;<SELECT style="WIDTH: 116px" name=cde><OPTION value="" selected>選択</OPTION><OPTION value=c>c</OPTION><OPTION value=d>d</OPTION><OPTION value=e>e</OPTION></SELECT></P> <P><INPUT type=submit value=検索 name=検索></P></FORM> 宜しくお願いいたします。。。

  • 複数のラジオボタンの中から1つを選択すると、その行の5つのチェックボッ

    複数のラジオボタンの中から1つを選択すると、その行の5つのチェックボックスが有効になる方法を教えていただけないでしょうか。 1つのラジオボタンでならなんとか出来たのですが、 複数になるとどうもうまくいきません。 検索してはみたのですが、これといったものがなく質問することにしました。 以下のソースは単発で動いた時のものです。 <html> <head> <script type="text/javascript"> function checkfunc() { for(i=0; i<5; i++) { document.myform.chk1[i].disabled = !(document.myform.yesno.checked); } } </script> </head> <body onLoad="checkfunc();"> <form name="myform"> <input type="radio" name="yesno" value="1" onClick="checkfunc();">ラジオボタン <input type="checkbox" name="chk1" value="0">チェックボックス0 <input type="checkbox" name="chk1" value="1">チェックボックス1 <input type="checkbox" name="chk1" value="2">チェックボックス2 <input type="checkbox" name="chk1" value="3">チェックボックス3 <input type="checkbox" name="chk1" value="4">チェックボックス4 </form> </body> </html> 希望のイメージとしてはこんな感じです↓ ○ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス ◎ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス ○ラジオボタン □チェックボックス □チェックボックス □チェックボックス □チェックボックス □チェックボックス 申し訳ないのですが、どなたか教えていただけないでしょうか。

  • フォームに入力したデータの受け渡しについて

    左右に分かれたフレームを使用したページ作成を検討しています。 左フレーム内のフォームへ入力したテキストやチェックボックスのデータを、 右フレームに設置した1つのテキストエリアへコピーボタンで受け渡しを行う方法を探しています。 テキストボックス1行だけの受け渡しはできるのですが、 複数のテキストエリアやチェックボックスを使用した場合の受け渡し方法をご教示いただきたけますでしょうか? 左フレームとしては↓のような内容を想定しています。 <html> <form> テキスト:</br> <input type="text" name="aaa" /></br> ラジオ:</br> <input type="radio" name="bbb" value="radio1" checked="checked" /> ラジオ1 <input type="radio" name="bbb" value="radio2" /> ラジオ2</br> チェック:</br> <input type="checkbox" name="ccc" value="check1" /> チェック1 <input type="checkbox" name="ccc" value="check2" /> チェック2</br> 選択項目:</br> <select name="ddd"> <option>A</option> <option>B</option> </select></br> テキストエリア</br> <textarea name="eee" rows="2" cols="15">テキストエリア1</textarea> </br> <input type="submit" value="送信" />  <input type="reset" value="リセット" /> </form> </html> よろしくお願いいたします。

  • チェックボックスのチェック保持

    チェックボックスでチェックされた項目で検索を行いたいです。 検索後は、チェックを保持させておきたくjavascriptとcookieを使用すればできるのかなと思うのですが、うまくいきません。 できればチェックボックスのnameは別々にしたいのですが、どなたかご教授いただけるとうれしいです。よろしくお願いします。

  • ラジオボタンが選択されたらテキストフィールドを入力可能にする方法

    社会人2年目のSEです。 JavaScriptが書けなくて困っています。 実装内容は以下の通りです。 【実装内容】 ・ラジオボタンが3つ。 ・そのうち2つはただのラジオボタン。 ・もう1つは、そのラジオボタンを押したらテキストボックスに値を入力可能にするもの。 【画面イメージ】 ○ AAA ○ BBB ● CCC [テキストボックス] ↑ラジオボタン(CCCのラジオボタンがチェックされてる時のみ、テキストボックス入力可能) 以下のサイトのソースを参考に実装可能かと思っています。 違うのはサンプルソースのテキストボックスを2つ削ればいいだけなので。 http://www.openspc2.org/reibun/javascript/form_radio/006/index.html このソースを参考にして作ってみたのですが、技術力が足りないため、動かすことができませんでした。 アドバイスよろしくお願い致します。

  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • 確認ページからフォームページに「戻る」時の入力内容の保持

    ラジオボタンと連動したチェックボックスがあります。 ラジオボタンを選択し、さらにチェックボックスに入力後、「確認」をクリックして確認ページから「戻る」の時にチェックボックスの入力内容の値が保持されておらず、困っています。 Firefoxではきちんと動作するのですが、IEなど他のブラウザでは動作しません。 入力内容を保持する方法はありますでしょうか? <script> window.onload=function(){ var f0=document.getElementById("f0"); try{ f0.addEventListener("click",function(e){func(e)},true); }catch(e){ f0.attachEvent("onclick",function(e){func(e)}); } } function func(e){ var obj= (e.srcElement || e.target); if(obj.nodeName!="INPUT") return false; switch(obj.type){ case "radio": setRadio(obj); break; case "checkbox": setCheckbox(obj,"シルク","Kind04[]","SELECT"); break; } } function setRadio(obj){ var n=obj.parentNode.firstChild; while(n){ if(n.nodeName=="INPUT" && n.type=="checkbox"){ n.disabled=obj.value!="アリ"; n.checked=false; } if(n.nodeName=="SELECT"){ n.disabled=true; n.selectedIndex=0; } n=n.nextSibling; } } function setCheckbox(obj,v,n,nn){ if(obj.value!=v) return false; var node=obj.parentNode.firstChild; while(node){ if(node.nodeName==nn && node.name==n){ node.disabled=!obj.checked; node.selectedIndex=0; } node=node.nextSibling; } } </script> </head> <body> <form action="./postmail.cgi" name="f0" method="post" id="f0"> <fieldset> <legend>■分類</legend> <input type="radio" value="ナシ" name="print" class="print" checked>ナシ <input type="radio" value="アリ" name="print" class="print" >アリ  ( <input type="checkbox" value="銀シールド" name="Kind04[]" class="Kind04" disabled>銀シールド <input type="checkbox" value="銀ペースト" name="Kind04[]" class="Kind04" disabled>銀ペースト <input type="checkbox" value="銅ペースト" name="Kind04[]" class="Kind04" disabled>銅ペースト <input type="checkbox" value="シルク" name="Kind04[]" class="Kind04" disabled>シルク  色 <SELECT name="Kind04[]" class="Kind04" disabled> <OPTION SELECTED VALUE="---">--- <OPTION VALUE="白">白 <OPTION VALUE="黒">黒 <OPTION VALUE="他">他 </SELECT> ) </fieldset><br> <input type="submit" value="確認する" />  <input type="reset" value="リセット" /> </form> </body> </html>