2017-04-24 117 views
1

我知道这是重复的问题。但我已经尝试了所有我在https://stackoverflow.com/上找到的答案。当导入CSV跳过标题或第一行

我认为在我的情况下,我插入和更新数据,如果相同的日期匹配比记录将更新,如果不是它将插入。

下面是我的文件代码:

<?php 
if (isset($_POST['submit']) && $_POST['upload-csv'] == 'upload') { 
    $error = array(); 
    $success = array(); 
    $filename = $_FILES['file']['name']; 
    $filetype = wp_check_filetype($filename); 

    if ($filetype['ext'] == 'csv' && $filetype['type'] == 'text/csv') { 

     $handle = fopen($_FILES['file']['tmp_name'], "r"); 
     $row = 0; 
     $skip_row_number = array("1"); 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $data = array_map("utf8_encode", $data); 

      if ($row > 0) 
      { 

       $table_name = $wpdb->prefix . 'prayer'; 
       $ipquery = $wpdb->get_results("SELECT * FROM `$table_name` WHERE `date` = '".$data[0]."'");  
       $query_res = $wpdb->num_rows; 
       // Check if same date data 
       if($query_res >=1){ 
        $updateQuery = "UPDATE `$table_name` SET 
              `date` = '".$data[0]."', 
              `first_start` = '".$data[1]."', 
              `first_end` = '".$data[2]."', 
              `second_start` = '".$data[3]."', 
              `second_end` = '".$data[4]."', 
              `third_start` = '".$data[5]."', 
              `third_end` = '".$data[6]."', 
              `forth_start` = '".$data[7]."', 
              `forth_end` = '".$data[8]."', 
              `five_start` = '".$data[9]."', 
              `five_end` = '".$data[10]."', 
              `done` = '".$data[10]."' 
              WHERE `$table_name`.`date` = '".$data[0]."';"; 
        $up_res = $wpdb->query($updateQuery); 
       }else{ 
        $query = "INSERT INTO $table_name (date, first_start, first_end, second_start, 
          second_end, third_start, third_end, forth_start, forth_end, five_start, five_end, done) 
          VALUES ('".$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."')"; 
        $insert_res = $wpdb->query($query); 
       } 

      } 

     $row++; 
     } 
     fclose($handle); 
     $success[] = 'Import done.'; 
    } else { 
     $error[] = 'Please upload CSV file only'; 
    } 
} 
?> 

我曾尝试下面的答案忽略标题:

Skip the first line of a CSV file

Import CSV, exclude first row

skip first line of fgetcsv method in php

帮我排序出来是问题。

+0

您可以直接调用'fgetcsv($处理,1000, “”))的',而上述'线(($数据= fgetcsv($处理,1000, “”))!= = FALSE {' –

+0

只需做一个简单的'$ data = fgetcsv($ handle,1000,“,”);'在开始while循环之前。这将读取,并忽略该文件的第一行 – RiggsFolly

+0

我已尝试过,但同样的问题一次又一次。 – mageDev0688

回答

1

ParseCSV是从CSV获取数据的最新且简便的方法,您可以轻松地从CSV获取数据控制权。

中,你必须添加库文件按照正确的路径

e.g. require_once 'parsecsv.lib.php'; 

然后返回标题和数据seperately后。

$filename = 'abc.csv'; // path of CSV file or after upload pass temp path of file 
$csv = new parseCSV(); 
$csv->auto($filename); 

foreach ($csv->titles as $value): 
$getcsvtitle[] = // get header in variable 
endforeach; 

foreach ($csv->data as $key => $row): 
//$getdataasperrow = // get data row wise. 
endforeach; 

数组形式ParseCSV返回的数据只是添加库后,这样你就可以很容易地单独的头和其他数据,并以新的线和特殊字符,以及我一直一直用它作为很好的兼容。

请参考下面的链接进一步的细节以及。

ParseCSV GitHub

+0

感谢您的回答,我会尝试上面的代码,并会相应地更新您。 – mageDev0688

+0

@ mageDev0688 np。:) –