我正在解决这个问题,这是我在过去几个小时里尝试过的 我正在上传图片,其中包含一些存储在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))...如果文件输入不为空则重新上载图片并更新细节,但如果我只更新没有图片的细节,则删除已上传且未更新的图片。 (我认为这是问题,但我无法弄清楚如何修复它。)
如果你愿意给我一些帮助或让我朝着正确的方向前进,我将感激不尽。 谢谢你们
答案 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.
让我知道这是否会让你朝着正确的方向前进。