2012-12-20 3 views
-1

나는 약간의 게임이 진행되는 웹 사이트를 디자인하고 있습니다. 참여하는 각 사용자는 99 분 동안 완료해야합니다. 그렇지 않으면 우리는 게임 오버 상태를 표시합니다. 다음은 지금까지 jQuery 게시를 사용하여 수행 한 작업입니다.카운트 다운 php jquery 게시물 아약스

타이머를 표시 할 수있었습니다. PHP에서는 99*60 초까지 대상 시간을 설정했지만 시작 시간을 0으로 설정할 수는 없으므로 카운트 다운 값에 차이를 줄 수 있습니다.

또한 각 사용자가 페이지를 종료 할 수 있기 때문에 나는 떠난 시간을 저장할 수 있기를 원합니다. 내가 할 수있는 것은 로그 오프 할 때 DB에 카운트 다운 값을 저장하는 것입니다 (5845라고 가정 해 봅시다). jQuery 게시물을 호출 할 때마다 테이블을 업데이트하려고했지만 더 악화되었습니다.

if (!empty($resm['Countdown']) || $resm['Countdown'] >= 0) { 
    $target = (99 * 60); 
    $countdown = ($target - $current); 
    $_SESSION['currenttime'] = $countdown; 
    $hours = floor($countdown/3600); 
    $min = floor($countdown/60); 
    $r_min = floor(($countdown - ($hours * 3600))/60); 
    $sec = floor($countdown - ($min * 60)); 
    if ($min == 0) { 
    echo $target.' '.$current.' '.$countdown; 
    echo '<br/>'.$min.' minutes '.$sec.' seconds left'; 
    } else { 
    echo 'Time Over'; 
    $sql = "UPDATE bs10000099 SET Upgradedlevel='2',Activated='2',Countdown='5940' WHERE  MemberID='$memberid'"; 
    mysql_query($sql); 
    } 
} 

내가 시작 시간을 설정하는 방법이나 새로 고침 페이지 countdown() 재시작을 방지하는 방법을 알아낼 질수 : 여기

function countdown() { 
    var i = (new Date().getTime()/1000) + (99 * 60); 

    setTimeout(function() { 
    $.post(\'countdown.php\',{target:i},function(data){ 
     $('#countdown').html(data); 
    }); 
    countdown(); 
    },1000); 
} 

countdown(); 

는 PHP입니다 :

여기 내 jQuery를합니다.

+1

위의 코드는 약간의 혼란을 겪었으므로 아무런 성공도하지 못했습니다. –

+0

window.onbeforeunload 및 window.onunload 사용 –

+0

자체 호출하는'setTimeout' 대신'setInterval'을 사용하십시오. – moonwave99

답변

0

보안에 대한 확신이 없지만 JS가 서버 대신 컴퓨터에서 시간을 확보하기 때문에 Javascript에서 시간을 확보하는 것이 안전하지 않습니다.

예를 들어서 게임을 할 수 있고 10 분 남았을 때까지 기다렸다가 바탕 화면에서 시간을 되돌려 재설정 할 수 있습니다. 또는 1 년 전에 롤백하고 100000 분 남았습니다!

서버 시간을 사용하는 것이 좋습니다. 여기

내가 할 것 인 것이다 :

테스트가 시작

, 유닉스 시간 + 90 분 도착. 이것은 당신에게 마지막 시간을 줄 것입니다.

PHP

if (!isset($_SESSION['end'])) { 
     $_SESSION['end'] = strtotime("+90 minutes"); 
    } 


    $remaining = $_SESSION['end'] - time(); 

    if ($remaining > 0) { 
     echo json_encode(array(
      "remaining" => $remaining 
     )); 
    } else { 
     // finished! write code here. 
    } 

그런 다음 간단한 $ .getJSON을 수행 할 수 있습니다() 나머지 초를 얻을하고 표시합니다.

"종료"시간을 유지 했으므로 사용자가 퇴장하더라도 타이머가 계속됩니다.

+0

그 대답을 주셔서 감사합니다. 기본적으로 나는 광고를 사용하는 위의 자바 스크립트 함수를 사용하여 내 PHP에 액세스하고 성공으로 $ .getJSON()을 사용하고 초에 작업 할 수 있습니다. 지금 당장 테스트 할 것입니다. . 감사합니다 –

+0

감사합니다. 나는 그것을 가지고있어. 제 생각에 시간 기록에 strtotime을 사용하지 않았다고 생각하지 않았습니다.이 방법이 더 쉬웠습니다. 단점은 사용자가 기록을 남기면 타이머가 재시작되어 피하는 법을 기억하는 것입니다. 그의 타이머 값. 그래서 그가 다시 로그온 할 때 그는 그가 원하는 것을 무엇이든 할 시간이 없다. –