【问题标题】:database structure for the user hide their personal info用户的数据库结构隐藏他们的个人信息
【发布时间】:2011-04-05 08:12:46
【问题描述】:

用户的数据库结构如何隐藏他们的个人信息,如 hp、电子邮件地址和全名?

当用户通过我的网站将用户设置为私密时,我是否应该创建一个表 (hidden_​​info) 来保留用户的所有私密个人信息。

然后在user-profile.php页面,用mysql选择hidden_​​info_table where user==$username的*,然后用其他mysql选择显示hidden_​​info_table中没有列出的信息?

这将是很多工作,有没有其他更好的方法来构建隐藏用户个人信息功能的数据库?

【问题讨论】:

  • 听起来像是应用层要做的工作。您可以拥有一个包含完整信息的用户表,并在您的授权系统允许的任何地方显示/编辑敏感数据。

标签: php mysql database


【解决方案1】:

我不会使用单独的表格。我会有一个单独的设置表,其中包含他们可用的隐私选项。

Settings

 SettingId int 
 SettingName varchar(100)

UserSettings

 SettingId int
 UserId int

设置可以是 HideEmailHideRealNameHidePhoneNUMber 例如,您可以在用户进行身份验证时获取用户设置并将会话状态中的设置存储为字符串数组(或自定义模型)

然后您可以像这样查询用户设置:

SELECT SettingName
  FROM UserSettings
  LEFT JOIN Settings
  on UserSettings.SettingId = Settings.SettingId
WHERE UserId =1

这将返回当前用户的设置列表。这对您来说应该很容易从中解决 PHP 方面的问题。

  • 将结果存储在字符串数组中
  • 检查数组中是否存在 YourSetting,如果不显示则不显示该元素

一旦你有了你的数组,只需检查一个值是否存在并执行你需要的逻辑

if (!in_array("HideEmail", $results)) {
    echo "Show email address here";
}

【讨论】:

  • 比如说,Settings_table 上有两条记录:hideEmail 和 hidePhone。假设用户 ID 18 在电子邮件和电话上都设置为私有,mysql 和 php 代码如何显示除电子邮件和电话之外的第 18 个用户的所有信息?
  • 查看编辑。当您使用 UserSettings 表创建与用户的关系时,您可以将任意数量的设置分配给用户。
  • $query5 = ("select * from UserSettings where UserId='$userID'");然后使用数组存储结果。在这种情况下,结果应该是 1 和 2。1 是 hideEmail 的 SettingId,2 是 hidePhone 的 SettingId。然后使用 php if (array [0] == 1 and array [1]==2) { ... omg 我不知道如何显示所有信息,不包括私人信息。
  • 查看我的查询,您应该避免使用 select * 您将检查数组中是否存在设置 NAME,这样会更具可读性。例如,您可以在显示电子邮件的位置使用条件检查
  • 您不应该尝试在客户端处理隐藏和显示。相反,使用数据库中的视图返回未隐藏列的数据,并为应该隐藏的数据返回 NULL 或 ""。撤销对基表的权限。允许客户端代码只读视图。这样,所有未来的客户端代码都将符合“隐藏我”的要求,无论客户端程序员有多好。
【解决方案2】:

在电子邮件之后创建一个名为 email_hidden 的列

SELECT * FROM user_info WHERE userID = $ID

<?php

  if( !$user_info['email_hidden'] ) { echo $user_info['email'] }

?>

其他字段重复

这是最简单的方法,虽然不是最有效的。

【讨论】:

  • 不推荐这种方法,尽管同意它很简单。同样永远不会在此类查询中使用 select *,因为您将返回所有内容(可能对任何不需要的数据进行密码)
  • 如果我不回显,外面的人有什么办法可以得到 php 变量的值吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2012-05-21
  • 2018-10-31
  • 2010-10-14
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
相关资源
最近更新 更多