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> ";
}
}
?>
好的,所以,这似乎是一个愚蠢的问题。我已经查看了与此相关的其他线程,但没有找到我要找的东西。
我收到这个错误:
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> ";
}
}
?>