由于我编写的用于在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"/>
有关如何处理该问题的任何建议?在一个单一复选框的情况下,我会检查帖子值是否设置为(),但是因为我通过循环获取名称和值...我没有想法...
答案 0 :(得分:6)
使用values变量通过Ajax发送数据
/* 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()
);
答案 1 :(得分:1)
您可以使用数组来定义复选框及其默认值:
{
"DLSet": {
"results": [
{
"__metadata": {
"id": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/SEARCH_DLSet(9168)",
"uri": "http://hvw-sapdev01.oms-sap.omnisys.de:8000/sap/opu/odata/SAP/Z_TBRKNPRO_SEARCH_DL_SRV/SEARCH_DLSet(9168)",
"type": "Z_TBRKNPRO_SEARCH_DL_SRV.SEARCH_DL"
},
"Abrechungsstatus": "",
"Contractnr": "",
"DatumHigh": "",
"DatumLow": "",
"Login": "",
"Mandant": "",
"Mitarbeiter": "",
"Name": "",
"Psp": "",
"Client": "001",
"Id": 9168,
"Impdate": "",
"Ldatum": "20130705",
"Lperiode": "",
"PersNr": "49056462",
"PersName": "J",
"PersGrade": "",
"LocalGradeKey": "",
"LocalGradeDesc": "",
"PersKstN": "",
"PersKstB": "",
"AufKstNr": "",
"AufKstBe": "",
"AufNr": "",
"AufBez": "",
"Bemerkung": "",
"DebitorId": "0000037503",
"DebitorBez": "G",
"ProdCodeNr": "T130",
"ProdCodeBez": "Allg. Steuerberatung von Unternehmen",
"IndustCodeNr": "99999",
"IndustCodeBez": "H",
"ArbZ": "5.0000000000000000E-01",
"ScaleRate": "280.0000",
"MarketRate": "280.0000",
"ScaleValue": "0.0000",
"CostRate": "0.0000",
"CukyCostRt": "",
"Fakturiert": "",
"FakeLdate": "",
"Confidential": "",
"KontraktNr": "5000059735",
"PrctrHead": "",
"Honorar": "140.0000",
"Kosten": "140.0000",
"SatzNeu": "280.0000",
"HonorarNeu": "140.0000"
},
{
"__metadata": {}
}
]
}
}
答案 2 :(得分:1)
使用具有相同名称的隐藏字段前面的复选框可以解决问题。如果选中该框,则该值将被复选框的值覆盖,如果没有,则返回第一个值。
<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 [&#39; c_name1&#39;](如果提交)将返回0或1,具体取决于是否选中该复选框。请注意,该名称未声明为数组 - 根据复选框状态返回1或2个值。
答案 3 :(得分:0)
$data['c_name1'] = ( isset($data['c_name1']) )? $data['c_name1']: 0;