2016-09-26 112 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; 
} 

让我知道你是否面临任何问题