2011-09-03 23 views
6

Tengo una página html con un formulario de casilla de verificación. El formulario tiene su acción apuntando a un script PHP. El script PHP recopila las variables POST muy bien, pero obviamente se muestra una pantalla en blanco porque va al www.example/script.php una vez ejecutado.Redirigir PHP, Mantener POST

¿Cómo consigo que PHP vaya a otra URL para obtener más información de envío de formularios y mantener esos POST intactos?

header() y metaredirect parecen anular todo y no recopilar los datos ... ¿Cómo puedo recopilar esos datos en POST y luego ir automáticamente a otra página html para otro formulario con un script PHP adjunto como acción?

Gracias y lo siento si redacté esto de una manera confusa.

+1

Coloque los datos 'POST' en una variable de sesión. –

+1

Escribiré 'echo"

...
"', pero tengo curiosidad si hay una mejor manera de hacerlo. – JiminP

Respuesta

5

Puede almacenar las variables $_POST en $_SESSION y luego enviarlas cuando se complete la parte final del formulario, o puede hacer que la página intermedia almacene estos valores como entradas ocultas y enviarlas a la página final.

+0

Veo lo que está diciendo y puedo intentar hacer la sesión ... pero ¿cómo puedo acceder a otra página una vez que script.php se ejecuta? Simplemente muestra una página en blanco ... ¿cómo hago que se filme a otra página html para que el usuario pueda completar más formularios? ¡Gracias! – Redirect42

+0

¿Por qué no mostrar la siguiente parte del formulario allí mismo en esa página? Si realmente desea redirigir al usuario, emita un 'encabezado' ('Ubicación: www.misitio.com/paginaexterior.php'); ' –

+0

podría hacer que el botón' siguiente 'envíe el enlace a la siguiente página de formulario y de alguna manera tener todo de la información del formulario se coloca en los POST? ¿Eso requeriría que use el php en la misma página html o podría tenerlo en su propio archivo? – Redirect42

2

He encontrado que este código funciona casi todo el tiempo (excepto en algunos casos en los que desea reenviar utilizando datos de publicación personalizados y el cliente no es compatible con javascript).

Esto se hace al abusar del 307 Temporary Redirect que parece reenviar POST datos, o al crear un formulario de javascript que se autoenvía.

Esto es un truco, solo úselo si DEBE reenviar los datos POST.

<?php 

function redirectNowWithPost($url, array $post_array = NULL) 
{ 
    if(is_null($post_array)) { //we want to forward our $_POST fields 
     header("Location: $url", TRUE, 307); 
    } elseif(! $post_array) { //we don't have any fields to forward 
     header("Location: $url", TRUE); 
    } else { //we have some to forward let's fake a custom post w/ javascript 
     ?> 
<form action="<?php echo htmlspecialchars($url); ?>" method="post"> 
<script type="text/javascript"> 
//this is a hack so that the submit function doesn't get overridden by a field called "submit" 
document.forms[0].___submit___ = document.forms[0].submit; 
</script> 
<?php print createHiddenFields($post_array); ?> 
</form> 
<script type="text/javascript"> 
document.forms[0].___submit___(); 
</script> 
     <?php 
    } 
    exit(); 
} 

function createHiddenFields($value, $name = NULL) 
{ 
    $output = ""; 
    if(is_array($value)) { 
     foreach($value as $key => $value) { 
      $output .= createHiddenFields($value, is_null($name) ? $key : $name."[$key]"); 
     } 
    } else { 
     $output .= sprintf("<input type=\"hidden\" name=\"%s\" value=\"%s\" />", 
      htmlspecialchars(stripslashes($name)), 
      htmlspecialchars(stripslashes($value)) 
     ); 
    } 
    return $output; 
} 
Cuestiones relacionadas