[excel-PHP-Mysql] Importé des données... - Importer un tableau excel dans un BDD

Bonjour,
j’ai importer un tableau Excel, au format CSV, dans ma base de données MySql.
Tout fonctionne !
Cependant, il semble possible de créer un script PHP pour aller chercher mon fichier CSV et l’importer dans ma Base de Donnée …

Est il possible de créer un macro dans Excel, qui permettrai d’exporter mon tableau au format CSv et de la charger sur ma BDD MySql ?

Sinon quelle méthode dois je adopté pour créer un script PHP efficace ?

merci :jap: :jap:

j’ai essayé la méthode suivante … mais je ne comprend pas pourquoi je n’arrive pas a charger mon fichier … snif


<?php
require('conf.php');
mysql_selectdb("gz") or die("Connexion impossible");
 switch($action)
 {
  /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
   case "ajouter":

 /* Variables */
   $bdd = "gz"; /* Base de données */
   //$host= "localhost"; /* Hote (localhost en principe) */
   //$user= "user; /* Utilisateur */
   //$pass= "motpasse; /* Mot de passe */
 $table = "gz";
 /* Connexion bdd */
   @mysql_connect($host,$user,$password) or die("Impossible de se connecter à la base de données"); 
  // @mysql_select_db($bdd); 
 
  
 /* On ouvre le fichier à importer en lecture seulement */
 if (file_exists($fichier))
     $fp = fopen("$fichier", "r"); 
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
      
    while (!feof($fp)) /* Et Hop on importe */
    { /* Tant qu'on n'atteint pas la fin du fichier */ 
       $ligne = fgets($fp,4096); /* On lit une ligne */  

       /* On récupère les champs séparés par; dans liste*/
       $liste = explode( ";",$ligne);  
    
       /* On assigne les variables */ 
    
       $id = $liste[0]; 
       $cp = $liste[1]; 
    $ville = $liste[2]; 
       $tel = $liste[3]; 
    $client = $liste[4]; 
    
       /* Ajouter un nouvel enregistrement dans la table */ 
       $query = "INSERT INTO $table VALUES('$id','$cp','$ville','$tel','$client')"; 
       $result= MYSQL_QUERY($query); 
  
       if(mysql_error())
        { /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
           print "Erreur dans la base de données : ".mysql_error();
           print "<br>Importation stoppée.";
           exit();
        } 
       else /* Tout va bien */
         print "$id $cp $ville $tel $client <br>";
     } 
     
     echo "<br>Importation terminée, avec succès."; 
       
     /* Fermeture */ 
     fclose($fp); 
     MYSQL_CLOSE(); 
   
   break;
   
 
   /* FORMULAIRE DE CHOIX D'IMPORTATION */  
   
   default: 
   ?> 

<? echo "<form method=\"post\" action=\"$PHP_SELF\">"; ?>
     Pour ajouter ton serveur il suffit de remplir ce formulaire 
     <table width="357" border="0" cellpadding="3" cellspacing="0">
       <!--DWLayoutTable-->
      <tr>
       <td>Table :</td> 
       <td width="144"><!--DWLayoutEmptyCell--> </td> 
       <td width="109"></td>
      </tr>
      <tr>
       <td height="28">Fichier :</td> 
       <td colspan="2" valign="top"> <input type="file" name="fichier"> </td> 
       </tr>
      <tr>
       <td> </td> 
       <td> </td> 
       <td></td>
      </tr>
      <tr>
        <td></td>  
       <td> <input type="submit" name="submit" value="Charger !"> </td> 
       <td></td>
      </tr>
     </table>
     <input type="hidden" name="action" value="ajouter">  
    </form>
   <? 
   break;
   
   }

  ?>

pourquoi il refuse d’ouvir mon fichier :riva:
je ne comprend pas …

Juste un truc : MYSQL_QUERY, c’est mysql_query.

Pour le reste, le temps où un champ <input type="file" /> te créait une variable $fichier est révolu depuis longtemps. Soit bien sur de lire ça :

http://www.php.net/manual/fr/faq.misc.php#…registerglobals
http://www.php.net/manual/fr/features.file-upload.php

Tu verras que déjà, ça fonctionnera mieux :slight_smile:

Et au passage, tu as la fonction file() qui te permet de retourner un tableau de lignes à partir d’un fichier.

en effet sans_nom …
en ajoutant

enctype='multipart/form-data'

ça marche :super:
:jap: :jap:

par contre maintenant j’aiu un probleme de champ deja existant dans ma BDD … je creuse … :na:

raaa le saloupio …
mon fichier excel contient des infos avec des

'

… resultat j’ai des erreur lors du chargement … comment on fait deja pour eviter le contre des

'

en php ??? snif …

Avec mysql_real_escape_string().

yes ! merci sans_nom :jap:

me reste plus qu’a trouvé comment faire pour ecrser toutes les données de ma BDD lorsquon charge un fichier CSV …
reflexion jean pierre :heink:

Ben tu vides la table avant…

:MDR
exact ^^ je suis entrain de chercher la bonne technique :MDR

et voila :

$vider = "TRUNCATE TABLE $table";

ça roule !!! merci encore :jap: :jap:
mon code est certainement perfectible ! mais temps qu’il marche ! c’est le principale ^^ enfin pour moi :hello:

sans_nom = :super:

a non non non non non !

j’ai voulu sécurisé l’accès a ma page de mise a jourd e BDD, ça marche, mais je comprend pas pourquoi j’ai ce message :

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

??? :pt1cable: , c’est po possib’ !

pffff,
dsl de vous avoir déranger pour rien …

le session_start c’est avant tout code … donc c’est bon !

merci encore :jap: :jap: