• ベストアンサー

フォームの移動について

Perl-CGIとOracleを利用して作成してます。 一覧画面から入力画面にとんで、入力画面からデータを受け取り、それをSQLでDBに挿入するときにエラーがなければ一覧画面に戻る。 このような処理にしたいのですが・・・ SQLとエラー判定は入力画面から入力ボタンを押したら判定.cgiにとんで行っています。 入力画面からすぐに一覧で処理をさせてしまえばいいのですが、そうすると一覧画面のコードがとても長くなってしまうため、できれば避けたいのです・・・ 大変わかりずらい説明なのですが、ポイントだけでもよいのでよろしくお願いします。

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.3

Locationヘッダでのリダイレクトですが、CGIでは通常、最初に print "Content-type: text/html\n\n"; などとして、Content-typeヘッダを出力しますが、それの代わりに、 print "Location: 一覧画面のURL\n\n"; のようにして下さい。 これを出力する前に何かを出力しますとリダイレクトしない場合がありますので、注意して下さい。

taganyan
質問者

お礼

回答有難うございました。 おかげさまで無事に解決することができました。

その他の回答 (2)

  • root139
  • ベストアンサー率60% (488/809)
回答No.2

手っ取り早いのは、判定.cgiで一覧画面へリダイレクトさせる処理を行うことだと思います。 リダイレクトさせるには、Locationヘッダを出力するか、出力するHTMLにリダイレクト用のmetaタグを入れるのが簡単かと。 Locationヘッダでのリダイレクト:  CGIの最初の出力で「Location: 一覧画面のURL(改行)(改行)」を出力。 metaタグでのリダイレクト:  出力するHTMLのヘッダー部に下記のような要素を記述。 ----------------------------------------------- <meta http-equiv="Refresh" content="0;URL=一覧画面のURL"> -----------------------------------------------

taganyan
質問者

補足

早速のご回答ありがとうございました。 Locationヘッダでのリダイレクトのやり方がいまいちわかりません。 また、 metaタグでリダイレクトすると、一瞬判定.cgiにとんでから、すぐ一覧画面に戻るのですが・・・ これはどうにもならないのでしょうか? できればエラーがなければ、直で一覧に飛ばせたいです。

  • nipotan
  • ベストアンサー率59% (134/227)
回答No.1

現状で、判定 CGI での画面処理はどうなってるんでしょうか。 エラーが発生しなかった場合、エラーが発生した場合は、判定 CGI にて状況を表示するんでしょうか。 単純に判定 CGI 側でエラーを判別して HTTP の Location ヘッダを出して振り分ければいいんじゃないでしょうか。 すんげー適当な書き方ですが例えば… --- use DBI; (略) $h = $db_handle->prepare($sql); # エラーによる croak を止める $h->{RaiseError} = 1; # SQL の実行 $h->execute(); # エラーを捕捉 if($error = $h->errstr){ print "Location: http://your.domain/エラー時に表示させるページ\n\n"; }else{ print "Location: http://your.domain/一覧画面\n\n"; } --- HTML ではこんなの制御できませんから、CGI で行ってください。

taganyan
質問者

お礼

早速のご回答ありがとうございました。 これから試してみたいと思います。 ありがとうございましたm(_ _)m

関連するQ&A