2016-04-28 6 views
-1

cakephpで複数のファイルアップロードに関する問題があります。データベースで複数のファイルをアップロードするPHPコード

複数のファイルをアップロードしようとしましたが、テーブルに複数のエントリを挿入する必要がありますが、これを行うことはできません。

Exの場合 - フォームから3枚の写真をアップロードした場合、ファイル名とともに表に3行を挿入する必要があります。

public function add() { 
      $this->Driver->create(); 
      if ($this->request->is('post')) { 
        for($i=1;$i<4;$i++) 
        { 
         if(empty($this->data['Driver']['document'.$i]['name'])){ 
          unset($this->request->data['Driver']['document'.$i]); 
         } 

         if(!empty($this->data['Driver']['document'.$i]['name'])) 
         { 
          $file=$this->data['Driver']['document'.$i]; 
          $ary_ext=array('jpg','jpeg','xls','docx'); //array of allowed extensions 
          $ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension 
          if(in_array($ext, $ary_ext)) 
          { 
           move_uploaded_file($file['tmp_name'], APP . 'outsidefiles' .DS. time().$file['name']); 
           $this->request->data['Driver']['document'.$i] = time().$file['name']; 
          } 
         } 

        } 

       if ($this->Driver->save($this->request->data)) 
       { 
        //echo "<pre>";print_r($this->request->data); exit(); 
        $this->Session->setFlash('Your post has been saved.'); 
        $this->redirect(array('action' => 'add')); 
       } 
       else 
       { 
        $this->Session->setFlash('Unable to add your post.'); 
       } 
      } 
     } 

add.ctp 


    <h1>Add Post</h1><?php 
    echo $this->Form->create('Driver', array('url' => array('action' => 'add'), 'enctype' => 'multipart/form-data')); 
    echo $this->Form->input('address',array('div' => false, 'class' => 'form-control user-name')); 
    for($i=1; $i<4; $i++) 
    { 
    ?> 


<div id="attachment<?php echo $i;?>" <?php if($i !=1) echo "style='display:none;'";?> > 
      <div> 
      <?php echo $this->Form->input('document'.$i,array('type'=>'file','label' => false,'div' => false));?> 

      </div> 
      <div id="attachmentlink<?php echo $i;?>" <?php if($i==3) echo "style='display:none;'";?>><a href="javascript:void(0);" onclick="show('attachment<?php echo $i+1;?>'); hide('attachmentlink<?php echo $i;?>');">Add Another Attachment</a></div> 
      </div> 
      <?php } ?> 

<?php 
echo $this->Form->end('Save'); 
?> 
+0

何*問題*正確に?あなたは問題を絞り込んで詳細を提供する必要がありますか?エラーなどありますか? – jeroen

+1

同じ質問http://stackoverflow.com/questions/36888022/php-code-to-upload-multiple-images-cakephp – Salines

+0

私は私のフォームから3つの画像を選択し、次に3行のデータを挿入する必要があると仮定する必要があります.. 。私は2つの画像を選択した場合、2行をdatabseのように挿入する必要があります。 –

答えて

0

Plzをビューファイルでこの

public function add() { 
    $this->Driver->create(); 
    if ($this->request->is('post')) { 
      for($i=1;$i<4;$i++) 
      { 
       if(empty($this->data['Driver']['document'][$i]['name'])){ 
        unset($this->request->data['Driver']['document'.$i]); 
       } 

       if(!empty($this->data['Driver']['document'][$i]['name'])) 
       { 
        $file=$this->data['Driver']['document'][$i]; 
        $ary_ext=array('jpg','jpeg','xls','docx'); //array of allowed extensions 
        $ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension 
        if(in_array($ext, $ary_ext)) 
        { 
         move_uploaded_file($file['tmp_name'], APP . 'outsidefiles' .DS. time().$file['name']); 
         $this->request->data['Driver']['document'][$i] = time().$file['name']; 
        } 
       } 

      } 

     if ($this->Driver->save($this->request->data)){ 
      $this->Session->setFlash('Your post has been saved.'); 
      $this->redirect(array('action' => 'add')); 
     }else{ 
      $this->Session->setFlash('Unable to add your post.'); 
     } 
    } 
} 
+0

これは私のコードと同じです.... –

+0

$ this-> data ['Driver'] ['document'] [ $ i]; –

0

CakePHPの2 Field naming conventions

echo $this->Form->input('Modelname.0.fieldname'); 
echo $this->Form->input('Modelname.1.fieldname'); 

を試してみてください

//for($i=1; $i<4; $i++).. 
echo $this->Form->input('Driver.'.$i.'.document', array('type' => 'file')); 

$this->request->data['Driver'][$i]['document']['name'] // where name is uploaded document filename 

使用Model::saveMany(array $data = null, array $options = array())

一度に同じモデルの複数の行を保存するために使用される方法...

if ($this->Driver->saveMany($this->request->data))... 

のようなあなたのコントローラUPDATEあなたのコード

<?php 

public function add() 
{ 
    if ($this->request->is('post')) { 
     for($i=1;$i<4;$i++) 
     { 
      if(empty($this->request->data['Driver'][$i]['document']['name'])){ 
       unset($this->request->data['Driver'][$i]['document']); 
      } 

      if(!empty($this->request->data['Driver'][$i]['document']['name'])) 
      { 
       $time = time(); // <------------- 
       $file=$this->request->data['Driver'][$i]['document']; 
       $ary_ext=array('jpg','jpeg','xls','docx'); //array of allowed extensions 
       $ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension 
       if(in_array($ext, $ary_ext)) 
       { 
        move_uploaded_file($file['tmp_name'], APP . 'outsidefiles' .DS. $time.$file['name']); 
        $this->request->data['Driver'][$i]['document'] = $time.$file['name']; 
       } 
      } 

     } 
     $this->Driver->create(); 
     if ($this->Driver->saveMany($this->request->data)) 
     { 
      //echo "<pre>";print_r($this->request->data); exit(); 
      $this->Session->setFlash('Your post has been saved.'); 
      $this->redirect(array('action' => 'index')); 
     } 
     else 
     { 
      $this->Session->setFlash('Unable to add your post.'); 
     } 
    } 
} 

add.ctp

<h1>Add Post</h1> 
<?php 
    echo $this->Form->create('Driver', array('type' => 'file')); 
    //echo $this->Form->input('address',array('div' => false, 'class' => 'form-control user-name')); ???? 
    for($i=1; $i<4; $i++) 
    { 
    ?> 


<div id="attachment<?php echo $i;?>" <?php if($i !=1) echo "style='display:none;'";?> > 
      <div> 
      <?php echo $this->Form->input('Driver.'.$i.'.document',array('type'=>'file','label' => false,'div' => false));?> 

      </div> 
      <div id="attachmentlink<?php echo $i;?>" <?php if($i==3) echo "style='display:none;'";?>><a href="javascript:void(0);" onclick="show('attachment<?php echo $i+1;?>'); hide('attachmentlink<?php echo $i;?>');">Add Another Attachment</a></div> 
      </div> 
      <?php } ?> 

<?php 
echo $this->Form->end('Save'); 
?> 
+0

いいえ、その作業していない –

+0

$ this-> request-> data [.... – Salines

+0

私は私の答えを更新します – Salines