2014-01-30 5 views
1

Я пытаюсь создать простую математическую викторину с использованием PHP. Он предназначен для генерации двух случайных чисел для умножения пользователя. Если пользователь набирает правильный ответ, он должен перенаправить их на поздравительную страницу html (используя заголовок). Однако, если они ошибочно принимают , вопрос должен быть изменен на сообщение, указывающее так, и дает им еще один шанс ответить на него.Сохранение, перенаправление и перезагрузка

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

+0

Обратите внимание, что '$ _SERVER ['PHP_SELF']' уязвим для инъекции кода. Используйте что-то еще. – Linblow

ответ

2

Ваш код предполагает, вы передаете $ num1 и $ num2 в $ _POST, но нет никаких скрытых полей для них:

<input type = "hidden" name = "num1" value="<?php echo $num1; ?>"/> 
<input type = "hidden" name = "num1" value="<?php echo $num2; ?>"/> 

После добавления этих входов, вопрос должен появиться правильно.

Для правильного ответа на запись необходимо учитывать, что в переменной $ answer хранится результат умножения случайных чисел, а не те, которые были отправлены. Вы можете попробовать следующее в начале кода:

if (!isset($_POST['num1'])) { 
    $num1 = Rand(1,10); 
    $num2 = Rand(1,10); 
} else { 
    $num1 = $_POST['num1']; 
    $num2 = $_POST['num2']; 
} 
$answer = $num1 * $num2; 
+0

Спасибо за комментарий. У меня на самом деле есть те точные две строки в моем текущем коде, но я их отредактировал, прежде чем отправлять код сюда и забыл удалить соответствующий код POST. Во всяком случае, это все равно не работает. – Alex

+0

Что именно это получается неправильно? Отображает ли это сообщение «вы ошибаетесь»? Он отображает вопрос со старыми цифрами? Как было сказано, я ожидал бы, что значение входного ответа будет неправильным, поскольку вы умножаете случайно генерируемые переменные $ num1 и $ num2, а не опубликованные. –

+0

«Вы ошибаетесь», действительно отображается, и еще один шанс дать правильный ответ. Но сценарий, похоже, не хранит и не сравнивает исходный ответ с ответом пользователя. Поэтому, если пользователь впервые вводит неправильный ответ, затем получает «вы ошибаетесь» и пытается снова ввести ответ, реальный (начальный ответ) уже изменился с момента нажатия кнопки «Отправить». В принципе, мне нужно предотвратить его изменение. – Alex

Смежные вопросы