remplir une table MySQL depuis un fichier Excel

WRInaute occasionnel
Salut les ami(e)s,
il est possible d'exporter des données de MySQL vers Excel grâce notamment à PhpMyAdmin. C'est cool. Mais peut-on faire l'inverse : lorsqu'on a des données sous Excel, comment garnir une table dans MySQL avec ces données ? Merci de votre aide !
 
WRInaute occasionnel
Pas de prob pour transformer mon fichier Excel en csv, mais je ne vois pas comment on remplit ensuite la table avec phpMyAdmin ?? Peux-tu m'éclairer oliv63 ?
 
WRInaute passionné
Sans passer par PHPMyAdmin ;-)

Code:
<html> 
<head> 
<title>Importer un fichier texte dans une bdd MySQL</title> 
</head> 
<body> 
<h2>Importer un fichier texte dans une bdd MySQL</h2> 

<?
 switch($action)
 {
  /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
   case "ajouter":

 /* Variables */
   $bdd = "*****"; /* Base de données */
   $host= "*****"; /* Hote (localhost en principe) */
   $user= "*****"; /* Utilisateur */
   $pass= "*****"; /* Mot de passe */

 /* Connexion bdd */
   @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); 
   @mysql_select_db($bdd); 
 
 /* On cree la table */
 //if ($creertable)
 // {
 // $query = "CREATE TABLE $table( nom varchar(24),prenom varchar(24) )";
 // $result= MYSQL_QUERY($query);
 // }
  
 /* 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]; 
	$id1 = $liste[1]; 
	$nom = $liste[2]; 
	$titre = $liste[3]; 
	$alt = $liste[4]; 
   
       /* Ajouter un nouvel enregistrement dans la table */ 
       $query = "INSERT INTO $table VALUES('$id','$id1','$nom','$titre','$alt')"; 
       $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 $id1 $nom $titre $alt<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 border="0" cellspacing="0" cellpadding="3">
      <tr>
       <td>Table :</td> 
       <td> <input type="text" name="table"> </td> 
      </tr>
      <tr>
       <td>Fichier :</td> 
       <td> <input type="text" name="fichier"> </td> 
      </tr>
      <tr>
       <td>Créer table ? :</td> 
       <td> <input type="checkbox" name="creertable" checked> </td> 
      </tr>
      <tr>
        <td></td>  
       <td> <input type="submit" name="submit" value="Et HoP !"> </td> 
      </tr>
     </table>
     <input type="hidden" name="action" value="ajouter">  
    </form>
   <? 
   break;
   
   }

  ?>

</body> 
</html>
 
WRInaute occasionnel
Merci Grantome, je vais essayer ! Tiens : vaut-il mieux l'essayer en local (avec EasyPhph par exemeple), puis exporter les instructions SQL vers le serveur distant, ou bien exécuter ton fichier à distance ?
 
WRInaute impliqué
dans phpmyadmin, tu choisis ta table et en pas de page, tu as un lien "Insérer des données provenant d'un fichier texte dans la table"
 
WRInaute occasionnel
Oooookay ! Je croyais que pour utiliser cette fonctionnalité, il fallait que le fichier texte soit une succession de requêtes "INSERT INTO ...", mais visiblement, non. Merci. Je crois que cela devrait amplement faire l'affaire. Merci à Grantome pourton script, mais je crois que je n'en n'aurai pas besoin :wink: .
Salut et merci à tous.
 
Nouveau WRInaute
Votre script fonctionne a merveil en local mais sur le serveur non ??
Je ne sais pas pourquoi ??
Pourriez vous m'aider ??

Merci

Grantome a dit:
Sans passer par PHPMyAdmin ;-)

Code:
<html> 
<head> 
<title>Importer un fichier texte dans une bdd MySQL</title> 
</head> 
<body> 
<h2>Importer un fichier texte dans une bdd MySQL</h2> 

<?
 switch($action)
 {
  /* LECTURE ET AJOUT DES DONNEES DANS LA TABLE */
   case "ajouter":

 /* Variables */
   $bdd = "*****"; /* Base de données */
   $host= "*****"; /* Hote (localhost en principe) */
   $user= "*****"; /* Utilisateur */
   $pass= "*****"; /* Mot de passe */

 /* Connexion bdd */
   @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); 
   @mysql_select_db($bdd); 
 
 /* On cree la table */
 //if ($creertable)
 // {
 // $query = "CREATE TABLE $table( nom varchar(24),prenom varchar(24) )";
 // $result= MYSQL_QUERY($query);
 // }
  
 /* 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]; 
	$id1 = $liste[1]; 
	$nom = $liste[2]; 
	$titre = $liste[3]; 
	$alt = $liste[4]; 
   
       /* Ajouter un nouvel enregistrement dans la table */ 
       $query = "INSERT INTO $table VALUES('$id','$id1','$nom','$titre','$alt')"; 
       $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 $id1 $nom $titre $alt<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 border="0" cellspacing="0" cellpadding="3">
      <tr>
       <td>Table :</td> 
       <td> <input type="text" name="table"> </td> 
      </tr>
      <tr>
       <td>Fichier :</td> 
       <td> <input type="text" name="fichier"> </td> 
      </tr>
      <tr>
       <td>Créer table ? :</td> 
       <td> <input type="checkbox" name="creertable" checked> </td> 
      </tr>
      <tr>
        <td></td>  
       <td> <input type="submit" name="submit" value="Et HoP !"> </td> 
      </tr>
     </table>
     <input type="hidden" name="action" value="ajouter">  
    </form>
   <? 
   break;
   
   }

  ?>

</body> 
</html>
 
WRInaute occasionnel
Pour l'avoir fait à de nombreuses reprises, le plus "simple" est effectivement de créer la table, de créer un enregistrement, de l'exporter en CSV pour avoir un modele, et de préparer ton CSV en fonction.
Ensuite, importation d'un fichier texte, et paf (le chien).

Tu ferais pas du splogging, par hasard ? :)
 
WRInaute passionné
agencep a dit:
Votre script fonctionne a merveil en local mais sur le serveur non ??
Je ne sais pas pourquoi ??
Pourriez vous m'aider ??

Merci

Désolé, mais je ne test jamais en local.
ce script fonctionne pour moi online, donc je ne vois pas ce qu'il peut se passer chez vous.
 
Nouveau WRInaute
Grantome a dit:
agencep a dit:
Votre script fonctionne a merveil en local mais sur le serveur non ??
Je ne sais pas pourquoi ??
Pourriez vous m'aider ??

Merci

Désolé, mais je ne test jamais en local.
ce script fonctionne pour moi online, donc je ne vois pas ce qu'il peut se passer chez vous.

Oui au faite, j'ai changé le champ <input type"text" ...> par <input type="file" ...> et c'est la que ça ne fonctionne pas ...
 
WRInaute passionné
Pour utiliser ce script, il faut que tu places sur ton hébergement 2 fichiers (ex: script.php et toto.txt)

Type "text" va prendre le nom du fichier ex: toto.txt.
Puis, via php on va aller éditer le fichier qui porte le nom toto.txt.

Dans le cas de file, c'est l'ensemble du fichier qui va être mis en variable et non son titre. Donc, la moulinette php d'édition du fichier ne se fera pas.

Le script ne permet pas d'uploader un fichier.
Mais on peut le modiifer pour...
 
Nouveau WRInaute
Voici le script que j'ai modifier pour qu'il permet de lire le fichier en mode FILE UPLOAD:
Code:
		<link href="style.css" rel="stylesheet" type="text/css">
		<form method="post" action=impoter.php enctype="multipart/form-data">
		 <table width="110" border="1" align="center">
		<tr> 
		<td colspan="2">Importation</td>
		</tr>
		<tr> 
		<td>Fichier:</td>
		
      <td><input name="userfile" type="file" id="userfile"></td>
		</tr>
		<tr>
		<td>&nbsp;</td>
		<td><input type="submit" name="Submit" value="ET HOP!">
		</tr>
		</table>
		</form>
		
<div align="center">
  <p><a href="consul.php">Consulter la base de donn&eacute;e.</a></p>
  <p><a href="test_recette.txt">T&eacute;l&eacute;charger le fichier TXT pour 
    le test</a></p>
</div>
Code:
<?
$file=$userfile;
$open=fopen($file,'r');
while (!feof($open))
	{
	$get=fgets($open,4096);
	$slashed=addslashes($get);
	$str=trim($slashed);
	$ligne=explode (";",$str);
	$titre=$ligne[0];
	$compos=$ligne[1];
	$method=$ligne[2];
	include ('config.inc.php');
	$query = "INSERT INTO recette VALUES('','$titre','$compos','$method')"; 
	MYSQL_QUERY($query); 
	}
	fclose($open);
	print '<h2>Importation terminée</h2>';
	print '<meta http-equiv="refresh" content="1;URL=consul.php">';
?>
 
Nouveau WRInaute
Bonjour l'Equipe
J'aurai une question similaire, y'a t-il moyen d'importer mon fichier Excel vers la base de données qui existe déjà (avec des tables déjà remplie), j'ai créé une table ' travail' tout à fait la même que ma feuille Excel (je ne devrai pas modifier la structure de ma base), il s'agit d'un ajout de données !
Je me bloque pour insérer les données de ma table 'travail' dans les tables qui faut ! enfaîte chaque colonne devrai se placer dans une table donnée de ma base d'où la difficulté
J'ai essayé avec load data infile , avec duplicate key update (car ma base de données n'est pas vide) mais c'est trés compliqué avec les insert.
Je débute en Sql comme en Php, s'il vous plait si vous avez des pistes aidez moi
En vous remerciant d'avance !
 
Nouveau WRInaute
Petite précision :
J'ai réussi à importer mon fichier Excel vers la table 'travail', je travaille sur MySql Workbench ! Cependant, il reste a inserer les données de ma table 'travail 'au bon endroit !
Merci bien
 
Discussions similaires
Haut