Ça ne fonctionne pas : $type = '_GET'; $$type['mavar']; Normal ?

Ça ne fonctionne pas : $type = '_GET'; $$type['mavar']; Normal ? - PHP - Programmation

Marsh Posté le 15-03-2006 à 15:35:19    

Bonjour à tous,
 
Sous Php, si on fait :
 

Code :
  1. $a = 'aVar';
  2. $aVar = 'Cool';
  3. echo $$a;


 
Cela va afficher 'Cool'
 
Par contre je n'arrive pas utiliser le même procédé avec les variables de type $_GET, $_POST etc...
 

Code :
  1. $a = 'aVar';
  2. $aVar = 'Cool';
  3. echo $$a;
  4.  
  5. $b = '_GET';
  6. echo $$b['test'];


 
L'exemple ci-dessus m'affiche :
 

Citation :

Cool
Notice: Undefined variable: _ in C:\Program Files\wamp\www\perlesv2\index.php on line 7


 
Quelqu'un sait il pourquoi ? Ou va-t-il falloir que je règle le problème à coup d'eval() ? Ce que j'aimerais eviter.


Message édité par Dj YeLL le 15-03-2006 à 15:36:52

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 15-03-2006 à 15:35:19   

Reply

Marsh Posté le 15-03-2006 à 15:46:56    

Il me semble que les superglobale sont protégées, si tu veux faire ça, il faut passer par une transistion, genre tu boucle sur la superglobale en question et tu renseinge ta nouvelle variable.


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 15-03-2006 à 16:57:11    

YeLL > $$ est à éviter comme toutes les méthodes permettant d'indiquer un nom de variable à la volé. Ca empéche toute possibilité de débuguage par simple lecture du code et dans 99.999% des cas, ca dénote une erreur de conception du code.
 
Au lieux d'utiliser cette méthode là, vérifie si t'as pas moyen de mieux gérer tes variables.

Reply

Marsh Posté le 15-03-2006 à 17:00:56    

Un bel exemple de code avec les registerglobals sur off : :D

Code :
  1. // Emulation de register_globals à on
  2. if (!ini_get('register_globals')) {
  3.     $superglobals = array($_SERVER, $_ENV,
  4.         $_FILES, $_COOKIE, $_POST, $_GET);
  5.     if (isset($_SESSION)) {
  6.         array_unshift($superglobals, $_SESSION);
  7.     }
  8.     foreach ($superglobals as $superglobal) {
  9.         extract($superglobal, EXTR_SKIP);
  10.     }
  11. }


 
PS : exemple de la doc


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 15-03-2006 à 17:19:02    

chaced > Et évidement, tu oublis d'indiquer la page en question ( http://fr2.php.net/manual/fr/faq.misc.php ) et le fait que même dans cette page ils indiquent que ca n'est à n'utiliser que dans des cas particulier et qu'il vaut mieux utiliser les variables "superglobales" plustôt que de remettre (ou simuler d'ailleur) le "register_globals" à "on".
 
PS : En plus cet exemple est mal fait, ils auraient pu au moins utiliser la fonction qui donne la liste des vrai superglobales plustôt que d'en donner une liste générique qui est potentiellement fausse en fonction des config.

Reply

Marsh Posté le 15-03-2006 à 17:28:01    

omega2 a écrit :

chaced > Et évidement, tu oublis d'indiquer la page en question ( http://fr2.php.net/manual/fr/faq.misc.php ) et le fait que même dans cette page ils indiquent que ca n'est à n'utiliser que dans des cas particulier et qu'il vaut mieux utiliser les variables "superglobales" plustôt que de remettre (ou simuler d'ailleur) le "register_globals" à "on".
 
PS : En plus cet exemple est mal fait, ils auraient pu au moins utiliser la fonction qui donne la liste des vrai superglobales plustôt que d'en donner une liste générique qui est potentiellement fausse en fonction des config.


 
Cet exemple c'est surtout si tu es en mutualisé et donc pas acces au php.ini, et que tu as un site entier codé sans utilisation de superglobales... donc si tu ne veux pas repasser toutes les pages.


---------------
CPU-Z | Timespy | Mes bd
Reply

Marsh Posté le 16-03-2006 à 08:36:54    

Merci à vous deux. J'ai trouvé une meilleure solution et j'avais un peu oublié ce message :/ Désolé de pas avoir averti que c'était reglé.
 
Comme l'a dit omaga2 :
 

Citation :

dans 99.999% des cas, ca dénote une erreur de conception du code.
 
Au lieux d'utiliser cette méthode là, vérifie si t'as pas moyen de mieux gérer tes variables.


 
Et c'est justement ce que j'ai fais, j'ai revu toute cette partie et j'ai recodé ça proprement. Je me suis assez pris la tête parce que c'était un cas assez spécial, mais j'ai fini par y arriver :)
 
Je suis en train de dev un système de gestion d'eCommerce de A à Z, et c'est plutôt interessant à faire :) Par contre c'est un gros projet et je me retrouve parfois devant des cas assez difficile. (je n'aime pas trop osCommerce)
 
Donc encore merci :)
 
A+


---------------
Gamertag: CoteBlack YeLL
Reply

Sujets relatifs:

Leave a Replay

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