2012-06-30 2 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, typo가 있습니다. "$ targetDate"대신 "$ targetdate"를 사용했습니다. 지금 시도하십시오 – Kristian

+0

감사합니다. 그것의 작동 – user1492669

1

사용자가 검사를 시작할 때 데이터베이스에 시작 시간을 저장하십시오. 모든 것을 위해 사용하십시오. 사용자가 쉽게 수정할 수 있으므로 클라이언트 측 코드에 의존하지 마십시오.

시작 시간을 저장하면 사용자가 시작한 시간과 현재 시간을 알 수 있습니다. 그걸 사용하면 시간이 다 됐는지 알 수 있습니다. 자바 스크립트 타이머는 얼마나 많은 시간이 남았는지 보여주는 것이 좋지만 데이터베이스에서 해당 정보를 가져와야합니다.

+0

카운트 다운 시간은 데이터베이스에서 가져옵니다. – user1492669

1

아마도 active_exams와 같은 테이블을 examId 필드와 datetimeStarted에 등록해야 할 것입니다. 그런 다음 타이머를 시작한 이후 시험에 대한 초 수를로드하십시오.

쿠키, localStorage 또는 세션을 사용하여 몇 가지 해결 방법을 만들 수 있지만 사용자가 세션을 수정할 수 있는지 (또는 세션에서 잊어 버릴 수 있음) 유의하십시오.

+0

감사합니다. 하지만 그것을 구현하는 방법을 모르겠다. 나는 프로그래밍에 초보적이다. 칼슘이 도와 줘. – user1492669

+0

귀하의 특정 dev 환경에 대한 액세스 권한이 없습니다. ID를 생성하고 페이지에 dateTime 차이를 검색 할 수있을 때까지 active_exams를 유지하기 위해 데이터베이스에 테이블을 만들고 플러그를 뽑으십시오. 그것은 복잡하지 않고 1 시간 내에 초보자라도 건설 가능해야합니다. –

1

페이지 새로 고침이 중요하지 않습니다.

데이터베이스에서이 "시작 시간"을 가져 와서 계산하여 소비 시간을 얻고 그에 따라 남은 시간 또는 경과 시간을 표시하십시오.

관련 문제