Comment remplir une base avec un fichier texte? - PHP - Programmation
Marsh Posté le 08-03-2009 à 19:31:22
Voila j'avance petit à petit.
J'arrive à remplir ma table "vehicules" en appliquant cette requette dans phpMyAdmin:
Code :
|
Mon but étant de faire la même chose avec un fichier PHP. Comment retranscrire cette requette en code php?
Si bien sur la méthode est bonne.
Encore merci
Merci
Marsh Posté le 08-03-2009 à 21:08:41
http://www.php.net/manual/en/function.fgetcsv.php
ensuite t'as plus qu'à faire un bête insert en sql
Marsh Posté le 09-03-2009 à 08:46:08
ReplyMarsh Posté le 09-03-2009 à 09:06:12
Je vous avoue que je suis un peu perdu.
Voila mon dernier code que j'ai réalisé: Pas d'erreur mais ma table "vehicules" reste vide:
Code :
|
Quelle est mon erreur?
La méthode b'est pas bonne?
Encore merci
Marsh Posté le 09-03-2009 à 09:39:25
hello
$req="LOAD DATA INFILE listing.txt'
INTO TABLE vehicules
FIELDS
TERMINATED BY ';'
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES
STARTING BY ''
TERMINATED BY '\n'
(ID, NVO, TYPE, MARQUE, MODELE, VERSION, CARROSSERIE, NBPORTES, ENERGIE, BOITEVITESSE, PFISCALE, PDIN, MILLESIME, DATEMEC, KMS, COULEUR, PMAIN, OPTIONS, PPUBLIC, PMARCHAND, GARANTIE, DUREEGARANTIE, SELLERIE)";
mysql_connect('localhost','root','');
mysql_select_db('auto');
mysql_query($req);
j'ai loupé quelque chose ?
Marsh Posté le 09-03-2009 à 09:40:56
Autre post pour autre réponse :
Citation : Ce fichier est mis à jour régulièrement, donc quelle est la meilleures solution pour ne pas avoir des doublons (vider ma table à chaque mises a jour?)? |
Je fais ca très souvent (vider plus re-remplir), en général la nuit, avec une crontab. Mais j'ai la chance d'avoir un serveur dédier.
LOAD DATA INFILE est TRES rapide.
Marsh Posté le 09-03-2009 à 10:24:57
Merci pierreC,
désolé pour mon ignorance, mais ce que tu m'as envoyé:
Code :
|
C'est a mettre dans un fichier PHP je suppose? quel en est le code exact? comment faire pour que ce fichier se lance automatiquement tout les jours ou a chaque mise a jour de celui-ci? enfin si cela est possible...
Encore merci
Marsh Posté le 09-03-2009 à 10:29:20
ca dépend :-)
Sur quel plateforme est tu :
Windows, linux ?
sur internet ? Serveur dédier ou mutualisé ?
intranet ? As tu l'access en t'en qu'admin sur le système ?
Marsh Posté le 09-03-2009 à 10:43:59
Donc en fait voila je viens de voir un truc assez important!!!
En effet c'est un logiciel (CARDIFF) qui génère le fichier listing.txt, mais je viens de voir que le logiciel est possible d'effectuer le lancement d'une page spécifique en paramétrant son URL apès avoir mis a jour et envoyé sur mon serveur ftp le fichier listing.txt.
Donc mon problème est réglé pour le lancement automatique du fichier.
Par contre quelle est le meilleur code de mon fichier PHP?
Merci
PS: mon site est chez Online.net Offre M (pas de serveur dédier)
Marsh Posté le 09-03-2009 à 11:02:29
le code que je t'ai donnée est opérationnel je pense.
J'ai repris ce qui fonctionnait selon tes tests dans phpmyadmin, et l'ai mis dans du code php.
Marsh Posté le 09-03-2009 à 11:14:13
Oui dans PHPMyAdmin cela fonctionne bien, ma table se remplie, par contre je n'arrive pas a le transformer en code PHP!!
Es-ce que je pourrai avoir le code qui fonctionne?
Encore merci car je galère vraiement!!
Marsh Posté le 09-03-2009 à 11:59:58
c'est le code que je t'ai posté plus haut, rien de plus
Marsh Posté le 09-03-2009 à 12:09:06
Je vais passer pour un boulet mais voila mon fichier test.php
Code :
|
Je pense que la syntaxe n'est pas bonne du tout car j'ai erreur ligne 7!!!
Marsh Posté le 09-03-2009 à 13:32:26
ligne 6 tu as un " ... dans une chaine qui commence par un ".
Donc tu dois l'echapper avec un \ pour signifier a php que ce n'est pas la fin de ta chaine mais un charactere normal.
$req="LOAD DATA INFILE 'listing.txt'
INTO TABLE vehicules
FIELDS
TERMINATED BY ';'
ENCLOSED BY '\"'
ESCAPED BY '\\'
LINES
STARTING BY \''
TERMINATED BY '\n'
(ID, NVO, TYPE, MARQUE, MODELE, VERSION, CARROSSERIE, NBPORTES, ENERGIE, BOITEVITESSE, PFISCALE, PDIN, MILLESIME, DATEMEC, KMS, COULEUR, PMAIN, OPTIONS, PPUBLIC, PMARCHAND, GARANTIE, DUREEGARANTIE, SELLERIE)";
Marsh Posté le 10-03-2009 à 10:54:14
Voila a quoi je suis arrivé et qui fonctionne!
Bon je vous l'accorde ce n'est peut etre pas joli joli comme code.
Si vous avez des idée (et je pense que oui) pour l'optimisé?!!:?
Code :
|
Avec cette méthode je suis obliqué d'avoir le même nombre de champs dans ma table que dans mon fichier listing.txt. Est-il possible d'avoir plus de champs dans ma table que dans mon txt?
Encore merci a tous pour vos aides..
Marsh Posté le 10-03-2009 à 11:18:07
pourquoi n'a tu pas utilisé un LOAD DATA INFILE. Le but d'utiliser un LOAD DATA INFILE est justement fait pour importé des csv. si tu as 10000 lignes alors cela fera 10000 INSERT !
Mais si ton code fonctionne, et qu'il te convient ...
Sinon bug potentiel, si un champ contient une apostrophe ca plante (voir mysql_escape_string)
Marsh Posté le 25-03-2009 à 11:52:33
Bonjour,
Je reviens avec une question au sujet de mon remplissage de base.
Comme écrit plus haut mon fichier texte est composé comme ceci:
1;40;VO;PEUGEOT;307 SW;SW PACK 2.0 HDI 110;BREAK;5;DIESEL;BVM5;6;107;2002;08/11/2002;103335;GRIS;1;Autoradio CD Laser, Lève Vitres éléctrique;12900;0;6 MOIS;6;velour;
2;15;VO;RENAULT;TWINGO;;BERLINE;3;ESSENCE;0;5;80;2004;30/06/2004;60930;BLEU;0;Autoradio CD Laser, Lève Vitres éléctrique;9900;0;6 MOIS;6;velour;
Grace a mon fichier PHP( et votre aide) tout rentre parfaitement dans ma bas et au bon endroit. Mais voila je souhaite savoir si une modif est possible:
En effet pour VO;PEUGEOT;307SW je souhaiterai rentrer dans ma base des chiffres plustôt que ces données:
ex: pour VO:
Si dans mon fichier texte il y a VO, il faudrait que dans ma base il y est un 1
Si dans mon fichier texte il y a VN, il faudrait que dans ma base il y est un 0
Pareil pour les marques:
Si dans mon fichier texte il y a CITROEN, il faudrait que dans ma base il y est un 8
Si dans mon fichier texte il y a PEUGEOT, il faudrait que dans ma base il y est un 10
Et don pareil pour les modèles de véhicule.
Voila, je ne sais pas si je me suis bien fait comprendre et si cela est possible a faire...
Encore Merci
Marsh Posté le 08-03-2009 à 18:05:59
Bonjour,
Débutant en PHP et sql je bloque sur un pti voir gros problème.
Voila les données du problème.
J'utilise un logiciel (gestion véhicules CARDIFF) qui me génère un fichier (linsting.txt) avec dedant des informations sur chacun des véhicules.
Exemple de 2 lignes de mon fichier listing.txt:
1;40;VO;PEUGEOT;307 SW;SW PACK 2.0 HDI 110;BREAK;5;DIESEL;BVM5;6;107;2002;08/11/2002;103335;GRIS;1;Autoradio CD Laser, Lève Vitres éléctrique;12900;0;6 MOIS;6;velour;
2;15;VO;RENAULT;TWINGO;;BERLINE;3;ESSENCE;0;5;80;2004;30/06/2004;60930;BLEU;0;Autoradio CD Laser, Lève Vitres éléctrique;9900;0;6 MOIS;6;velour;
Il y a en tout 23 données sur chaque ligne séparé par ;
Mon but est de rentrer ces données dans ma base "auto" dans laquelle j'ai créeé une table "vehicule" avec dedant 23 champs.
Tout ceci afin de les exploiter sur un site Internet.
Ce fichier est mis à jour régulièrement, donc quelle est la meilleures solution pour ne pas avoir des doublons (vider ma table à chaque mises a jour?)?
Voila mon fichier php que j'ai fait, mais qui ne fonctionne pas!!!
Es-ce que je me complique trop la vie?
Y-a t-il plus simple à faire?
Merci