최종 사용자 파일을 가져 와서 mysql DB의 새 테이블에 업로드하는 CSV 파일 PHP 업로드 페이지를 만들려고합니다. 사용자는 세션을 사용하여 값을 저장하는 텍스트 상자를 통해 테이블 이름을 지정하고 csv 파일은 최종 사용자가 파일 이름 입력을 통해 선택합니다.PHP MySQL CSV 파일 가져 오기 페이지
connection.php가 작동 중이며 아래 코드를 페이지에 삽입했지만 mysql 쿼리에서 구문 오류가 계속 발생합니다. 이 두 가지 작업 (예 : 표 만들기 및 가져 오기)을 함께 수행 할 수 있습니까, 아니면 별도로 수행해야합니까?
어떤 생각을 환영 ..
<?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>";
}
?>
업데이트 : 좋아, 내가 mysqli 다중 쿼리를 사용했지만, 페이지/스크립트가 오류없이 실행되지만 $를 기반으로 테이블을 생성하지 않는 한 내가 혼란 스러워요 tablename 또는 오류를 던집니다. Anythingas이 문제를 해결하는 방법? 아래
새로운 업데이트 된 코드 :
<?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>";
}
?>
UPDATE2 : 나는 "LOAD 데이터 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이 있으면 문제가 발생할 수 있습니다. 이에 대한 보안 용어는 Cross Site Scripting_입니다. SQL 쿼리는 _SQL Injection_에도 취약합니다. 그것은 당신이 가진 핵심 질문에는 관련이 없지만 실제로는 관련이 있습니다. – mroman