检查单击的单选按钮是否是存储在数据库中的答案

时间:2017-06-13 07:32:13

标签: php mysqli

我正在设计一个在线测试系列。我希望当用户选择答案时,应该通过存储在数据库中的答案进行验证,并根据正确和错误的选择转到下一个问题。我正在使用php和mysqli。有人能告诉我如何获取用户所选答案的ID并使用正确答案进行验证吗?这是html

<form method="POST" name="try" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">;
        <h4> <?php echo $_SESSION["Question"] ?> </h4>
        <input type="radio" name="options" value="A" id="A"> <?php echo $_SESSION["OpA"] ?> </input><br>
        <input type="radio" name="options" value="B" id="B"> <?php echo $_SESSION["OpB"] ?> </input><br>
        <input type="radio" name="options" value="C" id="C"> <?php echo $_SESSION["OpC"] ?> </input><br>
        <input type="radio" name="options" value="D" id="D"> <?php echo $_SESSION["OpD"] ?> </input><br>
        <input type="radio" name="options" value="E" id="E"> <?php echo $_SESSION["OpE"] ?> </input><br>
        <button type="button" class="btn" name="submit" value="submit" >Submit</button>
    <?php
$conn = mysqli_connect($servername, $username, $password);
        mysqli_select_db( $conn , 'myDB' );
        echo "<form method='get' action=" .htmlspecialchars($_SERVER['PHP_SELF']) . ";>";
        $sql = "SELECT * FROM QUANT_MEDIUM ORDER BY RAND() LIMIT 1";
        $result = $conn->query($sql);
        if ($result->num_rows > 0)      
        {
            while($row = $result->fetch_assoc()) 
            {
                $_SESSION['ans'] = $row['Correct'];
                $_SESSION['Question'] = $row['Ques'];
                $_SESSION['OpA'] = $row['Option_A'];
                $_SESSION['OpB'] = $row['Option_B'];
                $_SESSION['OpC'] = $row['Option_C'];
                $_SESSION['OpD'] = $row['Option_D'];
                $_SESSION['OpE'] = $row['Option_E'];

            }
        }
?>
<?php
if (isset($_POST['submit']) and ! empty($_POST['submit']))
{
    if (isset($_POST['options'])) 
    {
        $radio_input = $_POST['options'];
        echo $radio_input;
    }
}
else 
{
    echo "wrong";
}
?>

2 个答案:

答案 0 :(得分:0)

在查看可能的解决方案之前,您必须确定要完成检查的位置。你标记了问题&#34; jquery&#34;所以我猜你对客户端选项以及服务器端选项感兴趣。

客户端 如果要根据实现方式对客户端进行检查,则用户可以通过检查代码来查看正确的答案。如果这没有问题,您可以通过在客户端进行检查来获得最快的用户体验。

最简单的选择,但很容易&#34; hack&#34;将是为radiobutton添加一个额外的属性。像&#34;纠正&#34;或者。单击提交按钮时,您可以使用jquery检查所选单选按钮是否具有&#34;正确&#34;属性并使用该信息执行您想要的任何操作。

您也可以让前端对服务器进行查询以进行检查。这将更安全,但上述方法是最简单的。

服务器端 如果您希望客户端无法事先得到答案,那么您最好进行检查服务器端。在这里,您可以删除提交按钮上的&#34; onclick&#34;并让表单对服务器进行实际发布,并让服务器检查并显示下一个问题,如果给定的答案是正确的。 为了让服务器知道正在检查哪个问题,您可以添加一个带有问题ID的隐藏字段。

答案 1 :(得分:0)

验证可以使用php在服务器端完成。解决方案是不使用提交按钮,让服务器负责检查提交给服务器的内容。因此,提交按钮可以替换为以下内容:

<input type="submit" name="submit" value="submit" class="btn"></input>

验证可以使用以下代码完成:

<?php 
    if (isset($_POST['submit']) and ! empty($_POST['submit']))
        {
            if (isset($_POST['options'])) 
            {
                $radio_input = $_POST['options'];
                //echo $radio_input;
                if($radio_input == $_SESSION['ans'])
                    echo "correct";
                else
                    echo "incorrect";
            }
        }
?>