2016-09-26 83 views
0

現在我試圖做一個表單字段,實現一些上傳文件。例如,我有一種形式的字段上傳,如A,B和C.我想上傳所有文件只提交一次,並保存在MySQL的文件名在這樣的列:在codeigniter中多次上傳

| id | filename_A | filename_B | filename_C |

即時通訊困惑如何將其插入到MySQL。有辦法做這樣的學習課程嗎? 我會告訴你的代碼。 謝謝你這麼多。

控制器文件:

function index(){ 
     $data = array(); 
     if($this->input->post('fileSubmit') && !empty($_FILES['userFiles']['name'])){ 
      $filesCount = count($_FILES['userFiles']['name']); 
      for($i = 0; $i < $filesCount; $i++){ 
       $_FILES['userFile']['name'] = $_FILES['userFiles']['name'][$i]; 
       $_FILES['userFile']['type'] = $_FILES['userFiles']['type'][$i]; 
       $_FILES['userFile']['tmp_name'] = $_FILES['userFiles']['tmp_name'][$i]; 
       $_FILES['userFile']['error'] = $_FILES['userFiles']['error'][$i]; 
       $_FILES['userFile']['size'] = $_FILES['userFiles']['size'][$i]; 

       $uploadPath = 'uploads'; 
       $config['upload_path'] = $uploadPath; 
       $config['allowed_types'] = 'gif|jpg|png'; 

       $this->load->library('upload', $config); 
       $this->upload->initialize($config); 
       if($this->upload->do_upload('userFile')){ 
        $fileData = $this->upload->data(); 
        $uploadData[$i]['file_name'] = $fileData['file_name']; 
       } 
      } 
      if(!empty($uploadData)){ 
       $insert = $this->file->insert($uploadData); 
       $statusMsg = $insert?'Files uploaded successfully.':'Some problem occurred, please try again.'; 
       $this->session->set_flashdata('statusMsg',$statusMsg); 
      } 
     } 

模型文件:

public function insert($data = array()){ 
     $insert = $this->db->insert_batch('files',$data); 
     return $insert?true:false; 
    } 

視圖文件:

<div class="form-group"> 
        <label>Choose File A</label> 
        <input type="file" class="form-control" name="userFiles[]" multiple/> 
       </div> 
       <div class="form-group"> 
        <label>Choose Files B</label> 
        <input type="file" class="form-control" name="userFiles[]" multiple/> 
       </div> 
       <div class="form-group"> 
        <label>Choose Files C</label> 
        <input type="file" class="form-control" name="userFiles[]" multiple/> 
       </div> 
       <div class="form-group"> 
        <input class="form-control" type="submit" name="fileSubmit" value="UPLOAD"/> 
       </div> 

回答

0

我真的很難理解,如果這個代碼在所有的工作(我想你已經陷入困境,如果覆蓋了全球FILES陣列)

嘗試是這樣的

你控制器:

function index() 
{ 
    $arrLetters = range("A","C"); 
    $arrDBData = array(); 
    $files = $_FILES; 
    $countFiles = count($_FILES['userFiles']['name']); 


    for($i=0; $i<$countFiles; $i++) 
    {   
     $_FILES['userFiles']['name']= $files['userFiles']['name'][$i]; 
     $_FILES['userFiles']['type']= $files['userFiles']['type'][$i]; 
     $_FILES['userFiles']['tmp_name']= $files['userFiles']['tmp_name'][$i]; 
     $_FILES['userFiles']['error']= $files['userFiles']['error'][$i]; 
     $_FILES['userFiles']['size']= $files['userFiles']['size'][$i];  

     $uploadPath = 'uploads'; 
     $config = array(
      'upload_path' => $uploadPath, 
      'allowed_types' => 'gif|jpg|png' 
     ); 

     $this->upload->initialize($config); 
     if ($this->upload->do_upload()) 
     { 
      $arrDBData["filename_".$arrLetters[$i]] = $files['userFiles']['name'][$i]; 
     } 

    } 

    $this->file->insert($arrDBData); 
} 

而且你的模型可能看起來像

public function insert($data = array()) 
{ 
    if (count($data) > 0) 
    { 
     $insert = $this->db->insert('files',$data); 
     return $insert?true:false; 
    } 
    return false; 
} 

不幸的是,糾正我,如果我錯了,CI不提供多個上傳的合理處理。 (我沒有發現,在 Codeigniter Upload Documentation任何東西)

0

Downlaod this Codeigniter Library and put this file under application/libraries

使用這樣在你的控制器

if ($_FILES) { 
     $config['upload_path'] = './uploads/'; 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size']  = '200'; 
     $config['max_width']  = '1024'; 
     $config['max_height'] = '768'; 
     $this->load->library('upload'); 
     $this->upload->initialize($config); 
     if (!$this->upload->do_multi_upload("file")) { 
      $data['errors'] = ($this->upload->display_errors()); 
     } else { 
      $images = ($this->upload->get_multi_upload_data()); 
      for ($i = 0; $i < count($images); $i++) { 
      $this->user_model->addUserImage($images[$i]); 
      } 
     } 

,將文件保存在你的模型像這樣

public function addUserImage($image) 
{ 
    $image_data=array(
     'name'=>$image['file_name'] 
    ); 
    $this->db->insert('user_images',$image_data); 
    return true; 
} 

讓我知道你是否面臨任何問題