PHP仅导入特定的CSV行

时间:2018-07-07 16:15:56

标签: php html csv file-upload

我正在做一个PHP脚本,将CSV文件上传到数据库。问题是我有很多时间非常大的CSV,包含超过1.000行,但是我只需要一个,尤其是上周的一个(例如2018.07.01)。 上传是使用表单完成的。

这是html

格式
   <form action="home2.php" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
      UPLOAD CSV: <br /> 
     <input name="csv" type="file" id="csv" /> 
     <input type="submit" name="submit" value="Upload" /> 

这是我用来上传home2.php文件中所有csv的代码

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]) { 
       mysqli_query($con,"INSERT INTO db (id, date, hour, open, max, min, close, volume) VALUES 
            ( 
                '', 
                '".addslashes($data[0])."', 
                '".addslashes($data[1])."', 
                '".addslashes($data[2])."', 
                '".addslashes($data[3])."', 
                '".addslashes($data[4])."', 
                '".addslashes($data[5])."', 
                '".addslashes($data[6])."' 
            ) 
        "); 
    } 
} while ($data = fgetcsv($handle,1000,",","'"));

1 个答案:

答案 0 :(得分:0)

我希望这段代码可以为您提供帮助

$dateFilter = "2018-07-07";

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

    //get the csv file
    $file = $_FILES[csv][tmp_name];

    $csvData = file_get_contents($file);
    $lines = explode(PHP_EOL, $csvData);

    foreach ($lines as $line) {
        $lineArr = str_getcsv($line);

        if ($lineArr[0] == $dateFilter) {
            $slashesValues = array_map('addslashes', array_values($lineArr));

            mysqli_query($con, "INSERT INTO db (`date`, `hour`, `open`, `max`, `min`, `close`, `volume`) 
                                VALUES (implode(',', $slashesValues))");
        }
    }
}