使用文本框输入的简单PHP测验

时间:2017-02-13 14:48:50

标签: php

我正在寻找使用PHP实现一个非常简单的测验,我正在努力寻找任何其他复制的例子。我对各种解决方案持开放态度,但要求如下:

  • 测验发生在一个页面上;
  • 一次出现一个问题,用户只有在正确回答当前问题时才能看到下一个问题;
  • 所有问题类型都是“简答”,用户需要在文本框中输入正确的答案。

我一直试图根据用户的答案使用PHP条件语句(if / else)找到解决方案,我的当前代码如下所示:

<form method="POST" action="">
<label for="question01">1. How many sides does a triangle have?</label>
<input type="text" name="guess01" value="">
<input type="submit">
</form>
<?php  
// Process Question 1 Form
$guess01 = $_POST['guess01'];
$guess01 = strtolower($guess01);
$answer01 = "three";

if ($guess01 == $answer01)
{
?>
<p>Correct answer given for question 1!</p>
<form method="POST" action="">
<label for="question02">2. How many sides does a square have?</label>
<input type="text" name="question02" value="" placeholder="Answer here...">
<input type="submit">
</form>

<?php  
// Process Question 2 Form
$guess02 = $_POST['guess02'];
$guess02 = strtolower($guess02);
$answer02 = "four";

if ($guess02 == $answer02)
{
?>
<p>Correct answer given for question 2!</p>
<form>
<label for="question02">3. How many sides does a pentagon have?</label>
<input type="text" name="question02" value="" placeholder="Answer here...">
<input type="submit">
</form>

<?php  
// Process Question 2 Form
$guess03 = $_POST['guess02'];
$guess03 = strtolower($guess02);
$answer03 = "five";

if ($guess03 == $answer03)
{
?>
<p>Correct answer given for question 3!</p>
<p>Quiz completed!</p>

<?php
}
elseif (empty($guess03))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
} 
?>

<?php
}
elseif (empty($guess02))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
} 
?>

<?php
}
elseif (empty($guess01))
{
echo "<!-- No Answer Given -->";
}
else
{
echo "<p>Try Again!</p>";
} 
?>

我确信这是非常低效的编码,我对其他解决方法持开放态度。非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

由于表单和问题的验证总是相同的,只有数据发生变化,因此您无需复制代码。只需将问题和答案放在一个数组中,并将当前问题的数量放在表格中。

// Declare all your questions and answers as multi dimensional array
$questionsAndAnwsers = array(array("question" => "1. How many sides does a triangle have?", "answer" => "three"),
                            array("question" => "2. How many sides does a square have?", "answer" => "four"));

// current question
$currentQuestion = 0;
if(isset($_POST["currentQuestion"])){
     $currentQuestion = $_POST["currentQuestion"];
     if($_POST["guess"] == $questionsAndAnwsers[$currentQuestion]["answer"]){
         // answer was correct, increment your question-counter for the next question
         $currentQuestion++;
         // print success message
       } else {
         // question was wrong, counter stays as it is, so same question will be printed
         // print failure message
       }
}


?>
<form method="POST" action="">
    <label for="question"><?php echo ($currentQuestion+1).". ". $questionsAndAnwsers[$currentQuestion]["question"];?></label>
    <input type="hidden" name="currentQuestion" value="<?php echo $currentQuestion;?>">
    <input type="text" name="guess" value="">
    <input type="submit">
</form>
<?php

您必须添加一个额外的if子句,以便所有问题都得到解答。

编辑: 这是一个简单的实现,很容易作弊。当问题编号传递给浏览器时,用户可以更改它(将其设置为9)。要关闭整体,您必须使用会话并在服务器上的会话中保存最后一个正确答案的编号。