2010-05-06 57 views
4

我想創建一個函數,允許我禁止帳戶10天。 在dbc中,我有一個名爲「ban」的字段,布爾值爲1 = notban,0 = ban。我也有一個名爲「date_banned」的字段,它只是用戶被禁止的時間戳。如何在帳戶上創建定時禁止? (PHP/mysql)

我的問題是如何創建從用戶被禁止的日期10天的時間框架?

ex:詹姆斯被禁止在「2010-05-03 20:43:48」。那麼我該如何去添加10天到時間戳呢? 10天之後,它會將「禁令」設置爲1(這不是禁止的)。

編輯:我該如何顯示用戶離開禁令的時間?例如:還有8天還沒有結束

我可以...現在做() - $ date_banned?或者我如何從當前日期中減去禁止日期?

回答

6

要在MySQL的date_banned字段中添加10天,您可以簡單地使用DATE_ADD()函數。當用戶試圖登錄,看看是否禁令已過期,您可以做以下檢查:

... WHERE NOW() > DATE_ADD(date_banned, INTERVAL 10 DAY); 

那麼你可能要當用戶嘗試登錄切換ban場否則你就每天或以任何其他費率運行預定作業,以檢查過期禁令並相應更新此字段。

但是,您實際上並不需要ban字段來檢查用戶是否被禁止。事實上,你可能想考慮消除它。其實,我會走得更遠,並建議使用banned_until而不是date_banned(或使用它們兩者)。 banned_until字段將使您的查詢更簡單,並允許您在發佈禁令時預先定義任意禁令持續時間。在這種情況下,當用戶登錄時,你可以簡單地做以下檢查:

... WHERE NOW() > banned_until; 

UPDATE:

獲取剩餘,直到禁令結束的天數,你可以在MySQL中使用TIMESPANDIFF()功能:

SELECT TIMESTAMPDIFF(DAY, NOW(), DATE_ADD(date_banned, INTERVAL 10 DAY)) ... 

或者,如果你使用的banned_until場,這將是更短:

SELECT TIMESTAMPDIFF(DAY, NOW(), banned_until) ... 
+0

這是一個好主意!我只會有banned_until,並根據我的偏好設置時間限制。 – ggfan 2010-05-06 17:27:27

5

unban_date=DATE_ADD(NOW(), INTERVAL 10 DAY)應該做的伎倆

這時正好有一個檢查,看看有沒有人unban_date是過去一個cron,您可以更新您的禁止標誌。

+0

所以我需要unban_date的另一個字段(這將只是10天后),但我如何檢查當前日期與unban_date? – ggfan 2010-05-06 17:19:52

+1

'UPDATE bans SET ban = 1 WHERE unban_date <= NOW()' – 2010-05-06 17:20:43

+0

這很簡單。謝謝:) – ggfan 2010-05-06 17:21:57