[PHP]Utilisation des variables gloables dans plusieurs fichiers ?

Bonjour !

Je souhaite utiliser une variable globale de la manière suivante :
J’ai deux frames :

  • dans la première, j’ai un fichier1.php avec un include_once(‘variables.php’) ;
  • dans la deuxième, j’ai un fichier2.php avec aussi un include-once(‘variables.php’).
    Dans mon fichier variables.php, je souhaite déclarer une variable globale.
    Et dans les deux autres, je souhaite modifier et/ou afficher le contenu de la variable.
    Je fais donc :
  • dans mon fichier variables.php :
    [cpp]$GLOBALS[‘mavariable’];[/cpp]
  • dans fichier1.php :
    [cpp]include_once(‘variables.php’);
    $mavariable = ‘MAJ’;[/cpp]
  • dans fichier2.php :
    [cpp]echo $mavariable;[/cpp]
    Il ne se passe rien.
    Si qlq’1 peut m’aider, ce serait cool! Merci.

Attention, faire :

$GLOBALS[‘mavariable’] = ‘foo’;
puis
print $mavariable;

n’est pas la même chose que faire :

$mavariable = ‘foo’;
print $GLOBALS[‘mavariable’];

La raison en est simple : si tu fais $mavariable = ‘foo’, PHP traduira cela ainsi :

$GLOBALS[‘mavariable’] = ‘foo’;
$mavariable = &$GLOBALS[‘mavariable’];

tu definies ta variable $toto au niveau global et dans ta fonction tu declare ta variable global $toto c tout

Voici ce que j’ai :

  • dans mon fichier variables.php :
    [cpp]<?
    global $mavariable;
    ?>[/cpp]
  • dans mon fichier1.php
    [cpp]<?
    include_once(‘variables.php’);
    $GLOBALS[‘mavariable’]=‘toto’;
    ?>[/cpp]
  • dans mon fichier2.php
    [cpp]<?
    include_once(‘variables.php’);
    echo $mavariable; // ou echo $GLOBALS[‘mavariable’];
    ?>[/cpp]
    Je ne vois pas afficher toto.
    Je rappelle que fichier1.php est dans ma frame de gauche et fichier2.php dans ma frame de droite.

ben c parce que $GLOBAL c juste un tableau que t as inventé ;p

quand u inclu un fichier avec include (once) c comme si ce qu’il y avait dedans tu l’avais ecrit dans ce fichier appelant…

inclu.php


// variable global $toto
$toto="salut";

quiinclut.php


include("inclu.php");
echo $toto;

affiche Salut !!!

le mot global sert dans un seul cas :



// variable global $toto
$toto="Salut";

function affiche_rien()
{
//$toto local a la fonction
echo $toto;
}

function affiche_toto()
{
//$toto global
global $toto;
echo $toto;
}


PS: le tableau des GLOBALS c avec un S

Et comme je le disais :

global $foo; c’est équivalent à : $foo = &$GLOBALS[‘foo’]

Oui mais ça ne resout pas mon pb.
En effet, avec un include (once), ma variable est visible partout mais le pb, c’est de réussir à l’initialiser de n’importe quel fichier à n’importe quel moment et de pouvoir l’utiliser de n’importe où et à n’importe quel moment (c’est pourquoi j’avais pensé à global et $GLOBALS que j’avais pas bien compris, mais ça va mieux). Toujours est-il que je n’y arrive pas.

  • soit le fichier inclu.php
    [cpp]<?$toto=‘Salut’;
    function affiche_rien()
    {
    //$toto local a la fonction
    echo $toto;
    }
    function affiche_toto()
    {
    //$toto global
    global $toto;
    echo $toto;
    }
    function affecte_toto($to)
    {
    $GLOBALS[‘toto’]=$to;
    }?>[/cpp]
  • soit le fichier quiinclu.php
    [cpp]<?
    include(‘inclu.php’);
    affiche_rien();//$toto est vide
    affiche_toto();//$toto vaut “Salut”
    affecte_toto(‘Coucou’);//On affecte “Coucou” à $toto
    affiche_toto();//$toto vaut “Coucou”
    ?>[/cpp]
    Jusque-là, ça marche.
    Maintenant, dans le fichier quiinclu.php, je retire la ligne affecte_toto(‘Coucou’); que je rajoute dans un nouveau fichier autrequiinclu.php. Ca donne ceci :
    [cpp]// Fichier autrequiinclu.php
<? include('inclu.php'); affecte_toto('Coucou');//Affecte 'Coucou' à $toto affiche_toto();// Affiche 'Coucou'; ?>

// Fichier quiinclu.php

<? include('inclu.php'); affiche_rien();//$toto est vide affiche_toto();//$toto vaut "Salut" affiche_toto();//Affiche "Salut" au lieu de "Coucou" ?>

[/cpp]
Je rappelle que les fichier quiinclu.php et autrequiinclu.php sont dans deux frames différents. L’inclusion dans le fichier quiinclue réinitialise $toto à ‘Salut’ (je ne sais pas comment faire autrement pour utiliser les fonctions affiche_toto, etc.)
Je n’arrive vraiment pas à avoir une variable qui soit globale et que je pourrais initialiser depuis n’importe quel fichier et utiliser à n’importe quel moment.
Merci.

oops …

2 frame differents = 2 execution completement differente
pour communiquer interframe faut utiliser du javascript coté client…
ou alors des cookie pour synchronise ou des sessions m’enfin …

tu veux pas expliquer en français ce que tu veux faire ?

En fait, je souhaite avoir une variable que je peux initialiser et utiliser à n’importe quel moment.
Je dois pouvoir soit l’initialiser depuis le frame de gauche et l’utiliser dans le frame de droite, soit l’inverse.
Y’a peut-etre un autre moyen (que je ne connais pas) d’aboutir à un résultat, je sais, mais je voudrais utiliser cette façon de faire (pouvoir initialiser/utiliser une variable depuis n’importe quel frame).

quand tu parles de frame c que t deja coté client dans le navigateur et tu ne peux plus intervenir sur le PHP qui est coté serveur (deja fini de s’executer donc)

donc il faut que tu passe par du javascript une variable que tu peux appeler en faisant parent.maframe.mavaribale par ex

hum!
Ok, je vais essayer en JS pour voir ce que ça donne!