2017-06-13 44 views
1

我正在设计在线测试系列。我希望用户选择答案时,应通过存储在数据库中的答案进行验证,并根据正确和不正确的选择移至下一个问题。我正在使用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"; 
} 
?> 

回答

0

在寻找可能的解决方案之前,您必须确定要在何处执行检查。您将问题标记为“jquery”,所以我想您对客户端选项以及服务器端选项感兴趣。

客户端 如果你想要做的检查客户方,这取决于你如何实现它,用户可能能够通过检查代码,看看正确答案。如果这没有问题,您可以通过检查客户端来获得最快的用户体验。

最简单的选择,但容易“破解”将是添加一个额外的属性到单选按钮。像“正确”之类的东西。当点击提交按钮时,你可以使用jquery来检查选中的单选按钮是否具有“正确”属性,并对该信息做任何你想要的操作。

你也可以让前端向服务器做一个查询来检查。这会更安全,但上述方法是最简单的。

服务器端 如果你想在客户端有事先得到答案没有可能的方式,你最好做检查服务器端。在这里,您可以删除提交按钮上的“onclick”,并让表单向服务器做一个实际的帖子,并让服务器进行检查并显示下一个问题,如果给定的答案是正确的。 为了让服务器知道正在检查什么问题,您可以添加带有问题ID的隐藏字段。

+0

我用的是客户端选项,但正如你所说,它不安全。所以我正在转向服务器端。谢谢。 –

+0

如果你想改善用户体验,你可以使用JS来检查后端。 Js可以显示加载器动画,同时它会对您的后端进行调用以检查用户是否正确回答。一旦获得响应,您可以隐藏加载器动画并重定向到下一个问题或显示错误消息。 – JasperZelf

+0

这是一个好主意,先生。非常感谢帮助:) –

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"; 
      } 
     } 
?> 
相关问题