php - 导入包含日期或文本列的 CSV 文件

标签 php mysql csv import fgetcsv

我有一个 CSV 文件,其中有一列的日期格式为 d/m/Y,或者里面的单词“Illimité”在法语中表示无限。

我希望每次它读取“Illimité”时都将 NULL 值放入 M​​ySQL 表中。

这是我当前的 PHP 代码:

if (isset($_POST['submit'])) {
        $query = "TRUNCATE TABLE `formation` ";
        $result = mysql_query($query);
        $file = $_FILES['file']['tmp_name'];
        $handle = fopen($file, "r");
        while (($fileop = fgetcsv($handle, 1000, ";")) !== false) {

            $nom = $fileop[0];
            $prenom = $fileop[1];
            $formation = $fileop[16];
            $validite = $fileop[26];

            if (is_numeric($validite)) {
                $validite = date_format(date_create_from_format('d/m/Y', $validite), 'Y-m-d');
                $sql = mysql_query("INSERT INTO formation (nom,prenom,formation,validite,usermaj) VALUES ('$nom','$prenom','$formation','$validite','importCSV')");
                } else {
                $sql = mysql_query("INSERT INTO formation (nom,prenom,formation,validite,usermaj) VALUES ('$nom','$prenom','$formation',NULL,'importCSV')");
            }
        }

很遗憾,这不起作用。 MySql 没有显示任何错误,并且始终为 NULL。 如有任何帮助,我将不胜感激。

最佳答案

试试这个:

function myFunc($CSVValue){

    if(validateDate($CSVValue)){
        //your mysql logic where you put in the date
    }else{
        //your mysql logic where you put in the null
    }


}

function validateDate($date)
{
    $d = DateTime::createFromFormat('d/m/Y', $date);
    return $d && $d->format('d/m/Y') == $date;
}

函数是从这个 answer 复制的或 php.net

-- 更新--

除了您提供的内容外,我不知道您的代码看起来如何。 如果你把它放在你的代码中,它可能看起来像这样:

if (isset($_POST['submit'])) {
        $query = "TRUNCATE TABLE `formation` ";
        $result = mysql_query($query);
        $file = $_FILES['file']['tmp_name'];
        $handle = fopen($file, "r");
        while (($fileop = fgetcsv($handle, 1000, ";")) !== false) {

            $nom = $fileop[0];
            $prenom = $fileop[1];
            $formation = $fileop[16];
            $validite = $fileop[26];

            $d = DateTime::createFromFormat('d/m/Y', $validite);

            if ($d && $d->format('d/m/Y') == $validite) {
                $validite = date_format(date_create_from_format('d/m/Y', $validite), 'Y-m-d');
                $sql = mysql_query("INSERT INTO formation (nom,prenom,formation,validite,usermaj) VALUES ('$nom','$prenom','$formation','$validite','importCSV')");
                } else {
                $sql = mysql_query("INSERT INTO formation (nom,prenom,formation,validite,usermaj) VALUES ('$nom','$prenom','$formation',NULL,'importCSV')");
            }
        }

关于php - 导入包含日期或文本列的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841010/

相关文章:

Powershell:逐行读取文本文件并在 "|"上拆分

mysql - 使用替换在 MySQL 中匹配字符串的更快方法

php - 在 JOIN 语句中使用派生表

php - 简单的 if 语句(不是速记)

php - PHP 的 SOAP 扩展是否有好的替代方案?

mysql - 使用同一表中另一行的数据更新行

PHP/MySQL 在 10 分钟后更新 mysql 字段。

python - 错误值Error : cannot reindex from a duplicate axis because of concatenating dataframes

read.csv 列的零和一为逻辑

php - 基于月份 PHP MYSQL 组合 JSON 对象