2015-03-31 56 views
0

我一直在試圖學習一些PHP。我試圖打印出我的數據庫的內容。我一直在跟着一個教程,但遇到以下警告我根本無法轉移。PHP foreach MVC Warning

警告

Warning: Invalid argument supplied for foreach() in /Applications/XAMPP/xamppfiles/htdocs/Lab10/app/views/View.php on line 20 

Foreach循環

$HTMLItemList = ""; 
foreach ($this->model->itemList as $row) 
    $HTMLItemList .= "<li><strong>" . $row ["title"] . ": </strong>" . $row ["price"] . "<blockquote>" . $row ["description"] . "</blockquote></li>"; 
$HTMLItemList = "<ul>" . $HTMLItemList . "</ul>"; 

型號 - > itemList中

public$itemList=null; 
public function prepareItemList() { 
    $this->ItemList = $this->itemsDAO->getItems(); 
} 

itemsDAO-> getItems()

public function getItems() { 
    $sqlQuery = "SELECT *"; 
    $sqlQuery .= "FROM items"; 
    $sqlQuery .= "ORDER BY items.title;"; 

    $result = $this->getDbManager() -> executeSelectQuery ($sqlQuery); 
    return $result; 
} 
+0

您的項目列表爲空或壞的類型,你確定你是prepareItemList()的foreach之前和itemList中是數組打電話? – zdeniiik 2015-03-31 10:57:58

+0

上面的代碼是我一直在做的,我應該在我的foreach循環之前調用prepareItemList()幾行嗎? – patrick 2015-03-31 11:01:25

+0

是的,我想。在訪問itemList之前必須調用prepareItemList() – zdeniiik 2015-03-31 11:03:39

回答

0

試試這個PLS

$this->model->prepareItemList(); 
$HTMLItemList = ""; 
foreach ($this->model->itemList as $row) 
    $HTMLItemList .= "<li><strong>" . $row ["title"] . ": </strong>" . $row ["price"] . "<blockquote>" . $row ["description"] . "</blockquote></li>"; 

public $itemList=null; 
public function prepareItemList() { 
    $this->itemList = $this->itemsDAO->getItems(); 
} 
+1

感謝您的支持! – patrick 2015-03-31 11:29:18

+0

不客氣。您必須先調用prepare函數,然後使用itemList,否則itemList始終爲空。 – zdeniiik 2015-03-31 11:35:43

0

的變量,PHP嘗試對在foreach遍歷只是不是陣列。嘗試到var_dump()它來檢查。

您可以在模型上將array()設置爲itemList屬性的默認值,這樣如果您的初始化方法未被調用,則您的foreach不會引發警告。

你在這裏做錯誤是你getItems方法被調用,它把對ItemList屬性結果,而不是itemList。請注意情況!

通過

public function prepareItemList() { 
    $this->itemList = $this->itemsDAO->getItems(); 
} 

只需更換

public function prepareItemList() { 
    $this->ItemList = $this->itemsDAO->getItems(); 
} 

,它會工作。

+0

感謝您的回覆,但在更改後,我仍然收到相同的錯誤 – patrick 2015-03-31 11:25:25

+0

在代碼中放置了一些'var_dump()'以知道發生了什麼,我們無法爲您進行調試。 – Blackus 2015-03-31 11:26:42