Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1699 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  php: Gestion de fichier txt a la base mysql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

php: Gestion de fichier txt a la base mysql

n°2127315
manoula
Posté le 20-02-2012 à 16:31:44  profilanswer
 

Bonjour,
j'ai un fichier txt que je doit insérer son contenu dans la base mysql, ce fichier contient:
1) l'identificateur de l'élevé (id_eleve)
2) le nom de l'élevé
mon script doit ouvrir le fichier lire le contenu et insérer dans la table élevé avec des condition:
- si l' id_eleve existe dans la table
on va supprimer l'ancien et ajouter le nouveau id_eleve
si non on va ajouter tous simplement
voila mon script
 

Code :
  1. <?php
  2.    
  3. $connexion=db_connexion();
  4. // Connexion db  
  5. $fichier_ouvrir = @fopen("permis.txt", "r" );
  6. if ($fichier_ouvrir) {
  7.     while (!feof($fichier_ouvrir)) {
  8.         $var_id= rtrim(fgets($fichier_ouvrir, 11));
  9.  $var_nom_eleve= rtrim(fgets($fichier_ouvrir, 200));
  10.     $sql= mysql_query("select * from eleve where id_eleve=$var_id" );
  11.    
  12.     if (isset($_POST["$var_id"]))
  13.    {
  14.    $var_id=prepareChaine($_POST["$var_id"]);
  15.  }
  16.      else
  17.      {
  18.       $var_id=prepareChaine("" );
  19.          $req=("DELETE from eleve where id_eleve=$var_id" );
  20.             $req=("INSERT INTO eleve VALUES ('$var_id'),('$var_nom_eleve')" );
  21.    
  22. // Execution de la requete si pas d'erreur
  23. if ($req <> "" ) {
  24. $req=mysql_query ("$req" )or die(mysql_error());
  25. }
  26. fclose($fichier_ouvrir);
  27.   }
  28. }
  29. // Fermeture DB
  30. ?>


 
mon problème que se script ne fonctionne pas !!!
Aidez moi a le corriger
merci a vous tous

mood
Publicité
Posté le 20-02-2012 à 16:31:44  profilanswer
 

n°2127417
xaeon
Profil: TT
Posté le 21-02-2012 à 00:33:10  profilanswer
 

Hello,
 
1. Pourquoi un $_POST?  
2. Il ne manquerait pas une fonction dans ton code là? parce que prepareChaine() n'est défini nul part...
3. Ta condition else  l.20 s'ouvre mais ne se ferme pas.
4. Tu mets dans $req une chaine à la l.25, puis à la ligne suivante tu y mets directement une nouvelle chaine, il y a un problème net ici.
 
Sinon pour vérifier ici simplement que ton $var_id n'est pas déjà présent dans ta base, après ta requete l.14, tu peux appliquer la fonction mysql_num_rows() à ta ressource $sql, si le résultat est superieur à 0 alors l'id_eleve est déjà existant.

n°2127456
rufo
Pas me confondre avec Lycos!
Posté le 21-02-2012 à 10:52:44  profilanswer
 

Si c'est possible, tu ferais mieux de travailler avec un fichier au format csv avec un séparateur style ;. Ca évitera de supposer que ton ID fait forcément 11 caractères. Quid de ton script si l'ID fait plus ou moins.
 
En plus, php a déjà une fonction native permettant de lire un fichier csv. Ton script sera donc plus sûr.
 
Ensuite, ben une simple boucle sur chaque ligne lue, avec explode(";", $Ligne), t'auras dans un tableau ton ID et ton prénom et ensuite, tu fais le traitement approprié ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2127477
manoula
Posté le 21-02-2012 à 11:32:35  profilanswer
 

xaeon a écrit :

Hello,
 
1. Pourquoi un $_POST?  
2. Il ne manquerait pas une fonction dans ton code là? parce que prepareChaine() n'est défini nul part...
3. Ta condition else  l.20 s'ouvre mais ne se ferme pas.
4. Tu mets dans $req une chaine à la l.25, puis à la ligne suivante tu y mets directement une nouvelle chaine, il y a un problème net ici.
 
Sinon pour vérifier ici simplement que ton $var_id n'est pas déjà présent dans ta base, après ta requete l.14, tu peux appliquer la fonction mysql_num_rows() à ta ressource $sql, si le résultat est superieur à 0 alors l'id_eleve est déjà existant.


 
bonjour;  
pour  $_POST j'ai deja une fonction dans un fichier qui contient que les fonction juste en copiant j'ai pas mis le require (....)  
j'ai changer mon code comme ceci mais je trouve aussi le problème :  
en executant le scirpt il n' y pas une insertion dans la table et en plus un msg apparait :Column count doesn't match value count at row 1
voila mon script:

Code :
  1. <?php
  2.     require_once("lib/db_connect.inc.php" );
  3. require_once('lib/inc_Site2010.php');
  4. $connexion=db_connexion();
  5.  mysql_query("set names utf8" );
  6. // Connexion db  
  7. $fichier_ouvrir = @fopen("permis.txt", "r" );
  8. if ($fichier_ouvrir) {
  9.     while (!feof($fichier_ouvrir)) {
  10.         $var_id= rtrim(fgets($fichier_ouvrir, 11));
  11.  $var_titre_archt= rtrim(fgets($fichier_ouvrir, 200));
  12.         $sql= mysql_query("select * from architecte1" );
  13.  if (mysql_num_rows($sql) >=1)
  14.         {      
  15.    $req=("DELETE from architecte1 where id_archi=$var_id" );
  16.    $req=("INSERT INTO architecte1 VALUES ('$var_id'),('$var_titre_archt')" );
  17.      //$req=("INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id'),('$var_titre_archt')" );
  18.    
  19.          $req=mysql_query ("$req" )or die(mysql_error());   
  20.   } 
  21. }
  22. fclose($fichier_ouvrir);
  23. }
  24. // Fermeture DB
  25. ?>


???

n°2127478
rufo
Pas me confondre avec Lycos!
Posté le 21-02-2012 à 11:35:01  profilanswer
 

ben forcément, après VALUES, tu mets entre les ( ) que l'ID au lie des 2 valeurs :/...
 
Tu lis un peu la doc de temps en temps?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2127480
manoula
Posté le 21-02-2012 à 11:35:20  profilanswer
 

rufo a écrit :

Si c'est possible, tu ferais mieux de travailler avec un fichier au format csv avec un séparateur style ;. Ca évitera de supposer que ton ID fait forcément 11 caractères. Quid de ton script si l'ID fait plus ou moins.
 
En plus, php a déjà une fonction native permettant de lire un fichier csv. Ton script sera donc plus sûr.
 
Ensuite, ben une simple boucle sur chaque ligne lue, avec explode(";", $Ligne), t'auras dans un tableau ton ID et ton prénom et ensuite, tu fais le traitement approprié ;)


 
 
bonjour,
En faite je n'est aucune idée sur un fichier au format csv
Pouriez-vous m'aidez à changer mon code ???

n°2127481
MEI
|DarthPingoo(tm)|
Posté le 21-02-2012 à 11:36:40  profilanswer
 

Ca serait aussi mieux de mettre des binds dans les requêtes (+ de perfs) et de quoter ce qui sort du fichier (sécurité).
 
Bref c'est plus propre et dans les règles de l'art.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2127483
manoula
Posté le 21-02-2012 à 11:37:50  profilanswer
 

MEI a écrit :

Ca serait aussi mieux de mettre des binds dans les requêtes (+ de perfs) et de quoter ce qui sort du fichier (sécurité).
 
Bref c'est plus propre et dans les règles de l'art.


 
merci de me répondre et commet ca??

n°2127488
manoula
Posté le 21-02-2012 à 11:43:45  profilanswer
 

rufo a écrit :

ben forcément, après VALUES, tu mets entre les ( ) que l'ID au lie des 2 valeurs :/...
 
Tu lis un peu la doc de temps en temps?


 
les deux valeur se trouvent dans le fichier donc je doit mettre le $var_id et le $var_titre_archt
j'ai bien changer ma requête  

Code :
  1. $req=("INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id' ,'$var_titre_archt')" );

 
mais l'insertion n'est pas faite??


Message édité par manoula le 21-02-2012 à 12:12:27
n°2127516
rufo
Pas me confondre avec Lycos!
Posté le 21-02-2012 à 12:56:41  profilanswer
 

Déjà, les ( ) en début et fin de la requête sql sont inutiles. Ensuite, faut penser à échapper les ' si y'en a dans le titre.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 21-02-2012 à 12:56:41  profilanswer
 

n°2127517
rufo
Pas me confondre avec Lycos!
Posté le 21-02-2012 à 12:57:42  profilanswer
 

manoula a écrit :


 
 
bonjour,
En faite je n'est aucune idée sur un fichier au format csv
Pouriez-vous m'aidez à changer mon code ???


 
ben tu cherches dans google ce qu'est un fichier csv (même si dans mon post, j'ai donné déjà une petite indication sur ce que c'était)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2127723
manoula
Posté le 22-02-2012 à 09:24:14  profilanswer
 

rufo a écrit :

Déjà, les ( ) en début et fin de la requête sql sont inutiles. Ensuite, faut penser à échapper les ' si y'en a dans le titre.


 
bonjour voila mon code complet après modification :

Code :
  1. <?php
  2.     require_once("xxx/db_connect.inc.php" );
  3. require_once('xxx/yyyy.php');
  4. $connexion=db_connexion();
  5.  mysql_query("set names utf8" );
  6. // Connexion db  
  7. $fichier_ouvrir = @fopen("permis.txt", "r" );
  8. if ($fichier_ouvrir) {
  9.     while (!feof($fichier_ouvrir)) {
  10.         $var_id= rtrim(fgets($fichier_ouvrir, 11));
  11.  $var_titre_archt= rtrim(fgets($fichier_ouvrir, 200));
  12.      
  13.     $sql= mysql_query("select * from architecte1 where id_archi='$var_id'" ) or die('Erreue: ' . mysql_error() . "<br />\n$sql" );
  14.  if (mysql_num_rows($sql) >=0)
  15.         {      
  16.   
  17.   $req="DELETE from architecte1 where id_archi='$var_id'";
  18.      $req="INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id','$var_titre_archt')";
  19.    
  20.          $req=mysql_query ("$req" )or die(mysql_error());   
  21.   } 
  22.   else
  23. {
  24.         $req="INSERT INTO architecte1 (id_archi,titre_archi) VALUES ('$var_id','$var_titre_archt')";
  25.    
  26.          $req=mysql_query ("$req" )or die(mysql_error()); 
  27. }
  28.   
  29. }
  30. fclose($fichier_ouvrir);
  31. }
  32. // Fermeture DB
  33. ?>


alors maintenant quand j’exécute l'erreur est : Duplicata du champ '0' pour la clef 1 !!
mon fichier contient les id et les nom en arabe :
0 ???? ????
2 ???
4 ????
5 ???? ?? ????
...
en faite il fait l'insertion que du premier enregistrement mais si seulement si je change le 1er(enregistrement) et le 2eme par des nom en français il insère les 2 avec le 3eme en arabe !!!
Et si les 3 premier enregistrement en français il insère les 3 avec le 4eme en arabe !!!


Message édité par manoula le 22-02-2012 à 09:24:39
n°2127735
rufo
Pas me confondre avec Lycos!
Posté le 22-02-2012 à 10:10:47  profilanswer
 

T'as sans doute aussi un pb de charset. Et je ne vois toujours pas dans ton code où tu échappes les caractères pouvant poser des pbs lors de l'insertion concernant le nom de la personne :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  php: Gestion de fichier txt a la base mysql

 

Sujets relatifs
Double tri limité sur chaque critère en MySql[MySQL] Requête pour comparer 11 jours avec l'année précédente
gestionnaire de dossier et fichierCompilation parser XML pour intégration à un code C
probleme gestion sourisl'emplacement sous windows de la base et ses tables créés ?
Script de suppresion de fichier temporairetrier un fichier texte
Script batch vérification fichier txtConversion d'un code à base de pointeurs
Plus de sujets relatifs à : php: Gestion de fichier txt a la base mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR