• ベストアンサー
※ 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