管理用户警告

时间:2010-03-03 18:08:02

标签: php mysql database-design user-warning

我不习惯使用每次游戏中断时应减少的值,例如警告的用户,例如30 days持续的警告,可以在3 warns之前达到最大值table_user - username - email - warnings (integer) - last_warn (timestamp data type) 用户被禁止

我想设计一个这样的用户表,但是现在我应该对它进行处理,我发现它每隔30天递减一次就没用了:

{{1}}

我应该使用一些php计时器吗?

是否存在关于用户警告的任何标准技术?

3 个答案:

答案 0 :(得分:2)

您可以创建另一个表

User_warnings:
    user_id
    warn_timestamp

每当用户警告时,您首先删除超过30天的所有条目,然后检查是否仍存在两个或更多警告。然后禁止用户。

如果您需要有关所有警告的历史记录,请不要删除旧警告,而只是在过去30天内查询警告。

这样您就不必每天减少,但只需检查何时出现另一个警告。

答案 1 :(得分:1)

通过突破用户的警告来规范化您的表格,例如:

Table: Users
UserID  int auto generate PK
UserName
UserEmail

Table: UserWarnings
UserID
WarningDate

您现在可以编写查询以确定过去30天内是否有三个警告。发生“警告”时运行此查询,如果返回行,则禁止用户。

查询看起来像这样:

SELECT
    COUNT(*)
    FROM UserWarnings
    WHERE UserID=...your user id... AND WarningDate>=...current date time...
    HAVING COUNT(*)>2

通过制作警告表,您可以保留完整的警告历史记录,这可能很有用。

答案 2 :(得分:1)

我相信,用户警告系统确实没有标准设计。 “三击,你出局”是一种典型的方法,但并不总是最好的。例如,如果我的网站上有N规则,并且我们会说K这些规则是严重违法行为,那么我认为不那么严重的违规行为会给予三次罢工。但也许严重的违法行为是autoban或两次罢工?

如果我必须设置这样的东西,我会创建一个看起来像这样的表:

user_warnings:
- warning_id
- user_id
- created_at
- offense_level

然后可能会设置一个查询,您可以在其中找到任何在过去T天内具有大于或等于可禁止攻击级别值的总和攻击级别的用户。如果他们的总进攻级别超过建议值,则禁止用户。我会说将进攻级别设置为5级,并且具有分层级别的攻击。<​​/ p>

在我看来,永远不要删除过去的罪行。你永远不知道什么时候记住之前发生的事情是很重要的,记录它的记录是件好事。只需确保此查询仅检查小于30天的日期(或者您想要设置的警告可能有多天)。