• ベストアンサー

チェックボックス複数選択 mysql受け渡し

PHPを習いはじめたのですが分からない所がありましたので質問をさせて頂きました。 チェックボックスを作り複数選択されたデータをMYSQLに受け渡したいのですがどうしてもうまくいきません。受け渡しが出来たかと思えばARRAYのみ表示されてしまい、重要な内容が一切表示されません。 こちらがスクリプトになります。 <tr> <td>(チェックボックス)<br />順番不問</td> <td> <span class="checkbox"><input name="check1[]" type="checkbox" value="aaa" />aaa</span> <span class="checkbox"><input name="check1[]" type="checkbox" value="bbb" />bbb</span> </tr> </td> //mysql $sql = "insert into table values('$check1')"; 多分この$sql分のなにかが間違ってると思うですがいくらやっても 出来ません、、 mysql の設定はカラムはcheck1となっており、text, 値はnullとなっております。 どのなたか複数チェックボックスで表示された項目をMYSQLのデータベースに移行できる方法をご存知の方お伺い出来ませんでしょうか。 宜しくお願い致します。

noname#130289
noname#130289
  • PHP
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.4

#3さんと同じような事ですが、受け取り側は配列での処理になります。 チェックが一つでも変数ではなく要素が一つの配列としてみなされます。 $arr_check1 = $_POST['check1']; として受け取るとチェックをした数だけ要素を持つ配列になるので 例えばカラムcheck1にチェックをつけた項目をスペースで区切って格納したいのであれば、 if(isset($arr_check1) and count($arr_check1)>0){ $str_check1 = ""; for($i=0;$i<count($arr_check1);$i++){ if($i == 0){ $str_check1 .= $arr_check1[$i]; } else{ $str_check1 .= " " . $arr_check1[$i]; } } } のように一つの文字列にしてから$str_check1をSQLでカラムにインサートします。

noname#130289
質問者

お礼

gogo-tea様 ご返答ありがとうございます! まず最初にですが、こちらのスクリプトを利用してみましたら 動きました。ありがとうございました! 正直今日一日ずっとこれをどう動かしたらいいのか一日調べたりなどをして 悩んでいたのですが、まさかこのような書き方が出来るとは考えもしておりませんでした。正直まだ完全に理解していないのが現状です、、 でも色々な方から助言を頂き大変勉強になりました。あきらめずに今後もがんばらさせて頂きます! 本当にありがとうございました!

その他の回答 (4)

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

<?PHP $check1=$_REQUEST['check1']; if(is_array($check1)){ foreach($check1 as $val){ $sql = "insert into table values('{$val}')"; ・・・・ }elseif($check1!=""){ $sql = "insert into table values('{$check1}')"; ・・・・ } ?> としてみてください。

noname#130289
質問者

補足

ご返答ありがとうございます! さっそくですがこちらでためしてみたのですが機能致しません。。 なんとなくですが、スクリプトの意味が分かるのですがまだ勉強不足で申し訳ないです。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

まず、phpのバージョンが4.1以降で有れば、$_POST[] や $_GET[] で受け取ることを推奨します。 name='check1[]' となっているので、受け取りは配列になります。 http://php.s3.to/man/faq.html.html 配列変数をそのまま表示しようとすれば、ARRAY となるので、添え字をつけて個別指定で値を取り出しましょう。 チェックされた個数分の配列になっているはずなので $_POST['check1'][0] , $_POST['check1'][1] ,,, の様にして受信データを取り出します。 foreach($_POST['check1'] as $value )を使ってループ処理すると個数を気にしなくてもよくなります。 しかし、チェックが一個もないときは、$_POST['check1']が存在しないので、isset($_POST['check1'])で分岐して、 さらに、チェックが一個しかないときは、配列になっていない可能性もあったように思うので、is_array($_POST['check1']) で分岐してからforeachループでデータ取りだしするのがよいでしょう。 MySQL文の方は、チェックの個数分の複数の項目に一レコードで登録したいのか、チェックの個数分のレコード数を登録したいのかで作りが違ってくると思います。

参考URL:
http://php.s3.to/man/faq.html.html#faq.html.arrays
noname#130289
質問者

お礼

hrm_mmm様 頂きましたURL大変勉強になりました! まだまだ分からない所がたくさんあり、まったくの勉強不足ですが ひとまずまだ自分のものには出来てないですが、この機能することが出来ましたので締め切りをさせて頂きます。頂きました助言をもっと理解出来るように今後もがんばります、ありがとうございました!

noname#130289
質問者

補足

大変ご丁寧にご説明して頂きましてどうもありがとうございます。 とても参考になりました。 MYSQL分はチェックの個数分のコードを登録したいと思っているのですが どうしてもうまくいきません。配列の受け取りに関してはなにか 特別な書き方をするのでしょうか?

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

もしかして、スクリプトはそれですべてですか? チェックボックスのどれにチェックを入れたかを 自分(または他のスクリプト)に伝えるためには、 「送信」ボタンのような仕組みが必要なはずですけれど。

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

まず <input name="check1" type="checkbox" value="aaa" /> <input name="check2" type="checkbox" value="bbb" /> nameが同じだとそれぞれのデータが取込めません。 SQLは $sql = "insert into table ('check1') values('$check1')"; インサートするフィールドを指定しましょう!

関連するQ&A

  • チェックボックス 複数選択 MYSQL

    PHP習い始めたのですがどうしても分からない問題がありましたので 質問をさせて頂きました。 現在チェックボックスで複数選択された情報をMYSQLに反映させようとしているのですがどうしても複数選択された項目の内、一つしかMYSQLに反映されません。 こちらがスクリプトの一部になります。 <span class="checkbox"><input name="check[]" type="checkbox" value="aaa" />aaa</span> <span class="checkbox"><input name="check[]" type="checkbox" value="bbb" />bbb</span> <span class="checkbox"><input name="check[]" type="checkbox" value="ccc" />ccc</span><br /> //MYSQL $sql = "insert into table values('$check[]')"; 配列を使うとまでは調べて分かったのですが、そこからがどうしても 分かりません。どなたご存知になるかたがおりましたら 是非お伺い出来ませんでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 複数のチェックボックスをチェックしたい

    質問させてください。 複数のチェックボックスを項目別に全てチェックするような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を書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

  • チェックボックス + フリーワード検索 PHP&MYSQL

    現在検索画面の作成をしているのですが、分からないことがありましたので 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) 仕様としてはkensaku.phpにチェックボックス(複数選択可)と フリーワードがあり、一つの検索ボタンで検索し結果をresult.phpに表示させようと思っております。データベースはMYSQLです。 検索ボタンが一つしかないため、もしチェックボックスが選択されず、フリーワードだけ入力されたのであれば、それだけで検索。その逆のもし チェックボックスだけ選択されたのであればそれだけで検索。 また両方入力されたのであれば、両方のデータを検索できるように したいと思っております。 フリーワード検索までは出来るようになったのですが、 チェックボックス検索(両方検索・片方のみ検索)などが どうしても出来ません。 どなたかご存知の方ご教授して頂けないでしょうか。 宜しくお願い致します。 こちらがコードになります。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> 2, result.php <?php $sejyutu = $_POST["sejyutu"]; $sejyutu_else = $_POST["sejyutu_else"]; if($sejyutu and sejyutu_else<>''){ //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','aaa','aaaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } $sql = "select * from table where sejyutu_else like'%$sejyutu_else%'"; $result=mysql_query($sql,$int_connect); $rows=mysql_num_rows($result); ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <?php while($row = mysql_fetch_array($result)){ ?> <tr> <td colspan="2"><p class="salon_name"><?php echo $row["name"]; ?></p></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo $row["station"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo $row["address"]; ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo $row["sejyutu"];?></td> </tr> <?php } } ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • チェックボックス 複数選択

    現在PHPを勉強しているのですがどうしてもわからなくなってしまったので 質問をさせて頂きます。 現在自分が作ろうとしているのは 登録フォーム→確認ページ→登録完了ページ(MYSQLに接続)の流れになっております。 その中でチェックボックスでつまずいております。 こちらにそのコードを一部を記載させて頂きます。 どこで困っているかと申しますと、登録フォームから確認ページまでは 複数選択されたチェックボックスを表示されることができたのですが、 確認ページから登録ページに変わる際に文字化けなどをし、 mysqlに接続して登録した際も文字化けになってしまいます。 他にも変数の受け渡しもうまく出来ていないと思います。 自分の中の結論としては確認ページのhiddenあたりが間違ってるのでは ないかと思ってるのですが何度試してみてもうまくいきません。 大変困っており、誰かご存知の方、もしくはこういう風に変更した方がいいとかありましたらご教授をお願い出来ませんでしょうか? 1,登録フォーム <tr> <td>施術(チェックボックス)<br />順番不問</td> <td> <span class="checkbox"><input name="sejyutu[]" type="checkbox" value="aaa" />aaa</span> <span class="checkbox"><input name="sejyutu[]" type="checkbox" value="bbb" />bbb</span> </td> </tr> 2,登録確認ページ $sejyutu = $_POST["sejyutu"]; <?php if (trim($sejyutu) == "" || !isset($sejyutu)){ echo "施術が選択されておりません。"; $flag_sejyutu=0; } elseif (empty($sejyutu)){ echo "施術が選択されておりません"; $flag_sejyutu=0; } else { if(isset($sejyutu) and count($sejyutu)>0){ $sejyutu_value = ""; for($i=0;$i<count($sejyutu);$i++){ if($i == 0){ $sejyutu_value .= $sejyutu[$i]; } else { $sejyutu_value .= " " . $sejyutu[$i]; } } } print mb_convert_encoding(trim($sejyutu_value),"sjis","euc-jp") ; $flag_sejyutu=1; } ?> <?php if($flag_sejyutu==1) { ?> <form action="reg_complete.php" method ="post"> <input type="hidden" name="sejyutu_value[]" value="<?php echo $sejyutu_value; ?>"> } 3,登録完了ページ $sejyutu = $_POST['sejyutu_value']; それからmysqlに接続。

    • ベストアンサー
    • PHP
  • チェックボックスの受け渡し

    以前こちらでも質問をさせて頂き、無事に解決をしたと思ったのですが、 どうにでもできないことが有りましたのでご質問をさせて頂きました。 チェックボックスを使用し、複数選択された項目を 次のページに受け渡す時 例えば -form.php- <span class="checkbox"><input name="sejyutu[]" type="checkbox" value="aaa" />aaa</span> <span class="checkbox"><input name="sejyutu[]" type="checkbox" value="bbb" />bbb</span> -kakunin.php- $sejyutu = $_POST['sejyutu']; if(isset($sejyutu) and count($sejyutu)>0){ $str_sejyutu = ""; for($i=0;$i<count($sejyutu);$i++){ if($i == 0){ $str_sejyutu .= $sejyutu[$i]; } else{ $str_sejyutu .= " " . $sejyutu[$i]; } } } ?> という形でやっているのですが、kakunin.phpで表示がされません。 foreach分も使ってみたのですが、それでもまた表示がされません。 あともう一点あるのですが、例えば form.phpからkakunin.phpに情報を飛ばし、またその情報を修正のために form.phpに戻す場合、チェックボックスで予め選択された項目を 保持したまま戻ることはできるのでしょうか? どなたかお分かりになるかたがいましたらご教授お願いできないでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • チェックボックスのチェック処理

    HTMLでボタン押下時にチェックしたいことがあります。 ■カテゴリーA~Cで、カテゴリー毎に選択できるのは一つのみ  (例)「A1・あ」と「A2・お」が選択時はNG ■カテゴリーは最大2つまで選択可能  (例)「A1・い」と「C1・さ」が選択時はOK    「A1・い」と「B2・く」と「C1・さ」が選択時はNG <html> <head> </head><body> <form> <table border="1"> <tr> <td>A1</td> <td><input type="checkbox" name="chk1" value="1">あ</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">い</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">う</td> </tr> <tr> <td>A2</td> <td><input type="checkbox" name="chk1" value="1">え</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">お</td> </tr> <tr> <td>B1</td> <td><input type="checkbox" name="chk1" value="1">か</td> </tr> <tr> <td>B2</td> <td><input type="checkbox" name="chk1" value="1">く</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">け</td> </tr> <tr> <td>C1</td> <td><input type="checkbox" name="chk1" value="1">さ</td> </tr> <tr> <td>C2</td> <td><input type="checkbox" name="chk1" value="1">し</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">す</td> </tr> </table> <input type="submit" value="チェック"> </form> </body> </html> すみませんがよろしくお願いします。

  • チェックボックスから検索、PHP コード付き

    現在チェックボックスとフリーワード検索をしようしたサイトを作ろうとしているのですが、どうしても仕様通りにいきませんでしたのでここで 質問をさせて頂きました。 検索画面ですが、簡単な2ページ構成になっております。(kensaku.phpとresult.php) コードのどこが間違っているのかが分かりません。 どなたかお分かりになる方がいましたらお伺い出来ませんでしょうか。 宜しくお願い致します。 1,kensaku.php <form action="result.php" method="POST" > <table class="font12" cellpadding="5" cellspacing="10" width="430" align="center"> <tr> <td> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="1" />aaa</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="2" />bbb</span> <span class="checkbox"><input type="checkbox" name="sejyutu[]" value="3" />ccc</span><br /> </td> </tr> <tr> <td><input type="text" name="sejyutu_else" value="フリーワード検索" size="30" /></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="検索する" /></td> <?php //DB接続・選択 if (!$int_connect = @mysql_connect('localhost','bbb','aaa')) { die("can't connect mysql server."); } //データベースに接続 if (!@mysql_select_db("database", $int_connect)) { die("can't use selected database."); } // SQLクエリ $sql = "select * from table"; $where = array(); // sejyutuカラムの条件を調べる if (isset($_POST['sejyutu']) && is_array($_POST['sejyutu'])) { foreach ($_POST['sejyutu'] as $sejyutu) { $where[] = "sejyutu like '%" . mysql_real_escape_string($sejyutu) . "%'"; } } // sejyutu_elseカラムの条件を調べる if (isset($_POST['sejyutu_else']) && strlen($_POST['sejyutu_else'])) { $where[] = "sejyutu_else like '%" . mysql_real_escape_string($_POST['sejyutu_else']) . "%'"; } // 検索キーワードの有無により処理分岐 if (!$where) { echo "検索キーワードを入力して下さい"; } else { // SQL文を生成する $sql .= " where " . implode(' OR ', $where); $res = mysql_query($sql,$int_connect); if (!mysql_num_rows($res)) { echo "<p>該当データがありません</p>"; } else { // TABLEタグを書く while ($row = mysql_fetch_array($res)) { // 各結果をTR,TDタグで整形して表示する ?> <table width="430" cellpadding="5" cellspacing="0" class="font12"> <tr> <td colspan="2"><p class="salon_name"><?php echo mb_convert_encoding(trim($row["salon_name"]),"sjis","euc-jp") ?></p></td> <td><a href="salon_page.php?code=<?php echo $row['id'];?>">詳しくはこちら</a></td> </tr> <tr> <td valign="top"><p class="salon_item">最寄り駅:</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["station"]),"sjis","euc-jp") ?></td> </tr> <tr> <td valign="top"><p class="salon_item">住所:</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["address"]),"sjis","euc-jp") ?></td> </tr> <tr> <td valign="top"><p class="salon_item">施術名</p></td> <td class="salon_detail"><?php echo mb_convert_encoding(trim($row["sejyutu"]),"sjis","euc-jp") ?></td> </tr> <?php } } } ?>

    • ベストアンサー
    • PHP
  • ラジオボタンとテキストボックスで、ボタン選択時のテキストボックスの入力チェックするにはどうしたらよいでしょうか?

    ラジオボタンとテキストボックスの組合わせで使用し、ラジオボタン選択時のテキストボックスの入力チェックをするにはどうしたらよいのでしょうか? 以下はそのhtmlソースになります。 <table border="0" cellspacing="2" cellpadding="0"> <tr> <td><input type="radio" name="addsearch" value="検索エンジン" id="p1"></td> <td colspan="2"><label for="p1"><span class="stress2">検索エンジン</span></label></td> </tr> <tr> <td></td> <td>検索エンジン名</td> <td><INPUT TYPE=text NAME="addsearch1" VALUE="" SIZE=40></td> </tr> <tr> <td><input type="radio" name="addsearch" value="ご紹介で" id="p2"></td> <td colspan="2"><label for="p2"><span class="stress2">ご紹介で</span></label></td> </tr> <tr> <td></td> <td>ご紹介者のお名前をおしえてください。</td> <td><INPUT TYPE=text NAME="addsearch2" VALUE="" SIZE=40></td> </tr> <tr> <td><input type="radio" name="addsearch" value="広告を見て" id="p3"></td> <td colspan="2"><label for="p3"><span class="stress2">広告を見て</span></label></td> </tr> <tr> <td></td> <td>どこの広告ですか?</td> <td><INPUT TYPE=text NAME="addsearch3" VALUE="" SIZE=40></td> </tr> <tr> <td><input type="radio" name="addsearch" value="その他" id="p4"></td> <td colspan="2"><label for="p4"><span class="stress2">その他</span></label></td> </tr> <tr> <td></td> <td>具体的にお願いします。</td> <td><INPUT TYPE=text NAME="addsearch4" VALUE="" SIZE=40></td> </tr> </table> よろしくおねがいいたします。

    • ベストアンサー
    • HTML
  • チェックした行の色を変える

    簡単にできそうかなと思ってやってみたら、泥沼状態。 チェックボックスにチェック入れたときにその行をハイライトさせ、チェックはずすと元に戻るようにしたいのですが。 【チェック入れた時の状態】 <TABLE BORDER="1"> <TR> <TD><INPUT TYPE="CHECKBOX" NAME="CheckBox" VALUE="CheckBox"></TD> <TD></TD> </TR> <TR BGCOLOR="red"> <TD><INPUT TYPE="CHECKBOX" NAME="CheckBox" VALUE="CheckBox" CHECKED></TD> <TD></TD> </TR> <TR> <TD><INPUT TYPE="CHECKBOX" NAME="CheckBox" VALUE="CheckBox"></TD> <TD></TD> </TR> </TABLE>

  • チェックボックス設定の方法教えてください

    チェックボックスの設定方法を教えてください。 項目1.大分類にチェックすると中分類と小分類にもチェックが入る。 項目2.中分類にチェックすると小分類にもチェックが入る。 項目2の設定はわかりますが、項目1の設定がどうしてもできません。 <script language=javascript> function allCheck(obj){ f=obj.form num=obj.name.replace("b","") for(var i=0;i<f.length;i++){ if(f[i].name=="s"+num) f[i].checked=obj.checked; } } </script> <FORM> <TABLE border=0> <TBODY> <TR> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>大分類</TD> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>中分類</TD> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1 rowSpan=3><INPUT onclick=allCheck(this) type=checkbox name=b2>中分類 <P></P></TD> <TD class=color_1><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR></TBODY></TABLE></FORM> すいませんが、教えて下さい。

専門家に質問してみよう