Codeigniter中foreach循环中的未定义变量
Posted
技术标签:
【中文标题】Codeigniter中foreach循环中的未定义变量【英文标题】:Undefined variable in foreach loop in Codeigniter 【发布时间】:2017-08-18 16:57:10 【问题描述】:我是 codeigniter 的初学者,我正在为学习做一些基本的工作。我遇到了 index.php 中的错误
<h2><?=$title?></h2>
<?php foreach($posts as $post)?>
<h3><?php echo $post['title'];?></h3>o
<small class="post-date">Posted on:<?php echo $post['created at'];?> </small><br>
<?php echo word_limiter($post['body'],60);?>
<p><a class="btn btn-default" href="<?php echo site_url('/posts/' .$post['slug']);?>">read more</a></p>
<?php endforeach;?>
遇到 PHP 错误 严重性:通知 消息:未定义变量:帖子 文件名:posts/index.php 行号:2 回溯: 文件:/opt/lampp/htdocs/codeigniter/application/views/posts/index.php 线路:2 函数:_error_handler
文件:/opt/lampp/htdocs/codeigniter/application/controllers/Posts.php 线路:23 功能:查看
文件:/opt/lampp/htdocs/codeigniter/index.php 线路:315 函数:require_once
我的控制器是
<?php
class Posts extends CI_Controller
public function index()
$data['title']='Latest Posts';
$data['posts']=$this->Post_model->get_posts();
$this->load->view('templates/header');
$this->load->view('posts/index',$data);
$this->load->view('templates/footer');
public function view($slug=NULL)
$data['post'] = $this->Post_model->get_posts($slug);
if(empty($data['post']))
show_404();
$data['title']=$data['post']['title'];
$this->load->view('templates/header');
$this->load->view('posts/view', $data);
$this->load->view('templates/footer');
public function create()
$data['title'] = 'create post';
$this->form_validation->set_rules('title','Title','required');
$this->form_validation->set_rules('body','body','required');
if($this->form_validation->run() === false)
$this->load->view('templates/header');
$this->load->view('posts/create',$data);
$this->load->view('templates/footer');
else
$this->Post_model->create_post();
redirect('posts');
public function delete($id)
$this->Post_model->delete_post($id);
redirect('posts');
public function edit($id)
$data['post'] = $this->Post_model->get_posts($slug);
if(empty($data['post']))
show_404();
$data['title'] = 'edit post';
$this->load->view('templates/header');
$this->load->view('posts/index',$data);
$this->load->view('templates/footer');
public function update()
$this->Post_model->update_post();
redirect('posts');
我的模型文件是
<?php
class Post_model extends CI_Model
public function __construct()
$this->load->database();
public function get_posts($slug = false)
if($slug === false)
$this->db->order_by('id','DESC');
$query=$this->db->get('posts');
return $query->result_array();
$query = $this->db->get_where('posts',array('slug' => $slug));
return $query->row_array();
public function create_post()
$slug=url_title($this->input->post('title'));
$data=array(
'title' => $this->input->post('title'),
'slug' => $slug,
'body' => $this->input->post('body')
);
return $this->db->insert('posts',$data);
public function delete_post($id)
$this->db->where('id',$id);
$this->db->delete('posts');
return true;
public function update_post()
$slug=url_title($this->input->post('title'));
$data=array(
'title' => $this->input->post('title'),
'slug' => $slug,
'body' => $this->input->post('body')
);
$this->db->where('id',$this->input->post('id'));
return $this->db->update('posts',$data);
【问题讨论】:
等一下,抱歉,我正忙于上传代码。再看一遍。它与 foreach 循环中使用的 $posts 变量有关。 你自动加载你的模型? 你还没有在控制器中加载你的模型,所以我们假设你在你的配置中的 autoload.php 中有它。请在渲染视图之前通过 print_r() 或 var_dump 转储数据数组,以查看您从模型中得到了什么 是的,我愿意。$autoload['model'] = array('Post_model'); 我的 $post[body] 和所有表值都在完美加载。模型返回的标题和正文的值很好。但是 $posts 没有定义 【参考方案1】:在控制器上的编辑功能上,您有 edit($id)
但是在你加载模型的地方你有get_posts($slug)
它应该是get_posts($id)
还将
$data['post']
更改为$data['posts']
public function edit($id)
$data['posts'] = array();
// rename slug to id
$data['posts'] = $this->post_model->get_posts($id);
if(empty($data['posts']))
show_404();
$data['title'] = 'edit post';
$this->load->view('templates/header');
/*
Tip You don't have to use index.php on for view you could create a
another view instead $this->load->view('posts/edit_view',$data);
*/
$this->load->view('posts/index',$data);
$this->load->view('templates/footer');
关于控制器上的何时加载模型
改变
$this->Post_model->get_posts($id);
到
$this->post_model->get_posts($id);
https://www.codeigniter.com/user_guide/general/models.html#loading-a-model
在 Autoload.php 上
改变
$autoload['model'] = array('Post_model');
到
$autoload['model'] = array('post_model');
在 autoload.php 中加载数据库让生活更轻松
$autoload['libraries'] = array('database');
【讨论】:
以上是关于Codeigniter中foreach循环中的未定义变量的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP CodeIgniter foreach 循环中从数据库中提取和更新数据