[PHP] inserer des donnees dans une table

Fermé
Jo - 26 juin 2007 à 16:48
 Alain42 - 26 juin 2007 à 18:06
Bnjour,
j'ai besoin d'aide pour inserer des donnees provenant d'un fichier texte dans ma base de donnees.

Voila comment est constitué mon fichier texte en gros :

toto1@toto2@@toto4
jean1@jean2@jean3@jean4

ma premiere requete devra ressembler a ca :
INSERT INTO table VALUES ('toto1', 'toto2', '', 'toto4');

et ma deuxieme
INSERT INTO table VALUES ('jean1', 'jean2', 'jean3', 'jean4');

ainsi dessuite tant qu'il y a des lignes dans mon fichier txt.

Deja je suppose que je devrai utiliser un while ("reste des lignes") qq part.
Je ne sais pas comment lire tel ligne et tel donnes et les mettre dans une variable

En gros en francais mon code devrai faire un truc du genre

while (il reste des lignes dans mon fichier)
{
$var1= ce quil y a entre le debut et le 1er @;
$var2= ce quil y a entre le 1er et le 2eme @;
$var3= ce quil y a entre le 2eme et le 3eme @;
$var4= ce quil y a entre le 3eme et la fin (\r\n je suppose);

$sql="INSERT INTO table VALUES ("$var1", "$var2", "$var3", "$var4");
}

Si quelqu'un peut m'aider il me sauverai la vie !!
Merci infiniement d'avance
A voir également:

6 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 juin 2007 à 17:03
Bonjour,

https://www.php.net/manual/fr/function.fgets.php
A priori, je te conseillerai le code suivant :

$fichier = fopen("c:\fichier.txt");
while (!feof($fichier))
{
$uneLigne = fgets($fichier);
$tableauValeurs = explode('@', $uneLigne);
$sql="INSERT INTO table VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."');
mysql_query($sql);
}
fclose($handle);

Somme toute, c'est très proche de ce que tu imaginais :)

Voilà voilà !

Xavier
1
Salut Xavier merci beaucoup pour ta réponse.

Je viens de la tester et y'a un pb.

Normalement ma table (apres les insert) devrait contenir 10 000 enregistrements
Or avec ce code j'en ai 400 000 lol, et en plus tous les champs sont vides !

Y'a un pépin qq part lol

tu sais d'ou ca pourait venir ?

Encore merci :p
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 juin 2007 à 17:28
Ca peut venir de ta version de php.
Si tes lignes ne sont pas trop longues (genre pas plus de 1000 caractères par ligne...), essaie de remplacer fgets($fichier) par fgets($fichier, 1024)
0
J'ai essayé mais ca ne change rien.

J'ai essayé aussi d'ouvrir un autre fichier texte, qui fait que 4 lignes, et ca me fait la meme chose :
ca m'insert 400000 enregistrements avec tous les champs vides...

mon code :

$fichier = fopen("textes/t.txt");
while (!feof($fichier))
{
$uneLigne = fgets($fichier, 1024);
$tableauValeurs = explode('@', $uneLigne);
$sql="INSERT INTO test VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."')";
mysql_query($sql);
}

fclose($handle);


mon fichier t.txt :

ANC00001@D00001@xxxxxxxx@594 AV PIERRE & MARIE CURIE@ZI@06700@SAINT LAURENT-DU-VAR@
ANC00002@D00002@xxxxxxxxxx@594 AV PIERRE & MARIE CURIE@@06700@SAINT LAURENT-DU VAR@
PAL00003@D00003@xxxxxxxx@VIA BELLE MONACHE@N 3@28044@VERBANIA@
FAB00004@D00004@xxxxxxxxxx@118 AVENUE DE LA CALIFORNIE@RES LES MIMOSAS@06200@NICE@
ANC00005@D00005@xxxx@594 AV PIERRE & MARIE CURIE@ZI SECTEUR B@06700@SAINT-LAURENT DU VAR@

Autre chose, je ne sais pas si c'est normal mais la variable $handle n'est initialisé nulle part.

Merci encore :D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re.

C'est bon CA MARCHE !!!!!

MERCI MILLE FOIS Xav !!

en fait le pb venait bien de $handle, fallait juste mettre $fichier a la place.

thxxxxxxx

[Résolu]
0
essayes:

$tableau_fich=file("c:\fichier.txt"); // lit le fichier et le met dans un array
for($i=0; $i< sizeof($tableau_fich); $i++){
$tableauValeurs=explode($tableau_fich[$i]);
$sql="INSERT INTO test VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."')";
mysql_query($sql);

}
0