Php 通过ajax发送未选中的复选框值
我有一个复杂的问题,因为我写了一个通用函数来在MySQL中保存表单数据。 所有表单在序列化后都通过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 =
$('.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提出的可爱解决方案:)