Import fichier CSV to PhpMyadmin [Résolu/Fermé]

Signaler
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020
-
Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
-
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>
A voir également:

2 réponses

Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
Bonjour,

Je t'invite déjà à utiliser correctement mysqli.

par exemple :
//connexion à la bdd
$mysqli = new mysqli("localhost", "root", "", "projet");

/* Vérification de la connexion */
if ($mysqli->connect_errno) {
    printf("Echec de la connexion: %s\n", $mysqli->connect_error);
    exit();
}


// Puis dans ta boucle qui parcours le fichier
while (!feof($fp)) {

   // le reste de ton code...

   $sql =("INSERT INTO avancement (id , type , pourcentage ,commentaire, date) VALUES 
        ('','$champ1','$champ2','$champ3','$champ4')");
   if (!$mysqli->query($sql)) {
      printf("Message d'erreur : %s\n", $mysqli->error);
  }

   // le reste de ton code...

} //fin de la boucle

// fermeture du fichier 
fclose ($fp);



Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281 >
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

Tu as ajouté les tests que je t'ai donné ?
Tu nous montres ton code modifié..
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

index.php :
<?php  
 $connect = mysqli_connect("localhost", "root", "", "csv_db");  
 $query = "SELECT * FROM tbl_employee ORDER BY id desc";  
 $result = mysqli_query($connect, $query);  
 ?>  
 <!DOCTYPE html>  
 <html>  
      <head>  
           <title>Webslesson Tutorial | Import CSV File Data into MySQL Database using PHP & Ajax</title>  
           <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>  
           <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
           <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>  
      </head>  
      <body>  
           <br /><br />  
           <div class="container" style="width:900px;">  
                <h2 align="center">Import CSV File Data into MySQL Database using PHP & Ajax</h2>  
                <h3 align="center">Employee Data</h3><br />  
                <form id="upload_csv" method="post" enctype="multipart/form-data">  
                     <div class="col-md-3">  
                          <br />  
                          <label>Add More Data</label>  
                     </div>  
                     <div class="col-md-4">  
                          <input type="file" name="employee_file" style="margin-top:15px;" />  
                     </div>  
                     <div class="col-md-5">  
                          <input type="submit" name="upload" id="upload" value="Upload" style="margin-top:10px;" class="btn btn-info" />  
                     </div>  
                     <div style="clear:both"></div>  
                </form>  
                <br /><br /><br />  
                <div class="table-responsive" id="employee_table">  
                     <table class="table table-bordered">  
                          <tr>  
                               <th width="5%">ID</th>  
                               <th width="25%">Name</th>  
                               <th width="35%">Address</th>  
                               <th width="10%">Gender</th>  
                               <th width="20%">Designation</th>  
                               <th width="5%">Age</th>  
                          </tr>  
                          <?php  
                          while($row = mysqli_fetch_array($result))  
                          {  
                          ?>  
                          <tr>  
                               <td><?php echo $row["id"]; ?></td>  
                               <td><?php echo $row["name"]; ?></td>  
                               <td><?php echo $row["address"]; ?></td>  
                               <td><?php echo $row["gender"]; ?></td>  
                               <td><?php echo $row["designation"]; ?></td>  
                               <td><?php echo $row["age"]; ?></td>  
                          </tr>  
                          <?php  
                          }  
                          ?>  
                     </table>  
                </div>  
           </div>  
      </body>  
 </html>  
 <script>  
      $(document).ready(function(){  
           $('#upload_csv').on("submit", function(e){  
                e.preventDefault(); //form will not submitted  
                $.ajax({  
                     url:"impoort.php",  
                     method:"POST",  
                     data:new FormData(this),  
                     contentType:false,          // The content type used when sending data to the server.  
                     cache:false,                // To unable request pages to be cached  
                     processData:false,          // To send DOMDocument or non processed data file it is set to false  
                     success: function(data){  
                          if(data=='Error1')  
                          {  
                               alert("Invalid File");  
                          }  
                          else if(data == "Error2")  
                          {  
                               alert("Please Select File");  
                          }  
                          else  
                          {  
                               $('#employee_table').html(data);  
                          }  
                     }  
                })  
           });  
      });  
 </script> 


impoort.php :
<?php  
 if(!empty($_FILES["employee_file"]["name"]))  
 {  
      $connect = mysqli_connect("localhost", "root", "", "csv_db");  
      $output = '';  
      $allowed_ext = array("csv");  
      $extension = end(explode(".", $_FILES["employee_file"]["name"]));  
      if(in_array($extension, $allowed_ext))  
      {  
           $file_data = fopen($_FILES["employee_file"]["tmp_name"], 'r');  
           fgetcsv($file_data);  
           while($row = fgetcsv($file_data))  
           {  
                $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]);  
                $query = "  
                INSERT INTO tbl_employee  
                     (name, address, gender, designation, age)  
                     VALUES ('$name', '$address', '$gender', '$designation', '$age')  
                ";  
                mysqli_query($connect, $query);  
           }  
           $select = "SELECT * FROM tbl_employee ORDER BY id DESC";  
           $result = mysqli_query($connect, $select);  
           $output .= '  
                <table class="table table-bordered">  
                     <tr>  
                          <th width="5%">ID</th>  
                          <th width="25%">Name</th>  
                          <th width="35%">Address</th>  
                          <th width="10%">Gender</th>  
                          <th width="20%">Designation</th>  
                          <th width="5%">Age</th>  
                     </tr>  
           ';  
           while($row = mysqli_fetch_array($result))  
           {  
                $output .= '  
                     <tr>  
                          <td>'.$row["id"].'</td>  
                          <td>'.$row["name"].'</td>  
                          <td>'.$row["address"].'</td>  
                          <td>'.$row["gender"].'</td>  
                          <td>'.$row["designation"].'</td>  
                          <td>'.$row["age"].'</td>  
                     </tr>  
                ';  
           }  
           $output .= '</table>';  
           echo $output;  
      }  
      else  
      {  
           echo 'Error1';  
      }  
 }  
 else  
 {  
      echo "Error2";  
 }  
 ?>  


message d'érreur :
Notice: Undefined offset: 1 in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Importation Code\impoort.php on line 15

Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Importation Code\impoort.php on line 16

Notice: Undefined offset: 3 in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Importation Code\impoort.php on line 17

Notice: Undefined offset: 4 in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Importation Code\impoort.php on line 18


EDIT : Correction des balises de code.... (encore.... )
Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
Bon ben... visiblement... tu n'as pas envie d'appliquer les conseils que je te donne....
(sans parler du fait que tu ne postes pas ton code correctement et que j'ai été obligé d'éditer ton message encore une fois...)
Bref... moi je laisse tomber.....

Reviens nous voir quand tu seras décidé à lire et comprendre exactement ce qu'on te dit !
chao
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

mon ami j'ai testé tous ce que tu m'a dit et si j'ai fais du changement c'est parce que tu as pas pu comprendre l'erreur et me aider merci a toi aussi et quand t'aura des solutions propose les ...
pas besoin de demander a chaque fois mon message était très clair et je t'ai posté mes deux codeS
Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281 >
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
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.

Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
Ligne 25 ... remplacer le [ par {
mais bon.. tu aurais pu le voir par toi même......
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

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
Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281
Tu as mis quoi comme chemin de fichier ?
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

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
Messages postés
31489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 février 2021
3 281 >
Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

Tu as réussi ? Ok .. donc merci de mettre le sujet en résolu. (via l'icone de roue crantée qui se trouve en haut à droite du titre de ta question )
Pour ton nouveau souci... merci d'ouvrir une nouvelle discussion.