• ベストアンサー

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で指定することは出来ません。  こういった場合、どのファイルでどのように処理すればよいのでしょうか?  よろしくお願いします。

  • CGI
  • 回答数4
  • ありがとう数4

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

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

  • 一つのformで、複数のaction指定

    レイアウトなどの関係で、formの配置が基本とは異なるものになってしまい、うまく動作させる方法が見つからず困っています。 現在は <form> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> </form> …… <form method="POST" action="A.php"> <input type="submit" name="aa" value="あああ"> </form> <form method="POST" action="B.php"> <input type="submit" name="bb" value="いいい"> </form> <form method="POST" action="C.php"> <input type="submit" name="cc" value="ううう"> </form> <form method="POST" action="D.php"> <input type="submit" name="dd" value="えええ"> </form> のようになっていて、チェックボックスの値を送信したいのは、Dのボタンを押したときだけPOSTされるようにしたい状態です。 この値を取得する方法か、もしくは <form method="POST" action="(ボタンに応じたもの)"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> <input type="checkbox" name="select[]" value="●●"> …… <input type="submit" name="aa" value="あああ"> <input type="submit" name="bb" value="いいい"> <input type="submit" name="cc" value="ううう"> <input type="submit" name="dd" value="えええ"> </form> このように、一つのフォームの中に埋めてしまい、actionに入る値をボタンによって分ける方法はありませんでしょうか? もしくは他の方法でも構いません。 お分かりの方がいましたら、是非ご教授お願いいたします。

    • 締切済み
    • PHP
  • VBAでIEを操作submit処理について

    ExcelVBAでIEを操作する処理について勉強中です。 formで、nameが定義されておらず、submitが複数(4つ)ある場合です。 HTMLが下記記載の場合で、submit”A”をクリックしたいです。 <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="A"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="B"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="C"></td></form> <form action="XXXX/admin.cgi" method=POST><td> <input type="submit" value="D"></td></form> VBAでのsubmitの記述を下記で試してみたのですが、うまくクリックできません。 ObjIE.document.forms(0).Action = "XXXX/admin.cgi" ObjIE.document.forms(0).submit どのように変えたらよいのでしょうか。。。 ご教授お願い致します。

  • document.form.actionでの処理

    以下のようなソースにて、 ・<form>のactionでは"send.php"へPOSTしたい。 ・javascriptにて、<select>で選択した値をhoge.phpへ渡したい 上記の事を実現するため、 ・リストから選んだ値を画像クリックで"hoge.php"へ渡し別窓で表示 ・"text"に入力した値をsubmitで"send.php"へ渡す といった処理をしているのですが、 "hoge.php"を参照した後に"text"へ何か入力してsubmitすると 本来send.phpへとぶはずが、"hoge.php"へとんでしまいます。 何が原因なのか、また最良を方法がありましたら ご教授頂ければと思います。 <script> <!-- function form_submit(url){ document.form.action=url; document.form.target = "_blank"; } //--> </script> | <FORM METHOD="POST" name="form" action="send.php"> <SELECT name="sel"> <OPTION value="001">001</OPTION> <OPTION value="002">002</OPTION> </SELECT> <input type="image" src="sub.gif" onClick="javascript:form_submit('hoge.php')"> <input type="text" name="text"> <input type="submit" value="送信"> </FORM> |

  • javascriptでCGIを実行するには

    htmlタグ <form method="post" action="・・・/cgi-bin/gogo.cgi"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> 上記で送信ボタンを押すとcgi側でnameを受け取れますが、 以下の場合はcgiは動作するのですが、nameを受け取れません、 受け取れる方法を教えてください。 <script type="text/javascript" language="javascript"> <!-- function gogo(){ document.write('<img src="・・・/cgi-bin/gogo.cgi">'); } // --> </script> </head> <body> <form method="post" action="javascript:gogo()"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> </form>

  • こんな場合・・・

    Perlでプログラミングしているんですが、HTMLの知識かも知れません。簡単そうなことなんですが、つまづいてしまいました。 下記のソース 矢印の部分を読んでください。 ソースの説明 以下は書き込みした後の確認画面のソースです。確認画面では自分が入力したことを確認できます。よく登録フォームとかでありますよね。 OKボタンを押すと書き込まれます。戻るボタンを押すと、書き込み画面に戻り再編集できるようにしたいと考えています。 <form method="post" action="$this_file"> <input type="hidden" name="op" value="w"> <input type=submit value="  OK  ">   #→OKを押したら1文上のパラメータを別ルーチンに送りたい。value="w"です。 <input type="hidden" name="op" value=""> <input type=submit value="  戻る  ">   #→戻るを押したら1文上のパラメータを別ルーチンに送りたい。つまり「value=""」です。 <input type="hidden" name="gname" value="$gname"> <input type="hidden" name="email" value="$email"> : : </form> 矢印文のことをしたいんですが、どうもどちらのボタンを押してもvalue=""が送られてしまうんです。これをちゃんと矢印文どおりにプログラミングさせたいんですがどう記述すればいいのでしょうか?HTMLの辞典を引いたんですけど、わからなかったです。

    • ベストアンサー
    • CGI
  • javascriptからCGIへの値渡し

    cookieは利用しない方向で考えています。 HTML上のdocument.form01.のsubmitが押下されたら一度手入力されたデータ(userinput)を加工し、 別のフォームform02.valueに格納してtest.cgiにPOSTで投げる動作を期待しています。 下記だとページ遷移無しで一時的な格納まで確認しましたが CGIへの送信が機能していないようです。 どの様にすべきでしょうか? [html] <script type="text/javascript"> <!-- function onSubmit() { document.form02.sendform.value = '\"' + document.form01.userinput.value + '\"'; document.form02.submit(); } --> </script> <body> <form name="form02" method="POST" action="test.cgi"> <input type="hidden" name="sendform" value=""> </form> <form method="POST" action="" name="form01"> <input type="text" name="userinput"> <input type="submit" value"送信" onclick="return onSubmit();"> </form> </body> </html>

  • Comfirm応答の後処理

    こんにちは、現在以下のようなHTMLを書きかけています。 やりたいことは、設定ボタンと消去ボタンがあり、それぞれ同じcgiを起動するけれど、 消去ボタンを押したときだけは確認のダイアログボックスを表示させたい。 そしてダイアログボックスでキャンセルを選ぶとcgiは実行しない。 設定ボタンを押したときはダイアログボックスは出さずにcgiを実行する。 で、試行錯誤しながらやってみているのですが、キャンセルを選んでも結局は cgiを実行してしまうので、どう書けばいいのか教えてください。 #ここになにか入れて制御できるのかなぁ?#の部分に何か書いて制御できますか? よろしくお願いします。 <script language="JavaScript"> <!-- function startConfirm(){ confirm("選択したものを削除します。よろしいですか?");    #ここになにか入れて制御できるのかなぁ?# } // --> </script> </head>     :     : <form method=post action="next.cgi"> <input type="checkbox" name="select1">選択肢     :     : <input type="submit" name="sub_set" value="設定"> <input type="submit" onClick="startComfirm()" name="sub_del" value="消去"> </form>

  • 複数FORMの一括実行について

    通常であれば同一サイト内に下記のソース(フォーム)が入るのですが、 これを改良しサイト上で希望の送信先をチェックボックスで選択し一回の操作で複数のcgiを実行したく思います。 良いcgiがあれば教えてください。 又は改造ができるcgi、修正方法を分かりましたらお教え願います。 サイトA <form action="https://aaa.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトB <form action="https://bbb.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトC <form action="https://ccc.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form>

    • 締切済み
    • CGI
  • formの中で別のactionをもったsubmitボタンの設置。

    formの中で別のactionをもったsubmitボタンの設置。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>sample</title> <script language="JavaScript" type="text/javascript"> <!-- //<クリックした時に実行される関数> //*** 確認画面A function func1(form){ document.form1.check[].value =form.check[].value; document.form1.submit(); } //*** 確認画面B function func2(form){ document.form2.check[].value =form.check[].value; document.form2.submit(); } //--> </script> </head> <body class="index"> <form enctype="multipart/form-data"> <input type="check" name="test[]" value="0">0 <input type="check" name="test[]" value="1">1 <input type="check" name="test[]" value="2">2 <input type="button" onClick="func2(this.form)" value="確認B"> <input type="button" onClick="func1(this.form)" value="確認A"> </form> <!-- sousin.php画面へ --> <form method="post" name="form1" action="sousin.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> <!--- text.php画面へ ---> <form method="post" name="form2" action="text.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> </body> </html> 上記のように記述し、フォームの中に別のactionをもったsubmitボタンを設置しました。 チェックボックスで何と何がチェックされたかを渡したいのですが、エラーが発生します。 おそらくjavascript内の構文でcheck[]と記述してるからだと思いますが、 どのようにすれば受け渡すことができるのでしょうか。 checkのみにすると1つの値しか渡せません。

    • ベストアンサー
    • HTML
  • アンケートCGI作成について、form actionの呼びだし等につい

    アンケートCGI作成について、form actionの呼びだし等について質問です。 初めまして、CGIアンケートを作成しようとしているPerl初心者です。 説明ページ(ex01.html) ↓ フォーム付きアンケートページ(enk01.html) ↓ 説明ページ(ex02.html) ↓ 以下略 という流れでアンケートを続かせたいのですが (だいたい、ex.htmlとenk.htmlが各20ずつくらいです。) フォーム付きアンケートのフォーム <form action="form.cgi" method="post"> <input type="radio" name="Emotion_Body" value="0" checked> 選択肢1 <input type="radio" name="Emotion_Body" value="1"> 選択肢2 <input type="radio" name="Emotion_Body" value="2"> 選択肢3 <input type="submit" value="次のアンケート"> となっていて、actionに次のページのhtmlをいれ込むことができませんでした。 (form.cgi:formから受け取ったデータを外部ファイルへ書きだすCGIファイルです。) フォームの「次のアンケートボタン」を押すと、 form.cgiにフォームのデータを送りつつ、ex02.htmlを表示させるということはできないものでしょうか? 過去ログによるCGIに表示させる方法を書くのだと、 フォームページの間に、ただのhtmlファイルを挟むので、 (例:enk01.html→ex02.html→enk02.html→…) 各ページに対応したCGIファイルを書かなければならないということなのでしょうか? よろしくお願いいたいします。

    • ベストアンサー
    • Perl