2017-06-01 21 views
0

まず、私はフランス語なので、私の英語をお願いします! 解決できない問題があります。私は複数のCSVファイルをドラッグ&ドロップできるウェブサイトを持っていますが、一度に1つのファイルだけを処理します。それは1つのファイルと完全に動作し、ファイル内のデータを読み取り、ハイチャートグラフを表示します。私は、同じように書かれた複数のCSVファイルから来たいくつかのグラフを表示したいと思います。私は一度に複数のファイルをアップロードすることができ、ドラッグ&ドロップを行うために管理し、私はこれを取得besauceそれは動作します:一方アップロードされた複数のCSVファイルを読むPHP

Array ([name] => Array ([0] => 14-04-2014 (1).csv [1] => 14-04-2014.csv) [type] => Array ([0] => text/csv [1] => text/csv) [tmp_name] => Array ([0] => /tmp/phpbQZ7NI [1] => /tmp/phptvEwXI) [error] => Array ([0] => 0 [1] => 0) [size] => Array ([0] => 589 [1] => 589)) 

を、私は中にこれらのファイルを処理するために管理することはできませんループ。ここで

はループせずに、一つのファイルのコードです:私の試みのすべてにもかかわらず

if (($fichier = fopen("upload/".$_FILES['file']['name'], "r")) !== FALSE) { 

$oui_total = 0; 
$non_total = 0; 

$tab_oui = array(); 
$tab_non = array(); 
$tab_sat = array(); 

$tableau = array(); 

$date = null; 

$id_borne= null; 


while (($data = fgetcsv($fichier,0, ",")) !== FALSE) { //on lit ligne par ligne dans cette boucle ! 

    //on lit l'ID de la borne s'il existe 
    if ((mb_strimwidth($data[0], 0, 4,'') != "2014") 
     AND (mb_strimwidth($data[0], 0, 4,'') != "2015") 
     AND (mb_strimwidth($data[0], 0, 4,'') != "2016") 
     AND (mb_strimwidth($data[0], 0, 4,'') != "2017") 
     AND (mb_strimwidth($data[0], 0, 4,'') != "2018") 
     AND (mb_strimwidth($data[0], 0, 4,'') != "2019")) 
     { 
     $id_borne=$data[0]; 
    } 
    elseif ($date === null) { 
     $date = mb_strimwidth($data[0], 0, 10,''); 
    } 

    // sauter les lignes vides 
    if ($data[0] === null) { 
     continue; 
    } 

    // pour écrire le sous-titre du graphe 
    if (strlen($data[O]) > 5 && $date === null) 

    // parser l'heure et la date 
    $data[0] = trim($data[0]); 
    $format_date = preg_match(
     '~ 
      (?P<year> \d+) - 
      (?P<month> \d+) - 
      (?P<day> \d+) \h+ 
      (?P<hour> \d+) : 
      (?P<minute> \d+) : 
      (?P<second> \d+) 
     ~x', 
     $data[0], 
     $match 
    ); 

    //if ($format_date == false) { 
    // exit("Le fichier csv n'a pas le format attendu: la date devrait être \"yyyy-mm-dd hh:mm:ss\"."); 
    //} 


    // Par défaut : heure d'hiver. Donc on a les bons horaires du 25 oct au 29 mars. 
    // ete : 29 mars et + 
    // hiver : 25 octobre et + 
    // '$ete' vaut 'true' si la date du CSV est en été 
    $ete = ((intval($match['month']) > 3 && intval($match['month']) < 10) 
     || (intval($match['month']) === 3 && intval($match['day']) > 28) 
     || (intval($match['month']) === 10 && intval($match['day']) < 25)); 

    $correctif_heure = $ete === true ? 1 : 0; 

    // on stocke l'information dans un tableau avec l'heure en minutes pour clef (exemple: 8*60+15=495 pour 8h15) 
    $heure_en_minute = (intval($match['hour']) + $correctif_heure) * 60 + intval($match['minute']); 
    $tableau[$heure_en_minute] = array(
     'oui' => intval($data[1]), 
     'non' => intval($data[2]), 
     'sat' => ceil($data[1]/($data[1] + $data[2]) * 100) 
    ); 

    $oui_total += $data[1]; 
    $non_total += $data[2]; 
} 

    fclose($fichier); 
} 
else { 
    exit(TXT_IMPOSSIBLE); 
} 

unlink($dossier . $_FILES['file']['name']); 

$total = $oui_total + $non_total; 
$sat_total = ceil($oui_total/$total * 100); 
$unsat_total = 100 - $sat_total; 

、私はそれが一度に複数のファイルを読むためには、このコードを「変換」するために管理することができます。 ご協力いただければ幸いです! ありがとう

+0

そのためにforeachループを使用できます –

+0

@AdhanTimothyYounesはい、試しましたが、うまくいかなかったはずです。データを表に「変換」する方法がわかりません。私は何をしたのですか? – CamilleKah

答えて

0

私はこの質問がすでにここで答えられていると思います。アップロードした各ファイルをループするだけです。私がやったことだ
Multiple file upload in php
http://php.net/manual/en/features.file-upload.multiple.php

はそれがお役に立てば幸いです。..

+0

あなたの答えをありがとう! 私はそれを試みましたが、1つのファイルのデータは、いくつかのファイルのためのテーブルでなければなりません。 – CamilleKah

+0

welcome..hopeあなたは私の答えを投票することができます..ありがとう:) –

+0

申し訳ありません、私はテーピングを終えていませんでしたが、私はEnterを押してラインに乗ってコメントが投稿されました。お願いします ? :) – CamilleKah

0

<?php 
$total = count($_FILES['file']['name']); 

// Loop through each file 
for($i=0; $i<$total; $i++) { 
    // Get the temp file path 
    $tmpFilePath = $_FILES['file']['tmp_name'][$i]; 

    //Make sure we have a filepath 
    if ($tmpFilePath != ""){ 
    //Setup our new file path 
    $newFilePath = "./upload/" . $_FILES['file']['name'][$i]; 
    //Upload the file into the temp dir 
    if(move_uploaded_file($tmpFilePath, $newFilePath)) { 
     //Handle other code here 
     if (($fichier = fopen("upload/".$_FILES['file']['name'][$i], "r")) !== FALSE) { 
     $oui_total = 0; 
     $non_total = 0; 

     $tab_oui = array(); 
     $tab_non = array(); 
     $tab_sat = array(); 

     $tableau = array(); 

     // more code below... 
     // ... 
     } 
    } 
    } 
} 

あなたにもっと理解していただくことを確認し、このリンクは

$valid_formats = array("csv", "CSV"); 
//$max_file_size = 1024*100; //100 kb 
$path = "upload/"; // Upload directory 
$count = 0; 

if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){ 
    // Loop $_FILES to exeicute all files 
    foreach ($_FILES['files']['name'] as $f => $name) { 
    if (!empty($_FILES['files'][$f])) { 
     if ($_FILES['files']['error'][$f] == 4) { 
      exit('Erreur n°' . $_FILES['files']['error'][$f]); 
     } 
     if ($_FILES['files']['error'][$f] == 0) { 
      if (!in_array(pathinfo($name, PATHINFO_EXTENSION), $valid_formats)) { 
       //$message[] = "$name is not a valid format"; 
       continue; // Skip invalid file formats 
      } else { // No error found! Move uploaded files 
       if (is_uploaded_file($_FILES['files']['tmp_name'][$f])) { 
        if (move_uploaded_file($_FILES["files"]["tmp_name"][$f], $path . $name)){ 

         // pendant le dev: 
         //if (($fichier = fopen("upload/14-11-2014 (5).csv", "r")) !== FALSE) { 
         if (($fichier[$f] = fopen($path.$_FILES['files']['name'][$f], "r")) !== FALSE) { 

          $oui_total[$f] = 0; 
          $non_total[$f] = 0; 

          $tab_oui[$f] = array(); 
          $tab_non[$f] = array(); 
          $tab_sat[$f] = array(); 

          $tableau[$f] = array(); 

          $date[$f] = null; 

          $id_borne[$f]= null; 

          var_dump($fichier[$f]); 
          while (($data[$f] = fgetcsv($fichier[$f],0, ",")) !== FALSE) { //on lit ligne par ligne dans cette boucle ! 

           var_dump($data[$f]); 
           //on lit l'ID. 
           if ((mb_strimwidth($data[$f][0], 0, 4,'') != "2014") 
            AND (mb_strimwidth($data[$f][0], 0, 4,'') != "2015") 
            AND (mb_strimwidth($data[$f][0], 0, 4,'') != "2016") 
            AND (mb_strimwidth($data[$f][0], 0, 4,'') != "2017") 
            AND (mb_strimwidth($data[$f][0], 0, 4,'') != "2018") 
            AND (mb_strimwidth($data[$f][0], 0, 4,'') != "2019")) 
           { 
            $id_borne[$f]=$data[$f][0]; 
           } 
           elseif ($date[$f] === null) { 
            $date[$f] = mb_strimwidth($data[$f][0], 0, 10,''); 
           } 

           // sauter les lignes vides 
           if ($data[$f][0] === null) { 
            continue; 
           } 

           // pour écrire le sous-titre du graphe 
           if (strlen($data[$f][O]) > 5 && $date[$f] === null) 

            // parser l'heure et la date 
            $data[$f][0] = trim($data[$f][0]); 
           $format_date[$f] = preg_match(
            '~ 
            (?P<year> \d+) - 
            (?P<month> \d+) - 
            (?P<day> \d+) \h+ 
            (?P<hour> \d+) : 
            (?P<minute> \d+) : 
            (?P<second> \d+) 
           ~x', 
            $data[$f][0], 
            $match[$f] 
           ); 

           //if ($format_date == false) { 
           // exit("Le fichier csv n'a pas le format attendu: la date devrait être \"yyyy-mm-dd hh:mm:ss\"."); 
           //} 


           // Par défaut nos bornes sont en heure d'hiver. Donc on a les bons horaires du 25 oct au 29 mars. 
           // ete : 29 mars et + 
           // hiver : 25 octobre et + 
           // '$ete' vaut 'true' si la date du CSV est en été 
           $ete[$f] = ((intval($match[$f]['month']) > 3 && intval($match[$f]['month']) < 10) 
            || (intval($match[$f]['month']) === 3 && intval($match[$f]['day']) > 28) 
            || (intval($match[$f]['month']) === 10 && intval($match[$f]['day']) < 25)); 

           $correctif_heure[$f] = $ete[$f] === true ? 1 : 0; 

           // on stocke l'information dans un tableau avec l'heure en minutes pour clef (exemple: 8*60+15=495 pour 8h15) 
           $heure_en_minute[$f] = (intval($match[$f]['hour']) + $correctif_heure[$f]) * 60 + intval($match[$f]['minute']); 
           $tableau[$f][$heure_en_minute] = array(
            'oui' => intval($data[$f][1]), 
            'non' => intval($data[$f][2]), 
            'sat' => ceil($data[$f][1]/($data[$f][1] + $data[$f][2]) * 100) 
           ); 

           $oui_total[$f] += $data[$f][1]; 
           $non_total[$f] += $data[$f][2]; 
          } 

          fclose($fichier[$f]); 
         } 
         else { 
          exit(TXT_IMPOSSIBLE); 
         } 

         unlink($path . $_FILES['files']['name'][$f]); 

         $total[$f] = $oui_total[$f] + $non_total[$f]; 
         $sat_total[$f] = ceil($oui_total[$f]/$total[$f] * 100); 
         $unsat_total[$f] = 100 - $sat_total[$f]; 


        }else{ 
         exit('Erreur lors de l\'enregistrement'); 
        } 
        $count++; // Number of successfully uploaded file 
       } 
       else { 
        exit('Fichier non uploadé'); 
       } 
      } 
     } 
    } 
} 

しかし、のdidnこと私は何かが欠けているデータがnullです

+0

hm .. 14-04-2014.csvのサンプルデータは何ですか? –

+0

3つの列があり、日付と時刻のあるもの、「はい」の投票数のもの、「いいえ」の投票の最後のもの 1行目:2014-04-14 08:30:00/5/2; 2行目:2014-04-14 09:00:00/17/3; – CamilleKah

関連する問題