Foros del Web » Programando para Internet » PHP »

Evitar RE insercion de Datos al presionar F5

Estas en el tema de Evitar RE insercion de Datos al presionar F5 en el foro de PHP en Foros del Web. Hola amigos, La verdad es que no sé como buscar este tipo de inquietud que tengo, pero me imagino que hay bastante de esto en ...
  #1 (permalink)  
Antiguo 05/09/2006, 14:24
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Evitar RE insercion de Datos al presionar F5

Hola amigos,
La verdad es que no sé como buscar este tipo de inquietud que tengo, pero me imagino que hay bastante de esto en este foro.

Miren, yo tengo un formulario e ingreso informacion en una BD, pero si se me ocurre presionar F5 una vez que ya envié la info se duplica la informacion en la BD (Ya puse eso de campos unicos, pero eso no es lo que quiero), quiero que cuando haya ingresado la info, presione F5 y no me ingrese ninguna informacion, como si recien hubiese ingresado a la pagina.. me imagino que quedan los datos ¿en la caché? como hago para borrarlos?

Estuve revisando el Autenticator de cluster y vi estas cabeceras:
Código PHP:
// No almacenar en el cache del navegador esta página.
  
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");               // Expira en fecha pasada
  
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");  // Siempre página modificada
  
header("Cache-Control: no-cache, must-revalidate");             // HTTP/1.1
  
header("Pragma: no-cache"); 
Pensé que me ayudaría poner estas cabeceras, pero no paso así... alguien puede darme una mano?
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #2 (permalink)  
Antiguo 05/09/2006, 14:28
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
Antes de ingresar algo en la BD asegurate de que no esta ingresado antes, yo lo hago asi.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 05/09/2006, 14:32
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Pero que pasa con los datos en la caché? siguen ahi, como hago para quitarlos de la caché... ¿si es que es ahi donde se almacenan? es que no estoy muy seguro de eso del almacenamiento de datos... bueno agradezco tu ayuda.. si alguien mas tiene otra opinion será, bien recibida tambien.

[edito]
Además, esa comprobación no gastaría innesesariamente recursos de procesador?, digo Innesesariamente si existiene algun código que me ilimine esa info.

saludos
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus

Última edición por Celcius; 05/09/2006 a las 14:39
  #4 (permalink)  
Antiguo 05/09/2006, 14:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El tema de las cabeceras "no caché" en este caso no sé que tanto resuelven el problema . .una cosa es el caché de las páginas y otras los datos que quedan en "POST" (que es el problema principal que tienes).

Para estos casos lo que se debe hacer (o se resuelve el problema perfectamente) es:

formulario -> envia datos a procesar.php -> se procesa en procesar.php y al terminar el proceso NO se muestra ningú mensaje de error o de exito en ese proceso sino que redireccionamos a otro script, así "perdemos" todo lo que en "POST" el navegador almacena por si es requerido (reenviado).

Sería algo así:

formulario.php
... envia datos a procesar a procesar.php

procesar.php
Código PHP:
<?
// procesos ...

if ($porceso=="OK"){
  
header("Location: exito.php");
  exit;
} else {
  
header ("Location: error.php");
  exit;
}
?>
No es necesario que uses un par de scripts para el "fomulario" y el "proceso PHP" .. podrían estar en un mismo script, pero entendiendo que son "dos" procesos por separados .. así que las redirecciones sería a si mismo pero igual deberían existir.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 05/09/2006, 15:00
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
y si le da al boton Atras?
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #6 (permalink)  
Antiguo 05/09/2006, 15:04
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 2 meses
Puntos: 5
Mmmm eso era lo que no tenia claro, yo pensaba que era lo mismo la caché con los datos en POST... bueno, creo que eso que mencionas es lo mas conveniente, pues la redireccion es una sola linea de codigo... muchas gracias Cluster y Zital...

Hasta otra molestia mas..
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #7 (permalink)  
Antiguo 05/09/2006, 15:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por ZiTAL Ver Mensaje
y si le da al boton Atras?
LLegan al formulario según mi propuesta.

Pero sólo al "formulario" . .no a procesa.php que ejecuta tal código (insercción de datos en BBDD, envia un e-mail .. etc) donde el navegador "solicita re-enviar" los datos ..

El caso es que NO se deja el proceso en "procesar.php" a la espera de que el usuario de turno se aburra de dar al "F5" para repetir N veces el proceso. Se "sale" del mismo redirecionado hacia otra página (ahí el navegador descarga esas variables que llegaba en POST).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 05/09/2006, 15:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
La ventaja de usar el header( "Location: " ); es que para el browser es transparente:

Pagina1.php -> proceso.php (header) -> resultado.php

En el historial del Browser, esta asi:
Pagina1.php -> resultado.php

Asi que si le das back se regresa a la pagina1 y no se "reenvian" los datos.
  #9 (permalink)  
Antiguo 05/09/2006, 15:10
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
aaah!!! muy bueno muchas gracias!!!
Lo que estoy aprendiendo!!!
;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:00.