CodeIgniter - 按ID更新单个记录 - 失败

时间:2016-04-12 15:26:31

标签: php mysql codeigniter mysqli

作为CodeIgniter的新用户,查看了其他帖子并且遗憾地解答了这个问题。

使用表单创建记录(也上传图像文件并创建链接到图像作为db中的字段)这一切都有效。我现在正在尝试编辑特定记录。我有一个表单的视图,这是有效的,并使用$id = $this->uri->segment(3)从数据库中预先填充以获取正确的记录 - 这一切都有效。

失败的地方就是更新记录。

我的控制器......

    function edit_stock_vehicle_record()
    {
        $this->load->library('form_validation');


        // field name, error message, validation rules
        $this->form_validation->set_rules('title', 'Title', 'trim|required');
        $this->form_validation->set_rules('make', 'Make', 'trim|required');
        $this->form_validation->set_rules('model', 'Model', 'trim|required');
        $this->form_validation->set_rules('fuel', 'Fuel Type', 'trim|required');
        $this->form_validation->set_rules('enginesize', 'Engine Size', 'trim|required');
        $this->form_validation->set_rules('trans', 'Transmission', 'trim|required');
        $this->form_validation->set_rules('reg_no', 'Registration Number', 'trim|required');
        $this->form_validation->set_rules('year', 'Year', 'trim|required');
        $this->form_validation->set_rules('colour', 'Colour', 'trim|required');
        $this->form_validation->set_rules('mileage', 'Mileage', 'trim|required');
        $this->form_validation->set_rules('long_desc', 'Description', 'trim|required');
        $this->form_validation->set_rules('purchase_price', 'Purchase Price', 'trim|required');
        $this->form_validation->set_rules('sale_price', 'Sale Price', 'trim|required');


        if($this->form_validation->run() == FALSE)
        {
            $data['main_content'] = 'vehicle_display2';
            $this->load->view('includes/template', $data);
        }

        else
        {           
            $this->load->model('manage_model');
            if($query = $this->manage_model->edit_stock_vehicle_record())
            {
                $data['main_content'] = 'vehicle_added';
                $this->load->view('includes/template', $data);
            }
            else
            {

                $data['main_content'] = 'add_vehicle4';
                $this->load->view('includes/template', $data);      
            }
        }


    }

我的模特....

    function edit_stock_vehicle_record()
    {
        $this->load->helper('array');
        $this->load->helper('html');
        $id = $this->uri->segment(3);
        $config['upload_path'] = 'c:/wamp/www/honest/images';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '5000';
        $config['overwrite'] = TRUE;
        $config['remove_spaces'] = TRUE;

        $this->load->library('upload', $config);    

        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());

            $data['main_content'] = 'imageupload';
            $this->load->view('includes/template', $data);
            echo "FAILED";
        }
        else
        {

        $image_data = $this->upload->data();

        $vehicle_update_data = array(
            'title' => $this->input->post('title'),
            'make' => $this->input->post('make'),
            'model' => $this->input->post('model'),
            'fuel' => $this->input->post('fuel'),
            'enginesize' => $this->input->post('enginesize'),
            'trans' => $this->input->post('trans'),
            'reg_no' => $this->input->post('reg_no'),   
            'year' => $this->input->post('year'),
            'colour' => $this->input->post('colour'),
            'mileage' => $this->input->post('mileage'),
            'long_desc' => $this->input->post('long_desc'),
            'purchase_price' => $this->input->post('purchase_price'),           
            'sale_price' => $this->input->post('sale_price'),
            'image' => $image_data['file_name']

        );
        $this->load->helper('url');
        $id = $this->uri->segment(3);
        $update = $this->db->update('stock_vehicles', $vehicle_update_data, array('id' => $id));
        return $update;
        }
    }

我也试过使用....

    $this->db->where('id', $id);
    $this->db->update('stock_vehicles', $vehicle_update_data);

但是这也失败了,似乎$id没有被正确识别。

如果我删除上面的内容并且只使用$this->db->update('stock_vehicles', $vehicle_update_data);它确实更新了 db中的每个记录(doh!)幸运的是,当我发现这个时,那里没有“真正的”数据!

不确定为什么它没有拿起$id - 感激地收到所有输入。

干杯,

DP。

2 个答案:

答案 0 :(得分:0)

首先,您必须在控制器

中加载网址助手
$this->load->helper('url');

然后你应该试试这段代码:

$id = $this->uri->segment(3);
$vehicle_update_data =array(
  'title' => $this->input->post('title'),
  'make' => $this->input->post('make'),
  'model' => $this->input->post('model'),
  'fuel' => $this->input->post('fuel'),
  'enginesize' => $this->input->post('enginesize'),
  'trans' => $this->input->post('trans'),
  'reg_no' => $this->input->post('reg_no'),   
  'year' => $this->input->post('year'),
  'colour' => $this->input->post('colour'),
  'mileage' => $this->input->post('mileage'),
  'long_desc' => $this->input->post('long_desc'),
  'purchase_price' => $this->input->post('purchase_price'),           
  'sale_price' => $this->input->post('sale_price'),
  'image' => $image_data['file_name']
);
$this->db->WHERE('id',$id)->update('your_table',$vehicle_update_data);
return true;

答案 1 :(得分:0)

  

我有一个表格的视图,这是有效的,并预先填写   db使用$ id = $ this-> uri-> segment(3)来获取正确的记录 -   这一切都有效。

请勿对表单更新执行此操作。只需在隐藏的表单字段中包含id即可。更容易,更安全等。

echo form_hidden( 'id', $id  );