在我正在开发的网站上,我正在制作一个禁止和取消用户的系统。
在我的数据库中,我有一个“禁止”的表格,其中包含有关禁令的字段(用户ID,活动,日期,ecc)。
我想做的是:
为过期日期添加另一个字段,当此日期发生时,将字段“active”自动更改为0.
我怎么能这样做?
答案 0 :(得分:3)
我不会像你那样使用两个字段 - 因为在达到非禁止日期时,我不想依赖任务来更改active
字段。
相反,我只会使用一个名为banned_until
的日期时间字段;这个字段可以是:
NULL
,然后,当用户尝试做某事(登录,发布,...)时,我会检查:
NULL
,在这种情况下,用户未被禁止在第二种情况下,您甚至可以将字段重置为NULL
,因为已达到取消禁止日期。
答案 1 :(得分:2)
您要么使用cron脚本,要么在获取禁用用户时,应用where子句来检查禁令是否已过期
答案 2 :(得分:0)
创建一个php脚本,检查时间是否过期了。 SQL将是这样的:
UPDATE banned SET active=0 WHERE expire_date<=NOW()
将其另存为例如task.php
然后使用crontab -e
*/10 * * * * php /path/to/your/taks/task.php
这将导致此脚本每10分钟执行一次并解除所有禁用的ppl。
-
还有其他方式,也许更好的方式,例如Pascal描述,但这个答案是出于你的想法。
答案 3 :(得分:0)
您可以将expiry_date
值与current_date
进行比较,以检查用户是否在登录时处于活动状态。
SELECT
( DATE_FORMAT( expiry_date_field, '%Y-%m-%d' )
<
DATE_FORMAT( CURRENT_DATE, '%Y-%m-%d' )
) AS isActive
FROM
banned
WHERE
user_id=?;
返回的0
代表无效状态,1
代表有效。
但无论用户登录,如果您想保持用户的活动状态,您都可以实现此using the Event Scheduler。
以下示例为您提供实现一个的想法。
drop event if exists event_user_bans_scheduling;
delimiter //
create event if not exists event_user_bans_scheduling
-- on schedule every 86400 second starts 00:00:00
-- at timestamp( adddate( current_date, 1 ),'00:00:00' )
on schedule every 1 day starts timestamp( current_date + 1, '00:00:01' )
comment 'Scheduler to update active status of users'
do
UPDATE my_app_db.banned
SET ACTIVE=0
WHERE
date_format( expiry_date_field,'%Y-%m-%d' ) = date_format( CURRENT_DATE, '%Y-%m-%d' );
;
//
delimiter ;
注意强> 的:
全局event_scheduler
系统变量确定是否在服务器上启用并运行事件调度程序。在处理MySQL事件之前,请阅读Event Scheduler Configuration
上的完整说明。