2016-09-28 118 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()); 
} 
相关问题