Foros del Web » Programando para Internet » PHP »

Evitar doble submit

Estas en el tema de Evitar doble submit en el foro de PHP en Foros del Web. Quiero implementar un control sobre mis formularios para evitar dobles (o más) submits. Sé que con javascript se pueden deshabilitar los botones pero quiero que ...
  #1 (permalink)  
Antiguo 25/09/2008, 02:54
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Pregunta Evitar doble submit

Quiero implementar un control sobre mis formularios para evitar dobles (o más) submits. Sé que con javascript se pueden deshabilitar los botones pero quiero que funcione sin javascript para tener una mayor robustez.

He probado guardando el identificador del formulario en variables de sesión pero no funciona. Las sesiones tiene un comportamiento extraño. Si alguien quiere, puedo explicarlo con más detalles.

Por otro lado, he encontrado este enlace. Esta solución consiste en guardar el id del formulario en base de datos. Explica que tiene un problema solucionable si la BD puede ejecutar procesos.

Mi pregunta es: ¿Cómo lo hacéis vosotros?
  #2 (permalink)  
Antiguo 25/09/2008, 06:34
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 16 años, 8 meses
Puntos: 21
Respuesta: Evitar doble submit

con sesiones y cookies se puede hacer.
  #3 (permalink)  
Antiguo 25/09/2008, 06:58
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Evitar doble submit

Cita:
Iniciado por nx00 Ver Mensaje
con sesiones y cookies se puede hacer.
¿Te refieres con un método u otro o los dos al a vez?
  #4 (permalink)  
Antiguo 25/09/2008, 07:00
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 16 años, 8 meses
Puntos: 21
Respuesta: Evitar doble submit

si un método u otro. Pero creo que mejor con sesiones que estan en el servidor y el usuario no puede modificarlas.

Un ejemplo rapido por si te puede aclarar (no lo he probado)

Código PHP:
//obtenemos los datos
$nombre $_POST["nombre"];

//ralizamos la consulta
$query="insert into...";

//ejecutamos
if(isset($_POST["nombre"]) && !isset($_SESSION["yaPasoUnaVez"]))
{
mysql_query($query);
$_SESSION["yaPasoUnaVez"] = 1;


Última edición por nx00; 25/09/2008 a las 07:10
  #5 (permalink)  
Antiguo 25/09/2008, 07:56
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Evitar doble submit

El caso es que ya lo probé con sesiones y no me funcionaba.

Guardando en un fichero los valores de la variable de sesión pasaba algo así:
Código:
trigger_error('antes: '.$_SESSION['var'], E_USER_WARNING);
if( $_SESSION['var'] == $_POST['formId'] )
{
// doble post!!!
}
else
{
$_SESSION['var'] = $_POST['formId'];
trigger_error('despues: '.$_SESSION['var'], E_USER_WARNING);
}
En el log:
Código:
antes: 
despues: <valor>
antes:
despues: <mismo valor>
  #6 (permalink)  
Antiguo 25/09/2008, 08:03
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 16 años, 8 meses
Puntos: 21
Respuesta: Evitar doble submit

te propongo otra solución, pero creo que es algo bruta.

Utiliza ficheros.

Por ejemplo:

1.- en la primera pasada crear un txt de nombre el id del post.

2.- en la segunda pasada con file_exists verificas si existe un fichero con ese id.

3.- si existe no se guarda y si no existe se sube el post y se crea el fichero.

Lo malo es que tendrias que crear un script que cada x tiempo pase y borre esos ficheros.
  #7 (permalink)  
Antiguo 25/09/2008, 08:46
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Respuesta: Evitar doble submit

Gracias por tu propuesta.

Al final, he guardado los id de los formularios en BD y me funciona bien.
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 06:35.