- ベストアンサー
FormのACTION属性にいて
FORMのACTION属性を、選択型にはできないでしょうか? <form action="" method=post> 例えばユーザーがフォーム内の項目でAを選択したら、actionの中をA.cgiに。 Bを選択したらB.cgiにするような事はできますか? 通常はactionの中は1つしか指定できないのですが、ユーザーの選択によっては、フォームの値をA.cgiに渡したり、B.cgiに渡したりできると良いと思っています。 CGIを利用しないと無理かもしれませんが、何か良い方法や便利なCGIがありましたら、教えて頂けると助かります。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
再び失礼します。 返信にあるような、プルダウンメニューなどから選択してCGIの送信先を変更する方法を取ることを前提とし、そのうえでCGIの調整を制限されるとなると、条件としてはクライアントサイドの処理に頼ることになりますが、クライアントサイドでHTMLに動的な変更(プルダウンやラジオボタンでaction属性を書き換える等)を加えるには、JavaScriptを利用することが必須になると思われます。 もしCGIに手を加えずに、またJavaScriptなどクライアントサイドスクリプトの使用を避けるとなると、それはHTMLを二つ用意して、それらのHTMLへのリンクでページ選択させて、フォーム送信の段階ではなく、入力ページを選択する段階で処理を振り分けてしまう方法しかないように思います。 HTMLの内容をクライアントサイドで動的に変更するには、JavaScriptなどブラウザ上で動くスクリプトが不可欠ですので、それがダメなら複数のHTMLを用意しておくのが無難でしょう。 もし上記方法以外で、クライアントサイドでの処理に頼らない方法となると、どうしてもCGIを改造する必要がでてくると思います。 クライアントサイドの環境にできるだけ左右されずに、スマートに処理をさせるのであれば、#2の方が指摘されているように、フォーム送信されたデータ内容に基づいてCGIの処理を割り振るような方法を取る必要があるでしょう。 あまり参考にならないかもしれませんが…
その他の回答 (2)
ちょっとズレた回答ですが。 フォーム内で選択された内容に基づいてCGIの処理を割り振るという処理じゃダメなんですか? クライアントサイドで処理を振ろうとするのは限界があるかと。
お礼
御回答ありがとうございます。 仰る通り、入力された値によってCGIで処理を割り振る事ができれば良いのですが、私自身そこまで改造する知識がないために、同じCGIを2つ(仮にAとBとします)設置して対応する事にしました。 そこで、ユーザーさんに入力してもらうフォームは1つにして、入力された値によって、AのCGIで処理させたりBのCGIで処理させたりできたら良いと思っています。 フォームをCGIで出力させて、そこでIF文を加える事によって、フォームの送信先を2つに振り分ける事はできるでしょうか? HTMLをCGIで出力させるCGIは見た事がるのですが、フォームの送信先をどのように振り分けたら良いのか分かりません。 例えば、 <input type=radio name=sentaku value="0" checked> <input type=radio name=sentaku value="1" > があるとして、上を選択したらAのCGIへ送信。 下を選択されたら、BのCGIへ送信するようにしたいです。 CGIのカテゴリーで質問した方が良いかもしれませんが、どなたかアドバイスを頂けると助かります。 よろしくお願いします。
JavaScriptを使用しても良いのであれば、JavaScriptでフォームのaction属性を書き換えてやることで、実現できるように思います。 <html> <head> <title></title> <script type="text/javascript"> <!-- function actcng(i){ document.f1.action=i; } //--> </script> </head> <body> <form action="#" name="f1"> <p><input type="radio" name="r1" value="A" onClick="actcng('A.cgi')">A.cgiへフォーム送信する項目<br> <input type="radio" name="r1" value="B" onClick="actcng('B.cgi')">B.cgiへフォーム送信する項目<br> <input type="submit" value="送信"></p> </form> </body> </html> 上記ソースでは、name="f1"という属性をもつフォームのaction属性を、JavaScriptから書き換えます。 document.f1.action=i; //iは関数の呼び出し側から渡される引数 この部分の記述が、そのフォームのaction属性を書き換える処理にあたります。 ただ、JavaScriptでフォーム送信先を振り分けるとなると、閲覧側がJavaScriptを使える環境でなければ、狙い通りにフォーム送信ができない可能性もありますので、CGIの側で振り分けるように調整するか、あるいはもとよりフォーム送信先の異なる項目ごとにform要素を分けて、HTMLソースを記述する方が無難かもしれません。 参考になれば。
お礼
御回答ありがとうございます。 仰る通り、JavaScriptだとオフにしている方の場合は有効にならないので、別の方法をと考えていました。 最初に書いておくべきでした。すみません。 formの内容自体が長いので(入力項目が多い)、ので1ページに多数fromで区切るのはレイアウト的に良くないので、actionを選択できれば良いと思っていました。 Formの値の送信先をユーザーにプルダウンかラジオボックスで選択してもらい、値の送信先を振り分ける事はできないでしょうか。 これまでは必要なかったので、あまり詳しくは調べていなかったのですが、どなたか良いアドバイスがありましたら、よろしくお願いします。
お礼
御回答ありがとうございます。 JavaScriptを使用しないで振り分けを行うのは、難しいようですね。 ひょっとしたら、何か良い方法があるかなーと思っていたのですが、CGIを私自身で改造するだけの知識もないので、仰る通りあらかじめページを2つ作成して、ユーザーさんに先に選んでもらう事にします。 >あまり参考にならないかもしれませんが… いえいえ。 十分為になるアドバイスです。 2回もアドバイスをして頂き、ありがとうございます。 また何か分からない事がありましたら、御質問させて頂くと思いますので、その際はよろしくお願い致します。