Foros del Web » Programando para Internet » PHP »

history.back y formularios :@

Estas en el tema de history.back y formularios :@ en el foro de PHP en Foros del Web. A ver, expongo la situación: -Página1 En esta página tenemos un formulario con diferentes opciones (selects, radio buttons, etc) Todos esos campos se envían a ...
  #1 (permalink)  
Antiguo 26/10/2004, 10:52
 
Fecha de Ingreso: octubre-2004
Mensajes: 21
Antigüedad: 19 años, 5 meses
Puntos: 1
history.back y formularios :@

A ver, expongo la situación:

-Página1
En esta página tenemos un formulario con diferentes opciones (selects, radio buttons, etc) Todos esos campos se envían a página2 (cuando se pulsa el botón de enviar, claro xD)

-Página2
Te devuelve un listado de casas (de eso trata la web) dependiendo de los valores de entrada del formulario anterior, con un enlace en cada casa que te lleva a la página3 (del tipo pagina3.php?id=3, por ejemplo).

-Página3
Según la id carga los datos de esa casa de la base de datos.


Hasta aquí perfecto, el problema está en que en la página3 tengo un enlace de javascript para volver a la página2 (javascript:history.back()) peeeeeeero, cuando pincho en él me sale el dichoso mensajito:

Advertencia: La página ha caducado La página solicitada se creó utilizando la información que envió en un formulario. Esta página no está ya disponible. Como medida de precaución, Internet Explorer no volverá a enviarle la información.

Para volver a enviar la información y ver esta página Web haga clic en el botón Actualizar


Lo que yo querría es saber si hay alguna manera de que no haga falta darle a actualizar para volver a ver la página2...

Por cierto, sólo me pasa en el puto explorer



PD: Ah, es mi primer mensaje, hola a todos
PD2: Contestad!! xDD
  #2 (permalink)  
Antiguo 26/10/2004, 11:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Hasta aquí perfecto, el problema está en que en la página3 tengo un enlace de javascript para volver a la página2 (javascript:history.back()) peeeeeeero, cuando pincho en él me sale el dichoso mensajito:

Advertencia: La página ha caducado La página solicitada se creó utilizando la información que envió en un formulario. Esta página no está ya disponible. Como medida de precaución, Internet Explorer no volverá a enviarle la información.

Para volver a enviar la información y ver esta página Web haga clic en el botón Actualizar
Tienes dos soluciones:
1) Usar método GET en tu formularios en lugar de POST.

2) No se vé el código que usas .. pero al parecer haces un proceso PHP y seguidamente muestras algún mensajito o datos que se han generado en ese mismo script. La solución es redireccionar automáticamente al terminar tu proceso hacia otro script que presente esos datos finales/mensajito o lo que corresponda. Si necesitas "control" sobre lo que has de presentar usa variables propagadas en el URL (en ese link) o en sesiones/cookies.

El redireccionamiento sería del tipo:

Código PHP:
// proceso PHP .. sin nada de HTML como salida ni nada por encima de este ...
header ("Location: pagina.tal");
exit; 
Con eso evitas completamente ese problema. En los "navegadores" que no te dá ese aviso .. revisa tus BD y mira si tienes registros duplicados .. si recargas la página esa que hace tu proceso y muestra el mensaje va a ocurrir eso mismo (lo mismo que si andas hacia atras por el historial del navegador .. te avise o no que serán reenviados tus datos).

Un saludo,
  #3 (permalink)  
Antiguo 26/10/2004, 13:54
 
Fecha de Ingreso: octubre-2004
Mensajes: 21
Antigüedad: 19 años, 5 meses
Puntos: 1
Cita:
Iniciado por Cluster
1) Usar método GET en tu formularios en lugar de POST.
Opción nada elegante

Cita:
Iniciado por Cluster
2) [...] La solución es redireccionar automáticamente al terminar tu proceso hacia otro script que presente esos datos finales/mensajito o lo que corresponda. Si necesitas "control" sobre lo que has de presentar usa variables propagadas en el URL (en ese link) o en sesiones/cookies.
¿No es la misma solución que la 1 pero dando un paso más (redundante)?

Cita:
Iniciado por Cluster
Con eso evitas completamente ese problema. En los "navegadores" que no te dá ese aviso .. revisa tus BD y mira si tienes registros duplicados .. si recargas la página esa que hace tu proceso y muestra el mensaje va a ocurrir eso mismo (lo mismo que si andas hacia atras por el historial del navegador .. te avise o no que serán reenviados tus datos).

Un saludo,
En los navegadores que no da ese aviso es porque coge los datos de la caché, como debería ser...

En fin, que lo de pasar por url o por sesión ya lo había pensado. Gracias de toas formas

¿Nadie más da alguna idea?
  #4 (permalink)  
Antiguo 26/10/2004, 14:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No es redundante .. si lo haces así evitas esos problemas. De hecho haz una prueba .. sigue tu sistema, crea un registro en una BD y da un OK como mensaje en el mismo flujo del código .. recarga la página y veras que tu código se ejecuta nuevamente .. por ende se crea un registro más duplicado en tu BD .. ese es uno de los principales efectos que se resuelve como te mencioné: redireccionando automáticamete a si mismo o a otro sitio. Esto vendría a ser "limpiar" las cabeceras HTTP

De hecho podrías poner el código que usas para ver si realmente haces lo que mencioné o no ...

Si quieres controlar el caché de tus páginas .. vista:
www.php.net/header

ahí veras cabeceras HTTP para control del caché, pero ten presente lo que anteriormente te he comentado y haz tus pruebas al respecto.

Un saludo,
  #5 (permalink)  
Antiguo 26/10/2004, 14:24
 
Fecha de Ingreso: octubre-2004
Mensajes: 21
Antigüedad: 19 años, 5 meses
Puntos: 1
Hmmmmm, no hago ningún insert en la BD en esas partes. Se mandan las variable vía POST a un script de búsqueda de casas, el cual tiene como salida un listado de las encontradas en base a los parámetros dados.

Me parece que tendré que empollarme lo de las cabeceras, bueno, ya era hora también xD

Vengaaaaaaaaaaaaa
  #6 (permalink)  
Antiguo 27/10/2004, 04:52
 
Fecha de Ingreso: octubre-2004
Mensajes: 21
Antigüedad: 19 años, 5 meses
Puntos: 1
Bueno, por si alguno lee esto que ha llegado desde google, aqui dejo la solución xD

He tenido que poner lo siguiente antes de cualquier session_start (no dije que utilizaba sesiones :S):

header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: post-check=0, pre-check=0",false);
session_cache_limiter("must-revalidate");

Luego el session_start() de rigor y palante.
Funciona perfectamente.

Un saludo
  #7 (permalink)  
Antiguo 27/10/2004, 05:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te faltó ese "detallazo" .. que usas sesiones ..

Por qué dentro del uso de sesiones, PHP define un "control del caché" própio que puedes ajustar con la función:

session_cache_limiter()
www.php.net/session_cache_limiter

Y así no usar esos "header()" dejando el código algo más "limpio" tal vez.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:29.