在foreach循环中警告

时间:2016-08-29 02:02:03

标签: php

我无法从数据库中获取数据,我不断收到同样的错误

  

注意:未定义的变量:第25行上的文章:\ xampp \ htdocs \ SalesManagementProject \ Views \ articles.php
  警告:为第25行的\ xampp \ htdocs \ SalesManagementProject \ Views \ articles.php中的foreach()提供的参数无效

我的循环

 <?php
 foreach($articles as $art)
 {
  echo '<tr>
         <td>'.$art['Id'].'</td>
         <td>'.$art['ref'].'</td>
         <td>'.$art['desig'].'</td>
        </tr>';
 }
 ?>

模型

 <?php
class ArticlesModel
{
    public function getArticles()
    {
        $pdo=new PDO_connect();
        $q= $pdo->PDO()->query('SELECT * FROM articles');
        return $q->fetchAll();
    }
}
?>

控制器

<?php
class ArticlesControllers
{
    public function loadArticles()
    {
        include (dirname(__FILE__).'/../Models/ArticlesModel.php');
        $art_table = new ArticlesModel();
        $articles = $art_table->getArticles();
        include(dirname(__FILE__).'/../Views/articles.php');
    }
}
?>

索引

<?php
   session_start();
  include ('PDO_connect.php');
   $p='home';

  if (isset($_GET['p']))
  {
       $p=$_GET['p'];
   }
   include('Controllers/ArticlesControllers.php');
$arts=new ArticlesControllers();
$arts->loadArticles();
?>

那我必须做什么?

1 个答案:

答案 0 :(得分:-1)

简单,在public function loadArticles() {添加

之后的控制器部分
global $articles;

因为在一个函数内部分配了$ articles,所以需要对它进行全局化以在另一个区域中读取它。
顺便说一句,您应该将$articles定义为index.php中的数组,以使其正确定义

 $articles = array();

BTW将一个命名变量传入/传出类是不是很合适的编程,但我希望你有一个快速的解决方案。

更好的解决方案是使用公共函数return ($articles)并在index.php中$articles = $arts->loadArticles();