2008-11-22 45 views
6

Soy nuevo en PHP y estoy tratando de hacer algo que puede ser una mala práctica y puede ser imposible. Básicamente estoy pirateando algo para probar mi conocimiento y ver lo que PHP puede hacer.PHP abrir otra página web con datos POST

Tengo una página web con un formulario que recopila datos. Esto se envía a un script PHP que procesa un montón de cosas, pero en realidad no muestra nada importante. Lo que quiero es que una vez que el procesamiento haya finalizado, la secuencia de comandos le indique al navegador que abra otra página, donde se muestran los resultados.

Sé que puedo usar header ('Ubicación: page.php'); pero no puedo encontrar la manera de proporcionar datos POST con esto. ¿Cómo puedo hacer eso? Alternativamente, ¿hay alguna otra manera de decirle al navegador que abra otra página?

EDITAR: Lo que estoy tomando de las respuestas es que es posible para hacer esto utilizando varios hacks, pero sería mejor tener el procesamiento y el código de visualización en un solo archivo. Estoy feliz con eso; esto fue un experimento más que nada.

Respuesta

4

¿Es realmente necesario llamar a otra página después de que el procesamiento se realiza? Probablemente haría lo siguiente:

<form method="post" action="display.php"> 
... 
</form> 

display.php:

if ($_POST) { 
    require_once(process.php); 
    process($_POST); 
    display_results; 
} 

con process.php que contiene el código necesario para el procesamiento de la solicitud posterior.

Alternativamente, podría usar algo como la biblioteca cURL para pasar los resultados del procesamiento a una página especificada por usted mismo. No sé si eso es lo que realmente buscas.

-3

Espero que tenga su pregunta correcta. Usted puede tratar esto:

  1. Ajuste su forma a tener este aspecto:

form method = "post" action = "process_data.php"

2. A continuación, crea el archivo process_data.php, que sorprendentemente procesa los datos.
Y en este archivo se utiliza cabecera:
Por ejemplo:

$ cabeza = sprintf ("?? Page.php datos1 =% d datos2 =% d", $ datos1, datos2 $);
encabezado ($ cabeza);

Espero haber podido ayudar.

+0

hm ... si me votas, tal vez podrías darme una razón?!?! – Nick

+0

No te recomendé, pero el ejemplo de código que has dado no funcionaría –

+0

encabezado ($ head) debería ser encabezado ('Ubicación:'. $ Cabeza); Este ejemplo parece una mala práctica ... – alex

16

Puede almacenar esos datos en la sesión, p. en el primer archivo que maneja el puesto

session_start(); 
$_SESSION['formdata'] = $_POST; //or whatever 

entonces se puede leer en la página siguiente como

session_start(); 
print_r($_SESSION['formdata']); 

o puede pasar a través de GET: (pero de acuerdo con los comentarios esto es una mala idea)

header('Location: page.php?' . http_build_query($_POST)); 

Si que asegúrese de hacer el procesamiento adicional/validación en page.php como un usuario malintencionado podría cambiar las variables. También puede que no necesite todo el mensaje transmitido a la página siguiente

Editar

debo aclarar que yo creo que la segunda opción es posiblemente peor, ya que está limitado por el tamaño de los datos que puede enviar a través de get y posiblemente sea menos seguro ya que los usuarios pueden manipular los datos con mayor claridad.

+0

Te recomiendo la sugerencia de la sesión y te invité a votar por la sugerencia, así que no hay que votar por ti. – pilsetnieks

+0

@Nouveau: estoy de acuerdo, solo quería mostrar que era una opción más apátrida, pero debería haber dejado en claro que era menos preferible –

+0

Estoy de acuerdo con Nouveau. La segunda sugerencia realmente es una mala práctica –

0

No hay forma de redirigir el navegador del usuario a una página arbitraria y enviar una solicitud POST. Eso supondría un riesgo para la seguridad, ya que cualquier vínculo podría hacer que envíe un formulario a un sitio arbitrario sin que usted tenga ninguna pista sobre lo que iba a suceder.

En pocas palabras, no es posible

0

Aparentemente, este normalmente se realiza como un proceso de dos pasos:

  1. En form.php, publicar los datos de secuencia de comandos process.php
  2. El proceso El script .php procesa los datos pero nunca muestra nada, siempre llama al encabezado ("Ubicación: asdasd") para redirigir a una página success.php o failure.php (si corresponde)
2

Puede usar Jav ascript como una solución temporal sucia:

<form id="redirect_form" method="post" action="http://someserver.com/somepage.php"> 
    <input type="hidden" name="field_1" value="<?php echo htmlentities($value_1); ?>"> 
    <input type="hidden" name="field_2" value="<?php echo htmlentities($value_2); ?>"> 
    <input type="hidden" name="field_3" value="<?php echo htmlentities($value_3); ?>"> 
</form> 
<script type="text/javascript"> 
    document.getElementById('redirect_form').submit(); 
</script> 

(la secuencia de comandos debe estar por debajo del formulario)

0

Hágalo todo en una secuencia de comandos y solo muestre HTML diferente para los resultados.

<?php if($doingForm) { ?> 

html for form here 

<?php } else { ?> 

html for results 

<? } ?> 
+0

Al presionar Actualizar aquí después de '$ doinForm = true' se volverá a enviar el formulario. Esto podría causar un comportamiento no deseado. Ver http://adamv.com/dev/articles/getafterpost – alex

0

Este problema me ha molestado por algún tiempo. Mi CMS personalizado realiza un procesamiento, carga y manipulación bastante complejos, por lo que a veces muestra errores bastante largos y mensajes de información, que no son adecuados para convertir a datos GET, y siempre he querido evitar el problema de recarga en los datos INSERT, pero aún no se ha encontrado una solución adecuada.

Creo que la forma correcta de hacerlo es crear matrices de mensajes para cada estado posible; cada mensaje o error que desee mostrar, y luego solo debe enviar números de error/mensaje que son mucho más fáciles para manejar que largas cadenas de datos, pero es algo de lo que siempre he rehuido personalmente ya que me resulta un poco tedioso y engorroso. Francamente, esto es probablemente solo pereza de mi parte.

Me gusta bastante la solución de almacenamiento variable SESSION, pero esto plantea la pregunta de cómo se asegura que los datos de SESSION se destruyan adecuadamente? Siempre y cuando se asegure de que solo está enviando información (mensajes/errores) y no datos que deberían/​​podrían almacenarse (y por lo tanto podrían ser sensibles), esto debería ser un problema evitable.

Cuestiones relacionadas