onclickで複数のボタンで対応したCGIにデータを送りたい

このQ&Aのポイント
  • onclickで複数のボタンで対応したCGIにデータを送りたいと思っていますが、どのように実装すれば良いかわかりません。
  • 画像追加ボタンを押すと別ページに飛んで登録が終わったら元のページに戻ってきて、登録ボタンを押すと登録処理を実行したいです。
  • form内の情報はhiddenで送信し、登録処理をすることも可能ですが、具体的な実装方法がわかりません。
回答を見る
  • ベストアンサー

onclickで複数のボタンで対応したCGIにデータを送りたいのですが。

下記のような感じで、 1.画像追加ボタンを押すと別ページ(b.cgi)に飛んで登録が終わったらまたこちらに戻ってきて、登録が押されるとそのまま登録処理(a.cgi)になる。 2.画像追加がされていなくても登録が押されるとそのまま登録処理をする。 (1.2.ともform内の情報はhiddenですべて送ります。) こんな動きをさせたいのですが、参考サイトなどをみてもこういう動作をしているところがなくて丸3日悩んでいます。 onclick=submit の記述とJavascriptの書き方が問題だとは思うのですが煮詰まってしまいました。 皆様には初歩的な質問かもしれませんがどうぞよろしくお願いします。 <form method="post" enctype="multipart/form-data"> <input type="text" name="Title" value="" size="140"> <input type="text" name="Body1" value="" size="140" style="ime-mode: active;"> <input type="button" value="画像追加" onclick="submit(document.gazouform)"> <input type="button" value="登録" onclick="submit(document.tourokuform)"> <form action="a.cgi" method="post" enctype="multipart/form-data" id="tourokuform"> </form> <form action="b.cgi" method="post" enctype="multipart/form-data" id="gazouform"> </form>

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

ANo1です。 submit(document.gazouform)でid="gazouform"のformをsubmitしようとしているのであれば、  onclick="document.forms['gazouform'].submit()" などとしてあげればよろしいかと… でもそれだけだと、データがセットされていないので、目論んでおられるようにはならないでしょう。そのフォーム内のhiddenタグに値をセットしてあげる必要があります。 なお、送る内容が同じTitleとBody1であるのなら、No.1でも書きましたが、action先を指定してsubmitするようにすれば、formは1つだけですみます。 ボタンのイベントで onclick="hoge(1)" などとしておいて、 function hoge(a){ var act=(a==1)?'a.cgi':'b.cgi'; var frm=document.getElementById('f1'); frm.action=act; frm.submit(); } さらには、同じ内容を扱うので、a.cgiとb.cgiに共通する部分が多そうなので、処理aと処理bをこなせるようにまとめておく案もありそう。 フォームにはhiddenの項目を追加しておいて、その値で処理の種類を制御してあげればよろしいかと。 <input type="hidden" name="syori" id="syori" value=""> に対して、 onClick="document.getElementById('syori').value='a';submit()" みたいな感じ。

k2-moon
質問者

補足

ありがとうございました! 画像追加の方は思惑通りに動作してくれました! また少し自分の説明不足というかすっかり忘れていたものがあるのですが a.cgiのサブルーチンへhiddenでmodeとactionを渡すのを忘れておりました。 上記の自分の説明だとfujillin様の記述通りなのですが、act=(a==1)のときに一緒にhiddenを渡す方法はないでしょうか? if(act==1){dcument.write("<input type='hidden' name='mode' value='touroku'>"+("<input type='hidden' name='action' value='tuika'>";) と入れてみましたが駄目でした。 重ね重ね申し訳ありませんがここだけ教えてもらえませんでしょうか。

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

ANo1です。 No2への補足質問の意味がよくわからないのですが、・・・ ANo1の最初の方法で行っているのなら、tourokuform、gazouformのformにあらかじめhiddenのinputタグを設定しておいて、DOMで入力用のformの入力値をコピーしてあげればよいでしょう。 その後で、そのformをsubmitすればよいかと。 もし、ANo2の2番目の方法をご利用ならば、入力用のformのidをf1(例示のコードの場合)としておけば、submitするだけでデータが送られるはずです。 (何度も繰り返しになりますが、この場合は、tourokuform、gazouform  のformは不要になります。)

k2-moon
質問者

お礼

何度もありがとうございます! No1の方法で目論見どおりの動作をさせることができました。 親切な解説など凄く助かりました。 本当にありがとうございました!

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

よくわかんないけど… 最初のformタグの閉じタグがないので、正しく認識されない可能性があります。 2番目、3番目のformは何の目的であるのか不明。 actionがa.cgi、b.cgiとなっているところを見ると、こちらのformをsubmitしたいのかも知れませんが、送信する内容(input等)がないので、スクリプトでこちらにhiddenの項目を作成してsubmitしたいという質問なのでしょうか? 送信内容がどれなのか不明ですが、Title、Body1の内容を送りたいのなら、スクリプトでactionの先を書き換えてsubmitすればいいのでは? >1.2.ともform内の情報はhiddenですべて送ります hiddenになっているものがありませんが、どれを指しているのでしょうか? >画像追加ボタンを押すと別ページ(b.cgi)に飛んで登録が終わったら >またこちらに戻ってきて、~ 普通にsubmitすると、cgiからの出力の応答待ちになるけれど、そのcgiからのhtml出力はあるのでしょうか? もしも送信するだけなら、Ajaxということになるのかな?(その辺の処理もないみたいだけど…)

k2-moon
質問者

補足

説明不足な質問で申し訳ありませんでした。 ・こちらに記入するときに</form>を間違えて消していました。 ・hiddenの記入がないと分かりませんね。失礼しました。 a.cgi,b.cgiともにHTMLの出力があって b.cgiは画像を登録し終わったらこちらのフォームに飛ぶように作ってあります。 a.cgiは入力された情報を登録させるプログラムです。 b.cgiは画像一覧から画像を選んで添付させるというプログラムです。 ご指摘ありがとうございます。 訂正 <form method="post" enctype="multipart/form-data"> <input type="text" name="Title" value="" size="140"> <input type="text" name="Body1" value="" size="140" style="ime-mode: active;"> <input type="button" value="画像追加" onclick="submit(document.gazouform)"> <input type="button" value="登録" onclick="submit(document.tourokuform)"> </form> <form action="a.cgi" method="post" enctype="multipart/form-data" id="tourokuform"> hiddenでフォームのTitleとBody1を送信 </form> <form action="b.cgi" method="post" enctype="multipart/form-data" id="gazouform"> hiddenでフォームのTitleとBody1と追加された画像パスを送信 </form>

関連するQ&A

  • 複数ボタンのvalueを送れない

    ひとつのフォームで複数のボタンを使う方法を探していたら 次のような方法があるとのことでした。 <form method="post" name="MyForm"> <INPUT TYPE="BUTTON" VALUE="aaa" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> <INPUT TYPE="BUTTON" VALUE="bbb" onClick="MyForm.action='hoge.cgi';MyForm.submit();"> </form> これで、ボタンによってVALUEを渡せるのかと思いきや、 飛んでいきませんでした・・・ 複数ボタンを用意して、ボタンによってその VALUE値を渡す方法がありませんでしょうか?

    • ベストアンサー
    • CGI
  • 複数ボタンを制御出来る2度押し防止ボタン

    HTML5+CSS3でゲームを作っています。 フォームがあり、ボタンが複数並んでいます。 <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" name="d4_buy" value="300 onclick="sendform()">300購入</button> <button class="button8" type="submit" name="d4_buy" value="400" onClick="sendform()">400購入</button> </FORM> 上記で正常に作動しますが、3G環境など通信状態の悪い時に、「300購入ボタンを押した直後に400購入ボタンを押す」と700購入が出来てしまいます。 【希望事項】 2つのボタンを連続して押しても2つ目が無効になるようにしたいというのが希望です。 ネットで調べたところ ****************************************** http://okwave.jp/qa/q627484.html ****************************************** <HTML><BODY> <FORM method="get" action="http://www.google.com/search"> <INPUT type="submit" value="submit1" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="submit" value="submit2" onclick="this.form.q.value=this.value;this.disabled=true;this.form.submit()"> <INPUT type="hidden" name="q" value="" > </FORM></BODY></HTML> ****************************************** という例があったため、この例に従って <SCRIPT TYPE="text/javascript"> <!-- function sendform(){ submitForm(); } function submitForm(){ document.form1.submit(); } // --> </SCRIPT> <FORM action="buy.cgi" method="post" name="form1" id="form1"> <button class="button8" type="submit" value="300 onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">300購入</button> <button class="button8" type="submit" value="400" onclick="this.form.q.value=this.value;this.disabled=true;this.form.sendform()">400購入</button> <INPUT type="hidden" name="d4_buy" value="" > </FORM> としてみたのですが、うまく数値の引き渡しが出来ません。(NULL となります) どのように改造すればいいか教えてください。 よろしくお願いいたします。

  • 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も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • onClickイベントの記述方法

    こんばんは、皆さん。 JavaScriptのonClickイベントで、うまく動きません。 以下のようにしました。一部関連する箇所の抜粋です。 どこがおかしいかご指摘ください。 <SCRIPT TYPE="text/javascript"> <!-- function ActionChange(CGI){ document.form.action='http://x.x.x.x/cgi-bin/b.cgi'; document.form.submit(); } //--> </SCRIPT> <FORM METHOD="POST" NAME="FORM" ACTION="http://x.x.x.x/cgi-bin/a.cgi"> <INPUT TYPE="submit" VALUE="aaa"> <INPUT TYPE="button" VALUE="bbb" onclick="ActionChange('b.cgi)"> よろしくおねがいします。

  • onclickイベントで、PHPの関数をコール

    下記のようなPHPスクリプトで、ボタンが押された時の、onclickイベントで<?php upload_file() ?>として PHPのupload_file() 関数をコールしてるのですが、画像ファイルがアップできません。 どこが間違いなのか、教えていただけますか。 --------------------------------------------------------------------------------- <form name="form2" method="POST" enctype="multipart/form-data" action="bbs.php"> <!-- ファイル参照フォームを表示する --> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> <input type="file" name="upfile" tabindex="6"> <input type="button" value="画像を送信" tabindex="7" onclick="<?php upload_file() ?>"> </form>

    • 締切済み
    • PHP
  • javascriptのフォームデータをCGIで複数行取得

    javascript内の変数を複数行のフォームでCGIに渡したいのです。 その際のコードが document.write("<form name='form1' action='xxx.cgi' method='post' enctype='text/plain'>"+           "<input type='hidden' name='state' value=''>"+           "<input type='hidden' name='state2' value=''>"+           "</form>"+           "<input type='button value='送信' onClick='tocgi(a,b)'>");       tocgi(n1,n2){       document.form1.state.value=n1;       document.form1.state2.value=n2;       document.form1.submit();        } なのですが、a、bの値がそれぞれ10、20だった時、一行目のフォームデータは出力されるのですが、2行目が出力されないのです。実行結果でいうとstate=10ですね。引数を一つにしても同じでした。何がいけないのか、全然わかりません…。それとも、CGIのコードの書き方に問題があるのでしょうか。でも、CGIの方は変えずに単純にHTMLで記述すると上手くいくみたいなんですよね。どなたかわかる方がいたら助けて下さい!

    • 締切済み
    • CGI
  • フォームの「キャンセル」ボタンを押すと登録されてしまう…

    以下のようなフォームをつくっているのですが、どうもキャンセルを押すと登録されてしまいます。ごうしたらよいでしょうか? <form id='next' name='next' method='post' action='XXX.php'> <INPUT name='next' type='submit' id='next' value='登録する'> <INPUT type='button' value=' 戻る ' onClick='history.back()'> <INPUT name='cancel' type='submit' value='キャンセル' onClick='index.html'>

    • ベストアンサー
    • HTML
  • 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
  • onClick="this.form.submit

    ・下記のようなformがあるのですが、 onClick="this.form.submit();" disabledの意味を教えてください ・クリックしたら、このフォーム内容を送信? ・アクション先も指定していないのに、処理はどこへいくのでしょうか? ・また、disabledは? ずっと押せない? <form name="hoge" method="POST"> <input name="hoge" type="button" class="button" value="piyo" onClick="this.form.submit();" disabled> </form>

  • Netscape で submit() を複数起動できない

    以前に教わった方法で、submit() を使って別ウィンドウに結果を表示させる Javascript を書きました。 IE では、できたのですが、NN(Netscape Communicator 4.7) では以下の Javascript が起動しません。 というか、最後の form3.submit() のみ起動します。submit() の間に alert(); を入れておくと 3 つのウィンドウが開くので、動くことは 動いているようなのですが...。なぜでしょう? --------ここから(ソースの一部) ---------- <SCRIPT LANGUAGE="JavaScript"> <!-- function OpenWin(){ document.form1.submit(); document.form2.submit(); document.form3.submit(); } // --> </SCRIPT> <form name="PapyrusForm" method="POST" action=""> <input type="text" name="searchword" size="60" maxlength="256"><BR> <input type="button" name="Search" value=" 検索 " onClick="OpenWin()"> </FORM> <!-- =========================================== --> <FORM ACTION="/cgi-bin/searchlist1.pl" target="window1" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" NAME="form1"> </FORM> <FORM ACTION="/cgi-bin/searchlist2.pl" target="window2" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" NAME="form2"> </FORM> <FORM ACTION="/cgi-bin/searchlist3.pl" target="window3" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded" NAME="form3"> </FORM>

専門家に質問してみよう