2011-08-10 24 views
7

Decir que tengo una forma:

<form action="form.php?redirect=false" method="post"> 
    <input type="hidden" name="redirect" value="true" /> 
    <input type="submit" /> 
</form> 

En form.php:

var_dump($_GET['redirect']) // false 
var_dump($_POST['redirect']) // true 
var_dump($_REQUEST['redirect']) // true 

¿Cómo consigo el parámetro de cadena de consulta inyectada para anular el valor $_POST entonces $_REQUEST['redirect'] will = false?

+0

Parece that '$ _REQUEST ['redirect']' * is * true. –

+0

Creo que en realidad pretendía tener información falsa en su última línea allí. Él quiere usar la cadena de consulta, no los datos del formulario para ese valor. – mrtsherman

+0

Si quiere decir falso ... '$ _REQUEST ['redirigir'] = $ _GET ['redireccionar']' – Josh

Respuesta

11

Si desea cambiar la precedencia de $_GET sobre $_POST en la matriz $_REQUEST, cambie la directiva request_order en php.ini.

El valor predeterminado es:

request_order = "GP" 

P significa POST y G representa GET, y los valores posteriores tendrán precedencia, por lo que en esta configuración, un valor en la cadena de consulta anulará un valor pasado por POST en la matriz $_REQUEST. Si usted quiere el poste para anular los valores GET, simplemente cambiarlos alrededor de este modo:

request_order = "PG" 

Tendrá que reiniciar el servidor web/php para que surtan efecto.

(Editado para utilizar el más apropiado request_order como se sugiere Brad, en lugar de variables_order)

+2

Considere usar 'request_order' en su lugar. Es más específico al problema. – Brad

+0

@Brad Buena llamada: actualizaré mi respuesta con un ejemplo de eso. ¡Gracias! –

+0

¡Funciona muy bien, gracias! – Maverick

0
$_REQUEST['redirect'] = $_POST['redirect']; 

o

$_REQUEST['redirect'] = $_GET['redirect']; 

dependiendo de lo que desee

2

Véase el parámetro request order de PHP. Aquí puede establecer si la matriz completa la publicación, obtención, cookie o cualquier combinación de la misma.

4

Consulte la directiva request_order en PHP.ini.

Realmente, debes usar explícitamente el superglobal que desees específicamente. De lo contrario, no puede confiar en el comportamiento constante de sistema a sistema, y ​​entonces sus variables pueden sobrescribirse accidentalmente.

+0

Normalmente lo haría, pero esto es para un procesador de formulario de cliente existente y ya están procesando fuera de '$ _REQUEST ['redirect']'. +1, ¡gracias! – Maverick

0

si nos referimos false en esa última línea allí, y quieren a $_REQUEST todavía tienen datos tanto de POST y GET de datos, y no quieren meterse con la configuración, utilice esto:

$_REQUEST = array_merge($_POST, $_GET);