formでのチェックボックスのname属性について

このQ&Aのポイント
  • formでのチェックボックスのname属性についての説明。
  • JavaScriptではdocument.f.group1で配列として取得できるが、PHPでは$_POST["group1"]では最後にチェックされた項目しか取得できない。
  • PHPで配列で取得する方法は、name属性をgroup1[]のように配列として指定するしかない。他に方法がある場合は教えてほしい。
回答を見る
  • ベストアンサー

formでのチェックボックスのname属性について

例えば以下のようなフォームがあるとき、 ----------------------------------------------------------------------------- <form name="f"> <input type="checkbox" name="group1" id="a" value="a"/><label for="a">a</label> <input type="checkbox" name="group1" id="b" value="b"/><label for="b">b</label> <input type="checkbox" name="group1" id="c" value="c"/><label for="c">c</label> <input type="checkbox" name="group1" id="d" value="d"/><label for="d">d</label> </form> ----------------------------------------------------------------------------- javascriptでは、document.f.group1で配列として取得できるのですが、 phpでは、$_POST["group1"]では最後にチェックされている項目しか取得できません。 (つまり、phpでは複数選択されていても、一番後ろの1項目しか取得できません。) 少し調べるとphpで取得するには、 name属性値を、group1からgroup1[]とすれば配列として取得できるとありました。 しかしこれでは、javascriptの方でname属性値を使って取得できなくなってしまい、 document.f.getElementsByTagName("input")みたいな感じで取得することになると思います。 そもそも、name属性値に"["や"]"を使うことは良くないと思うので、 phpの方で何らかの方法があると思ったのですが、 最近勉強を始めたばかりの初心者なのでよくわかりませんでした。 今知っているphpに配列で渡す方法が、 「name属性値をgroup1[]のように配列にする」しか無いので、 他に方法があるならば教えてください。 質問の前提として、 1.name属性はフォーム内の項目のグループ化をしている? 2.name属性値に"["や"]"は仕様では使用可能な文字ではない? 1,2ともにYesだと思っています。 もし、この前提が間違っていたらご指摘ください。 質問内容を要約すると、 「checkboxをphpで配列で取得する方法はname属性値を配列にするしかないのですか?」 「他に方法があるなら教えてください」 です。 よろしくお願いします。

noname#199226
noname#199226
  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

JavaScript でも form.elements('group1[]') で取得できまっせ。 DOMScript では、elements から取得するのが書くのが正しい書き方です。 1.name属性はフォーム内の項目のグループ化をしている? JavaScript では、name や id が重複した場合(本来ありえない)配列として返してくれる。 2.name属性値に"["や"]"は仕様では使用可能な文字ではない? 確かに仕様では、そうなってますね。 http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#type-cdata

noname#199226
質問者

お礼

form.elements('group[]')で取得出来るのを忘れてました! ありがとうございます。

関連するQ&A

  • form で、チェックボックスにまとめてチェック

    データベースから、データを持ってきて、複数のグループに分けてまとめてチェックを入れようとしています。 複数のチェックボックスがある場合はいいのですが、チェックボックスが一つしかない場合に チェックが入りません。 どの様に変更すれば、一つでもチェックが入るようになるでしょうか? 以下の様なサンプルコードを見ながら、作成しています。 function AllChecked1(){ var check = document.form.a1.checked; for (var i=0; i<document.form.elements['aa1[]'].length; i++){ document.form.elements['aa1[]'][i].checked = check; } } <form name="form" method="POST" action="select1.php"> <input type="checkbox" name="a1" id="a1" onClick="AllChecked1();" /><label for="a1"> group1 全選択</label> <input type="checkbox" name="aa1[]" id="aa11" value="1" /><label for="aa11">名前1</label><br /> </form> よろしくお願いいたします。

  • チェックに応じて違うチェックボックスをアクティブにしたい

    次の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>

  • チェックボックスの無効化、有効化

    あるサイトを参考にチェックボックスの無効化、有効化を実装したいと考えています。 ソースは以下の通りなのですが、この場合、name属性にそれぞれ異なる番号(t1、t2、t3やc1、c2、c3)が振られている必要がありますが、 これを同じnameに統一して動作させるには、どのように記述したらよいのか教えて頂けませんでしょうか? nameのtとcを統一したいのではなく、t1、t2、t3を番号抜きのtに統一、c1、c2、c3を番号抜きのcに統一したいと思っています。 <script type="text/javascript"> function fchk2(obj, name) { var frm=obj.form; if(obj.checked==true) { /* チェックボックスが選択されている場合は、 テキストボックスを有効化(false) */ for(var i=1; i<=3; i++){ frm.elements[name+i].disabled=false; } } else { for(var i=1; i<=3; i++){ /* 無効化する前に、入力値をクリア */ if(name=='t'){ /* テキストボックスの場合 */ frm.elements[name+i].value=""; }else{ /* チェックボックスの場合 */ frm.elements[name+i].checked=false; } /* 無効化(true) */ frm.elements[name+i].disabled=true; } } } </script> <form name="form2" action="#"> <label for="chk1"><input type="checkbox" id="chk1" name="chk1" value="1" onclick="fchk2(this,'t')" checked="checked" />テキストボックスの無効化・有効化を切替(チェックを外すと無効化)</label><br /> <input type="text" name="t1" value="テキストA" size="20" /> <input type="text" name="t2" value="テキストB" size="20" /> <input type="text" name="t3" value="テキストC" size="20" /> <hr /> <label for="chk2"><input type="checkbox" id="chk2" name="chk2" value="1" onclick="fchk2(this,'c')" checked="checked" />チェックボックスの無効化・有効化を切替(チェックを外すと無効化)</label><br /> <input type="checkbox" name="c1" value="1" />選択肢A<br /> <input type="checkbox" name="c2" value="1" />選択肢B<br /> <input type="checkbox" name="c3" value="1" />選択肢C </form>

  • チェックボックスを使った複数選択からデータベースへの登録

    チェックボックスを使った複数選択の処理を教えて下さい。 現在の処理は下記のようにしております。 00.phpの中のチェックボックスの記述です。複数選択してから01.phpに値を渡します。 <label> <input type="checkbox" name="working_days1" value="ド短期1日~OK"> ド短期1日~OK</label> <label> <input type="checkbox" name="working_days2" value="週2、3日程度"> 週2、3日程度</label> <label>     <input type="checkbox" name="working_days3" value="月~金曜日"> 月~金曜日</label> <br> <label> <input type="checkbox" name="working_days4" value="土日祝日のみ"> 土日祝日のみ</label> <label> <input type="checkbox" name="working_days5" value="毎日オールフリー"> 毎日オールフリー</label> 00.phpから01.phpへPOSTでデータを渡します。 <? $working_days1 = htmlspecialchars($_POST["working_days1"]); $working_days2 = htmlspecialchars($_POST["working_days2"]); $working_days3 = htmlspecialchars($_POST["working_days3"]); $working_days4 = htmlspecialchars($_POST["working_days4"]); $working_days5 = htmlspecialchars($_POST["working_days5"]); 各変数の中を確認してチェックするかどうかへ決め、変数に格納します。 if($working_days1 == "ド短期1日~OK" ){$d01 = "checked";} if($working_days2 == "週2、3日程度"){$d02 = "checked";} if($working_days3 == "月~金曜日"){$d03 = "checked";} if($working_days4 == "土日祝日のみ" ){$d04 = "checked";} if($working_days5 == "毎日オールフリー"){$d05 = "checked";} ?> 変数に格納されたチェックを実行してチェック済みとします。 <label> <input type="checkbox" name="working_days1" value="ド短期1日~OK" <?php echo $d01 ?>> ド短期1日~OK</label>  <label> <input type="checkbox" name="working_days2" value="週2、3日程度" <?php echo $d02 ?>> 週2、3日程度</label> <label>     <input type="checkbox" name="working_days3" value="月~金曜日" <?php echo $d03 ?>> 月~金曜日</label> <label> <input type="checkbox" name="working_days4" value="土日祝日のみ" <?php echo $d04 ?>> 土日祝日のみ</label> <label> <input type="checkbox" name="working_days5" value="毎日オールフリー" <?php echo $d05 ?>> 毎日オールフリー</label> こんな感じでチェックされた項目の確認をした後で、内容をMYSQLのデータベースに登録をしたいのですが、 データベースへの登録も含めて、一連の流れの中で、配列を利用して、もっと簡単なよい方法が ないか御指導いただけませんでしょうか? データベースへの登録も配列に格納しないとworking_dayというテーブルしか用意をしていないので その中にどのように格納して、また取り出しをすればよいかわかりません。 どうぞ超初心者レベルでのご指導をお手間ですが、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPとJSで同じNAME属性を使いたい場合の配列処理の記述

    さきほどのNO.1508009(チェックに応じて違うチェックボックスをアクティブにしたい)の件で、 HTMLファイルへのチェックボックス配置目的がPHPによる検索フォームとして利用することですが、 PHP側でSQLを発行するための配列の参照先にもなってしまっているため、実際のHTMLソースでは <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] バナナ でなく、 <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] バナナ とかかれています(NAME属性内に[])。なのでjchさんにご提示いただいた function check() { var v = document.kkk.food[0].checked; for(var i=0; i<3; i++){ if(v) { document.kkk.fruit[i].disabled = false } else { document.kkk.fruit[i].disabled= true; } } document.kkk.fruit[3].disabled= true; } を使わせてもらおうとすると不整合を起こしてしまいます。 かといって、安直に以下のようにかくと構文エラーになってしまいます。 document.kkk.fruit[][i].disabled = false ここでPHP側が使いたい配列表現を活かしつつ、jchさんのスクリプトも使いたい場合に 何かうまい書き方はありますでしょうか? よろしくお願い致します。

  • 特定のチェックボックスをチェックするには

    特定のチェックボックス「白」を CHECKEDにする方法を教えて下さい。 #数と位置が変動するので配列は取得できません。 #「もしもcolorの値が白なら CHECKED」のような関数にしたい。 <INPUT TYPE="CHECKBOX" NAME="color" VALUE="おまかせ"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="白"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="ピンク"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="緑">

  • チェックボックスがIE8で正しく動作しないのはなぜ

    下記サンプルコードをIE8やIE7で試してみると、チェックボックスをクリックしても その時点で動かず、ウインドウ上のどこかをクリックしないと動きません。 Firefox, Chrome, IE9ではチェックボックスをクリックした時点で動きます。 どこに問題があるのでしょうか。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>サンプル</title> </head> <body> <form> <ul id="t"> <li><input type="checkbox" name="t_0" onchange="fff()" value="0pt" /><label for="t_0">0pt</label></li> <li><input type="checkbox" name="t_1" onchange="fff()" value="10pt" /><label for="t_1">10pt</label></li> <li><input type="checkbox" name="t_2" onchange="fff()" value="20pt" /><label for="t_2">20pt</label></li> <li><input type="checkbox" name="t_3" onchange="fff()" value="30pt" /><label for="t_3">30pt</label></li> <li><input type="checkbox" name="t_4" onchange="fff()" value="40pt" /><label for="t_4">40pt</label></li> <li><input type="checkbox" name="t_5" onchange="fff()" value="50pt" /><label for="t_5">50pt</label></li> <li><input type="checkbox" name="t_6" onchange="fff()" value="60pt" /><label for="t_6">60pt</label></li> <li><input type="checkbox" name="t_7" onchange="fff()" value="70pt" /><label for="t_7">70pt</label></li> <li><input type="checkbox" name="t_8" onchange="fff()" value="80pt" /><label for="t_8">80pt</label></li> <li><input type="checkbox" name="t_9" onchange="fff()" value="90pt" /><label for="t_9">90pt</label></li> <li><input type="checkbox" name="t_10" onchange="fff()" value="100pt" /><label for="t_10">100pt</label></li> </ul> </form> <table> <tr> <td>サンプル1 :</td><td>60pt</td> </tr> </table> <table> <tr> <td>サンプル2 :</td><td>30pt</td> </tr> </table> <table> <tr> <td>サンプル3 :</td><td>40pt</td> </tr> </table> <script type="text/javascript"> function fff() { var a = new Array; var b = document.getElementById('t').getElementsByTagName("input"); var c = document.getElementsByTagName('table'); for(i=0,len=b.length; i<len; i++){ if(b[i].checked == true){ a[i] = b[i].value; }else{ a[i] = ""; } } for(i=0,len=c.length; i<len; i++){ var d = c[i].getElementsByTagName('td'); var e = d[1].innerHTML; var if1 = a[0]==e || a[1]==e || a[2]==e || a[3]==e || a[4]==e || a[5]==e || a[6]==e || a[7]==e || a[8]==e || a[9]==e || a[10]==e; var if2 = a[0]=="" && a[1]=="" && a[2]=="" && a[3]=="" && a[4]=="" && a[5]=="" && a[6]=="" && a[7]=="" && a[8]=="" && a[9]=="" && a[10]==""; if(if1 || if2){ c[i].style.display = ''; }else{ c[i].style.display = 'none'; } } } </script> </body> </html>

  • チェックボックス とラジオボタンの値取得について

    チェックボックス とラジオボタンの値取得について こんにちは チェックボックスの中にラジオボタンがある場合に チェックボックスの値に続けてラジオボタンの値を表示したいのですが、 うまくいかず悩んでいます。 【やりたいこと】 □そのた2をチェクして男性を選択した場合 「そのた2 男性」と表示したい。 例 そのた1 そのた2 男性 そのた4 そのた5 女性 サンプルのチェックボックスのlabelタグをはずすと $(vals[i]).next($("input[name='radio']:checked").val()); で値を取得できたのですが、 labelタグを付けたまま値を取得することは可能でしょうか? labelタグをつけたまま、 $(vals[i]).find($("input[name='radio']:checked").val()); でやってみたのですが、undefindがでてしまいました。 サンプルではチェックボックスの数は1個ですが、 □が30個以上 のチェックボックスが50個くらいあるので、 1回の記述で済ませたいのですが、 ラジオボタンが隣にあったら値を取得する のようにできるのでしょうか? 何かよい方法があれば教えて頂けないでしょうか。 よろしくお願い致します。 ■サンプルソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script type="text/javascript" language="JavaScript"></script> <script language="javascript"> <!-- function textb(){ var str=""; var vals = document.forms['f'].elements['q1']; for(i=0; i<vals.length; i++){ if(vals[i].checked){ str=str + vals[i].value + '\n'; } } document.f.log.value=str; } --> </script> <title></title> </head> <body> <form name="f"> <div>アンケート<br> <label for="1"><input type="checkbox" name="q1" class="chex" id="1" value="その1"> その1</label><br> <label for="2"><input type="checkbox" name="q1" class="chex" id="2" value="その2"> その2</label> <input type="radio" name="radio1" value="可">男性 <input type="radio" name="radio1" value="否">女性 <br> <label for="3"><input type="checkbox" name="q1" class="chex" id="3" value="その3"> その3</label><br> <label for="4"><input type="checkbox" name="q1" class="chex" id="4" value="その4"> その4</label><br> <label for="5"><input type="checkbox" name="q1" class="chex" id="5" value="その5"> その5</label> <input type="radio" name="radio2" value="可">男性 <input type="radio" name="radio2" value="否">女性 <br> </div> <input type="button" value="確認" onclick="textb()"> <input type="reset" value="クリア"> <br> <textarea name="log" rows="4" cols="50"></textarea></form> </body> </html>

  • inputタグのnameとvalue属性について教えてください。

    inputタグのnameとvalue属性について教えてください。 <label><input type="radio" name="性別" value="男" />男</label> <label><input type="radio" name="性別" value="女" />女</label> という風にformの内容は「name:valueで1セット」として送信されると思っていました しかしxhtml1.1ではname属性が廃止されたと思います。 xhtmlではvalueだけでデータを送信するのでしょうか? それとも、form内のname属性は例外でしょうか?

  • チェックボックスのvalueを連結してURLに追加

    <form method="get" action="<?php = $_SERVER['PHP_SELF']; ?>"> <input type="checkbox" name="c" value="001" /> <input type="checkbox" name="c" value="002" /> <input type="checkbox" name="c" value="003" /> <input type="checkbox" name="c" value="004" /> <input type="checkbox" name="c" value="005" /> <input type="submit" value="送信" /> </form> submitするとURLに ?c=001&c=002&c=003… が追加されます。 その形ではなく、c=001002003… と連結してURLに追加するにはどうしたら良いですか?

    • 締切済み
    • PHP

専門家に質問してみよう