Обновление страницы MCQ создает проблему
Я заканчиваю работу с веб-сайтом экзамена на основе MCQ, который содержит базу данных, как показано ниже:
Qnum Ques Op1 Op2 Op3 Op4 Correct_answer -------------------------------------------------------- 1 blabla aaa bbb ccc ddd Op1 2 eeeeee fff ggg hhh hhh Op1
Примечание: На самом деле значения поля правильного ответа хранятся в кодированном виде через md5();
Я хочу проверить, нажал ли пользователь кнопку отправки или обновил страницу, чтобы решить, следует ли извлекать следующий вопрос или текущий вопрос должен быть воспроизведен повторно.
С помощью следующего кода я проверил это:
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true)); if(isset($_SESSION['LastRequest']) && $_SESSION['LastRequest'] == $RequestSignature) { $_SESSION['reqstat']='refresh'; echo '<script>alert("This was a refresh")</script>'; } else { $_SESSION['qnum'] = $_SESSION['qnum']+1; //$_SESSION['md5v'] = $_POST['ans']; if($_POST['ans'] == "op1") { echo '<script>alert("Its East")</script>'; $v = "Op1"; if(md5($v) == $_POST['hids']) { $_SESSION["trueans"]=$_SESSION["trueans"]+1; } } if($_POST['ans'] == "op2") { echo '<script>alert("Its West")</script>'; $v = "Op2"; if(md5($v) == $_POST['hids']) { $_SESSION["trueans"]=$_SESSION["trueans"]+1; } } if($_POST['ans'] == "op3") { echo '<script>alert("Its North")</script>'; $v = "Op3"; if(md5($v) == $_POST['hids']) { $_SESSION["trueans"]=$_SESSION["trueans"]+1; } } if($_POST['ans'] == "op4") { echo '<script>alert("Its South")</script>'; $v = "Op4"; if(md5($v) == $_POST['hids']) { $_SESSION["trueans"]=$_SESSION["trueans"]+1; } } $_SESSION['reqstat']='newrequest'; $_SESSION['LastRequest'] = $RequestSignature; }
Проблема:
Поскольку оба вопроса имеют одинаковые параметры, при попытке перейти к вопросу 3 каждый раз учитывается обновление страницы. Я думаю, это потому, что при прыжке с Qnum 1 на Qnum2 правильный ответ-Op1, а затем при прыжке с Qnum 2 на Qnum 3 снова правильный ответ-Op1. Это означает, что подписи запроса совпадают, поэтому он считается обновлением.
Как я могу решить эту проблему?
Что я уже пробовал:
if(isset($_SESSION['LastRequest']) && $_SESSION['LastRequest'] == $RequestSignature !isset($_POST['submit'])) { }
Но это продолжает работать всегда, потому что обратный отсчет предыдущего вопроса все еще засчитывается.