Почему, когда счетчик равен трем, он не перенаправляет страницу?

В последнее время я столкнулся с проблемой при настройке теста в 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..");
}}

Мне удалось установить его на ноль, чтобы вернуться к первоначальному первому вопросу. Я также смог изменить его на любой номер счетчика, и при неправильном ответе меня выпадет на вопрос, соответствующий счетчику. Я также попытался разместить остальное, если в 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>

0

Решение

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

$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, то я выхожу;
Если это не так, я проверяю, правильный ли это ответ;
Если это не так, я выхожу снова

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

1

Другие решения

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

Это кратко описывает мышление для решения такого рода проблем.


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

Сначала вы инициируете $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 (т. Е. Имеет значение SET, равное 3), и снова прочитайте выше.

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

    if($currentQuestion==3){

?

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector