我想为用户提供一个网站,当用户输入一些东西时,我会将其放入DB中。但是当用户访问.php时,该命令不会执行。我想在一段时间后执行。。。。这是这样的。。。
10:00 am
User makes the request, and saying that the record will write in the DB one hour later.
11:00 am
The request execute, and the DB write a new record.
我该怎么做?此外,我想为用户添加一个取消请求的功能。。。。。类似这样的东西:
10:00 am
User makes the request, and saying that the record will write in the DB one hour later.
10:30 am
User cancels the request.
11:00 am
Nothing won't execute.
对此有什么想法吗?非常感谢。
- 当用户输入时,将该输入保存在数据库表中,但设置一个列(已验证)值"0"
- 一小时后,cron作业将列(已验证)值设置为"1"
- 如果用户在验证前取消,请删除该记录
示例:
表user_input:
user_id | input | input_time | verified
1 | 500 | 2011-01-01 12:20 | 1
2 | 700 | 2011-01-01 01:20 | 0
或
- 创建一个新表来存储输入请求
- 一个小时后,cron作业将把所有请求传输到原始表
- 如果用户在一小时前取消,请从请求表中删除该记录
示例:
表user_input:
user_id | input
1 | 500
2 | 700
表user_requests:
user_id | input | input_time
3 | 200 | 2011-01-01 07:20
cron对此过于复杂。当您插入数据库时,有一列包含帖子应该上线的日期和时间。例如:
$query = "INSERT INTO table (body, effective_date) VALUES ('body text', '" . strtotime('+1 hour') . "'";
在显示内容的页面中,只需添加WHERE effective_date>=NOW()
,它就会排除挂起的条目。
以下是实现这一点的工作流:
- 当用户提出请求时,将请求记录到文件中
- 创建一个cron作业来运行一个单独的PHP脚本,该脚本读取文件并将数据插入数据库
- 如果用户取消了请求,请从文件中删除该请求
在"文件"的位置,您还可以将请求记录到"挂起"表中的数据库中,并执行类似的操作。
使用不同的数据库表来安排作业。用户可以在此表中添加、修改和删除作业。然后让一个cronjob每隔五分钟或十分钟检查一次表,并在当前时间执行这些作业。
如果您确实希望一小时后将记录输入数据库,则必须为您的条目创建某种队列,并设置一个脚本(通过Cron或其他)来检查一小时前的记录并将其插入数据库。您还没有指定要使用的数据库,但据我所知,没有一个数据库可以让您选择执行insert命令,但告诉它等待一个小时后再执行。
如果您使用队列,那么当用户创建它时,它上可能会有一个时间戳,并且在该时间戳后一小时内,用户可以取消记录。
您的队列可能也应该位于您的数据库中,并且实际上可能是数据最终要放入的实际表。只需使用时间戳查看是否已经过去了一个小时,并将记录标记为不再可取消(如果该词存在…呵呵)。这意味着该条目实际上是在一小时之前写入数据库的。但你只需要根据创建后是否已经过了一个小时来过滤你的操作。