如何在我的网站中控制用户的活动?

时间:2016-05-05 15:02:01

标签: php mysql sql

我有一个像SO这样的网站。我在所有表格上都有一个触发器(插入之前),它会检查用户的状态。像这样:

// this line exists at the top of all triggers
@ban := select ban from user where id = new.current_id;
// new.current_id = $_SESSION['id']

// on the vote table
if ( @ban = 1 ) then
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot give vote";
endif;

// on the comment table
if ( @ban = 2 ) then
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot write comment";
endif;

// on the answer table
if ( @ban = 3 ) then
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot write answer";
endif;

// on the flag table
if ( @ban = 4 ) then
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot flag";
endif;

// on the favorite table
if ( @ban = 5 ) then
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = "You cannot favorite";
endif;

现在我需要一个案例来禁止他做任何活动。我想知道如何管理所有用户的活动?并告诉他这样的事情:

"You are banned and you cannot do any activity"

我该如何实现?

2 个答案:

答案 0 :(得分:1)

我不明白为什么你在SQL中这样做,

为什么不让网站提取用户数据,并根据活动列允许访问或拒绝网站?

如果您阻止用户投票,查看或根据该字段进行任何操作,只需弹出错误消息

当用户登录时,请提取您需要的所有信息。

用户名,电子邮件,图片路径,活动字段。将其存储在会话中。 然后你永远不需要再次查询该数据。除非他们更新它,否则你会更改他们的会话数据。

答案 1 :(得分:1)

您需要创建一个连接表,而不是将禁令存储在用户表中的一列中。

因此,您需要以下表格(为简单起见,仅包括相关列):

USER (ID int, NAME varchar) 

BAN (ID int, NAME varchar)

User_Bans (UserID int, BanID int)

然后,您可以从User_Bans表中选择BanID并相应地连接消息/禁用功能。如果您有任何问题,请与我们联系。