2016-05-05 36 views
0

我有一個像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

那麼,如果用戶被禁止評論*和*回答,但是不能從其他方面做什麼,你會怎麼做? –

+0

@NiettheDarkAbsol我不能那樣做(禁止*評論*和*回答*)。因爲'active'列只包含一個數字。 '0'他可以做任何事情。 '1'他被禁止*投票*等等...... – stack

+0

好奇。在'if(@ban = 1)'和其他...不應該讀爲'if(@ban == 1)'?但我可能是錯的。 –

回答

1

您需要創建連接表,而不是將禁止存儲在用戶表中的一列中。

所以,你想在下表(只包括簡單相關列):

USER (ID int, NAME varchar) 

BAN (ID int, NAME varchar) 

User_Bans (UserID int, BanID int) 

然後,可以適當地選擇從User_Bans表BanIDs並連接消息/禁用功能。請讓我知道,如果你有任何問題。

+0

這並不壞。謝謝.. upvote – stack

+1

我還會補充一點,除非你的禁令在用戶活動期間可能發生變化,你應該在登錄後將這些信息加載到會話中,就像Josh建議的一樣。但是,我堅決不同意你不應該使用SQL。加入表格非常適合這一點。 –

1

我不明白你爲什麼在SQL這樣做,

爲什麼不只是有網站的拉動用戶的數據,並根據活動柱的允許訪問或拒絕的網站?

,如果你是阻止從投票用戶,查看或什麼都基於該領域只是輕彈了錯誤信息

當,用戶登錄拉你將需要的信息。

用戶名,電子郵件,圖片路徑,活動領域什麼。將其存儲在會話中。 然後你再也不需要查詢那些數據了。除非他們更新它,在這一點你改變他們的會話數據。

+0

你的想法真的很貴..! *(未優化)* – stack

+1

if($ active!= 0){ show stuff } else { 顯示無法處理的東西。 }真的很容易,每當用戶想要做某件事情時都會檢查每個用戶,只要您可以緩存活動字段的結果就太瘋狂了。 –

+0

在每個請求都很重之前提取用戶數據。 – stack

相關問題