Как проверить ввод формы на одной странице с помощью случайных чисел?

Было бы здорово, если бы вы могли помочь мне! Я пытаюсь создать простую страницу для отображения случайных математических вопросов. Ответы должны вводиться пользователем и должны быть подтверждены на той же странице, что дает ему отзывы об успехах и неудачах.

Проблема в том, что, отправив ввод формы на ту же страницу (я назвал ее «form6.php»), перезагружается страница и создается новый набор чисел – поэтому переменная «решение» определена и не может быть использована для проверки точности ответа пользователя.

Это код, который я до сих пор (отлично работает для фиксированных номеров, но не работает с генерацией случайных чисел):

<?php $number1 = rand(1,100); $number2 = rand(1,100); $solution = $number1+$number2; echo "$number1+$number2=?"; ?> <form action="form6.php" method="post"> Your Answer:<br> <input type="integer" name="answer"> <input type="Submit" value="Submit!"> </form> <?php if(isset($_POST['answer'])){ if ($_POST["answer"] == $solution) {echo "That's right";} else {echo "That's wrong!";}; } ?> 

Любая помощь высоко ценится! Поскольку я не профессиональный кодер, чем более конкретным вы можете получить, тем лучше!

Форма POST ed перезагрузит ваш PHP-скрипт, в результате чего будут созданы 2 новых числа rand() . Вы захотите передать решение в форме.

Изменить: я обновил ответ, чтобы показать быстрое решение для использования случайных операндов для проверки. Это было просто сделано путем переключения случайного целого числа. Обратите внимание, что при использовании - или / вы можете получать нецелые числа ( 3 / 58 или 15 - 86 ), поэтому для предотвращения этого может потребоваться добавить пользовательскую логику.

 <?php $number1 = rand(1,100); $number2 = rand(1,100); switch(rand(0,3)) { case 0: $solution = $number1 + $number2; echo "$number1+$number2=?"; break; case 1: $solution = $number1 - $number2; echo "$number1-$number2=?"; break; case 2: $solution = $number1 * $number2; echo "$number1*$number2=?"; break; case 3: $solution = $number1 / $number2; echo "$number1/$number2=?"; break; } ?> <form action="form6.php" method="post"> Your Answer:<br><input type="integer" name="answer"> <input type="hidden" name="solution" value="<?php echo $solution; ?>"> <input type="Submit" value="Submit!"> </form> <?php if(isset($_POST['answer']) && isset($_POST['solution'])) { if ($_POST["answer"] == $_POST['solution']) { // Valid } else { // Incorrect } } ?> 

Если вы не хотите включать решение в свою форму (будь оно скрыто), вам необходимо хранить решения в отдельном текстовом файле, в котором вы можете, например, сериализовать свои данные.

Кроме того, вы можете использовать сеансы или файлы cookie.

Но вы должны где-то хранить решение.

Вот попытка сеансов:

 <?php session_start(); $nb1 = rand(1,100); $nb2 = rand(1,100); $_SESSION['number1'] = $nb1; $_SESSION['number2'] = $nb2; $_SESSION['solution'] = $nb1 + $nb2; // (...) if(isset($_POST['answer'])) { if ($_POST["answer"] == $_SESSION['solution']) {echo "That's right";} else {echo "That's wrong!";}; unset($_SESSION['nb1']); unset($_SESSION['nb2']); unset($_SESSION['nbsolution']); } с <?php session_start(); $nb1 = rand(1,100); $nb2 = rand(1,100); $_SESSION['number1'] = $nb1; $_SESSION['number2'] = $nb2; $_SESSION['solution'] = $nb1 + $nb2; // (...) if(isset($_POST['answer'])) { if ($_POST["answer"] == $_SESSION['solution']) {echo "That's right";} else {echo "That's wrong!";}; unset($_SESSION['nb1']); unset($_SESSION['nb2']); unset($_SESSION['nbsolution']); } с <?php session_start(); $nb1 = rand(1,100); $nb2 = rand(1,100); $_SESSION['number1'] = $nb1; $_SESSION['number2'] = $nb2; $_SESSION['solution'] = $nb1 + $nb2; // (...) if(isset($_POST['answer'])) { if ($_POST["answer"] == $_SESSION['solution']) {echo "That's right";} else {echo "That's wrong!";}; unset($_SESSION['nb1']); unset($_SESSION['nb2']); unset($_SESSION['nbsolution']); } с <?php session_start(); $nb1 = rand(1,100); $nb2 = rand(1,100); $_SESSION['number1'] = $nb1; $_SESSION['number2'] = $nb2; $_SESSION['solution'] = $nb1 + $nb2; // (...) if(isset($_POST['answer'])) { if ($_POST["answer"] == $_SESSION['solution']) {echo "That's right";} else {echo "That's wrong!";}; unset($_SESSION['nb1']); unset($_SESSION['nb2']); unset($_SESSION['nbsolution']); } 
 if(isset($_POST['answer'])===true){ if ($_POST["answer"] == $solution) {echo "That's right";} else {echo "That's wrong!";}; } 

Если вы используете isset($_POST['answer']) вы должны включить === true в конец. Также убедитесь, что вы используете вместо integer.

@ User3261573,

Как указано @Sam, вы можете передать значение в скрытом поле, но, как сказал @Jivan, лучший подход будет использовать сеанс для хранения решения.

Вот код:

П .: Я упростил код для лучшего понимания.

 <?php // Initiate session session_start(); // If the FORM has been submited, verify answer if( isset($_SESSION['solution']) === TRUE && $_SESSION['solution'] !== NULL && isset($_POST['answer']) === TRUE && isset($_POST['solution']) == TRUE ){ if( $_SESSION['solution'] == $_POST['answer'] ){ echo 'That\'s right'; }else{ echo 'That\'s wrong'; } } // If the FORM ain't submited yet, display the question else{ // Random numbers $number1 = rand(1,100); $number2 = rand(1,100); // Store solution in session for further comparison $_SESSION['solution'] = $number1+$number2; // Echo question echo "$number1+$number2=?"; echo '<form action="form6.php" method="post"> Your Answer:<br> <input type="integer" name="answer"> <input type="Submit" value="Submit!"> </form>'; } ?> 

Если вам это нравится, вот несколько руководств по использованию PHP SESSION s:

http://www.w3schools.com/php/php_sessions.asp http://www.php.net/manual/en/session.examples.basic.php

 <?php $number1 = rand(1,100); $number2 = rand(1,100); echo "$number1+$number2=?"; ?> <form action="form6.php" method="post"> Your Answer:<br> <input type="integer" name="answer"> <input type="Submit" value="Submit!"> <input type="hidden" name="n1" value="$number1"> <input type="hidden" name="n2" value="$number2"> </form> <?php if(isset($_POST['answer'])){ $solution = $_POST['n1'] + $_POST['n2']; if ($_POST["answer"] == $solution) {echo "That's right";} else {echo "That's wrong!";}; } 

?>