在指定时间后更新mySQL行(PHP,MySQL)

时间:2015-07-30 07:08:56

标签: php mysql

我有一个用户表。我希望此用户的“状态”值在一段时间后更改(以月为单位(从1到12))。

例如: 添加了一个新行,其中Name = Jack,Age = 20,Status = enabled,Expiration = 6。

当用户注册时,所有这些值都是从PHP脚本发送的。用户选择他想在网站上启用多少个月。从1到12.此值将传递到数据库中(如示例中所示)。该用户的状态应在6个月后(或他所选择的(“到期”值))自动更改为禁用。

我已阅读过有关处理此问题的不同技术:

1)Cron(但我想它无法在本地服务器上进行测试,它需要cPanel。而且我不确定我是否可以轻松地将过期值发送给cron(请告诉我是否我错了))

2)设置事件调度程序(我不确定它是否有效(请告诉我,如果我错了))

3)PHP脚本中的计算(我想在这种情况下,如果某个时间不正确的人将访问我的应用程序,系统会在查看访问者时自动更改所有行的状态他们的电脑上的时间(请告诉我,如果我错了))

所以基本上我问“在这种特殊情况下处理此操作的最佳方法是什么?”你能告诉你对此的看法吗?我正在寻找最有效的方式(因为我可能会有很多用户)。请纠正我错误的地方,我愿意接受你的建议。谢谢。

5 个答案:

答案 0 :(得分:4)

我认为PHP脚本选项套件在这里(选项3)。

您可以在用户登录时检查验证,如果通过时间更改数据库中的状态并向用户显示错误。

答案 1 :(得分:1)

哟可以通过在php中使用日期和strtotime函数来计算用户启用的时间段,之后如果当前日期与您的计算日期匹配,则可以触发查询。

例如。      // ---用于计算forword日期
     $ newtimestamp = strtotime(“十月,26,2015”);     $ expmonth = date('m',$ newtimestamp);     // ---用于计算当前日期
    $ currenttimestamp = date();     $ currentmonth = date('m',$ currenttimestamp);     // - 如果两个日期匹配则执行查询     if($ expmonth == $ currentmonth)     {       //在这里写下你的更新查询。      }

希望它能运作

答案 2 :(得分:1)

我会像这样攻击这个问题:

add expiration date column un user table
add there timestamp to what datetime account should be valid.

When user is logging in, PHP is checking the 'epxiration' 
column and check if datetime value is still valid.

您可以执行重新扫描数据功能,以检查“到期日期”。列值。

  For example if the date expired more that 6 month ago, 
row will be deleted.

每当应用启动或管理员登录时,您都可以像自动成员一样添加此功能。

   For example make table 'Cleaning time' and
 there 'Last Cleaning Date' 'Next Cleaning Date' 
'Cleaning step';

让应用程序在每次脚本运行时检查表 如果今天的清洁日期是===,那就去做吧 重新扫描用户并删除其他用户。

然后只需更改清洁时间日期'通过添加“步骤值”'到上次清洁日期'

顺便说一句。始终使用服务时间来管理数据

答案 3 :(得分:0)

正确的方法是每天在服务器上运行cronjob,检查用户的到期日期并更改其状态。如果要在本地服务器上进行测试,则不需要任何调度程序,只需点击检查用户过期并更改其状态的URL。如果你有linux托管,你只需要通过执行像wget -O / dev / null http://www.example.com/cronit.php这样的命令来设置cron作业

答案 4 :(得分:0)

我认为cron的工作对你有好处。您只需制作一个脚本并在特定时间运行它。而已。