【发布时间】:2012-06-15 11:56:24
【问题描述】:
我想跟踪用户的信息,即使他们已从数据库中删除。
我想这样做有两个原因。首先,删除用户后,我想显示一条消息“$name 已成功删除”。其次,我想将被删除用户的名称写入日志文件。
我现在所拥有的不起作用,因为当从数据库中删除用户时,名称变为 NULL(我正在使用 $_SESSION 变量)。有没有办法访问这些信息?最聪明的方法是什么?
【问题讨论】:
我想跟踪用户的信息,即使他们已从数据库中删除。
我想这样做有两个原因。首先,删除用户后,我想显示一条消息“$name 已成功删除”。其次,我想将被删除用户的名称写入日志文件。
我现在所拥有的不起作用,因为当从数据库中删除用户时,名称变为 NULL(我正在使用 $_SESSION 变量)。有没有办法访问这些信息?最聪明的方法是什么?
【问题讨论】:
您在数据库中添加了一个额外字段以表示该记录已“删除”,并在您尝试使用这些记录的任何地方进行适当的过滤,以便不会显示任何“deleted=true”记录,例如登录时:
SELECT ...
FROM users
WHERE (username = '...') AND (password = '...') AND (deleted = FALSE)
这样您将整个用户记录保留在数据库中,但由于已被标记为已删除,因此无法使用。
【讨论】:
... AND status!='0' 如果“0”被删除。
最聪明的答案是不要删除用户。
在数据库中有一个列标记用户已被删除,然后将其视为该记录在其余查询中不存在。
【讨论】:
如果你想保留用户的“故事”并通过用户名或 id 访问它,为什么不在用户被删除时添加一个“活动”列,即“假”?
显然,当您创建用户时,该值将是“True”,并且与通用用户相关的每个操作(但如果您很聪明,我们只说登录)都必须考虑该列值
【讨论】:
$_SESSION 是客户端的东西,它会给您带来所有“问题”
绝对最好的方法是永远不要删除任何数据。
您只需在表中添加一个标记为“is_active”(默认值为 true)或“is_deleted”(默认值为 false)的位标志,以指示是否可以访问某条数据。
如果有人想删除那条信息,您可以交换标志值 - 您还确保在对该表执行的任何查询中使用该标志,以仅查找活动数据。
【讨论】:
如果您只是想在删除确认页面上显示他们的姓名,您可以简单地将姓名作为 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(),并且在删除用户或注销用户时未取消设置会话变量。
【讨论】:
喜欢:
$username = $user->get_name(); // OR Copy the object and use the copy for logging and messages
......
$user->delete();
$log->write_log('...... $username....');
PS。请记住,在某些国家/地区删除个人资料后存储用户数据是违法的!
【讨论】:
您总是可以在删除用户之前写入日志文件并显示消息吗?这样,您仍然可以在需要时访问他们的所有信息。
【讨论】:
在这里。我最终使用了会话变量(现在有效,这是我的愚蠢错误)。我认为这是最简单的方法,因为我只想要被删除的用户名。同时也消除了是否将已删除用户信息保留在数据库中的窘境
【讨论】: