私は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>";
}
?>
「htmlspecialchars」と「PDO」-prepared statements'を見てください。 – mroman
なぜhtmlspecialcharsは関係がありますか? – Spanner
表示しているファイル名やファイルの内容にJavascriptやHTMLが含まれていると、困ったことになります。このセキュリティ用語は、「クロスサイトスクリプティング」です。あなたのSQLクエリは_SQL Injection_に対しても脆弱です。それはあなたが持っていた中核的な質問には関係ありませんが、実際には関連しています。 – mroman