我根据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`),
**我的数据库架构好吗?我是否应该有一个基于用户角色的带有if语句的PHP文件,并使用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
我不建议index.php
用if
s填充,html
而是使用if
s和include
other填充html snippets
。
至于您的数据库模式,您将走在正确的道路上,但我将更改以下内容。
离开name
,password
并且email
仅在USER
表中。我猜这在用户中很常见,并且您不想处理多个地方的更新数据,尤其是对于密码之类的东西。
您将要添加TYPE
或TYPE
表的ID和名称列(请名字一样的表名),然后添加TYPEID
到USER
用FK
。这样,您现在知道用户的类型为SUPPORT或CUSTOMER,然后可以构建查询以查找其他信息(请参见下文)。
在SUPPORT
和中添加一个列CUSTOMER
,USERID
并使其成为FK USER
ID
。这样做的好处是,现在用户可以更改电子邮件,并且您知道,USERID
因为它PK
在USER
表格中,所以它是唯一的。
然后,您可以查询以下信息:
//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 = ?";
在索引中还显示包括以下内容:
if($user->type == "SUPPORT"){
include('path/to/support/template.php');
} elseif($user->type == "CUSTOMER"){
include('path/to/customer/template.php');
} else {
//Default catch bad types?
}
更新至SCHEMA
CREATE TABLE `USERS` (
`ID` int(10) NOT NULL PK AUTOINCREMENT,
`TYPEID` int(10) NOT NULL,
`NAME` varchar(99) NOT NULL,
`EMAIL` varchar(99) NOT NULL,
`PASSWORD` text NOT NULL,
)
ALTER TABLE `USERS`
ADD CONSTRAINT `USERS_ibfk_1` FOREIGN KEY (`TYPEID`) REFERENCES `TYPES` (`ID`)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句