Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过ajax发送未选中的复选框值_Php_Mysql_Ajax_Checkbox - Fatal编程技术网

Php 通过ajax发送未选中的复选框值

Php 通过ajax发送未选中的复选框值,php,mysql,ajax,checkbox,Php,Mysql,Ajax,Checkbox,我有一个复杂的问题,因为我写了一个通用函数来在MySQL中保存表单数据。 所有表单在序列化后都通过Ajax发送: $('.suggestSave, .buttonSave').on('submit', function(e) { e.preventDefault(); var data = $(this).serialize(); ... 然后,我通过循环访问这些值并创建保存在数据库中的数据来获取所有POST值: $data =

我有一个复杂的问题,因为我写了一个通用函数来在MySQL中保存表单数据。 所有表单在序列化后都通过Ajax发送:

$('.suggestSave, .buttonSave').on('submit', function(e) {
        e.preventDefault();
        var data = $(this).serialize();
        ...
然后,我通过循环访问这些值并创建保存在数据库中的数据来获取所有POST值:

        $data = array();
        foreach ($_POST as $param_name => $param_val) {
          if($param_name != 'action' && $param_name != 'patient' && $param_name != 'jsaction') {
            $name = sanitize($param_name);
            $value = sanitize($param_val);
            $data[$name] = $value;
         }
     }
当然,不会发送未选中的复选框。问题是如果它是空的,我想为这个复选框存储Int值0而不是1。 在HTML方面,我有一个经典的语法

   <input type="checkbox" value="1" name="c_name1" checked/>
   <input type="checkbox" value="1" name="c_name2"/>


对如何处理这个问题有什么建议吗?在一个复选框的情况下,我会检查post值是否为set(),但由于我通过循环获取名称和值。。。我没有主意了…

使用values变量通过Ajax发送数据

$data['c_name1'] = ( isset($data['c_name1']) )? $data['c_name1']: 0;
/* Get input values from form */
values = jQuery("#myform").serializeArray();

/* Because serializeArray() ignores unset checkboxes and radio buttons: */
values = values.concat(
        jQuery('#myform input[type=checkbox]:not(:checked)').map(
                function() {
                    return {"name": this.name, "value": this.value}
                }).get()
);

可以使用数组定义复选框及其默认值:

$checkboxes = array(
    'c_name1' => 0,
    'c_name2' => 0,
);

$data = array();

foreach ($_POST as $param_name => $param_val) {
    if($param_name != 'action' && $param_name != 'patient' && $param_name != 'jsaction') {
        $name = sanitize($param_name);
        $value = sanitize($param_val);
        $data[$name] = $value;
    }
}

$data = array_replace($checkboxes, $data);

在复选框前面加上一个同名的隐藏字段可以解决这个问题。如果选中该复选框,则该值将被复选框的值覆盖,如果未选中,则返回第一个值

   <input type='hidden' value="0" name="c_name1"/>
   <!-- This will be overridden if the following checkbox is checked  -->
   <input type="checkbox" value="1" name="c_name1" checked/>

   <input type='hidden' value="0" name="c_name2"/>
   <input type="checkbox" value="1" name="c_name2"/>


document.form.c_name1或$_POST['c_name1'](如果已提交)将返回0或1,具体取决于是否选中该复选框。请注意,名称未声明为数组-根据复选框状态返回1或2个值。

如我所说,如果代码必须在几个复选框上工作,我会这样做。在这种情况下,我不知道输入的名称,可能会有数百个(而且会有…)。是的,但这必须再次手动完成。无论如何,谢谢,在客户端处理问题的解决方案似乎更适合我正在尝试做的事情!当您使用jquery.ajax序列化表单数据时,这实际上不起作用,因为它发送c_name1=0和c_name1=1。php代码处理post数据的方式会产生错误。在一般情况下,你当然是绝对正确的!为什么不直接传递
jQuery('#formID').serialize()我相信它会覆盖所有字段?@techie_28 jQuery serialize非常类似于浏览器在将标准表单附加到请求中的查询字符串或POST正文之前对其进行序列化的方式。未选中的复选框不包括在浏览器中,这很有意义,因为它们有一个布尔状态——它们要么由用户选择(包括),要么不由用户选择(不包括)。我相信jQuery serialize包含未选中的复选框,如
chkBox1=true&chkBox2=&chkBox3=true
假设选中了第1个和第3个复选框,但第2个未选中。尽管如此,这是Avinash提出的可爱解决方案:)