我一直在关注PHP身份验证教程,并设法使其正常运行。
现在我想在导航栏中添加一个功能。我会尝试解释,希望有人有答案。
我有2个用户表,用户和user_permissions
在用户表中,还有一些名为<!DOCTYPE html>
<html>
<body>
<?php
// set some variables
$host = "127.0.0.1";
$port = 5003;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
while(true){
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// socket_close($spawn);
}
socket_close($socket);
?>
</body>
</html>
,district_id
,district
和gemeente_id
的列。我在数据库中还有2个名为gemeente
和districten
的额外表。
gemeenten
表有2个列。 districten
和id
,其中包含唯一的district
和ID
。 name
表格至少包含以下3列gemeente
,id
和district_id
。
以下是我想要发生的事情:
当用户登录查询时,会在导航栏中的gemeente
中显示结果,其中将显示用户所拥有的<ul>
表中的所有值(列gemeente
)被分配到。
示例:
用户ZZZ被分配到A区。
该区域拥有4个城市:城市1,城市2,城市3和城市4 当用户登录时,他应该 只能看到A区的城市。
我不知道如何在Slim2 Framework中使用它并集成在PHP身份验证代码中。所以任何帮助都非常感谢。
答案 0 :(得分:0)
首先,您必须规范化您的表并清除冗余信息,因为在关系数据库中很难维护它(我假设您使用像MySQL这样的关系数据库)。
所以基本上每个用户都被分配到gemeente,每个分配到区和区的gemeente轮流有城市(gemeenten)。在用户表中,您只需要gemeente_id
。 districten
和gemeente
的架构似乎很好。
如何检索所需数据有两种方法:通过运行2个查询(1个用于获取用户区域;第2个用于获取区域&#39;城市)并在一个查询中运行所有内容。选择哪种方式取决于您。
第一种方法:
SELECT d.id FROM district AS d LEFT JOIN gemeente AS g ON g.district_id=d.id LEFT JOIN user AS u ON u.gemeente_id=g.id WHERE u.id=<user_id>
SELECT g.id, g.gemeenten from gemeente as g where g.district_id = <res_of_prev_query>
第二种方法:
SELECT
g.id, g.gemeenten
FROM gemeente AS g
LEFT JOIN
districten AS d
ON g.district_id=d.id
INNER JOIN (
SELECT DISTINCT district_id, u.id AS user_id
FROM gemeente as gg
INNER JOIN user AS u
ON u.gemeente_id=gg.id) AS ud
ON ud.district_id=g.district_id
WHERE ud.user_id=<user_id>
您需要将此查询转换为ORM / ActiveRecord,运行它并显示ul
列表
UPD:我已经更新了我的回答。感谢@DarkBee指出我的错误