Переменная обратного отсчета на многих страницах - PullRequest
1 голос
/ 28 июня 2011

У меня есть демонстрационный веб-сайт для электронного теста, где каждому студенту предоставляется 15 минут на весь экзамен (который состоит из 5 предметов, по 10 вопросов в каждом).Я хочу, чтобы, сразу же после того, как студент нажал START на домашней странице, таймер обратного отсчета должен запуститься и автоматически обновиться.На самом деле, это легко сделать для одной страницы.

Проблема в том, что если студент нажимает, чтобы перейти на следующую страницу, я хочу, чтобы таймер начинался с того места, где он остановился на предыдущей странице, и продолжал обратный отсчет.
Я думал об использовании SESSIONS, но тогда как мне заставить Javascript установить переменную SESSION в PHP?Идея заключалась в том, чтобы использовать AJAX, но я не знаю, как это сделать.

Может ли кто-нибудь мне помочь, даже если для этого требуется что-то отличное от AJAX?

PS:
То, что я хочу отображать, это количество оставшихся секунд, а не текущее время.

Спасибо.

Ответы [ 5 ]

2 голосов
/ 28 июня 2011

Вам не нужно знать, где он остановился на другой странице.

Вы просто хотите знать, когда пользователи нажали кнопку запуска.

Просто сохраните это в базе данных или файлечётное.

И при каждом запросе вычисляйте время, оставшееся на СЕРВЕРЕ.

Поскольку клиентом легко манипулировать.сделайте обратный отсчет, используя javascript на каждой странице.

1 голос
/ 28 июня 2011

Я нашел простой способ сделать это с помощью небольшого поиска. Здесь

PHP:

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

Тогда на каждой странице:

<script type="text/javascript">
    var startTime = <?php echo $_SESSION['start_time']; ?>;
    //calculate remaining time
</script>
0 голосов
/ 28 июня 2011

Простой, вы сохраняете временную метку, когда студент впервые начал тестирование, и выводите ее на каждую страницу.Тогда достаточно просто вычесть текущее время из этой временной метки, чтобы получить истекшее время.

Однако использование 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...

Важно никогда не сбрасывать значение метки времени в сеансе после его установки.В противном случае тестируемый может просто щелкнуть мышью, пока не достигнет страницы, где счетчик сбрасывается, и у него может быть больше времени для теста.

0 голосов
/ 28 июня 2011

Вы можете просто поместить страницы в IFrames и таймер обратного отсчета на главной странице.

0 голосов
/ 28 июня 2011

Вы можете использовать алгоритм, подобный следующему:

  1. Когда происходит событие «start», сохраните время начала в базе данных.
  2. Периодически отправляйте запросы AJAX в бэкэнд-скрипт,Если время истекло, верните ответ, который завершает тест.

В этом случае нет реального «таймера» - просто время начала и логика, чтобы проверить, прошло ли 15 минутС этого момента.Если вы хотите отобразить таймер для пользователя, математика будет простой.

...