В последнее время я столкнулся с проблемой при настройке теста в 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>
Это правильный порядок для проверки условий.
$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, то я выхожу;
Если это не так, я проверяю, правильный ли это ответ;
Если это не так, я выхожу снова
Обратите внимание, что отступы в вашем коде не только эстетичны, но и избавят вас от головной боли
Это не ответ. Правильный ответ дал Лелио.
Это кратко описывает мышление для решения такого рода проблем.
Давайте проанализируем ваш код …
Сначала вы инициируете $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){
?