我有一个像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"
我该如何实现?
答案 0 :(得分:1)
我不明白为什么你在SQL中这样做,
为什么不让网站提取用户数据,并根据活动列允许访问或拒绝网站?
如果您阻止用户投票,查看或根据该字段进行任何操作,只需弹出错误消息
当用户登录时,请提取您需要的所有信息。
用户名,电子邮件,图片路径,活动字段。将其存储在会话中。 然后你永远不需要再次查询该数据。除非他们更新它,否则你会更改他们的会话数据。
答案 1 :(得分:1)
您需要创建一个连接表,而不是将禁令存储在用户表中的一列中。
因此,您需要以下表格(为简单起见,仅包括相关列):
USER (ID int, NAME varchar)
BAN (ID int, NAME varchar)
User_Bans (UserID int, BanID int)
然后,您可以从User_Bans表中选择BanID并相应地连接消息/禁用功能。如果您有任何问题,请与我们联系。