FORMから受け取ったデータを、入力順に表示させるには?
[上に]
[前に]
[次に]
むう
[E-Mail]
[HomePage]
1998/11/24(火) 06:21:48
どうしてもうまくいかないのですが
フォームから入力されたデータを
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else { $buffer = $ENV{'QUERY_STRING'}; }
@setdata = split(/&/, $buffer);
foreach $parts (@setdata) {
($name, $value) = split(/=/, $parts);
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$name =~ s/ //;
$name =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*value, "sjis");
$FORM{$name} = $value;
}
として
while(($name,$value)=each(%FORM)){
$mailbody .= "$name = $value <BR>\n";
}
print "$mailbody\n";
で表示させるとフォームに書かれている順番とは関係なく
順不同に表示されるのですが、これはこういう物なのでしょうか?
もしくは、どこか誤りがあるでしょうか?
順番通り表示させる方法がありましたら教えてください。
B-Cus
1998/11/24(火) 06:56:52
ハッシュというものはそういうものです。
順番通りにやりたかったら配列を使いましょう。
むう
[E-Mail]
[HomePage]
1998/11/25(水) 02:14:41
[[解決]]
ありがとうございます。
なるほど、そういうものなのですね。
配列を使ったらちゃんとできました。
匿名希望
1998/11/25(水) 14:11:58
ブラウザは不明ですが、SUBMIT の値を先頭に移動してしまうヤツが
あるようです。
しなのむし
1998/11/25(水) 17:42:51
>ブラウザは不明ですが、SUBMITの値を先頭に移動してしまうヤツが
>あるようです。
ちょっと言ってる意味がわからないのですが
FORMから受け取ったデータが入力順に表示されない理由の
可能性として言っているわけですか?
上にあるような連想配列を使ったフォーム処理では
入力順にデータが並んで渡されたかどうかに
意味はありませんよ。
匿名希望
1998/11/25(水) 17:50:19
>>ブラウザは不明ですが、SUBMITの値を先頭に移動してしまうヤツが
>>あるようです。
>ちょっと言ってる意味がわからないのですが
>FORMから受け取ったデータが入力順に表示されない理由の
>可能性として言っているわけですか?
必ずしも FORM に記述した順序で CGI にデータが受け渡されるとは
限らないので、順序に依存した CGI の実装には注意が必要だと
いいたかっただけです。以前、これで痛い目にあったので。
しなのむし
1998/11/26(木) 02:07:09
>順序に依存した
なるほど。
そういうブラウザがあるからこそフォーム処理は
今現在流布しているようなスタイルに落ち着いたのでしょうね。
[上に]
[前に]
[次に]