Pregunta

Probablemente estoy siendo un poco gruesa, pero me parece que no puede encontrar una respuesta a éste. Me estoy moviendo desde un servidor con variables globales a inscribirse en uno con ella al estar fuera. Es una cosa buena, pero lamentablemente se han utilizado para años y años de trabajo con el registro de globales estar en lo que ha resultado en mí la escritura de código descuidado. Ahora estoy tratando de arreglar eso.

Estoy intentando volver a escribir algo de código antiguo que tiene variables variables dentro de $ _POST.

Yo sé que esto es un ejemplo tonto, pero ilustra el problema que estoy tratando de resolver. El siguiente sería trabajar con variables globales inscribirse en:

<?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>

¿Cómo puedo hacer este trabajo con el registro de globales fuera? La siguiente, obviamente, no funciona:

<?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>

Por favor, ir fácil en mí que sé, probablemente estoy siendo estúpido, pero me parece que no puede conseguir mi cabeza alrededor de esto.

¿Fue útil?

Solución

simple, $_POST[$variable] solo. (O $_GET o tal vez $_REQUEST, según proceda.)

Sin embargo en cuenta que al texto de salida a HTML, debe codificarlo, o va a ser vulnerables a cruzar-site-scripting ataques:

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

(Me suelen definir una función llamada h que hace echo htmlspecialchars, de reducir esta cantidad excesiva de escribir.)

Otros consejos

Tengo algunas interacciones de forma similar a la suya pero puedo; t entender por qué está utilizando $ _POST dentro de una forma. Lo que debe tener es la siguiente:

<?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 es una matriz, no es simplemente ser.

$_POST[$variable]

usted puede deshacerse de toda la locura $$ y simplemente hacer $_POST[$variable].

¿Estás seguro de que quieres decir $_POST[$$variable] en contraposición a $_POST[$variable]

El uso de variables variables directamente desde $ _SUPER globales es una mala idea y un riesgo de seguridad, sobre todo si alguno de su código es de código abierto. Se podría modificar la entrada a hurgar y averiguar el valor de cualquier variable que dejan pasar. Por ejemplo, podrían pasar '$ _ENV' que conseguir que un vertedero de las variables de entorno. De hecho, el registro de globales es una mala idea de todos modos.

Esto se hace referencia en la respuesta de @ bobince.

Y, con respecto a su pregunta, es por eso que su ejemplo no funciona con el registro de globales de PHP apagados. PHP es más estricta (por buenas razones) con registro de globales fuera, que yo sepa, es más difícil que hacer la variable truco variable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top