CGIを改造中です。
フォーム部分なのですが、十数項目あるものをドロップダウンリストで選択してもらうようにしたいです。
新規入力フォームは何も考える必要はないと思うのですが、問題は修正画面です。以前選択したものに「selected」を付ける必要がありますよね。
素人考えでは、
if($cou1 eq "項目1"){$selected1="selected";}
if($cou1 eq "項目2"){$selected1="selected";}
if($cou1 eq "項目3"){$selected1="selected";}
~~
として、
<option value=項目1 $selected1>項目1
<option value=項目2 $selected1>項目2
<option value=項目3 $selected1>項目3
~~
と、えんえん書き続けないといけない方法しか思いつきません。
これをどうにかして簡素に書く方法はないでしょうか?
お願いします。
No.1ベストアンサー
- 回答日時:
効率いいかどうか微妙だけど、こんな風でどうでしょう?
$cou1 = 'bbb';#前回選択値
foreach (['項目1','aaa'],['項目2','bbb'],['項目3','ccc']){
print '<option value="',$_->[1],'"',($cou1 eq $_->[1])?' selected':'','>',$_->[0],"\n";
}
# ↓ 実行結果
<option value="aaa">項目1
<option value="bbb" selected>項目2
<option value="ccc">項目3
No.3
- 回答日時:
use CGI;
use HTML::FillInForm;
my $q = new CGI;
# 初期値設定
$q->{"menu"} ||= "項目2";
$html = <<"HTML";
<form action="" method="POST">
<select name="menu">
<option value="項目1">項目1</option>
<option value="項目2">項目2</option>
<option value="項目3">項目3</option>
</select>
<input type="submit" />
</form>
HTML
my $fif = new HTML::FillInForm;
my $output = $fif->fill(scalarref => \$html,
fdat => $q);
print "Content-type: text/html\n\n";
print $output;
No.2
- 回答日時:
ん~、ちょっと面倒なのはこんな感じ。
(データは$cou1に入っていると仮定。)$sel{"$cou1"}=" selected";#selectedの前にスペースあり。こちらの方が空白+変数よりも、空白表示が綺麗。
<select name="cou1">
<option value="1"$sel{"1"}>項目1</option>
<option value="2"$sel{"2"}>項目2</option>
…
<option value="同じ"$sel{"同じ"}>項目名</option>
</select>
ハッシュを一つだけ作り、それに該当するキーを持つ変数だけ、selectedを代入します。(その他変数は存在しない。)
データに2が入っているのなら、$sel{"2"}=" selected";が作られ、$sel{"その他"}は存在しない=空白です。
基本的考え方はmaster-3rdさんと同じです。ただ、if文などを使わず、変数を一つしか作らないと言う部分が異なるだけですね。
しかし、こういうのはsteel_grayさんの、<option>をループで自動生成し、その途中で、フォームデータと値が同じならselectedを出力する、と言うのが技術的にも感覚的にも、一番楽かなと思います。ただ、HTMLを固定して出力したいなら、今回のようにハッシュを使うのも手です。
ついでに、<option>は閉じて、値は""で挟む方がいいと思いますよ。区切りがついて分かりやすいですし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セレクトメニューで2つの項目...
-
文字の横にプルダウンを表示さ...
-
プルダウンリストの背景色の指定
-
selectタグ内の特定のoptionの...
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
構造体の変数の値を、動的に取...
-
UWSCのSELECT文の記述方法
-
UWSC SLCTBOXもしくはSELECTに...
-
formで特定のinputを送信しない...
-
[python] 文字列を変数名として...
-
変数名に変数を使用
-
【至急!!!】python言語で本を見...
-
C++ コマンドプロンプトでの入...
-
実行中の変数の中身をイミディ...
-
ACCESS テキストボックスを隙...
-
c言語 16進数の2進数への変換
-
Perlからメール送信で文字化け
-
VBAでPDFのコピーとリネームを...
-
16進の10進変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の横にプルダウンを表示さ...
-
<SELECT>タグの折り返し
-
セレクトメニューで2つの項目...
-
テーブル内でドロップダウンメ...
-
セレクトボックスのselected属...
-
セレクトメニューで選んだ値を...
-
複数列を持ったリストボックス...
-
プルダウンメニューで中央表示
-
セレクトボックスから別窓にジ...
-
SELECT要素の垂直位置
-
selectタグ内の特定のoptionの...
-
プルダウンリストの背景色の指定
-
ドロップダウンリストのselecte...
-
プルダウンのグループ化で、ラ...
-
同じものを繰り返し表示させる
-
HTMLでメディアプレイヤーの再...
-
セレクトボックスの「選択して...
-
セレクトボックスの中を一部隠...
-
インラインフレーム内へのリンク
-
セレクトボックスの内容を中央寄せ
おすすめ情報