• 締切済み

checkboxと配列について

よろしくお願いします。 以下のようなチェックボックスを利用した phpの入力フォームを作成しました --------------------------------------------------------------- 番号 色  欲しい 在庫無し 101 red     □    □ 102 blue     □    □ 103 black    □    □ チェックボックスのソースは以下 欲しい→<input type=checkbox name='want[]' value='$a1'> 在庫無し→<input type=checkbox name='non[]' value='$a1'> ※$a=1です。 チェックボックスは必ずしも「欲しい」と「在庫無し」に 付けるわけではないとします。 それを踏まえて、チェックされたデータをうけるソースは以下です。 $ock=$_POST["want"]; $kck=$_POST["non"]; for($i=0; $i<count($_POST["want"]); $i++){ $as=$ock[$i]; $a=$as-1; $no=$_POST["no"][$a]; $iro=$_POST["iro"][$a]; でこれをmysql文のINSERT~で登録します。 ですが、ここで問題が・・・ 例えば 番号101から103までの「欲しい」にチェックがあり 番号101と103の「在庫無し」にチェックがあったとします。 自分の理想のレコードとしてはもちろん 番号101から103までの「欲しい」に値が入り 番号101と103の「在庫無し」に値が入るのが良いのですが、 これらの配列の中身は当然以下となります 欲しい Array ( [0] => 1 [1] => 2 [2] => 3 ) 在庫無し Array ( [0] => 1 [1] => 3 ) そうなると「欲しい」は各番号に値は当然入りますが、 「在庫無し」は番号101と102に値が入ってしまいます。 この「在庫無し」の値がうまく101と103に入る方法はありますでしょうか? for文でcountしているのが「欲しい」だからでしょうか? もちろん上記の$aがif(($a==1) OR ($a==3))と明示的にすれば理想的に値は入ります。 説明が下手で申し訳ありませんが、上記の問題でうまい方法がありましたらと思います、よろしくお願いします。 環境 WinXP apache2 php5 Mysql5

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

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

いまいち理解してないですが、以下のどちらかにすればIDにひもづいた チェックがえられますね。 (nonは省略) (1)プログラム的にvalueにidを入れる <form> 101 red <input type="checkbox" name="want[]" value="101"><br> 102 blue <input type="checkbox" name="want[]" value="102"><br> 103 black <input type="checkbox" name="want[]" value="103"><br> <input type="submit"> </form> (2)プログラム的にnameにidを入れる <form> 101 red <input type="checkbox" name="want[101]" value="1"><br> 102 blue <input type="checkbox" name="want[102]" value="1"><br> 103 black <input type="checkbox" name="want[103]" value="1"><br> <input type="submit"> </form> そもそもnonは在庫があるかどうかはサーバー側に情報をもっている のだからわざわざユーザーから受け取る必要はないのでは?

関連するQ&A

  • CheckBoxの配列化

    Excel2000のVBAで以下のような処理をしたいのでご教示願います。 Userform1にCheckBox1~CheckBox10の10個のチェックボックスがあったとして以下のようにFor文でまとめて処理したいのですがうまくいきません。  For I = 1 to 10   UserForm1.CheckBox(I).value = True  NEXT

  • []を付けずに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を使って ちゃんとチェックされた値をすべて受信して動作していると 思われるサイトを目にするので どうすればできるのかと思い質問させて頂きました。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 大量の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
  • javascript checkbox

    完全に初心者です。。 下記のスクリプトをもとに、 ■チェックAをチェックしたら全てチェックされる ■またチェックAをチェックしたら全て外れる ようにしたいです。。 でも何がダメか分かりません。。 一部を書くのではなく出来ればスクリプト全ていただけたらと思います。 あともし宜しければチェックAをチェックしたら、1~6をチェックできないようにもしたいです。。 ご教授よろしくお願いします。。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE></TITLE> <SCRIPT language="JavaScript"> function check(){ for(i=1; i<7; i++){ document.form1.elements[ch[i]].checked = true; } } </SCRIPT> </HEAD> <BODY> 全てのチェックボックスをチェック/解除 <FORM name="form1"> <p><INPUT type="checkbox" id="ch" onclick="check()">チェックA</p>   <INPUT type="checkbox" id="ch1">チェック1   <INPUT type="checkbox" id="ch2">チェック2   <INPUT type="checkbox" id="ch3">チェック3<BR><BR>   <INPUT type="checkbox" id="ch4">チェック4   <INPUT type="checkbox" id="ch5">チェック5   <INPUT type="checkbox" id="ch6">チェック6<BR><BR>   <BR> </FORM> </BODY> </HTML>

  • htmlのcheckboxで質問です

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

  • 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
  • 配列の複数の値のデータベースへの登録方法教えて下さい。

    お世話になります。 チェックボックスの値を複数選択した値をデータベースに登録する方法を教えて下さい。 01.php内の下記のチェックボックスの値からチェックされたデータを02.phpにPOSTで値を渡しMysqlに登録したいのですが どのように考えたらよいかわかりません。どうぞご指導をお願いします。 $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $i=0; foreach($labels as $label){ $checked = (ereg("[0-9]+",array_search($i,$_POST["working_days"])))? " checked":""; echo "<label>\n<input type=\"checkbox\" name=\"working_days[]\" value=\"{$i}\" {$checked} />{$label}</label>"; $i++; } イメージとしては、正規化ということを以前に教えて頂きましたので、 テーブル「working_days」 フィールド「job_id」「day_id」 ------------------- job_id day_id ------------------- c105 0 c105 1 c105 3 というように登録をさせたいと思うのですが、わかりません。初歩的なこととは思いますが どうぞよろしくお願いします。 02.php $labels = array("ド短期1日~OK", "週2、3日程度", "月~金曜日","土日祝日のみ", "毎日オールフリー"); if(is_array($_POST["working_days"] )){ $i=0; foreach($labels as $label){ $sql = "insert into working_days(job_id, day_id)values ('" . $job_id . "','" . $i . "')"; $res=mysql_query($sql); $i++; } }

    • ベストアンサー
    • PHP
  • checkbox ループ

    下記のスクリプトだと、 デバックが16になってしまいます。 これをどうにかして、 AをチェックしたらA内だけをループ、 BをチェックしたらB内だけをループさせたいんですが、 どこをどのように修正すればいいですか?? スクリプトをかなり変えるのは避けたいです。。 教えてください。。 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE></TITLE> <SCRIPT language="JavaScript"> function check(n){ document.getElementById('debug').innerHTML = "デバッグ情報"; document.getElementById('debug').innerHTML = document.getElementById('debug').innerHTML + "<br>lengthは" + document.form1.length; for(i=1; i<=document.form1.length; i++){ if(document.form1.elements["ch" + n].checked){ document.form1.elements["ch" + n + "-" + i].checked = true; document.form1.elements["ch" + n + "-" + i].disabled = true; }else{ document.form1.elements["ch" + n + "-" + i].checked = false; document.form1.elements["ch" + n + "-" + i].disabled = false; } } } </SCRIPT> </HEAD> <BODY> 全てのチェックボックスをチェック/解除 <FORM name="form1"> <p><INPUT type="checkbox" id="ch1" onclick="check(1)">チェックA</p> <INPUT type="checkbox" id="ch1-1">チェック1 <INPUT type="checkbox" id="ch1-2">チェック2 <INPUT type="checkbox" id="ch1-3">チェック3<BR><BR> <INPUT type="checkbox" id="ch1-4">チェック4 <INPUT type="checkbox" id="ch1-5">チェック5 <INPUT type="checkbox" id="ch1-6">チェック6<BR><BR> <BR> <p><INPUT type="checkbox" id="ch2" onclick="check(2)">チェックB</p> <INPUT type="checkbox" id="ch2-1">チェック1 <INPUT type="checkbox" id="ch2-2">チェック2 <INPUT type="checkbox" id="ch2-3">チェック3 <INPUT type="checkbox" id="ch2-4">チェック4<BR><BR> <INPUT type="checkbox" id="ch2-5">チェック5 <INPUT type="checkbox" id="ch2-6">チェック6 <INPUT type="checkbox" id="ch2-7">チェック7 <INPUT type="checkbox" id="ch2-8">チェック8<BR><BR> <BR> </FORM> <p id="debug"></p> </BODY> </HTML>

  • localStorageでのcheckbox制御

    下記記載のプログラムをこちらから改変して作成しました。 http://jsdo.it/twi_masa/hx8D 質問1 保存を押すとtrueかfalseの値が保存されますが、ページ読み込み直後にtrueだったらチェックあり。falseだったらチェックなしの状態にするにはどのように書けばよろしいでしょうか。 質問2 チェックボックス2も1と同様に使いたいのですが、どのように書けばよいのかわかりません。 よろしくお願いします。 <table> <tr> <td>チェックボックス</td> <td> <input type="checkbox" id="checkbox1" value="0">チェック1 <input type="checkbox" id="checkbox2" value="0">チェック2 </td> </tr> </table> <input type="button" value="保存" onclick="hx8D.save();"> <script> var hx8D = function(){ var HX8D = function(){ }; HX8D.prototype = { save : function(){ var elements = document.getElementsByTagName("input"); for(var i=0; i<elements.length; i++){ var type = elements[i].type; var key = elements[i].id; if(type == "text"){ localStorage[key] = elements[i].value; }else if(type == "checkbox"){ localStorage[key] = elements[i].checked; document.getElementsByName("checkbox1")[i].checked = true; } } }, }; return new HX8D(); }(); </script>

  • Excelで、checkboxがtrueならlabelを太字、任意のセルに1を入力したい。

    質問させて頂きます。 ユーザーフォーム上にあるチェックボックスにチェックを 入れると、同じユーザーフォーム上にあるラベルの値を太字 にして、さらに特定のシートのセルに1を入力。 同じくチェックボックスのチェックを外すとラベルの値を 標準(太字でなくす)にし、特定のセルに入力された1を 消去する。 というようなことがやりたいのですが、可能でしょうか。 全てuserform1にある 1,checkbox1にチェック有り(true)のとき、   →label1の表示(値)を太字   →worksheet1のA1セルに1を入力 2,checkbox1にチェックなし(false)のとき、   →label1の表示(値)を標準文字   →worksheet1のA1セルを空白 ということを、全てチェックボックスのチェック動作 に関連させて行いたいのです。(チェックに連動させたい) おそらくVBAでの作業になるのだと思われますが あまり詳しくないのでよろしくお願いします。