2016-09-08 5 views
1

CodeIgniter 3で複数の画像をアップロードする際に問題が発生しました。MY_Upload Classを試しましたが、他のコードを試しましたが、私にとってはうまくいかなかったのです。複数のアップロードでエラーが発生しました

コントローラ

function do_uploadMultiple(){ 
     $config['upload_path'] = './assets/page/img/'; 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size'] = '0'; 
     $config['max_width'] = '0'; 
     $config['max_height'] = '0'; 
     $config['encrypt_name'] = TRUE; 

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

     $nameField = 'imagem'; 
     if (! $this->upload->do_upload($nameField)){ 
      $error = array('error' => $this->upload->display_errors()); 
     }else{ 
      $foto = array('upload_data' => $this->upload->data()); 

      return $foto['upload_data']['file_name']; 

     } 
    } 

    public function cadastrarPage(){ 

     $data['nome_menu'] = $this->input->post('nome'); 
     $data['titulo'] = $this->input->post('titulo'); 
     $data['text'] = $this->input->post('text'); 
     $data['video'] = $this->input->post('video'); 
     $teste['imagem'] = $this->input->post('imagem'); 

     $id_abrase = $this->Abrase_model->cadastrarPage($data); 

     for($i = 0; $i < count($_FILES['imagem']['name']); $i++){ 
      $img['id_abrase'] = $id_abrase; 
      $img['imagem'] = $this->do_uploadMultiple(); 

      $result = $this->Abrase_model->gravarImagem($img); 
      if($result){ 
       echo 'yeah'; 
      }else{ 
       echo 'fail'; 
      } 
     } 


    } 

ビュー

<form method="post" action="<?php echo base_url('index.php/abrase/cadastrarPage'); ?>" enctype="multipart/form-data"> 
       <div class="form-group"> 
        <label for="nome">Nome da página no menu</label> 
        <input id="nome" name="nome" type="text" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label for="titulo">Título</label> 
        <input id="titulo" name="titulo" type="text" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label for="text">Texto da Página</label> 
        <textarea class="form-control" name="text" id="text" cols="30" rows="10"></textarea> 
       </div> 
       <div class="form-group"> 
        <label for="imagem">Selecione as imagens </label> 
        <input class="file" name="imagem[]" id="imagem" type="file" multiple data-show-upload="false"> 
       </div> 
       <div class="form-group"> 
        <label for="video">Vídeo</label> 
        <input type="text" name="video" id="video" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label for="pdf">Arquivos</label> 
       </div> 
       <div class="form-group"> 
        <input class="btn btn-info" type="submit" value="Cadastrar"> 
       </div> 
      </form> 

モデル

public function cadastrarPage($data){ 
     $this->db->set('data_add', 'NOW()', FALSE); 
     $this->db->set('excluido', 0); 

     $this->db->insert('abrase', $data); 
     return $this->db->insert_id(); 
    } 

public function gravarImagem($data){ 
     return $this->db->insert('abrase_img', $data); 
    } 

そして今、エラー

A PHP Error was encountered 

Severity: Warning 

Message: is_uploaded_file() expects parameter 1 to be string, array given 

Filename: libraries/Upload.php 

Line Number: 412 

Backtrace: 

File: C:\xampp\htdocs\Tattica\ABRASE\application\controllers\Abrase.php 
Line: 32 
Function: do_upload 

File: C:\xampp\htdocs\Tattica\ABRASE\application\controllers\Abrase.php 
Line: 54 
Function: do_uploadMultiple 

File: C:\xampp\htdocs\Tattica\ABRASE\index.php 
Line: 315 
Function: require_once 

私はウェブで見つけたものすべてを試しましたが、できません。私は助けてください。

+2

あなたはエラーがどこから来ていることがあるので、do_upload/is_uploaded_file機能を表示することがありますし、is_uploaded_fileに渡されているものは何でもので、それは明らかだが、配列ではなく、エラーが言うように、文字列です。 –

+1

エラーメッセージは非常にクリアです。そこから始めてください。 – Sparky

+0

私は複数のロールをアップロードしてforの中に入れて、一度に1つのイメージを使うことができますか? –

答えて

1

私は同じ問題を抱えていましたが、Codeigniterは実際には複数のファイルのアップロードを処理できません。複数のアップロードクラスは古いcodeigniter用ですが、ここでは使用できるコードです。これはネイティブのPHPコードを使用し、これはcodeigniterで複数をアップロードする唯一の方法です。

foreach($_FILES['file']['tmp_name'] as $index => $f) 
    { 
    $target_dir = './assets'; 
    $target_file = $target_dir . basename($_FILES["file"]["name"][$index]); 
    $uploadOk = 1; 
    $files_name = $_FILES["file"]["name"][$index]; 
    // Check if file already exists 
    if (file_exists($target_file)) 
    { 
     //Filexists 
     $uploadOk = 0; 
    } 
    // Check file size 
    if ($_FILES["file"]["size"][$index] > 5000000) 
    { 
     echo "Sorry, your file is too large."; 
     $uploadOk = 0; 
    } 
    // Check if $uploadOk is set to 0 by an error 
    if ($uploadOk == 0) 
    { 
     echo "Sorry, your file was not uploaded."; 
     // if everything is ok, try to upload file 
    } 
    else 
    { 
     if (move_uploaded_file($_FILES["file"]["tmp_name"][$index], $target_file)) 
     { 
      //success 
     } 
     else 
     { 
      echo "Sorry, there was an error uploading your file."; 
     } 
    } 
} 
+0

締め切りに他のプロジェクトがあるので、私は週末にテストを行います –

関連する問題