2015-03-31 55 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