2016-09-28 24 views
0

csvファイルをアップロードしてデータをmy mysqlデータベースに保存するにはどうしたらいいですか? id.in cakephpによる3 私はそれを行うことができません。誰でも私を助けることができます。 私のコントローラ パブリック関数インポート(){csvファイルをアップロードしてcakephpのデータベースにデータを保存する3

if(isset($_POST["submit"])){ 
     if($_FILES['file']['csv']){ 
      $filename = explode('.', $_FILES['file']['csv']); 
      debug($filename); 
      if($filename[1]=='csv'){ 
       $handle = fopen($_FILES['file']['csv'], "r"); 
       while ($data = fgetcsv($handle)){ 
        $item1 = $data[0]; 
        // $item2 = $data[1]; 
        // $item3 = $data[2]; 
        // $item4 = $data[3]; 
        $Applicants = $this->Applicants->patchEntity($Applicants, $item1); 
        $this->Applicants->save($Applicants); 
       } 
       fclose($handle); 
      } 
     } 
    } 
    $this->render(FALSE); 
} 

私の見解:

<div class="col-md-8"> 
     <?= $this->Form->create('Applicants',['type' => 'file','url' => ['controller'=>'Applicants','action' => 'import'],'class'=>'form-inline','role'=>'form',]) ?> 
     <div class="form-group"> 
      <label class="sr-only" for="csv"> CSV </label> 
      <?php echo $this->Form->input('csv', ['type'=>'file','class' => 'form-control', 'label' => false, 'placeholder' => 'csv upload',]); ?> 
     </div> 
     <button type="submit" class="btn btn-default"> Upload </button> 
    <?= $this->Form->end() ?> 
</div> 

答えて

1

あなたの質問は、あなたがコントローラでやりたいん何ビット不明である既存のレコードを更新したいです新しいデータを保存することができます。更新する場合は、patchEntityのみを使用する必要があります。

patchEntityには、必要に応じてデータを変更または更新できるデータベースエンティティが必要です。そのため、最初の列にアプリケーションテーブルのIDが含まれている場合、以下のコードが機能し、$ dataあなたが更新または

を追加したいものは何でもフィールド書くことができますので、あなたの代わりに以下のコードブロックを使用することができます

public function import() { 
    if(isset($_POST["submit"])){ 
     if($_FILES['file']['csv']){ 
      $filename = explode('.', $_FILES['file']['csv']); 
      debug($filename); 
      if($filename[1]=='csv'){ 

       $handle = fopen($_FILES['file']['csv'], "r"); 
       while ($data = fgetcsv($handle)){ 
        $item1 = $data[0]; 

        $data = array(
         'fieldName' => $item1 
        ); 
        // $item2 = $data[1]; 
        // $item3 = $data[2]; 
        // $item4 = $data[3]; 
        $Applicant = $this->Applicants->newEntity($data); 
        $this->Applicants->save($Applicant); 
       } 
       fclose($handle); 
      } 
     } 
    } 
    $this->render(FALSE); 
} 

あなたはより具体的なコード/要件を持っている場合、私はあなたを助けることができるように、その後、共有してくださいそれに応じて。ここで

+0

私は私はcsvファイルをアップロードし、私のdatabase.butにデータに従ってIDを挿入したいですcakephpでこれを行うことができない3 –

+0

データを行単位で保存する場合は、行単位でデータを挿入するか、一度にデータを挿入する場合は、上記のコードでwhileループ自体のpatchエンティティの代わりにnewEntityを使用します。 –

+0

私の編集を確認してください、これは今のところ目的通りに動作するはずです –

0

私の解決策は、CSVファイルをアップロードし、データベース パブリック関数インポート($のID = NULL)を保存することです{

$data = $this->request->data['csv']; 
    $file = $data['tmp_name']; 
    $handle = fopen($file, "r"); 
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { 

     if($row[0] == 'id') { 
      continue; 
     } 

     $Applicants = $this->Applicants->get($row[0]); 
     $columns = [ 
      'written_mark' => $row[1], 
      'written_comments' => $row[2], 
      'viva_mark' => $row[3], 
      'viva_comments' => $row[4] 
     ]; 
     $Applicant = $this->Applicants->patchEntity($Applicants, $columns); 
     $this->Applicants->save($Applicant); 
    } 

    fclose($handle); 
    $this->set('title','Upload Student CSV File Input Number and others'); 
    return $this->redirect($this->referer()); 
} 
関連する問題