• ベストアンサー

action=””の場合の処理手順は?

現在、あるショッピングカートシステムをカスタマイズしています。 その中で、HTMLファイルに  <form name="form1" method="post" action="">  <input type="hidden" name="mode" value="list">  ・・・  <input type="submit" name="submit" value="一覧表示">  </form> などと記述してある部分がたくさんあります。(タイトルの”は実際には"です。) 質問1  上記のフォームからsubmitされた時点で、main.cgiというスクリプトのMAINルーチンでパラメータ(mode)の値を見てどの処理を行うか分岐されているのですが、actoin=""とした場合、どのモジュールのどのルーチンを呼び出すのか、規定値として決まっているのでしょうか?(main.cgiのMAINルーチンが規定値なのでしょうか?) 質問2  上記に関係するのですが、main.cgiから呼び出された別ファイルのスクリプトで、print文を使ってHTMLを出力しているのですが、個人情報の入力画面などででSSLを使いたいと思います。  色々と探してみたのですが、 <FORM action="https://ドメイン名">と記述するというページしか見つけられませんでした。  main.cgiで初期設定を行っている関係でSSLを出力したいスクリプトファイル名を直接actionで指定することは出来ません。  こういった場合、どのファイルでどのように処理すればよいのでしょうか?  よろしくお願いします。

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

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

action="" と書かれていると、基本的には自分自身の呼び出しに なるとおもいますが、クライアント側のブラウザ依存な気もしますので、 この使い方はまずいんじゃないかな。 普通のHTMLでいいので、 test.html: <HTML> <BODY> この画面がひらいたよ。 <FORM action="" target="_blank"> <INPUT TYPE="SUBMIT"> </FORM> </BODY> </HTML> って作って、このHTMLを実行してみればわかりますが、 アクションは、このHTML自身(test.html)が呼ばれます。 「action=""」そのものを記述しなくても同義です。

kumaow
質問者

お礼

ご回答有り難うございます。 教えていただいたとおり、test.htmlを HTMLファイルを置くルートディレクトリ、CGIスクリプトを置くcgi-binの両方に置いて試してみましたが、おっしゃるとおり自分自身が呼ばれました。(同じ画面がもう1つ開きました。) ということは、デフォルトでは(少なくともInternetExplorer6では)action=""と書いた場合自分自身を呼び出すということですよね。 となるとやはり、検証中のシステムではなぜaction=""なのにmain.cgiを呼び出すのかが分かりません。 action以外に呼び出すcgiを指定する設定方法があるのでしょうか? (action=""を含むHTMLファイルを見てもそれらしい設定が見当たらず途方にくれています。もちろんJavaScriptなどは使っていません。) そういった設定方法をご存知でしたら教えていただけると幸です。

その他の回答 (3)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.4

Ano.3です。 それなら、JavaScriptで割り込まれてるんじゃないですかね。。 OnKey() とか OnClick() とかで。 それでもないとすれば、 「action="" と記述してあるFORM」というもののURLがくると、 main.cgiにURL FORWARDするような仕組みが、あなたの知らないどこかにあるんじゃないでしょうかね。 いずれにしても、システム固有の問題だと思われますので、システムを設計した人に聞いた方が早いんじゃないかな(笑)

kumaow
質問者

お礼

度々のご回答有り難うございます。 JavaScriptですが、htmlファイルには含まれていません。 ということは、action=""の時にmain.cgiを呼び出す仕組みが「何らかの形で」あるということですね。 とりあえず、一般的なCGIの話では無いようですので、質問1に関しては「動いているのでOK」ということにしようと思います。

noname#39970
noname#39970
回答No.2

質問や回答をしようとすると 「○○.php?q=xxxxxx」みたいになってるよ と言いたかったんだけど聞いてる事と違ってたみたいね 1。 これはwebサーバの設定によって異なる。 もしサーバで採用されてるのがapacheだとしたら何も指定しなかった場合はどのようなファイルを探すかという設定が存在する。(DirectoryIndexディレクティブ) これにCGI系のファイルが設定されて居ない場合は更に設定によって挙動が決まるがディレクトリ一覧またはエラーになる。 大抵は呼ばれた階層の「index.html」を参照しようとするのでそう設定されていればactionを名無しで呼ぶと「index.html」を呼ぶ事になる。(ハズ…) これらはユーザが設定を認められていれば「.htaccess」で設定できる。(設置先の環境を調べれば通常記載されている) 2。 actionでも直接指定可能。 CGI名が書いてあるだけだとactionを起こすformが書かれたhtmlの場所を基準にCGIを探すだけなので絶対urlで指定をすれば良い。 つまり「action="https://ドメイン名/cgi-bin/main.cgi"」のような形で呼ぶ。

kumaow
質問者

お礼

度々の御回答有り難うございます。 質問の仕方が下手で、聞きたい内容をうまく伝えられず申し訳ありません。 1についてですが、Webサーバはapache1.3.33(OSはRedHat9)を使っています。(自前のテストサーバで作業しています) httpd.confの中に DirectryIndex index.html とのみ書いてあります。(.htaccessは置いていません。) ショッピングカートのCGIが置いてあるcgi-binにindex.htmlを置いてaction=""と指定しているformをsubmitしてみましたが、やはりmain.cgiが呼ばれます。 また、2についてですが全くの説明不足でした。 HTMLのフォームから1の方法でmain.cgiを呼び出し、その中で呼び出す先のルーチンを my ($cart) = new Cart(引数1,引数2...) …省略… $cart->sub_add(引数1,引数2...) という形で呼び出しています。 そして、cartモジュールのsub_addルーチンの中でprint文を使って、個人情報を入力するフォームを含むHTMLを出力し、その入力結果を受け取り処理したいのです。 上記の$cart->sub_add(...)とした場合にhttps(SSL)をどうやって指定するのかという点で困っています。 度々申し訳ありませんが、よろしくお願いします。

noname#39970
noname#39970
回答No.1

action="main.cgi?" このOKWaveのurl、よく見てごらん

kumaow
質問者

お礼

ご回答ありがとうございます。 返事が遅れまして申し訳ありません。 >action="main.cgi?" やはり、action="main.cgi"がデフォルトということですよね。 (postメソッドを使っているのでmain.cgi?の?は使わないでよいと思うのですが...) >このOKWaveのurl、よく見てごらん urlを見るとOKWaveではphpを使っているためか、 http://personal.okwave.jp/search.php3 といった感じで、main.cgiを使っているページが見つけられませんでした。 また、ソースを表示してみてもaction=""を含むページが見当たらなかったのですが、どこを見ればお答えいただいた内容を判断できるのでしょうか? 出来ましたら「ここを見ればそんなこと明らかだよ」といったページを教えていただけないでしょうか。

kumaow
質問者

補足

質問1の中の actoin="" は action=""のtypoです。 また、CGIで使っている言語はperlです。 間違い・情報不足で申し訳ありません。

関連するQ&A