電子書籍の厳選無料作品が豊富!

アンケートフォームで以下のように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);
}{

A 回答 (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 => '名古屋',
);

の記述はサブルーチンの中に書けばいいのですか?うまく動作しませんでした。。。。


うーん。。わたしのやり方が間違ってるのでしょうねえ・・困りました・・

補足日時:2005/08/11 07:50
    • good
    • 0

> うまく動作しませんでした



具体的に、どうなったのでしょう。
また、その動作しなかったコードも載せていただくと、何か解ると思います。
    • good
    • 0

単に


<select name="ken">
<option value="1">東京
<option value="2">大阪
<option value="3">名古屋
</select>
とすればいいだけでは?
    • good
    • 0

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