• ベストアンサー

フォームの移動について

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

  • HTML
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • JSPのページ移動

    書き込み一覧が表示してあるJSPの入力フォームがあり、そこで入力をして「書き込み」ボタンを押すと入力したデータが、DBへ登録するサーブレットへ飛び、入力をした画面上では「書き込みました」のようなHTML画面が表示されるとします。その画面で「TOPへ戻る」ボタンを押すと、今度は検索サーブレットが動き、DBから最新の一覧が引っ張り出され、登録更新後の書き込み一覧JSPが画面上に出るとします。ここで質問なのですが、「書き込み」ボタンを押すと同時に登録サーブレットと検索サーブレットを動かすことは出来ないのでしょうか?理想としては、「書き込みました」のようなHTML画面は使用せず、一気に更新後の一覧を表示させたいのです。

  • オラクルDBからのデータ取得について

    こんばんわ。 オラクル(sqlplus)についての質問2点です。 (1)シェルからオラクルDBへアクセスし、データを取得したいのですが、  select時に、結果のヘッダーをつけずに結果(データ)のみをファイル出力することは可能でしょうか? (DB2で言うところの「-x」オプションのような・・・) (2)エラー時にSQLコードを取得したいのですが、SQLコードをファイル出力することは可能でしょうか? オラクルは初心者で、行き詰まってしまいました・・・ どうかよろしくお願いします。

  • perlでDBアクセスする際にapache設定

    本日、DBI->CONNECTで返ってこないと質問をしたものです。 色々と調べているうちに、もしかしたらDBアクセスはおわり、その後のCGIが表示できなくなっているかもしれないと思うようになりました。 ORCLE9iがあるあとで、PERL,Apacheをインストールしました。 DBアクセスをしない状況ですと、CGIのプログラムは何の問題も無く、動きます。 ただ、DBアクセスしようとするとエラーもでない状況で、画面に何も出ません。 ApacheのORACLEに関する環境設定が必要なのでしょうか? 環境は、Windows XP      Active Perl 5.8.7.813        DBI 1.602 ,DBD-Oracle 1.17      Apache 2.0.54 どなたか、わかる方いらっしゃいますでしょうか? この件で2日悩んでおります。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • フォームメール確認画面から戻るためには?

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

    • 締切済み
    • CGI
  • textareでの改行

    ホームページ上のtextareaで入力してもらった情報を取得するCGI(perl)スクリプトを書いています。流れとしては,フォーム上で入力した情報をCGIで取得→確認画面を表示→問題無ければメールフォームとして送信,となっています。 このスクリプト上で問題となっているのが,textareaでは自動的に改行処理(wrap=softと同じ?xhtmlで書いているので,wrap属性は指定していません。)するときに入力される改行コードと,入力者が意図的に入力する改行コードを判別出来ないということです。自動的に挿入される\n(0x0A)を削除しようとスクリプト上で, $text =~s/\r\n/\n/g; $text =~s/\r/\n/g; $text =~s/\n//g; と入れたところ,全ての改行コードが変換処理されてしまい,入力者が意図的に入れた改行コードまで処理されてしまいます。 スクリプト上,もしくはxhtmlと組み合わせて,自動的に挿入される改行コードだけを消去して,意図的に入力した改行コードだけを残す処理は出来ないものでしょうか? phpなどを使うと出来るようですが,ある程度perlのcgiで作成してしまったので,このままで出来ればと思っています。よろしくお願いします。

  • フォームメール確認後の戻るについて

    教えてgooのNo.130269にも同様な質問があるのですが、教えてください。 htmlで作成した入力画面(フォーム)からcgi(perlで作成)で確認画面に行き、内容修正のための戻るボタンを設置しているのですが、戻るボタンを押すと、入力画面に戻っても、入力した内容が保持されないのですが、内容を保持する方法があれば教えてください。また、補足等が必要であればご連絡下さい。 私の使っているブラウザはIE5.5です。 確認画面では以下の両方のコードでだめでした。 <input type="button" value="内容を変更する" onclick="history.back()"> <a href="javascript:history.back()">内容を変更する</a>

    • 締切済み
    • CGI
  • CGI/Perlでメールフォームを作るには。

    CGI/Perlでメールフォームを作るにはHPのトップページ(ソースコード)にCGI/Perlのプログラムを入力すればメールフォームは使用できるようになるのでしょうか? よろしくお願いします。

    • 締切済み
    • CGI
  • 処理の切り分けについて

    現在、フォームから情報を処理するCGIをperlで書いています。 フォームの入力、確認、結果の表示を一様のながれで処理するプログラムはかけました。 この、入力画面にて、押したボタンによって、入力された情報は同じで、処理先のみを分けることはできま線でしょうか? 具体的には、確認画面へ飛ぶボタンと、その入力を処理にかけるページに飛ぶボタンの2つをひとつのフォームに共存させたいのです。 どうかよろしくお願いします。

    • 締切済み
    • CGI
  • PerlとWin32::ODBCを使ってDBにアクセスするときに出るエラー

    こんばんわ。最近、Perlを使い始めたばかりの初心者です。解決方法がわからないので、教えて下さい。 PerlとWin32::ODBCを使ってDBにアクセスするプログラムを組んでいるます。DB接続まではうまくいくのですが、それ以降に以下のようなエラーがでます。モジュールが足りないようなのですが、どのようにして解決すればよいかわかりません。以下にエラーとコードを記入します。 コード: #!/usr/local/bin/perl $DSN = "DSN=DB1;UID=kaki388"; use Win32::ODBC; if (!($0 = new Win32::ODBC($DSN))){ print Win32::ODBC::Error(); print "失敗"; exit(); } print "成功"; $sql = "SELECT * FROM tbl1"; $0->run("$sql"); $0->sql("$sql"); @fn = $0->FieldNames(); while($0->FetchRow()){ undef %Data; %Data = $0->DataHash(); print "$Data{$fn[$i]}<BR>\n"; } $0->Close; エラーコード: 2004/08/26(11:49:14) W-SV 127.0.0.1 [80] E200042 "Can't locate object method "run" via package "Win32::ODBC=HASH(0x275020)" (perhaps you forgot to load "Win32::ODBC=HASH(0x275020)"?) at odbc.cgi line 11. " よろしくお願い致します。

    • ベストアンサー
    • Perl
  • htmlフォームから受け取ったファイルをDBへ保存

    htmlのフォームタグ内で、inputtyp=file で受け取ったwordファイルやPDFファイルを perlで書いたCGIプログラムのほうで、MYSQLのデータベースへ保存したいのですが どのように書けばいいのかわかりません。 保存する型はBLOB型でよいといくつかのサイトで書いてあるのですが、 SQL文の書き方や、フォームから受け取ったデータの処理の仕方などの詳細が わかりません。 フォームで受け取ったファイルをデータベース(mysql)へ保存する 簡単なサンプルコードなどが知りたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう