2013-09-04 3 views
-1

Я пытался создать простую страницу php, на которой пользователь отвечает на два вопроса, чтобы продолжить. Мой код:Ответ на два вопроса, чтобы продолжить дальше

<?php 

if (!isset($_POST['answer1']) OR $_POST['answer1'] != "blue") 
    { 
    ?> 
    <form action="index.php" method="post"> 
    <p>What color is the sky ?</p> 
    <input type="text" name="answer1"> 
    <input type="submit" value="Send"> 
    </p> 
    <?php } 
    else { 
     if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white") 
    { 
    ?> 
     <form action="index.php" method="post"> 
     <p>What color is the milk ?</p> 
     <input type="text" name="answer2"> 
     <input type="submit" value="Send"> 
     </p> 
    <?php } 
    else { 
     echo 'Congratulation !'; 
    } 
    } 

>

При ответе на первый вопрос, отображается второй?. Но, отвечая на второй, он возвращает меня к первому вопросу и не показывает поздравительное сообщение. Может кто-нибудь сказать мне, что происходит не так? Заранее спасибо.

+0

Это потому, что '$ _POST ['answer1']' не установлен. Итак, ваше первое условие истинно, и ваш код никогда не достигнет «лакомого». –

+0

Хорошо, и каково было бы решение? Вложенное if/else, которое я использовал, не может быть использовано так? – Benistar

+0

Я добавил ответ, в котором вы должны немного изменить свои предложения if/else (всегда начинайте с самого сильного) –

ответ

0

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

Если вы хотите сделать это с помощью одной страницы, вы можете добавить как поля ввода на одной странице, а затем переслать пользователя, только если оба ответа верны.

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

+0

Конечно, у меня есть другое решение. Я могу использовать несколько php-страниц. Но я хотел сделать это в одном. – Benistar

0

Ваша ошибка его общая, ее логическая ошибка:

В первом IF statetment у спросить, если POST answer1 существует или доцент, если его синий цвет.

Но .. когда у subbmit 2-й формы, запрашивающих оленья кожа у выставиться в ANSWER1, так .. его обратно в первый, если ..

Ваше решение его просто:

else { 
    if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white") 
{ 
?> 
    <form action="index.php" method="post"> 
    <p>What color is the milk ?</p> 
    <input type="hidden" name="answer1" value="blue"> <--- add this line to skip the first if uin the second submit 
    <input type="text" name="answer2"> 
    <input type="submit" value="Send"> 
    </p> 
<?php } 
else { 
    echo 'Congratulation !'; 
} 
+0

Отлично! Спасибо!..Могу ли я использовать это, когда хочу использовать больше вопросов для достижения конечной цели, или это не рекомендуется, и лучше использовать другой метод? – Benistar

+0

лучший способ сделать это добавить скрытое поле для шага, поэтому в IF вы просто добавите if ($ _ POST ["step"] == 1 && ... и установите скрытое значение с шагом, где u r. – Quaid

0

Это работает просто добавить скрытое поле во второй форме

<?php 

if (!isset($_POST['answer1']) OR $_POST['answer1'] != "blue") 
    { 
    ?> 
    <form action="index.php" method="post"> 
    <p>What color is the sky ?</p> 
    <input type="text" name="answer1"> 
    <input type="submit" value="Send"> 
    </p> 
    <?php } 
    else { 
     if (!isset($_POST['answer2']) OR $_POST['answer2'] != "white") 
    { 
    ?> 
     <form action="index.php" method="post"> 
     <p>What color is the milk ?</p> 
     <input type="hidden" name="answer1" value="blue"> 
     <input type="text" name="answer2"> 
     <input type="submit" value="Send"> 
     </p> 
    <?php } 
    else { 
     echo 'Congratulation !'; 
    } 
    } 
?> 
0

Если вы не хотите, чтобы изменить вашу форму структуры изменить если/другие пункты:

<?php 
    if(isset($_POST['answer2']) && $_POST['answer2'] == "white") 
    { 
     echo 'Congratulation !'; 
    } else if((isset($_POST['answer1'] && $_POST['answer1'] == "blue") || (isset($_POST['answer2'] && $_POST['answer2'] != "white")) 
    { ?> 
    <form action="index.php" method="post"> 
     <p>What color is the milk ?</p> 
     <input type="text" name="answer2"> 
     <input type="submit" value="Send"> 
    </form> 
    <?php } else { ?> 
    <form action="index.php" method="post"> 
     <p>What color is the sky ?</p> 
     <input type="text" name="answer1"> 
     <input type="submit" value="Send"> 
    </form> 
    <?php } ?> 
0

Изменить это:

!isset($_POST['answer1']) OR $_POST['answer1'] != "blue" 

к этому:

(!isset($_POST['answer1']) OR $_POST['answer1'] != "blue") && !isset($_POST['answer2']) 

добавление ANSWER2 как требование не будет установлен в первый условный даст перейти к следующему, когда второй формы.

0

Вы всегда можете передать переменную третьей проверки, такие как:

if(isset($_POST['completed'] && $_POST['completed'] == true){ 

    echo "Congratulations"; 
    exit(); 
} 

Положи выше других утверждений, так что это первая вещь, проверено.

Смежные вопросы