@matthewstafford

Каким образом можно не дать переменной + rand() не давать обновляться при отправке формы?

Всем привет! Столкнулся всё с такой проблемой, что есть якоба игра, где пользователь должен назвать столицу, выведенной ему игры. Но после отправки формы ответ становится не правильный из-за того что рандомное число изменяется. Каким способом можно сделать это правильно, просто я уже второй день не могу разобраться.

$countries = Array(
	'1' => 'Россия',
	'2' => 'Германия'
);
$capitals = Array(
	'1' => 'Москва',
	'2' => 'Берлин'
);

$rand = rand(1,2);

$countries = $countries[$rand];
$capitals = $capitals[$rand];

if($_POST['answer'] == $capitals) {
	echo 'Ответ правильный!';
}


Сама форма:
<form action="" method="POST">
	<p>Назовите столицу <b><?php echo $countries ?></b></p>
	<input id="answer" name="answer" placeholder="Ответ..."></input>
	<button type="submit" id="submit" name="submit">Отправить</button>
</form>
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@DanKud
Во-первых присвойте текущей стране и текущей столице отдельные переменные, а не такие же как у массивов, либо вообще их уберите. А для решения вашей задачи передавайте переменную $rand в $_POST присвоив это значение кнопке или скрытому полю:

$countries = Array(
  '1' => 'Россия',
  '2' => 'Германия'
);
$capitals = Array(
  '1' => 'Москва',
  '2' => 'Берлин'
);

$rand = rand(1,2);

if(isset($_POST['rand']) && $_POST['answer'] == $capitals[$_POST['rand']]) {
  echo 'Ответ правильный!';
}

<form action="" method="POST">
  <p>Назовите столицу <b><?php echo $countries[$rand] ?></b></p>
  <input id="answer" name="answer" placeholder="Ответ..."></input>
  <button type="submit" id="submit" name="rand" value="<?php echo $rand ?>">Отправить</button>
</form>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
PavelK
@PavelK
Доброго дня.
Отправка формы вызывает выполнение скрипта, соответственно и будет обновляться.
Самое простое - сохранять в сессии (гугл на тему $_SESSION).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы