无法在codeigniter中为我的文件上传设置值

时间:2015-02-04 18:55:55

标签: php codeigniter

我正在尝试在图像上传输入的输入字段中设置我的默认值(值表单数据库)。我试过了set_value()但它似乎没有用。我能够获得除图像上传输入之外的所有其他字段。

我很困难,如果可能的话,我会感激一些帮助,谢谢。

我的观点:

echo form_label('Upload Recipe Image:', 'userfile');    
$valueArray = array(        
    'name' => 'userfile',           
    'value' => $image           
    );      
echo form_upload($valueArray);

controller func:

function update_recipe($id) {
        $this->load->model('upload_model');
        $recipe = $this->upload_model->get_recipe($id);
        $config['upload_path'] = './assets/uploads/';
        $config['allowed_types'] = 'gif|jpg|jpeg|png';
        $config['max_size'] = '';
        $config['max_width']  = '600';
        $config['max_height']  = '';
        $config['overwrite'] = TRUE;
        $config['remove_spaces'] = TRUE;
        $this->load->library('upload', $config);

        if(!$this->upload->do_upload()){
            $data['error'] = $this->upload->display_errors('<p>', '</p>');
            $data['user_info'] = $this->model_users->view_user('users')->result();
            $data['recipes'] = $this->recipe_model->get_recipes();
            $this->load->view('includes/header');
            $this->load->view('includes/navigation-header', $data);
            $this->load->view('error', $data);
            $this->load->view('includes/bottom-nav');
            $this->load->view('includes/footer');
        } else {
            $image_data = $this->upload->data();
            $data = array(
                'id'  => $this->input->post('recipe_id'),
                'title' => strtolower($this->input->post('recipe_name')),
                'description' => $this->input->post('recipe_description'),
                'stars' => $this->input->post('rating'),
                'directions' => $this->input->post('recipe_directions'),
                'genre' => $this->input->post('recipe_genre'),
                'posted' =>  date('Y-m-d'),
                'image' => $image_data['file_name'],
                'imagePath' => $image_data['full_path']
            );
            $this->upload_model->update_recipe_form($id, $data);
            redirect('addRecipe/recipes');
        }
    }

2 个答案:

答案 0 :(得分:3)

你做不到。

您的代码没问题,如果您检查HTML,您会看到输入元素中设置了,但出于安全原因 ,所以它被忽略了。

想象一下,有人在输入中动态设置值 c:\ passwords.txt ,然后通过javascript提交表单。钢铁文件太容易了。

答案 1 :(得分:1)

您在评论中提到:

  

问题是他们想要改变标题而不是图像   数据库将更新标题,但将用空白替换图像   领域。我该如何解决这个问题?

假设你的update_recipe_form函数等于(来自this SO question):

function update_recipe_form($id, $data){
    $this->db->where('id', $id);
    $this->db->update('recipes', $data);
    return true;
}

基于$this->db->update()功能的描述:

https://ellislab.com/codeigniter/user-guide/database/active_record.html#update

如果您从输入数组中排除某些字段,那么这些值将不会是生成的SQL的一部分。

解决方案:尝试检查这些值是否为空:

$image_data['file_name'], $image_data['full_path']

如果为空,请不要将它们包含在$data数组中,这样就不会用空的数据覆盖现有的DB值。