0

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

生成号码()

 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;
            }
        }

显示.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; 
        ?>

主.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>
4

2 回答 2

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

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

也许您正在尝试这样做:

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

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

于 2012-07-30T07:45:24.970 回答
0

警告:

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

意味着您有一个未提供数组的 foreach 循环。因此这意味着 $nums 要么是空的,要么是空的,或者不是一个数组。

因此,我建议更改线路:

$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 包含任何数据时才打印它(并且另外是一个数组)。

于 2012-07-30T08:38:19.937 回答