【发布时间】:2014-07-29 18:02:14
【问题描述】:
我是 CI 新手,只是想建立一个基本的博客来练习。除更新帖子外,一切正常(拉出所有帖子、单个帖子、添加新帖子、删除帖子)。更新表单加载完成,但是当我提交表单时,我得到一个没有错误的空白页面,并且数据库上没有任何更新。我已经在堆栈中搜索了解决方案,但这些似乎都没有什么不同。任何帮助将不胜感激。
编辑:现在吐出以下错误:
Fatal error: Call to undefined method Post::where() in /Applications/MAMP/htdocs/CodeIgniter_2.2.0/application/models/post.php on line 26
update_post 模型函数中的第一行是:
function update_post($postID, $data){
$this->where('postID', $postID);
$this->db->update('posts', $data);
}
来自视图 edit_post.php 的 HTML 表单标记:
添加新帖子
<?php if($success==1){ ?>
<p>Post successfully updated</p>
<? } ?>
<form action="<?=base_url()?>posts/editpost/<? echo $post['postID']?>" method="post">
<p>Title
<input name="title" type="text" value="<?=$post['title']?>" />
</p>
<p>Body
<textarea name="post"><?=$post['post']?></textarea>
</p>
<p><input type="submit" value="Edit Post" /></p>
</form>
型号:
class Post extends CI_Model{
function get_posts($num=20, $start=0){
//$sql="SELECT * FROM users WHERE active=1 ORDER BY date_added DESC LIMIT 0,20;";
$this->db->select()->from('posts')->where('active',1)->order_by('date_added','desc')->limit($num,$start);
$query = $this->db->get();
return $query->result_array();
}
function get_post($postID){
$this->db->select()->from('posts')->where(array('active'=>1,'postID'=>$postID))->order_by('date_added','desc');
$query=$this->db->get();
return $query->first_row('array');
}
function insert_post($data){
$this->db->insert('posts', $data);
return $this->db->insert_id();
}
function update_post($postID, $data){
$this->where('postID', $postID);
$this->db->update('posts', $data);
}
function delete_post($postID){
$this->db->where('postID', $postID);
$this->db->delete('posts');
}
}
控制器:
class Posts extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->model('post');
}
function index(){
$this->load->model('post');
$data ['posts']=$this->post->get_posts();
$this->load->view('post_index',$data);
}
function post($postID){
$data['post'] = $this->post->get_post($postID);
$this->load->view('post',$data);
}
function new_post(){
if($_POST){
$data = array(
'title'=>$_POST['title'],
'post'=>$_POST['post'],
'active'=>1
);
$this->post->insert_post($data);
redirect(base_url().'posts/');
}else{
$this->load->view('new_post');
}
}
function editpost($postID){
$data['success']=0;
if($_POST){
$data_post=array(
'title'=>$_POST['title'],
'post'=>$_POST['post'],
'active'=>1
);
$this->post->update_post($postID, $data);
$data['success']=1;
}
$data['post']=$this->post->get_post($postID);
$this->load->view('edit_post', $data);
}
function deletepost($postID){
$this->post->delete_post($postID);
redirect(base_url().'posts/');
}
}
【问题讨论】:
-
可能缺少
return?return $this->db->update('posts', $data);就像你对return $this->db->insert_id();所做的那样 -
@Fred-ii- 他不会得到他的页面输出。
-
我想你的意思是
$this->post->update_post($postID, $data_post);,所以$data_post而不是$data。 -
在 $data['success']=0 之后尝试 die($_POST) 看看你会得到什么。编辑:哦,好赶上@JeroenNoten。
-
@BillDukelow 这很容易修复,将 db 对象添加到调用中,它应该是
$this->db->where('postID', $postID);
标签: php codeigniter