2015-04-24 7 views
1

У меня есть файл CSV со столбцом, имеющим дату в формате d/m/Y или слово «Illimité» внутри, без ограничений на французском языке.Импортировать CSV-файл с столбцом, имеющим дату или текст внутри

Я бы хотел, чтобы каждый раз, когда он читал «Illimité», он помещал значение NULL в таблицу MySQL.

Вот мой текущий код 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. Любая помощь мне очень понравилась.

+0

сделать свой DB, как Charaset -UTF-8 кодируются –

+0

так ваше заявление, если не проходит, вы пытались var_dump ($ Validite), дает ли оно числовое значение, чтобы у него была возможность пройти? –

+0

@SunilPachlangia Я не могу изменить его на UTF-8, потому что type = date в MySQL – BackTrack57

ответ

0

Попробуйте это:

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')"); 
      } 
     } 
+0

Я пробую ваш код, и он не работает. Я получаю Fatal error: Can not redeclare myFunc() – BackTrack57

+0

Вы должны приложить некоторые усилия самостоятельно, мой код - всего лишь шаблон. вам не следует просто копировать его. –

+0

Большое вам спасибо! Он отлично работает! Я не понимал, как работает ваш код, что я сделал, было неправильно. Мне еще многое предстоит узнать. Добрый день ! – BackTrack57