不同类型的用户重定向到具有不同内容的同一页面(index.php)

时间:2016-10-28 13:44:16

标签: php mysql sql

我根据EMAIL和PASSWORD创建了一个PHP类来登录用户。我希望他们在登录时转到同一页面(index.php),但显示不同的内容。 我看到了其他ACL问题,但大部分都是关于用户升级和不同的组角色。 这里的角色假装是静态的。

我有3个SQL表:

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

1 个答案:

答案 0 :(得分:0)

我不建议使用index.phpif填充html,而是使用其他if的{​​{1}}和include

至于您的数据库架构,您走的是正确的路径,但我会更改以下内容。

仅在html snippets表格中保留namepasswordemail。我的猜测是,这些在用户中很常见,而且您不想处理多个地方的数据更新,尤其是密码等问题。

您需要添加一个USERTYPE表,其中包含ID和NAME列(使名称与表名相同),然后将TYPE添加到{{1 {}为TYPEID。这样,您现在知道用户的类型为SUPPORT或CUSTOMER,然后可以构建查询以查找其他信息(参见下文)。

USER添加一列,FKSUPPORT添加一列,并将其设为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 = ?";