Недопустимый аргумент для foreach (), не могу найти почему - PullRequest
1 голос
/ 13 июля 2011

Я начинающий программист php.Я пытался использовать MVC, но я даже не могу пройти тестирование этого.

Проблема: Предупреждение: неверный аргумент, предоставленный для foreach () в httpdocs / data / serieDAO.php в строке 15

Может кто-нибудь дать мне подсказку, что вызывает эту проблему?

Код (извините, если он очень длинный):

/ 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;
    }


}
?>

/ entity / 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>

edit: я знаю, что код внутри foreach еще не работает.Но я уже понял, что это не причина.

Ответы [ 7 ]

6 голосов
/ 13 июля 2011

Ваш запрос не может вернуть массив с набором результатов, потому что вы используете зарезервированное слово (desc) для одного из столбцов таблицы.

Изменение:

$sql = "select id, title, desc, url, genre, trailer from Series";

до:

$sql = "select id, title, `desc`, url, genre, trailer from Series";
1 голос
/ 13 июля 2011

Ошибка обычно означает, что аргумент для foreach не является массивом или пустым массивом. Вы можете попытаться просмотреть содержимое вашего $ resultSet, выполнив var_dump($resultSet). Я предполагаю, что вы получаете пустой ответ от MySQL, что приводит к этой ошибке. Чтобы убедиться в этом, вы должны попытаться выполнить запрос вручную.

0 голосов
/ 13 июля 2011
 $dbh = new PDO("mysql:host=localhost;dbname=tvseasons", "seasons", "bompa"); 
 $sql = "select id, title, desc, url, genre, trailer from Series";

проверьте эти строки, возможно, в вашем соединении произошла ошибка, или проверьте ваш запрос, который соответствует вашим полям таблицы.проверьте вручную, выполняется ли запрос на выборку.

0 голосов
/ 13 июля 2011

Похоже, что вы не извлекаете данные в /data/serieDAO.php, например:

     $resultSet = $dbh->query($sql);
     $rows = $resultSet->fetchAll(PDO::FETCH_ASSOC); // this looks missing in your code
    foreach($rows as $key => $value) {
        $data_array[$key] = $value;// replace with your "serie" stuffs
    }
0 голосов
/ 13 июля 2011

может быть $ resultSet не массив. это может произойти, потому что иногда запрос не получает данные.

Вы должны добавить это условие перед циклом foreach

if (is_array ($ resultSet) && count ($ resultSet)> 0) {

foreach($resultSet as $row){
}

}

0 голосов
/ 13 июля 2011

Похоже, либо соединение, либо запрос не выполнен. Попробуйте следующее, чтобы увидеть, что не так:

if ($resultSet) {
        foreach ($resultSet as $row){
            $serie = new Series($row["id"], $row["title"],$row["desc"], $row["url"], $row["genre"], $row["trailer"]);
            array_push($list, $serie);
        }
else {
    var_dump($dbh->errorInfo());
}
0 голосов
/ 13 июля 2011

Пожалуйста, укажите переменную vardump $ resultSet и посмотрите, является ли она массивом. Метод foreach исключает только массивы и, таким образом, выдает ошибку, если ему предоставляется что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...