• ベストアンサー

[]を付けずにcheckboxの値を複数受信

カテゴリをPHPとするか迷いましたが、 こちらに質問させていただきます。 <input type="checkbox" name="hiragana[]" value="a">あ <input type="checkbox" name="hiragana[]" value="i">い <input type="checkbox" name="hiragana[]" value="u">う とした場合、 $checked=$_POST['hiragana']; print_r($checked); などとして使えることはわかるのですが、 角括弧をつけず、 <input type="checkbox" name="hiragana" value="a">あ <input type="checkbox" name="hiragana" value="i">い <input type="checkbox" name="hiragana" value="u">う としたときに、同様に配列として取得する(すべてのチェックされた項目を取得する) 方法はあるのでしょうか? このようにした場合、 $checked=$_POST['hiragana']; print_r($checked); や print_r($_POST); すると、最後にチェックされた値しか入っていないようです。 (上書きされているようですが...) HTTPヘッダを見ると、 hiragana=a&hiragana=i&hiragana=u のように、すべて送信はされているのは確認できるのですが... 後者のような角括弧をつけていないタイプのcheckboxを使って ちゃんとチェックされた値をすべて受信して動作していると 思われるサイトを目にするので どうすればできるのかと思い質問させて頂きました。 よろしくお願いいたします。

  • altrn
  • お礼率77% (28/36)
  • HTML
  • 回答数2
  • ありがとう数2

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

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

>何かもっと標準的な方法 標準的な・・・という意味では、質問の内容は、データの競合です。 競合した場合は後方優先というのがhttpデータの受け渡しでは 標準的なやり方になるでしょう。 つまり、「競合するけどどうにかしたい」というのは姑息な手段なので 「競合しないようにする」のが賢明なやり方です。 []をつけるのは競合をなんとかさけるための苦肉の手段といえます また標準ではEGPCSルールがあり、GETよりPOSTが優先され同名で 値が渡った場合は$_REQUEST値にはPOSTの最後の値がはいります。 <form method="post" action="?hiragana=x&hiragana=y"> <input type="checkbox" name="hiragana" value="a">あ <input type="checkbox" name="hiragana" value="i">い <input type="checkbox" name="hiragana" value="u">う <input type="submit"> </form> <? if(!empty($_REQUEST["hiragana"])) print "hiragana=".$_REQUEST["hiragana"]; ?>

altrn
質問者

お礼

ありがとうございます。 丁寧な回答を頂き申し訳ないのですが、 解決致しました。 このお礼を書きながら もう一度検索しなおしてみたところ、 PHP以外の言語を使った場合、 []を必要としないですむ場合もあるようでした。 Javaや、 http://code.nanigac.com/source/view/211 Python http://humming.via-kitchen.com/2007/06/27/comparison-between-django-and-php-of-request-post/ などでは、[]がなくても配列で受信できるようでした。 質問文にPHPといってしまい、決めてかかったのが いけなかったのだと思います。 しかし、おかげさまでPHPでは[]なしでは不可能らしい(GETの場合は先の正規表現等も可能ではあると思いますが...)ことがわかりました、ありがとうございます。

その他の回答 (1)

  • koke29
  • ベストアンサー率58% (114/196)
回答No.1

こんにちはー 私もどうしたら出来るのかなーと思って試してみました 1.GETで送信したデータを $_SERVER["QUERY_STRING"] で取る 2.データにsubmitも含まれていたのでstr_replace で抜く 3.&もstr_replaceで抜く 4.チェックボックスのnameが含まれていたら、"name="でexplodeする これで一応、同じ名前で[]つけなくてもデータの配列作れました 絶対もっと効率いい方法あるんでしょうねー 私にはこれが限界でした あと、javascriptで送信前にチェックされたデータを配列にしてから 送信しちゃうとかも出来そうな気がしますよね 私はjavascriptよくわからないのでPHPだけで処理してみました やれば出来るもんですねぇ

altrn
質問者

お礼

回答ありがとうございます。 確かに正規表現等つかえばできそうだとは思うのですが、 何かもっと標準的な方法があるのではないかと思っております。

関連するQ&A

  • 大量のcheckboxにcheckedを入れる

    チェックボックスが50個あります。 送信ボタンを押して元のページを再度開きます。 そのときにチェックしたボックスにチェックを入れた状態にしたいです。 inputタグの中に<?php if(isset($checkbox2) && in_array('b2',$checkbox2)){echo ' checked';} ?>を入れていますが単調になってしまいます。 単調にならずにする方法はありますか? <input type="checkbox" name="chk1[]" value="a1" />の場合はインデックスが固定でないのでできませんでした。 その他いけない箇所があれば教えて下さい。 お願いします。 <?php if(isset($_GET["chk1"])){ $checkbox1 = $_GET["chk1"]; for($i=0; $i<sizeof($checkbox1); $i++){ print $checkbox1[$i]."<br />"; } } if(isset($_GET["chk2"])){ $checkbox2 = $_GET["chk2"]; foreach($checkbox2 as $key => $val){ print $val."<br />"; } } ?> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form method="get" action="checkbox.php"> <input type="checkbox" name="chk1[]" value="a1" /> <input type="checkbox" name="chk1[]" value="a2" /> <input type="checkbox" name="chk1[]" value="a3" /> <input type="checkbox" name="chk1[]" value="a4" /> <input type="checkbox" name="chk1[]" value="a5" /> <input type="checkbox" name="chk1[]" value="a6" /> <input type="checkbox" name="chk1[]" value="a7" /> <input type="checkbox" name="chk1[]" value="a8" /> <input type="checkbox" name="chk1[]" value="a9" /> <input type="checkbox" name="chk1[]" value="a10" /> <br /> <input type="checkbox" name="chk2['b1']" value="b1" <?php if(isset($checkbox2) && in_array('b1',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b2']" value="b2" <?php if(isset($checkbox2) && in_array('b2',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b3']" value="b3" <?php if(isset($checkbox2) && in_array('b3',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b4']" value="b4" <?php if(isset($checkbox2) && in_array('b4',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b5']" value="b5" <?php if(isset($checkbox2) && in_array('b5',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b6']" value="b6" <?php if(isset($checkbox2) && in_array('b6',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b7']" value="b7" <?php if(isset($checkbox2) && in_array('b7',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b8']" value="b8" <?php if(isset($checkbox2) && in_array('b8',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b9']" value="b9" <?php if(isset($checkbox2) && in_array('b9',$checkbox2)){echo ' checked';} ?>/> <input type="checkbox" name="chk2['b10']" value="b10" <?php if(isset($checkbox2) && in_array('b10',$checkbox2)){echo ' checked';} ?>/> <br /> <input type="submit" value="送信" /> </form> </body> </html>

    • 締切済み
    • PHP
  • jquery複数のcheckboxの値について

    どうも、はじめまして、jqueryに興味をもった初心者です。 jqueryを利用で、phpファイルにcheckboxの値を渡し、loadでphpファイルを読み込みたいのですが、うまくいきません。。ご存知の方いましたら、 お手数ですが、教えてください。。 環境、php5.1,jquery1.4, ソース <!--html側--> <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="chk.js"></script> <title></title></head> <body> <input type="checkbox" name="test[]" id="test" value="1">test1 <input type="checkbox" name="test[]" id="test" value="2">test2 <input type="checkbox" name="test[]" id="test" value="3">test3 <input type="checkbox" name="test[]" id="test" value="4">test4 <input type="submit" value="sub" id="sub"> <div id="hbox">ここにロードしたい</div> </body> </html> //chk.js --------------------------- $(function(){ $("#sub").click(function () { var chk = $(".@test:checkbo[name^='test[]']:checked") .val(); $("#hbox").load("form.php",{test:chk}); }); }); //form.php ---------------------------- <?php echo htmlentities( print_r($_GET, true) ); ?> 以上がソースです。。。このソースだと、 checkを入れた値1つしか、phpに渡すことができません。。 checkを入れた値をすべて、phpに渡し、loadしたいのですが、 方法が分からず困ってます。 ご存知の方いましたら、お手数ですが、 分かりやすく、教えていただけませんでしょうか お願いいたします。

  • formから送信する値について

    nameを同じくする複数のチェックボックスのチェック項目について valueを「+」や「,」でつなげて送信したいです 例えば <input type="checkbox" name="color" value="red" checked > <input type="checkbox" name="color" value="blue" checked> <input type="checkbox" name="color" value="green" checked > <input type="checkbox" name="option" value="A" checked > <input type="checkbox" name="option" value="B" checked > <input type="checkbox" name="option" value="C" checked > ならば、submitされるURL変数は ?color=red,blue,green&option=A+B+C になるようにしたいのです よろしくお願いします

    • ベストアンサー
    • HTML
  • checkbox 特定項目だけを、チェックするには

    こんにちは。いつもお世話になります。 checkbox内で、同じnameの中から特定のものだけ チェックさせるにはどうしたら良いでしょうか。 条件として、name='or52'の部分は変更出来ません。 <input type='button' value='A,B,Cだけを同時にチェック' onclick='checkAll();'> <form action='xxx.cgi' method='post' name='f1'> <input name='or5' type='checkbox' value='A'><br> <input name='or5' type='checkbox' value='B'><br> <input name='or5' type='checkbox' value='C'><br> <input name='or5' type='checkbox' value='D'><br> <input name='or5' type='checkbox' value='E'><br> <input name='or5' type='checkbox' value='F'><br> ......... </form> それで、こんなのをウェブから探してきました。 function checkAll() { for (i=0; i<7; i++) document.f1.elements["or52"+i].checked = true; } そして、同時にチェックしたいものだけ下記の様にしました。 <input name='or52' type='checkbox' value='A' id='or51'> <input name='or52' type='checkbox' value='B' id='or52'> <input name='or52' type='checkbox' value='C' id='or53'> 取りあえずできますが、エラーがでます。 「document.f1.elements["..."]は、objまたはnullではない!」 どうか教えて下さい。よろしくお願いします。

  • 複数のチェックボックスをチェックしたい

    質問させてください。 複数のチェックボックスを項目別に全てチェックするようなjqueryの書き方をご教授いただきたいです。 <table> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />a</li> <li><input type="checkbox" name="" value="" />b</li> <li><input type="checkbox" name="" value="" />c</li> <li><input type="checkbox" name="" value="" />d</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />e</li> <li><input type="checkbox" name="" value="" />f</li> <li><input type="checkbox" name="" value="" />g</li> <li><input type="checkbox" name="" value="" />h</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />i</li> <li><input type="checkbox" name="" value="" />j</li> <li><input type="checkbox" name="" value="" />k</li> <li><input type="checkbox" name="" value="" />l</li> </td> </tr> </table> 上記のようにそれぞれの項目に「まとめてチェック」のチェックボックスがあり、 そこに該当するチェック項目は全てチェックorチェックを外す っという挙動の実装を考えています。 jqueryでやりたいのですが、javascript、jqueryがかなり苦手でいまいちいきません。 ググって $(function(){ $('#all').click(function(){ if(this.checked){ $('#check input').attr('checked','checked'); }else{ $('#check input').removeAttr('checked'); } }); }); このソースを見つけたのですが、これだと一つの項目でしか実装できず 項目分このjqueryを書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

  • CheckBoxの入力チェックについて

    CheckBoxの入力チェックについて CheckBoxの数は可変です。 全て未チェックのときにalertを表示したいです。 今はチェックしてもalertが表示されてしまいます。 よろしくお願いします。 <html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>チェックボックス入力チェック</title> <SCRIPT TYPE="text/javascript"> <!-- function item_check() { count = 0; for (i=0;i<=document.form1.elements['item[]'][i].length;i++){ if(document.form1.elements['item[]'][i].checked){ count++; } } if(count==0){ alert("項目を選択してください。"); return(false); } return(true); } --> </SCRIPT> </head> <body> <form name="form1" method="POST" action="test.htm" onSubmit="return item_check()"> <p><input type="checkbox" name="item[]" value="1">項目1</p> <p><input type="checkbox" name="item[]" value="2">項目2</p> <p><input type="checkbox" name="item[]" value="3">項目3</p> <p><input type="checkbox" name="item[]" value="4">項目4</p> <p><input type="checkbox" name="item[]" value="5">項目5</p> <input type="submit" name="kakunin" value="確認"> </form> </body> </html>

  • checkboxについておしえてください

    <form action=" " method="post"> <input type="checkbox" name=" figure" value="1"><img src="a.png"> <input type="checkbox" name=" figure" value="2"><img src="b.png"> <input type="checkbox" name=" figure" value="3"><img src="c.png"> <input type="checkbox" name=" figure" value="4"><img src="a.png"> <input type="checkbox" name=" figure" value="5"><img src="b.png"> <input type="submit" value="送信する"> </form> とした場合に、絵の左にくるチェックボックスの位置を、添付した図のように位置を図の中にもってこれないかと考えています。できれば、大きさも変えたいと考えています。 cssでできるのでしょうか? cssじゃない方法などもあるのでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • checkboxの選択数制限と排他処理について

    javascript初心者です。よろしくお願い致します。現在チェックボックスを使用したクイズサイトを作成しており、回答が5つの中から正しいものをチェックし送信するというものです。 その中で、正解数(今回は2つ)以上にチェックをした時に最初にチェックした方のチェックボックスのチェックが外れるという仕組みを組み込む事になりました。 選択数に制限をかけることや排他処理(ラジオボタン)は理解できるのですが、上記の実現方法がどうしても分からず質問させていただきました。 どうかよろしくお願い致します。 <html> <head> <script type="text/javascript"> function check(f,o,m){ var c = i = 0, b = f.elements; for (i; i < b.length; i++) if(b[i].type&&b[i].type=='checkbox'&&b[i].checked&&b[i].parentNode.id==o) c++; for (i = 0; i < b.length; i++) if(b[i].type&&b[i].type=='checkbox'&&!b[i].checked&&b[i].parentNode.id==o) b[i-2].checked=false;// これだと2つ前ではなく2番目のチェックボックスが排他になります。 } </script> </head> <body> <form action="#" id="sampleform" onclick="check(this,'options',2);"> <fieldset id="options"><input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> <input type="checkbox" name="" value=""><br> </fieldset> </form> </body> </html>

  • checkboxの値を取得する方法について

    チェックボックスをひとつ用意しています。 チェックがされていれば1、チェックされていなければ0を 取得し、最終的には更新処理を行いたいと思っていますが すべてチェックされている状態で更新処理(1)がされてしまいます。 $ABC = $_POST['AAA']; If($ABC[$count] = "1"){ SQL = "1" }else{ SQL = "0" } <input type = "checkbox" checked name="abcKbn[]" id = "AAA" value = "1"> SQLに問題がないと思うので、省略させて頂きます。 value値を配列abcKbn[]に値をセットし、If文でチェックを 行っていますが、この場合だとvalue = "1"のため すべての値が1となり、配列に格納されるかと思っています。(違ったらすいません) そのためIf文もすべて1になるかと・・・。 チェックがされていれば1、チェックがされていなければ0を value値に設定することは可能なのでしょうか? それ以外でもし良いやり方があれば アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • checkboxを全てcheckを画像ボタンで

    一つのフォームの中に、複数のcheckboxのグループがあって そのグループ毎に、全てチェック、解除ボタンをつけているのですが それを画像のボタンで実現したいのですが、どのようにしたらいいでしょうか? *通常のボタンでは動作していますが、画像をボタンにした時に動作しません。 チェックを入れて、その場面にとどまって欲しいのに 画像で作るとチェックを入れて、検索してしまいます。 以下、現在と、画像ボタンのうまく動かないものも書いています。 よろしくお願いいたします。 <SCRIPT language="JavaScript"> <!-- // チェックボックスに使用している名前 chn1 = new Array("bukken_ID[1]","bukken_ID[2]"); // 全てのチェックボックをチェックする function chBxOn1(){ for(i=0; i<chn1.length; i++) { document.nForm.elements[chn1[i]].checked = true; } } // 全てのチェックボックのチェックを外す function chBxOff1(){ for(i=0; i<chn1.length; i++) { document.nForm.elements[chn1[i]].checked = false; } } //--> </SCRIPT> <SCRIPT language="JavaScript"> <!-- // チェックボックスに使用している名前 chn = new Array("ku_area[1]","ku_area[2]"); // 全てのチェックボックをチェックする function chBxOn2(){ for(i=0; i<chn2.length; i++) { document.nForm.elements[chn2[i]].checked = true; } } // 全てのチェックボックのチェックを外す function chBxOff2(){ for(i=0; i<chn2.length; i++) { document.nForm.elements[chn2[i]].checked = false; } } //--> </SCRIPT> <form id="form2" name="nForm" method="post" action="#"> <input type="checkbox" name="bukken_ID[1]" id="bukken_ID" value="1" /> マンション <input type="checkbox" name="bukken_ID[2]" id="bukken_ID" value="2" /> 一戸建て <input type="button" value="全てチェックを入れる" onclick="chBxOn1()" /> <input type="button" value="チェック解除" onclick="chBxOff1()" /> <input type="checkbox" name="ku_area[1]" id="ku_area" value="1"/>住所1 <input type="checkbox" name="ku_area[2]" id="ku_area" value="2"/>住所2 <input type="button" value="全てチェックを入れる" onclick="chBxOn2()" /> <input type="button" value="チェック解除" onclick="chBxOff2()" /> <input type="submit" name="button3" id="button3" value="以上の条件で検索" /> </form> 以下、うまく動かない画像のボタンです。 <input type="image" src="img/allcheck1.gif" alt="全てチェックを入れる" onClick="chBxOn1()"> <input type="image" src="img/riset.gif" alt="チェック解除" onClick="chBxOff1()">

専門家に質問してみよう