2012-12-17 121 views
0

我跑過這個問題,我正在嘗試過去的幾個小時 我有一個圖像上傳一些細節存儲在分貝。codeigniter更新圖像不重新上傳

我存儲細節和圖像路徑,像魅力一樣工作。現在來編輯部分。 我試圖檢查輸入文件是否爲空,如果是這樣,只更新細節,否則刪除圖像並重新上傳新圖像。問題是這樣的:

如果輸入文件是空的,它更新一切沒有問題,如果不是空它正在更新細節,但圖像是相同的,不會被刪除或重新上傳。 這裏是代碼

$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 is(isset($ image_input))...並且如果文件輸入不是空的,則重新上傳圖片並更新細節,但是如果我只更新沒有圖片的細節,它將刪除已經上傳並且沒有更新的圖片。 (我認爲這是問題,但我不知道如何解決它)。

如果你想給我一些幫助或讓我在正確的方向,我會感激。 謝謝你們

+0

在那裏的任何善良的人? – lesandru

回答

1

首先,這將是一個評論問一個問題,但我沒有足夠的聲譽就增加一個剛纔還... 如果你可以發佈你的HTML表單,這將是有益的,但不那...

1)我假設你提交的表單在開始標記中有enctype =「multipart/form-data」。 2)在這裏您的代碼的第2行,$ this-> input-> post('image'),是來自類型文件的表單輸入的'圖像'?如果是這樣,你的語句將不會工作,因爲'image'是$ _FILES數組的一部分,而不是$ _POST。這意味着當你去檢查它時,它總是空的(或不存在的)。

要驗證表單提交你認爲它是這樣的,只是你在您的文章有第一行代碼之前:

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

讓我知道如果你置身在正確的方向與否。

+0

嗨瑞安,謝謝你的回答,但我解決了問題本人沒有很長時間後,我發佈,我用另一種方法,工作正常:) – lesandru

+0

感謝您的更新!我希望你的CI能夠順利進行。 –