• 締切済み

メールフォームでの確認画面の表示方法

お世話になっております。 htmlフォームで入力->cgi経由で確認->指定の宛先にフォーム送信と同時に.txtファイルに書込み というメールフォームを作成しているのですが、確認画面に関する以下の2点で困っています。 1)以下は省略していますが実際は確認項目が多いので、cgiにhtmlを書くのではなくconfirm.htmlという別のファイルを読み出して値だけを渡して確認を行いたいが上手く読み出せない。 2)確認画面から送信ボタンを押すと必須項目の入力がないとエラーが返ってくる。 1)に関して sub confirmを以下のように変えてみたのですが、なかなか読み込まれずそのままサーバエラーの表示が出てしまいました。 sub confirm{ my($code); $code = $form{'mode'}; open(CONF,"confirm.html"); while (CONF){ s/REPLACEKEY/$code/; print; } close(CONF); exit; }

  • CGI
  • 回答数1
  • ありがとう数1

みんなの回答

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

とりあえず気づいた点は 誤 while (CONF){ 正 while (<CONF>){ これだけの情報で回答できるのはこれだけです。

Karin2006Karin
質問者

お礼

すみません。訂正がありました。 よくスクリプトを見てみたら、 require 'cgi-lib.pl'; を読み込んで、 &ReadParse(*form); でデコードサブルーチンを呼び出していました。 「補足」で記載した以下でデコードされているわけではありませんでしたので以下は削除しました。 if($ENV{REQUEST_METHOD} eq "POST"){ read(STDIN,$input,$ENV{CONTENT_LENGTH}); } else {$input = $ENV{QUERY_STRING};} 削除しても以前となんら変わりありませんでした。

Karin2006Karin
質問者

補足

Etherskyさん、 ありがとうございます。 実は上記の記述は他のcgiからコピペしたもので、ファイル名や名前の付け方などを変えただけのものです。 コピペ当時 while (<CONF>){ となっていたのですが、これで実行したところ確認ボタンを押してもずっと読み込み中で一向に確認画面が出ず、そのままサーバエラーになってしまったので勝手に<>を取ってしまいました。 取っても動かなかったのですが。 <>のついた状態でのサーバのエラーメッセージは以下でした。 The requested operation could not be performed by the proxy. Document contains no data 同じサーバで使用されているcgiを参考にしたので仕様的に問題はないはずなのですが、何がいけないのでしょうか。。 また質問した際の(2)についての説明を書く前に途中submitしてしまいましたので以下に追記します。 2)について http://odn.okwave.jp/kotaeru.php3?q=148924 こちらを参考に以下のように確認画面を表示させています。 --html側-- <html><head>~略~</head> <body><form action="test.cgi" method="post" name="form" enctype="multipart/form-data"> <input type="text" name="name" size="15" value=""> <input type="text" name="phone" size="15" value=""> ~中略~ <input type="submit" value="確認" class="button"> <input name="mode" type=hidden id="confirm" value="confirm"> </body></html> --cgi側-- #!/usr/local/bin/perl ~中略~ if($ENV{REQUEST_METHOD} eq "POST"){ read(STDIN,$input,$ENV{CONTENT_LENGTH}); } else {$input = $ENV{QUERY_STRING};} if ($form{'name'} eq ""){ &error('お名前が入力されていません');} if ($form{'phone'} eq ""){ &error('電話番号が入力されていません');} if ($form{'mode'} = 'confirm') {&confirm;} elsif ($form{'mode'} = 'sendmail') {&sendmail;}else{&error;} sub confirm{ print "Content-type:text/html\n\n"; print << "END_OF_CONF"; <HTML> <HEAD><TITLE>入力内容確認</TITLE></HEAD> <BODY> お名前 :  $form{'name'}<BR> 電話番号:  $form{'phone'}<BR> <form method="POST" action="test.cgi"> <INPUT TYPE="submit" VALUE="この内容で投稿する"> <input name="mode" type=hidden id="sendmail" value="sendmail"> <INPUT TYPE=button VALUE='戻 る' onClick=' history.go(-1)'> </form></BODY></HTML> END_OF_CONF } $mailmess <<"EOL"; お名前 :$form{'name'} 電話番号:$form{'phone'} EOL sub sendmail { open(MAIL,"| $sendmail -t") || &error("メールが送信できません。"); print MAIL <<"EOL"; To: $mailto subject: $subject Content-Type: text/plain; charset=iso-2022-jp $mailmess EOL print MAIL "Content-Type: multipart/mixed; boundary=\"$interval\"\n\n"; close(MAIL); print "Location: http://www.xxxxxxxx\n\n";} --ここまで-- 毎度すみませんがアドバイスのほどよろしくお願いします。。

関連するQ&A

  • フォームメール確認画面から戻るためには?

    perlを使って申込みフォームを作っています。ファイルとしてはa.htmlを使ってまずフォーム入力欄を作りました。 そこからa.cgiに飛ばして確認画面を作りました。そこからが問題です。もう一つamail.cgiを作りそこにいった時点で指定メールに送るように作ってあります。 しかしa.cgiで入力項目を確認してもらった時に入力項目が間違っていた場合に戻るボタンを設けなければいけませんが、戻るボタンでどのようにa.htmlにもどせばいよいのか解りません。 具体的にどのようなソースを使えば良いのか解らないのでどうか教えて頂けないでしょうか? お願します。

    • 締切済み
    • CGI
  • フォーム入力後の確認画面表示について

    こんにちは。tyabudaiと申します。 よろしくお願いします。 現在、私のサイトでCGIを使って投稿するフォームを作成しています。 流れは以下のようなものです。 1.フォームに内容を入力、送信ボタンでCGI起動。 (以下CGI) 2.入力内容をサーバのファイルに書込む。 3.送信完了のメッセージを表示 そして今、1と2の間に確認画面を表示する処理を 追加したいのですが、どのような処理にするのでしょうか? ソースについては勉強しますので、大まかな流れを教えて いただけないでしょうか?

    • ベストアンサー
    • CGI
  • 気軽に送れるメールフォーム作成について

    サイトに設置するメールフォームについて質問します。 説明が下手なのでわかりにくいかも; ●名前・メッセージだけの簡単なフォームを作りたい ●名前欄は入力してもしなくても送信できる ●レイアウトがHTMLで加工できると嬉しい ●確認画面が出るものがいい 以上が希望です。 実際にKent-webさんの所からフォームメールのCGIをDLし解らなかったこと↓ ●HTMLでサンプルについていたラジオボタンやメール入力欄などの<input~ />というタグは外しました。 ↓ それでテスト送信してみると、確認画面で削除した項目の「○○は入力必須です。」と表示されます。 name値の先頭に「アンダーバー 」を付けると、その入力値は「入力必須」となる、とはあったのですが、項目ごと削除しても出てくるのです。 何故でしょう・・・; cgiファイルの中にあるのかな、と思って探してみても情けないことによく解りませんでした。 他に何か触るところはありますか? サーバーエラーはないので何かが足りていないような気がします・・・。 以上の事、お分かりになる方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • メールフォームの確認画面について

    (htmlとcssの知識はそこそこありますが、phpなどのプログラムになると全くわかりません。Dwで自社のホームページを管理しております。) 現在、「かんたんサーバー」の簡易CGIを使ってメールフォームを作成しております。 送信完了画面が、ホームページのデザインに合わず浮いているため、変更したいことを「かんたんサーバー」の方に問い合わせしたところ、変更は不可能とのことでした。 そこで質問なのですが、 1. 疑いたくはないのですが…本当に不可能なのでしょうか?可能ならばその方法を教えて頂けないでしょうか? 2. 1.が不可能な場合、そういうCGIなどを利用せずに、フォームを自分で作成し、特定のアドレスに送信することはできないのでしょうか?私が調べた限りでは、actionはCGIに頼るしかなさそうでした… 3. ゆくゆくはエラーチェック画面、確認画面、も付け足したいのですが、簡易CGIを利用している限り、そういう派生は難しいのでしょうか? phpやjqueryなどは、部分的に変更(カンですが…)はできると思います。 参考サイトや知識などをお分け頂ければ嬉しいです。 何卒宜しくお願い致します。

  • フォームの確認画面について

    お世話になります。 現在アンケートフォームを作成し、そのデータをtxtファイルに保存するというプログラムを作成しました。そこでフォームに入力された確認画面を表示させ、確認画面で送信ボタンを押すと、データが蓄積されるプログラムに変えたいと思ってます。 今現在はフォームはhtml cgiはperlで作成してます。 実際にどのようにすればいいかが分かりません。 フォーム(html)→確認用フォーム(cgi)→蓄積用cgiという流れでいいのでしょうか? また、確認用のフォームには戻るボタンを作りたいのですが、戻った時に、入力したデータは保持しときたいのですが。 よろしくお願いいたします。 データ蓄積用cgiプログラム #! /usr/bin/perl require './cgi-lib.pl'; $answer = 31; $ansfile = "/tesuto.txt"; &ReadParse(*in); $name = "てすと"; for($n = 1; $n <= $answer; $n++ ) { $no[$n] = $in{"no$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $no[$i] =~ s/\"/""/g; print FILE "\"\,\""; print FILE $no[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "<META http-equiv=\"refresh\" content=\"0;URL=http://○○○.html\">\n"; print "</body></HTML>"; exit;

    • ベストアンサー
    • CGI
  • Clipmail3.0 確認画面の非表示に関して

    KentWebさんのClipmail ver3.0を使用してwebformを作りたいと思っています。 http://www.kent-web.com/mail/clipmail.html ≪質問≫ 確認画面を出さずにフォーム 内容を送信することは可能でしょうか?デフォルトでは確認画面が必ず出ます。 ≪理由≫ form各項目の送信value値を数字にしてcsvファイルで出力したいのですが、質問項目数が増えると確認画面で数字で埋め尽くされてしまうのでこれを防ぎたいのです(数字を見せたくない)。 例: 質問1(name=Q1) = 満足(value=3) ⇒ Q1 = 3 http://q.hatena.ne.jp/1328250297 上記のリンクに似た質問があったので試してみましたが上記clipmailよりもversionが新しいためか、 上記リンクのcgi部分と送信ボタンのnameを変えて、送信ボタンを押すと「不正なアクセス」とエラーが表示されます。 フォーム記入後の送信ボタン(1)(<form action="clipmail.cgi method="post"">)と確認ページで表示される送信ボタン(2)(<form action="!mail_cgi!" method="post">)に違いがあるので送信ボタン(1)で(2)のアクションを呼び込めば良いのだと思いますが、どこを触ればいいのかが思考錯誤してもまだわかりません。 確認画面は入力ミス等を防ぐ重要なステップと認識していますが、form記入値を確認画面なしでダイレクトに送れないものか(もしくは確認画面で表示されるvalue値とcsv出力されるvalue値を変えることはできないのかどうか)と思い質問させていただいております。 私のcgi等に対する知識はど素人レベルです(webpageの知識としてはhtml/cssだけが少しわかる程度です。)どなたかわかる方がいらしたら、どこを変更すれば良いのかを教えて頂けると助かります。よろしくお願い致します。 P.S. Kentwebさんのサポートページで質問をしようとしたのですが問題のあるページのアドレスhttp://を入力しないと質問できませんでした。動作や不具合に関する質問ではなかったのでこちらで質問させてもらっています。

    • ベストアンサー
    • Perl
  • フォームメール確認画面ありのロジック

    はじめまして。 よろしくお願いします。 Perlの勉強を始めたばかりの初心者です。 自作のCGI(Perl)でフォームメールを作成しようとしています。 1.フォームに必要事項を入力 2.確認画面で確認 3.OKならメール送信 ※自分と フォームから入力してもらったアドレスへ2通 1から2へは フォームからのデータ受取 変換 受け取ったデータを含むHTMLの作成。 でできると思うのですが、 2から3へは皆さんどのようなロジックを使っていらっしゃるんでしょうか? 私は1から2へのHTMLの作成の際に Hiddenでメール送信したい内容を隠し持たせてから、 2の画面でのSubmitの時に隠し持たせた内容をメール送信すれば良いのかな? と思っているのですが、 他にどのような方法があるのか(使ってらっしゃるのか)教えて頂きたいのです。 また、上記の方法に対する良し悪しなどもご指摘頂けますと とても助かります。 足りないところは補足致します。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • メールフォームの確認画面が表示されない

    メールフォームを作り、送受信も出来るのですが、 送信する前、確認画面を表示する事が出来ません。 確認する、というボタンを作ってそれを押すと 確認画面が出る筈なのですが、 何かが違うみたいでInternal Server Errorになってしまいます。 送受信は出来るので、確認画面を作らなければ完成しているのですが 出来れば確認画面を表示させたいです。 どなたかご教授をお願いします。

    • 締切済み
    • CGI
  • メール送信フォームについて

    ヘッダー、メニュー、フッターはHTMLで記述しています。 問い合わせフォームはCGIで記述しています。 1.利用者が問い合わせフォームに入力 2.入力内容の確認画面、または入力エラーの画面 3.送信後完了画面 入力内容の確認画面でヘッダー、メニュー、フッターも表示させる。 入力エラーの画面でヘッダー、メニュー、フッターも表示させる。 送信後完了画面でヘッダー、メニュー、フッターも表示させる。 ヘッダー、メニュー、フッターはすべて同じ内容で、 問い合わせフォームのみが変化する仕様になっております。 入力内容の確認画面、入力エラーの画面、送信後完了画面の各画面のヘッダ、メニュー、フッターをCGI内にすべて記述しているのですが効率が悪いと感じております。 どのようにコーディングするのが最も効率が良いでしょうか? どうぞ宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • メールフォームの確認画面の表示について

    ホームページにメールフォームを設置しているのですが、入力項目が多く内容確認ボタンがページの下の方にあるためか、内容確認ボタンを押して確認画面が表示されると、真っ白な状態になってしまいます(ページの下の方が表示されるため。上にスクロールすると確認画面が現れます。) そこで、内容確認ボタンを押してページが切り替わった時にそのページの一番上の位置が表示されるような設定方法を教えていただければと思います。 ちなみにメールフォームは有料のフォームズです。 どうぞ宜しくお願いいたします。

専門家に質問してみよう