11

チェックすると値を1として渡すチェックボックスのセットがあります。それ以外の場合は値を0として渡します。ただし、チェックされていないチェックボックスの値を「0」として送信する代わりに、送信される値は「NULL」です。

それに応じて値を 0/1 に設定する必要がある次の JS コードがありますが、それでも値は NULL として送信されます。チェックボックスがオフの場合に渡される値が0であることを確認するためにできることはありますか?

$('#cb1, #cb2, #cb3, #cb4').on('click', function ()
    $(this).val(this.checked ? 1 : 0);
});

更新 ここに私のhtmlがあります:

<input type="checkbox" name="cb1" id="cb1" value="1" checked />
<input type="checkbox" name="cb2" id="cb2" value="1" checked />
<input type="checkbox" name="cb3" id="cb3" value="1" checked />
<input type="checkbox" name="cb4" id="cb4" value="1" checked />

デフォルトではすべてチェックされています。

それらの 1 つがチェックされていない場合、MySQL は次のエラーを報告しています。

これは、列が Null にならないように設定されているためです。デフォルト値を 0 に設定しても、送信ボタンをクリックするとエラーが発生します。Not NULL プロパティを削除しようとしましたが、値を 0 として事前入力するのではなく、データベースで入力が NULL でした。

4

5 に答える 5

68

チェックボックスがチェックされていない場合は送信されないため、チェックされていない場合に値を 0 に設定しても意味がありません。常に NULL が返されます。

これを簡単に修正するには、次の 2 つの方法があります。

1) PHP パラメータの NULL は、チェックボックスがオフになっていることを意味すると仮定します。チェックボックスがページに常に存在するとは限らない場合、これは問題になる可能性があります。調べてみると、チェックボックスの数が可変なので、これはおそらく機能しません。

2) チェックボックスの前に、値が 0 のチェックボックスと同じ名前の非表示の入力を追加します。チェックボックスがオフの場合、隠しフィールドの値が使用され、チェックされている場合、チェックボックスの値が使用されます。

<input type="hidden" name="checkbox_1" value="0">
<input type="checkbox" name="checkbox_1" value="1">

注: 名前が配列形式の場合 (つまり、角かっこが含まれている場合)、これは機能しません。非表示のフィールドも配列カウントをインクリメントするからです。

于 2012-12-28T09:26:40.217 に答える
1

このようにスクリプトを変更してください。それが役に立てば幸い。

$(document).ready(function(){
    $('#cb1, #cb2, #cb3, #cb4').click(function(){
        $(this).val(this.checked ? 1 : 0);
    });
});
于 2012-12-28T09:24:17.847 に答える
0

これは、チェックボックスの選択を解除した場合、値がないため、値が null になるためです。w3cschools からのこの例を確認してください。

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox

何も選択していない場合、値は送信されません。ただし、何かを選択すると、その値が送信されます。

本当に真/偽の値が必要な場合は、それをだます必要があります..そのため、checked 属性の状態を送信すると、そのトリックが行われます。

$('#id:checked').length
于 2012-12-28T09:26:33.777 に答える
0

あなたはこれを試すことができます、それはあなたを助けるかもしれません. フォームが次のようになっているとします。

<tr>
  <td>Active</td>
  <td><?php echo form_checkbox('active',set_value('active',$student->active),TRUE); ?>  </td>
</tr>

codeigniter コントローラーを次のように設定します。

// Set up the form
$rules = $this->student_m->rules;
$this->form_validation->set_rules($rules);

// Process the form
if ($this->form_validation->run() == TRUE) {
   $data = $this->student_m->array_from_post(array(
           'active',
           'name'
   ));

   // checking is checkbox is checked or not
   ($data['active'] == TRUE)?($data['active'] = 1) : ($data['active'] = 0);

   $this->student_m->save($data, $id);
   redirect('admin/student');
}
于 2016-11-25T19:10:17.740 に答える
0

jQuery では、checked セレクターを使用してチェックボックスの状態を取得できます。チェックすると、長さに 0 より大きい値が含まれます。例:

$('#id:checked').length

したがって、checkbox 要素の値を 0 に設定する必要はありません...

于 2012-12-28T09:24:02.217 に答える