Acceder a la información del usuario eliminado

Quiero realizar un seguimiento de la información de un usuario incluso después de que se hayan eliminado de la base de datos.

Hay dos razones por las que quiero hacer esto. En primer lugar, después de eliminar al usuario, quiero mostrar un mensaje que diga "$nombre se eliminó con éxito". En segundo lugar, quiero escribir el nombre del usuario eliminado en un archivo de registro.

Lo que tengo ahora no funciona porque cuando el usuario se elimina de la base de datos, el nombre se convierte en NULL (estoy usando variables $_SESSION). ¿Hay alguna forma de acceder a esta información? ¿Cuál es la forma más inteligente de hacerlo?

preguntado el 12 de junio de 12 a las 16:06

8 Respuestas

Usted coloca un campo adicional en la base de datos para indicar que el registro está "eliminado" y realiza el filtrado apropiado cada vez que intenta usar esos registros para que no aparezca ningún registro 'eliminado = verdadero', por ejemplo, al iniciar sesión:

SELECT ...
FROM users
WHERE (username = '...') AND (password = '...') AND (deleted = FALSE)

De esta manera, mantiene todo el registro del usuario en la base de datos, pero no se puede utilizar porque se ha marcado como eliminado.

Respondido el 12 de junio de 12 a las 16:06

Me ganaste por menos de 5 segundos :( - Polinomio

Una mejor manera sería tener un campo de "estado" (entero), lo que le permitiría tener múltiples estados y evitaría tener que crear otra columna de base de datos. Entonces, simplemente usarías: ... AND status!='0' si se elimina "0". - Connor Peet

Como usuario, no estaría contento con esto. Si eliminé mi cuenta, esperaría que se elimine. Incluso podría ser ilegal en algunas jurisdicciones. - Joe

¡Y tú también me ganaste! @ Joe: dependería del contexto. Sus términos y condiciones deben cubrir lo que hace con los datos. - james healey

@Polynomial Sí, fue solo un error tonto. La variable de sesión funciona bien. Gracias :-) - nv39

La respuesta más inteligente es no eliminar al usuario.

Tenga una columna en la base de datos que marque que el usuario ha sido eliminado y luego trátelo como si el registro no existiera en el resto de las consultas.

Respondido el 12 de junio de 12 a las 16:06

@Joe Es trivial configurar un cronjob diario para purgar a los usuarios "eliminados" que tienen más de una semana. - Polinomio

Verdadero. Podrías agregar eso a tu respuesta. - Joe

@joe: desde el punto de vista de la protección de datos, esta es la forma correcta también porque no está destruyendo nada en el momento de la solicitud. Puede crear un limpiador más adelante si tiene que mantener esta mesa pequeña: Brian Hoover

@BrianHoover Diferente tipo de protección de datos: Joe se refiere al almacenamiento "amoral" de la información del usuario, después de que el usuario haya solicitado que la elimine. - Polinomio

Estaba hablando de una situación bastante sencilla en la que quiero terminar mi relación con una organización. Si hago esto solicitando que se elimine mi cuenta, espero eso. Si el botón dijera 'suspender cuenta' o 'impedir que inicie sesión pero conservar mis datos' sería otra cosa. Creo que en el Reino Unido se requiere que las organizaciones mantengan los datos actualizados a pedido, lo cual es incompatible con simplemente hacerlos inaccesibles. - Joe

Si desea mantener la "historia" del usuario y acceder a ella por nombre de usuario o identificación, ¿por qué no simplemente agrega una columna "activa" que es "Falsa" cuando se ha eliminado un usuario?

Obviamente, cuando crea un usuario, ese valor será "Verdadero" y cada acción relacionada con un usuario genérico (pero si es inteligente, digamos solo el inicio de sesión) debe tener en cuenta el valor de esa columna.

Respondido el 12 de junio de 12 a las 16:06

Hola, gracias por la respuesta. ¿Pero no parece más sencillo tener una variable $_SESSION? ¿Por qué no funcionan en este caso? - nv39

Porque $_SESSION es algo del lado del cliente con todos los "problemas" que esto le trae - DonCalisto

La mejor manera absoluta es nunca borrar ningún dato.

Simplemente agregue un indicador de bit a sus tablas con la etiqueta 'is_active' (valor predeterminado de verdadero) o 'is_deleted' (valor predeterminado de falso) para indicar si se puede acceder a una parte de los datos.

Si alguien quiere eliminar esa información, cambia el valor de la marca; también se asegura de usar esa marca en cualquier consulta que realice en esa tabla para encontrar solo datos activos.

Respondido el 12 de junio de 12 a las 16:06

Si solo está buscando una forma de mostrar su nombre en una página de confirmación de eliminación, simplemente puede pasar el nombre como un parámetro GET:

$name = user_get_name($user_id);
user_delete($user_id);

header('Location: deleted.php?user=' . urlencode($name));

Entonces, dentro de tu deleted.php, haz algo como esto:

echo 'User "' . htmlspecialchars($_GET['user']) . '" has been deleted.';

FYI, el htmlspecialchars La llamada está ahí para salvarte de los ataques XSS.

Actualizar: Asegúrate de llamar session_start() en su segundo script, y no desactivar las variables de sesión al eliminar al usuario o cerrar sesión.

Respondido el 12 de junio de 12 a las 16:06

Gustar:

$username = $user->get_name(); // OR Copy the object and use the copy for logging and messages
......

$user->delete();

$log->write_log('...... $username....');

PD. Tenga esto en cuenta, ¡es ilegal almacenar datos de usuario después de eliminar el perfil en algunos países!

Respondido el 12 de junio de 12 a las 16:06

Estoy bastante seguro de que OP está haciendo esto en una segunda página, por ejemplo, una confirmación de que el usuario "foo" ha sido eliminado, después de la fila ha sido eliminada. - Polinomio

¿Siempre puede escribir en el archivo de registro y mostrar el mensaje antes de eliminar al usuario? De esa manera, aún tendrá acceso a toda su información cuando la necesite.

Respondido el 12 de junio de 12 a las 16:06

Hola, gracias por la respuesta. No es ideal porque si el usuario cambia de opinión en contra de la eliminación, se enviará un mensaje incorrecto al archivo de registro y al usuario: nv39

Haces las tres acciones como parte de la misma rutina; no hay oportunidad para que el usuario cambie de opinión. - Andrewsi

Y cuando hagan clic en Atrás, su cuenta seguirá siendo eliminada. - Andrewsi

exactamente, quiero permitir que el usuario cambie de opinión (evitar eliminaciones accidentales y todo eso) - nv39

Así que pones una página intersticial - "¿Estás seguro de que quieres eliminar tu cuenta? Esto no se puede deshacer" - Andrewsi

OP aquí. Terminé usando variables de sesión (funciona ahora, fue mi tonto error). Yo diría que esta es la forma más sencilla de hacerlo, porque solo quería el nombre del usuario eliminado. Además, esto elimina el dilema de mantener la información de un usuario eliminado en la base de datos.

Respondido el 12 de junio de 12 a las 16:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.