2016-09-27 4 views
0

1つのPHPページが実行されている間にCSVの内容をアップロードしたいと思います。私はCSVをアップロードするためのブラウズボタンを必要としません。ページが実行されているときはいつでも、PHPページでパスがすでに定義されているCSVが見つかり、内容をテーブルに挿入する必要があります。今私はfopenに関連するエラーを取得しています。ここでブラウズボタンのないCSVアップロード

私はこのエラー

警告取得しています私のコード

<?php 

//database connection details 
$connect = mysql_connect('localhost', 'root', ''); 

if (!$connect) { 
    die('Could not connect to MySQL: ' . mysql_error()); 
} 

//your database name 
$cid = mysql_select_db('test', $connect); 

// path where your CSV file is located 


define('CSV_PATH', 'D:/xamp/htdocs/test/'); 

// Name of your CSV file 
$csv_file = CSV_PATH . "test.csv"; 

echo $csv_file; 
if (($handle = fopen($csv_file, "r")) !== FALSE) { 
    fgetcsv($handle); 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     for ($c = 0; $c < $num; $c++) { 
      $col[$c] = $data[$c]; 
     } 

     $col1 = $col[0]; 
     $col2 = $col[1]; 
     $col3 = $col[2]; 
     $col4 = $col[3]; 
     $col5 = $col[4]; 
     $col6 = $col[5]; 


     // SQL Query to insert data into DataBase 
     $query = "INSERT INTO testcsv(Line,Part No,Make,Model,Year,Part Type) VALUES('" . $col1 . "','" . $col2 . "','" . $col3 . "','" . $col4 . "','" . $col5 . "','" . $col6 . "')"; 
     $s = mysql_query($query, $connect); 
    } 
    fclose($handle); 
} 

echo "File data successfully imported to database!!"; 
mysql_close($connect); 
?> 

です:ストリームをオープンに失敗しました::のfopen(D:/xamp/htdocs/test/test.csvを)いいえD:\ xamp \ htdocs \ test \ test.php(22行目)のファイルまたはディレクトリ ファイルデータをデータベースに正常にインポートしました!

誰でも手伝ってもらえますか?

+0

"このようなファイルやディレクトリはありません"については何が不明ですか? – Quentin

+0

「アップロード」という用語は、クライアントからサーバーにデータを送信することを意味します。サーバー上のファイルパスが(一般的に)クライアント上のファイルパスと同じではないことに気付いていますか?それらは通常、2つの異なるコンピュータです。あなたのテスト環境は1台のコンピュータだけを使用していますか?本番システムでも1台のコンピュータしか使用できませんか? – Quentin

+0

[PHP - ストリームを開くことができませんでした:そのようなファイルやディレクトリはありません](http://stackoverflow.com/questions/36577020/php-failed-to-open-stream-no-such-file-or-directory ) –

答えて

0

なぜ特定のエラーが発生するのかわかりません - そのファイルが存在しないか、ディレクトリが読み込み不可能だと思われるかもしれませんが、現在非推奨のmysql_関数を使用しており、したがって、SQLインジェクションに対して脆弱になります。しかし、これはおそらく問題ではないテストにすぎません。事のこのタイプのための好ましい方法はprepared statementsと一緒にmysqliまたはPDOのいずれかを使用することです

- 以下は、あなたがそれを実装する方法の例である - 私は別のデータとデータベースの詳細でこれをテストし、動作するように見えました良い。

define('CSV_PATH','D:/xamp/htdocs/test/'); 
$filepath = CSV_PATH . "test.csv"; 

/* database connection details */ 
$host = 'localhost'; 
$uname = 'xxx'; 
$pwd = 'xxx'; 
$db  = 'xxx'; 

/* create db connection */ 
$con = new mysqli($host, $uname, $pwd, $db); 

/* construct required sql statement */ 
$sql='insert into `testcsv` (`Line`,`Part No`,`Make`,`Model`,`Year`,`Part Type`) values (?,?,?,?,?,?)'; 

/* create prepared statement */ 
$stmt=$con->prepare($sql); 


if(!$stmt){ 

    echo 'error preparing sql statement!'; 
    $con->close(); 

} else { 

    /* bind the columns to variables which will be populated later */ 
    /* use "i" for integer and "s" for string values */ 
    $stmt->bind_param('ssssss', $line,$part,$make,$model,$year,$type); 

    /* access csv file */ 
    $file=new SplFileObject($filepath); 

    /* Process each row of the csv file */ 
    while(!$file->eof()) { 

     /* read the line into a variable */ 
     $data=$file->fgetcsv(); 

     if(!empty($data)){ 
      /* assign a variable to each field value for this row */ 
      list($line,$part,$make,$model,$year,$type)=$data; 

      /* execute statement with the now defined variables */ 
      $stmt->execute(); 
     } 
    } 

    /* tidy up */ 
    $stmt->close(); 
    $con->close(); 

    echo 'database updated with new records from csv'; 
} 
+0

質問に答える答えがあります。あなたはあなたが答えを知らなかったと言って半分の文章を過ごした後、コメントであったはずのすごくたくさんのスペースを費やしました。 – Quentin

関連する問題