2013-06-21 64 views
0

如何使值保持不變如何使用文件輸入更新圖片以添加圖片。我想要實現的是當我將該字段留空時,文件不會被更改。所以我之前上傳的照片會留在那裏。如果將值保留爲空,CodeIgniter

我的formInput被稱爲:<td><?= form_upload('aanbiedingfoto');?></td>

而且我的數據庫字段被稱爲fotonaam

我想這樣的事情,但它沒有工作: if($_FILES['aanbiedingfoto']['name'] != '') { $data['fotonaam'] = $_FILES['aanbiedingfoto']['name']; }

我在做什麼錯?

我的控制器:

function editaanbieding() 
{ 
    $data = array(
     'Aanbieding' => $this->input->post('aanbiedingnaam'), 
     'Tekst' => $this->input->post('aanbiedingomschrijving'), 
     'Prijs' => $this->input->post('aanbiedingprijs'), 
     'Conditie' => $this->input->post('aanbiedingconditie') 
    ); 
    if($_FILES['aanbiedingfoto']['name'] != '') { $data['fotonaam'] = $_FILES['aanbiedingfoto']['name']; } 
    print_r($_FILES); 
    $config['upload_path'] = './assets/uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = '1000'; 
    $config['max_width'] = ''; 
    $config['max_height'] = ''; 
    $config['overwrite'] = TRUE; 
    $config['remove_spaces'] = TRUE; 
    $config['file_name'] = $this->input->post('aanbiedingfoto'); 

    $this->load->library('upload', $config); 

    if (! $this->upload->do_upload('aanbiedingfoto')) 
    { 
     $error = array('error' => $this->upload->display_errors()); 
    }else{ 
    $image_data = $this->upload->data(); 
    } 
    $this->aanbieding_model->edit_aanbieding($data, $image_data); 
    redirect('members/aanbiedingen'); 
} 

我的模型:

function edit_aanbieding($data, $image_data) 
{ 
$id = $this->uri->segment(3); 
$id2 = $this->input->post('fotoid'); 
$id3 = $this->input->post('aanbiedingid'); 
/* 
echo 'bedrijfaanbiedingid ', $id, '<br/>'; 
echo 'fotoid ', $id2, '<br/>'; 
echo 'aanbiedingid ', $id3, '<br/>'; 
die; 
*/ 
$this->db->where('idaanbiedingen', $id3); 
$this->db->update('Aanbiedingen', $data); 
$this->db->where('idfotoaanbiedingen', $id2); 
    $insertfoto = array(
     'fotonaam' => $image_data['file_name'] 
    ); 
$this->db->update('fotoaanbiedingen', $insertfoto); 
$this->db->where('idbedrijfaanbiedingen', $id); 
    } 
+0

你能發佈一些更多的代碼,所以我可以得到你想要達到什麼樣的一個完整的或更好的視野?謝謝! – bottleboot

+0

添加我的控制器和模型:) –

+0

@KeesSonnema,看看'$ this-> aanbieding_model-> edit_aanbieding($ data,$ image_data);',如果你沒有上傳任何文件,'$ image_data'會是'NULL',你是怎麼處理這個的?它工作沒有任何錯誤? –

回答

0

如果不上傳任何文件,$image_dataNULL

雖然有更好的解決方案,可以解決這個問題就這麼簡單:
查找你的模型本節,並如下更改:

if (isset($image_data)) { 
    $insertfoto = array(
     'fotonaam' => $image_data['file_name'] 
    ); 
    $this->db->where(...); // Fill the blank with correct arguments 
    $this->db->update('fotoaanbiedingen', $insertfoto); 
} 

旁註:

這完全是可選的。爲了提高性能並擺脫可能的錯誤,我建議如下:

  • 避免在不需要時加載庫或調用方法。
  • 設置函數參數的默認值。

就像一個演示:

控制器:

... 
if (! empty($_FILES['aanbiedingfoto']['name'])) { 
    $data['fotonaam']  = $_FILES['aanbiedingfoto']['name']; 
    $config['upload_path'] = './assets/uploads/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size']  = '1000'; 
    $config['max_width']  = ''; 
    $config['max_height'] = ''; 
    $config['overwrite']  = TRUE; 
    $config['remove_spaces'] = TRUE; 
    $config['file_name']  = $this->input->post('aanbiedingfoto'); 

    $this->load->library('upload', $config); 

    if ($this->upload->do_upload('aanbiedingfoto')) { 
     $this->aanbieding_model->edit_aanbieding($data, $this->upload->data()); 
    } else { 
     $error = array('error' => $this->upload->display_errors()); 
     // If you want to update the table while the uploading failed 
     $this->aanbieding_model->edit_aanbieding($data); 
    } 
} 
... 

的型號:

function edit_aanbieding($data, $image_data = NULL) 
{ 
    ... 
    if (isset($image_data)) { 
     $insertfoto = array(
      'fotonaam' => $image_data['file_name'] 
     ); 
     $this->db->where(...); // Fill the blank with correct arguments 
     $this->db->update('fotoaanbiedingen', $insertfoto); 
    } 
    ... 
} 
+0

啊是的。看起來很簡單:D –

+0

什麼是更好的解決方案?我現在不需要,但很高興知道。 –

+0

最好在'Controller'中處理這個問題。例如,爲什麼在上傳沒有文件時應該調用upload文件或者調用'do_upload()'方法? –

1

把你上傳的代碼,如果語句中:

<?php 
    if($_FILES['aanbiedingfoto']['name'] != ''){ 
     if (! $this->upload->do_upload('aanbiedingfoto')){ 
      $error = array('error' => $this->upload->display_errors()); 
     }else{ 
     $image_data = $this->upload->data(); 
     } 
     $this->aanbieding_model->edit_aanbieding($data, $image_data, true); 
    }else{ 
     $this->aanbieding_model->edit_aanbieding($data, $image_data, false); 
    } 
    ?> 

這是編輯功能

<?php 
    function edit_aanbieding($data, $image_data, $uploaded = false){  
     $id = $this->uri->segment(3); 
     $id2 = $this->input->post('fotoid'); 
     $id3 = $this->input->post('aanbiedingid'); 
     /* 
     echo 'bedrijfaanbiedingid ', $id, '<br/>'; 
     echo 'fotoid ', $id2, '<br/>'; 
     echo 'aanbiedingid ', $id3, '<br/>'; 
     die; 
     */ 
     $this->db->where('idaanbiedingen', $id3); 
     $this->db->update('Aanbiedingen', $data); 
     $this->db->where('idfotoaanbiedingen', $id2); 
     if($uploaded){  //update photo code 
      $insertfoto = array('fotonaam' => $image_data['file_name']); 
      $this->db->where('idbedrijfaanbiedingen', $id); 
      $this->db->update('fotoaanbiedingen', $insertfoto); 
     } 
    } 
?>