2016-09-28 171 views
0

如何上傳csv文件並將數據保存到我的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循環中使用newEntity而不是patch實體。 –

+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()); 
} 
相關問題