• ベストアンサー

修正画面の「select」で指定のものに「selected」を付ける

CGIを改造中です。 今、修正フォーム部分を色々と触っているのですが、ちょっと知恵を貸してください。 <SELECT>でドロップダウンリストを使っています。 このオプションの数が90くらいあります。 オプションは <SELECT name="genre"> <OPTION value="11">項目1</OPTION> ~~ と言う形です。 で、修正画面なので、$genreに入っているものに「selected」をつける必要があります。 私の少ない知識だとすべてのオプションに対して、例えば11の場合… if($genre == 11){ print "<OPTION value="11" selected>項目1</OPTION>\n"; }else{ print "<OPTION value="11">項目1</OPTION>\n"; } とする方法しか浮かびません。 しかし、これを90個分も並べるのは面倒ですし、ソースも長くなってしまいます。 どうにかしてこれを簡素化することは出来ないでしょうか? 方法があればお願いします。

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

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

#2です。 ごめんなさい。下のはPHPでした。 perlだと %xx = ( "11" => "PC - PC販売店" ,"12" => "PC - 中古屋" ,"13" => "PC - その他" ,"21" => "車 - 車販売店" ,"22" => "車 - 中古車販売" ,"23" => "車 - パーツ販売" ,"24" => "車 - その他" ); と、いうハッシュで。

master-3rd
質問者

お礼

ごめんなさい、イージーミスでした。 $hash{$key} は、 $jlist{$key} ですね。変更したらちゃんと表示しました。 ただ、やはり「selected」が表示されません。

master-3rd
質問者

補足

返答ありがとうございます。今のところ、こんな感じですが、うまく表示しません。 ///ここを参考にしてみました。 http://www.rfs.jp/sitebuilder/perl/02/05.html --------------- %jlist = ( "11" => "PC - PC販売店" ,"12" => "PC - 中古屋" ,"13" => "PC - その他" ,"21" => "車 - 車販売店" ,"22" => "車 - 中古車販売" ,"23" => "車 - パーツ販売" ,"24" => "車 - その他" ~~ foreach $key ( sort keys %jlist ) {  if($key eq $genre){  print "<option value=\"$key\" selected>$hash{$key}</OPTION>\n";  }else{  print "<option value=\"$key\">$hash{$key}</OPTION>\n";  } } ---------- ソートによりちゃんと順番どおり並びました。value=$keyもちゃんと表示しています。 ただ、肝心の「$hash{$key}」が表示されず、「selected」も表示しません。

その他の回答 (4)

  • omni2
  • ベストアンサー率53% (33/62)
回答No.5

$hash{$key}となってるところは、 $jlist{$key}にしなければいけないのではないでしょうか?? foreach $key ( sort keys %jlist ) { if($key eq $genre){ print "<option value=\"$key\" selected>$jlist{$key}</OPTION>\n"; }else{ print "<option value=\"$key\">$jlist{$key}</OPTION>\n"; } }

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

$genre に文字は入っていますでしょうか? <SELECT name="genre"> で取った変数($in{'genra'}とか) を処理($genre = $in{'genre'}とか) してますか?

master-3rd
質問者

お礼

返答ありがとうございます。 あれから色々とやっていたらやっと答えが見つかりました。 修正画面で「修正」をしてしまったらしく、ログの方が壊れていました。 これじゃあマッチするものはないからセレクトが付かないですよね。 まぁしかし、無事解決できたので、質問終了します。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

予め配列に入れてしまったほうがいいような。 $arr = array( "11" => "PC - PC販売店" ,"12" => "PC - 中古屋" ,"13" => "PC - その他" ,"21" => "車 - 車販売店" ,"22" => "車 - 中古車販売" ,"23" => "車 - パーツ販売" ,"24" => "車 - その他" );

  • omni2
  • ベストアンサー率53% (33/62)
回答No.1

先日も同じような質問がありましたので、 参考までに。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1595842

master-3rd
質問者

補足

返答ありがとうございます。 やっていることは何とか理解できたのですが、ちょっと問題があります。 valueの数値なのですが、0から順番に並んでいるわけではありません。 管理しやすいようにと大ジャンルと小ジャンルに分けているので間が抜けています。 例 11→PC - PC販売店 12→PC - 中古屋 13→PC - その他 21→車 - 車販売店 22→車 - 中古車販売 23→車 - パーツ販売 24→車 - その他 ~~ と言う感じです。(14から20は利用していない) この場合、どのようにしたら良いのでしょうか? 応用が利かなくてすみません。お願いします。