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

в последнее время я столкнулся с проблемой при настройке викторины на 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 в 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>

Мы предполагаем, что у вас есть <input name = "currentQuestion"> в форме. Можете ли вы опубликовать соответствующую часть HTML-формы, которая отправляет следующий вопрос и отслеживает состояние последнего? Я хотел бы отметить, что $_SESSION, вероятно, более подходит для использования здесь для отслеживания состояния вопроса на стороне сервера, чем полагаться на отправленную форму.

Michael Berkowski 02.05.2018 15:01

заголовок должен быть помещен в функцию перед любым html-кодом. Поместите это в функцию, поэтому

surge10 02.05.2018 15:02

Используйте правильное форматирование и отступы кода. Если бы вы это сделали, вы бы увидели, что if ($currentQuestion == 3) { будет проверяться только в том случае, если $_POST["currentQuestion"] не установлен, поэтому для $currentQuestion будет установлено значение 0.

aynber 02.05.2018 15:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

Большое спасибо за ваш код и объяснение Томаса. Я понимаю цель наличия заголовка перед выполнением кода проверки. И отступы - это моя вина, когда я делал отступ здесь, чтобы разместить код, я не сохранил правильные отступы

user9453652 02.05.2018 15:25

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

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


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

Сначала вы запускаете $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){

?

Ах, большое спасибо за такое объяснение, хотя оно намного яснее и легче для понимания того, к чему мне нужно было добраться.

user9453652 02.05.2018 15:22

Другие вопросы по теме