- ベストアンサー
アンケートフォームのvalueの値をCSVには数字で書き込み、確認画面では文字を表示したい。
アンケートフォームで以下のようにoptionタグのvalueの値は東京、大阪、名古屋という風に確認画面で表示し、CSVには、東京なら1、大阪なら2名古屋なら3というふうに書き込めるようにしたいのですが、やり方がわかりません。valueの値を文字にしてしまうと当然CSVには文字が入ってしまい、valueの値を数字にしてしまうと確認画面は数字になってしまいます。。 このような場合どういう記述のしかたがありますでしょうか。ご教授願います。よろしくお願いします。 sub page3{ print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> <title></title> </head> <body> <form method="post" action="$script"> □出身地はどちらですか?<br> <select name="ken"> <option value="東京">東京 <option value="大阪">大阪 <option value="名古屋">名古屋 </select> <input type="hidden" name="action" value="kakunin"> <input value="送信" type="submit"><br> <input value="リセット" type="reset"> </form> </body> </html> EOF } #確認画面 sub kakunin{ ~ } #CSVに書き込む sub csv{ open(FILE, "<$file") or &err2('エラーです。'); @lines= <FILE>; close(FILE); unshift(@lines,"$ken\n"); open(OUT, "+<$file") or &err2(); print OUT @lines; close (OUT); }{
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
このような場合、またこのような場合でなくても、データ処理の基本として共通値を持つ項目にはIDをふって扱います。 つまり、おっしゃるように、 1 東京 2 大阪 3 名古屋 …… と数値で扱い、保存しておくという事です。 フォームは以下のようにします。 <select name="ken"> <option value="1">東京 <option value="2">大阪 <option value="3">名古屋 </select> で問題は、確認画面などで表示する際はIDではなく都道府県名を表示したい、という方法ですが、都道府県名とIDが対になったテーブルを用意しておくのが一般的です。 たとえばハッシュを用意しておくのが一番効率的でしょう。 %kenmei = ( 1 => '東京', 2 => '大阪', 3 => '名古屋', ); ※他のスクリプトでも共通だとか、数が多い場合は、ファイルにしておく。 こうしておけば、あとは、 print '選択された都道府県は ' . $kenmei{$ken} . 'です。'; というように参照できます。
補足
ありがとうございます。 %kenmei = ( 1 => '東京', 2 => '大阪', 3 => '名古屋', ); の記述はサブルーチンの中に書けばいいのですか?うまく動作しませんでした。。。。 うーん。。わたしのやり方が間違ってるのでしょうねえ・・困りました・・