未选中复选框返回空值

时间:2012-12-28 09:18:08

标签: php jquery html mysql cordova

我有一组复选框,当它们被选中时,它们将值传递为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。

5 个答案:

答案 0 :(得分:52)

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

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

1)假设PHP params中的NULL意味着取消选中该复选框。如果页面上并不总是存在该复选框,则可能会出现问题。通过它的声音,有不同数量的复选框,所以这可能不起作用。

2)添加一个与复选框同名的隐藏输入,其值为0 BEFORE 复选框。如果取消选中该复选框,将使用隐藏字段值,如果选中则将使用复选框值。

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

注意:如果你的名字是数组形式(即它们中有方括号),这将不起作用,因为隐藏字段也会增加数组计数。

答案 1 :(得分:1)

改变你的脚本。希望它有所帮助。

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

答案 2 :(得分:0)

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

$('#id:checked').length

因此,您不需要将checkbox元素的值设置为0 ...

答案 3 :(得分:0)

这是因为如果您取消选中该复选框,则该值为null,因为它没有值。从w3cschools查看此示例:

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

如果您未选择任何内容,则不会提交该值。但如果您选择了某些内容,则会提交其值。

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

$('#id:checked').length

答案 4 :(得分: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');
}