2013-05-09 46 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