• 締切済み

複数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
  • 回答数4
  • ありがとう数0

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

処理するCGIの内容を # 処理1 とかに置き換えてやればできると思いますよ。 つまり、 print qq|処理1が実行されました。\n|; をaaa.cgiの内容に置き換えて、 print qq|処理2が実行されました。\n|; をbbb.cgiの内容に置き換えて・・・ とやればチェックによって処理内容が変わります。 ただし、aaa.cgiをまるまるコピー&ペーストをするとエラーが出ます。(多分) ここはある程度の慣れか勘が必要になると思います。 これで分からない場合は、もうちょっと勉強してからでないと厳しいと思います。

champ21
質問者

補足

毎回、貴重なアドバイス有難うございます。 この部分が分からないところです。ハイ いろいろ文献を見てるのですが、今の疑問と照らし合わせるプログラム等が無い状況です。 似たようなcgiがあれば参考に出来るのですが・・ 何から手をつければ良いのでしょうか

回答No.3

cgiではなく、フォームを記載するページからjavascriptを使って複数のフォームを送信するというのはいかがですか? たとえば、 選択フォーム(動かすフォームを選ぶ): <form name="cgiselect" onclick="FormSubmit(this)"> <input type="checkbox" name="cginame" value="aaa">aaaに送る <input type="checkbox" name="cginame" value="aaa">aaaに送る <input type="checkbox" name="cginame" value="aaa">aaaに送る <input type="submit" value="送信"> </form> 隠しフォーム(送信用) <form name="aaa" action="https://aaa.cgi" method="post" target="a"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> </form> <form name="bbb" action="https://bbb.cgi" method="post" target="b"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> </form> <form name="ccc" action="https://ccc.cgi" method="post" target="c"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> </form> スクリプト: function FormSubmit(FORM) { // 「aaaに送る」にチェックがあったらフォームAを送信 if(FORM.cginame["aaa"].checked == true) { window.open("","a"); // aという名前の新規ウィンドウを作成 document.aaa.submit(); //フォームAを送信 window.a.close(); // ウィンドウaを閉じる } if(FORM.cginame["bbb"].checked == true) { window.open("","b"); document.aaa.submit(); window.b.close(); } if(FORM.cginame["ccc"].checked == true) { window.open("","c"); document.aaa.submit(); window.c.close(); } location.href = ok.html // 送信済みページに移動 } #それぞれのcgiの結果画面を表示するウィンドウが3つ開いてしまうので、自動的に閉じるスクリプトを追加してみました。 ポイントは各フォームのターゲットをそれぞれ別の名前のウィンドウにすることです。これでもとの画面を変更することなく次々にフォームを送信できます。 動作は検証してませんので、うまく動かなかったらすみません。

champ21
質問者

補足

丁寧なアドバイス有難うございます。 javascriptを試して見ましたが駄目でした。 しかし、ヒントを有難うございました。 もう少し勉強してみます。 現在、頭が混乱し何から手を付けて良いのかも判断がつかない状況です。 出来るまで挑戦します。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

こんな感じでなんとなく感じがわかるでしょうか。 #!/usr/local/bin/perl $cgi = "a.cgi"; # データ処理 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #フォーム変数へ $in{$name} = $value; } print "Content-type: text/html\n\n"; print <<HTML; <html> <head> <title>IF</title> </head> <body> <form action="$cgi" method="POST"> <input type="radio" name="s" value="1">処理1<br> <input type="radio" name="s" value="2">処理2<br> <input type="radio" name="s" value="3">処理3<br> <input type="submit"> </form> <p> HTML if ($in{'s'}) { if ($in{'s'} == 1) { print qq|処理1が実行されました。\n|; } elsif ($in{'s'} == 2) { print qq|処理2が実行されました。\n|; } else { print qq|処理3が実行されました。\n|; } } print <<EOF; </p> </body> </html> EOF exit;

champ21
質問者

補足

親切な対応、有難うございます。 記載頂いた内容はイメージがつきます。 現在、選択した複数の<form action=".cgi" ・・・・ をどうすれば実効できるかで詰っている次第です。 何卒、アドバイスをお願いいたします。 (慣れないと気が変になりそうです。)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

送信先をひとつのCGIにして、 チェックボックスで処理内容を変えればいいのですが、 CGIの動きを知らないと難しいと思われます。 たぶんそういう特殊なCGIは配布されてないので難しいかと・・ 具体的には <input type="radio" name="s" value="1"> <input type="radio" name="s" value="2"> <input type="radio" name="s" value="3"> として、CGI側で if ($in{'s'} == 1) { # 処理1 } elsif ($in{'s'} == 2) { # 処理2 } else { # 処理3 } とやればいいのですが。 わかるかな?

champ21
質問者

補足

有難うございました。 とても嬉しく思います。 現在、処理の部分がイメージがつかない状況です。 今回のようなcgiの動きを習得する場合、どのようなcgiを参考にしたり、学べばよいでしょうか?

関連するQ&A

  • 同一ページで複数のformを扱う場合

    同一のページ内にhiddenでIDを振った削除ボタンを用意しクリックされたIDを取得するにはどのようにすれば良いでしょうか? <form action="/test.php" name="1" method="post"> <input type="hidden" name="id" value="1" /> <input type="submit" name="delete" value="削除"> </form> -- 省略 <form action="/test.php" name="10" method="post"> <input type="hidden" name="id" value="10" /> <input type="submit" name="delete" value="削除"> </form> formにnameを振ってみても最後のIDがPOSTされてしまいます。

    • 締切済み
    • PHP
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 一つの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
  • <FORM> </FORM> の中に さらに <FORM> </FORM>があるときのSUBMITボタンについて

    今、 <FORM ACTION="aaa.asp" METHOD="POST" Name="form1"> <input type="SUBMIT" value="ボタン1"> <FORM ACTION="bbb.asp" METHOD="POST" Name="form2"> <input type="SUBMIT" value="ボタン2"> </FORM> </FORM> としていて、ボタン2を押すとbbb.aspに 飛んでほしいのでに、aaa.aspに飛んでしまいます。 こういう場合どのようにすればよいのでしょうか? それぞれのボタンは hidden の値をそれぞれの フォームの中の値を渡したいので どうしてもSubmitがいいのです。

    • ベストアンサー
    • HTML
  • 1つのformで複数のactionを実行できますか?

    フォーム内に商品の購入ボタンがあります。同じフォーム内に商品名でグーグルのサイト内を検索させるボタンを設置し、横に並べることは可能ですか? フォームの入れ子はよくないようなので、検索をJava scriptでできればよいのですが・・・ スタイルシートではデザイン上無理でした。 <form id="fm" name="fm" action="URL" method="POST"> <input type="hidden" name="shouhinmei" value="商品名"> <input type="hidden" name="kakaku" value="500"> <input type="image" src="kounyuu.gif value="購入"> <form method=get action="http://www.google.co.jp/search"> <input type=hidden class="q" name=q value="商品名"><input type=hidden name=ie value=UTF-8><input type=hidden name=oe value=UTF-8><input type=hidden name=hl value="ja"><input name=btnG type="image" src="検索.gif value="検索"><input type=hidden name=sitesearch value="サイトのURL"></form> </form> </form> +----+  +----+ |購入|  |検索| +----+  +----+

  • FORM1つでリンク

    いつもお世話になっております。 既にある質問も調べてみたのですが <form name="top" method="post" action="xxx.cgi"> <input type = "hidden" name="data" value="open"> <a href="#" onClick="submit();">オープン</a> <input type = "hidden" name="data" value="close"> <a href="#" onClick="submit();">クローズ</a> </form> FORMを1つで、hrefのリンクみたいにして違う値を 送信したいのですが、上記だと 二つ目のリンクが上手く出来ません。 どなたかお知恵をお貸し下さい

  • form 内 onChange

    恐れいります。 <form>内で、もう一つ<form>を作成し、送信したいのですが、 なかなかうまくいきません。form内のformは、selectボックスで、選択時に自ページにsubmitさせるようにしたいのですが。。 <form action="./xxx.cgi" method="POST"> <input type="text" name="xxx"> <form action="./" method="POST"> <select name="YYY" onChange="this.form.submit()"> <option value="ddd">ddd <option value="eee">eee </select></form> <input type="text" name="xxx"> <input type="submit" value="送信"> </form> よろしくお願いします。

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

  • リンク風sabmitのformをまとめられますか?

    フォームの送信を、リンク風に表示しているのですが、 複数ある場合、フォームタグをまとめることはできるのでしょうか? 下記にHTMLを記載しております。 <form name="word1" method="POST" action="word.php"> <input type="hidden" name="fruit" value="みかん"> </form> <form name="word2" method="POST" action="word.php"> <input type="hidden" name="fruit" value="りんご"> </form>    ・    ・    ・    ・ <form name="word100" method="POST" action="word.php"> <input type="hidden" name="fruit" value="ぶどう"> </form> <a href="javascript:document.word1.submit()">みかん</a> <a href="javascript:document.word2.submit()">りんご</a>    ・    ・    ・    ・ <a href="javascript:document.word100.submit()">ぶどう</a> と、1つ1つ書いていて長すぎると思っていたのですが まとめることは可能なのでしょうか? また、可能であれば、javascript等の知識が必要となるのでしょうか? ご教授宜しくお願い致します。

  • 2つのFormタグの動作について

    同じページに2つのFormタグを設置したいと考えています。ページが長いため、上部と下部それぞれにFormタグを設置したいと考えています。 <form name="upForm" action="xxx.cgi" method="post"> <input type="text" name="name1"> <input type="submit" value="送信"> </form> --------------- 他の処理 --------------- --------------- 他の処理 --------------- --------------- 他の処理 --------------- <form name="downForm" action="xxx.cgi" method="post"> <input type="text" name="name1"> <input type="submit" value="送信"> </form> 下のFormの送信ボタンを押すと、上のFormが動作しているようで、下のFormの入力値が反映されません。それぞれのFormをそれぞれの送信ボタンで動作させる方法につきまして、ご存知の方がいましたらぜひ教えていただきたいと思います。 よろしくお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう