Import fichier CSV to PhpMyadmin

Résolu
bonjour je viens d'essayer plusieurs essaie sur l'importation de mon fichier "CSV" dans ma Base PHPMYADMIN mais rien ne s'affiche sur la Base

je vous passe le code html :
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="import.php">
<table border="1">
<tr >
<td colspan="2" align="center"><strong>Import CSV file</strong></td>
</tr>
<tr>
<td align="center">CSV File:</td><td><input type="file" name="file" id="file"></td></tr>
<tr >
<td colspan="2" align="center"><input type="submit" value="submit"></td>
</tr>
</table>
</form>
</body>
</html>

et voici le code php :
<?php
extract(filter_input_array(INPUT_POST));
$fichier = $_FILES ["userfile"]["name"];
if ($fichier){ // ouverture du ficier temporaire
$fp = fopen($_FILES["userfile"]["tmp_name"], "r");
}
else {// fichier inconnu ?>
<p align="center" >- importation echouee -</p>
<p align="center" >- <B> désole mais vous n'avez pas spécifié de chemin valide .. </B> </p>
<?php exit ();}
// declaration de la variable "cpt" qui permettera de compter le nombre de d'enregistrement réalisé
$cpt = 0; ?>
<p align="center">- Importation réussie -</p>
<?php //importation
while (!feof($fp)) {
$ligne = fgets ($fp,4096);
// on crée un tableau des élements séparés par des points virgules
$liste = explode(";", $ligne);
$table = filter_input(INPUT_POST, 'userfile');
// premier élement
$liste[0] = (isset($liste[0]) ) ? $liste[0] : null;
$liste[1] = (isset($liste[1]) ) ? $liste[1] : null;

$liste[2] = (isset($liste[2]) ) ? $liste[2] : null;

$liste[3] = (isset($liste[3]) ) ? $liste[3] : null;
$champ1=$liste[0];
$champ2=$liste[1];
$champ3=$liste[2];
$champ4=$liste[3];
if ($champ1!='')
{
$cpt++;
$db = new mysqli('localhost','root','','projet');
mysql_select_db("projet",$db);
$sql =("INSERT INTO avancement (id , type , pourcentage ,commentaire, date) VALUES ('','$champ1','$champ2','$champ3','$champ4')");
$result = $db-> query($sql);

} }
// fermeture du fichier
fclose ($fp);
?>
<h2> nombre de valeurs nouvellement enregistrees : </h2> <b> <?php echo $cpt; ?> </b>

2 réponses

  1. Modérateur
    Je fais une dernière tentative...
    <?php
    //affichage des erreurs PHP
    error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
    
    //connexion à la bdd
      $mysqli = mysqli_connect("localhost", "root", "", "csv_db");  
    // Vérification de la connexion 
      if ($mysqli->connect_errno) {
          printf("Echec de la connexion: %s\n", $mysqli->connect_error);
          exit();
      }
    
      // bien entendu... le fichier dont tu auras fais un move_upload_file avant...
      $csvFilePath = "Chemin_vers_ton_fichier.csv";
    
      if(!file_exists($csvFilePath)){
        $result['error'] = "Le Fichier ". $csvFilePath . " n'existe pas ou est introuvable "; 
      }
      
      $output = '';  
      $allowed_ext = array("csv");  
      $extension = end(explode(".", $csvFilePath));  
      if(in_array($extension, $allowed_ext))[
        if (($handle = fopen($csvFilePath, "r")) !== FALSE) {
          $row = 0;
          while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $row++; //ligne parcourue
            $nbCol = count($data); // nombre de données trouvées dans la ligne "row"
            if($nbCol >=5 ){
              $name = mysqli_real_escape_string($connect, $row[0]);  
              $address = mysqli_real_escape_string($connect, $row[1]);  
              $gender = mysqli_real_escape_string($connect, $row[2]);  
              $designation = mysqli_real_escape_string($connect, $row[3]);  
              $age = mysqli_real_escape_string($connect, $row[4]);
              
              $sql = "INSERT INTO tbl_employee  
                        (name, address, gender, designation, age)  
                        VALUES ('$name', '$address', '$gender', '$designation', '$age');";  
              if (!$mysqli->query($sql)) {
                  $result['error'] = "Erreur Ligne ". $row ." => ".$mysqli->error ;
              }else{
                $result['success'] = array("Ligne"=>$row, "datas"=>array($name, $address, $gender, $designation, $age));
              }
            }else{
              $result['error'] = " Nombre de colonnes incorectes à la ligne ".$row;
            }
          }
        }else{
          $result['error'] = " Erreur lors de la lecture du fichier ". $csvFilePath ." !";
        }
      }else{
        $result['error'] = " Format de fichier incorect !";
      }
    
      
      if(!empty($result['error'])){
        foreach($result['error'] as $err){
           echo "<div class='error'>".$err."</div>";
        }
      }
    
    


    comme tu peux le voir...j'ai géré au niveau de la connexion et de l'exécution des requêtes... les éventuelles erreurs....
    J'ai également remis le code que tu n'avais pas pris en compte concernant le nombre de "colonnes" de ton fichier pour éviter tes erreurs undefined index...
    J'espère que tu tiendras compte de ces modifications et que tu appliqueras ce même genre d'ecriture "propre" du code à l'avenir.

    Bonne continuation.

    1. merci bien
      voilà ce que me montre comme message d'erreur Jordane :
      Parse error: syntax error, unexpected 'if' (T_IF), expecting ']' in C:\EasyPHP-Devserver-17\eds-www\importation.php on line 26
    2. Modérateur
      Ligne 25 ... remplacer le [ par {
      mais bon.. tu aurais pu le voir par toi même......
    3. je l'ai remplacer automatiquement sa passe pas aussi
      regarde jordane :
      Strict Standards: Only variables should be passed by reference in C:\EasyPHP-Devserver-17\eds-www\importation.php on line 24

      Warning: fopen(C:\EasyPHP-Devserver-17ds-www.csv): failed to open stream: Invalid argument in C:\EasyPHP-Devserver-17\eds-www\importation.php on line 26

      Warning: Invalid argument supplied for foreach() in C:\EasyPHP-Devserver-17\eds-www\importation.php on line 59
    4. Modérateur
      Tu as mis quoi comme chemin de fichier ?
    5. c'est bon j'ai réussi a le faire fonctionner a ma manière mais j'ai autre soucis au niveau de l'importation !

      quelques donnés sont fausses