Foros del Web » Programando para Internet » PHP »

Programar fecha de borrado de un registro

Estas en el tema de Programar fecha de borrado de un registro en el foro de PHP en Foros del Web. Hola, estoy haciendo las fichas de unos clientes en una base de datos. He puesto una opcion en un formulario, para que puedan borrar su ...
  #1 (permalink)  
Antiguo 26/01/2007, 15:44
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Programar fecha de borrado de un registro

Hola, estoy haciendo las fichas de unos clientes en una base de datos. He puesto una opcion en un formulario, para que puedan borrar su ficha de cliente.

Ellos introducen su password y otra vez para confirmar el borrado y pinchan sobre un boton de borrar. Entonces, calculo a partir del momento que se da al boton de borrar 2 días y guardo esa fecha en un campo de la ficha del cliente.

Lo que pretendo es que durante las primeras 24 horas, el usuario pueda cancelar la orden de borrado, pero despues de esas 24 horas sea irremediable el borrado.

Pero aqui me surge el problema. Cuando pasan los dos días y debo borrar la ficha del cliente (que me lo dice la fecha de borrado que guarde en el campo), pues no se como programarlo para que el servidor lo haga automatico.

Me podeis orientar con el problema?

Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #2 (permalink)  
Antiguo 26/01/2007, 15:56
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Programar fecha de borrado de un registro

No borres nada, simplemente cuando traigas los datos en donde se muestren harás algo como:
Código PHP:
$sql "select * from tbl where fechaBorrado > ".time()." "
Es como tener un campo de borrado lógico y filtrar por éste (siempre tenes los datos, y reportes muy jugosos!)...no se si se comprende a donde apunté.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 26/01/2007, 16:18
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Programar fecha de borrado de un registro

ya, pero el problema es que puede que no llegue a traer los datos. Te pongo un supuesto:

Se inscriben 3 usuarios.

Uno de ellos se da de baja y se borra. Se guarda en la base de datos y se borrara dentro de 2 dias.

Mientras tanto los otros dos usuarios ven que hay 3 usuarios inscritos. (aqui podria aplicar el filtro que dices y mirar con el time()).

Sin embargo pasan 2 dias y sigue habiendo 3 usuarios. Los dos usuarios que quedan no notaran que existe otro usuario, porque se ha dado de baja, pero a mi me quedaran los restos de otro usuario en el servidor (no se mostraran, pero seguira ahi).

Necesito que se borre en su fecha y hora. He pensado incluir en el index o el login o otra parte, que cada vez que se cargue esa pagina limpie dichos registros, pero eso ralentiza al servidor porque cada usuario lo miraria cada vez.

Otra posibilidad que he comtemplado es hacer llamadas al Cron de mi servidor, pero claro, eso no seria instantaneo, si no cada X tiempo. Por ejemplo si llamo cada hora, me lo limpiaria cada hora, pero no coincidiria con la fecha de borrado al minuto y segundo que se ordeno por el usuario.

Alguna solucion mas?

Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #4 (permalink)  
Antiguo 26/01/2007, 17:53
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Programar fecha de borrado de un registro

No comprendo cual es la molestia a que ese usuario te quede en el server en estado "borrado"...podrás explicarme porque o en que caso podría molestarte?

Sino la del cron + la que te digo sería buena para que no haya "hueco" de tiempos en el medio como decís, pero nuevamente, no comprendo porque te molestaría tener estos usuarios "borrados" en la db.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 26/01/2007, 17:59
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Programar fecha de borrado de un registro

Algunas razones serian:

1)Tendria que filtrar en demasiados sitios. El ejemplo que di, era para solucionar el caso, pero en realidad esto va a ir aplicaco a un juego que construyo, en el que hay mapas que posicionan jugadores (si estan borrados, no deben aparecer, no deben comerciar, no se le pueden escribir mensajes etc).

2)Ademas de que si el usuario se considera borrado, entonces sus datos no deberian permanecerse guardados, si este quiere conservar su privacidad.

3)Cada vez que tenga que consultar registros o mirar en la base de datos, no es lo mismo tener 200 usuarios que 2000 (suponiendo que 1800 son borrados).

Por eso necesito alguna otra opcion mejor que el cron cada minuto para que borre los registros(que sobrecargaria el server) o filtrar los contenidos por las razones anteriores.

Un saludo.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #6 (permalink)  
Antiguo 26/01/2007, 23:33
Avatar de mariobj  
Fecha de Ingreso: abril-2004
Ubicación: Colombia
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Re: Programar fecha de borrado de un registro

El problema puede ser solucionado de la siguiente forma, estamos partiendo del hecho de que el usuario cuando decide darse de baja, tu manejas un campo de estado del usuario verdad? (activo/inactivo) si no es asi es lo primero que debes hacer. Con eso resuelto suponemos un usario dado de baja hoy, entonces los datos en la tabla serian asi: usuario (inactivo) fecha de baja: 26 enero de 2006.
ok?????
(no te tomes en serio la fecha obviamente ese formato no lo maneja la bd)

Ahora perdoname si vuelvo a la opcion planteada por el otro participante del foro la herramienta cron es indispensable en estos casos, el truco esta en saberla usar, cron permite ejecutar SQL sin problemas juagando con el campo de estado del usuario, y no te preocupes por sobrecargas del servidor y esas cosas, como tu planteas el problema no necesitas hacer las actualizaciones cada hora puedes hacer esa operacion en una hora determinada del dia ya que los usuarios segun tu tienen un dia para deshacer los cambios. El sql controlado por el CRON debe hacer mas o menos lo siguiente: ojo debes manejar bien operaciones entre fechas por que de otra forma imposible si quieres updatear tu bd debes:
1) Tomar la fecha actual fecha de sistema una vez la tengas, ese es tu punto de comparacion haces la consulta sql y en el condicional filtra aquellas cuya fecha de baja sea menor a la de hoy (consulta la funcion datediff o perioddiff de mysql o cualquier motor de bd tienen funciones devuelven calculos de tiempo) y ademas sean inactivas o al contrario el primer criterio de evaluacion sera el estado y luego recorres el arreglo buscando cuales cumplen la condicion de diferencia de tiempo con la hora del sistema. y listo cuando tengas el recordset que cumpla la condicion los borras y ya esta.....eso lo ejecuta el cron una vez al dia cuando tu quieras sin problema.

Otra solucion sin cron mas practica !!!!!!!!

usa otra tabla que se llame usuarios dados de baja o algo asi y cuando un usuario se de de baja lo sacas de tu tabla principal de usuarios y lo mandas a la de usuarios dados de baja, no tienes que borrarlos necesariamente si los tienes en otra tabla pues no tendras molestias en tus listados ppales de usuarios. Si el usuario se quiere reactivar en el tiempo programado (ahora sera mas facil: comparas la fecha de baja en la tabla temporal con la fecha del sistema si es menor a tu limite pues lo pasas a la principal o niegas la peticion y ya.........)

No te preocupes tanto por los la cantidad de registros recuerda que si usas MySQL en modo MyISAM el almacenamiento es infinito :) y si son tipo InnoDB pues tendras muchos terabytes :) para que mas !!!!!!!!!!!

espero te sirvan de algo mis consejos, yo uso cron en una app de facturacion y la uso una vez al dia, al final de la jornada con querys mas complejos que el tu planteas y hasta ahora no he tenido quejas de mi cliente........

suerte con eso adios...............
  #7 (permalink)  
Antiguo 26/01/2007, 23:59
Avatar de mariobj  
Fecha de Ingreso: abril-2004
Ubicación: Colombia
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Re: Programar fecha de borrado de un registro

pero debes poner mas atencion a la logica acerca de los tiempos, por ejemplo dime xque deberias ejecutar el cron cada minuto?????? eso desde el punto de vista de tus restricciones: usuarios borrados a los dos dias o uno eso no importa porque no hacer comprobaciones diarias? despues de todo dicha comprobacion esta en el rango limite de lo que tu quieres verdad? piensalo y te daras cuenta te estas complicando mucho...................
  #8 (permalink)  
Antiguo 27/01/2007, 12:28
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Re: Programar fecha de borrado de un registro

Bueno, al final me he decantado por hacer un popurri de todo. Filtrare y luego llamare al cron una vez al dia para que limpie esos registros.

Muchas gracias.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
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 04:00.