传递给foreach()循环的无效参数?

时间:2012-07-30 07:43:53

标签: php javascript html

我在display.php中收到以下错误**警告:为foreach()提供的参数无效。我试图在我的显示功能中循环遍历这些数字,并从Main生成每个数字。当我回显display.php时,它会输出nums [0] = $ displayid nums [1] = $ displayid,我想将$ displayid传递给我的查询语句。

generate_numbers()

 var rndNums = new Array(16,17,18,19,20,21,22,23,24,25,26,27,28);
        var generate_numbers = function()
        {
            for(var i=0; i < 13; i++)
            {
                var idx = Math.floor(Math.random()*rndNums.length);
                var rndNum = rndNums[idx];
                rndNums[idx] = rndNums[rndNums.length - 1];
                rndNums.pop();
                document.getElementsByName("nums[]").item(i).value=rndNum;
            }
        }
  

Display.php的

$nums = isset($_POST['nums']); // array
              foreach($nums as $key => $displayid)
                        {
                            echo 'nums['.$key.']='.$displayid."<br>\n";
                        }


        $stmt->bind_param("i", $displayid);
        $stmt->execute();
        $stmt->bind_result($image);
        $stmt->fetch();
        header("Content-Type: image/jpeg");
        echo $image; 
        ?>

  

main.html中

<form id="numberForm" action="display.php" method="POST">
        <input type="hidden" name="nums[]">
        <input type="hidden" name="nums[]">

    </form>
    <button onClick="generate_numbers();document.getElementById('numberForm').submit()">submit</button>

2 个答案:

答案 0 :(得分:3)

$nums = isset($_POST['nums']); // array

返回一个布尔值(无论是否设置变量),而不是数组。

也许您正在尝试这样做:

$nums = isset($_POST['nums']) ? $_POST['nums'] : array(); // array

另外,请注意,您不应在图像数据之前回显文本,否则会破坏您的响应。查询中的$display_id将是循环中的最后一个

答案 1 :(得分:0)

警告:

  

**警告:为foreach()提供的参数无效。

表示你有一个没有提供数组的foreach循环。因此意味着$ nums是空的,null或者不是数组。

因此我建议更改这些行:

$nums = isset($_POST['nums']); // array
foreach($nums as $key => $displayid)
{
    echo 'nums['.$key.']='.$displayid."<br>\n";
}

要:

$nums = isset($_POST['nums']); // array
if (isset($nums) && is_array($nums))
{
    foreach($nums as $key => $displayid)
    {
        echo 'nums['.$key.']='.$displayid."<br>\n";
    }
}

这样就可以避免警告,只有在包含任何数据时才会打印nums(并且在adition中 是一个数组)。