2016-07-15 9 views
0

CakePHP3.xではなく.csvファイルからデータベースにデータをアップロードするために必要なPHPコードを作成しましたが、これを自分のフレームワークに統合するのは苦労しています。ファイルをデータベースにアップロードするのではなく、CSVファイルからデータを読み込むだけです。CakePH 3.0はfgetを使ってローカルファイルの内容を読み込みます

これはローカルホスト上でデータベースにデータをアップロードするためのコードです。

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$fp = fopen("CSV_Upload_Test.csv", "r"); 

while(!feof($fp)) { 
    if(!$line = fgetcsv($fp, 1000, ',', '"')) { 
     continue; 
    } 

    $mysqlimport = "INSERT INTO divisiontwosix.csvtestsystems VALUES('".$line[0]."','".$line[1]."','".$line[2]."','".$line[3]."','".$line[4]."')"; 
    mysql_query($mysqlimport) or die(mysql_error()); 
} 

fclose($fp); 

は、これが私のサーバー上のCakePHPのインストールのための私のコードですが、私はそれを実装する方法についての答えを見つけるように見える(またはそれ以上の可能性を見つけるために正しい質問をする)ことはできません。

これは私のコントローラである:

public function upload() 
    { 
     $system = $this->Systems->newEntity(); 
     //Check if file has been uploaded. 
     if(!empty($this->request->data['Systems']['upload']['name'])) 
      { 
       $file = $this->request->data['Systems']['upload']; 
      } 
     if ($this->request->is('post')) { 
      $system = $this->Systems->patchEntity($system, $this->request->data); 
//   add upload data to controller function upload 
      $file = $_REQUEST['text']; 
      $fp = fopen("$file","r"); 
      while(!feof($fp)) { 
    if(!$line = fgetcsv($fp, 1000, ',', '"')) { 
     continue; 
    } 

    $mysqlimport = "INSERT INTO divtwosix.systems VALUES('".$line[0]."','".$line[1]."','".$line[2]."','".$line[3]."','".$line[4]."')"; 
    mysql_query($mysqlimport) or die(mysql_error()); 
} 

fclose($fp); 
      if ($this->Systems->save($system)) { 
       $this->Flash->success(__('The system has been saved.')); 
       return $this->redirect(['action' => 'index']); 
      } else { 
       $this->Flash->error(__('The system could not be saved. Please, try again.')); 
      } 
     } 
     $estimates = $this->Systems->Estimates->find('list', ['limit' => 200]); 
     $this->set(compact('system', 'estimates')); 
     $this->set('_serialize', ['system']); 
    } 

そして、あなたは、私は物事のカップルを試してみましたが見ることができるように、これは私のフォーム(upload.ctp)です:

<?= $this->Form->create($system) ?> 
    <fieldset> 
     <legend><?= __('Upload System') ?></legend> 
     <?php 
      echo $this->Form->create('User', array('url' => array('action' => 'create'), 'enctype' => 'multipart/form-data')); 
//   echo $this->Form->create($system, ['type'=>'file']); 
      echo $this->Form->input('estimates_id', ['label'=>'Select Estimate Name','options' => $estimates]); 
//   echo $this->Form->input('file', ['label'=>'Upload works with CSV files only','type' => 'file']); 
      echo $this->Form->input('text', ['label'=>'Input File location']); 
     ?> 
    </fieldset> 
    <?= $this->Form->button(__('Upload')) ?> 

そして、私は取得エラー

fopen(C:\Users\jrogers\Desktop\Book1.csv): failed to open stream: No such file or directory [APP/Controller/SystemsController.php, line 86] 

または

0123です

ファイルをデータベースに追加するのではなく、.csvファイルのデータをデータベースに追加することのみを目的としています。私はおそらく単純なものを見逃しているかもしれないが、援助を大いに感謝するだろうと分かっている。私が探している例では、ファイルをデータベースにアップロードする方法のみを示し、ローカルファイルからデータを読み込む方法は示しません。あなたの助けを前にありがとう。この例のように、従来のPHPスクリプトで

+0

なぜファイル名の代わりにファイル名のテキスト入力を使用していますか?あなたがコメントアウトしたファイル入力?テキスト入力は、サーバーにファイルの名前を伝えることができますが、そのファイルはサーバーではなくコンピューター上にあるため、ファイルを開くことができません。ファイルがサーバーに送信されるように、ファイル入力を使用する必要があります。このファイルは、その要求の期間、tmpフォルダーで読み取ることができるようになります。 –

答えて

0

ファイルをアップロードし、あなたのコードを変更する必要がありますので、$ _FILES配列を介してアクセスする必要がありが

$file = $_FILES['text']['tmp_name']; 
    $fp = fopen($file,"r"); 

幸運

ソース:http://php.net/manual/en/features.file-upload.post-method.php

注:私は」ケーキのユーザーではありませんが、IMOはアップロードされたファイルにアクセスするための適切な方法を持っている必要があります

+0

ありがとうございますが、依然として同じまたは類似の問題があります。私は、ファイルをデータベースにアップロードし、それをソースファイルとして使用しなければならないと思います。私はそれがCSVからの情報を引き出しているとは思わない。 –

関連する問題