我收到此错误:
警告:在第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;
}
}
答案 0 :(得分: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;
}
这会将您的结果转换为适当的muilti维数组,以便您可以迭代并获取您的信息。
现在您可以像这样使用它:
$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。你不需要担心所有这些以及随之而来的其他问题。
答案 1 :(得分:0)
您是否尝试过print_r()
或var_dump()
$locations
。你的foreach循环没有任何问题,因此getLocationList()
函数很可能返回一个非数组或一个空数组。
Befor 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> ";
}
}
?>