我根据EMAIL和PASSWORD创建了一个PHP类来登录用户。我希望他们在登录时转到同一页面(index.php),但显示不同的内容。 我看到了其他ACL问题,但大部分都是关于用户升级和不同的组角色。 这里的角色假装是静态的。
CREATE TABLE `USERS` (
`userID` int(10) NOT NULL PK AUTOINCREMENT,
`groupID` int(10) NOT NULL,
`EMAIL` varchar(99) NOT NULL,
`PASSWORD` text NOT NULL,
`regDate` date NOT NULL
)
CREATE TABLE `SUPPORT` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`ENGINEERNUMBER` int(10) NOT NULL,
`EMAIL` varchar(99) NOT NULL,
`PASSWORD` text NOT NULL,
`NAME` varchar(99) NOT NULL,
`OFFICE` varchar(99) NOT NULL
)
CREATE TABLE `CUSTOMER` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`CITIZENID` int(10) NOT NULL,
`EMAIL` varchar(99) NOT NULL,
`PASSWORD` text NOT NULL,
`NAME` varchar(99) NOT NULL,
`CITY` varchar(99) NOT NULL,
`ADDRESS`varchar(99)
)
ALTER TABLE `USERS`
ADD CONSTRAINT `USERS_ibfk_1` FOREIGN KEY (`EMAIL`) REFERENCES `SUPPORT` (`EMAIL`),
ADD CONSTRAINT `USERS_ibfk_2` FOREIGN KEY (`EMAIL`) REFERENCES `CUSTOMER` (`EMAIL`),
**我的数据库架构好吗? 我应该有一个PHP文件,with和if语句,根据用户角色使用HTML填充index.php吗?
提前致谢,很抱歉很长的帖子。**
更新
CREATE TABLE `USERS` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`NAME` varchar(99) NOT NULL,
`EMAIL` varchar(99) NOT NULL,
`PASSWORD` text NOT NULL,
)
CREATE TABLE `TYPES` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`NAME` int(10) NOT NULL,
)
CREATE TABLE `SUPPORT` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`USERID` int(10) NOT NULL ,
`ENGINEERNUMBER` int(10) NOT NULL,
`OFFICE` varchar(99) NOT NULL
)
CREATE TABLE `CUSTOMER` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`USERID` int(10) NOT NULL,
`CITIZENID` int(10) NOT NULL,
`CITY` varchar(99) NOT NULL,
`ADDRESS`varchar(99)
)
ALTER TABLE `CUSTOMER`
ADD CONSTRAINT `CUSTOMER_ibfk_1` FOREIGN KEY (`USERID`) REFERENCES `USERS` (`ID`)
ALTER TABLE `SUPPORT`
ADD CONSTRAINT `SUPPORT_ibfk_1` FOREIGN KEY (`USERID`) REFERENCES `USERS` (`ID`)
ALTER TABLE `TYPES`
ADD CONSTRAINT `TYPES_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `USERS` (`TYPEID`)
修订过的DB SCHEMA
答案 0 :(得分:0)
我不建议使用index.php
和if
填充html
,而是使用其他if
的{{1}}和include
。
至于您的数据库架构,您走的是正确的路径,但我会更改以下内容。
仅在html snippets
表格中保留name
,password
和email
。我的猜测是,这些在用户中很常见,而且您不想处理多个地方的数据更新,尤其是密码等问题。
您需要添加一个USER
或TYPE
表,其中包含ID和NAME列(使名称与表名相同),然后将TYPE
添加到{{1 {}为TYPEID
。这样,您现在知道用户的类型为SUPPORT或CUSTOMER,然后可以构建查询以查找其他信息(参见下文)。
为USER
添加一列,FK
为SUPPORT
添加一列,并将其设为CUSTOMER
USERID
。这里的优势在于,现在用户可以更改电子邮件,并且您知道USER
是唯一的,因为它是ID
表的USERID
。
然后,您可以查询以下信息:
PK
同样在你的索引中显示包括:
USER
更新为SCHEMA
//There is an assumption of object here with $user->type.
$query = "SELECT * FROM USER u JOIN {$user->type} t ON u.TYPEID = t.ID WHERE u.ID = ?";