2016-05-18 11 views
1

複数のチェックボックスの値をデータベースの1つの列にチェックインすると、その値を挿入しようとしています。ここで複数のチェックボックスをデータベースの列に挿入する

は1と2がチェックされている場合、唯一の2は私のデータベースに入ります、...私が持っているもの何らかの理由で

if(!empty($_POST['dyuhdb'])) { 
    foreach($_POST['dyuhdb'] as $dyuhdb) { 
     $dyuhdb . ","; 
    } 
} 

$sql = "INSERT INTO MRF (Q1) VALUES ('". $dyuhdb ."')"; 

<div class="checkbox"> 
    <label><input type="checkbox" name="dyuhdb[]" value="1">1</label> 
</div> 

<div class="checkbox"> 
    <label><input type="checkbox" name="dyuhdb[]" value="2">2</label> 
</div> 

<div class="checkbox"> 
    <label><input type="checkbox" name="dyuhdb[]" value="3">3</label> 
</div> 

のですか?

私は間違っていますか?

+0

なぜ名前が 'dyuhdb []'ですか? –

+0

フォーム内の各質問の最初の文字です。複数のチェックボックスグループを持つ非常に長いフォームですが、それぞれの変更を複製できるので、私は1つの例しか提供していません。 –

+1

チェックボックスの値を1つの列に保存することをお勧めしません。 –

答えて

1

問題は、理由は次の行では、変数$dyuhdbを上書きしているforeachループの各反復で

$dyuhdb . ","; 

です。代わりに、単純に文字列(,)で配列要素を結合するためにimplode()機能を使用して、このように、あなたのINSERTクエリでそれを使用する:

if(isset($_POST['dyuhdb']) && count($_POST['dyuhdb'])){ 
    $checkbox_values = implode(",", $_POST['dyuhdb']); 
    $sql = "INSERT INTO MRF (Q1) VALUES ('". $checkbox_values ."')"; 

    // execute your query 
} 

追記:今、あなたのクエリがあるのでについてprepared statements学びますSQLインジェクションに敏感です。また、how you can prevent SQL injection in PHPを参照してください。

+0

これはうまくいくようです。 –

+0

@ D.Ashbridgeちょうどもう一つ、チェックボックスの値を引用する必要はありません。 'implode("、 "、$ _POST ['dyuhdb'])'はうまくいくでしょう。私は私の答えを更新しました。 –

+0

私はすでにそれを見つけました、ありがとう! –

0

クエリには,が追加されます。あなたは、ポストデータをループする代わりに、implodeの組み込み関数を使って同じことを避けることができます。

if(!empty($_POST['dyuhdb'])) { 
    /* foreach($_POST['dyuhdb'] as $dyuhdb) { 
     $dyuhdb . ","; 
    }*/ 

    $dyuhdb = implode(",",$_POST['dyuhdb']); 
} 
関連する問題