• ベストアンサー

PHPでセレクトメニュー

こんにちは。 PHPでDBから読み込んだ値によってセレクトメニュー、selected のタグが付く場所を変えたいんですが、自分の知識だけだと長文になってしまい短くできないものか悩んでます。 例えば値が1-3で、対応する値がA-Cだとすると、 <select name="menu"> <option value="1" selected>A</option> <option value="2">B</option> <option value="3">C</option> </select> で、データを受け取った値によって selectedの位置を"2"の後、"3"後に変更したいです。 自分で書くと <?php if ( $row["menu_c"] == 1){ <option value="1" selected>A</option> <option value="2">B</option> <option value="3">C</option> }elseif( $row["menu_c"] == 2){ <option value="1">A</option> <option value="2" selected>B</option> <option value="3">C</option> ・・・ <option value="3" selected>C</option> } ?> のようになり、項目数分だけ毎回書き足す事になってしまします。 お分かりになる方ご教授頂けないでしょうか。

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

  • ベストアンサー
回答No.4

対応文字も配列にしておくといいですよ。 <?php $a = array("1"=>"A","2"=>"B","3"=>"C"); $selected = 'selected'; for ($i=1; $i<3; $i++){ if ($i==$row["menu_c"]){ print "<option value=\"" . $i . "\" " . $selected . ">" . $a[$i] . "</option>\n"; }else{ print "<option value=\"" . $i . "\">". $a[$i] ."</option>\n"; } } ?>

josephat
質問者

お礼

有難うございます。 配列で考えるのですね。。。 まだまだ初心者なので、色々勉強になります。 if文で書くよりはスマートで高度なプログラムとなりますね。 毎回こちらの方々には敬服致します。

その他の回答 (3)

回答No.3

対応する値も配列に格納してfor文でまわすのが記述としては一番短くなるけど、パっと見で簡単に書きたいならこんなカンジでどうでしょ。 echo "<option value=\"1\" ".(($row["menu_c"]==1)? "selected":"").">A</option>"; echo "<option value=\"2\" ".(($row["menu_c"]==2)? "selected":"").">B</option>"; echo "<option value=\"3\" ".(($row["menu_c"]==3)? "selected":"").">C</option>";

  • S202
  • ベストアンサー率26% (5/19)
回答No.2

for文を使わないとすれば、 <option value="1" <?php if($row["menu_c"] ==1){echo "selected";}?> >A</option> <option value="2" <?php if($row["menu_c"] ==2){echo "selected";}?> >B</option> <option value="3" <?php if($row["menu_c"] ==3){echo "selected";}?>>C</option> なんかはどうでしょうか? 数字ではなく文字が判定の対象になるのでしたら有効ではないかと思います。

josephat
質問者

お礼

ありがとうございます! まだまだ初心者なもので、if文で毎回フォームの始めから最後まで書き出す事しか考えていませんでした。 細分化して考えたらすんなりなのですねm(__)m

回答No.1

同じ事やったよ。 日にちをフォームで入力(年、月、日を個別入力)させるとき。 下の例は1日から31日までリストを出して、$iが今日の日にち($t_date)だったらselectedタグつける。 <?php for ($i=1; $i<32; $i++) { if ($i==$t_date) { echo "<option selected>$i</option>"; }else{ echo "<option>$i</option>"; } } ?> 使えない?

josephat
質問者

補足

ありがとうございます。いろいろ試して見た結果、 <?php $selected = 'selected'; for ($i=1; $i<3; $i++){ if ($i==$row["menu_c"]){ print "<option value=\"" . $i . "\" " . $selected . ">" . $i . "</option>\n"; }else{ print "<option value=\"" . $i . "\">". $i ."</option>\n"; } } ?> で指定した番号 ==$iの場合 selected になりました。 しかし、<option> </option> の中にA,B,Cなどの文字列を入れる事ができません。。。どなたかお分かりになりますでしょうか。。