[PHP] Fichier .txt vers MySQL

Bonsoir, je requière votre aide pour un petit peu de PHP/MySQL.

Je cherche à importer le contenu d’un fichier texte dans une table de ma base de donnée MySQL, le tout via une page PHP. (le tout en local)

Quelques détails sur le truc :

Le fichier .txt :

  • Le fichier .txt a un nom fixe. (exemple : client.txt)
  • Chaque donnée est séparé par une tabulation
  • Chaque ligne correspond à un enregistrement
  • Il est impossible de modifier la mise en forme de ce fichier. (par exemple, remplacer la tabulation par un caractère)

En gros, le contenu du fichier .txt ressemble à ceci.

[quote name=‘client.txt’]1 MonsieurX Yves VilleX TelX
2 MadameY Yvette VilleY TelY[/quote]

Le base :

J’ai tout simplement un table client. En gros, sa ressemble à ca :

[quote]CLIENT

NumCli
NomCli
VilleCli
TelCli[/quote]

Ma page php :

La page doit tout simplement m’indiquer où ce trouve le fichier .txt dans mon disque et importer les donnés du fichier dans la base.

Voila, je ne sais pas trop comment faire et je demande donc votre aide. Merci.

Je crois pas que tu puisses le faire directement depuis phpMyAdmin. Donc, tu fais un formulaire d’upload du fichier, tu le parses, et tu fais tes requetes d’insertions au fur et à mesure.

J’aide pas c’est vrai, mais en lisant ca, j’ai l’impression assez desagreable que tu veux qu’on fasse tes devoirs de vacances… B)

LoneWolf
Neuneu doute de rien? B)

Tu remplaces la tabulation par un point virgule et tu regardes du coté du format csv, à mon avis c’est le plus simple.

Tu remplaces la tabulation par un point virgule et tu regardes du coté du format csv, à mon avis c’est le plus simple.

C’est justement que ce je cherche a faire.

[quote=« LoneWolf, post:3, topic: 31949 »]J’aide pas c’est vrai, mais en lisant ca, j’ai l’impression assez desagreable que tu veux qu’on fasse tes devoirs de vacances… B)

LoneWolf
Neuneu doute de rien? B)[/quote]

Je dirais plutôt que je dois le faire et que je n’ai pas la moindre idée de la manière dont il faut le faire. C’est sensiblement différent.

Bon, j’i connais rien en php, mais texto, si tu trouves un bouquin qui t’expliques le php, tu devrais y arriver de la maniere suivante:

Tu lis ton fichier (trouver les fonction de lecture du fichier)
Tu parses ton fichier (tu te debrouilles pour transformer une ligne de ton fichier en chaine, que tu depouilles (en splittant la chaine avec le caractere TAB))
Pour chaque ligne (que tu stockes dans un tableau, ou que tu fait au fur et a mesure du parsing de ton fichier), tu generes une requete sql, qui va t’inscrire tes infos en base, en fonction de ce que tu a parsé.

En gros ici, tu as l’algo.
Si ca te semble trop compliqué, il est temps d’apprendre le php, voir la prog plus generalement B)
(C’est pas mechant, mais juste on dirait que tu decouvres)

Premièrement, lis ton fichier avec fopen et fgets et réussis à l’afficher avec ta page PHP. Deuxièmement, amuse-toi avec explode pour chaque ligne. Troisièmement, [url=“http://fr.php.net/manual/fr/function.mysql-query.php”]mysql_query/url; avec ce que sort la fonction explode().

Ou tu passe direct en ligne de commande sql en utilisant la fonction LOAD DATA INFILE. Ca gere les tablations et les retours chariots très bien.

Mais j’imagine que tu as fait des recherches sur Google avant de t’avouer vaincu ?

J’ai un peu fouillé tout ça. Grâce aux fopen / fgets / etc, j’ai reussi à faire quelque chose pas trop mal (loin du but mais c’est un début).

Au niveau de ma page d’importation, j’ai un problème avec l’obtention du chemin de mon fichier .txt.

Voici comment est fait le formulaire :

[code]

[/code]

J’ai fais une page test avec un variable qui recoit et affiche le chemin du fichier envoyé. En gros, ceci :

<?php $vartest = $_POST['frmmaj']; print($vartest); ?>

Alors voici mon problème actuel : Sous IE 6 (je n’ai pas pu tester sur le 7 pour l’instant), ma variable $vartest affiche correctement l’adresse complete (c:\dossier\fichier.txt). Cependant sous Firefox (2.0), la variable ne recoit que le nom/extension (fichier.txt) du ficher et non l’adresse complète.

Existe t-il une solution pour contourner se problème ?

peut etre parcequ’il faut ajouter un enctype=“multipart/form-data” dans ton mais je doute que ça soit ça …

Bon j’ai un pote qui dis que je suis trop mechant avec toi fuky, donc je vais etre all heart et te faire pointer sur une url que t’aurais surement pu trouver tout seul en cherchant un minimum sur php.net

LoneWolf
I’m all heart.

[quote=“LoneWolf, post:12, topic: 31949”]Bon j’ai un pote qui dis que je suis trop mechant avec toi fuky, donc je vais etre all heart et te faire pointer sur une url que t’aurais surement pu trouver tout seul en cherchant un minimum sur php.net

LoneWolf
I’m all heart.[/quote]

Ayant cherché un minimum, j’avais trouvé ceci facilement. Cependant, le problème était toujours le même avec les navigateurs. IE continuait à m’afficher le chemin complet, Firefox m’indiquait seulement le nom du fichier.

Sinon, j’ai réussi à résoudre le problème. Pour cela, j’ai du utiliser du javascript. Je ne suis pas fan de javascript (risque de ne plus marcher s’il est désactivé sur le navigateur de l’utilisateur) mais je n’ai trouvé que ça comme solution à l’heure actuel. Si quelqu’un a une solution plus belle à me proposer, je suis bien sur preneur.

Ce que j’ai fais :

[code]

[/code]

Moi je comprend rien à ton probleme (et j’ai l’impression que, comme ton serveur est en local, tu fais un putain d’amalgame). Je résume le concept, le but, le moyen de l’obtenir, et tu m’arrete si je me trompe.

  • Tu a un fichier txt, qui contient les données que tu veut importer dans ta base. Tu cherche donc à faire une page en php, qui te permet de choisir le fichier en question, afin de le traiter.
  • Donc, dans ta page, tu fait un formulaire, qui contient un « input file ». Tu sélectionne le fichier, et tu fait « Valider ».
  • Qu’est ce qu’il se passe ? (et à mon avis, c’est là que tu t’amalgame) ton navigateur, comme un grand, envoie le fichier sur le serveur (qui pour le coup est en local). Mais dans l’absolu, ton navigateur il en sait rien que c’est en local. La variable ‹ frmmaj › ne te sert à rien (met toi dans le cas ou tu upload un fichier depuis ton pc sur geekzone. Ca lui servirait a rien de savoir que ton fichier se trouve dans c:\bidule).
  • Donc maintenant, il faut que tu te serve de l’url filée par Lonewolf, afin de récupérer le fichier copié dans un dossier temporaire, vers un dossier « normal » du serveur web, et de là le traiter.

Maintenant, si ce ficher est toujours au même endroit, tu t’en bat les noix, t’a pas besoin de te faire chier avec de l’upload. Sur ta page, tu met genre un message « Vérifiez que le fichier se trouve bien dans le dossier c:\trucbidule et appuyez sur Valider ».

Dans tous les cas une fois que tu a ton fichier, tu fais un truc du genre. (Je copie colle et je rajoute, je te le fais à la volée, tu vérifiera la syntaxe)

[code]<?php
// Get a file into an array. In this example we’ll go through HTTP to get
// the HTML source of a URL.
$lines = file(@‹ c:\bidule\truc.txt ›);

// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line) {
$champs = explode(« \t », $line);
$query = « INSERT INTO CLIENT »;
$query .= « (NumCli, NomCli, VilleCli, TelCli) »;
$query .= « VALUES »;
$query .= « ( ».$champs[0].« , ' ».$champs[1].« ', ' ».$champs[2].« ', ' ».$champs[3].« ') »;
mysql_query($query);
}
?>[/code]

Voilà, rien de plus compliqué que ca, et tout avec du copier/coller depuis php.net (ou presque). Le truc avec PHP qu’il faut savoir, c’est que 90% des problemes que tu peut rencontrer ont leur solution sur PHP.net. Et pour les 10% qui reste… Avant que tu les recontre, tu aura largement le temps de devenir un pro de php.