У меня есть эта странная проблема, когда мой PHP-тест не проверяет, является ли ответ, предоставленный пользователем, правильным. Я знаю это, потому что когда я отвечаю на что-то, что полностью отключено, оно все равно отвечает обратно сообщением if правильное и не реализует ссылку, которая должна отображаться, если ответ неверен. Сначала я думал, что это потому, что я проверял фразы в массивах, а не на отдельных словах, но после тестирования простых слов я получил тот же результат. Я относительно новичок в PHP и искал в Интернете, но я только нашел те, которые связаны с несколькими вариантами ответов, а не отправлять текстовые поля. Вот мой код:
Список массивов:
<?php
$array['one'] = "Mickey Mouse";
$array['oneone'] = "Oswald the Lucky Rabbit";
?>
Главная страница викторины:
<!DOCTYPE html>
<html>
<head>
<title>Final Quiz</title>
</head>
<body>
<?php
include("newquiz2.php");
print("{$array['one']} was modeled after what character created by the Disney Studio?<br>");
print("<form action='newquiz2check.php' method='get'>\n");
print("<input type='text' name='one'><br><br>\n");
print("<input type='submit' value='Submit Answer'>\n<br><br>");
print("</form>\n\n\n");
?>
</body>
</html>
Проверка викторины:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Answers for Quiz</title>
</head>
<body>
<?php
include("newquiz2.php");
if (metaphone($one) == metaphone($oneone)) {
$one = $array['one'];
$oneone = $array['oneone'];
print("Correct: $one was modeled after $oneone");
print("<p><a href='newquiz2ask.php'>Play again </a><br><br>");
}
else{print("<a href='newquiz2ask.php'>Back to home </a><p>\n");}
?>
</body>
</html>
Все остальное работает кроме этого. Я должен использовать @GET
присвоить переменную массивам или как? Я не совсем уверен, что именно так вы проверяете текстовые поля для отправки.
Викторина очень широкое применение но исходя из твоей попытки и исходя из комментариев, у меня есть кое-что для тебя (ОЧЕНЬ ОСНОВНОЙ основанный на массиве тест).
questions.php
<?php
$questions = array(
array("question"=>"Question number 1", "answer"=>"ans1"),
array("question"=>"Question number 2", "answer"=>"ans2"),
array("question"=>"Question number 3", "answer"=>"ans3"),
);
?>
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
require_once 'questions.php';
?>
<form method="post" action="check.php">
<?php
$random_index = array_rand($questions,1); //gives you only one question index from 3 question list
?>
<label><?php echo $questions[$random_index]['question']; ?></label><br>
<input name="answer" type="text" /><br>
<input type="hidden" name="index" value="<?php echo $random_index; ?>" />
<input type="submit" value="submit answer" />
</form>
</body>
</html>
check.php
<?php
require_once 'questions.php';
$entered_answer = $_POST['answer']; //Form input named as answer
$index = $_POST['index'];
if($entered_answer==$questions[$index]['answer']){
echo "Correct answer";
}
else{
echo "Incorrect answer";
}
//Redirect link
?>
Основываясь на вашей попытке, я создал три файла, index.php
, questions.php
а также check.php
, Попробуйте создать эти файлы и запустите index.php. Смотрите ответы в массиве и ставьте правильные и неправильные ответы.
Для массива PHP индекса массива пока достаточно, но если вы хотите сохранить вопросы и ответы в своей БД, то вам нужно иметь идентификатор первичного ключа, чтобы получить ответ и сравнить ответ.
Других решений пока нет …