プロが教えるわが家の防犯対策術!

フォームメールを作っているのですがHTML側のデータが希望通りに摘出出来ません。

【C G I 側 一部】
push(@DATA_N,$name);
push(@DATA_V,$value);

foreach (0..$count-1) {

if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; }
else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; }

}

【HTML側】
<BODY>

<h1>WEBFORM用サンプルフォーム</h1>



<FORM method="POST" action="webform.cgi">

<INPUT type="hidden" name="location" value="http://abc.com/123.htm">

<INPUT type="hidden" name="subject" value="フォームメール">

質問:<INPUT size="50" type="text" name="質問"><BR>
名前:<INPUT size="50" type="text" name="Yourname"><BR>
メール:<INPUT size="50" type="text" name="Email"><BR>
<BR>
<INPUT TYPE="submit" VALUE="確認">
<INPUT TYPE="reset" VALUE="リセット">
<p>

<input type="checkbox" name="c_copy" value="on" checked> 送信内容のコピーを表示<br>
<input type="checkbox" name="no_check" value="on"> 内容確認画面を出さないで送信する



</FORM>
</BODY>

上記の設定で【質問】【名前】【メール】の項目と値が全て送られて来るのですが、送られてくる順番を【名前】が先頭であとはHTML側の順番通りにしたいと思います。
以下のように行が何番目かを指定すれば結果は得られるのですが複数のHTMLに対応させる為【名前】項目が何番目に来るかが指定出来ません。

foreach (1) {

if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; }
else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; }

}

そこでHTML側
名前:<INPUT size="50" type="text" name="Yourname">
のname="Yourname"部分を使って指定出来ないかとあれこれ試してみますがうまくいきません。
有識者の方々のご指導いただければ幸いです。何卒宜しくお願いします。

A 回答 (1件)

前回の質問に回答した者です。


前回の回答ではご理解いただけなかったようなのでもう一度。

名前項目の $name、$value それぞれリストの先頭に置くようにしたい、ということですよね。
ならば、スクリプトの、フォームから受信したデータをパースしている部分、つまり、データを分解して
push(@DATA_N,$name);
push(@DATA_V,$value);
の処理をしているところです。
ここを次のようにすればいいと思います。
$queryは、STDIN または $ENV{'QUERY_STRING'} を代入した変数です。変数名とコードの書き方は違うかもしれません。
for(split(/&/,$query)){
($name,$value)=split(/=/);
#decode
if($name eq 'Yourname'){$val=$value}
else{push(@DATA_N,$name);push(@DATA_V,$value);}
}
unshift(@DATA_N,'Yourname');
unshift(@DATA_V,$val);
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。

いったん値を変数に置き換えてやるといいんですね!

お蔭様で何とか名前が最上部に表示するようになりました。

この度は本当にありがとうございました。

お礼日時:2008/09/22 23:41

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