11

我有一组复选框,当它们被选中时,它们将值传递为 1,否则它们将值传递为 0。但是,不是将未选中复选框的值发送为“0”,而是发送的值为“NULL”。

我有以下 JS 代码,应该相应地将值设置为 0/1,但是该值仍然作为 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 />

默认情况下它们都被选中。

如果其中之一未选中,MySQL 将报告以下错误:0SQLSTATE[23000]:完整性约束违规:1048 列 'ColumnName' 不能为空。

这是因为列设置为不设置为 Null。即使我已将默认值设置为 0,一旦我单击提交按钮,我仍然会收到错误消息。我尝试删除 Not NULL 属性,但不是将值预填充为 0,而是在数据库中输入为 NULL。

4

5 回答 5

68

如果未选中复选框,则不会发送它,因此如果未选中复选框,则将其值设置为 0 无济于事 - 它始终返回 NULL。

有两种方法可以轻松解决此问题:

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

使用 jQuery,您可以使用选中的选择器来获取复选框的状态。检查时,长度包含大于 0 的值,例如:

$('#id:checked').length

所以你不需要将复选框元素的值设置为0...

于 2012-12-28T09:24:02.217 回答
0

那是因为如果您取消选中该复选框,则该值为 null,因为它没有任何值。从 w3cschools 检查这个例子:

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

如果您没有选择任何内容,则不会提交该值。但是如果你选择了一些东西,它的值将被提交。

如果你真的想要真/假值,你需要欺骗它..所以发送检查属性的状态就可以了。

$('#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 回答