Importer des données d'un fichier .txt dans bdd

Importer des données d'un fichier .txt dans bdd - PHP - Programmation

Marsh Posté le 11-06-2008 à 20:32:18    

Bonsoir j'ai actuellement un fichier com.txt avec des valeurs comme ceci:  
 
82;01;1;01;01007;Ambronay;AMBRONAY;01500;1996;2146
82;01;1;17;01008;Ambutrix;AMBUTRIX;01500;595;586
 
 
j'ai creer ma table sql avec tous les champs necessaires à l'importation des données de ce fichier, puis je fait ca:
 

Code :
  1. <?php
  2. // on se connecte à notre base
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. $fichier = fopen("com.txt", "r" );
  6. while (!feof($fichier))
  7. {
  8. $uneLigne = fgets($fichier, 1024);
  9. $tableauValeurs = explode(';', $uneLigne);
  10. $sql="INSERT INTO aaaaa VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."', '".$tableauValeurs[8]."', '".$tableauValeurs[9]."', '".$tableauValeurs[10]."')";
  11. mysql_query($sql);
  12. }
  13. fclose($fichier);
  14. // on libère l'espace mémoire alloué à cette requête
  15. mysql_free_result ($req);
  16. ?>


j'ai chmodé le fichier com.txt en 777, puis j'execute ma page ou ce trouve le script ci dessus.
J'ai cette erreur:
 
Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 6
 
Warning: fopen(http://www.meteo-world.com/com.txt) [function.fopen]: failed to open stream: no suitable wrapper could be found in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 6
 
Warning: feof(): supplied argument is not a valid stream resource in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 7
 
Warning: fgets(): supplied argument is not a valid stream resource in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 9
 
 
 
Si quelqu'un peut m'aider. Merci :)


Message édité par jc66 le 12-06-2008 à 08:23:42
Reply

Marsh Posté le 11-06-2008 à 20:32:18   

Reply

Marsh Posté le 11-06-2008 à 21:04:40    

salut !
 
t'as juste à lire ton erreur, tout est écrit: "URL file-access is disabled in the server configuration"
tu accedes a ton fichier via une url et non un chemin unix...
ton probleme n'est pas une question de droit mais de méthode d'appel à un fichier
 
 
pour le reste tu te compliques bien la vie :
 
http://fr2.php.net/manual/fr/function.fgetcsv.php

Reply

Marsh Posté le 11-06-2008 à 21:17:53    

je peut faire comment alors si je peut pas executer le script sur mon serveur ?

Reply

Marsh Posté le 11-06-2008 à 23:19:24    

En reformulé avec toutes les données :??:

Reply

Marsh Posté le 12-06-2008 à 07:17:48    

je ne comprend pas ce que tu veut dire

Reply

Marsh Posté le 12-06-2008 à 08:18:09    

jc66 a écrit :

je peut faire comment alors si je peut pas executer le script sur mon serveur ?


bien sur que si tu peux l'exécuter ton script. Seulement il faut que le fichier de données soit sur le même serveur, et que tu l'ouvres avec un chemin d'accès local, pas avec son url sur un autre serveur.


Message édité par skeye le 12-06-2008 à 08:18:17

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 08:22:28    

il est sur le même serveur
le chemin est le même dossier que le script à la racine.
J'ai mis ce qu'il fallait dans le script
 
$fichier = fopen("com.txt", "r" );
 
et maintenant j'ai cette erreur:
 
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 22
 
 
la ligne 22 c'est ca:
 
mysql_free_result ($req);
 
 
je comprend rien là :(


Message édité par jc66 le 12-06-2008 à 08:25:07
Reply

Marsh Posté le 12-06-2008 à 08:26:30    

bah $req existe pas dans ton script là hein.[:dawak]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 12:35:09    

donc si je fait en enlevant mysql_free_result ($req);    
 
J'ai une page blanche, et rien dans la bdd
 

Code :
  1. <?php
  2. // on se connecte à notre base
  3. $base = mysql_connect ('***', '***', '***');
  4.     mysql_select_db('***', $base);
  5. $fichier = fopen("com.txt", "r" );
  6. while (!feof($fichier))
  7. {
  8. $uneLigne = fgets($fichier, 1024);
  9. $tableauValeurs = explode(';', $uneLigne);
  10. $sql="INSERT INTO aaaaa VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."', '".$tableauValeurs[8]."', '".$tableauValeurs[9]."', '".$tableauValeurs[10]."')";
  11. mysql_query($sql);
  12. }
  13. fclose($fichier);
  14. ?>

Reply

Marsh Posté le 12-06-2008 à 12:43:36    

Bonjour,
 
Une seule requête peut faire l'ensemble, en utilisant 'LOAD DATA INFILE ...' :
http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

Reply

Marsh Posté le 12-06-2008 à 12:43:36   

Reply

Marsh Posté le 12-06-2008 à 12:53:22    

c'est à dire que je doit mettre "LOAD DATA INFILE" à la place de "INSERT INTO" ???    :??:

Reply

Marsh Posté le 12-06-2008 à 12:55:19    

non. C'est à dire que tu dois lire la doc de LOAD DATA INFILE pour savoir comment l'utiliser.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 13:17:40    

je sent que je me noit.
 
Si je fait comme sur l'exemple que tu me donnes Nazztazz, en adaptant
 

Code :
  1. <?php
  2.       $db = new MySqli(***, ***, ***, ***);
  3.       $stmt = $db->prepare("INSERT INTO aaaaa VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."', '".$tableauValeurs[7]."', '".$tableauValeurs[8]."', '".$tableauValeurs[9]."', '".$tableauValeurs[10]."')" );           
  4.       $stmt->bind_param('iss', $data[0], $data[1], $data[2]);           
  5.       $handle = fopen("com.txt", "r" );
  6.         while (($data = fgetcsv($handle, 1000, "," )) !== FALSE) {
  7.          $stmt->execute();
  8.   $tableauValeurs = explode(';', $uneLigne);
  9.       }
  10.       $stmt->close(); 
  11.       fclose($handle); 
  12.       $db->close();
  13.       ?>


 
 
j'ai ces erreurs:
Warning: mysqli::mysqli() [function.mysqli-mysqli]: (42000/1044): Access denied for user 'meteo'@'localhost' to database '0' in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 12
 
Warning: mysqli::prepare() [function.mysqli-prepare]: Couldn't fetch mysqli in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 13
 
Fatal error: Call to a member function bind_param() on a non-object in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 14

Reply

Marsh Posté le 12-06-2008 à 13:32:41    

comme celà ?
 
 
 

Code :
  1. <?php
  2.       $db = new MySqli(***, ***, ***, ***);
  3.      $stmt = $db->prepare('INSERT INTO table ($data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10]) VALUES (?,?,?,?,?,?,?,?,?,?);');         
  4.       $stmt->bind_param('iss', $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10]);           
  5.       $handle = fopen("com.txt", "r" );
  6.         while (($data = fgetcsv($handle, 1000, "," )) !== FALSE) {
  7.          $stmt->execute();
  8.   $tableauValeurs = explode(';', $uneLigne);
  9.       }
  10.       $stmt->close(); 
  11.       fclose($handle); 
  12.       $db->close();
  13.       ?>


 
la j'ai ces erreurs:
 
Warning: mysqli::mysqli() [function.mysqli-mysqli]: (42000/1044): Access denied for user 'meteo'@'localhost' to database '0' in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 9
 
Warning: mysqli::prepare() [function.mysqli-prepare]: Couldn't fetch mysqli in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 10
 
Fatal error: Call to a member function bind_param() on a non-object in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aa.php on line 11


Message édité par jc66 le 12-06-2008 à 13:32:55
Reply

Marsh Posté le 12-06-2008 à 13:33:27    

...et si tu mettais les bons paramètres dans le constructeur de Mysqli ce serait pas mieux?

Message cité 1 fois
Message édité par skeye le 12-06-2008 à 13:33:37

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 13:35:29    

skeye a écrit :

...et si tu mettais les bons paramètres dans le constructeur de Mysqli ce serait pas mieux?


 
 
les *** c'est  pour cacher mes codes ici sur le forum    ;)  

Reply

Marsh Posté le 12-06-2008 à 13:39:36    

jc66 a écrit :


 
 
les *** c'est  pour cacher mes codes ici sur le forum    ;)  


...en attendant le message dir que l'utilisateur 'meteo'@'localhost' n'a pas le droit de se connecter à la base '0' [:moule_bite]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 14:05:10    

mes codes sont corrects.  J'y suis plus du tout là :(

Reply

Marsh Posté le 12-06-2008 à 14:06:40    

non ce n'est pas correct, il n'arrive pas à se connecter à la base là.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 14:12:07    

je met
 
 
$db = new MySqli(localhost, monlogin, monpass, mabase);

Reply

Marsh Posté le 12-06-2008 à 14:15:19    

jc66 a écrit :

je met
 
 
$db = new MySqli(localhost, monlogin, monpass, mabase);


 
et ta base s'appelle '0'?[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 14:16:34    

skeye a écrit :


 
et ta base s'appelle '0'?[:pingouino]


 
 
bein non, j'ai pourtant mis le bon nom


Message édité par jc66 le 12-06-2008 à 14:16:40
Reply

Marsh Posté le 12-06-2008 à 14:19:26    

Bon, je laisse tomber moi.[:dawa]
Ton machin n'arrive pas à se connecter, point.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 14:24:47    

mon fichier est un fichier.php   et je l'appelle dans mon navigateur firefox.   Les codes c'est sur et certains ils sont correct, j'ai plusieurs pages qui fonctionnent avec sur mon site

Reply

Marsh Posté le 12-06-2008 à 14:30:20    

Code :
  1. <?php
  2.       $db = new MySqli(localhost, max123, monmotdepasse, maxa-sitefr);
  3.      $stmt = $db->prepare('INSERT INTO aaaa ($data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10]) VALUES (?,?,?,?,?,?,?,?,?,?);');         
  4.       $stmt->bind_param('iss', $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10]);           
  5.       $handle = fopen("com.txt", "r" );
  6. while (($data = fgetcsv($handle, 5000, ";" )) !== FALSE) {
  7.    $stmt->execute();
  8. }
  9. $stmt->close();
  10. fclose($handle);
  11. $db->close();
  12. ?>


Message édité par jc66 le 12-06-2008 à 14:30:41
Reply

Marsh Posté le 12-06-2008 à 14:51:33    

merci à toi :)
 
 
$stmt->bind_param('ssssssssss', $data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9]);
 
je voit pas à quoi ca sert  les sssssss  ?


Message édité par jc66 le 12-06-2008 à 14:51:58
Reply

Marsh Posté le 12-06-2008 à 14:56:46    

j'ai lu, mais avec le traducteur google faut comprendre  
 
 Bind variables pour les marqueurs de paramètres dans l'instruction SQL qui a été adoptée à mysqli_prepare ().
  :heink:  
 
 
et j'ai justement une erreur a cette ligne, donc je cherche d'ou ca vient.
 
Fatal error: Call to a member function bind_param() on a non-object in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aaa.php on line 24
 
Les variable ca a l'air bon, donc je pense que cavient des ssssssssss  , mais pas sur   :(
 

Message cité 1 fois
Message édité par jc66 le 12-06-2008 à 14:57:18
Reply

Marsh Posté le 12-06-2008 à 14:58:53    

jc66 a écrit :


 
Fatal error: Call to a member function bind_param() on a non-object in /home/www/cccf2e7a7c56b5ceef6d1ee2001e19aa/web/aaa.php on line 24
 


ça, ça veut dire que prepare() a échoué.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 15:12:36    

exact !  après correction je n'ai plus aucun message d'erreur, mais juste une page blanche, et rien dans la bdd


Message édité par jc66 le 12-06-2008 à 15:12:59
Reply

Marsh Posté le 12-06-2008 à 15:24:12    

envisage de récupérer el retour de execute() alors.[:moule_bite]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 16:02:32    

je suis perdu  :pfff:

Message cité 1 fois
Message édité par jc66 le 12-06-2008 à 16:02:40
Reply

Marsh Posté le 12-06-2008 à 16:04:56    

jc66 a écrit :

je suis perdu  :pfff:

 


On va pas te tenir la main indéfiniment hein...

 

http://fr.php.net/manual/en/mysqli-stmt.execute.php

 
Citation :


Return Values

 

Returns TRUE on success or FALSE on failure.

 

http://fr.php.net/manual/en/mysqli-stmt.error.php


Message édité par skeye le 12-06-2008 à 16:05:16

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 12-06-2008 à 16:06:46    

Désolé de vous ennuyer.


Message édité par jc66 le 12-06-2008 à 16:29:44
Reply

Marsh Posté le 12-06-2008 à 16:25:52    

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed