2013-02-18 2 views
0

Est-il possible de supprimer des lignes supplémentaires lors du téléchargement dans un fichier .csv en PHP ou en supprimant des mots spécifiques?Téléchargement de fichier .csv avec inclusion et exclusion de ligne et de col

S'il vous plaît jeter un oeil à ma capture d'écran. Je veux exclure ceux encerclés quand je traite le téléchargement dans MySQL.

Screenshot Full Size

Voici mon code trouvé sur le net.

<?php 

$message = null; 

$allowed_extensions = array('csv'); 

$upload_path = ''; 

if (!empty($_FILES['file'])) { 

    if ($_FILES['file']['error'] == 0) { 

     // check extension 
     $file = explode(".", $_FILES['file']['name']); 
     $extension = array_pop($file); 

     if (in_array($extension, $allowed_extensions)) { 

      if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_path.'/'.$_FILES['file']['name'])) { 

       if (($handle = fopen($upload_path.'/'.$_FILES['file']['name'], "r")) !== false) { 

        $keys = array(); 
        $out = array(); 

        $insert = array(); 

        $line = 1; 

        while (($row = fgetcsv($handle, 0, ',', '"')) !== FALSE) { 

         foreach($row as $key => $value) { 
          if ($line === 1) { 
           $keys[$key] = $value; 
          } else { 
           $out[$line][$key] = $value; 

          } 
         } 

         $line++; 

        } 

        fclose($handle);  

        if (!empty($keys) && !empty($out)) { 

         $db = new PDO('mysql:host=localhost;dbname=attendance', 'root', 'root'); 
         $db->exec("SET CHARACTER SET utf8"); 

         foreach($out as $key => $value) { 

          $sql = "INSERT INTO `report` (`"; 
          $sql .= implode("`, `", $keys); 
          $sql .= "`) VALUES ("; 
          $sql .= implode(", ", array_fill(0, count($keys), "?")); 
          $sql .= ")"; 
          $statement = $db->prepare($sql); 
          $statement->execute($value); 

         } 

         $message = '<span class="green">File has been uploaded successfully</span>'; 

        } 

       } 

      } 

     } else { 
      $message = '<span class="red">Only .csv file format is allowed</span>'; 
     } 

    } else { 
     $message = '<span class="red">There was a problem with your file</span>'; 
    } 

} 

?> 
+0

les codes ci-dessus. – Japeth

+0

Ce n'est pas essayer. Que télécharger une solution et vous souhaitez le modifier. – Jon

Répondre

0

Eh bien, sans plus d'info - il semble que les lignes que vous voulez exclure ont moins de lignes que les autres (je suppose que vous ne voulez pas les lignes vides non plus).

Vous pouvez utiliser la fonction

$arr= str_getcsv(); 

lire une ligne de données CSV dans un tableau le faire

if(sizeof($arr)!=$validCount) 

sur le tableau résultant vous obtenez à exclure des lignes non d'une certaine longueur ($ validCount). De toute évidence, nous pourrions obtenir beaucoup plus en profondeur pour l'exclusion, mais je suppose que cela va commencer.

Remarque - ceci nécessite PHP5.3 ou supérieur.

HTH

R

+0

est-il un moyen d'importer le nom des colonnes sélectionnées uniquement à partir de .csv – Japeth

Questions connexes