• 締切済み

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

お世話になっております。 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; }

みんなの回答

  • 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