WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ボタンをクリックして呼ばれたCGIを一通り実行し、再度呼び出し元のcgiを実行させるには?

0:[投稿] もんもん [2004/03/16 11:42 ][環境:IE6、Windows2000 Linux(時にUNIX)、apache、CGI、Perl5.6.1]

こんにちは。もんもんと申します。
Web関連初心者です。
以前からこの掲示版を閲覧させて頂いております。
題記質問について投稿させて頂きます。

ブラウザのボタン(例えば「削除」)を押すと、データを削除するcgi(例えばdata_delete.cgiとします)が走るようになってます。
(また他のボタン(例えば「更新」)を押すと、更新するcgiであるdata_update.cgiが走ります)
そのcgiを走らせると、SQL文を実行し、DBから対象データを
削除または更新を行います。
今現在、DB(確かPostgreSQLでした)に接続して、
処理(削除または更新)を行い、DBを開放するところまで行われています。ただその後、削除または更新された最新状態を再度表示したいため、呼び出し元cgiを再度実行する必要があります。
(呼び出し元cgiは、SQL文を実行し、DBからデータを取得し、テーブルで表示させるcgiです)
自分で調べてみて、バッククォーテーションを使う方法も思いついたのですが、コマンド実行を行うものなので違うと思いました。
また呼び出し元cgiでは、呼び出し元cgi自体が呼ばれる際、引数をhiddenを用い、POSTで取得しています。最新の状態を表示するために呼び出し元cgiを再呼び出し(再実行)する際にも、同じように呼び出したいと考えております。
なお、呼び出し元cgiでdata_update.cgiやdata_delete.cgiを呼ぶ時は、JavaScriptを用いて呼び出しています。

いきなり長々と申し訳ありませんが、どなたかご存知の方がいらっしゃいましたら、ご教授願えませんでしょうか?
よろしくお願いします。


1:[関連] Yachimata [2004/03/16 11:59 ]

cgi に関してはあまり良く分からないのですが、
cgi から cgi を呼ぶのってそんなに難しいのですか?

画面から直接呼ばれる時と、他の cgi から呼ばれる時とを考慮して、
インターフェイスを考えてやれば良いだけのように思います。

違ってたらごめんなさい。



2:[関連] もんもん [2004/03/16 12:07 ]

Yachimataさま

ご返答ありがとうございます。
とはいえ、私自身初心者なので、インターフェイスを考えるという
意味さえもはっきりと掴めておりません…。ごめんなさい。
継続して、自分でも調べているのですが…(自分の無知さに泣けます)
書き込みありがとうございました。


3:[回答] Yachimata [2004/03/16 14:44 ]

私自身も cgi に関しては殆ど経験はありません。

ブラウザから呼び出されて起動する時はリクエストからデータを受け取らなければならないでしょうし、
他の cgi から呼び出されて起動する時はまた別な方法でパラメータを受け取る必要があると思います。

インターフェイスを考える、とはその差異を考慮するという事です。

呼ばれ方によってパラメータの受け取り方をスイッチング出来るのであれば、cgi ファイルとしては一つでも良いのかも知れません。
それが不可能であれば、全く別な cgi を設置するでも良いと思います。

そういった切り分けをしていけば良いのではないでしょうか。


4:[完了] もんもん [2004/03/16 17:59 ]

Yachimataさま

再度ご返信ありがとうございます。
formタグでpostを指定し、action先に実行cgi名を書き、
JavaScriptでアクションをかけたら行きました。
どうやら難しく考えすぎていたようです。
ありがとうございました。


5:[完了] gun [2004/03/16 20:02 ]

私はUPDATEやDELETEの実行後にLocationヘッダを出力させて
URLをジャンプさせています。

print "Location: $NEXT_CGI_NAME?ARG1=1&ARG2=2\n\n";


6:[質問] もんもん [2004/03/16 21:36 ]

gunさま

ご返答ありがとうございます。
この場を借りてお尋ねしたいのですが、このLocationヘッダを
出力させる方法では、POST形式では可能なのでしょうか?
(gunさまがご提示下さったものは、GET形式とお見受けします)
UPDATEやDELETEを行った際に再実行されるcgiがPOSTでパラメータを受け取っているので、お尋ねしたいと思いました。
恐れ入りますが、ご教授頂けたらと思います。
よろしくお願い致します。


7:[回答] gun [2004/03/16 22:09 ]

>5 の方法はGET形式となります。
POST形式のみお探しだった場合には、この方法は使えませんね。
すみません。

私の場合はPOSTでもGETでもどちらからでも引数が入っていれば
取得するように作っておりますので、Locationでも問題ありま
せんでした。


8:[回答] AC [2004/03/16 22:40 ]

>>6
逆に、「呼び出し元cgi」をなぜPOSTメソッドで受けるようにしているのかが
知りたいです。
data_update.cgiやdata_delete.cgiがPOSTなのは分かりますが、
副作用の無い(DB更新を伴わない)「呼び出し元cgi」がPOSTである理由が
分かりません。


9:[回答] もんもん [2004/03/17 21:19 ]

gunさま・ACさま
ご返答ありがとうございます。
返信が遅くなり申し訳ありません。

ACさま
呼び出し元cgiも他のcgiからPOSTでパラメーターを受けています。
<input  type="hidden" name=…後は略>で送っています。
ですので、POSTでパラメータを受け取りたいと考えました。

gunさま
>POSTでもGETでもどちらからでも引数が入っていれば
>取得するように作っておりますので
とのことですが、受け取る側でどのように書いていらっしゃるのでしょうか?もしよろしければご教授願えませんでしょうか?
私の認識だと、getで受け取るには、CGI.pmのurl_paramメソッドで、POSTで受け取るにはCGI.pmのparamメソッドか、あるいは$id=$in{'id'};といったように受け取ると理解しております。
GETできてもPOSTできても受け取れる方法を是非お聞かせ願えませんでしょうか?
図々しいお願いですが、もしよろしければお聞かせ願います。


10:[関連] もんもん [2004/03/17 21:20 ]

すいません、「回答」ではなく「関連」でした。
失礼致しました。


11:[回答] gun [2004/03/17 23:44 ]

$ENV{'REQUEST_METHOD'}の内容が'POST'なのか'GET'なのかチェックして、
どちらの方法で受け取るか切り替えているだけです。


12:[回答] 通りすがり [2004/03/18 12:04 ]

>>9
> 私の認識だと、getで受け取るには、CGI.pmのurl_paramメソッドで
私の認識だと、GETでもPOSTでもparam()でパラメータを受け取れます。
url_param() はPOST時にURLパラメータを受け取りたい時に使用します。


13:[完了] もんもん [2004/03/19 11:45 ]

gunさま・通りすがりさま

返信が遅くなり申し訳ありません。
私の認識が違っているようですね…(恥)
ご教授・ご指摘ありがとうございました!!
失礼します。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World