Problème avec les variables globales, bug PHP !?

Problème avec les variables globales, bug PHP !? - PHP - Programmation

Marsh Posté le 16-04-2009 à 16:49:04    

Bonjour à tous, j'ai un petit souci et je ne trouve pas de solution pour le résoudre  :sweat:
 
J'ai un fichier index.php qui sert de point de départ à mon site.
Dedans je fais quelques bricoles (gestion de la session, etc...) et j'inclue un fichier template.php qui contient la structure html de mon site. Dans ce fichier template.php, j'appelle 2 fonctions, à savoir printMenu() et printPageContent(), qui sont définies dans le index.php.
 
Le printMenu m'affiche mon menu (avec plus ou moins d'item en fonction du niveau d'accès), et le printPageContent() m'affiche le contenu de la page.
En fait la fonction printPageContent() fait un include du fichier php correspondant au menu qui a été cliqué.
 
Tout ça marchait très bien jusqu'à ce que dans une des pages j'ai besoin d'accéder à une variable globale depuis une fonction.
 
J'ai réussi à simuler le souci pour vous montrer le problème :
 
Fichier index.php :
 

Code :
  1. <?php
  2. function printPageContent ( )
  3. { include("page1.php";);
  4. }
  5. printPageContent();
  6. ?>


Fichier page1.php :
 

Code :
  1. <?php
  2. $essai = "coucou !";
  3. function printResultTable()
  4. { global $essai;
  5.   echo $essai;
  6. }
  7. printResultTable();
  8. ?>


Si je charge directement la page page1.php dans le navigateur, "coucou !" s'affiche correctement, c'est bon.
 
Mais si je charge la page index.php, qui a son tour charge page1.php, là "coucou !" ne s'affiche pas !!!
 
Visiblement c'est à cause du fait que dans index.php l'inclusion de page1.php se fait dans une fonction, car si je fais :
 
Fichier index.php :
 

Code :
  1. <?php
  2. include("page1.php";);
  3. ?>


Là ça marche  :heink:
 
Comment faire pour résoudre mon souci, une idée ?  :hello:


Message édité par nlc le 16-04-2009 à 17:07:09

---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Marsh Posté le 16-04-2009 à 16:49:04   

Reply

Marsh Posté le 16-04-2009 à 16:58:39    

Oui, faire l'include en dehors de la fonction serait sans doute une solution.
 
(Sinon, mais ça n'a rien à voir, au lieu d'include(), on peut utiliser include_once() pour ne pas avoir de problème de include() dupliqués ou qui s'appellent récursivement.)

Reply

Marsh Posté le 16-04-2009 à 17:06:01    

Oui mais je ne peux pas appeler le include() en dehors de la fonction printContentPage(), cette fonction j'en ai besoin !! :))
 
Maintenant la question, c'est est-ce que le comportement de php dans ces conditions est normal (le "coucou !" ne s'affiche pas) ? Ou bien il devrait s'afficher !??
 
Après je débute en php, peut être que la structure que j'utilise n'est pas bonne, mais je vois pas du tout comment faire autrement !


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Marsh Posté le 18-04-2009 à 10:33:50    

Bon j'ai l'impression que mon souci n'inspire pas grand monde  :lol:  
 
Une de mes solutions possible serait de toujours passer en paramètre les variables dont j'ai besoin dans les fonctions. Ca serait plus propre, c'est sûr, mais dans certaines fonctions ça me ferait beaucoup de paramètres à passer  :sarcastic:


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Marsh Posté le 18-04-2009 à 11:30:35    

J'ai pas testé si ça change qqch, j'en doute à priori mais déclare ton global en haut de ton fichier page1.php , pas dans ta fonction


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-04-2009 à 12:40:37    

En déclarant le global uniquement en haut ça ne marche pas, mais en haut + dans la fonction, ça marche  :heink:  
 
Je vais utiliser ça en attendant de trouver la raison de cette bizarrerie !?
 
index.php:

Code :
  1. <?php
  2. function printPageContent ( )
  3. { include("page1.php";);
  4. }
  5. printPageContent();
  6. ?>


page1.php:

Code :
  1. <?php
  2. global $essai;
  3. $essai = "coucou !";
  4. function printResultTable()
  5. { global $essai;
  6.    echo $essai;
  7. }
  8. printResultTable();
  9. ?>


Message édité par nlc le 18-04-2009 à 12:43:16

---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Sujets relatifs:

Leave a Replay

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