如何在帐户上创建定时禁令? (PHP / MySQL的)

时间:2010-05-06 17:14:17

标签: php mysql

我想创建一个允许我禁用帐户10天的功能。 在dbc中,我有一个名为“ban”的字段,布尔值为1 = notban,0 = ban。我还有一个名为“date_banned”的字段,它只是用户被禁止时的时间戳。

我的问题是如何创建自用户被禁止之日起10天的时间范围?

前:詹姆斯被禁止参加“2010-05-03 20:43:48”。那么我怎样才能在时间戳上添加10天呢? 10天后,它会将“禁令”设置为1(未被禁止)。

编辑:如何显示用户离开禁令的天数?例如:还有8天,直到未来

我可以......现在做() - $ date_banned?或者如何从当前日期减去禁令日期?

2 个答案:

答案 0 :(得分: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;

<强>更新

要获得禁令结束前的剩余天数,您可以使用MySQL中的TIMESPANDIFF()函数:

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

或者,如果您使用banned_until字段,则会更短:

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

答案 1 :(得分:5)

unban_date=DATE_ADD(NOW(), INTERVAL 10 DAY)应该做的伎俩

然后只需要一个cron来检查过去是否有人的unban_date,你可以更新你的被禁旗帜。