【发布时间】:2011-07-13 09:27:35
【问题描述】:
我是初级 php 程序员。我试图使用 MVC,但我什至无法通过这个测试。
问题:警告:在 httpdocs/data/serieDAO.php 第 15 行为 foreach() 提供的参数无效
谁能告诉我是什么导致了这个问题?
代码(很长见谅):
/index.php
<?php
ini_set('display_errors', 1);
// main controller
require_once ("business/serieservice.php");
$service = new SerieService();
$serielijst = $service->toonAlleSeries();
include("test/test1.php");
?>
/business/serieservice.php
<?php
require_once("data/serieDAO.php");
class SerieService{
public function toonAlleSeries(){
$serieDAO = new SerieDAO();
$lijst = $serieDAO->displayList();
return $lijst;
}
}
?>
/data/serieDAO.php
<?php
require_once("entities/series.class.php");
class SerieDAO{
// public function __construct(){
// $dbh = new PDO("mysql:host=localhost;dbname=tvseasons", "seasons", "bompa");
// }
public function displayList(){
$list = array();
$dbh = new PDO("mysql:host=localhost;dbname=tvseasons", "seasons", "bompa");
$sql = "select id, title, desc, url, genre, trailer from Series";
$resultSet = $dbh->query($sql);
foreach ($resultSet as $row){
$serie = new Series($row["id"], $row["title"],$row["desc"], $row["url"], $row["genre"], $row["trailer"]);
array_push($list, $serie);
}
$dbh = null;
return $list;
}
}
?>
/entities/series.class.php
<?
//class met getters en setters van series entity
class Series{
private $id;
private $title;
private $desc; //description
private $url;
private $genre;
private $trailer;
/* Try to figure out how to determine the $id. Cannot be set obviosly but get should be possible */
//setters
function setTitle ($title){
$this->title = $title;
}
function setDesc($desc){
$this->desc = $desc;
}
function setUrl($url){
$this->url = $url;
}
function setGenre($genre){
$this->genre = $genre;
}
function setTrailer($trailer){
$this->trailer = $trailer;
}
//getters
function getTitle(){
return $this->title;
}
function getDesc(){
return $this->desc;
}
function getUrl(){
return $this->url;
}
function getGenre(){
return $this->genre;
}
function getTrailer(){
return $this->trailer;
}
}
?>
/test/test1.php
<html>
<head>
<title>Test1 lijst series</title>
</head>
<body>
<h1>Een lijst van alle series</h1>
<ul>
<?php
foreach($serielijst as $serie){
print ("<li>bla bla</li>");
}
?>
</ul>
</body>
</html>
编辑:我知道 foreach 中的代码还没有工作。但我已经发现这不是原因。
【问题讨论】:
-
您是否检查过您是否从数据库查询中获得任何结果? Foreach 期待一个数组,它没有得到它。检查数组的创建位置以及可能失败的位置。
-
在创建 PDO 对象时使用 try/catch,因此您可以看到引发的任何异常。也尝试只发布代码的相关部分。
-
转至php.net/manual/en/function.mysql-query.php 以获取有关错误检查的信息。就像他们说的那样,确保你的查询确实返回了一些东西。
-
回到我还在做 php 的时候,我这样做是为了从每一行中获取值 while ($row = mysql_fetch_assoc($result)) { echo $row['firstname'];回声 $row['姓氏'];回声 $row['地址'];回声 $row['年龄']; }
-
@Jarco 考虑将您的代码缩减为您能想到的最小的非工作示例,以解决您的下一个问题。实际上强迫人们阅读 100 行代码,其中 96 行与问题无关,这不仅是不礼貌的,而且将代码减少到有问题的部分有助于你理解问题和其他人 重现它。