CodeIgniter:在更新表单上提交空白屏幕。没有错误

时间:2014-07-29 18:02:15

标签: php codeigniter

我是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/');
    }
}

2 个答案:

答案 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); 

在控制器中显示所有错误。