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

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Nom d'une variable dépend d'une autre

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Nom d'une variable dépend d'une autre

n°2015226
Pommesky
try your life
Posté le 08-08-2010 à 20:46:03  profilanswer
 

Bonjour,
Voila un morceau de code :

Code :
  1. while($donnee != "" )
  2. {
  3.     $resultat = mysql_query ( "SELECT * FROM donnees WHERE ID='$i'" );
  4.     $resultat_array = mysql_fetch_array ( $resultat );
  5.     $donnee = $resultat_array[Donnee];
  6.     $"$donnee" =$_POST["donnee"];
  7.     $i++;
  8. }


Donc voila ce morceau de code se charge de récupérer des donnée d'un formulaire d'inscription, ce formulaire est modifiable via une page d'administration donc il peut contenir plus ou moins de champs.  
J'ai donc une liste des champs dans une table sql donc par exemple au premier tour de la boucle le programme interroge la BDD qui lui dit qu'il y a un champ "Nom", la variable "$donnee" prend donc la valeur "Nom " et donc j'aimerais récuperer la valeur du champ "Nom" dans une variable $nom et c'est la où je bloque, là ou j'ai marquer "$"$donnee".


Message édité par Pommesky le 14-08-2010 à 21:13:53
mood
Publicité
Posté le 08-08-2010 à 20:46:03  profilanswer
 

n°2015227
flo850
moi je
Posté le 08-08-2010 à 20:49:55  profilanswer
 

pourquoi tu n'utilise pas des tableaux dans ton formulaire  ?  

Code :
  1. <input type="text" name="donnees[utilisateurs][]" >


 
ca te simplifierai ton traitement et ce sera bcp plus propre  
 
sinon, tu peux faire $$donne , tout simplement, mais c'est très sale

n°2015270
gelatine_v​elue
Posté le 09-08-2010 à 09:36:03  profilanswer
 

flo850 a écrit :


 
sinon, tu peux faire $$donne , tout simplement, mais c'est très sale


 
Ah bon pourquoi?  
 
Sinonton code est dégeu Pommesky. Trop de pomme-sky sans doute. Ha. Ha.
 

  • $donnee = $resultat_array[Donnee]; <-- Donnee n'est initialisé nulle part
  • $"$donnee" =$_POST["donnee"]; <-- Tu récupères des variables POST dans une boucle while. Ca a rien à y faire.

n°2015271
flo850
moi je
Posté le 09-08-2010 à 09:37:39  profilanswer
 

parceuqe ca rend le code illisible et indébugable , mais surtout parceque c'est une solution à un problème qui ne dois pas se poser, les tableaux sont là pour ça

 

et il faut bien qu'il traite les données dans la boucle, vu que c'est dans cette meme boucle qu'il connait le nom de la variable a récupérer


Message édité par flo850 le 09-08-2010 à 09:38:13
n°2015275
gelatine_v​elue
Posté le 09-08-2010 à 09:41:05  profilanswer
 

Mais oui mais non, il récupère toujours la même valeur du post...  
Bon bref il y a sans doute deux couilles dans le potage en même temps, il voulait sans doute écrire:
 
$$donnee =$_POST[$donnee];

n°2015488
Pommesky
try your life
Posté le 09-08-2010 à 16:43:36  profilanswer
 

Alors voilà j'ai trouvé la solution a mon problème
déjà :

Citation :

$donnee = $resultat_array[Donnee]; <-- Donnee n'est initialisé nulle part


"Donnee" c'est juste pour avoir le nom du champ dans lequel à été posté les données que je doit récupérer, les noms des champ sont stockés dans une table SQL et correspondent à un id qui est incrémenté a chaque boucle, ce qui me permet de traité les champs un par un.

Citation :

$"$donnee" =$_POST["donnee"]; <-- Tu récupères des variables POST dans une boucle while. Ca a rien à y faire.


Ce programme est un genre de mini cms, le formulaire d'inscription doit être flexible sans pour autant touché le code c'est pour ça que les nom de mes champs sont stocké dans une table sql et a part une boucle pour les récupérer je n'ai rien trouvé d'autre et je ne trouve pas que sa gène.
 
Bref donc j'ai remagné le pâté et voila ce que ça donne :

Code :
  1. function recuperer_donnee()
  2. {
  3.     $donnee [30];
  4.     $nom_du_champ = "xxx";
  5.     $i = 1;
  6.     while($nom_du_champ != "" )
  7.     {
  8.         $resultat = mysql_query ( "SELECT * FROM donnees WHERE ID='$i'" );
  9.         $resultat_array = mysql_fetch_array ( $resultat );
  10.         $nom_du_champ = $resultat_array[Donnee];
  11.         $donnee[$nom_du_champ]=$_POST["$nom_du_champ"];
  12.         $i++;
  13.     }
  14.     return $donnee;
  15. }


 
Je retourne donc un tableau et c'est bien plus pratique.
Merci pour tous vos conseils et n'hésiter pas si vous avez des remarques, c'est vrai que j'ai beaucoup de mal à faire un code lisible -_-

n°2015522
gelatine_v​elue
Posté le 09-08-2010 à 18:07:29  profilanswer
 

On peut pinailler sur la meilleure façon de faire, mais ton code n'a plus de parties aberrantes. Merci du retour.

n°2015551
stealth35
Posté le 09-08-2010 à 20:54:26  profilanswer
 

gelatine_velue a écrit :

On peut pinailler sur la meilleure façon de faire, mais ton code n'a plus de parties aberrantes. Merci du retour.


 
si le $i, les id ne non pas forcement incrémenté, il peu y avoir des trous (voir même des gros)
 
sinon je comprend pas pourquoi faire une requête par id autant tout prendre et faire une condition sur la requête,
 
le plus simple c'est de faire un SHOW COLUMNS, et un array_merge avec ton POST

n°2016965
Pommesky
try your life
Posté le 14-08-2010 à 21:12:16  profilanswer
 

Ça y est je suis finalement arrivé à un résultat qui me convient et propre, qui corrige le problème les $id puisque je ne les utilise plus. J'ai gouté aux joies des tableaux et sa va 15 fois mieux
Voilà le code :

Code :
  1. function recuperer_donnees()
  2. //Cette fonction récupère les données du formulaire d'inscription et les renvoient dans un tableau sous la forme $donnees[$nom_de_donnee]
  3. //La fonction connexion_sql doit est appelée avant d'utilisé celle-ci
  4. {
  5.     //Initialisation des variables
  6.     $donnees [30];
  7.     //Boucle pour insérer la colonne Nom_de_donnee de la bdd dans le tableau $tableau_noms_de_donnee
  8.     $resultat = mysql_query ( "SELECT Nom_de_donnee FROM profil" );
  9.     while ($resultat_array = mysql_fetch_array ( $resultat ))
  10.     {
  11.         $tableau_noms_de_donnee[] = $resultat_array[0];
  12.     }
  13.     //Boucle qui récupère les données du formulaire associés au noms de données stockés dans le tableau $tableau_noms_de_donnee
  14.     for($nb =0; $tableau_noms_de_donnee[$nb] != false; $nb++)
  15.     {
  16.         $nom_de_donnee = $tableau_noms_de_donnee[$nb];
  17.         $donnees[$nom_de_donnee]=$_POST["$nom_de_donnee"];
  18.     }
  19.     return $donnees;
  20. }


Merci pour vos remarques à tous, j'ai appris beaucoup de chose.


Message édité par Pommesky le 14-08-2010 à 21:12:48
n°2023877
the_bigboo
Posté le 20-09-2010 à 15:07:44  profilanswer
 

Personnellement je ne suis pas fan de la déclaration à coup de :

Code :
  1. $donnees [30];


Il vaut mieux initialiser une variable proprement.
D'autre part :

Code :
  1. for($nb =0; $tableau_noms_de_donnee[$nb] != false; $nb++)


Ce code va te faire une notice sur ta dernière itération, mieux vaudrait faire :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)


Enfin, ce n'est pas méchant, mais las variables globales de type GET/POST n'ont pas vocation a être récupérées dans une fonction, mieux vaut les passer proprement en arguments.

mood
Publicité
Posté le 20-09-2010 à 15:07:44  profilanswer
 

n°2023996
stealth35
Posté le 20-09-2010 à 21:44:32  profilanswer
 

the_bigboo a écrit :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)


pourquoi array_keys ?

Code :
  1. foreach($tableau_noms_de_donnee as $key => $nb)

n°2024128
the_bigboo
Posté le 21-09-2010 à 13:55:26  profilanswer
 

stealth35 a écrit :

pourquoi array_keys ?

Code :
  1. foreach($tableau_noms_de_donnee as $key => $nb)



Parce que dans ta boucle, c'est $nb qui évolue et que tu incrémentes. $nb, qui est la clé de ton tableau.
Faire :

Code :
  1. for($nb =0; $tableau_noms_de_donnee[$nb] != false; $nb++)


C'est comme faire :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)


Sauf que cette dernière notation est bien plus propre. Et elle n'utilise que les clé définies dans ton tableau, à l'instar de ta méthode, qui va les tester une à une.

Message cité 1 fois
Message édité par the_bigboo le 21-09-2010 à 13:58:44
n°2024132
art_dupond
je suis neuneu... oui oui !!
Posté le 21-09-2010 à 14:09:21  profilanswer
 

Code :
  1. foreach($tableau_noms_de_donnee as $nom_de_donnee)
  2. {
  3.    $donnees[$nom_de_donnee] = $_POST["$nom_de_donnee"];
  4. }
 

:??:

 

et pourquoi pas directement dans le while :??:

 
Code :
  1. while ($resultat_array = mysql_fetch_array ( $resultat ))
  2. {
  3.    $nom_de_donnee = $resultat_array[0];
  4.    $donnees[$nom_de_donnee] = $_POST["$nom_de_donnee"];
  5. }


Message édité par art_dupond le 21-09-2010 à 14:12:47

---------------
oui oui
n°2024133
the_bigboo
Posté le 21-09-2010 à 14:13:28  profilanswer
 

Code :
  1. $_POST["$nom_de_donnee"];


Décidément j'aime pas cette notation.... la variable dans une string bof...
Après il fait ce qu'il veux, j'essaie juste de montrer comment faire des boucles correctes.

Message cité 1 fois
Message édité par the_bigboo le 21-09-2010 à 14:15:10
n°2024135
art_dupond
je suis neuneu... oui oui !!
Posté le 21-09-2010 à 14:15:39  profilanswer
 

qu'est-ce qui est vague ?  
 
pourquoi récupérer les clés pour récupérer les valeurs depuis les clés récupérées :pt1cable:  
 
mais avant ça, pourquoi ne pas remplir $données directement au lieu de passer par un tableau intermédiaire ?


---------------
oui oui
n°2024136
art_dupond
je suis neuneu... oui oui !!
Posté le 21-09-2010 à 14:18:30  profilanswer
 

the_bigboo a écrit :

Code :
  1. $_POST["$nom_de_donnee"];


Décidément j'aime pas cette notation.... la variable dans une string bof...
Après il fait ce qu'il veux, j'essaie juste de montrer comment faire des boucles correctes.

 

c'est pas en changeant son for par ton foreach que c'est plus "correct" à ce niveau là :o


Message édité par art_dupond le 21-09-2010 à 14:18:35

---------------
oui oui
n°2024137
the_bigboo
Posté le 21-09-2010 à 14:19:22  profilanswer
 

C'est juste son "for" qui est très moche c'est tout.

n°2024138
art_dupond
je suis neuneu... oui oui !!
Posté le 21-09-2010 à 14:21:26  profilanswer
 

the_bigboo a écrit :

C'est juste son "for" qui est très moche c'est tout.


et le tiens est tordu :p

Spoiler :

mais j'ai bien compris que c'était pour s'adapter à son code :jap:


 


---------------
oui oui
n°2024139
the_bigboo
Posté le 21-09-2010 à 14:30:28  profilanswer
 

J'ai cru un instant que ce n'était pas le cas, je suis donc rassuré ^^
Ca fait longtemps que je n'ai pas directement utilisé ces fonctions là... Tout passe par des class d'abstraction de BDD ^^

n°2024238
stealth35
Posté le 21-09-2010 à 18:49:27  profilanswer
 

the_bigboo a écrit :


C'est comme faire :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)


Sauf que cette dernière notation est bien plus propre. Et elle n'utilise que les clé définies dans ton tableau, à l'instar de ta méthode, qui va les tester une à une.


tester quoi ?


Message édité par stealth35 le 21-09-2010 à 18:49:34
n°2024259
the_bigboo
Posté le 21-09-2010 à 20:25:18  profilanswer
 

chaque itération de la boucle... !
Dans son code il fait :

Code :
  1. for($nb =0; $tableau_noms_de_donnee[$nb] != false; $nb++)


Si son tableau est (c'est qu'un exemple bidon hein !) :

Code :
  1. $tableau_noms_de_donnee = array(128=>array(/*... some data ...*/))


Sa boucle fera 127 itération inutiles avant d'en avoir une exploitable, alors que dans cette boucle-ci :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)


... tu ne parcourras que les données présentes dans le tableau soit une boucle par donnée (for each quoi !)

n°2024266
stealth35
Posté le 21-09-2010 à 20:40:27  profilanswer
 

y'a pas de test quand on fait ca :

Code :
  1. foreach($tableau_noms_de_donnee as $nb => $value)


Message édité par stealth35 le 21-09-2010 à 20:42:14
n°2024276
the_bigboo
Posté le 21-09-2010 à 21:17:25  profilanswer
 

Tu as compris mon message ?  :heink:

n°2024282
stealth35
Posté le 21-09-2010 à 21:29:14  profilanswer
 

the_bigboo a écrit :

Tu as compris mon message ?  :heink:


je pense que t'as pas compris le mien
 
pour toi c'est quoi la différence entre

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)

et

Code :
  1. foreach($tableau_noms_de_donnee as $nb => $value)

a part faire une fonction pour rien ?

n°2024284
the_bigboo
Posté le 21-09-2010 à 21:32:48  profilanswer
 

j'ai adapté à son exemple, il n'utilisait que la clé du tableau dans son bout de code, sauf erreur de ma part.

n°2024287
stealth35
Posté le 21-09-2010 à 21:48:11  profilanswer
 

the_bigboo a écrit :

j'ai adapté à son exemple, il n'utilisait que la clé du tableau dans son bout de code, sauf erreur de ma part.

 

c'est la phrase la que je comprend pas :

 

Et elle n'utilise que les clé définies dans ton tableau, à l'instar de ta méthode, qui va les tester une à une.

 

donc :

stealth35 a écrit :


pour toi c'est quoi la différence entre

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)

et

Code :
  1. foreach($tableau_noms_de_donnee as $nb => $value)

a part faire une fonction pour rien ?



Message édité par stealth35 le 21-09-2010 à 21:49:15
n°2024298
the_bigboo
Posté le 21-09-2010 à 22:09:54  profilanswer
 

Et elle n'utilise que les clé définies dans ton tableau,
=> le foreach se base sur ce qui se trouve dans le tableau pour boucler
 
 à l'instar de ta méthode, qui va les tester une à une.
 => le for testera toutes les valeurs de $nb une a une séquentiellement
 
Ce que je compare, c'est sa boucle for par rapport a ces foreach :

Code :
  1. foreach(array_keys($tableau_noms_de_donnee) as $nb)
  2. //OU
  3. foreach($tableau_noms_de_donnee as $nb => $value)

n°2024300
stealth35
Posté le 21-09-2010 à 22:15:41  profilanswer
 

the_bigboo a écrit :


 à l'instar de ta méthode, qui va les tester une à une.
 => le for testera toutes les valeurs de $nb une a une séquentiellement


tu le vois ou le for ?, dans  

Code :
  1. foreach($tableau_noms_de_donnee as $nb => $value)

:pt1cable:

n°2024302
the_bigboo
Posté le 21-09-2010 à 22:18:29  profilanswer
 

Ligne 16 de son troisième bout de code posté, que j'ai d'ailleurs repris en citation dans mon comparaison...

n°2024307
stealth35
Posté le 21-09-2010 à 22:28:03  profilanswer
 

the_bigboo a écrit :

Ligne 16 de son troisième bout de code posté, que j'ai d'ailleurs repris en citation dans mon comparaison...


donc c'est pas ta méthode mais ça méthode, relis les 2 messages
http://forum.hardware.fr/hfr/Progr [...] m#t2023996
 ;)  

n°2024310
the_bigboo
Posté le 21-09-2010 à 22:33:35  profilanswer
 

sa méthode est le for, ma méthode est le foreach... je dois vraiment pas écrire français.
 
Bref, débat clos.

mood
Publicité
Posté le   profilanswer
 


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

  [Résolu] Nom d'une variable dépend d'une autre

 

Sujets relatifs
remplacer l'url dans <a href="adresse.html" par une variable[VBA/Excel] - Envoyer une selection variable dans une sous fonction ?
Batch tcp/ip [RESOLU][Résolu] Problème concaténation et chemin vers autre classeur
[résolu] AES_ENCRYPT / DECRYPT[Résolu] 550 index.php: Access is denied
[RESOLU] Récupérer le path d'un projet[Résolu] preg_replace et preg_match_all dans les choux
liste de validation entre deux classeurs?[résolu]VBA pour sauvegarde nom cellule sur excel
Plus de sujets relatifs à : [Résolu] Nom d'une variable dépend d'une autre


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