こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2007-05-13 15:40:21

QNo.2996565

すぐに回答ほしいです

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

#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でカラムにインサートします。

投稿日時 - 2007-05-13 23:12:14

お礼

gogo-tea様

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

投稿日時 - 2007-05-13 23:47:12

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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}')";
・・・・
}
?>

としてみてください。

投稿日時 - 2007-05-13 23:17:00

補足

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

投稿日時 - 2007-05-13 23:31:43

ANo.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

投稿日時 - 2007-05-13 20:24:57

補足

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

投稿日時 - 2007-05-13 23:04:51

お礼

hrm_mmm様

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

投稿日時 - 2007-05-13 23:50:32

ANo.2

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

投稿日時 - 2007-05-13 16:34:33

ANo.1

まず
<input name="check1" type="checkbox" value="aaa" />
<input name="check2" type="checkbox" value="bbb" />
nameが同じだとそれぞれのデータが取込めません。

SQLは
$sql = "insert into table ('check1') values('$check1')";
インサートするフィールドを指定しましょう!

投稿日時 - 2007-05-13 16:01:02

あなたにオススメの質問