begin process at 2012 05 27 21:49:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > IMPORTER CSV VERS BASE

IMPORTER CSV VERS BASE


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Niveau :Initié Date de création :26/11/2004 Date de mise à jour :14/12/2004 15:31:26 Vu / téléchargé :19 762 / 3 214

Auteur : xabivalencia

Ecrire un message privé
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
ben ca cool de source vu le titre....


 Conclusion

Tout y est explique dans le zip, si vs avez des souci, poster ici.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

14 décembre 2004 15:31:27 :
J ai revu mon scipt car il y avait qq erreurs au niveau des variables....mais c bon maintenant! :-)

 Sources du même auteur

Source avec Zip Source avec une capture EXPORTER UN EXTRAIT DE VOTRE BASE SELON SELECTION VERS EXCEL
Source avec Zip Source avec une capture SÙPPRIMER DOUBLON
Source avec Zip Source avec une capture VARIABLES $$ AVEC AJOUT REPETITIF

 Sources de la même categorie

Source avec Zip ORM : DAO, ACTIVERECORD ET DBLIST par Reldan
Source avec une capture CET EXTRAIT PERMET D'AJOUTER DANS UN TABLEAU UNE AGRÉGATION ... par Denis007
EXPORT DE BASE AU FORMAT CSV par remib74
Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier

Commentaires et avis

Commentaire de jeca le 02/12/2004 11:26:29

Une simple requête sql "load data infile" fait la même chose que "import_requete.php", avec des temps d'éxécution sans commune mesure.

Un exemple ici pour un fichier d'environ 45000 lignes :
http://www.phpcs.com/code.aspx?id=13434

Commentaire de xabivalencia le 02/12/2004 12:13:15

j ai regarde ton lien....il fait la meme chose sauf que je fe des test sur ce que l on insere dans la base pour eviter doublon suivant certains champs....

Concernant le temps requis, ca depend du nombre de ligne et si toutes les cases sont remplies...

Neanmoins, merci pour le commentaire...

Xabi

Commentaire de jeca le 02/12/2004 12:44:41

Ce n'est pas la source du code que je voulais te faire voir, mais mon commentaire :

les lignes d'importation pourraient avantageusement être remplacée par cette requète :

  $sql = "LOAD DATA INFILE '$filename' " .
            "INTO TABLE kill_country " .
            "FIELDS TERMINATED BY ',' " .
            "LINES TERMINATED BY ' '";

Testé sur serveur PIII 500
fichier : ip-to-country.csv
45 000 enreg. et 5 champs

temps d'éxécution :
    la fonction du code : 47 à 48 secondes
    la requète : 0.5 à 0.6 seconde

et principalement la différence de temps d'éxécution entre une fonction comme la tienne et la requête : le rapport est de presque 1 à 100.

Commentaire de xabivalencia le 02/12/2004 13:06:44

Ok j avais pas capté mais le souci est que c est pas vraiment applicable dans mon cas car ca voudrait dire que j inserer tout le fichier dans ma base....et c est que je veux faire mais en verifiant que les donnees du fichier ne peuvent faire doublon avec ma base.

En consequent, pas applicable a mon cas....

Commentaire de jeca le 02/12/2004 13:41:54

C'est tout à fait applicable :

Tu déclares comme clé unique les colonnes de la table dans lesquelles tu ne veux pas de doublons.

Et tu modifie la requête :

  $sql = "LOAD DATA INFILE '$filename' " .
             "REPLACE " .
            "INTO TABLE laTable " .
            "FIELDS TERMINATED BY ',' " .
            "LINES TERMINATED BY ' '";

Avec "replace", l'enreg. qui arrive remplace celui qui existe déjà avec la même clé.

Commentaire de xabivalencia le 02/12/2004 15:21:24

J ai mis la clef sur 3 champs mais ca marche pas du tout avec ta requete...ca me fait une erreur de requete a chaque fois...

Commentaire de xabivalencia le 02/12/2004 15:35:15

ben c est la justement le truc....c est que je ne veux pas "remplace" l 'enregistrement qui a la meme cle dans ma base....

Commentaire de xabivalencia le 02/12/2004 15:37:33

ma source ne correspond plus vraiment a ce que je fais....a l epoque, je remplacais si il y avait doublon, a presnt, s il y a un doublon...je le dis a l user mais je ne le change pas dans la base, je lui indique l enregistrement dans la base qui empechait  son enregistrement.

Commentaire de julik le 14/12/2004 12:22:37

Bonjour,
CE code a l'air très bien, mais j'ai un soucis dans son utilisation. Peut-être du fait que je suis un brin débutant en php..
J'utilise sur fichier .csv de 3 entrées.
Il m'enregistre bien 3 entrées dans ma table, mais ces 3 entrées contiennent des champs vides (hormis l'id qui s'autoincrémente...)
Auriez-vous une idée de l'origine de ce problème? Moi je cale...
MErci
Julien

Commentaire de xabivalencia le 14/12/2004 12:35:02

Tout d abord, verifies bien que les parametres du fichier connexion soient bien reglés. Ensuite si tu as changé des noms de variables dans le fichier "import_requete", verifies les une nouvelle fois.

tiens mois au courant.

Xabi

Commentaire de julik le 14/12/2004 12:51:16

SAlut,
Les paramétres de connexion sont bien réglés. La preuve en est qu'il y a bien des entrées qui sont ajoutées dans la base (le bon nombre, mais vide... à part id autoincrémenter....).
Pour ce qui concerne le fichier "import_requete", j'ai simplement modifié la requête sql  :
$query = "INSERT INTO bdd (champs1,champs2,champs3) VALUES('','$champ2','$champ3')";  
en
$query ="INSERT INTO test (id,nom,lieu) VALUES('','$champ2','$champ3')"
id, nom et lieu étant les champs de ma table test...
Qu'en penses-tu?

Commentaire de xabivalencia le 14/12/2004 13:02:45

deja, il y avait une erreur dans le code, remplaces ceci:
$liste[1] = ( isset($liste[2]) ) ? $liste[1] : Null;

par cela:

$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;

Normalement, le code fonctionne, je te conseille tout d abord de faire de echo des liste[] puis des echos de tes variables comme ca, tu verras deja si elles sont vides des le depart ou perdues en route.

Commentaire de julik le 14/12/2004 14:04:37

J'ai réussi à régler le problème en faisant des echos...
Il y avait simplement quelques erreurs de chiffres dans le code en plus de celle que tu m'as dite.
J'ai néanmoins encore une question.
J'aimerais faire un formulaire de saisie sous excel. Ainsi je voudrais mettre le nom des champs dans la première ligne. Comment pourrais-je procéder pour sauter la première ligne du fichier .csv?

MErci
Julien

Commentaire de xabivalencia le 14/12/2004 15:08:10

Faire un formulaire de saisie sous excel??? va falloir employer des macro VBA.

Pour  le nom de tes champs, tu peux sauter une ligne avec "/n" , et lire apres donc....

Commentaire de julik le 14/12/2004 17:38:42

Bonsoir,
Je ne vois pas comment intégrer "/n" au code...
Vous pourriez m'éclaircir?
Je veux simplemnt sauter la première ligne du fichier .csv

Merci
Julien

Commentaire de djatomix1 le 09/06/2005 10:47:22

Il y a une erreur dans ton code, insert into ... champs2 et 3 non pas de "s".
j'avais besoin de la première colone dans mon tableau en rajoutant :    $liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;

Nikel sinon!
Merci

Commentaire de zenabN le 14/06/2005 01:23:48

Bonjour/soir

est ce que vous parvenez a inserer un fichier ou il y a des champs vides ?
Dans mon fichier j ai 11 champs et une 20aines de lignes.  Les champs 1 à 6  sont remplis , le 7,8,9,10 sont vides, le 11 est remplis.

En utilisant ce script, j insere dans ma base uniquement 7 lignes (au lieu des 20) et pas non plus mon 11eme champs...

Que dois je faire?
Merci de votre precieuse aide.

Commentaire de zenabN le 14/06/2005 01:27:13

Bonjour/soir

est ce que vous parvenez a inserer un fichier ou il y a des champs vides ?
Dans mon fichier j ai 11 champs et une 20aines de lignes.  Les champs 1 à 6  sont remplis , le 7,8,9,10 sont vides, le 11 est remplis.

En utilisant ce script, j insere dans ma base uniquement 7 lignes (au lieu des 20) et pas non plus mon 11eme champs...

Que dois je faire?
Merci de votre precieuse aide.

Commentaire de candice9 le 22/06/2005 16:49:27

salut!
j'aimerais commencer l'importation qu'a partir de la 5e ligne de mon fichier csv. comment faire?
et est ce que ce script est adapte pr des fichiers de plus de 450000 lignes a enregistrer ds la BD?
merci bcp!

Commentaire de candice9 le 22/06/2005 16:53:22

Salut!
j'aimerais que l'enregistrement dans la base commence a partir de la 5e ligne de mon fichier csv. comment faire?
et est ce que ce script est adapte pour des fichiers de plus de 45000 lignes?
merci bcp!

Commentaire de xabivalencia le 23/06/2005 00:21:08

salut candice....
je pense que ca va prendre du temps de traiter 45000lignes ms bon, ca devrait aller....sinon pour ton souci de la 5 eme ligne, tu pourrais faire un compteur et une fois q la variable est a 5, tu commences les enregistrements le tout grace a une commande "while"....enfin, faut tester.
Ciao et bonne continuation

Commentaire de marsab le 24/06/2005 23:09:45

Bonjour,
je débute en php j 'ai déjà essayé quelques sripts ( news mots passes) ,mais celui ci je n'y arrive pas.
J ai mis le script sur multimania j ouvre "entrer_fichier.php" puis  
"Importation Réussie"
"ERREUR DE REQUETE SUR LA BASE. " les 2 messages obtenus.
avant sur le serveur j 'ai créé une base avec 3 champs
J'ai aussi configuré "connexion.php" mais j'hésite pour cette ligne "$hostname_smoby = "ftp.membres.lycos.fr"; // nom de votre serveur ??

Pouvez vous me donner un coup de main

Merci

Commentaire de axelkam le 21/09/2007 12:58:19

voila une solution que j'ai mis en ligne, elle a ete testée et elle marche :

http://www.commentcamarche.com/forum/affich-3111596-importation-fichier-csv-dans-mysql-php

bon courage

Commentaire de 67geek67 le 28/09/2009 11:28:11

Pour sauter la première ligne, placer le
$cpt++;
à la fin de la boucle
if ($champs0!='')
et placer derrière ce dernier une boucle
if ($cpt!=0)
qui se ferme juste avant le
$cpt++;
C'est pas compliqué(une meilleure façon existe peut-être) mais ça fera gagner du temps à certains...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales