2009-03-24 36 views
7

La búsqueda no encontró una pregunta similar, entonces: ¿Cómo pueden los datos POST usados ​​por PHP para generar una página pasar de esa página a otra página generada por PHP? Tengo:Pasar datos POST de una página web a otra con PHP

  • Un formulario en la página 1 que envía datos a un script PHP mediante POST.
  • Page 2 es generado por ese script y muestra uno o más gráficos generados por un programa externo usando las entradas de la página 1 y la base de datos back-end. Esta página también tiene otro formulario con opciones para volver a generar los gráficos con nuevas opciones (por ejemplo, acercar o truncar los gráficos).
  • Si se solicita, la página 3 se generará con el mismo script PHP usando datos POST pegados de las páginas 1 y 2. Excepto por los gráficos, su apariencia básica será la misma que en la página 2.
  • Páginas 4, 5 , 6 ... debe generarse de la misma manera que en la página 3.

Entonces, ¿cómo puedo poner los datos POST utilizados para generar la página 2 en los datos POST para la página 3?

EDITAR: Debido a la política de la organización, las cookies no se pueden utilizar (por lo que las sesiones no son factibles). GET no es deseable porque no queremos que la entrada se muestre en la URL.

Respuesta

13

Recuerdo haber luchado con este problema hace mucho tiempo, preguntándome por qué simplemente no podía redireccionar con un encabezado POST modificado. La razón es que una redirección se considera realmente un GET.

Independientemente de eso, debe almacenar las variables de publicación en campos ocultos.

<input type="hidden" name="someValueFromPageOne" value="blah"> 

recomendaría prefijar todos sus nombres de los campos de cada formulario de modo que es fácil distinguirlos durante su fase de consolidación al final.

<input type="hidden" name="pageOne_firstName" value="Joe"> 
<input type="hidden" name="pageTwo_streetNumber" value="22"> 

Edit: Como otros han mencionado, la persistencia de datos mediante sesiones es una posibilidad, pero esto se convierte en una cuestión muy compleja de mantener el estado temporal que cosas como actualizaciones de página o usando el botón de retroceso puede hacer difícil de mantener. A menos que se enfrente a un caso extremo, es mucho más fácil conservar los datos usando campos, ya que sobreviven las actualizaciones y otros comportamientos del navegador con mayor facilidad.

+0

Gracias! Siento que debería haber pensado en esto, pero nunca había usado campos ocultos, y me estaba obsesionando con una solución en PHP, en lugar de usar HTML. – PTBNL

+0

Créanme, lo sé, he estado allí más de una vez. ¡No olvide validar todas sus entradas en los formularios Y cuando combine los datos para evitar ataques de inyección! – Soviut

2

Usar GET.

En mi opinión, las solicitudes POST deberían modificar algo (por ejemplo, agregar registros a una base de datos). Las solicitudes GET deben recuperar algo (por ejemplo, resultados de una consulta de búsqueda).

Si desea utilizar POST de todos modos, consulte las sesiones de PHP.

+2

Sin embargo, existe un límite de tamaño obvio (y bajo) en los datos GET. – cletus

+0

@cletus, lo sé, pero el OP no dio ninguna indicación sobre la cantidad de datos que se deben enviar entre las solicitudes de página. – strager

2

Las sesiones son un problema, y ​​si las necesitabas ya las habrías implementado.

Como dijo @Soviut anteriormente, los campos de entrada ocultos son probablemente el camino a seguir para esto.

+0

De acuerdo, las sesiones son viables, pero es molesto mantener el estado correcto para la página correcta. Por no hablar de los recursos muy necesitados en el lado del servidor con tantos datos flotando. – Soviut

0

Si decides morder la ruta de la sesión con la opción dbms, he tenido suerte diseñando una clase de estado para contener esto, y serializando un objeto usando JSON en un solo campo grande en el registro de la sesión.

2

Wez Furlong escribió recientemente la versión PHP5 en su blog (HTTP post titulado de php, sin cURL):

function do_post_request($url, $data, $optional_headers = null) 
{ 
$params = array('http' => array(
'method' => 'post', 
'content' => $data 
)); 
if ($optional_headers!== null) { 
$params['http']['header'] = $optional_headers; 
} 
$ctx = stream_context_create($params); 
$fp = @fopen($url, 'rb', false, $ctx); 
if (!$fp) { 
throw new Exception("Problem with $url, $php_errormsg"); 
} 
$response = @stream_get_contents($fp); 
if ($response === false) { 
throw new Exception("Problem reading data from $url, $php_errormsg"); 
} 
return $response; 
} 

En el puesto que menciona que siempre tiene que buscar la manera de hacer esto. ¡Es divertido porque es uno de los desarrolladores principales!

+0

Suponiendo que te refieres a esto: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl parece prometedor, gracias (¡aunque 2006 no es "recientemente" para mí! :-p) Tal vez es mi falta de experiencia en PHP, pero no conseguí que funcionara, y no veo cómo enviaría datos POST de una página a otra. – PTBNL

+0

¿Qué tipo de información se espera que $ datos sean? – dangel

Cuestiones relacionadas