• ベストアンサー

チェックボックス複数選択 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のデータベースに移行できる方法をご存知の方お伺い出来ませんでしょうか。 宜しくお願い致します。

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

  • ベストアンサー
  • 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% (2127/6290)
回答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