Как синхронизированные html-формы, подобные тем, с которыми вы сталкиваетесь при проведении онлайн-тестов, правильно кодируются с использованием PHP, MySQL, HTML, CSS и JavaScript? - PullRequest
0 голосов
/ 15 июня 2010

Другими словами, какая технология позаботится о отслеживании времени? Будет ли это JavaScript? Я не вижу возможности отслеживать такие вещи с помощью PHP.

Вот что мне нужно сделать:

  • Мне нужна длинная форма, охватывающая многие перезагрузки веб-страницы, потому что это в значительной степени онлайн-тест, в котором при каждой загрузке страницы отображается новый вопрос. Однако вся форма, составляющая один тест, имеет ограничение по времени. По истечении времени, если рассматриваемый пользователь не завершил тест, он / она не может отправить частично завершенный тест или попытаться выполнить весь тест заново в течение одного дня (календарной даты или с 12/24 часами между .) Однако пользователь может вернуться на следующий день и попытаться снова завершить весь тест в течение отведенного времени. Я знаю, что добавил много деталей, и я сделал это только для того, чтобы показать контекст, тем не менее, главная трудность для меня заключается в том, как выполнить функцию истечения времени. То есть, так или иначе, в серии страниц, которые составляют форму, представляющую собой онлайн-тест, я хочу отслеживать время, начиная с первого вопроса (загрузка одной страницы) и по истечении времени для отключения теста.

Кто-нибудь когда-нибудь делал это? Кто-нибудь есть какие-нибудь советы для меня, как это сделать? Любой совет, который я могу получить, будет полностью оценен заранее.

Ответы [ 3 ]

2 голосов
/ 15 июня 2010

Если вы отслеживаете время на стороне клиента - всегда проверяйте его на стороне сервера .

Никогда не доверяйте клиенту, чтобы он проверил время. Как упоминалось в комментариях, проверка времени на стороне клиента хороша только для косметических функций, но не для фактической проверки.

Самый простой способ сделать это - добавить в форму уникальный токен (который не может быть подделан) при первой навигации. Куки или любой другой метод управления сессиями, который вы получаете из вашей платформы, будет достаточным.

При отправке формы вы можете сначала проверить это на стороне клиента и вернуть ошибку, если прошло время, даже до фактической отправки формы. В случае успеха отправьте форму и убедитесь, что вы подтвердили токен при обработке на сервере.

1 голос
/ 15 июня 2010

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

Я не знаю, какую серверную среду вы используете, но в ней почти наверняка есть какая-то инфраструктура управления сеансами. Чтобы надежно контролировать среду тестирования, вы должны управлять этим со стороны сервера.

1 голос
/ 15 июня 2010

Есть два способа измерить «время, которое они провели» в форме.

  1. Когда первая страница формы обрезается, в PHP создайте переменную сеанса, содержащую дату. Когда они заканчивают форму, вы вычитаете текущую дату из начальной даты. Это дает вам общее время, которое потребовалось с момента подачи и заполнения формы. Однако это не на 100% точно, поскольку возможны простои по другим причинам, таким как медленный интернет.
  2. У вас может быть JavaScript, записывающий время на этой странице (я ответил, как это сделать здесь: здесь ). Используя AJAX, это время можно отправить таким способом или с помощью сообщений GET. Тогда время будет как-то сохраняться PHP и добавляться в итоге.

Надеюсь, это поможет! Просто спросите, хотите ли вы пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...