消息:未定义的变量:在“查看”页面中

时间:2012-02-28 17:56:48

标签: php codeigniter

我仍然是PHP和MVC概念的新手。我一直在尝试复制CI新闻教程(http://codeigniter.com/user_guide/tutorial/news_section.html),同时使用我自己的数据库并重写代码。

我没有成功。

这是我的控制器:

    class Main extends CI_Controller
{

public function __construct()
{
    parent::__construct();

    $this->load->helper('url');
    $this->load->library('tank_auth');
    $this->load->model('structures_model');
}

public function structures()
{
    $this->load->model('structures_model');
    if (!$this->tank_auth->is_logged_in()) {
        redirect('/auth/login/');
    } else {
        $data['structures_all'] = $this->structures_model->get_structures();
        $this->load->view('templates/header', $data);
        $this->load->view('templates/navmain', $data);
        $this->load->view('structures', $data);
        $this->load->view('templates/footer', $data);
    }
}

这是我的模型(structures_model)

<?php
class Structures_model extends CI_Model {

public function __construct()
{
    $this->load->database();
}

public function get_structures()
{
    $query = $this->db->get('structures');
    return $query->result_array();
}

}

我的观点:

<?php foreach ($structures_all as $structures_info): ?>
<h2>Structures</h2>
<div id="main">
    <?php echo $structures_info['str_name'] ?>
</div>
<?php endforeach ?>

我得到的错误很常见:

A PHP Error was encountered<
Severity: Notice
Message: Undefined variable: structures_all
Filename: main/structures.php
Line Number: 2

我不知所措。我已经查看了所有类似的错误,但无法弄清楚为什么没有定义structure_all数组。它不应该在我设置的控制器功能中创建:

$data['structures_all'] = $this->structures_model->get_structures();

我错过了什么?

1 个答案:

答案 0 :(得分:1)

调试此方法的最佳方法是为$data['structures_all']分配一个确定的数组值,例如:$data['structures_all'] = array('foo' => 'bar');

现在视图中是否有$structures_all变量?如果可用,您知道$this->structures_model->get_structures();正在返回null

您的数据库中是否有一个名为structures的表?

您确定在config/database.php填写了数据库连接详细信息吗?

您是否将php错误报告设置为全部?可能存在隐藏消息...在控制器的构造函数中调用error_reporting(E_ALL);

同时尝试回显:$this->db->last_query();以验证您的查询的构建方式与您在phpmyadmin中尝试的方式相同...

希望这能让你走上正轨。