许多页面的倒计时变量

时间:2011-06-28 16:29:39

标签: php javascript countdown

我有一个电子测试的演示网站,每个学生可以在整个考试中获得15分钟(包括5个科目,每个科目有10个问题)。我想要的是,当学生立即点击主页上的 START 时,倒数计时器应该自动启动并自动更新。实际上,这对于单个页面来说很容易完成。

问题是如果学生点击进入下一页,我希望计时器从上一页停止的位置开始并继续倒计时。
我想过使用SESSIONS但是如何让Javascript在PHP中设置SESSION变量?我的想法是使用AJAX,但我不知道如何去做。

任何人都可以帮助我,即使它需要AJAX以外的东西吗?

PS:
我想要显示的是剩余的秒数,而不是当前时间。

感谢。

5 个答案:

答案 0 :(得分:2)

你不必知道它在另一页上的停止位置。

您只想知道点击用户的时间。

只需将其保存在数据库或文件中即可。

并且在每个请求上计算服务器上剩余的时间。

由于客户端可以轻松操作。

在服务器上计算剩余时间后,您可以在每个页面上使用javascript进行倒计时。

答案 1 :(得分:1)

我找到了一个简单的方法来做一个小搜索。 Here

PHP:     

//when you start
$_SESSION['start_time'] = time();

然后在每一页上:

<script type="text/javascript">
    var startTime = <?php echo $_SESSION['start_time']; ?>;
    //calculate remaining time
</script>

答案 2 :(得分:0)

你可以使用这样的算法:

  1. 发生“开始”事件时,将开始时间存储在数据库中。
  2. 定期将AJAX请求发送到后端脚本。如果时间已过,请返回结束测试的响应。
  3. 在这种情况下没有真正的“计时器” - 只是一个开始时间,以及检查自那时起15分钟后是否已经过去的逻辑。如果要向用户显示计时器,则数学将很简单。

答案 3 :(得分:0)

您可以将页面放在IFrame中,倒数计时器放在主页面上。

答案 4 :(得分:0)

简单地说,您存储学生第一次开始测试时的时间戳并将其输出到每个页面。然后,从该时间戳中减去当前时间以获得经过的时间是一件简单的事情。

但是,依赖于Javascript是确保此计时器启动的一种非常糟糕的方法。更好的方法是强制用户点击实际的链接/按钮,不涉及Javascript。你记录服务器上的时间戳然后命中,然后一切都很好。

start.php:

<a href="page1.php">Start Test - Page 1</a>

page1.php中:

<?php

if(!isset($_SESSION['test_start_timestamp')) {
    $_SESSION['test_start_timestamp'] = time();
}
?>

<h3>Question #1</h3>
etc...

重要的是,一旦设置了会话,就永远不要重置会话中的时间戳值。否则,测试者只需点击一下,直到他们到达计数器重置的页面,他们就可以有更多的时间进行测试。