在预订应用程序中保存房间

时间:2014-10-13 11:08:06

标签: javascript php web-applications logic

我有一些酒店预订网站。 符合条件的人可以选择酒店,日期和容量并支付订单费用。

当客户做出决定并点击订单按钮几步后:

  1. 应用程序再次检查价格和收集订单信息

  2. 为客户节省空间以防止超量预订

  3. 客户订单窗口设置为5分钟的计时器(如果时间已过,则会释放房间)
  4.   

    如果客户端退出orger页面,则会对null_timer进行三角处理   保存的房间已经发布

         

    如果客户开始订单(在订单页面中),他无法获得其他订单   订单

    • $_SESSION['order_iddle']计时器更改已触发 客户端通过ajax

    JS触发器

    window.onbeforeunload = function(){ 
    
          timer_null();   
          return ""; 
    
    }
    

    PHP检查

    if ((!isset($_SESSION['order_iddle'])) || (!$_SESSION['order_iddle']) )  {
    
         header('location: https://home-page/');
    
    }
    
    • $_SESSION['order_iddle']在PHP中使用计时器进行更新。
    • timer_null()向php发送ajax请求以更新/检查计时器

    问题1:

    这个逻辑依赖于onbeforeunload()函数,但如果函数在某些浏览器中不起作用,我们就会遇到麻烦。如果用户离开订单页面时有更好的方法来触发timer_null()?也许在PHP?

    问题2:

    onbeforeunload()触发并且用户点击“留在页面上”时,无论如何都会触发timer_null()。 有什么关系吗?

    感谢

1 个答案:

答案 0 :(得分:1)

更好的选择是在后端给订单一个到期值。这样就可以避免触发,用户不使用JS时出现问题,留在页面上时出现问题等。

当他们下订单时,将值设置为当前时间加上几分钟:

$order['expiry'] = time() + (5 * 60); // sets an expiry time for 5 minutes (5x60 seconds)

然后在将来的页面上检查订单是否有效:

if (time() > $order['expiry']) {
     throw new Exception('This order is not valid');
}

抓住该异常并将其返回给用户,不管您喜欢。

更广泛使用的建议

您的用例中可能还有其他内容,例如,需要在五分钟内保留库存。但是,如果您将此到期时间合并到数据存储中,那么它可用于检查任何未来订单的到期日。

如果您不想在每次下订单时检查数千个可能过期的记录,您可以创建一种"清理"脚本自动运行。如果您在我建议您阅读之前没有使用过crontab,而是设置为每天午夜使用crontab运行的脚本:

0 0 * * * php /var/www/my-clean-up-script.php

然后在脚本本身(伪代码):

$expired_orders = database_query ( GET orders FROM table WHERE expired_time < current_time)
for each $expired_orders
    database_query ( DELETE order)

哪个适用于任何可查询数据存储。