我收到以下错误:未定义的变量:我的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
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 foreach($section as $r){
echo '<h1>' . $r->Time . '</h1>' ;
}
?>
答案 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)
我希望这些观点对你有所帮助。