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

时间:2016-03-29 08:06:36

标签: php mysql ajax checkbox

由于我编写的用于在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"/>

有关如何处理该问题的任何建议?在一个单一复选框的情况下,我会检查帖子值是否设置为(),但是因为我通过循环获取名称和值...我没有想法...

4 个答案:

答案 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;