• 締切済み

チェックボックスのCGI渡しの質問

<INPUT type="checkbox" name="key7" value="1">1 <INPUT type="checkbox" name="key7" value="2">2 <INPUT type="checkbox" name="key7" value="3">3 すべてチェック入れて送信した際に xxx.cgi?key7=123ではなくxxx.cgi?key7=1 2 3(xxx.cgi?key7=1%202%203) みたいに半角スペースが間に入った状態で送る方法などあるのでしょうか?かなり初心者なのでわかりづらいと思いますが、知恵を貸してください。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

>checkboxとtextとリストボックスの併用も可能 可能です。 しかし単純に1とか2とか、abcレベルの英数字なら問題 ないですがサーバーにデータを送る際に英数字以外の 文字たとえば日本語や記号はエスケープ(変換)する 必要があります。 あまりよくばりすぎるといっぱいいっぱいになりますが どうしてもというのであれば、具体的にどういうように したいか書いてみてもらえれば回答できるかもしれません。

yuuyuu-k
質問者

お礼

そうですね。 うまく説明できませんかもしれませんが <INPUT type="checkbox" name="key" value="1">1 <INPUT type="checkbox" name="key" value="2">2 <INPUT type="checkbox" name="key" value="3">3 の部分を <input type="text" name="key" size="20"> に変えたり <INPUT name="many2" type="text" size="13"> <SELECT name="type2"> <option value="1" selected>以上 <option value="2">以下 などを使ったりです。 CGI自体がkey・many2の項目をこれで受けるとデーターを出してくれるようですので すいません。ここの部部が解決するととても使いやすくなるもので CGIとjavascriptが作れればこんなに困らないんですが そこの部分がまったくできない状態ですので・・

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

CGIでデータを受け取るのに「?」ではなく、いきなり 「&」をもってくることはあまりないと思いますが・・・ どうしてもというのなら url+=(valall=="")?"":"?"+valall; の行を url+=(valall=="")?"":"&"+valall; に変えてみてください。

yuuyuu-k
質問者

お礼

ありがとうございました。 CGIも問題なく動いてやっと先に進めそうです。 javascriptを覚えればこういうこともできるのですね。 質問攻めで申し訳ありませんが、checkboxとtextとリストボックスの併用も可能なのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

こんな感じですか? <script language=javascript> function submitFunc(f){ var url=f.action; var val=new Object(); var valall=""; for (var i=0;i<f.length;i++){ var n=f[i].name; if(f[i].type=="checkbox" && f[i].checked==true){ if(typeof val[n] == "undefined") val[n]=""; val[n]+=((val[n]=="")?"":"%20")+f[i].value; } } for (var j in val){ valall+=(valall==""?"":"&")+j+"="+val[j]; } url+=(valall=="")?"":"?"+valall; //alert(url); location.href=url; } </script> <form action="xxx.cgi" method="get" onSubmit="return false;"> KEY1: <INPUT type="checkbox" name="key" value="1">1 <INPUT type="checkbox" name="key" value="2">2 <INPUT type="checkbox" name="key" value="3">3 <hr> KEY2: <INPUT type="checkbox" name="key2" value="1">1 <INPUT type="checkbox" name="key2" value="2">2 <INPUT type="checkbox" name="key2" value="3">3 <hr> KEY3: <INPUT type="checkbox" name="key3" value="1">1 <INPUT type="checkbox" name="key3" value="2">2 <INPUT type="checkbox" name="key3" value="3">3 <hr> KEY4: <INPUT type="checkbox" name="key4" value="1">1 <INPUT type="checkbox" name="key4" value="2">2 <INPUT type="checkbox" name="key4" value="3">3 <hr> ・・・・ <hr> KEY13: <INPUT type="checkbox" name="key13" value="1">1 <INPUT type="checkbox" name="key13" value="2">2 <INPUT type="checkbox" name="key13" value="3">3 <hr> <input type="button" value="実行" onClick="submitFunc(this.form)"> </form>

yuuyuu-k
質問者

お礼

すばやい回答ありがとうございます。 早速利用させていただきましたが 先頭の部分が?で出力してるようです。 できれば&で先頭部分をだしたいのですが・・ javascriptでできるのならぜひ覚えたいのですが なにから学んでいいのか・・ ものすごくyambejp様には感謝しております。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

javascriptであればこんな感じがよいでしょう またどうしてもsubmitでやりたいという場合は 複雑ですが、不可能ではないと思います <script language=javascript> function submitFunc(f){ var v=""; var url=f.action; for (var i=0;i<f.length;i++){ if(f[i].name=="key7" && f[i].checked==true) v+=((v=="")?"":"%20")+f[i].value; } url+=(v=="")?"":"?key7="+v; location.href=url; return false; } </script> <form action="xxx.cgi" method="get" onSubmit="return false;"> <INPUT type="checkbox" name="key7" value="1">1 <INPUT type="checkbox" name="key7" value="2">2 <INPUT type="checkbox" name="key7" value="3">3 <input type="button" value="実行" onClick="submitFunc(this.form)"> </form>

yuuyuu-k
質問者

お礼

回答ありがとうございます。 早速利用させていただきました。 javascriptってこういうこともできるんですね。 初心者ですので思いもつきませんでした。 とてもあつかましいようですが、 同じようなname部分が(key)の部分が13個あり(key,key2,key3・・・15keyまで)あるのですが、javascriptで出すことも可能でしょうか? それと一番頭の部分、xxx.cgi?key7=1 2 3だと?の部分を&に変えることもできますでしょうか? ものすごく面倒なご質問ですがお願いいたします。 javascriptの部分扱ってみたのですが、自分ではかなり無理そうなので よろしくお願いいたします。

回答No.2

xxx.cgiで受け取ったkey7の値に半角スペースを入れてあげれば解決しそうですが・・・。 もしくは ・value値に半角スペースを入れる。ではダメ? <INPUT type="checkbox" name="key7" value=" 1">1 <INPUT type="checkbox" name="key7" value=" 2">2 <INPUT type="checkbox" name="key7" value=" 3">3                        ↑nameは違うnameにした方がよいのでは!?

yuuyuu-k
質問者

お礼

ご回答ありがとうございます。 私も最初はそれでできると思っていたのですが xxx.cgi?key7= 1 2 3になりCGIがうまく稼動してくれません。

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

どうして半角スペースを間に入れた状態で送りたいのか解らないのですが… nameの所を別々の名前にするとかではダメなのでしょうか?

yuuyuu-k
質問者

お礼

ご回答ありがとうございます。 初心者なので、CGIを組み替えられず どうしてもスペースを入れないといけないみたいです。

関連するQ&A

  • CGIでチェックボックスを使う方法

    チェックボックスをCGI(C言語)で使用する方法を教えて下さい。 例えば、HTMLで <input type="checkbox" name="Check1" value="Sel11" /> チェック1 選択1<br /> <input type="checkbox" name="Check1" value="Sel12" /> チェック1 選択2<br /> <input type="checkbox" name="Check1" value="Sel13" /> チェック1 選択3 <hr /> <input type="checkbox" name="Check2" value="Sel21" checked /> チェック2 選択1<br /> <input type="checkbox" name="Check2" value="Sel22" /> チェック2 選択2<br /> <input type="checkbox" name="Check2" value="Sel23" checked /> チェック2 選択3 というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?

    • ベストアンサー
    • CGI
  • チェックボックスでのvalue値のスペースについて

    HTMLのformからチェックボックスで選択された値をCGIに飛ばしデータファイル(cgiファイル)に保存したいのですが、 チェックボックスのvalueを複数選択するとvalue値の間にスペースが入ってしまいます。 正確にはデータファイルをterapadで開こうとすると、 「NULL文字を含むファイルです。NULL文字は半角スペースへ変換しました。」というアラートがでてvalue値の間に半角スペースが入ってしまいます。 <チェックボックスのHTML> <input type="checkbox" name="■" value="jpn" />日本 <input type="checkbox" name="■" value="usa" />米国 ■にはデータを保存する項目の番号が入っており、一つのチェックボックスでは同じ番号が入ります。 例えば■が1なら1番に保存されます。 日本と米国を選択し送信するとデータファイル上では「jpn usa」となってしまいます。 NULL文字とはデータの値がない場合に返される値だという認識なのですが、全てのチェックボックスを選択していれば、 「jpnusa」という形で送信されるものではないのでしょうか? データを送信する際、このNULL文字による半角スペースをなくしたいのですが、何か方法はありますでしょうか? やはりCGIファイルを編集しなければ不可能なのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • CGI
  • チェックボックスで得た複数回答をCGIモジュールを用いて簡潔に取り出すには

     <input type="checkbox" name="id" value="0">  <input type="checkbox" name="id" value="1">  <input type="checkbox" name="id" value="2">  <input type="checkbox" name="id" value="3"> のようなフォームのキーと値を、CGIの方では%inで受け取ります。 まずCGIモジュールを用いてキーと値を$keyと$valに格納したのち、idというキーは4つの値を受け取るので、  foreach my $key ($q->param()) {   my $val=$q->param($val);   if(defined($in{$key)) {    $in{$key}.="\0";   }   $in{$key}.=$val;  } 私のイメージでは、この処理で  $in{'id'}="0\01\02\03"; が得られるつもりでした。 ところが実際には$q->param('id')で取り出せるのは最初の"0"のみで、したがって得られる結果は  $in{'id'}="0"; となります。 CGIモジュールを使わなければ、  my $buf;  if(ENV{'REQUEST_METHOD'} eq "POST") {   read(STDIN,$buf,$ENV{'CONTENT-LENGTH'});  }  else {   $buf=$ENV{'QUERY_STRING'};  }    foreach(split(/&/,$buf)) {   my ($key,$val)=split(/=/);      if(defined($in{$key)) {    $in{$key}.="\0";   }   $in{$key}.=$val;  } のようにして、イメージ通り  $in{'id'}="0\01\02\03"; を得られますが、CGIモジュールは他でも使うので、どうせならCGIモジュールを使った簡便なコーディングが出来ないものかと思案する次第です。 しかしながら私に思いつく方法は  <input type="checkbox" name="id0" value="0">  <input type="checkbox" name="id1" value="1">  <input type="checkbox" name="id2" value="2">  <input type="checkbox" name="id3" value="3"> として、まずCGIモジュールを用いた上記の方法で$in{'id0'}~$in{'id3'}までを生成し、次に  if(/(\w+)\d/) {   if(defined($in{$1})) {    $in{$1}.="\0";   }   $in{$1}.=$val;  } とやる方法しか思いつきません。 チェックボックスを用いて複数回答を得るというのはよくある話なので、CGIモジュールにもっと良いコーディングの仕方がありそうな・・・と思ってしまうのですが、これが最善の方法なのでしょうか?

    • ベストアンサー
    • Perl
  • チェックボックス連結

    MySQLで、perlを使ってチェックボックスでデータを送信するのですが、 カラムを分けずに、チェックボックスで複数選択されたデータを、;などの仕切りで同一フィールドへ記録したいのですが、やり方がわかりません。 <input type = checkbox name = col1 value="1"> <input type = checkbox name = col1 value="2"> <input type = checkbox name = col1 value="3"> <input type = checkbox name = col1 value="4"> 結果 col1 |col2 | +-------------- 1;2;3;4| | のような感じです。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか

  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

    • ベストアンサー
    • PHP
  • チェックボックス 連結

    恐れ入ります。 <input type=checkbox name=col1 value="1"> <input type=checkbox name=col1 value="2"> <input type=checkbox name=col1 value="3"> <input type=checkbox name=col1 value="4"> <input type=checkbox name=col1 value="5"> を、 1;2;3;4;5 と連結して同一フィールドへ送信し、 読み込み時に 分割して読み込みたいのですが、どのようにしたら良いでしょうか。 よろしくお願いします。

  • チェックボックスのCGIへの値の受け渡し方

    チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。 別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。 【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。) <INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br> <INPUT type="checkbox" name="q1" value="黄" onclick="return limitation(this,2)">黄<br> <INPUT type="checkbox" name="q1" value="青" onclick="return limitation(this,2)">青<br> 【CGI】 use CGI qw(:standard); @check1=param("q1"); $result1=join(',',@check1); print "<td width=300><font size=2>$result1</font>&nbsp;</td>\n"; このPerlは@check1にq1のチェックが付いたものが格納されていると認識しています。では、どうしたらそれをとりだせるのでしょうか?初心者で申し訳ありません。やり方にこだわらず、今回の目標は (1)チェックボックスに規定(2つ)以上のチェックが入るとアラートでチェックしすぎた瞬間に知らせてくれる (2)2つチェックされた場合の値の取出しを可能にする。

    • ベストアンサー
    • Perl
  • チェックボックスのデータの受け取り方について

    以下のようなチェックボックスを作ったとき、 test.phpではどうやって受け取ればよいのでしょうか? nameがそれぞれ違う場合は分かるのですが... 教えてください。 <form method="POST" action="test.php"> <input type="checkbox" name="color" value="red">赤</input> <input type="checkbox" name="color" value="blue">青</input> <input type="checkbox" name="color" value="white">白</input> <input type="checkbox" name="color" value="black">黒</input> <input type="submit" value="送信" > </form>

    • ベストアンサー
    • PHP
  • チェックに応じて違うチェックボックスをアクティブにしたい

    次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

専門家に質問してみよう