2013-05-09 109 views
-1

這個腳本運行良好,但添加了excel文件(標題名稱)的第一行。我想要忽略循環第一行 - 請檢查腳本 -刪除CSV文件的第一行 - php csv文件上傳問題

<?php 

//connect to the database 
$connect = mysql_connect("localhost","root","password"); 
mysql_select_db("mydatadb",$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 bulk_listings (name, description, owner_id, list_in, auction_type, start_time, start_time_type, end_time, end_time_type, duration, quantity, category_id, addl_category_id, currency, start_price, reserve_price, buyout_price, is_offer, offer_min, offer_max) VALUES 
       (
        '".addslashes($data[1])."', 
        '".addslashes($data[2])."', 
        '".addslashes($data[3])."', 
        '".addslashes($data[4])."', 
        '".addslashes($data[5])."', 
        '".addslashes($data[6])."', 
        '".addslashes($data[7])."', 
        '".addslashes($data[8])."', 
        '".addslashes($data[9])."', 
        '".addslashes($data[10])."', 
        '".addslashes($data[11])."', 
        '".addslashes($data[12])."', 
        '".addslashes($data[13])."', 
        '".addslashes($data[14])."', 
        '".addslashes($data[15])."', 
        '".addslashes($data[16])."', 
        '".addslashes($data[17])."', 
        '".addslashes($data[18])."', 
        '".addslashes($data[19])."', 
        '".addslashes($data[20])."' 
       ) 
      "); 
     } 
    } 
    while ($data = fgetcsv($handle,10000,",")); 
    //redirect 
    header('Location: import.php?success=1'); die; 
} 
?> 

稱爲Import.php

<?php 

//connect to the database 

mysql_connect ("localhost","root","password") 
    or die ('Error: ' . mysql_error()); 

echo "connected to database!"; 

mysql_select_db ("mydatadb"); 

// Insert data into table 

     $name = mysql_real_escape_string($data[1]); 
     $description = mysql_real_escape_string($data[2]); 
     $owner_id = mysql_real_escape_string($data[3]); 
     $list_in = mysql_real_escape_string($data[4]); 
     $auction_type = mysql_real_escape_string($data[5]); 
     $start_time = mysql_real_escape_string($data[6]); 
     $start_time_type = mysql_real_escape_string($data[7]); 
     $end_time = mysql_real_escape_string($data[8]); 
     $end_time_type = mysql_real_escape_string($data[9]); 
     $duration = mysql_real_escape_string($data[10]); 
     $quantity = mysql_real_escape_string($data[11]); 
     $category_id = mysql_real_escape_string($data[12]); 
     $addl_category_id = mysql_real_escape_string($data[13]); 
     $currency = mysql_real_escape_string($data[14]); 
     $start_price = mysql_real_escape_string($data[15]); 
     $reserve_price = mysql_real_escape_string($data[16]); 
     $buyout_price = mysql_real_escape_string($data[17]); 
     $is_offer = mysql_real_escape_string($data[18]); 
     $offer_min = mysql_real_escape_string($data[19]); 
     $offer_max = mysql_real_escape_string($data[20]); 

$action = mysql_real_escape_string('insert php code for button here'); 

$query = "INSERT INTO bulk_listings 
     (name, description, owner_id, list_in, auction_type, start_time, start_time_type, end_time, end_time_type, duration, quantity, category_id, addl_category_id, currency, start_price, reserve_price, buyout_price, is_offer, offer_min, offer_max) 
     VALUES 
     ('$name', '$description', '$owner_id', '$list_in', '$auction_type', '$start_time', '$start_time_type', '$end_time', '$end_time_type', '$duration', '$quantity', '$category_id', '$addl_category_id', '$currency', '$start_price', '$reserve_price', '$buyout_price', '$is_offer', '$offer_min', '$offer_max') "; 
mysql_query($query) or die ('Error updating database'); 

echo "Database updated successfully!"; 

?> 
</body> 
</html> 

另一個文件我試過 - fgetcsv()&而($數據= fgetcsv( $處理,10000, 「」));但仍然沒有工作。

請幫助我,告訴我在哪裏做錯了?

感謝

+2

扭轉你做/同時,使之成爲簡單而循環;否則第一個$ data行只會被提取__after__在循環內執行代碼 – 2013-05-09 10:19:24

+1

並學習如何使用MySQLi和預處理語句,當你像這樣大量插入時,準備好的語句可以提高性能 – 2013-05-09 10:21:25

+0

我也可以建議(如果你的不能使用mysqli)查看'array_map()'和'implode()'來減少你的代碼。即array_map $ data with mysql_real_escape_string,'$ data_values =''「。implode(」','「,$ data)。」'「;' – Waygood 2013-05-09 10:23:45

回答

-1

在您需要在創建手柄後添加一行張貼代碼的第一部分,所以行:

$handle = fopen($file,"r"); 

變爲:

$handle = fopen($file,"r"); 
fgetcsv($handle,10000,","); 

這將得到第一行,然後在循環中忽略它,因爲循環開始時指針將位於第二行。

+0

感謝您的回覆。現在它正確地處理所有列,但它插入一個空行。是否有任何更改 - while($ data = fgetcsv($ handle,10000,「,」)); – user1250920 2013-05-09 10:34:44

+0

如果你想忽略所有的空列, 變化: 如果($數據[0]){ 於:(!空($數據[0])) 如果{ – 2013-05-09 10:36:21

+0

感謝您的答覆。還是同樣的問題 - 請檢查圖像 - http://oi39.tinypic.com/53wksy.jpg – user1250920 2013-05-09 10:41:48

0

你基本上要刪除這是你的第一行數組的第一個索引..

$data = fgetcsv($handle,10000,",")); 
$data = array_shift($data); 
+0

我用你的腳本也在我的第一個文件,並瞭解這個腳本...非常感謝您的幫助。 – user1250920 2013-05-09 11:19:11