2017-06-13 84 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"; 
      } 
     } 
?> 
相關問題