Member 8057273 Ответов: 0

Обновление страницы 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']))
{

}

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

0 Ответов