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

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1325906
Dj YeLL
$question = $to_be || !$to_be;
Posté le 15-03-2006 à 15:35:19  profilanswer
 

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
mood
Publicité
Posté le 15-03-2006 à 15:35:19  profilanswer
 

n°1325928
chaced
Posté le 15-03-2006 à 15:46:56  profilanswer
 

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
n°1326002
omega2
Posté le 15-03-2006 à 16:57:11  profilanswer
 

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.

n°1326007
chaced
Posté le 15-03-2006 à 17:00:56  profilanswer
 

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
n°1326032
omega2
Posté le 15-03-2006 à 17:19:02  profilanswer
 

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.

n°1326046
chaced
Posté le 15-03-2006 à 17:28:01  profilanswer
 

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
n°1326459
Dj YeLL
$question = $to_be || !$to_be;
Posté le 16-03-2006 à 08:36:54  profilanswer
 

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

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

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

 

Sujets relatifs
Framework type Spring.fichier .dll du type jeu
[PERL] connaitre le type d'une variable[c#][DirectX] DrawIndexedPrimitives() qui ne fonctionne pas
[Corba + Eclipse] import org.omg qui fonctionne pas[MySQL] Quel type de champ pour quel type de données ?
Un simple lien qui ne fonctionne pas toujours[caml] annotation de type
Traiter résultats d'un GET comme valeurs d'une formulaireAppli type wizard
Plus de sujets relatifs à : Ça ne fonctionne pas : $type = '_GET'; $$type['mavar']; Normal ?


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