• ベストアンサー

1つのセレクトボックスで2つのNAMEとVALUEをCGIに渡したいのですが

Perlで作動するフリーウエアのCGIに、HTMLのフォームからデータを渡したいんですが、セレクトボックスで 3個セット 2000円 6個セット 5800円 9個セット 10500円 と選択肢を入れ、例えば<OPTION>の「6個セット 5800円」を選択して「カートへ」をクリックすると「NAME=shubetsu VALUE=6個セット」と「NAME=kakaku VALUE=5800」をいっぺんにCGIに送れるようにしたいのですが、方法はないでしょうか? 選択方法をセレクトボックスにせず例えば3つボタンを配置して、それぞれに「<a href="cart.cgi?kakaku=2000&shubetsu=3個セット>」「<a href="cart.cgi?kakaku=5800&shubetsu=6個セット>」とリンクを入れれば解決する問題ですが、ボタンを3つも配置する場所がないのと、ページ内でのバランスの関係でどうしてもセレクトボックスにしなければならない事情があるのです。

  • chack
  • お礼率100% (283/283)
  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.3

すみません。自分のウインドウを変える場合はこれでした window.location = "cart.cgi?kakaku="+ d[1].slice(0,-1) + "&shubetsu="+ d[0]; 別のフォームの内容を付ける場合は… + "&text=" + escape(document.F1.T1.value); などと後ろに付けていくか、 あるいは隠しフォームに値をコピーしてsubmitするとか <html><body> <script type="text/javascript"> <!-- function func() { var n = document.F1.S1.selectedIndex; var d = document.F1.S1.options[n].text.split(" "); document.H1.kakaku.value=d[1].slice(0,-1); document.H1.shubetsu.value=d[0]; document.H1.text.value=document.F1.T1.value; document.H1.submit(); } // --> </script> <form name="F1" action="#"> <select name="S1"> <option>3個セット 2000円 <option>6個セット 5800円 <option>9個セット 10500円 </select> <input type="button" value="カートへ" onclick="func()"> <textarea cols=30 rows=5 name="T1"></textarea> </form> <form name="H1" action="cart.cgi"> <input type="hidden" name="kakaku"> <input type="hidden" name="shubetsu"> <input type="hidden" name="text"> </form> </body></html>

chack
質問者

お礼

何度も申し訳ありませんでした。どうもありがとうございます! 変数の意味を理解するのに時間がかかってお礼が遅くなりましたが、おかげさまで扱い方がわかりました。 とても助かりました。 本当にありがとうございました!!

その他の回答 (2)

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

どうしても小細工したい場合はJavaScriptを使います こんな感じでしょうか。 <html><body> <script type="text/javascript"> <!-- function func() { var n = document.F1.S1.selectedIndex; var d = document.F1.S1.options[n].text.split(" "); window.open("cart.cgi?kakaku="+ d[1].slice(0,-1) + "&shubetsu="+ d[0], _self); } // --> </script> <form name="F1" action="#"> <select name="S1"> <option>3個セット 2000円 <option>6個セット 5800円 <option>9個セット 10500円 </select> <input type="button" value="カートへ" onclick="func()"> </form> </body></html>

chack
質問者

お礼

どうもありがとうございます! 私はCGIは殆どいじれないので、この形は非常にありがたいです!! なるほど、やっぱりHtmlだけでは無理なんですね。 早速あてはめてみたんですが、カートへボタンをクリックしてもCGIに行かずに元ページに戻る動作しかしてくれず、デバッグウインドウで「_selfは定義されていません」というメッセージがでていたので、「, _self」を外したところ、別ウインドウが開いてCGIに数値が渡されました。 私の浅い知識で考えても確かに「_self」がなければそうなるよなぁって思うんですが、なぜかこれがあると働かないんです。 それと、このフォームにノーマルなプルダウンを追加すると、そのデータってやっぱりCGIに渡されないんですよね。 「"cart.cgi?kakaku="+ d[1].slice(0,-1) + "&shubetsu="+ d[0]」でCGIに情報を渡しているということはそれは当然ということは理解できるのですが、そういったノーマルなセレクトボックスやテキストエリアを自由に追加することが出来る形って、やっぱり無理でしょうか? まさに希望に合いそうなご回答を頂いていながら注文が多くて申し訳ないです~!

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 あんまり小細工をせずに。例えば、name="shubetsu_and_kakaku" value="6個セット 5800"とかっていう風な感じではまずいでしょうか? valueを、例えばスペースあたりで区切って、プログラムで切り分けるとか。

chack
質問者

お礼

どうもありがとうございます。 私はCGIを殆どいじれませんし、このCGIには他のサイトからもアクセスがあるのでプログラム自体をいじるのは問題がありまして…。 せっかくご提案頂いたのに申し訳ありません。 これでもCGIの本を買って少しは勉強しているのですが。

関連するQ&A

  • 2つのセレクトボックスで選ばれた結果をショッピングカートに渡したい

    同一ページ内に次の様な2つのセレクトボックスが有ります。 それぞれ選択された内容を足してショッピングカートに送りたいのですがどうしたら良いのでしょうか? セレクトボックス1 <option value="aaa">aaa</option> <option value="bbb">bbb</option> <option value="ccc" selected="selected">ccc</option> セレクトボックス2 <option value="100">100</option> <option value="200">200</option> <option value="300" selected="selected">300</option> ●セレクトボックス1→aaaを選択  セレクトボックス2→100を選択  ショッピングカートには「aaa100」で渡す ●セレクトボックス1→cccを選択  セレクトボックス2→200を選択  ショッピングカートには「ccc200」で渡す 全くの初心者ですがよろしくお願いします。

  • セレクトボックスの操作

    <select name="example1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="1" value="追加"> 例えば、上記のセレクトボックスの3を選択して送信ボタンを押したら、3以外の4つの数字の値を持ったセレクトボックス(select name="example2)を出現させたいのです。(example1を残したまま) 選択した数字以外の値を持ったセレクトボックスを出現させたいです。 <select name="example2"> <option value="1">1</option> <option value="2">2</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit"name="2" value="追加"> 上記のようになります。example2の1を選択し送信したら <select name="example3"> <option value="2">2</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="3" value="追加"> 上記のようになります。 上記の手順でセレクトボックスが3つに増えた場合のソースは次のような感じに <select name="example1"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="1" value="取り消し"> <select name="example2"> <option value="1">1</option> <option value="2">2</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit"name="2" value="取り消し"> <select name="example3"> <option value="2">2</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="3" value="追加"> 取り消しを押した場合、そのセレクトボックスを削除し、一番新しいセレクトボックス(example3)に削除された値を追加したいです。 example2を取り消した場合、 <select name="example3"> <option value="1">1</option> <option value="2">2</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="3" value="追加"> 上記のようになります。 どのように記述すれば実現可能でしょうか? ご教示頂けますと幸いです。 宜しくお願いいたします。

  • 読み込む外部スクリプトをセレクトボックスを使って選べないでしょうか?

    お世話になります。 フォーム内に配置した、1から5までの数字を選べるセレクトボックスを使って、そのフォーム内に読み込む.jsファイルを選択することは出来ないでしょうか? 外部ファイルには、UsualSet.js、EmergencySet.js、PauseSet.jsなどがあって、そのスクリプトファイルの中身は document.write("<input name=\"youbi\" type=\"hidden\" value=\"土曜\"><input name=\"codenumber\" type=\"hidden\" value=\"732\"><input name=\"busho\" type=\"hidden\" value=\"経理\">"); とかいった感じになっています。 つまり、セレクトボックスで何番を選ぶかによって、CGIに渡す値を$youbiと$codenumberと$bushoとの3つ全ていっぺんに変更出来るようにしたい訳です。 しかし、そのセレクトボックスにどういう仕掛けをしたら良いかわからなくて困っています。 まさか、 <FORM ACTION="pro.cgi" METHOD="POST">  <select name="kazu">   <option value="<script language="javascript" src="UsualSet.js>" selected>1</option>   <option value="<script language="javascript" src="EmergencySet.js>" >2</option>   <option value="<script language="javascript" src="PauseSet.js>" >3</option>   <option value="<script language="javascript" src="MorningSet.js>" >4</option>   <option value="<script language="javascript" src="FulleSet.js>" >5</option>  </select>   <input type="hidden" name="kaijou" value="22890">  <input type="hidden" name="boxnumber" value="62">  <input type="submit" name="Submit" value="送信"> </FORM> なんてわけに行かないですもんね。 どうしたらいいかおわかりの方がいらっしゃいましたら、どうかよろしくお願い致します。

  • フォームよりCGIへ複数の値をPOSTしたい…。

    はじめまして。 現在、ショッピングカートのCGIを利用するためにHTMLを調整しています。 【単一商品の場合】 <FORM action="cgi-bin/cart/cart.cgi" method="POST"><INPUT type="hidden" name="shouhinnumber" value="0001"><INPUT type="hidden" name="shouhinmei" value="高級シャンプー"><INPUT type="hidden" name="kakaku" value="3000"> あとはセレクトフォームで数を選択して送信すれば正常に料金計算されるのですが、これが、内容量によって料金が異なる場合、どのようにHTMLを組めばよろしいのでしょうか。 ラジオボタンでそれぞれの行にINPUTを入れたが、先頭のINPUTしか認識せず、フォーム文を複数作るとマージンが空き、複数選択が可能になってしまう。 なお、CGIをいじるのは危険なので、HTML内でどうにかしたい・・・。 つまり・・・ 高級シャンプーの 260mlが1800円 500mlが3000円 というように単一商品名で代金が異なるものを1つのフォーム内でCGIへ送信できないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • select値をhiddenのvalueに渡したい

    selectで選択されたvalue値を下のhiddenのvalue値(id)に渡して、 hiddenのvalue値(id)がselectで選択されたvalue値になるような フォームを作りたいのですが、作り方をお教え頂ければ幸いです。 <form name="form" method="get" action="index.cgi"> <select name="mode"> <option value="100023">和書</option> <option value="100241">洋書</option> <option value="100524">エレクトロニクス</option> </select> <input type="hidden" name="serch_janru" value="id" /> <input type="text" name="keyword" value="keyword" /><input type="submit" name="submit" value="商品を検索" /> </form> ソース等、具体的にお教え頂けると助かります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • HTML
  • htmlで、cgiに渡す文字列を結合させたい

    基本的なところだとおもうのですが、教えてください。 現在: テキスト入力値 を 外部cgiに渡す ↓ やりたいこと: 2つ以上のセレクトボックス+テキストを空白で結合させ、それを、現在のテキスト入力値と同じように、外部cgiに渡したい。 現在、以下のようなhtmlになっています。 テキストを入力するのをやめて、2つ以上のセレクトボックスを配置し、そのセレクトボックスで選択されたものを、空白で結合させ、テキストボックスで入力されたものと同じように、cgiに渡したい。 現在のhtmlの一部 <form method="post" action="http://~/cgi-bin/foo.cgi"> <input name="word1" style=""> <input value="検索" type="submit"> を2つのセレクトボックスで、選択させた上で、テキストと結合する。 イメージ的には、 <select name="word3"><option value=" " selected="selected"> </option><option value="a">a </option><option value="b">b <select name="word4"><option value=" " selected="selected"> </option><option value="c">c </option><option value="d">d <input name="word2" style="" size=2> として、 word1 = word3 + " " + word4 + " " + word2 のように、文字列を結合させた形で、cgiに渡したいのです。 なにとぞよろしくお願いいたします。

  • リストボックスで選択し、CGIを走らせる

    リストボックスに  <form name='nav'> <select name='selector' size='1' > <option value='default'>---------- <option value='yamada-taro'>山田太郎 という風に、何人もの人名が入っています。 リストボックスの隣には「選択」ボタンがあります。 ボタンを押すと、個人情報の載ったXMLファイルが開く ようになっています。 現在、 <input type='button' value='選択'onclick='renewXML()'> という処理で、検索用関数に飛んでいますが、これを 「選択」ボタンが押されたときに、検索用CGIを走らせる ように変更したいのです。 actionタグを使えばいいのかな?と思っているのですが、 具体的な方法を教えていただきたいのです。 初心者なので質問内容に不備がありましたらお許しください。 なにとぞ、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • セレクトボックスで指定した任意のCGIにPOSTしたい

    フォームでリクエストを送信する際、セレクトボックスで指定した任意のCGIにPOSTしたいのです JavaScriptで実現したいのですが...教えてくださいm(__)m 下記はフォームの中身です。 <form action="" method="post"> <input type="text" name="key_word"> <select name="S1"> <option selected value="error">CATEGORY <option value="search_1.cgi">SELECT_1 <option value="search_2.cgi">SELECT_2</option> </select> <input type="hidden" value="kw_search" name="mode"> <input type="submit" value="検索"></td> </form>

  • セレクトボックスの値を増やしたい

    お世話になります。 セレクトボックスのOPTION値を増やしたいのですが、何か良い方法はないでしょうか。 実現したいことは、ボタンを押したときにテキストボックスの値をセレクトボックスの最下部に表示したいということです。 <INPUT TYPE="text" NAME="add_txt" VALUE=""> <SELECT NAME="lst"> <OPTION VALUE="aaa">aaa <OPTION VALUE="bbb">bbb <OPTION VALUE="ccc">ccc </SELECT> <INPUT TYPE="button" NAME="ent" VALUE="実行"> ------------------ この状態からtextに"ddd"という値を入れて実行ボタンを押した後、 <SELECT NAME="lst"> <OPTION VALUE="aaa">aaa <OPTION VALUE="bbb">bbb <OPTION VALUE="ccc">ccc <OPTION VALUE="ddd">ddd </SELECT> このような状態にしたいのですが、なにか方法はありますか。 ご存知の方いましたら、回答お待ちしています。

  • セレクトボックスの連動

    セレクトボックスAを切り替えると、他のセレクトボックスがAと同じになるようなものを作りたいのですが、うまくいきません。 ソースは以下の通りです。 function ChangeSelect() { var index = formA.selectA.selectedIndex; for (i=1,i<formB.selectCnt.value,i++) { if (i == index) { FormB.selectB1.options[index].value ); } } } <form name="formA"> <select name="selectA" onchange="javascript:ChangeSelect()"> <option value="りんご">りんご <option value="みかん">みかん <option value="いちご">いちご </select> </form> <form name="formB> <input type="hidden" name="selectCnt" value=***> <select name="selectB1"> <option value="りんご">りんご <option value="みかん">みかん <option value="いちご">いちご </select> </form> 存在するセレクトボックスは全て同じ値が入っています。 formAにはセレクトボックスは1つですが、formBにあるセレクトボックスは0~複数と場合によって異なります。 formBにあるセレクトボックスはselectB1、selectB2、selectB3という感じに最後の数字のみが異なるnameがつくようにしています。 <input type="hidden" name="selectCnt" value=***>のvalueには、ASPで数えたセレクトボックスの数を入れています(セレクトボックスが10個あれば10と入ります) 数が決まっていればFormB.selectB1.options[index].valueを数の分だけ増やせばいいのですが、0の時もあれば10の時もある、という場合にはどういう風に書けばいいのかわかりません。 どのように記述すれば良いのでしょうか。アドバイスお願いします><