我是CI的新手,只是想为实践建立一个基本的博客。一切正常(拉所有帖子,个别帖子,添加新帖子,删除帖子)除了更新帖子。更新表单加载fin,但是当我提交表单时,我得到一个没有错误的空白页面,并且没有任何内容在db上更新。我已经搜索了堆栈的解决方案,但这些似乎没有任何区别。任何帮助将不胜感激。
编辑:现在吐出以下错误:
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/');
}
}
答案 0 :(得分:1)
你错过了db之前的地方。这里:
function update_post($postID, $data){
$this->where('postID', $postID);
$this->db->update('posts', $data);
}
替换:
function update_post($postID, $data){
$this->db->where('postID', $postID);
$this->db->update('posts', $data);
}
答案 1 :(得分:0)
您可以尝试使用模型函数
中的以下行进行调试echo $this->db->last_query();
它将打印最后执行的查询,您可以尝试手动运行它以检查查询是否正常,或尝试通过放置日志来调试它。 或者添加
error_reporting(E_ALL);
在控制器中显示所有错误。