Было бы здорово, если бы вы могли помочь мне! Я пытаюсь создать простую страницу для отображения случайных математических вопросов. Ответы должны вводиться пользователем и должны быть подтверждены на той же странице, что дает ему отзывы об успехах и неудачах.
Проблема в том, что, отправив ввод формы на ту же страницу (я назвал ее «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!";}; }
?>