Php 消息:未定义变量:在视图页面中

Php 消息:未定义变量:在视图页面中,php,codeigniter,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->he

我对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);
    }
}
这是我的模型(结构模型)


我遗漏了什么?

调试这个的最佳方法是为
$data['structures\u all']
分配一个确定的数组值,比如:
$data['structures\u all']=array('foo'=>'bar')

$structures\u all
变量现在在视图中可用吗?如果可用,您知道
$this->structures\u model->get\u structures()正在返回
null

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

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

您是否将php错误报告设置为“全部”?可能有隐藏的消息。。。调用
错误报告(E\u ALL)代码

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


希望这能让您走上正轨。

您确定数据库中有数据填充数组吗?我在phpmyadmin中运行了查询,它返回了所需的结果。另外,我在教程中创建的“news”表运行良好,因此我知道DB配置是正确的。为什么要加载两次模型?您是否尝试过将变量设置为空数组而不是调用数据库?或者尝试声明并输出一个简单的文本变量。所以我们可以把问题缩小到视图或模型上。我在事故中加载了两次模型。我正在排除故障,并尝试将其放置在多个位置,以确保它正在加载。我忘了把它取下来。我将尝试将其设置为空数组。我确实尝试了if(is_array(structure_all))并发现它没有运行if中的内容。我首先尝试了您的建议,将我的数组设置为“$data['structures_all']=array('foo'=>'bar');”为了清楚起见,我将其添加到了我的控制器“structures”下的“Main”中。我还临时删除了“$data['structures\u all']=$this->structures\u model->get\u structures();”线路。我也遇到了同样的错误。但是,这一次,我也收到了一个为foreach()错误提供的无效参数。我检查了我的数据库配置,并将其设置为正确的数据库,表存在。我目前通过tank_auth连接到DB,它成功地显示了我的用户名,因此我知道DB配置不是问题所在。我还进行了四次检查,以确保表名没有拼写错误。我还设置了错误报告(E_ALL);并且没有看到任何其他错误消息在您上次的建议中,关于验证我的查询,它给了我一个新的错误:“类CI_DB_mysql_驱动程序的对象无法转换为字符串”经过进一步测试,我非常确定这与错误配置的路由文件有关。我删除了所有内容并从头开始。执行此操作后,我在config中重置了route.php文件。我以前用一种我不知道发生了什么的方式将它连接起来,但它起了作用。不幸的是,我突然想到了DB。使用默认路由,并重写上面的代码,我使它以应有的方式工作。
<?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
$data['structures_all'] = $this->structures_model->get_structures();