PHP使用函数中的数组填充html select

时间:2015-06-15 17:45:10

标签: php dropdownbox invalid-argument

好的,所以,这似乎是一个愚蠢的问题。我已经用这个东西浏览了其他主题并且我没有找到QUITE我正在寻找的东西。

我收到此错误:

  

警告:在第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;
    }
}

2 个答案:

答案 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> ";
        }
    }
    ?>