2012-11-15 202 views
0

我已經看到了在這個問題上的幾個問題,但是他們都沒有能夠幫助我。導入CSV到MySQL

這是我使用的腳本。

<?php 

//connect to the database 
$connect = mysql_connect("localhost","username","password"); 
mysql_select_db("mydatabase",$connect); //select the table 
// 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    //loop through the csv file and insert into database 
    do { 
     if ($data[0]) { 
      mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
       ( 
        '".addslashes($data[0])."', 
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."' 
       ) 
      "); 
     } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

    //redirect 
    header('Location: import.php?success=1'); die; 

} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Import a CSV File with PHP & MySQL</title> 
</head> 

<body> 

<?php if (!empty($_GET[success])) { echo "<b>Your file has been imported.</b><br><br>"; } //generic success notice ?> 

<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
    Choose your file: <br /> 
    <input name="csv" type="file" id="csv" /> 
    <input type="submit" name="Submit" value="Submit" /> 
</form> 

</body> 
</html> 

它可以正常工作,但無法定義標題行。

我想做的事情,如果可能的話,是從第一行獲取每列,並使用它來定義項目將被放置在數據庫中的列。

所以我想$data[0]分成CSV文件中定義的每個列。我一直在使用LOAD DATA LOCAL INFILE嘗試,但它不是爲我工作的某些原因。

+0

查找SQL注入 – Mike

+0

@Mike這是一個管理面板...如果他們要自己注入網站,他們只是普通的愚蠢,不回答這些問題解決,標記 – kira423

+0

你已舉報我的意見,因爲我不回答你所有的問題嗎?這就是爲什麼它是評論,而不是答案。我實際上正在爲你所有的問題輸入一個完整的答案,但是meh。與不安全的代碼繼續,如果這就是你怎麼會是。 – Mike

回答

2

你可能想先搶到第一線,並創建該列列表字符串:

<?php 

if ($_FILES[csv][size] > 0) { 

    //get the csv file 
    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    // get headers 
    $columns = fgetcsv($handle,1000,",","'"); 
    $column_list = implode(",",$columns); 

    //loop through the csv file and insert into database 
    while ($data = fgetcsv($handle,1000,",","'")) { 
     if ($data[0]) { 
     for ($i=0;$i<count($columns);$i++){ 
      $data[$i]="'".mysql_real_escape_string($data[$i])."'"; 
     } 
     $values = implode(",",$data); 

     $query = "INSERT INTO contacts ($column_list) ($values)"; 

     mysql_query($query); 

     } 
    } 

    //redirect 
    header('Location: import.php?success=1'); die; 

} 
+0

謝謝你現在完美的作品! – kira423