codeigniter更新图像不上传

时间:2012-12-17 23:45:36

标签: image codeigniter upload

我正在解决这个问题,这是我在过去几个小时里尝试过的 我正在上传图片,其中包含一些存储在db中的详细信息。

我存储细节和图像路径,像魅力一样工作。现在是编辑部分。 我正在尝试检查输入文件是否为空,如果是,只更新细节,否则删除图像并重新上载新图像。问题是:

如果输入文件为空,则更新所有内容没有问题,如果不为空则更新详细信息,但图像相同,不会被删除或重新上载。 这是代码

$image_input = $this->input->post('image');
    if(isset($image_input) && !empty($image_input))
    {
        $this->db->where('id', $id);
        $img = $this->db->get('menus_category', 1);
        if($img->num_rows() > 0)
        {
            $row = $img->row();
            $original_image = $row->image;
            $desktop_image = $row->desk_img;
            $mobile_image = $row->mob_img;
            $thumb_image = $row->thumb;
            $unlink_image = unlink('./uploads/menus/' . $original_image);
            $unlink_desk = unlink('./uploads/menus/desk/' . $desktop_image);
            $unlink_mob = unlink('./uploads/menus/mobile/' . $mobile_image);
            $unlink_thumb = unlink('./uploads/menus/thumbs/' . $thumb_image);
            if($unlink_desk && $unlink_image && $unlink_mob && $unlink_thumb)
            {
                $config = array(
                'upload_path' => './uploads/menus',
                'allowed_types' => 'gif|jpg|jpeg|png',
                'max_size' => '15000'
                );
                $this->upload->initialize($config);

                if ($this->upload->do_upload('image'))
                {

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

                    $this->load->library('image_lib');
                    // thumb resize
                    $thumbnail = 'thumb_' . $image_data['file_name'];
                    $thumb = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' => $image_data['file_path'] . 'thumbs/' . $thumbnail,
                        'maintain_ratio' => TRUE,
                        'width' => '90',
                        'height' => '90'
                    );
                    $this->image_lib->initialize($thumb);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // mobile resize
                    $mob = 'mob_' . $image_data['file_name'];
                    $thumb_mob = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' => $image_data['file_path'] . 'mobile/' . $mob,
                        'maintain_ratio' => FALSE,
                        'width' => '290',
                        'height' => '83'
                    );
                    $this->image_lib->initialize($thumb_mob);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // desktop resize

                    $desk = 'desk_' . $image_data['file_name'];
                    $thumb_desk = array(
                        'image_library' => 'GD2',
                        'source_image' => $image_data['full_path'],
                        'new_image' =>  $image_data['file_path'] . 'desk/' . $desk,
                        'maintain_ratio' => FALSE,
                        'width' => '700',
                        'height' => '200'
                    );
                    $this->image_lib->initialize($thumb_desk);
                    $this->image_lib->resize();
                    $this->image_lib->clear();

                    // insert path and details to database
                    $data = array(
                        'title' => $input['title'],
                        'slug' => $this->_check_slug($input['title']),
                        'description' => $input['description'],
                        'image' => $image_data['file_name'],
                        'desk_img' => $desk,
                        'mob_img' => $mob,
                        'thumb' => $thumbnail
                    );
                    $this->db->where('id', $id);
                    return $this->db->update('menus_category', $data);
                }
                else 
                {
                    echo $this->image_lib->display_errors();
                }
            }
        }
    }

    else
    {
        $data2 = array(
            'title' => $input['title'],
            'slug' => $this->_check_slug($input['slug']),
            'description' => $input['description']
        );
        $this->db->where('id', $id);
        return $this->db->update('menus_category', $data2);
    }

注意:else语句工作正常,但第一个如果问题。现在我将if更改为if(isset($ image_input))...如果文件输入不为空则重新上载图片并更新细节,但如果我只更新没有图片的细节,则删除已上传且未更新的图片。 (我认为这是问题,但我无法弄清楚如何修复它。)

如果你愿意给我一些帮助或让我朝着正确的方向前进,我将感激不尽。 谢谢你们

1 个答案:

答案 0 :(得分:1)

首先,这将是一个提出问题的评论,但我没有足够的声誉确实添加一个... 如果您可以发布HTML表单,那将会有所帮助,但如果没有...

1)我假设您提交的表单在开始标记中有enctype =“multipart / form-data”。 2)在你的代码的第2行, $ this-> input-> post('image'),是来自类型文件的表单输入的'image'?如果是这样,你的语句将不起作用,因为'image'是$ _FILES数组的一部分而不是$ _POST。当你去检查它时,它总是空的(或不存在的)。

要验证您的表单是否按照您认为的方式提交,请在您帖子中的代码的第一行之前执行此操作:

var_dump($_POST);
var_dump($_FILES);
exit; // don't let anything run after the dumps.

让我知道这是否会让你朝着正确的方向前进。