【问题标题】:Invalid argument supplied for foreach() AJAX to PHP为 foreach() AJAX 提供给 PHP 的参数无效
【发布时间】:2014-07-27 04:30:14
【问题描述】:

大家好,我正在尝试通过 AJAX 将表单字段值作为数组传递到 PHP 文件,然后将数据写入 mysql 数据库。

我的标准表单包含一组字段条目:

<input type="text" name="rName[]">
<input type="text" name="rDateS[]">
<input type="text" name="rDateF[]">
<input type="text" name="rCost[]">

然后我在点击时将这些值推送到我的 php 文件中

$("#addRates_Submit").click(function() { 

    var rName = $('#rName').val();
    var rDateS = $('#rDateS').val();
    var rDateF = $('#rDateF').val();
    var rCost = $('#rCost').val();

        var proceedc = true;

if (proceedc)
{
 //Ajax post data to server
        $.ajax({
               url: "myphpfile",
               type:"POST",
          data: {
                            "rName":rName,"rDateS":rDateS,"rDateF":rDateF,"rCost":rCost},

                dataType: "text",
                success:function(data) {

                // This outputs the result of the ajax request
                    console.log(data);
                    $('#resultDiv').html('<center><p style="color:#ffffff;">Rates Added.</p></center>');

                },
                error: function(errorThrown){
                    console.log(errorThrown);
                    $('#resultDiv').html('A problem has occurred.' + errorThrown.responseText);
                    return false;
                }  


}); // end ajax


} // end process

}); // end rates submit click

PHP 文件:

$rName      = filter_var($_POST["rName"], FILTER_SANITIZE_STRING);
$rDateS      = filter_var($_POST["rDateS"], FILTER_SANITIZE_STRING);
$rDateF      = filter_var($_POST["rDateF"], FILTER_SANITIZE_STRING);
$rCost      = filter_var($_POST["rCost"], FILTER_SANITIZE_STRING);


foreach($rName as $key => $n ) {

$oaQuery="INSERT INTO property_rates (pID,rName,rDateS,rDateF,rCost) VALUES     ('$pInsertID','$n','$rDateS[$key]','$rDateF[$key]','$rCost[$key]')";
$oaResult=mysql_query($oaQuery);

}

从控制台日志中我收到以下错误:

在第 44 行为 foreach() 提供的参数无效。我尝试添加 is_array($rName) 并消除了错误,但数组没有向数据库发布任何内容。是否可以通过 ajax 提交表单字段数组,然后让 php 知道它是什么,或者我需要让数组出现在 jquery 端,然后将该 jquery 数组数据传递给 php 数组。

如果我将这些插入作为单个查询而不是在数组中进行,则可以正常工作。但它就像阵列从未真正被构建。 (旁注:我的表单会在用户每次添加字段时动态添加字段,并相应地将其标记为 rName[]、rDateS[]、rDateF[] 和 rCost[]。

【问题讨论】:

  • $('#rName') 之类的选择器不适用于您的输入元素。应该是$("input[name='#rName[]']")

标签: php jquery arrays


【解决方案1】:

我认为您的代码存在一些问题。

首先,如果您使用 $('#rName'),您只能有 1 个输入,因为 id 必须是 uniq。 其次,如果你使用 $('.rName') 你可以有很多同一个类的输入,但是代码

var rName = $('#rName').val();

只返回第一个输入字段的值。 最后,您只能将值作为文本获取,PHP 只会接收一个变量,而不是数组。

解决方案应该是通过所有输入字段并创建一个这样的字符串:

var rname = '';
$(".rName").each(function() {
        rname = rname = '&rname[]='+$(this).val();
    }
);

【讨论】:

  • 谢谢!我正在实施这一点以及上述 cmets 并让你们都知道。感谢您为我指明正确的方向。
  • 好奇当我实现这个时,它如何影响我的 AJAX 数据调用。
  • var rname = ''; $(".rName").each(function() { rname = rname = '&rname[]='+$(this).val(); }); var rdates = ''; $(".rDateS").each(function() { rdates = rdates = '&rdates[]='+$(this).val(); }); var rdatef = ''; $(".rDateF").each(function() { rdatef = rdatef = '&rdatef[]='+$(this).val(); }); var rdatef = ''; $(".rCost").each(function() { rcostf = rcost = '&rcost[]='+$(this).val(); });
  • 当前:数据:{"rName":rName,"rDateS":rDateS,"rDateF":rDateF,"rCost":rCost},数据类型:“文本”,
  • 我应该把它改成:data:{"rName":rname,"rDateS":rdates, etc ...}?
【解决方案2】:

这个错误意味着:

  • 您的变量不是数组
  • 或者它是一个数组但它是空的

这样做:

if (is_array($rName) && $rName) {
    foreach ($rName as $key => $n) {
       $oaQuery = "INSERT INTO property_rates (pID,rName,rDateS,rDateF,rCost) 
       VALUES('$pInsertID','$n','$rDateS[$key]','$rDateF[$key]','$rCost[$key]')";
        $oaResult = mysql_query($oaQuery);
    }
}

并认为您的 jQuery 选择器是错误的,这是因为您的变量 (rName) 是 empty&lt;input name='rName'&gt; 的正确选择器是:

jQuery('input[name="rName"]');

【讨论】:

  • 谢谢!我会实施这个,看看它在哪里得到我)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2017-04-25
  • 2023-03-10
  • 1970-01-01
  • 2018-10-06
  • 2013-12-25
相关资源
最近更新 更多