dポイントプレゼントキャンペーン実施中!

こんにちは。
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>
}
?>
のようになり、項目数分だけ毎回書き足す事になってしまします。
お分かりになる方ご教授頂けないでしょうか。

A 回答 (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";
}
}
?>
    • good
    • 0
この回答へのお礼

有難うございます。
配列で考えるのですね。。。
まだまだ初心者なので、色々勉強になります。

if文で書くよりはスマートで高度なプログラムとなりますね。
毎回こちらの方々には敬服致します。

お礼日時:2006/11/07 17:25

対応する値も配列に格納して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>";
    • good
    • 0

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>
なんかはどうでしょうか?
数字ではなく文字が判定の対象になるのでしたら有効ではないかと思います。
    • good
    • 0
この回答へのお礼

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

細分化して考えたらすんなりなのですねm(__)m

お礼日時:2006/11/07 17:20

同じ事やったよ。


日にちをフォームで入力(年、月、日を個別入力)させるとき。
下の例は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>";
}
}
?>
使えない?

この回答への補足

ありがとうございます。いろいろ試して見た結果、
<?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などの文字列を入れる事ができません。。。どなたかお分かりになりますでしょうか。。

補足日時:2006/11/07 16:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!