Codeigniter视图未定义的变量

时间:2012-08-25 05:42:41

标签: php codeigniter

我收到以下错误:未定义的变量:我的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);
          }

       }

student_model.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 个答案:

答案 0 :(得分: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
}

这条线肯定能救你!

快乐编码我的朋友!

答案 1 :(得分: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;
}

希望这会有所帮助

答案 2 :(得分:1)

问题在于这一行:

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

您不仅没有定义$data,而且还没有定义密钥section。请查看the documentation of arrays

  

注意:

     

尝试访问尚未定义的数组键与访问任何其他未定义的变量相同:将发出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中未定义的变量,并且可能熟悉面向对象的编程。这可能会帮助你避免将来出现类似和更重要的错误。

答案 3 :(得分:0)

  • 不需要模型中的foreach循环。只需返回$ q-&gt; result()。
  • num_rows是一种方法,因此您的代码应如下所示:$ q-&gt; num_rows()而不是$ q-&gt; num_rows
  • 尝试在您的开发环境中启用php显示错误,这将有助于您在几分钟内修复这些错误。

我希望这些观点对你有所帮助。