Я новый кодер, и я пытаюсь написать код для простой математической игры, в которой вы должны указать значение второго целого, чтобы получить сумму.
У меня это так, что пользователь отправляет свой ответ через форму, и я хочу, чтобы он проверил ответ, и если он неправильный, он отобразит правильный ответ. У меня проблема в том, что после того, как пользователь отвечает на вопрос, загружается новый и код проверяет ответ на новый вопрос вместо старого, отображая ответ на новый вопрос.
Например, если сумма 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']);
}
}
?>
Проблема в том, что вы регенерируете $val1
а также $val2
еще раз, прежде чем проверять их ответ.
Допустим, на первой странице загрузки $val1 = 1
а также $val2 = 2
,
На экранах должно быть что-то похожее 1 + ? = 3
,
Пользователь (правильно) отвечает 2
и отправляет форму. PHP запускается с нуля каждый раз, когда вы запускаете скрипт, поэтому первое, что он сделает, — это сгенерирует $val1 = 5
а также $val2 = 3
, Это имеет изменено ответ. Это больше не правильно.
Так что в основном вам нужно сохранить $val1
а также $sum
в вашей форме (возможно, в виде скрытых полей), чтобы вы могли ссылаться на них при проверке ответов. Когда REQUEST_METHOD
является POST
— читать из тех, вместо создания новых.
Как вы уже могли представить, вашей программе необходимо запоминать значения случайных чисел между двумя запросами. Чтобы достичь этого, вы можете использовать сессионные переменные. Переменная сеанса может быть доступна во время нескольких запросов, пока не истечет время сеанса.
http://php.net/manual/en/session.examples.basic.php
Вы уже передаете результат своей игры переменной сеанса:
$_SESSION['value2'] = $val2;
Но этого недостаточно
session_start();
if
Для сравнения, вместо вновь созданного значения используйте переменную сеанса (чтобы вы сравнивали ее со значением предыдущего запроса)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;