2016-09-13 7 views
1

私はCSVファイルのPHPアップロードページを作成しようとしています。これはエンドユーザファイルを受け取り、mysql DB内の新しいテーブルにアップロードします。ユーザはセッションを使用して値が格納されるテキストボックスを介してテーブル名を指定し、csvファイルはファイル名入力を介してエンドユーザによって選択される。PHP MySQL CSVファイルのインポートページ

私はconnection.phpを使用していますが、以下のコードをページに埋め込んでいますが、mysqlクエリで構文エラーが発生しています。これらの2つのアクションを一緒に実行できますか(つまり、テーブルを作成してインポートするか)、別々に行う必要がありますか?

任意の考えを歓迎..

<?php 
session_start(); 

include "scripts/db_connection.php"; //Connect to Database 

$_SESSION['tablename'] = $tablename; 

$deleterecords = "TRUNCATE TABLE '$tablename'"; //empty the table of its current records 
mysql_query($deleterecords); 



//Upload File 
if (isset($_POST['submit'])) { 
if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 
    echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; 
    echo "<h2>Displaying contents:</h2>"; 
    readfile($_FILES['filename']['tmp_name']); 
} 

//Import uploaded file to Database 
$handle = fopen($_FILES['filename']['tmp_name'], "r"); 



while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $import="CREATE TABLE $tablename; INSERT into $tablename(item1,item2,item3,item4,item5) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')"; 

    mysql_query($import) or die(mysql_error()); 
} 

fclose($handle); 

print "Import done"; 

//view upload form 
}else { 

print "Upload new csv by browsing to file and clicking on Upload<br />\n"; 

print "<form enctype='multipart/form-data' action='Upload_mobile.php' method='post'>"; 

print "Name of table to upload to:<br />\n"; 

print "<input size='50' type='text' name='tablename'><br />\n"; 

print "File name to import:<br />\n"; 

print "<input size='50' type='file' name='filename'><br />\n"; 

print "<input type='submit' name='submit' value='Upload'></form>"; 

} 

?> 

更新:[OK]を、私はmysqliのマルチクエリを使用しましたが、ページ/スクリプトがエラーなしで実行されますが$に基づいてテーブルを作成していないとして、私は混乱していますtablenameまたはエラーをスローします。 Anyideasこれをトラブルシューティングする方法は?以下

新しい更新されたコード:

<?php 
session_start(); 

include "scripts/db_connection.php"; //Connect to Database 

$_SESSION['tablename'] = $tablename; 

$deleterecords = "TRUNCATE TABLE '$tablename'"; //empty the table of its current records 
mysqli_query($deleterecords); 



//Upload File 
if (isset($_POST['submit'])) { 
if (is_uploaded_file($_FILES['filename']['tmp_name'])) { 
    echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; 
    echo "<h2>Displaying contents:</h2>"; 
    readfile($_FILES['filename']['tmp_name']); 
} 

//Import uploaded file to Database 
$handle = fopen($_FILES['filename']['tmp_name'], "r"); 



while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    $import="CREATE TABLE $tablename; INSERT into  $tablename(item1,item2,item3,item4,item5) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')"; 

    mysqli_multi_query($import) or die(mysqli_error()); 
    } 

fclose($handle); 

print "Import done"; 

//view upload form 
}else { 

print "Upload new csv by browsing to file and clicking on Upload<br />\n"; 

print "<form enctype='multipart/form-data' action='Upload_mobile.php' method='post'>"; 

print "Name of table to upload to:<br />\n"; 

print "<input size='50' type='text' name='tablename'><br />\n"; 

print "File name to import:<br />\n"; 

print "<input size='50' type='file' name='filename'><br />\n"; 

print "<input type='submit' name='submit' value='Upload'></form>"; 

} 


?> 

アップデート2:私は「は、LOAD DATA INFILE」を用いて以下に別の角度からこの時に来ることを試みたが、私はまだどこにも届きません。まず、テーブルを作成していないのですが、DBへの接続が機能しています。私は、このテーブルを作成しようとする試みが失敗していて、それが明らかに残りの部分を停止させるかどうかはわかりません。思考が歓迎されました!

<?php 

session_start(); 

//connect to DB 

$_SESSION['Tablename'] = $Tablename; 
$_SESSION['filename'] = $filename; 


} 

if (isset($_POST['submit'])) { 
$createtable = mysqli_query($db, "CREATE TABLE $Tablename"); 
mysqli_query($createtable) or die(mysqli_error()); 

$importfile = " 
    LOAD DATA INFILE '".$filename."' 
      INTO TABLE results CHARACTER SET utf8 FIELDS TERMINATED BY ',' 
      OPTIONALLY ENCLOSED BY '\"' IGNORE 1 LINES (name, description, price, shipping, quantity); 
    "; 

    mysqli_query($importfile) or die(mysqli_error()); 

    } 

{ 

print "Upload new csv by browsing to file and clicking on Upload<br />\n"; 

print "<form enctype='multipart/form-data' action='Upload_mobile.php' method='post'>"; 

print "Name of table to upload to:<br />\n"; 

print "<input size='50' type='text' name='Tablename'><br />\n"; 

print "File name to import:<br />\n"; 

print "<input size='50' type='file' name='filename'><br />\n"; 

print "<input type='submit' name='submit' value='Upload'></form>"; 

} 


?> 
+0

「htmlspecialchars」と「PDO」-prepared statements'を見てください。 – mroman

+0

なぜhtmlspecialcharsは関係がありますか? – Spanner

+0

表示しているファイル名やファイルの内容にJavascriptやHTMLが含まれていると、困ったことになります。このセキュリティ用語は、「クロスサイトスクリプティング」です。あなたのSQLクエリは_SQL Injection_に対しても脆弱です。それはあなたが持っていた中核的な質問には関係ありませんが、実際には関連しています。 – mroman

答えて

0

ここに複数のクエリがあります。つまり、セミコロンを含む文字列と、その文字列の中の他のステートメントを意味します。

個別に電話をかけて個別に呼び出すか、mysqli multi_queryを使用してください。

とにかくmysql*ライブラリからは、とにかくmysqliまたはPDOにする必要があります。

+0

私はmysqliマルチクエリを使用しましたが、ページ/スクリプトがエラーなく実行されるので、私は混乱しますが、$ tablenameに基づいてテーブルは作成されません。 – Spanner

関連する問題