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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1873984
nlc
Le mieux est l'ennemi du bien
Posté le 16-04-2009 à 16:49:04  profilanswer
 

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++ );
mood
Publicité
Posté le 16-04-2009 à 16:49:04  profilanswer
 

n°1873993
olivthill
Posté le 16-04-2009 à 16:58:39  profilanswer
 

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.)

n°1874001
nlc
Le mieux est l'ennemi du bien
Posté le 16-04-2009 à 17:06:01  profilanswer
 

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++ );
n°1874613
nlc
Le mieux est l'ennemi du bien
Posté le 18-04-2009 à 10:33:50  profilanswer
 

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++ );
n°1874622
esox_ch
Posté le 18-04-2009 à 11:30:35  profilanswer
 

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
n°1874643
nlc
Le mieux est l'ennemi du bien
Posté le 18-04-2009 à 12:40:37  profilanswer
 

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++ );

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

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

 

Sujets relatifs
Petit problème macros VBA ExcelProbleme jointure sur phpmyadmin
(Débutant) Chaine de caractère : problèmeaccés aux variables
Recuperer ligne de fichier dans variables séparéesProblème avec WebService et Interface
Probléme avec les fichiers[Crontab] Probleme execution
Problème CSSproblème variables globales WML/Php
Plus de sujets relatifs à : Problème avec les variables globales, bug PHP !?


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