【问题标题】:how to pass checkbox array to php from FormData如何将复选框数组从 FormData 传递给 php
【发布时间】:2018-11-12 04:45:57
【问题描述】:

在FormData的情况下,复选框数组不能通过ajax传递给php。以下脚本在未使用 FormData 的情况下工作正常。所以我认为问题出在 FormData 中附加或从中传递时。它返回invalid arguments supplied for foreach()

复选框不是表单元素的一部分,所以

  <input type="checkbox" id="menu" name="menu[]" value="1">
  <input type="checkbox" id="menu" name="menu[]" value="2">
  <input type="checkbox" id="menu" name="menu[]" value="3">

  <form id="form">
  ...........
  </form>

Jquery 和 ajax

$(document).on('submit', '#form', function(e){
    e.preventDefault();
    var navid = [];
        $("[name='menu[]']:checked").each(function (i) {
        navid[i] = $(this).val();
    });
    if (navid.length === 0){ //tell you if the array is empty
        alert("Please Select atleast one checkbox");
    }
    else {
    var formData = new FormData(this);
    formData.append('navid', navid);
    $.ajax({
        type: 'POST',
        url: 'upload.php',
        data: formData,
        contentType: false,
        cache: false,
        processData:false,
        success: function(data){
            alert(data);
        }
    });
    }
});

PHP

foreach ($_POST["navid"] AS $key => $item){               
    $query1 =$con->prepare("INSERT INTO menu(cid, title, en_title) VALUES (:navid, :menuin, :menueng)");
    $query1->bindParam(':menunin',$_POST["menunin"][$key]);
    $query1->bindParam(':menueng',$_POST["menueng"][$key]);
    $query1->bindParam(':navid',$item);
    $query1->execute();
    echo 'Menu has inserted';     
}

【问题讨论】:

  • 你的代码很完美。工作正常。见小提琴codepen.io/creativedev/pen/yEYped。在网络标签中查看
  • 不是问题,但您不应该只准备一次而不是让prepare() 在循环中吗?
  • @BhumiShah,但它从 php 返回 invalid arguments supplied for foreach()。请看php代码,可以吗?
  • 做一个print_r($_POST['navid']); 似乎数组无效

标签: php jquery ajax checkbox form-data


【解决方案1】:

是你的 php 代码中的问题:

您传递的是逗号分隔值,所以首先分解并使用

$data = explode("," ,$_POST["navid"]);
foreach ($data AS $key => $item){
    $query1 =$con->prepare("INSERT INTO menu(cid, title, en_title) VALUES (:navid, :menuin, :menueng)");
    $query1->bindParam(':menunin',$_POST["menunin"][$key]);
    $query1->bindParam(':menueng',$_POST["menueng"][$key]);
    $query1->bindParam(':navid',$item);
    $query1->execute();
    echo 'Menu has inserted';
}

【讨论】:

  • 谢谢,在爆炸后,foreach 子句可以工作,但在Only variables can be passed by reference$query1-&gt;bindParam(':menunin',$_POST["menunin"][$key]) 处生成以下错误;我尝试了很多,但是为什么会出现这个错误?
  • 在变量中取 $_POST["menunin"][$key] 和 $_POST["menueng"][$key] 并将变量传递给 bindparam 值
猜你喜欢
  • 2017-07-24
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2020-04-09
  • 2017-09-03
  • 2020-06-24
相关资源
最近更新 更多