我试图通过让用户选择公众可以看到的信息来为他们的个人资料设置个人隐私设置。
我正在测试这个示例查询,试图弄清楚这个问题。
例子:
用户提交他们的电子邮件、电话号码和一个备选电话号码。所有这些信息都存储在用户数据库表中。
我通过在用户表中创建3个新列为用户提供了显示该信息的选项。如果用户希望通过隐私表单向公众显示该信息,则用户可以选择"是"或"否"。
新列称为pe、pph和paph。(第一个p代表private)。PE等于电子邮件,PPH等于电话
默认情况下,info被设置为No,用于非公开查看。
我的问题:
如何关联
- 邮件地址
- pph to phone
- 到alt_phone的路径
然后在查询中运行它,这样如果pe的值为Yes,它就会出现在输出中,如果pph的值为No,它就不会出现在页面的输出中。
在这个问题上,我已经走出了自己的舒适区,所以请不要向我起哄,但这是我尝试过的。
<?php
$id = (int)$_GET['id'];
$users = DB::getInstance()->query("SELECT `id`, `email`, `phone`, `alt_phone`, `pe`, `pph`, `paph`
FROM `users` WHERE `id` = $id AND `pe`='Yes' AND `pph`='No' AND `paph`='Yes'");
'pe' == ('email');
'pph' == ('phone');
'paph' == ('alt_phone');
foreach($users->results() as $u){
?>
<p align="center"><?php echo escape($u->email); ?></p>
<p align="center"><?php echo escape($u->phone); ?></p>
<p align="center"><?php echo escape($u->alt_phone); ?></p>
<?php } ?>
所以结果应该输出:用户Email和用户备选电话号码,而不是用户的第一个电话号码
当用户更改设置时,只需将pe、ph和paph的值更新为0或1。0 =保密1 =公开
接下来的就很简单了:
<?php
$id = (int)$_GET['id'];
$users = DB::getInstance()->query("SELECT `id`, `email`, `phone`, `alt_phone`, `pe`, `pph`, `paph` FROM `users` WHERE `id` = $id");
/*
Use this query if you make a new table:
$users = DB::getInstance()->query("SELECT `users`.`id`, `users`.`email`, `users`.`phone`, `users`.`alt_phone`, `users_settings`.`pe`, `users_settings`.`pph`, `users_settings`.`paph` FROM `users` LEFT JOIN `users_settings` ON `users_settings`.`userid` = `users`.`id` WHERE `users`.`id` = $id");
*/
foreach($users->results() as $u){
?>
<p align="center"><?php echo ($u->pe === false ? 'Hidden' : escape($u->email)); ?></p>
<p align="center"><?php echo ($u->pph === false ? 'Hidden' : escape($u->phone)); ?></p>
<p align="center"><?php echo ($u->paph === false ? 'Hidden' : escape($u->alt_phone)); ?></p>
<?php } ?>
我所做的就是使用速记if查询来检查每个值的设置是0还是1。如果它是0(即false
),那么不要显示数字/地址,而是说"隐藏"。如果1 (i.e.
为true '),则显示从查询中收集的变量。
当有人"查看"配置文件时,您应该查询数据库中的所有必要字段(包括您的pe, pph等),并且如果隐私字段设置为"true"以隐藏详细信息,则有条件语句显示详细信息。不要将set中的细节回显到private