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
>順序に依存した
なるほど。
そういうブラウザがあるからこそフォーム処理は
今現在流布しているようなスタイルに落ち着いたのでしょうね。

[上に] [前に] [次に]