Question

Je suis probablement un peu épaisse être, mais je ne peux pas sembler trouver une réponse à celle-ci. Je me déplace d'un serveur avec register globals sur l'un avec elle étant hors tension. Il est une bonne chose, mais malheureusement j'ai été utilisé à des années et des années de travail avec register globals étant sur ce qui a entraîné l'écriture de code me bâclée. Je suis maintenant en train de corriger cela.

Je suis en train de réécrire certains vieux code qui a des variables variables dans $ _POST.

Je sais que c'est un exemple stupide, mais il illustre le problème que je suis en train de résoudre. Ce qui suit travaillerait avec register globals ON:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

Comment puis-je faire ce travail avec register globals off? Ce qui suit ne fonctionne évidemment pas:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

S'il vous plaît allez-y doucement sur moi- Je sais que je suis probablement stupide, mais je ne peux pas sembler obtenir ma tête ronde cela.

Était-ce utile?

La solution

Simple, il suffit $_POST[$variable]. (Ou $_GET ou peut-être $_REQUEST, selon le cas.)

A noter toutefois que lorsque vous texte de sortie au format HTML, vous devez encoder, ou vous serez vulnérable à contre-site scripting attaques:

<input type="text"
    name="<?php echo htmlspecialchars($variable);?>"
    value="<?php echo htmlspecialchars($_POST[$variable]);?>" 
    size="20" maxlength="150"
/>

(I définit généralement une fonction appelée h qui fait echo htmlspecialchars, de réduire cette quantité excessive de frappe.)

Autres conseils

J'ai quelques interactions de forme similaire à la vôtre, mais je peux; t comprendre pourquoi vous utilisez $ _POST dans un formulaire. Ce que vous devez avoir est la suivante:

<?php $variable = $_POST["fullname"];?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $variable; ?>" size="20" maxlength="150" /> 
<input name="submit" type="submit" value="Go!" />
</form>

$ _ POST est un tableau, ne sera pas il juste.

$_POST[$variable]

vous pouvez vous débarrasser de toute la folie de $$ et simplement faire $_POST[$variable].

Vous êtes sûr que vous vouliez dire $_POST[$$variable] par opposition à $_POST[$variable]

Utilisation des variables variables directement à partir de $ _super GLOBALS est une idée BAD et un risque de sécurité, surtout si l'un de votre code est open source. On pourrait modifier l'entrée à fouiner et trouver la valeur d'une variable que vous laisser passer. Par exemple, ils pourraient passer « _ENV $ » qui les obtenir une décharge de vos variables d'environnement. En fait, inscrivez-vous GLOBALS est une mauvaise idée de toute façon.

On parle dans @ la réponse de bobince.

Et, en ce qui concerne votre question, qui est la raison pour laquelle votre exemple ne fonctionne pas avec le registre de PHP de GLOBALS est désactivé. PHP est plus stricte (pour une bonne raison) avec le registre MONDIALES off, autant que je sache, il est plus difficile de faire le tour variable variable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top