Portée de variable globale

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 31 août 2006 à 09:56
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 1 sept. 2006 à 11:01
Bonjour à tous !

J'ai un petit problème de portée de variable :
Dans un fichier common.php, je déclare ma variable en globale :
global $MaVariable;

Dans une fonction de ce même fichier common.php :
function toto() {
global MaVariable;
MaVariable = "toto";
}

Dans un fichier index.php :

include_once("common.php");
toto();
echo MaVariable; //m'affiche bien la valeur toto.

Ensuite, j'enlève le echo MaVariable; et je met une redirection header("Location: 'toto.php'");

et là, dans toto.php, si je fais :
include_once("common.php")
echo MaVariable;
Il n'affiche rien :( On dirait qu'il a perdu la valeur de la variable dans la redirection !

Alors comment faire pour conserver la valeur de ma variable dans la redirection ? (si possible sans passer par une variable de session).

10 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 août 2006 à 10:27
hello Dark,

tu dois rappeler ta fonction toto () dans toto.php, puisque c'est elle qui conditionne la mise en "globals" de ta variable toto.
Dans index.php, tu lances toto (), donc ta variable existe effectivement.
Mais avec le header, tu changes de page, les variables ne peuvent pas être globales sur différentes pages (comme pour des fonctions, des classes, etc). Donc, il faut relancer toto.
Du coup...pourquoi définir une fonction toto ?

common.php :
$sMaVar = 'toto';

index.php:
require_once 'common.php';
echo $sMaVar; // affiche toto
// on commente la ligne précédente et on met :
header ('Location: toto.php');

toto.php:
require_once 'common.php';
echo $sMaVar; // affiche toto
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
31 août 2006 à 16:04
Bon tant pis, je vais passer par une variable de session alors, c'est bête cà quand même que les variables ne sont pas stockées d'une page à une autre !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 août 2006 à 16:43
Ben c'est le principe du web ;-)
C'est pour ça qu'on a les cookies, les sessions, ou/et les requêtes HTTP.
De ttes façons, si c'est une variable globale à tout le site, MAIS susceptible d'être modifiée durant une même session (par session, j'entends : session de navigation par un utilisateur, sans quitter ton site) : oui, il faut utiliser les sessions (cette fois, je parle des sessions php ;-) ). C'est le plus simple.




 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
31 août 2006 à 16:55
Bah là c'est juste en fait pour stocker un état de page : modification/suppression ou ajout. Donc c'est pas vraiment relatif à une session, mais plutôt à un petit groupe de page.

Et moi qui pensais qu'avec le php, tout (ou presque) était permis contrairement aux langages applicatifs !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2006 à 09:31
Salut!
Tout est permis:
- dans ta première page, tu crée un fichier .xml (au nom du sid)
- tu le récupère dans le deuxième

L'avantage de cette méthode, c'est que tu viens de gagner 500pts CS pour avoir fait plaisir à Malalam!! ( désolé, j'ai pas pû m'empêcher, c'est le matin, :$ )

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
1 sept. 2006 à 10:01
hein ?

Déjà que passer par une variable de session, je trouve ca un peu lourd, alors je vais pas m'encombrer en plus d'un fichier xml !
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2006 à 10:10
Heu... c'était pas sérieux!

Je comprends pas pk ça semble si lourd de passer par des variables de session?

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 129
1 sept. 2006 à 10:29
Bah venant de la prog de logiciel, j'ai un peu de mal avec la portée des variables en PHP, et surtout, je comprends pas trop pourquoi il faut passer par des variables de session pour enregistrer une valeur d'une page à une autre sachant qu'on en aura plus besoin après => on enregistre la variable, on met sa valeur, on change de page, on lit la variable, on la détruit. Ca serait plus simple de n'avoir qu'une simple variable globale à un module et qui accessible uniquement dans le module.
Enfin bon, apparement, le monde de la prog web est bien différent du monde de la prog de logiciels ! Il faut juste changer d'état d'esprit. ;)
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2006 à 10:37
Yep!
Mais bon, si c'était comme tu dis, les scripts prendraient bcp de place en mémoire: les vars de tous les modules seraient gardés auto en mémoire dans l'éventualité qu'on les ré-utilise...

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 sept. 2006 à 11:01
Ce que tu décris existe déjà : ce sont les variables de session, justement. Tu l'initialises...tu changes de page...tu la lis...tu la détruis. Et en effet, Coockiesch a raison : ce serait très lourd pour le serveur de fonctionner différemment.
De toutes façons, ça n'est pas inhérent à php mais au fonctionnement du web. Aucun langage ne permettra ce genre de choses entre deux pages sur un serveur.
0
Rejoignez-nous