0

我正在解决这个问题,在过去的几个小时里我一直在尝试上传图片,其中包含一些要存储在数据库中的细节。

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

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

$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 更改为 if(isset($image_input)) ... 如果文件输入不为空,则重新上传图片并更新详细信息,但如果我只更新没有图片的详细信息,则会删除已上传且未更新的图片。(我认为这是问题,但我不知道如何解决它)。

如果您愿意给我一些帮助或让我走上正确的方向,我将不胜感激。多谢你们

4

1 回答 1

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.

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

于 2013-01-07T22:13:03.703 回答