簡體   English   中英

PHP使用函數數組填充HTML選擇

[英]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。 您無需擔心所有這些以及隨之而來的其他問題。

您是否嘗試過執行$locationsprint_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM