Php 未选中的复选框返回空值

Php 未选中的复选框返回空值,php,jquery,html,mysql,cordova,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: <inp

我有一组复选框,当选中时,它们将值传递为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,但单击submit按钮后仍然会出现错误。我试图删除NOTNULL属性,但是没有将值作为0进行预填充,数据库中的输入为NULL。

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

$('#id:checked').length

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

像这样更改脚本。希望有帮助。

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

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

如果未选择任何内容,则不会提交该值。但是,如果您选择了某个内容,它的值将被提交

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

$('#id:checked').length

如果复选框未选中,则不会发送该复选框,因此如果未选中,则将其值设置为0不会有任何帮助-它将始终返回NULL

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

1) 假设PHP参数中的NULL表示复选框未选中。如果该复选框不总是存在于页面上,则可能会出现问题。听起来,复选框的数量是可变的,所以这可能不起作用

2) 在复选框之前添加一个与复选框同名且值为0的隐藏输入。如果复选框未选中,将使用隐藏字段值,如果选中,将使用复选框值

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


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

您可以尝试一下,它可能会对您有所帮助。假设您的表单如下所示:

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

你也可以添加你的HTML吗?考虑一下改变你的HTML:<代码> <代码>。这应该有效,但是你丢失了<代码>。{在您的javascript中…这里有一个小问题:实际上,如果您的名称是数组形式,只需在括号中包含索引键。然后您就可以像数组一样设置输入名称。@axiom82您没有得到它。是的,您可以这样做,但选中复选框后,您将向目标数组添加两个元素,因此您将如果索引与复选框失去了对应关系,那么您就不会有任何有用的信息来指示数组的索引是指已检查项还是未检查项。不过,您可以对生成的数组进行一些简单的后处理来避免这种情况。很好的解决方案。对我帮助很大,特别是第二个。谢谢!如果我必须选中多个复选框值Linke我认为这应该很好,对于missing将获得0,对于check,我将获得感谢--更新它不工作,添加另一个,因为它的数组
// 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');
}