Обновить выбранный файл при многократной загрузке CodeIgniter - PullRequest
1 голос
/ 05 марта 2020

Я написал codeigniter для трех загружаемых файлов. И когда я обновлю один или два, третий будет перезаписывать данные, которые я загружал ранее, с пустым в БД. Как заставить его обновить только тот файл, который мне нужен. я пробовал если! пусто $ _FILES, но моя голова начала дымиться: (

 <input type="file" class="form-control"  name="userfile[]">Front
 <input type="file" class="form-control"  name="userfile[]">Back
 <input type="file" class="form-control"  name="userfile[]">Side

это мой контроллер

public function prosesUpdate2(){
$data = $this->input->post('id');
    $this->load->library('upload');

    $dataInfo = array();
    $files = $_FILES;
    $cpt = count($_FILES['userfile']['name']);
    for($i=0; $i<$cpt; $i++)
    {           
        $_FILES['userfile']['name']= $files['userfile']['name'][$i];
        $_FILES['userfile']['type']= $files['userfile']['type'][$i];
        $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
        $_FILES['userfile']['error']= $files['userfile']['error'][$i];
        $_FILES['userfile']['size']= $files['userfile']['size'][$i];    

        $this->upload->initialize($this->set_upload_options());
        $this->upload->do_upload();
        $dataInfo[] = $this->upload->data();
    }
    $files = array(
        'front'       => $dataInfo[0]['file_name'],
        'back'       => $dataInfo[1]['file_name'],
        'side'       => $dataInfo[2]['file_name']
        // 'userdatecreate'    => date('Y-m-d H:i:s')
        );
        $result_set = $this->update_building->db_update($files, $data);
        $this->session->set_flashdata('file_success', 'Upload File Success!');

}

модель

public function db_update($data,$id)
{
$this->db->where('id', $id);       
$this->db->update('allbuidingdata', $data);
}

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Вы забыли поместить имя поля в функцию do_upload

$this->upload->do_upload('userfile');

Надеюсь, это поможет!

0 голосов
/ 05 марта 2020

Пожалуйста, проверьте опубликованные файлы перед обновлением.

Немного измени свой код.

public function prosesUpdate2(){
  $data = $this->input->post('id');
  $this->load->library('upload');

  $dataInfo = array();
  $files = $_FILES;
  $files_to_update = array();
  $cpt = count($_FILES['userfile']['name']);
  for($i=0; $i<$cpt; $i++)
  {           
    $_FILES['userfile']['name']= $files['userfile']['name'][$i];
    $_FILES['userfile']['type']= $files['userfile']['type'][$i];
    $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
    $_FILES['userfile']['error']= $files['userfile']['error'][$i];
    $_FILES['userfile']['size']= $files['userfile']['size'][$i];    

    $this->upload->initialize($this->set_upload_options());
    $this->upload->do_upload();
    $dataInfo[] = $this->upload->data();
  }
  $files_to_update= array(
     'userdatecreate'    => date('Y-m-d H:i:s')
  );
  if($dataInfo[0]['file_name']){
     $files_to_update['front'] = $dataInfo[0]['file_name'];
  }
  if($dataInfo[1]['file_name']){
     $files_to_update['back'] = $dataInfo[1]['file_name'];
  }
  if($dataInfo[2]['file_name']){
     $files_to_update['side'] = $dataInfo[2]['file_name'];
  }
  $result_set = $this->update_building->db_update($files_to_update, $data);
  $this->session->set_flashdata('file_success', 'Upload File Success!');
}
...