【问题标题】:CodeIgniter: Getting blank screen on update form submit. No errorsCodeIgniter:更新表单提交时出现空白屏幕。没有错误
【发布时间】: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/');
    }
}

【问题讨论】:

  • 可能缺少returnreturn $this-&gt;db-&gt;update('posts', $data); 就像你对 return $this-&gt;db-&gt;insert_id(); 所做的那样
  • @Fred-ii- 他不会得到他的页面输出。
  • 我想你的意思是$this-&gt;post-&gt;update_post($postID, $data_post);,所以$data_post而不是$data
  • 在 $data['success']=0 之后尝试 die($_POST) 看看你会得到什么。编辑:哦,好赶上@JeroenNoten。
  • @BillDukelow 这很容易修复,将 db 对象添加到调用中,它应该是 $this-&gt;db-&gt;where('postID', $postID);

标签: php codeigniter


【解决方案1】:

您在 where 之前错过了 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);
    }

【讨论】:

  • 在盯着模型 5 分钟寻找不那么明显的东西后发现了!谢啦!无论如何,我会给你胜利!
  • 感谢我能提供帮助
【解决方案2】:

您可以尝试使用模型函数中的以下行来调试它

echo $this->db->last_query();

它会打印最后执行的查询,您可以尝试手动运行它来检查查询是否正常,或者尝试通过放置日志来调试它。 或添加

error_reporting(E_ALL); 

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

【讨论】:

  • 感谢您的回复!不幸的是,将此行添加到更新模型并没有任何回声,当我从控制器打开错误报告时也没有错误!我之前尝试过错误报告,但无济于事!
猜你喜欢
  • 2022-06-26
  • 2012-05-03
  • 1970-01-01
  • 2016-07-23
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
相关资源
最近更新 更多