Foros del Web » Programando para Internet » PHP »

Evitar el refresco de pagina

Estas en el tema de Evitar el refresco de pagina en el foro de PHP en Foros del Web. Hola! Bueno pues resulta que despues de hacer todo el gestor de contenidos de mi web yo no habia pensado en el refresco de pagina, ...
  #1 (permalink)  
Antiguo 15/11/2006, 15:16
Avatar de ferrins  
Fecha de Ingreso: mayo-2005
Mensajes: 64
Antigüedad: 19 años, 6 meses
Puntos: 1
Evitar el refresco de pagina

Hola!

Bueno pues resulta que despues de hacer todo el gestor de contenidos de mi web yo no habia pensado en el refresco de pagina, o sea que ahora lo tengo negro, pues todo el codigo lo hice sin pensar en ello. Así que ahora he estado intentando mediante sesiones que no me duplique el contenido enviado, y aunque mas o menos funciona el problema es que voy a tener que hacer malabarismos para acoplar a todo el codigo del gestor, al rollo este de las sessiones para evitar el refresco.
Así que, que os parece? alguna idea mágica? o lo tengo mal?

Gracias!
  #2 (permalink)  
Antiguo 15/11/2006, 15:52
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 21 años
Puntos: 4
Pues talvez puedan servirte algunas rutinas JavaScrip (y también me parece que esta pregunta debería haberse hecho en ese foro), deberías checar las FAQ'S de ese foro y encuentres algunas cosas que te sean de utilidad, por lo pronto checa este enlace que te dice como evitar que se pulse la tecla F5:
http://www.forosdelweb.com/showthrea...287#post273287
y este otro enlace que te dice como evitar que se de click derecho sobre la pantalla:
http://www.forosdelweb.com/showthrea...664#post259664
Hojala sea lo que necesitabas o por lo menos te de una idea para cumplir tu comentido. Suerte
  #3 (permalink)  
Antiguo 15/11/2006, 20:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Creo que la solución no está del lado del "cliente" .. es decir, de hacer que en cierto navegador no fucione el botón "F5" o el menú contextual.

El problema que tienes es más de "base" .. No sé por qué dices que usas sesiones para resolver el problema puntual .. pero en general el problema se resuelve "ordenando" tu código y viendo bien como va el flujo de datos entre cliente-servidor.

Podrías indicar algo del código que usas .. pero en general "imagino" que tienes situaciones tipo:

Formulario HTML -> (metodo POST/GET) envia datos a script PHP (o bien formulario HTML y proceso PHP están en el mismo script), y .. ahí al terminar tu proceso (tal de de ingreso de datos a una BBDD o similar) .. presentas tu mensaje de "error" o de "exito" tras finalizar el proceso en ese mismo script y proceso.

Bien . .este tipo de situaciones se resuelve redireccionado al terminar el proceso de insercción de datos a tus BBDD o similar, aunque sea a si mismo (script) .. lo importante es ver que al redireccionar tu navegador se va a deshacer de toda "variable" que pueda haber almacenado justamente con el fín de que si recargas la página se vuelva a enviar esa información.


Código PHP:
<?
// proceso PHP ...
if (proceso){
   
header ("Location: mensajes.php?msg=ok");
   exit;
} else {
    
header ("Location: mensajes.php?msg=falla");
   exit;
}
?>
El script PHP de proceso o secuencia de proceso dentro de otro script que haga várias taréas ha de ser aislado, sin HTML que se genere en ese punto, nuestro objetivo no es "componer una página HTML" en ese caso sino la de "redireccionar" (con cabeceras HTTP) hacia la página (script PHP) que nos gestione el mostrar el mensaje de error adecuado (para eso me ayudo de una pequeña variable de control "msg" que propago en el URL y así procesaré el valor que llegue en el script que uso para mostrar mensajes).

En este caso o con esta "técnica" si tu recargas la página, recargas la que muestra el "mensaje" no la que hace el proceso. De hecho al redireccionar vía cabeceras HTTP y no haber generado "salida" en tu script o parte del "proceso" nunca llegarás ahí ni con el botón "atras" de tu navegador ni con el historial ni similar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 16/11/2006, 07:07
Avatar de ferrins  
Fecha de Ingreso: mayo-2005
Mensajes: 64
Antigüedad: 19 años, 6 meses
Puntos: 1
Hola otra vez!

Bueno gracias por las respuestas y sobretodo gracias a Cluster por su excelente explicación. La verdad es que tus suposiciones sobre como podia ser mi codigo son exactas y de hecho tu consejo sobre redirigir el resultado a otra pagina ya lo estaba aplicando y es bien cierto que funciona. Aunque debo decir que como tengo todo el codigo php entre los tags de html no me permite redirigir con header asi que lo hago un poco mas rusticamente:

echo "<script>document.location.href='mensajes.php?msg= ok'</script>";

Y si amigos, funciona perfectamente.

Como muy bien has dicho esto soluciona los problemas de refresh, pero el problema esta en ir para atras con el navegador explorer. Y es que una vez insertamos algo, y entonces redirigimos a otra pagina para mostrar el ok si clicamos atras explorer nos dice que la pagina ha expirado, perfecto! pero si le damos a F5 en ese mismo momento nos salta un cuadro donde nos dice que no se puede refrescar sin reenviar la información y entonces si le decimos que adelante lo que va a hacer es insertar otra vez lo que ya habiamos metido.

Esto no es extremadamente grave, podemos vivir con eso ciertamente, tampoco los usuarios se dedican a testear estas cosas, verdad? Pero bueno molesta un poco que así sea.

(Por cierto Opera y Mozilla no tienen este problema, no nos permiten reenviar la información de ningun modo)

Pues nada gracias por leerme y sobretodo por ayudarme!
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 21:53.