[PHP] récupérer une variable dans une fonction

récupérer une variable dans une fonction [PHP] - PHP - Programmation

Marsh Posté le 12-07-2005 à 13:11:57    

Bonjour,
 
Une bêtise je suppose, mais je reste néanmoins callé dessus...
 
mon lien est du type : index.php?nb=x
 
J'ai deux fonctions dans mon script :
function Tableau() et function Reservation()
 
je récupère la valeur de $nb dans ma première fonction avec global $nb
mais lorsque je veux également récupérer la valeur de $nb de la même manière dans ma deuxième fonction, celà ne fonctionne pas...
 
et je ne comprend pas pourquoi...
 
Merci d'avance

Reply

Marsh Posté le 12-07-2005 à 13:11:57   

Reply

Marsh Posté le 12-07-2005 à 13:15:03    

Utilise $_GET['nb'] tu n'auras pu ce genre de probleme car $_GET est un tableau super global tout le temps visible.

Reply

Marsh Posté le 12-07-2005 à 13:17:59    

Merci pour ta réponse et ta rapidité =)
 
mais ca n'a pas l'air de fonctionner, soit je suis vraiment mauvais...
 
j'ai mis $nb = $_GET['nb']; devant les deux fonctions, puis j'ai essayé de le mettre dans les deux fonctions et j'obtiens bien la valeur de nb dans ma première fonction, mais toujours pas dans la deuxième.


Message édité par r3llik le 12-07-2005 à 13:31:54
Reply

Marsh Posté le 12-07-2005 à 13:35:43    

j'ai commencé les fonctions hiern donc ce que je dis est a prendre avec des pincettes mais, j'pense que tu devrais rajouter  
 
global $nb; dans ta function

Reply

Marsh Posté le 12-07-2005 à 13:43:13    

C'est justement ce que j'avais fait, mais celà fonctionne dans la première et pas dans la deuxième :s

Reply

Marsh Posté le 12-07-2005 à 13:55:52    

Balance ton code pour voir.

Reply

Marsh Posté le 12-07-2005 à 13:56:50    

Y'a pas besoin de 'global' si tu récupères directement dans GET.
 
Mais en effet, fait voir ton code.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 14:11:32    

Mon code fait 600 lignes, si vous voulez vraiment le voir, je peux vous donner une url.
 
Sinon, il est structuré comme ca :

Code :
  1. function Tableau()
  2. {
  3. global $nb; --> ok ca marche
  4. ...
  5. }
  6. function Reservation()
  7. {
  8. global $nb; --> ca ne marche pas
  9. ...
  10. }
  11. if($_POST['action'] == 'ok')
  12.   Reservation();
  13. else
  14.   Tableau();


 

Code :
  1. function Tableau()
  2. {
  3. $nb = $_GET['nb']; --> ok ca marche
  4. ...
  5. }
  6. function Reservation()
  7. {
  8. $nb = $_GET['nb']; --> ca ne marche pas
  9. ...
  10. }
  11. if($_POST['action'] == 'ok')
  12.   Reservation();
  13. else
  14.   Tableau();


 
J'ai encore essayé d'autres combinaisons par désespoir mais toujours rien...

Reply

Marsh Posté le 12-07-2005 à 14:13:55    

Je pense qu'il manque du code là, genre :

$nb = NULL;


:D

Reply

Marsh Posté le 12-07-2005 à 14:18:48    

J'essaie


Message édité par r3llik le 12-07-2005 à 14:19:15
Reply

Marsh Posté le 12-07-2005 à 14:18:48   

Reply

Marsh Posté le 12-07-2005 à 14:20:47    

loooooooooooooooooooooool :lol: :lol:

Reply

Marsh Posté le 12-07-2005 à 14:21:49    

T'as pas compris, c'était du second degré. Je disais que dans le code que t'as posté, t'as viré la ligne que j'ai mis. C'était pour de rire.
 
Normalement t'aurais dû voir que mettre $nb à NULL est complètement stupide ;)

Reply

Marsh Posté le 12-07-2005 à 14:26:11    

Erf, ok ^^
Dans mon désespoir, je suis prêt à tout essayer !


Message édité par r3llik le 12-07-2005 à 14:26:51
Reply

Marsh Posté le 12-07-2005 à 14:32:59    

sielfried a écrit :

Y'a pas besoin de 'global' si tu récupères directement dans GET.
 
Mais en effet, fait voir ton code.


 
mais vu qu'il met son get dans une autre variable sa marche pu non ? :??:

Reply

Marsh Posté le 12-07-2005 à 14:40:11    

snarky a écrit :

mais vu qu'il met son get dans une autre variable sa marche pu non ? :??:


 
Nan, faut voir selon ce qui l'arrange. [:spamafote]  
 
Sinon r3llik, essaie de réduire ton problème à un code minimal, et ensuite poste-le, en entier.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 14:57:13    

Réduire... je l'ai réduit ci-dessus, je ne fait qu'utiliser $nb ensuite dans mes fonctions
 
Si il faut changer de nom de variable dans la deuxième fonction, histoire d'avoir par exemple $nb et $nb2 ca ne me dérange pas.
 
Tout ce que je voudrais c'est que je puisse récupérer la valeur nb située dans le lien, dans mes deux fonctions.
 
En tout cas merci de votre soutient, et si je ne montre pas plus du code, c'est juste pour vous éviter de trop chercher, je pense que la solution n'est pas loin...

Reply

Marsh Posté le 12-07-2005 à 15:18:08    

Tu dois pouvoir la récupérer (avec ta deuxième "solution" en tout cas). Y'a aucune raison.
 
Le problème doit être ailleurs.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 15:19:45    

Quand je dis réduis, c'est réduire à une page PHP fonctionnelle qu'on puisse éventuellement tester.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 15:22:40    

et si tu passais ton $_GET['nb'] dans ta fonction ???
 
genre :
 

Code :
  1. if(IsSet($_GET['nb'])) $nb = htmlentities($_GET['nb']); else $nb = 0;
  2. Tableau($nb)


 
et pour ta fonction :

Code :
  1. function Tableau($var)
  2. {
  3. $nb = $var; --> ok ca marche
  4. ...
  5. }


Message édité par bl@p_psx le 12-07-2005 à 15:23:27
Reply

Marsh Posté le 12-07-2005 à 16:41:36    

r3llik a écrit :

Mon code fait 600 lignes, si vous voulez vraiment le voir, je peux vous donner une url.
 
Sinon, il est structuré comme ca :

Code :
  1. function Tableau()
  2. {
  3. global $nb; --> ok ca marche
  4. ...
  5. }
  6. function Reservation()
  7. {
  8. global $nb; --> ca ne marche pas
  9. ...
  10. }
  11. if($_POST['action'] == 'ok')
  12.   Reservation();
  13. else
  14.   Tableau();


 

Code :
  1. function Tableau()
  2. {
  3. $nb = $_GET['nb']; --> ok ca marche
  4. ...
  5. }
  6. function Reservation()
  7. {
  8. $nb = $_GET['nb']; --> ca ne marche pas
  9. ...
  10. }
  11. if($_POST['action'] == 'ok')
  12.   Reservation();
  13. else
  14.   Tableau();


 
J'ai encore essayé d'autres combinaisons par désespoir mais toujours rien...


 
 
C'est normal que ta fonction Reservation ne reçoit pas la variable $_GET['nb'], puisque selon la condition, elle est appellée suite à un formulaire de type "post"
Donc s'il est de type "post", il n'y a aucune variable de type get
Essaie de mettre $_REQUEST au lieu de $_GET (REQUEST contient à la fois les tableaux POST et GET), sinon, inclus une variable cachée dans ton formulaire, avec pour valeur $nb, et ensuite tu pourra y accéder par $_POST.
 
 

Reply

Marsh Posté le 12-07-2005 à 16:43:19    

P'tain, j'vais aller m'acheter des yeux [:dawa]

Reply

Marsh Posté le 12-07-2005 à 17:02:30    

Ben spa parce qu'il y a un form en post qu'il peut pas y avoir du get avec.
 
Pis ça marcherait pas dans une fonction sur deux a priori.  [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 17:08:46    

Une révélation ?!? Voilà ce que j'attendais en allant me balader...
 
Ca à l'air de fonctionner ce truc, je devrais le faire plus souvent...
 
Le problème était effectivement autre part.
 
Pour exécuter la deuxième fonction, le script recharge la page... et bien entendu j'ai omis de renseigner la valeur de nb dans le lien du rechargement...
 

Citation :


P'tain, j'vais aller m'acheter des yeux [:dawa]


 
Moi aussi
 
 
 
En tout cas, un grand merci pour votre aide et désolé pour l'erreur IDIOTE.

Reply

Marsh Posté le 12-07-2005 à 17:08:47    

sielfried a écrit :

Ben spa parce qu'il y a un form en post qu'il peut pas y avoir du get avec.
 
Pis ça marcherait pas dans une fonction sur deux a priori.  [:figti]


 
 
Ben oui, ça ne marche pas dans une fonction sur deux :D
 
Et sinon, dans son utilisation, je pense très fortement qu'il n'ait pas mis d'action genre "action.php?toto=3" quoi [:yo]

Reply

Marsh Posté le 12-07-2005 à 17:13:48    

Je mets cà sur le compte de la fatigue ;)
 
sinon, ca marche impec maintenant : www.lta-tennis.be/test/

Reply

Marsh Posté le 12-07-2005 à 17:21:35    

skylight a écrit :

Ben oui, ça ne marche pas dans une fonction sur deux :D
 
Et sinon, dans son utilisation, je pense très fortement qu'il n'ait pas mis d'action genre "action.php?toto=3" quoi [:yo]


 
Jvois pas pourquoi $nb = $_GET['nb'] aurait marché si y'avait aucun GET. ;)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 12-07-2005 à 17:36:55    

Regarde bien sa condition, une page est appellée suite à un formulaire (donc si la variable était en URL, elle ne l'est pas forcément après validation du formulaire)
 
D'où ma parenthèse sur le action="index.php?nb=valeur", s'il n'a pas persévéré sa variable, elle est perdue.

Reply

Marsh Posté le 12-07-2005 à 17:40:04    

Bon j'ai toujours pas compris où tu veux en viendre (vu que les deux fonctions sont appelées exactement dans le même if, après validation du form, et qu'une marche et pas l'autre), mais on va dire que ça n'a plus beaucoup d'importance. :d


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 13-07-2005 à 11:44:28    

C'que je veux dire c'est que Tableau() n'est pas forcément appellée suite à une soumission de formulaire, donc possible présence de variable $_GET :D (contrairement à Reservation() qui est appellée systématiquement suite à une soumission de formulaire (notamment $_POST['action'] qui vaut 'ok') et donc probable absence de variable $_GET [:boidleau]
 
Enfin, :o

Reply

Marsh Posté le 13-07-2005 à 11:50:37    

Ah ok, j'l'avais pas vu comme ça. ;)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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