CodeIgniter更新不完全正常工作

时间:2018-05-03 03:24:42

标签: php codeigniter

我正在尝试使用CodeIgniter更新mySQL表。

控制器

我将redirect()注释掉以使用print_r()。当它返回数组时,它返回正确的更新值。但是,如果我取消注释重定向,那么它会将我重定向到包含该表的页面,并且值不会更新。我还检查phpMyAdmin以确保值不会更新而不仅仅是显示,但它们都没有更新。这让我感到困惑,因为print_r()返回了正确的值。

<?php
class update_ctrl extends CI_Controller {
    function __construct(){
        parent::__construct();
        $this->load->model('update_model');
    }

    public function updateGame($id){
        $this->load->model('update_model');
        $data['games'] = $this->update_model->getGame($id);
        $this->load->view('update_view', $data);
        $this->load->view('footer');
    }

    public function update(){
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->form_validation->set_error_delimiters('<span class="error">', '</span>');
        $this->form_validation->set_rules('name', 'Name', 'trim|required');
        $this->form_validation->set_rules('genre', 'Genre', 'trim|required');
        $this->form_validation->set_rules('developer', 'Developer', 'trim|required');
        $this->form_validation->set_rules('year', 'YearReleased', 'trim|required|numeric');
        $this->form_validation->set_rules('price', 'Price', 'trim|required|numeric');
        $id = $this->input->post('ID');
        $data = array(
                                'Name' => $this->input->post('name'),
                                'Genre' => $this->input->post('genre'),
                                'Developer' => $this->input->post('developer'),
                                'YearReleased' => $this->input->post('year'),
                                'Price' => $this->input->post('price')
                        );
            $this->load->model('update_model');
            $this->update_model->update($id, $data);
            $this->session->set_flashdata('msg', 'Game Updated!');
            print_r($data);
            //redirect('');
        }
    }
?>

模型

<?php
class update_model extends CI_Model {
    public function getGame($id) {
        $this->db->select('*');
        $this->db->from('games');
        $this->db->where('ID', $id);
        $query = $this->db->get();
        if ($query->num_rows() > 0){
            return $query->result();
        } else {
            return $query->result();
        }
    }

    public function update($id, $data){
        $this->db->where('ID', $id);
        $this->db->update('games', $data);
    }
}
?>

2 个答案:

答案 0 :(得分:0)

我唯一能想到的是你的查询是无声的失败。转到SyntaxError并将database.php更改为db_debug并再次运行所有内容。

我还想补充一点,您似乎做得很好,确保所有字段都经过验证。我还要为TRUE添加一个验证,以确保你得到它 - 如果用户做了一些时髦的事情,那么他们就不会得到一些奇怪的查询错误,因为没有设置id。

答案 1 :(得分:0)

注释掉你的所有$this->form_validation->set_rules并重试,我认为数字验证会出错

 public function update(){
    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');
    //$this->form_validation->set_error_delimiters('<span class="error">', '</span>');
    //$this->form_validation->set_rules('name', 'Name', 'trim|required');
    //$this->form_validation->set_rules('genre', 'Genre', 'trim|required');
    //$this->form_validation->set_rules('developer', 'Developer', 'trim|required');
    //$this->form_validation->set_rules('year', 'YearReleased', 'trim|required|numeric');
    //$this->form_validation->set_rules('price', 'Price', 'trim|required|numeric');
    $id = $this->input->post('ID');
    $data = array(
                            'Name' => $this->input->post('name'),
                            'Genre' => $this->input->post('genre'),
                            'Developer' => $this->input->post('developer'),
                            'YearReleased' => $this->input->post('year'),
                            'Price' => $this->input->post('price')
                    );
        $this->load->model('update_model');
        $this->update_model->update($id, $data);
        $this->session->set_flashdata('msg', 'Game Updated!');
        print_r($data);
        //redirect('');
    }
}