2011-05-30 23 views
8

Estoy tratando de reenviar datos de una página a otra sin utilizar cURL, ¿es esto posible?Post inicialización de PHP post

Por el momento he intentado

header('HTTP/1.1 307 Temporary Redirect'); 
header('Location: new-location.php'); 

Esto funciona muy bien, pero da un cuadro de pop-up estúpida, cualquier otro método?

He intentado usar curl pero no pasa nada, no estoy seguro si está habilitado en mi servidor!

+2

¿Reenviar datos? Las llamadas de encabezado que publicó simplemente hacen una redirección y no usan cURL. ¿Me estoy perdiendo de algo? – stefgosselin

+1

@stefgosselin: La palabra "sin", aparentemente. –

+0

Sí, sé que hacen una redirección simple, pero lleva los datos con ella. El único problema es que da una estúpida ventana emergente alertando al usuario – Lunar

Respuesta

11

Creo que sigue es la única manera posible para lograr que, en lugar de redirigir con el encabezado de ubicación, envía este código HTML: -

<!DOCTYPE html> 
<html> 
    <body onload="document.forms[0].submit()"> 
     <form action="new-location.php" method="post"> 
      <?php foreach($_POST as $key => $val): ?> 
       <input type="hidden" name="<?= htmlspecialchars($key, ENT_COMPAT, 'UTF-8') ?>" value="<?= htmlspecialchars($val, ENT_COMPAT, 'UTF-8') ?>"> 
      <?php endforeach; ?> 
     </form> 
    </body> 
</html> 
+0

Javascript no es muy robusto para los envíos de formularios, mejor usando scripts de servidor para esto. – stefgosselin

+3

@stefgosselin: entonces, ¿qué sugieres que escribas en PHP para reenviar los datos POST? –

+0

@MarcoDemaio - Ver mi respuesta a continuación. Aunque mi respuesta fue downvoted, tiendo a favorecer el procesamiento del servidor para redirecciones. – stefgosselin

-2

Tal vez, sólo tal vez usted puede tratar de esta manera:

header("Status: 200"); 
header("Location: new-location.php"); 
exit; 
+1

no, no envía datos. – Lunar

+2

Una llamada de encabezado no enviará datos, a menos que establezca la variable al final de su url, a la GET .. header ("Ubicación: new-location.php? Var1 = $ var1 & var2 = $ var2"); Feo, pero funcionaría. También puedes usar sesiones. – stefgosselin

+2

Entonces no ha respondido la pregunta. :) –

2

Si entiendo el problema correctamente y está trabajando en un servidor Apache con mod_rewrite activado, puede usar la reescritura de URL. También podemos establecer el método de solicitud como condición y volver a escribir la dirección URL original a la alternativa uno:

RewriteCond %{REQUEST_METHOD} ^POST 
RewriteRule ^index.php new-location.php [L] 
9

usted podría utilizar el siguiente para reenviar datos de envío a otra URL. Tenga en cuenta que la respuesta se captura en la variable $ data, con la que puede hacer lo que quiera.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.domain.tld/urltopostto.php"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 100); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST)); 
$data = curl_exec($ch); 
curl_close($ch); 
+3

sin curl ... – Lunar

+1

¿Podría simplemente poner 'return $ data;' y ajustar efectivamente la llamada POST? –

1

El uso de cURL o fopen() son sugerencias comunes, pero ninguno realmente "reenvía" al usuario a la otra página.

Para remitir realmente al usuario a otra página con datos $ _POST intactos, puede crear una página intermedia dinámicamente que contenga un formulario con los datos de la publicación y el código JS que envía el formulario inmediatamente (junto con un botón o enlace para enviar la forma si el usuario no tiene JS habilitado).

Reenvía al usuario a esa página intermedia y reenvía al usuario a la página de destino con los datos #_POST intactos. Si la página intermedia no tiene contenido visible, el usuario no sabrá que está allí.

La página de destino podría desvincular la página intermedia por lo que no hay posibilidad de volver a enviarla.