我正在一个人们可以为课程注册“时间段”的网站上工作。可用的日期/时间段存储在数据库中。页面打开时,PHP脚本会检查“已预订”变量设置为“no”(默认值)的所有条目,并将它们显示为可用的插槽。每个时段只能有一个人注册。
我有IPN脚本,它将在付款完成后更新数据库,并将时间段“已预订”变量更改为“是”。一切都好。
为了避免可能的双重预订,我需要在有人点击它时临时删除一个时段。但是,如果有人报名但从未真正支付过,会发生什么? (也就是说,他们填写了他们的姓名,电子邮件等,然后进入数据库,但他们从未点击完成PayPal付款?)如果付款被取消或未经过验证,我的IPN脚本会重置数据库表变量,但是如果他们从未首先转到PayPal,那就没有什么可以重置它的。
如果PayPal没有更新它,是否有某种方法可以在一段时间后(例如30分钟)将“已预订”变量自动重置为“否”?或任何其他建议如何处理?
答案 0 :(得分:0)
如评论所述,如果您还没有时间戳和状态字段,则应在表结构中添加时间戳和状态字段。当有人去“预订”会话时,运行Paypal API的脚本应该将状态更新为待处理状态。现在为了清除那些在你提到的“30分钟”之后没有付款的人,在同一个显示时间段的脚本中,就像你在这里描述的那样:
“当页面打开时,PHP脚本会检查”已预订“变量设置为”no“(默认值)的所有条目,并将它们显示为可用的插槽。”
应在此脚本开头添加一个小函数,然后再向用户显示该函数,删除当前处于“挂起”状态的那些超过30分钟。像这样:
$deletetime = strtotime('-30 minutes');
mysql_query("DELETE FROM time_slots WHERE timestamp < '$deletetime' and status = 'pending'");