• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォーム内容が正しく取得できない)

フォーム内容の取得方法が正しくない可能性とは?

このQ&Aのポイント
  • フォーム内容が正しく取得できない理由として、CGIのフォームデータ取得部分が問題の可能性があります。
  • 確認画面での入力内容表示は正常ですが、メール送信時に同じ入力項目の情報が重複して表示される問題が発生しています。
  • フォームデータを取得する方法に問題がある可能性があります。POSTリクエストの場合は、環境変数のCONTENT_LENGTHからデータを読み取ります。GETリクエストの場合は、QUERY_STRINGからデータを取得します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

フォーム内容を取得する際の$bufferの値に、add等は二重に入ってますか? 送信側CGIと受信側CGIのどちらに原因があるかが判ると原因に近づけるかも… それから、確認フォームを飛ばして、いきなり入力画面からメール送信にしたら問題は出ますか? これで出るならメール送信CGI側(受信側)の問題な気がします。 ★ご参考ですが… 的はずれだとは思いますが、以前使用していたサーバーで、FTPに不具合があり、既存のファイルを転送しなおしたら、新しく終わったファイルの後ろにゴミが入った事がありました。一度CGIファイルを削除して転送し直してみては如何でしょう。

Miki3548
質問者

お礼

まだ、不具合は解消していないのですが、 最初の質問と疑問点がずれてきてしまったので 一旦締め切って、いろいろ試してみたいと思います、 ありがとうございました。 またよろしくお願いいたします。

Miki3548
質問者

補足

回答ありがとうございます。 FTPみてみます。 ソースよりそんな感じの不具合だと思います。 ありがとうございます。

その他の回答 (4)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.4

確認画面でhiddenに設定しているというのが気にりますね。 hiddenでは表示されないので、表示用には投稿時と同じようにフォームに設定しているのでしょうか? だとしたら hidden と 確認用のフォームに同じnameを付けているために、同じデータが二つづつ送信されてしまうのでは? <input type="hidden" name="Add" value="住所1"> <input type="text" name="Add" value="住所1"> 確認画面で上記のような状態に?! もし、そうであれば hiddenへの設定は不要になりますね。

Miki3548
質問者

お礼

回答ありがとうございます。 入力画面ではTEXTボックス。 確認画面ではHIDDEN項目と、通常の文字表示でつくりました。 私がテストしているサーバではうまくいくのですが、 Webサーバの別サーバでテストするとこんな現象になります。。。

回答No.3

1 【入力・確認画面】で表示される画面のソースは確認しましたか?もしもここに何も問題がないのであれば プログラム上の問題なので、スクリプトの他の部分も見ないと原因はわかりません。 2 もしもあなたが、欲しい項目をはっきり把握しているなら・・・ もちろん把握してますよね? use CGI qw(:standard escapeHTML); $Add=param('Add'); $Tel=param('Tel'); ・・・・ で内容を取得して、メール本文を形成してやれば、少なくとも重複することはないと思います。

Miki3548
質問者

お礼

1、CGIで作成されたHTMLならば確認いたしました。 ソース全てをのせて原因を見ていただきたいのですが、大変残念なことに文字制限に引っかかってしまいます。 2、そんな感じでNameを指定して取得しているのですが。。。。 繰り返し項目TextのNameを同じにしたのがまずかったのでしょうか。。。 ありがとうございました。

noname#191236
noname#191236
回答No.2

こんばんわ。 入力画面・確認画面・送信は、すべて同一の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で行っているならば両方のコードをお願いします。 (もしソースコードの公開に抵抗がある場合は結構です。) それでは。

Miki3548
質問者

お礼

回答ありがとうございます。 CGIは全て1つのソースで作りました。 フォーム内容を別々の変数に入れる部分は確認とメール送信で共通で使っているので、おかしいとしたらここかな?と・・・ (+文字制限があるので それで、別サーバでも同じ環境でためしてみたのですが、そっちはうまくいくのです。。。 ソースと言うより、サーバのせい?と思ってきました。

回答No.1

まずは、Formのmethodをgetにして、最初のページから確認ページ、確認ページから登録処理へ行くところで、URLの後ろに「意図したパラメータのみ」が付与されているか確認してみてはいかがでしょう。 ちゃんとxxx.cgi?変数=値&変数=値&変数=値・・・となっているなら、プログラム上の問題かと思います。 そのあたりは如何ですか? それも質問に書いて貰えると、より回答しやすくなりますので。

Miki3548
質問者

お礼

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

関連するQ&A