CGI-BBS > CGI > Perl > MySQLのデータを更新する時にプルダウンメニューの作成方法


カレッヂ
カレッヂ


質問者 ぽんず  投稿日 11/17(月) 18:57:17
始めまして、ホンズといいます。よろしくお願いいたします。
MySQLと、Perlにて簡易データベースを作っています。
データベースの項目で、入力する値が限られているものについては、
Perlにてプルダンメニューを使って入力するようにしています。
そこで、質問なのですが、データベースを更新するページで、
今私が作っている更新ページでは、
<SELECT>文を使って、<OPTION VALUE="○">にて
プルダウンメニューを作成しているため、毎回以前入力していた値を
再度入力し直す仕様になっています…(T△T)
理想としましては、更新ページを立ち上げたときにプルダウンメニューの
最初に選択されている値が、データベースの入力されている値になるような
プルダウンメニューを作成したいのですが…

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:NoEditor、TeraPad
FTPソフト:
サーバ移転:していない
改造:していない
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 11/17(月) 19:52:16
既入力値とoption value値を見比べて、等しければoption selectedで出力するようにすれば解決します。
おそらく、selectタグの書き出し処理を大幅に変更することになるでしょうが…。
質問者 ぽんず  [削除]  投稿日 11/17(月) 21:48:43
しあわせのツボ様
早速の回答ありがとうございます。
私も少ない知識から、既入力値をoption selectedに割り当てればいいとは
思いましたが、いかんせん私には、うまくコードが記述できません。
すみませんが、少しヒントを頂けませんでしょうか…<(_ _)>
回答者 しあわせのツボ  [削除]  投稿日 11/18(火) 00:29:52
SQLを使ったコードを書いたことがないので…。
泥臭い方法としては、SQLでselectを叩いて既入力値を得ておいてから、
print '<option value="foo"';
print ' selected' if $var eq "foo";
print '>';
のようにひたすら並べていけば、とりあえず目的は果たせます。
配列を使って
$select1[$var] = ' selected';
print "<option value=\"foo\"$select1[foo]>";
のようにすれば少しはスマートかもしれません。
回答者 しあわせのツボ  [削除]  投稿日 11/18(火) 11:44:36
あ、寝ぼけてた…。ハッシュなので[]でなく{}ですね。
$select1{$var} = ' selected';
print "<option value=?"foo?"$select1{foo}>";
質問者 ぽんず  [削除]  投稿日 11/20(木) 00:13:34
しあわせのツボ様
早速の回答をありがとうございます。
書いて頂いたコードを参考にして、記述してみたのですが、どうも上手く
行きません。
大変お手数ですが、もう少し教えてください。
SQLからは、一応データは、読み込めていることは、確認しております。

<ここから自ら記述してみたコードです。>
$genreにSQLから取得した値が代入されています。

print '<SELECT NAME="Genre">';
print '<OPTION VALUE="J-POP"';
print 'SELECTED' if $genre eq "J-POP";
print '>'J-POP</OPTION>';
print '<OPTION VALUE="クラシック"';
print 'SELECTED' if $genre eq "クラシック";
print '>'クラシック</OPTION>';
print '<OPTION VALUE="洋楽"';
print 'SELECTED' if $genre eq "洋楽";
print '</SELECT>';
質問者 ぽんず  [削除]  投稿日 11/20(木) 00:16:58
すみません。抜けていた行があったので、再度記述します。
print '<SELECT NAME="Genre">';
print '<OPTION VALUE="J-POP"';
print 'SELECTED' if $genre eq "J-POP";
print '>'J-POP</OPTION>';
print '<OPTION VALUE="クラシック"';
print 'SELECTED' if $genre eq "クラシック";
print '>'クラシック</OPTION>';
print '<OPTION VALUE="洋楽"';
print 'SELECTED' if $genre eq "洋楽";
print '>'洋楽</OPTION>';
print '</SELECT>';

よろしくお願いいたします。
回答者 しあわせのツボ  [削除]  投稿日 11/20(木) 12:10:00
2点。
optionタグを閉じた直後の ' は削除してください。
selectedの直前に半角スペースを入れてください。
質問者 ぽんず  [削除]  投稿日 11/21(金) 01:15:06
しあわせのツボ様
毎回の丁寧な回答ありがとうございます。
先程のアドバイスを元に下記のように書き換えますと、うまく動作いたしました。

print '<SELECT NAME="Genre">';
print '<OPTION VALUE="J-POP"';
print ' SELECTED' if $went eq "J-POP";
print '>J-POP</OPTION>';
print '<OPTION VALUE="クラシック"';
print ' SELECTED' if $went eq "クラシック";
print '>クラシック</OPTION>';
print '<OPTION VALUE="洋楽"';
print ' SELECTED' if $went eq "洋楽";
print '>洋楽</OPTION>';
print '</SELECT>';

ありがとうございました。<(_ _)>

この際なので、もしよろしければ、以前教えて頂いた
$select1{$var} = ' selected';
print "<option value=?"foo?"$select1{foo}>";
上記のコードの場合も教えてください。
質問者 ぽんず  [削除]  投稿日 11/21(金) 01:24:21
すみません。
間違いました…
print '<SELECT NAME="Genre">';
print '<OPTION VALUE="J-POP"';
print ' SELECTED' if $genre eq "J-POP";
print '>J-POP</OPTION>';
print '<OPTION VALUE="クラシック"';
print ' SELECTED' if $genre eq "クラシック";
print '>クラシック</OPTION>';
print '<OPTION VALUE="洋楽"';
print ' SELECTED' if $genre eq "洋楽";
print '>洋楽</OPTION>';
print '</SELECT>';

先程のコードを
$select1{$var} = ' selected';
print "<option value=?"foo?"$select1{foo}>";
の方法で記述してみました。

print '<SELECT NAME="Genre">';
$select1{$genre} = ' selected';
print "<option value=?"J-POP?"$select1{J-POP}>";
print "<option value=?"クラシック?"$select1{クラシック}>";
print "<option value=?"洋楽?"$select1{洋楽}>";
print '</SELECT>';

このようになると解釈しているのですが、どうでしょうか。
アドバイスをよろしくお願いいたします。
回答者 しあわせのツボ  [削除]  投稿日 11/21(金) 13:41:09
その通りです。(でもハッシュ名に日本語使えたっけかな…)

既定値を使いたいだけなら、ずるい方法もあります。
最初のoptionとして
<option value="$genre" selected>変更しない($genre)</option>
を出力してしまうだけ。
きれいではありませんが、処理は一番簡単です(笑)
質問者 ぽんず  [削除]  投稿日 11/23(日) 01:08:44
しあわせのツボ様
毎回丁寧な回答ありがとうございます。

>既定値を使いたいだけなら、ずるい方法もあります。
>最初のoptionとして
><option value="$genre" selected>変更しない($genre)</option>
>を出力してしまうだけ。

確かに、単純で明確な方法ですね!!
プログラムは、単純な方がすばらしいと思います。

最後になりましたが、今回の私の問題は、無事解決いたしましたので、
この項目は、閉めさせていただきます。

しあわせのツボ様、本当にありがとうございまいた。<m(__)m>

まだまだ、初心者なので、これからもここのお世話になると思いますが、
その時は、よろしくお願いいたします。

このページは終了したので返信(回答)は書きこめません
 


Web裏技