• 締切済み

入力フォームをCGIでエラーチェック→PHPにデータを送る

CGIでフォームの入力をチェックした後、データをphp に送ろうと思います。 今まで使用してた、エラーチェックした後、データを、管理者にメールでデータを送信させるCGIをカスタマイズして、エラーチェックの後に、PHPへデータを送ることは可能なのでしょうか? どなたか御教授お願いいたします。 以下はエラーチェック後の部分です。 $errNum = chkFormInput(); fixTags(); open HTML, $template or err("$templateが開けません"); @html = <HTML>; close HTML; if ($errNum > 0){ # エラーメッセージの先頭のカンマをはずす $errMsg =~ s/^,//; $errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)"; $errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n"; }elsif (sendmail() && stockData()){ $errMsg = "ありがとうございました。以下の内容で$adminName($adminMail)に送信しました。"; } replaceTags(); showHTML(); exit();

みんなの回答

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.2

> (2)CGI側でコマンドラインPHPを利用する。 すいません。これの補足。 PerlのCGIからは、 open(PHPPRG, "php sample.php val1 val2"); close(PHPPRG) っていう感じに呼び出しをします。

izaq
質問者

補足

rara_sunさん 返事がおそくなってしまい申し訳ございませんでした。 結局エラー処理が通った後にLocationでデータを渡すことに致しました。 }elsif (sendmail() && stockData()){ print "Location: ../hoge.php?hoge=$hoge&hoge=$hoge&hoge=$hoge&hoge=$hoge"; この場合フォームのメソッドがGETでしか、処理ができなさそうなのですが、 POSTでも可能なのでしょうか?

  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

確認環境がないので、できるかどうかわからないのですが、こういうやり方があるのかな~という程度で・・。 もし、ここで有効な情報が得られなかったら、参考に検討してみてください。それまでは無視してくださって決行です。 (1) 呼び出しCGI(Perl)で HTTP通信のモジュールを 利用する。    前提: ホームページ提供サイトのPerlがそういうモジュールを提供していること。   サンプル: http://ash.jp/perl/socket_http.htm      これは、CGIをブラウザとして利用するという考え方です。 (2)CGI側でコマンドラインPHPを利用する。     前提: ホームページ提供サイトでこの実行をサポートしていること。 参考資料&サンプル: http://php.planetmirror.com/manual/ja/printwn/features.commandline.php   CGIからPHPコマンドを利用してPHPプログラムを実行しようという考え方です。 ほかにうまい方法があればよいのですが・・・ いったんブラウザにHTMLのMETAのRefreshを送りつけるなんて方法も思いついたのですが、エラー処理が大変・・。 ちなみに、そのPHPプログラムの中でメール送信もするんでしょうかね!?データ送信とメール送信どちらが先かわかりませんが、どちらかが失敗したら、もう一方はどうしょりするかも考えないと、不整合がおきますね・・・。 たとえば、メール送信失敗してるのに、データ送信はやっちゃうの?とか・・。

izaq
質問者

補足

rara_sunさん ご説明有難うございます。 初心者なので、詳しい用語とかは、調べながら格闘してます。 質問の補足の説明をいたします。 入力フォーム(HTML)からCGIにデータを受け渡す ↓ CGIで入力のエラー判別、 ↓ 項目にエラーがある場合再度入力フォームを表示 項目にエラーの無い場合、 データの内容をメールで管理者に送信+データをcsv形式で保存。 以上の一連の作業をするcgiを利用して、 これに追加の機能でデータをphpに送りデータベースに書き込みするという機能も付け加えたいのです。 どういう方法がありますかね? ちなみにデータベースはmysqlです。 よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう