2012-06-30 49 views
0

我正在爲我的項目創建一個在線考試頁面。我有一個倒數計時器,但它重置頁面刷新。我怎樣才能讓它不重置? 定時器通過從db中獲取時間來設置。我正在使用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"; 
     $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> 

回答

2

你應該讀值到會話變量和使用算賬:如果你有定時器的保存在數據庫中的特定用戶的「開始時間」

<?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); 

?> 
+0

它不工作仍然當我按刷新它正在重設 – user1492669

+0

Soory,有一個錯字。我有「$ targetdate」而不是「$ targetDate」,現在試試 – Kristian

+0

謝謝。它的工作 – user1492669

1

當用戶開始考試時,將開始時間保存在數據庫中。把它用於一切。不要依賴客戶端代碼,因爲用戶可以輕鬆修改它。

如果您保存開始時間,您知道用戶何時開始以及當前時間是什麼。您可以使用它來查看時間是否已到。 JavaScript計時器很好地顯示剩餘時間,但它應該從數據庫中獲取該信息。

+0

倒計時的時間是從數據庫 – user1492669

1

您可能需要註冊一個表,例如帶有examId字段和datetimeStarted的active_exams。然後將該計時器作爲該考試開始後的秒數加載。

您可能可以使用cookie,localStorage甚至會話創建一些解決方法,但請記住用戶可以修改這些會話(或者至少在會話中是可以忘記的)。

+0

得到的感謝。但我不知道如何實現它。我是編程新手。你可以幫我解決這個問題。 – user1492669

+0

沒有訪問到你的具體開發環境不是真的。只需在數據庫中創建一個表格,以保存active_exams並將其插入,直到您可以生成ID並將日期時間差異檢索到頁面。這並不複雜,即使在一個小時左右之內,初學者也應該可以構建。 –

1

頁面刷新無所謂。

從數據庫中獲取此「開始時間」並計算它以獲取所消耗的時間並相應地顯示剩餘時間或已用時間。

相關問題