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

  FORUM HardWare.fr
  Programmation
  PHP

  [RESOLU]PHP et MySQL problème avec des boucles!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]PHP et MySQL problème avec des boucles!!

n°1518164
acorsa
Posté le 22-02-2007 à 10:48:51  profilanswer
 

Bon j'estime que passer plus d'1 jour à bloquer sur un truc si bête c'est trop...
Voilà donc mon problème:
Je récupère des données d'un formulaire sous cette forme: "fred FR; andrea DE; sabine IT;...." donc g des noms et leur langue. Mon but est de dissocier les 2 car je dois aller chercher ds ma bd les login correspondants aux noms.
J'utilise donc 2 fois la fonctin explode, une fois pour les ";" et une fois pour les " ".
Je vous montre mon code et je vous mets quelques commentaires et les traces des echo:
 

Code :
  1. /* par exemple: $translator_list=fred FR; andrea DE; sabine IT; */
  2.             $liste = explode(";",$translator_list);
  3.             $nb_elt= sizeof($liste);
  4.             for ($i = 0; $i < $nb_elt; $i++){
  5.               $liste2 = explode("  ",$liste[$i]);
  6.               $nb_elt2= sizeof($liste2);     
  7. /*$liste[$i]=fred FR andrea DE sabine IT*/
  8.                
  9.                for ($j = 0; $j < $nb_elt2; $j++){                 
  10.                   if ($liste2[$j]!="" ){
  11.                     echo " we search $liste2[$j] ";
  12.                     $sql4=mysql_query("select user_login from Users where user_name='$liste2[$j]'" );                             
  13.                     while($sql4 and $data = mysql_fetch_array($sql4)){
  14.                        $userlogin=$data["user_login"];
  15.                        echo " login $userlogin";
  16.                     }
  17.                   }
  18.                 }
  19.             }


Voici ce que ça me retourne:  
we search fred login t_fred we search FR we search andrea we search DE we search sabine we search IT
En fait il ne cherche que la première valeur ds la bd alors que la valeur $liste2[$j] est bien correcte!
Je voudrais que ça retourne:
we search fred login t_fred we search FR we search andrea login t_andrea we search DE we search sabine login t_sabine we search IT
Si vous pensez connaître la solution à mon problème sahez que ça peut changer ma journée!!
Merci d'avance


Message édité par acorsa le 22-02-2007 à 16:13:33
mood
Publicité
Posté le 22-02-2007 à 10:48:51  profilanswer
 

n°1518189
chani_t
From Dune
Posté le 22-02-2007 à 11:28:42  profilanswer
 

ba déjà tu cherche tous les éléments de ta liste, chose que tu ne devrais pas faire.
 
Ensuite, quand tu explode la première fois il dois te créer une liste tel que :
 
liste[1]=fred FR
liste[2] =[espace] andrea DE....
 
lorsque tu explode la seconde fois, tu devrais claquer tout ça dans un tableau
$liste2[$i][]= explode("  ",$liste[$i]);
 
et une fois que tu as ce tableau, faire ta boucle pour lancer tes requêtes, mais uniquement avec la première colonne de liste2.
 

n°1518211
acorsa
Posté le 22-02-2007 à 11:39:55  profilanswer
 

Merci mais je ne peux pas faire de tableau à 2 dimension avec le explode....

n°1518217
chani_t
From Dune
Posté le 22-02-2007 à 11:46:15  profilanswer
 

Avec explode tu fais un tableau à 1 dimlension certe, mais que tu stocke dans un tableau à 1 dimension... donc tu obtien un tableau à 2 dimensions. ;)

n°1518226
acorsa
Posté le 22-02-2007 à 11:54:00  profilanswer
 

Au risque de passer pour une boulette...tu peux m'écrire la ligne de code s'il te plaît? Parce-que j'y arrive pas...

n°1518248
chani_t
From Dune
Posté le 22-02-2007 à 12:24:33  profilanswer
 

Code :
  1. $liste = explode(";",$translator_list);
  2. $i=0;
  3. foreach ($liste as $element){
  4.    $liste2[$i]= explode("  ",$element);
  5. }


 
normalement ça le fait... mais bon j'ais toujours des surprises avec les tableaux... :D
 
Si ça passe pas essaye ça :
 

Code :
  1. $liste = explode(";",$translator_list);
  2. $i=0;
  3. foreach ($liste as $element){
  4.    $liste2[$i][]= explode("  ",$element);
  5. }

n°1518259
acorsa
Posté le 22-02-2007 à 12:33:22  profilanswer
 

Merci beaucoup!!Je récupère uniquement les noms....ms le problème est toujours là...La requête ne marche pas!;-(
Je te remets mon code:

Code :
  1. $liste = explode(";",$translator_list);
  2.             $nb_elt= sizeof($liste);
  3.             $i=0;
  4.             foreach ($liste as $element){
  5.               $liste2[$i]= explode("  ",$element);
  6.               echo $liste2[$i][$i];               
  7. /*là ça m'affiche les noms nickel...*/
  8.               $sql4=mysql_query("select user_login from Users where user_name='$liste2[$i][$i]'" ); 
  9. /*ms la requête ne marche pas avec $liste2[$i][$i] en paramètre...*/                           
  10.                     while($sql4 and $data = mysql_fetch_array($sql4)){
  11.                        $userlogin=$data["user_login"];
  12.                        echo " login $userlogin";
  13.                     }
  14.              }


ça rentre jamais ds le while!!


Message édité par acorsa le 22-02-2007 à 12:35:29
n°1518281
chani_t
From Dune
Posté le 22-02-2007 à 13:26:27  profilanswer
 

j'avais oublié un point fondamental ... l'incrémentation de la variable $i... (tête en l'air.. oui un peu :D)

Code :
  1. $liste = explode(";",$translator_list);
  2.       $i=0;
  3.       foreach ($liste as $element){
  4.         $liste2[$i]= explode("  ",$element);
  5.         $i++;
  6.       }
  7.       foreach ($liste2 as $element2) {
  8.         $sql4=mysql_query("select user_login from Users where user_name='".$element2[0]."'" );
  9.         while($sql4 and $data = mysql_fetch_array($sql4)){
  10.                       $userlogin=$data["user_login"];
  11.                       echo " login $userlogin";
  12.          }
  13.       }
 

concaténation de chaine da caractére...... notion à revoir ;)

 

EDIT : alors vi, j'ais séparé les deux boucles foreach.. tu peux trés bien les laisser ensemble, mais disons que vu qu'elles font deux choses différentes, ce sera plus facile par la suite à séparer en fonctions.


Message édité par chani_t le 22-02-2007 à 13:28:32
n°1518324
acorsa
Posté le 22-02-2007 à 14:53:04  profilanswer
 

Hélas...ça ne marche toujours pas....
Si j'affiche la valeur de $element2[0], c'est bein es bonnes valeurs ms  ds la requête seule la première marche.
Comme au tout début...

n°1518357
chani_t
From Dune
Posté le 22-02-2007 à 15:15:19  profilanswer
 

et si tu affiche tes requêtes avant de les envoyer ?

 
Code :
  1. $req="select user_login from Users where user_name='".$element2[0]."'";
  2. echo $req."<br/>";
  3. $sql4=mysql_query($req) or die ("Exécution de requête de login impossible : ".$req);
 

tu pourrais afficher ce que ça donne ?

Code :
  1. while($data = mysql_fetch_array($sql4)){
  2.                      $userlogin=$data["user_login"];
  3.                      echo " login $userlogin";
  4.         }
 

EDIt : yavais une erreur dans ton while


Message édité par chani_t le 22-02-2007 à 15:20:05
mood
Publicité
Posté le 22-02-2007 à 15:15:19  profilanswer
 

n°1518379
acorsa
Posté le 22-02-2007 à 15:34:16  profilanswer
 

y'avait pas d'erreur ds mon while! C'était quoi l'erreur?
Bon alors un truc de fou.....Gra^ce à ton test g pu m'apercevoir que ce qui me fait ch$$$ depuis 2 jours....c'est: un espace avant le nom!!!!
$element2[0] me retourne " renaud" par exemple!!
C'est fou ça hein??

n°1518390
chani_t
From Dune
Posté le 22-02-2007 à 15:46:10  profilanswer
 

ba.... le while($sql4 AND $data etc...) le $sql4 te sert à quoi ... (j'avoue n'avoir j'amais vu).
 
Quand à l'espace.. je l'avais mentionné quelque post au dessus... :D

n°1518411
acorsa
Posté le 22-02-2007 à 15:56:52  profilanswer
 

c vrai????Non non je n'ai pas soupçonné ça..en tout cas je te remercie!!!
Je commençais à désepérer...
Bonne journée et à bientôt peut-être!;-)

n°1518414
chani_t
From Dune
Posté le 22-02-2007 à 16:00:09  profilanswer
 

;)... en tournant autour du probléme... ou y arrive quand même :D bonne continuation

n°1518443
acorsa
Posté le 22-02-2007 à 16:13:15  profilanswer
 

ouai ms faut tourner longtemps..et toute seule je m'essouffle !!Merci

n°1518452
lkolrn
&lt;comment ça marche?&gt;
Posté le 22-02-2007 à 16:30:00  profilanswer
 

chani_t a écrit :

ba.... le while($sql4 AND $data etc...) le $sql4 te sert à quoi ... (j'avoue n'avoir j'amais vu).

Ca permet de tester implicitement (php style) si $sql4 est une ressource non nulle, vu qu'elle est utilisée juste après dans le fetch() [:aloy]
 
On peut faire plus parlant :

Code :
  1. if (is_resource($sql4))
  2.    while ($data = mysql_fetch_...())
  3.    {
  4.       //...
  5.    }

mais j'ai jamais bien compris l'utilité de faire ce genre de tests en php [:airforceone]

n°1518476
flo850
moi je
Posté le 22-02-2007 à 16:54:24  profilanswer
 

si $sql4 n'est pas une ressource ( erreur SQL , perte de connexion a la bdd , ... )  et que ton serveur est configurer pour t'afficher les warning, tu as nue belle ligne t indiquant que sql4 n'est pas une ressources

n°1518478
chani_t
From Dune
Posté le 22-02-2007 à 16:56:34  profilanswer
 

mouais... ok, bon je pense pas que je le ferai de manière implicite, je préfere le faire explicitement ... m'enfin c'est bon à savoir.

n°1518497
lkolrn
&lt;comment ça marche?&gt;
Posté le 22-02-2007 à 17:23:59  profilanswer
 

Et côté vitesse d'exécution, le test implicite comme ça, direct dans la boucle, s'effectue à chaque itération du while(), bouffant ainsi une quantité inconsidérée de temps CPU :o


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

  [RESOLU]PHP et MySQL problème avec des boucles!!

 

Sujets relatifs
[VB.NET] Problème au déploiement d'une appli avec Winsock[Résolu] Soucis avec une requête SQL dans une page PHP
[VB] besoin d'aide pour un problèmeARGH -->probleme ds script navigation
[Réglé] Problème avec ma fonction d'encodage de chaine[PHP] Rechargement lors d'un retour en arrière
[PHP] Utilisation d'une base Mysql sous WAMP[MySql]Probleme requete interval date début- date fin pour réservation
Plus de sujets relatifs à : [RESOLU]PHP et MySQL problème avec des boucles!!


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