代码点火器视图未定义的变量



我得到以下错误:未定义的变量:home_view控制器中的section。我在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;
    }
}

主页视图.php

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

让我向您解释您遇到的错误,稍后在上更正

让我们从模型的查询开始

<?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将不会被提供任何值,并且带有return $data;function browse_section()将为NULL,返回给控制器,如果传递给视图,它将100%创建一个Error,因为没有什么可循环的。

以下是一些纠正问题的建议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
}

这句话一定能救你!

编码快乐我的朋友!

您的$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;
}

希望这对有帮助

问题是这一行:

$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中未定义的变量,并可能熟悉面向对象编程。这可能会帮助你在未来避免类似的、更重要的错误。

  • 模型中的foreach循环是不需要的。只需返回$q->result()
  • num_rows是一个方法,因此您的代码应该看起来像:$q->num_rows(),而不是$q->num_rows
  • 尝试在开发环境中启用php显示错误,这将帮助您在几分钟内修复此类错误

我希望这些观点对你有进一步的帮助。

最新更新