Impedir la repetición de una acción?

Iniciado por Servia, 6 Febrero 2010, 13:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Servia

He estado buscando por google algo estilo sesiones que no permita al usuario repetir la acción por ejemplo de reenviar un formulario (eso de actualizar una vez enviado o que le de error y va y le permite hacer el envío de nuevo).

Diria que smf usa algo por el estilo

dimitrix

A ver es sencillo, si te explicas un poquito mejor te intentaré ayudar...




Syphroot

Pues como tu mismo lo has escrito, crea una variable de sesión cuando se realiza por primera vez la acción (envía datos en un form) y el código que recibe los datos que revise si ya existe esa variable (esta repitiendo la acción), si no, pues es la primera vez que se realiza. Me explico?

La otra opción es que cuando pulsen los botones de envio, los deshabilites con javascript (como una medida mas, mas no definitiva).

dimitrix

Syphroot el problema es que tendría que decir para que es, por que si cada vez da una variable aleatoria no funcionaría ya que cada vez que envie esa acción tendría un valor distinto la variable aletoria y pasaría igualmente, por eso tiene que explicar el que.

Si lo haces por db (que es como tendrías que hacerlo) crea una tabl con las acciones tipo "borrar, editar, crear" y cargalo con "1" cuando lo hagan y si no quieres que vuelvan hacer alguna de esas tres acciones primero lees si el contenido de por ejemplo "editar" y con un "if" permites o no la acción mirando si tiene o no el "1" en editar.

Es como yo lo haría, esto me recuerda a lo del fotolog "Sólo una imagen por día, borrar todas las que quieras y editar sólo los 30 primeros minutos"

Un saludo, espero haber ayudado (espero xD)




Servia

xD
Yo me refiero a que justo la hayan hecho no puedan repetirla, deban esperar, como aqui al postear, para evitar entradas multiples del mismo contenido a la db.

dimitrix

Cita de: Servia en  7 Febrero 2010, 23:19 PM
xD
Yo me refiero a que justo la hayan hecho no puedan repetirla, deban esperar, como aqui al postear, para evitar entradas multiples del mismo contenido a la db.

Pues lo que te he puesto, pero en vez de uno, que guarde cuando se publicó con la función time() y si la diferencia entre los dos time es mayor a 30 segundos por ejemplo que le deje publicar.

Me entiendes?




Castg!

pero para uno seria muy facil borrar la cookie o sesison o lo que deje en tu pc, justamente la cosa no es dejarla en tu pc, sino del lado del servidor. podes hacer un filtro por ips.
conseguis la ip del cliente: $_SERVER['REMOTE_ADDR'], y la guardas en un txt: fwrite($ip."\n", $archivo);
luego cuando trate de volver a enviar el formulario abris el archivo: $contenido = readfile($archivo);
y terminas comprobando si ya guardaste su ip, if(preg_match("/.*".$ip.".*/")). y listo


saludos!

fede_cp

pero la idea es que no te deje dentro de un determinado tiempo. no cuando cambia la ip, ya que la ip cambia por ejemplo cuando me desconecto y conecto. yl o que el quiere es por tiempo.


es como dice dimitrix.

pones con la funcion time que te saque el tiempo los comparas y si pasa determinada cifra es posible la modificacion o no.



saludos!
somos lo que hacemos para cambiar lo que somos

http://elhackerblog.blogspot.com el blog de elhacker.net!!

Castg!

le guardas tambien la hora y dia y despues la comparas, lo mismo

Syphroot

Completamente de acuerdo dimitrix, fede_cp, Castg! asociando un timestamp a la acción (sería como ir "logeando" lo que hace el usuario) incluso tendrías que comparar contenido (por lo que he entendido)... porque puede suceder el caso que no pasen ni 30 segundos por ejemplo (o menos para los veloces del teclado) y haga otra vez la misma acción pero con "contenido" diferente. Si... emmm, ¿De que trata tu app?

Saludos a todos!