Foros del Web » Programando para Internet » PHP »

Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Estas en el tema de Que se puede agregar a un formulario para que no se envíe muchas veces seguidas? en el foro de PHP en Foros del Web. Hola amigos, Tengo un formulario en php que guarda unos datos en una tabla mysql. La duda que tengo es que me gustaría saber como ...
  #1 (permalink)  
Antiguo 13/01/2007, 07:25
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 20 años, 6 meses
Puntos: 0
Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Hola amigos,

Tengo un formulario en php que guarda unos datos en una tabla mysql. La duda que tengo es que me gustaría saber como evitar que el visitante rellenara el formulario muy rápido (1 vez por segundo).

Es decir, me gustaría saber como limitarlo y que si lo hace muy rápido le salga un mensaje de "no puedes enviar los datos de nuevo hasta dentro de 3 segundos", o similar.

Muchas gracias!
  #2 (permalink)  
Antiguo 13/01/2007, 09:09
 
Fecha de Ingreso: septiembre-2005
Mensajes: 80
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

por medio de javascript puedes deshabilitar el boton del submit, en el momento que le hacen click. Eso evitaria que vuelvan hacer click al instante.

En teoria al hacer el submit, enviaras los datos a un .php y éste te volverá a llevar al formulario para una nueva carga. De ser asi, este último .php puede controlar que hasta que no pasen 5 segundos, no enviarte de nuevo al formulario
  #3 (permalink)  
Antiguo 13/01/2007, 10:00
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

De la siguiente forma no te tienes que preocupar del tiempo: simplemente sólo permite enviarlo una sola vez (yo lo utilizo en mi libro de visitas):

Mete el siguiente código javascript en el <head> de tu pagina:

Código HTML:
<script language="JavaScript">
var cuenta=0;
function submitFormulario(formulario) {
  //-evitar que se submita más de una vez
  if (cuenta == 0)
	{
		cuenta++;
		return true;
	}
	else
	{
		alert("El formulario ya está siendo enviado, por favor aguarde un instante.");
		return false;
	}
  
}
</script> 
y en tu formulario añade el evento onSubmit, de manera que queda algo así:

Código HTML:
<form name=librovisitas action="index.php" method="post" onSubmit="return submitFormulario(this);"> 
Un saludo.
  #4 (permalink)  
Antiguo 13/01/2007, 13:09
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Gracias amigos :)

Pero exactamente lo que quiero evitar es que, por ejemplo, le den al botón "atrás" del navegador y envíen nuevamente el formulario a toda velocidad. Querría controlar que, por ejemplo, que tras hacer clic en "enviar" tardara varios segundos en enviar a la página php que recoge los datos y los guarda en la base de datos. ¿Cómo puedo hacer eso?.

Mil gracias de nuevo
  #5 (permalink)  
Antiguo 13/01/2007, 19:08
Avatar de vb2005  
Fecha de Ingreso: noviembre-2005
Ubicación: Paderborn - Alemania
Mensajes: 566
Antigüedad: 18 años, 5 meses
Puntos: 24
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

creo que un captcha sería la mejor opcion =) es mucho más seguro tambien para no tener BOTS
  #6 (permalink)  
Antiguo 13/01/2007, 20:05
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

hay 2 formas
una cookie, ke el destino del formulario la lea, si existe (digamos ke la cookie tiene 20 segundos de duracion) y si paso el formulario en 10 segundos
entonces tu script leera la cookie y puedes enviar el error
el siguiente es por la funcion time() en una BD
subes el registro y haces lo mismo
$duracion=time()-20;
si la consulta existe entonces el visiotante paso a la pagina en menos de 20 segundos, para eliminarlo solo usas la clausula DELETE WHERE tiempo < $duracion

Saludos
  #7 (permalink)  
Antiguo 13/01/2007, 21:18
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Una buena idea para que al actualizar / pulsar botón atrás no se vuelvan a mandar los datos a través de POST, es hacer que una vez enviados, en lugar de mostrar directamente la página resultante, hacer un par de redirecciones. Por ejemplo, una que vaya a una página que diga "informacion enviada" y entonces vuelves a la página donde estabas.

Puedes hacerlo con header("location:...") o con HTML.

  #8 (permalink)  
Antiguo 14/01/2007, 02:58
Avatar de holahola  
Fecha de Ingreso: mayo-2005
Ubicación: Móstoles - (Madrid)
Mensajes: 214
Antigüedad: 18 años, 11 meses
Puntos: 1
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

http://www.desarrolloweb.com/faq/blo...on-volver.html
  #9 (permalink)  
Antiguo 14/01/2007, 09:45
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 20 años, 6 meses
Puntos: 0
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Muchas gracias amigos :)

Interesantes propuestas (sobre todo la de la cookie y desactivar el botón "atrás").

De momento lo solucioné abriendo una sesión y quitándola el caché. Es decir, se envía el texto del formulario a una página intermedia que retiene el envío un par de segundos y luego, pasando los datos con una sesión, conduce a la página final donde se guardan los datos en la bbdd. Así evito que se sobrecargue el servidor por posibles envíos masivos y repetitivos de datos.

Nuevamente, muchas gracias
  #10 (permalink)  
Antiguo 14/01/2007, 12:35
 
Fecha de Ingreso: enero-2007
Mensajes: 20
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Que se puede agregar a un formulario para que no se envíe muchas veces seguidas?

Hola.
A mi me pasa lo mismo en mi formulario.

Cada vez que le doy a recargar la página vuelve a enviar el formulario por correo...
Me gusta la idea que han comentado antes del tiempo... es decir que cuando se intente recargar esa página (que esla que envia los datos) que haya una acción por tiempo...

¿como se puede hacer eso?
¿hay alguna otra idea sencilla que impida la recarga de la página y el correspondiente reenvio del formulario?
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 15:12.