访问已删除用户的信息

时间:2012-06-12 15:04:34

标签: php database logging

我想跟踪用户的信息,即使它们已从数据库中删除。

我想做这件事有两个原因。首先,删除用户后,我想显示一条消息“$ name已成功删除”。其次,我想将已删除用户的名称写入日志文件。

我现在所做的不起作用,因为当从数据库中删除用户时,名称变为NULL(我使用$ _SESSION变量)。有没有办法访问这些信息?最聪明的方法是什么?

8 个答案:

答案 0 :(得分:6)

您在数据库中添加了一个额外的字段,表示该记录已被“删除”,并在您尝试使用这些记录的任何地方进行适当的过滤,以便不会显示任何“deleted = true”记录,例如在登录时:

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

这样您就可以将整个用户记录保存在数据库中,但它不可用,因为它已被标记为已删除。

答案 1 :(得分:2)

最聪明的答案是不要删除用户。

在DB中有一列标记用户已被删除,然后将其视为其他查询中不存在该记录。

答案 2 :(得分:2)

如果您想保留用户的“故事”并通过用户名或ID访问它,为什么不删除用户时只添加“活动”列“False”?

显然,当您创建用户时,该值将为“True”,并且与通用用户相关的每个操作(但如果您很聪明,我们只说登录)必须考虑该列值

答案 3 :(得分:1)

绝对最好的方法是永远不要删除任何数据。

您只需在标记为“is_active”(默认值为true)或“is_deleted”(默认值为false)的表中添加位标志,以指示是否可以访问一段数据。

如果有人想要删除这条信息,您可以交换标记值 - 您还要确保在您对该表执行的任何查询中使用该标记,以仅查找活动的数据。

答案 4 :(得分:1)

如果您只想找到在删除确认页面上显示其姓名的方法,您只需将该名称作为GET参数传递:

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

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

然后,在deleted.php内,执行以下操作:

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

仅供参考,htmlspecialchars电话可以帮助您免受XSS攻击。

更新:确保在第二个脚本中调用session_start(),而不是在删除用户或注销用户时取消设置会话变量。

答案 5 :(得分:0)

喜欢:

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

$user->delete();

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

PS。记住这一点,在某些国家删除配置文件后存储用户数据是违法的!

答案 6 :(得分:0)

您可以在删除用户之前写入日志文件并显示消息吗?这样,您仍然可以在需要时访问所有信息。

答案 7 :(得分:0)

OP在这里。我最终使用会话变量(现在工作,是我的愚蠢错误)。我认为这是最简单的方法,因为我只想要删除用户的名字。此外,这消除了是否在db中保留已删除用户信息的困境