[英]PHP populate html select with array from function
好,所以,這似乎是一個愚蠢的問題。 我在其他線程中瀏覽了此東西,但找不到我想要的東西。
我收到此錯誤:
警告:第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>
它沒有填充,只是引發錯誤。 有什么想法嗎?
OK EDIT這是我在單獨的函數中提取數據的方式:
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();
}
好的,您的類/庫似乎不是一個完整的庫,因此,您必須添加自己的代碼以對其進行增強。 為了使這項工作如您所願,請將此函數添加到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。 您無需擔心所有這些以及隨之而來的其他問題。
您是否嘗試過執行$locations
的print_r()
或var_dump()
。 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> ";
}
}
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.