Как отобразить ранее назначенную переменную из прошлого сеанса

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

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

Например, если сумма int 1 и int 2 равна 30, а значение int 1 равно 20, значение int 2 должно быть равно 10, что пользователь и отправил бы в форму.

Я хочу, чтобы он отображал «правильно» или, если пользователь ошибся, то «правильный ответ равен 10», но это не так, потому что после того, как пользователь отвечает на вопрос, он проверяет ответ на новый сгенерированный вопрос и завершает работу. до отображения «правильный ответ — 20» или любого другого нового значения int 2. Я не знаю, как заставить его оценить ответ на старый вопрос, поскольку переменные перезаписываются новым вопросом.

<?php
echo "<h2 id='heading'>php program to add two numbers...</h2><br />";
$val1 = rand(1, 100);
$val2 = rand(1, 100);

$sum = $val1 + $val2;   /* Assignment operator */
echo "Result(SUM): $sum";
echo "<img src='math.jpg' alt='math' height='200' width='200'>";
echo "<h2>If val1 : $val1, what is val2</h2>";
echo "<form method = 'post'><input type='text' id='val2' name='val2' onChange='preventDefault();validateForm();'></form>";

if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
echo ('The Value You Choose Was: ' . $_POST['val2'] . '<br/>');
$_SESSION['value2'] = $val2;

if ($_POST['val2'] == $val2 && isset($_POST['val2'])) {
echo 'You Answered Correctly';
} elseif(isset($_POST['val2'])) {
echo ('Wrong the correct answer was: ' . $_SESSION['value2']);
}
}
?>

0

Решение

Проблема в том, что вы регенерируете $val1 а также $val2 еще раз, прежде чем проверять их ответ.

Допустим, на первой странице загрузки $val1 = 1 а также $val2 = 2,
На экранах должно быть что-то похожее 1 + ? = 3,

Пользователь (правильно) отвечает 2 и отправляет форму. PHP запускается с нуля каждый раз, когда вы запускаете скрипт, поэтому первое, что он сделает, — это сгенерирует $val1 = 5 а также $val2 = 3, Это имеет изменено ответ. Это больше не правильно.

Так что в основном вам нужно сохранить $val1 а также $sum в вашей форме (возможно, в виде скрытых полей), чтобы вы могли ссылаться на них при проверке ответов. Когда REQUEST_METHOD является POST — читать из тех, вместо создания новых.

0

Другие решения

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

http://php.net/manual/en/session.examples.basic.php

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

$_SESSION['value2'] = $val2;

Но этого недостаточно

  1. начать сеанс с session_start();
  2. в вашем if Для сравнения, вместо вновь созданного значения используйте переменную сеанса (чтобы вы сравнивали ее со значением предыдущего запроса)
  3. назначьте переменную сеанса после вашего if сравнение (в противном случае переменная сеанса будет иметь новый случайный номер вместо предыдущего)

Окончательный код (не проверено):

<?php
session_start();
echo "<h2 id='heading'>php program to add two numbers...</h2><br />";
$val1 = rand(1, 100);
$val2 = rand(1, 100);

$sum = $val1 + $val2;   /* Assignment operator */
echo "Result(SUM): $sum";
echo "<img src='math.jpg' alt='math' height='200' width='200'>";
echo "<h2>If val1 : $val1, what is val2</h2>";
echo "<form method = 'post'><input type='text' id='val2' name='val2' onChange='preventDefault();validateForm();'></form>";
if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
echo ('The Value You Choose Was: ' . $_POST['val2'] . '<br/>');

if (isset($_POST['val2']) && $_POST['val2'] == $_SESSION['value2']) {
echo 'You Answered Correctly';
} elseif(isset($_POST['val2'])) {
echo ('Wrong the correct answer was: ' . $_SESSION['value2']);
}
}
$_SESSION['value2'] = $val2;
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector