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

入力画面で入力したデータを、
確認画面でHiddenに設定し、
確認OKでHiddenからの入力データを
メールで送信するCGIを作成しました。

確認画面では、入力内容を正しく表示するのですが、
確認OKでメールを送信すると
同じNameの入力項目の情報を重複して表示してしまいます。

こんな感じです・・・
【入力・確認画面】
Add:住所1
Tel:999-999-999
Add:住所2
Tel:111-111-111

【メール内容】
Add:住所1
Tel:999-999-999
Add:住所2
Tel:111-111-111
Add:住所1
Tel:999-999-999
Add:住所2
Tel:111-111-111

フォーム内容を取得するところがまずいのでしょうか・・・

補足等致しますのでアドバイスお願いいたします。

【フォーム内容を取得】
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

A 回答 (5件)

フォーム内容を取得する際の$bufferの値に、add等は二重に入ってますか?



送信側CGIと受信側CGIのどちらに原因があるかが判ると原因に近づけるかも…

それから、確認フォームを飛ばして、いきなり入力画面からメール送信にしたら問題は出ますか?
これで出るならメール送信CGI側(受信側)の問題な気がします。



★ご参考ですが…
的はずれだとは思いますが、以前使用していたサーバーで、FTPに不具合があり、既存のファイルを転送しなおしたら、新しく終わったファイルの後ろにゴミが入った事がありました。一度CGIファイルを削除して転送し直してみては如何でしょう。

この回答への補足

回答ありがとうございます。

FTPみてみます。
ソースよりそんな感じの不具合だと思います。

ありがとうございます。

補足日時:2005/01/07 17:37
    • good
    • 0
この回答へのお礼

まだ、不具合は解消していないのですが、
最初の質問と疑問点がずれてきてしまったので
一旦締め切って、いろいろ試してみたいと思います、

ありがとうございました。
またよろしくお願いいたします。

お礼日時:2005/01/07 17:40

確認画面でhiddenに設定しているというのが気にりますね。



hiddenでは表示されないので、表示用には投稿時と同じようにフォームに設定しているのでしょうか?
だとしたら
hidden と 確認用のフォームに同じnameを付けているために、同じデータが二つづつ送信されてしまうのでは?

<input type="hidden" name="Add" value="住所1">
<input type="text" name="Add" value="住所1">
確認画面で上記のような状態に?!

もし、そうであれば hiddenへの設定は不要になりますね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

入力画面ではTEXTボックス。
確認画面ではHIDDEN項目と、通常の文字表示でつくりました。

私がテストしているサーバではうまくいくのですが、
Webサーバの別サーバでテストするとこんな現象になります。。。

お礼日時:2005/01/07 09:22

1 【入力・確認画面】で表示される画面のソースは確認しましたか?もしもここに何も問題がないのであれば


プログラム上の問題なので、スクリプトの他の部分も見ないと原因はわかりません。



2 もしもあなたが、欲しい項目をはっきり把握しているなら・・・
もちろん把握してますよね?

use CGI qw(:standard escapeHTML);

$Add=param('Add');
$Tel=param('Tel');
・・・・
で内容を取得して、メール本文を形成してやれば、少なくとも重複することはないと思います。
    • good
    • 0
この回答へのお礼

1、CGIで作成されたHTMLならば確認いたしました。

ソース全てをのせて原因を見ていただきたいのですが、大変残念なことに文字制限に引っかかってしまいます。

2、そんな感じでNameを指定して取得しているのですが。。。。

繰り返し項目TextのNameを同じにしたのがまずかったのでしょうか。。。

ありがとうございました。

お礼日時:2005/01/07 09:11

こんばんわ。




入力画面・確認画面・送信は、すべて同一のCGIで出力
(表示)をしているのでしょうか?
例:ab.html -> def.cgi -> def.cgi
  def.cgi -> def.cgi -> def.cgi 等

それと、この部分はリクエストメソッドの判定をして、送
られてきたデータをバッファに入れてるだけなので、この
部分の公開だけでは、どこが問題なのか判断できません。

if ($ENV{'REQUEST_METHOD'} eq "POST") {
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
  $buffer = $ENV{'QUERY_STRING'};
}

とりあえず、CGIの中身を教えていただかないと厳しいです。
html+cgiで行っているならば両方のコードをお願いします。
(もしソースコードの公開に抵抗がある場合は結構です。)


それでは。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

CGIは全て1つのソースで作りました。
フォーム内容を別々の変数に入れる部分は確認とメール送信で共通で使っているので、おかしいとしたらここかな?と・・・
(+文字制限があるので

それで、別サーバでも同じ環境でためしてみたのですが、そっちはうまくいくのです。。。

ソースと言うより、サーバのせい?と思ってきました。

お礼日時:2005/01/07 09:05

まずは、Formのmethodをgetにして、最初のページから確認ページ、確認ページから登録処理へ行くところで、URLの後ろに「意図したパラメータのみ」が付与されているか確認してみてはいかがでしょう。


ちゃんとxxx.cgi?変数=値&変数=値&変数=値・・・となっているなら、プログラム上の問題かと思います。
そのあたりは如何ですか?
それも質問に書いて貰えると、より回答しやすくなりますので。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

分かりにくい質問になってしまって申し訳ありませんでした。
教えていただいた方法で
別サーバでも同じソースを使ってテストしてみたのですが、1つではうまくいき、別のもう1つでは質問した現象が発生してしまいました。

サーバが原因なのでしょうか・・・。
なにかお心あたりありましたらお願いいたします。

お礼日時:2005/01/07 08:55

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