2012-08-31 15 views
5

Duplicar posible:
PHP header() redirect with POST variablesPHP encabezado de ubicación

Estoy escribiendo un guión donde se presenta los datos de forma a otra secuencia de comandos. Quiero que el segundo script realice alguna comprobación de errores en los datos $_POST enviados, y si todo está bien, procesa los datos. Si los datos tienen errores, estoy usando header('Location: http://www.example.com/script.php'); para devolver al visitante a la página del formulario.

El problema que tengo es que quiero que el formulario sea adhesivo: los campos con datos correctos mantienen los valores que el usuario pone en ellos. Obviamente, para obtener esos valores, necesito acceder a la matriz $_POST. Sin embargo, esto parece destruirse cuando la llamada header() reenvía al visitante al formulario.

¿Hay alguna forma de usar el encabezado de Ubicación para redirigir al visitante a otra página, mientras se conservan los datos $_POST?

Ahora estoy usando esto: header('Location: http://www.example.com/add.php?id='.$id.'&name='.$name.'&code='.$code.'&desc='.$description.''); y accediendo como $_GET.

Para el mismo puedo usar y tipo de POST en header('location: xxx') ??

+0

http://www.php.net/manual/en/book.session.php – DaveRandom

+0

Puede [configurar manualmente '$ _POST'] (http://stackoverflow.com/questions/3418044/setting-post- variable-without-using-form) de nuevo antes de redirigir. – Havelock

+0

¿por qué no configura la variable de sesión para almacenar los datos de la publicación? ? – kushalbhaktajoshi

Respuesta

2

Se puede almacenar los datos $_POST en una sesión:

session_start(); 
$_SESSION['submitted_data'] = $_POST; 

Y luego cargar los valores en las entradas cargándolos de la variable $_SESSION['submitted_data'], sólo recuerda tener session_start() en la parte superior de la página de error demasiado .

15

la mejor manera de lograr esta 'forma adhesiva' es utilizar una sesión.

<?php 
session_start(); 
$_SESSION = $_POST; 
//do error checking here 
//if all is valid 
session_write_close(); 
header('Location: *where you want your form to go*'); 
die; 
?> 

y en la página de redirección puede utilizarlos de esta manera:

<?php 
session_start(); 
//use $_SESSION like you would the post data 
?> 
0

Uso sessions para eso. En la página del formulario:

<?php 
if (!empty($_COOKIE[session_name()])) { 
    // we only start session if there is a session running 
    session_id() || session_start(); 
} 

if (empty($_POST) && !empty($_SESSION['POST'])) { 
    // make sure you're not overwriting 
    $_POST = $_SESSION['POST']; 
} 
// and so on just like you have $_POST filled 

en un script que recibe $ _POST datos:

<?php 
// after you're done with checking and stuff 
session_id() || session_start(); 
$_SESSION['POST'] = $_POST; 
header('Location: /script.php'); 

Ambas secuencias de comandos debe estar en el dominio ahorrar para sesiones para trabajar. Si está utilizando un URI relativo en el encabezado Location, entonces todo debería funcionar bien.

Cuestiones relacionadas