Почему, когда счетчик равен трем, он не перенаправляет страницу? - PullRequest
0 голосов
/ 02 мая 2018

В последнее время я столкнулся с проблемой при настройке теста в PHP. У меня есть тест, настроенный с использованием счетчика, который затем используется для проверки ответа, например, если вопрос правильный, счетчик поднимается на единицу, чтобы перейти к следующему вопросу. В конце викторины я хотел сказать, что после того, как на все вопросы ответят, вы перенаправите страницу. Чтобы достичь этого, я подумал, что самый простой способ - установить еще один оператор else{ if{}}, который говорит, когда $currentQuestion==3, чтобы перенаправить страницу. Как только счетчик достигает трех, он не перенаправляет страницу. Вот пример:

$currentQuestion = 0;
if(isset($_POST["currentQuestion"])){
$currentQuestion = $_POST["currentQuestion"];
if($_POST["guess"] == $questionsAndAnwsers[$currentQuestion] ["answer"]){
     $currentQuestion++;
     print("Answer Correct<br>");
     print("Next Question Below<br><br>");
   } 
   else {
   $currentQuestion=0;
     print("You have failed..");
   }}
   else{
  if($currentQuestion==3){
  header("Location:   http://students.purchase.edu/martin.mcnicholas/scriptingfortheweb/index2. html"); /* Redirect browser */
exit();
  }
  }

В кулак я подумал, что, может быть, он не узнает номер счетчика, как показано выше:

else {
$currentQuestion=0;
 print("You have failed..");
 }}

Мне удалось установить его на ноль, чтобы вернуться к первоначальному первому вопросу. Я также смог изменить его на любой номер счетчика, и, если я отвечу неправильно, я выпаду на вопрос, соответствующий счетчику. Я также попытался поместить else, если он внутри if(isset($_POST["currentQuestion"])){, но это полностью нарушает мою программу.

Часть кода, содержащая html:

// current question
$currentQuestion = 0;
if(isset($_POST["currentQuestion"])){
 $currentQuestion = $_POST["currentQuestion"];
 if($_POST["guess"] == $questionsAndAnwsers[$currentQuestion]["answer"]){
     $currentQuestion++;
     print("Answer Correct<br>");
     print("Next Question Below<br><br>");
   } 
   else {
   $currentQuestion=0;
     print("You have failed..");
   }}
   else{
  if($currentQuestion==3){
  header("Location: http://students.purchase.edu/martin.mcnicholas/scriptingfortheweb/index2.html"); /* Redirect browser */
exit();
 }
}
?>
<form method="POST" action="">
<label for="question"><?php echo ($currentQuestion+1).". ".   $questionsAndAnwsers[$currentQuestion]["question"];?></label>
<input type="hidden" name="currentQuestion" value="<?php echo $currentQuestion;?>">
<input type="text" name="guess" value="" placeholder="Answer...">
<input type="submit" value="Next Question">
</form>

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Это не ответ. Правильный ответ дал Лелио.

Это кратко описывает мышление, чтобы решить такую ​​проблему.


Давайте проанализируем ваш код ...

Сначала вы инициализируете $currentQuestion и устанавливаете его в 0

$currentQuestion = 0;

Затем вы проверяете, установлена ​​ли переменная POST currentQuestion

if(isset($_POST["currentQuestion"])){

Остальное (таким образом, если и только если переменная POST currentQuestion НЕ установлена) ...

}else{

... вы делаете следующее

    if($currentQuestion==3){
        header("Location:   http://students.purchase.edu/martin.mcnicholas/scriptingfortheweb/index2. html"); /* Redirect browser */
        exit();
    }

правый

Итак, теперь посмотрим, что ваша переменная POST = 3 (т. Е. Установлено в значение 3), и снова прочитайте выше.

Как вы ожидаете, что он прибудет в:

    if($currentQuestion==3){

0 голосов
/ 02 мая 2018

Это правильный порядок проверки условий.

$currentQuestion = 0;
if(isset($_POST["currentQuestion"])){
    $currentQuestion = $_POST["currentQuestion"];
    if($currentQuestion==3){
        header("Location:   http://students.purchase.edu/martin.mcnicholas/scriptingfortheweb/index2. html"); /* Redirect browser */
        exit();
    }else if($_POST["guess"] == $questionsAndAnwsers[$currentQuestion] ["answer"]){
        $currentQuestion++;
        print("Answer Correct<br>");
        print("Next Question Below<br><br>");
    }else{
        $currentQuestion=0;
        print("You have failed..");
    }
}

Сначала я получаю значение currentQuestion. Если это = 3, то я выхожу; Если это не так, я проверяю, правильный ли это ответ; Если это не так, я выхожу снова

Обратите внимание, что отступы в вашем коде не только эстетичны, но и избавят вас от головной боли

...