Php 如何使倒计时计时器在页面刷新时不重置
我正在为我的项目创建一个在线考试页面。我有一个倒计时,但它会在页面刷新时重置。如何使其不重置? 计时器是通过从数据库中获取时间来设置的。我正在使用php mysql。请帮帮我。 这是我的密码Php 如何使倒计时计时器在页面刷新时不重置,php,mysql,timer,countdown,Php,Mysql,Timer,Countdown,我正在为我的项目创建一个在线考试页面。我有一个倒计时,但它会在页面刷新时重置。如何使其不重置? 计时器是通过从数据库中获取时间来设置的。我正在使用php mysql。请帮帮我。 这是我的密码 <?php $result=mysql_query("select * from test where testid='29'"); while($time=mysql_fetch_array($result)){ $dateFormat = "d F Y -- g:i a"
<?php
$result=mysql_query("select * from test where testid='29'");
while($time=mysql_fetch_array($result)){
$dateFormat = "d F Y -- g:i a";
$targetDate = time() + ($time['duration']*60);
$actualDate = time();
$secondsDiff = $targetDate - $actualDate;
$remainingDay = floor($secondsDiff/60/60/24);
$remainingHour = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
$remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))/60);
$remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))-($remainingMinutes*60));
$actualDateDisplay = date($dateFormat,$actualDate);
$targetDateDisplay = date($dateFormat,$targetDate);
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
var days = <?php echo $remainingDay; ?>
var hours = <?php echo $remainingHour; ?>
var minutes = <?php echo $remainingMinutes; ?>
var seconds = <?php echo $remainingSeconds; ?>
function setCountDown ()
{
seconds--;
if (seconds < 0){
minutes--;
seconds = 59
}
if (minutes < 0){
hours--;
minutes = 59
}
if (hours < 0){
hours = 23
}
document.getElementById("remain").innerHTML = " "+hours+" hr "+minutes+" min "+seconds+" sec";
SD=window.setTimeout( "setCountDown()", 1000 );
if (minutes == '00' && seconds == '00') {
seconds = "00"; window.clearTimeout(SD);
window.location = "result.php"
}
}
</script>
</head>
<body onLoad="setCountDown();">
<div id="remain">
<?php echo "$remainingHour hours, $remainingMinutes minutes, $remainingSeconds seconds";?>
</div>
无标题文件
var天数=
var小时=
var分钟=
var秒=
函数设置倒计时()
{
秒--;
如果(秒<0){
分钟--;
秒=59
}
如果(分钟<0){
小时--;
分钟=59
}
如果(小时<0){
小时=23
}
document.getElementById(“剩余”).innerHTML=“”+小时+“小时”+分钟+“分钟”+秒+“秒”;
SD=window.setTimeout(“setCountDown()”,1000);
如果(分钟='00'和秒='00'){
秒=“00”窗口。清除超时(SD);
window.location=“result.php”
}
}
当用户开始考试时,将开始时间保存在数据库中。一切都要用它。不要依赖客户端代码,因为用户可以轻松修改它
如果保存开始时间,则可以知道用户何时开始以及当前时间。你可以用它来看看时间是否到了。javascript计时器可以显示剩余时间,但它应该从数据库中获取该信息。当用户开始考试时,将开始时间保存在数据库中。一切都要用它。不要依赖客户端代码,因为用户可以轻松修改它
如果保存开始时间,则可以知道用户何时开始以及当前时间。你可以用它来看看时间是否到了。javascript计时器可以很好地显示剩余的时间,但它应该从数据库中获取该信息。您可能需要使用examId字段和datetimeStarted注册一个类似active\u考试的表。然后加载计时器作为该检查启动后的秒数
您可以使用cookie、localStorage甚至会话创建一些变通方法,但请记住,这些方法是用户可以修改的(或者至少在会话中是可以忘记的)。您可能需要使用examId字段和datetimeStarted注册一个类似active\u考试的表。然后加载计时器作为该检查启动后的秒数
您可以使用Cookie、localStorage甚至会话创建一些变通方法,但请记住,这些方法是用户可以修改的(或者在会话的情况下至少是可以忘记的)。您应该将值读入会话变量,然后使用该变量:
<?php
session_start();
if (isset($_SESSION['targetdate'])) {
// session variable_exists, use that
$targetDate = $_SESSION['targetdate'];
} else {
// No session variable, red from mysql
$result=mysql_query("select * from test where testid='29' LIMIT 1");
$time=mysql_fetch_array($result);
$dateFormat = "d F Y -- g:i a";
$targetDate = time() + ($time['duration']*60);
$_SESSION['targetdate'] = $targetDate;
}
$actualDate = time();
$secondsDiff = $targetDate - $actualDate;
$remainingDay = floor($secondsDiff/60/60/24);
$remainingHour = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
$remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)- ($remainingHour*60*60))/60);
$remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)- ($remainingHour*60*60))-($remainingMinutes*60));
$actualDateDisplay = date($dateFormat,$actualDate);
$targetDateDisplay = date($dateFormat,$targetDate);
?>
您应该将值读入会话变量,然后使用该变量:
<?php
session_start();
if (isset($_SESSION['targetdate'])) {
// session variable_exists, use that
$targetDate = $_SESSION['targetdate'];
} else {
// No session variable, red from mysql
$result=mysql_query("select * from test where testid='29' LIMIT 1");
$time=mysql_fetch_array($result);
$dateFormat = "d F Y -- g:i a";
$targetDate = time() + ($time['duration']*60);
$_SESSION['targetdate'] = $targetDate;
}
$actualDate = time();
$secondsDiff = $targetDate - $actualDate;
$remainingDay = floor($secondsDiff/60/60/24);
$remainingHour = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
$remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)- ($remainingHour*60*60))/60);
$remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)- ($remainingHour*60*60))-($remainingMinutes*60));
$actualDateDisplay = date($dateFormat,$actualDate);
$targetDateDisplay = date($dateFormat,$targetDate);
?>
如果您在数据库中为特定用户保存了计时器的“开始时间”,则页面刷新并不重要
从数据库中获取此“开始时间”,并计算它以获得消耗的时间,并相应地显示剩余的或经过的时间。页面刷新与是否在数据库中为特定用户保存了计时器的“开始时间”无关
从数据库中获取此“开始时间”,并计算它以获得消耗的时间,并相应地显示剩余或经过的时间。倒计时时间从数据库中获取倒计时时间从数据库中获取谢谢。但我不知道如何实施它。我是编程新手。你能帮我吗?如果你没有访问特定的开发环境,那就不太可能了。只需在数据库中创建一个表来保存活动的_考试,并将其插入,直到可以生成一个ID并将日期时间差检索到页面为止。它并不复杂,即使是初学者也可以在一小时左右的时间内完成。谢谢。但我不知道如何实施它。我是编程新手。你能帮我吗?如果你没有访问特定的开发环境,那就不太可能了。只需在数据库中创建一个表来保存活动的_考试,并将其插入,直到可以生成一个ID并将日期时间差检索到页面为止。它并不复杂,即使是初学者也可以在一个小时左右的时间内构建。Soory,有一个打字错误。我使用了“$targetdate”而不是“$targetdate”,现在试试如何为cakephp 2.4.6中的登录用户执行上述操作?因为一旦登录,会话就已经启动,我们不能为倒计时再次启动会话。因为会话只启动一次。我们不能破坏会话以为倒计时再次启动会话。如果您知道会话已经启动,那么只需从我的代码中删除
会话\u start()
。若会话并不总是启动,那个么您可以添加If条件来检查会话是否启动。就像这样:苏里,有个打字错误。我使用了“$targetdate”而不是“$targetdate”,现在试试如何为cakephp 2.4.6中的登录用户执行上述操作?因为一旦登录,会话就已经启动,我们不能为倒计时再次启动会话。因为会话只启动一次。我们不能破坏会话以为倒计时再次启动会话。如果您知道会话已经启动,那么只需从我的代码中删除会话\u start()
。若会话并不总是启动,那个么您可以添加If条件来检查会话是否启动。像这样: