2010-01-01 6 views
2

Je construis une fonction qui va valider les valeurs dans un formulaire. Comment puis-je extraire le nom réel sous forme de chaîne à partir d'une variable $ _POST? Ex: $ _POST ['first_name'] = 'Joe'; Je veux maintenant saisir la chaîne 'first_name' et l'utiliser dans une fonction pour déclarer une variable de ce nom. Je sais que je peux utiliser une boucle foreach mais n'y a-t-il pas un moyen plus facile de faire cela?

+1

"... déclare une variable sous ce nom" Ne faites pas cela. Il est susceptible de provoquer une vulnérabilité de sécurité - par ex. si quelqu'un publie une variable appelée _COOKIE ou _SERVER. C'est pourquoi l'option PHP.ini register_globals doit toujours être désactivée. – rjmunro

Répondre

5
foreach($_POST as $key => $value) { 
    $$key = $value; 
} 
+1

Je suggère d'utiliser le format '$ {$ key}' mais seulement pour améliorer la lisibilité. Thats entièrement une préférence personnelle cependant. –

+0

"' extrait' place les variables dans la portée globale ": clair faux. Je ne comprends jamais où tu l'as eu. – ntd

2

Je ne suis pas sûr que ce soit ce que vous voulez, mais vous pouvez utiliser des variables variables comme ceci:

$fieldname = "first_name"; 

$fieldvalue = $_POST[$fieldname]; 

$$fieldname = $fieldvalue; // Creates a variable named "first_name" 

echo $first_name; // Outputs the POST variable 
+0

Pas réellement .. Je voulais juste utiliser le texte 'first_name' comme valeur d'une nouvelle variable. Donc, si je faisais écho à $ fn cela ferait écho à 'first_name' – Rogelio

1

Je ne voudrais pas utiliser ceci:

foreach($_POST as $key => $value) { 
    $$key = $value; 
} 

... il ouvre votre code à la possibilité que quelqu'un place des vars malveillants dans votre programme via le formulaire. (c'est-à-dire, configurer efficacement globals_register sur)

Mais pour répondre à votre question de base: votre seule connaissance des variables affichées est ce qui est dans le tableau $ _POST; votre seul moyen de découvrir ce que sont les noms de variables est de faire une boucle dans les clés du tableau.

+0

a) c'est ce qu'il a demandé, et b) c'est 'register_globals';) –

+0

Euh, oui, register_globals. Et vous avez raison - en fait, permettez-moi d'affiner cela pour: assurez-vous de ne pas le faire dans une portée globale, et seulement dans une fonction. (ce qui est aussi ce que vous avez dit, mais cela mérite d'être souligné) – spinn

+0

Je suis d'accord, les globals sont vraiment très mauvais. Mais c'est ce que le docteur a ordonné. –

6

Que diriez-vous

extract($_POST); 
+1

Ceci est la solution parfaite; il n'y a aucune raison de parcourir toutes les valeurs du tableau, quand il y a 'extract()' qui fait tout le travail. – kiamlaluno

+0

Je suis d'accord avec ce qui précède et c'est la bonne réponse ... – Val

0

Si vous voulez exécuter la fonction basée sur le nom de la clé, votre meilleur coup serait quelque chose comme ceci:

foreach ($_POST AS $key => $value) 
{ 
    call_user_func("example_func_$key", $value); 
} 

Notez l'utilisation de $key dans les guillemets du premier paramètre de call_user_func. Cela vous permettra d'exécuter une fonction nommée "dynamiquement".

Questions connexes