当计时器到达零时执行查询

时间:2011-02-13 20:17:48

标签: php javascript sql timer

这个想法非常简单:

如果计时器是用Javascript制作的,当它达到零时,它会在PHP中执行一个查询,改变数据库值以添加1。

问题在于,当您构建新设施时,不能使用页面刷新重置有问题的计时器,就像任何基于浏览器的游戏一样。

这是针对学校游戏项目,在其中单击“构建”并根据该工具的级​​别,需要X时间将其升级到新级别,显示一个计时器,告诉用户剩余多少时间升级完成。

如果解决方案在某处,我真的很抱歉,但我向上帝发誓我到处都搜索过,但我无法找到一个合适的方法来做到这一点。

3 个答案:

答案 0 :(得分:0)

将上次更新的时间存储在数据库中,并每5分钟左右检查一次页面

答案 1 :(得分:0)

不要依赖前端脚本来执行此操作,而是在后端安排任务。 一些方法来做到这一点。 如果负载和用户较少,并且定时器值不是很高。 在你的脚本中放入Sleep(10)(10秒)并通过你的javascript调用它 10秒后执行查询:)。 即使浏览器已关闭或页面已刷新,它也能正常工作

Php脚本:

<?php

  $timer = $_REQUEST['timer'];
  $timer = intval($timer);
   sleep($timer); // sleep for some seconds
   ....rest of the stuff..

 ?>

然而,对于大量使用和15分钟等大间隔,您可以立即在数据库中存储一些信息并触发时间,然后在后端使用cron(计划任务)处理它们

答案 2 :(得分:0)

这可能很棘手,因为你总会有延迟,所以这不准确。

但是你可以做的是让PHP在页面刷新时生成“剩余时间”值。这是自上次写入数据库以来的时间。页面加载时,您可以使用YourDelay - TimeSinceLastWrite的延迟初始化新计时器。之后,您启动常规计时器,只需将YourDelay作为间隔。

另一种选择,也可能更准确,是将请求的时间(AJAX,假设?)保存到cookie。页面加载时,您可以检查cookie并执行与上述相同的逻辑。只有它会更精确,因为你在同一台机器上完成所有时间,没有延迟或不同系统时钟的问题。