2016-09-13 3 views
1

최종 사용자 파일을 가져 와서 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>"; 

} 


?> 
+0

''htmlspecialchars'와''PDO''prepared statements'을 살펴보십시오. – mroman

+0

죄송합니다. 왜 htmlspecialchars와 관련이 있습니까? – Spanner

+0

표시 할 파일 이름이나 파일 내용에 Javascript 또는 HTML이 있으면 문제가 발생할 수 있습니다. 이에 대한 보안 용어는 Cross Site Scripting_입니다. SQL 쿼리는 _SQL Injection_에도 취약합니다. 그것은 당신이 가진 핵심 질문에는 관련이 없지만 실제로는 관련이 있습니다. – mroman

답변

0

여기에 멀티 쿼리가 있습니다. 즉, 문자열에 세미콜론 다음에 다른 명령문이있는 문자열을 의미합니다.

개별적으로 전화를 걸거나 mysqli multi_query을 사용하십시오.

어쨌든 mysql* 라이브러리에서 벗어나 mysqli 또는 PDO에 있어야합니다.

+0

좋아요. mysqli 다중 쿼리를 사용했지만 페이지/스크립트가 오류없이 실행되지만 $ tablename을 기반으로 테이블을 만들지 않기 때문에 혼란 스럽습니다. – Spanner