Php 消息:未定义变量:在视图页面中
我对PHP和MVC概念仍然是新手。我一直在尝试复制CI新闻教程(http://codeigniter.com/user_guide/tutorial/news_section.html),同时使用我自己的数据库并重写代码 我失败了 这是我的控制器: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
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();