0

好的,所以,这似乎是一个愚蠢的问题。我已经用这个东西查看了其他线程,但我没有找到我正在寻找的东西。

我收到此错误:

警告:在第 118 行的 entry.php 中为 foreach() 提供的参数无效

第 118 行是我在这里使用的 foreach:

<select id="Location" name="Location" class="text">
<option selected="selected"> - Choose Location - </option>
<?php 
    $locations = getLocationList();//this returns an array from separate function
    foreach($locations as $location) {//<-Line 118
        echo "<option value=". $location['locationID'] .">".$location['locationName']."</option> ";
    }
?>
</select>

它没有填充,它只是抛出错误。想法?

好的编辑 这就是我在单独的函数中提取数据的方式:

function getLocationList()
{
    $mydb = new myDBC();//<-this calls my secure connection class
    $table = "LocationTable";
    $sql = "SELECT `locationID`, `locationName` FROM " .$table;
    $rez = $mydb->runQuery($sql);//<-this connects runs my query
    if(isset($rez))
    {
        $newRow = mysqli_fetch_array($rez);//<-is this not returning an array?
        return $newRow;
    }
}
4

2 回答 2

1

当您遇到类似的错误Warning: Invalid argument supplied for foreach()时,字面意思是您在其中使用的任何变量foreach()都不是数组也不是对象。验证它$locations是数组还是对象。一个你解决它,它会工作。

好的,检查您的更新后,尝试进行以下更改:

改变这个:

if (isset($rez)) {
    $newRow = mysqli_fetch_array($rez); //<-is this not returning an array?
    return $newRow;
}

对此:

if (isset($rez)) {
    return $rez->fetch_assoc();
}

好的,看起来您的类/库不是一个完整的库,因此您必须添加自己的代码来增强它。为了使这项工作如您所愿,请在您的 DBClass.php 中的某处添加此函数

function convert_result_to_arr($result) {
    if ($result) {
        while ($row = $result->fetch_assoc()) {
            $arr[] = $row;
        }
    }
    return $arr;
}

这会将您的结果转换为适当的多维数组,以便您可以迭代并获取您的信息。

现在你可以像这样使用它:

$rez = $mydb->runQuery($sql); //<-this connects runs my query
$rez_converted = $mydb->convert_result_to_arr($rez);
if(isset($rez_converted )){
        return $rez_converted ;
}

现在您可以像最初想要的那样进行迭代:

foreach($locations as $location) {//<-Line 118
        echo "<option value=". $location['locationID'] .">".$location['locationName']."</option> ";
    }

我还强烈建议您过渡到 MVC 框架。我推荐 Codeigniter 开始。您无需担心所有这些以及随之而来的其他问题。

于 2015-06-15T17:52:00.497 回答
0

您是否尝试过做 aprint_r()var_dump()of $locations。您的 foreach 循环没有任何问题,因此该getLocationList()函数很可能返回非数组或空数组。

foreach()你可以检查之前count($locations)

    <?php 
    $locations = getLocationList();//this returns an array from separate function
    if(count($locations)>0)
    {
        foreach($locations as $location) 
        {
              echo "<option value=". $location['locationID'] .">".$location['locationName']."</option> ";
        }
    }
    ?>
于 2015-06-15T17:52:10.567 回答