0

我收到以下错误:未定义的变量:我的 home_view 控制器中的部分。我在 home_view.php 中包含了第 17 行,我很确定我正确地传递了所有变量。为什么它给我这个错误?


  <?php

    class Student extends CI_Controller  {


    function index()
          {
            $this->load->model('student_model');
            $data['section']= $this->student_model->browse_section();
            $this->load->view('home_view',$data);
          }

       }

学生模型.php

<?php

Class Student_Model extends CI_Model 
{

function browse_section() 
    {

    $q = $this->db->get('section');

        if($q->num_rows > 0 )
        {
        foreach ($q ->result() as $row )
                {
                $data[] = $row ;
                }
        }

        return $data;
    }

}

Home_view.php

 <?php foreach($section as $r){
    echo '<h1>' . $r->Time . '</h1>' ; 
}
?>
4

4 回答 4

2

让我向您解释您遇到的错误并稍后更正

让我们从模型上的查询开始

<?php

Class Student_Model extends CI_Model 
{

function browse_section() 
    {

    $q = $this->db->get('section');

        if($q->num_rows > 0 )
        {
        foreach ($q ->result() as $row )
                {
                $data[] = $row ;
                }
        }

        return $data;
    }

}

很明显,如果来自数据库的结果集是 EMPTY,那么 $data 将不会被提供任何值,并且返回给控制器function browse_section()的值为return $data;NULL,如果传递给视图,它将 100% 创建一个错误,因为没有什么可以环形。

这里有一些解决问题的建议 1.) 在将返回值分配给函数之前,请确保它具有默认值,因此分配此行将$data = array(); on the first line in browse_section model function will do.确保您返回一个空数组,该数组可以传递给控制器​​,然后在视图中如果不返回任何值。2.) 我建议您使用 result_array() 来提取数据库记录 w/c 更好地用于数组操作。


关于控制器没有什么需要修改的。

__ 关于视图,如果您决定result_array()在模型上使用,您可以将 foreach 更改为,但这是可选的

 <?php foreach($section as $key => $value){
    echo '<h1>' . $value['Time'] . '</h1>' ; 
}
?>

但一定要放

if(!is_null($section) && count($section) > 0) { 
//foreach here
}

这条线一定会救你!

快乐编码我的朋友!

于 2012-08-25T09:15:31.200 回答
1

问题是这一行:

$data['section']= $this->student_model->browse_section();

不仅您没有$data定义,而且您也没有section定义键。请查看数组的文档

笔记:

尝试访问尚未定义的数组键与访问任何其他未定义变量相同:将发出 E_NOTICE 级别的错误消息,结果将为 NULL。

我不确定您要实现什么,但这可能足以修复您在Student控制器中的代码:

$this->load->model('student_model');
$data = array();
$data['section']= $this->student_model->browse_section();
$this->load->view('home_view',$data);

要修复模型中的零件,请遵循 KDaker 的提示。

另请阅读 PHP 中的未定义变量,并可能熟悉面向对象的编程。这可能会帮助您避免将来出现类似和更重要的错误。

于 2012-08-25T08:33:57.580 回答
1

你的$data变量是未定义的。您需要在模型中的 if 函数之前定义它:

function browse_section() 
{

$q = $this->db->get('section');
$data = array(); //define the data array.

    if($q->num_rows > 0 )
    {
    foreach ($q ->result() as $row )
            {
            $data[] = $row ;
            }
    }

    return $data;
}

希望这可以帮助

于 2012-08-25T05:53:04.447 回答
0
  • 不需要模型中的那个 foreach 循环。只需返回 $q->result()。
  • num_rows 是一种方法,因此您的代码应如下所示: $q->num_rows() 而不是 $q->num_rows
  • 尝试在您的开发环境中启用 php 显示错误,这将帮助您在几分钟内修复此类错误。

我希望这些要点对您有进一步的帮助。

于 2012-08-25T06:13:36.480 回答