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

PHP populate html select with array from function

好的,所以,这似乎是一个愚蠢的问题。我已经查看了与此相关的其他线程,但没有找到我要找的东西。

我收到这个错误:

Warning: Invalid argument supplied for foreach() in entry.php on line 118

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

当你遇到像 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();
}

好的,您的 class/library 似乎不是一个完整的库,因此您必须添加自己的代码来增强它。为了使它按您希望的方式工作,请在 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 开始。您无需担心所有这些以及随之而来的其他问题。

您是否尝试过 print_r()var_dump() $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> ";
        }
    }
    ?>