Foros del Web » Programando para Internet » PHP »

Evitar doble envio de un Formulario

Estas en el tema de Evitar doble envio de un Formulario en el foro de PHP en Foros del Web. Que tal gente, estoy con el problemita de enviar un formulario por POST y que el usuario vuelva atras y haga un refresh de la ...
  #1 (permalink)  
Antiguo 19/05/2008, 22:54
 
Fecha de Ingreso: abril-2007
Mensajes: 77
Antigüedad: 17 años
Puntos: 0
Evitar doble envio de un Formulario

Que tal gente, estoy con el problemita de enviar un formulario por POST y que el usuario vuelva atras y haga un refresh de la pagina de envio y este formulario vuelva a ser subido.

Una de mis soluciones fue darle una cookie session y esta es quitada al enviar el formulario entonces compruebo que esta session este habilitada para enviar el formulario sino no lo envia. Pero me trae algunos problemas, como el usuario vuelve a la pagina donde se le asigna la session para enviar el formulario y este vuelve hacia atras y pasa lo mismo

Alguna otra forma de hacerlo mas efectivo ?? tambien pensaba en los bots que pueden hacer esto y duplicar cosas en mi sitio.

Saludos
  #2 (permalink)  
Antiguo 20/05/2008, 01:04
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 16 años
Puntos: 5
Respuesta: Evitar doble envio de un Formulario

no me quedo muy claro, si qiueres que se envie 2 veces o no quieres que se envie 2 veces...


Bueno, supongo que no queires que se envie 2 veces lo cual seria mas obvio, segun mi punto de vista, en ese caso seria bueno qe nos dijieras que haces con esos datos, si los almacenas en una base de datos, te doy una idea:

Si por ejemplo estas llenando una tabla, debes tener una clave primaria, si esa clave primaria es tan poco descriptiva como la tipica "ID", te convendria hacer una consulta donde requieras toda la existencia de los datos, asi te preocuparias de qe no hayan datos duplicados... me explico:

Si tienes campos como color, olor y sabor, ademas de la ID, entonces una vez hecho el submit. haces algo asi

Código PHP:
$color=$_POST['color'];
$olor=$_POST['olor'];
$sabor $_POST['sabor'];
$sql ="select * from caracteristicas where color='$color' AND olor='$olor' AND sabor='$sabor'";
$result mysql_query($sql);

if(
mysql_result($result)==0){
  
//HAGO EL INGRESO
}else{
  echo 
"No puedes reenviar informacion, esta ya existe";

Bueno esa seria una idea.
Si la clave primaria es bien descriptiva asi como por ejemplo, tabla persona, y clave rut. Solo chequeas que el rut no se encuentre y evitar que se reenvie.

Bueno espero haber entendido ty regunta y haberte respondido algo que disminuya el nivel de incertidumbre de tu estado mental...

saludos
  #3 (permalink)  
Antiguo 20/05/2008, 02:07
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Evitar doble envio de un Formulario

se me ocurre, que no se si sera la mejor idea que te den, pero podrias coger la ip del tipo y hacer que durante X tiempo (el que decidas), podrias hacerle una prohibicion de repetirlo con algun if o algo
  #4 (permalink)  
Antiguo 21/06/2008, 14:59
 
Fecha de Ingreso: diciembre-2007
Mensajes: 110
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Evitar doble envio de un Formulario

Cita:
Iniciado por bLEx Ver Mensaje
no me quedo muy claro, si qiueres que se envie 2 veces o no quieres que se envie 2 veces...


Bueno, supongo que no queires que se envie 2 veces lo cual seria mas obvio, segun mi punto de vista, en ese caso seria bueno qe nos dijieras que haces con esos datos, si los almacenas en una base de datos, te doy una idea:

Si por ejemplo estas llenando una tabla, debes tener una clave primaria, si esa clave primaria es tan poco descriptiva como la tipica "ID", te convendria hacer una consulta donde requieras toda la existencia de los datos, asi te preocuparias de qe no hayan datos duplicados... me explico:

Si tienes campos como color, olor y sabor, ademas de la ID, entonces una vez hecho el submit. haces algo asi

Código PHP:
$color=$_POST['color'];
$olor=$_POST['olor'];
$sabor $_POST['sabor'];
$sql ="select * from caracteristicas where color='$color' AND olor='$olor' AND sabor='$sabor'";
$result mysql_query($sql);

if(
mysql_result($result)==0){
  
//HAGO EL INGRESO
}else{
  echo 
"No puedes reenviar informacion, esta ya existe";

Bueno esa seria una idea.
Si la clave primaria es bien descriptiva asi como por ejemplo, tabla persona, y clave rut. Solo chequeas que el rut no se encuentre y evitar que se reenvie.

Bueno espero haber entendido ty regunta y haberte respondido algo que disminuya el nivel de incertidumbre de tu estado mental...

saludos
Yo estaba utilzando algo similar. Pero este scrpit tiene algunas limitaciones. No funcionaria la compracion si los datos NO son almacendos el la DB exatamente igual a como se posteron, que sufran algun formateo por caracteres especiales, por ejemplo.

Y siempre existe la posibiladad de que exista alguna entrada igual.

Voy a hacer el filtro temporario por IP.


Saludos gente
  #5 (permalink)  
Antiguo 21/06/2008, 15:54
Avatar de bLEx  
Fecha de Ingreso: mayo-2008
Ubicación: Villa Alemana, Chile
Mensajes: 181
Antigüedad: 16 años
Puntos: 5
Respuesta: Evitar doble envio de un Formulario

lo otro seria que luego de enviar el formulario hagas una redireccion de manera que te cargue d nuevo la pagina.
  #6 (permalink)  
Antiguo 22/06/2008, 12:21
 
Fecha de Ingreso: diciembre-2007
Mensajes: 110
Antigüedad: 16 años, 4 meses
Puntos: 1
Respuesta: Evitar doble envio de un Formulario

Cita:
Iniciado por bLEx Ver Mensaje
lo otro seria que luego de enviar el formulario hagas una redireccion de manera que te cargue d nuevo la pagina.
Si, es también otra manera. Con un haeder de php desde la pagina que contiene el script que procesa el insert en la DB... Pero yo muestro el cartel de "ingresado correctamente" desde esta pagina...por lo que el header me tiraría error..tendría que mandar el "ingreso OK" en una variable a una tercer pagina.

o la redireccion se puede hacer con un meta-refresh..pero habría que ponerlo en 3 o 4 segundos..y esperar a que nadie aprete F5 en ese lapso.
Poniendo 1 segundo me ocurría que NO redireccionada...no se por que.


Saludos!
  #7 (permalink)  
Antiguo 22/06/2008, 21:51
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: Evitar doble envio de un Formulario

Y si despues q se envia e formulario eliminas todos los Post o Get que pasaste?? ya probaste con eso?

salu2
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
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 00:34.