2016-02-02 27 views
1

我已經生成了一個多選題頁面,它從我的數據庫中的qbanktable中抽取一個隨機問題。這個問題的CorrectAnswer也在qbanktable中。下面是question.php頁面從mysql數據庫中隨機抽取多項選擇。在等級頁面上使用正確的答案

<form action="grades.php" method="post" id="quiz"> 
<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "qbank"; 

$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT Question, AnswerA, AnswerB, AnswerC, AnswerD, AnswerE, CorrectAnswer FROM qbanktable ORDER BY RAND() LIMIT 1"; 
$result = $conn->query($sql); 


?> 

        <h3> 
        <?php 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo $row["Question"]; 
    } 
} 
     ?>     

       </h3> 
        <p>&nbsp;</p> 
        <div> 
         <input type="radio" name="question-1-answers" id="question-1-answers-A" value="A" /> 
         <label for="question-1-answers-A">A)&nbsp;  
          <?php 
           $result = $conn->query($sql); 
           if ($result->num_rows > 0) { 
            while($row = $result->fetch_assoc()) { 
             echo $row["AnswerA"]; 
             } 
            } 
            ?>  
         </label> 
        </div> 

        <div> 
         <input type="radio" name="question-1-answers" id="question-1-answers-B" value="B" /> 
         <label for="question-1-answers-B3">B)&nbsp; 
          <?php 
           $result = $conn->query($sql); 
           if ($result->num_rows > 0) { 
            while($row = $result->fetch_assoc()) { 
             echo $row["AnswerB"]; 
             } 
            } 
            ?> 
         </label> 
        </div> 

        <div> 
         <input type="radio" name="question-1-answers" id="question-1-answers-C" value="C" /> 
         <label for="question-1-answers-C3">C)&nbsp; 
          <?php 
           $result = $conn->query($sql); 
           if ($result->num_rows > 0) { 
            while($row = $result->fetch_assoc()) { 
             echo $row["AnswerC"]; 
             } 
            } 
            ?> 
         </label> 
        </div> 

        <div> 
         <input type="radio" name="question-1-answers" id="question-1-answers-D" value="D" /> 
         <label for="question-1-answers-D3">D)&nbsp; 
          <?php 
           $result = $conn->query($sql); 
           if ($result->num_rows > 0) { 
            while($row = $result->fetch_assoc()) { 
             echo $row["AnswerD"]; 
             } 
            } 
            ?> 
         </label> 
        </div> 
        <div> 
         <input type="radio" name="question-1-answers" id="question-1-answers-D" value="E" /> 
         <label for="question-1-answers-D3">E)&nbsp; 
          <?php 
           $result = $conn->query($sql); 
           if ($result->num_rows > 0) { 
            while($row = $result->fetch_assoc()) { 
             echo $row["AnswerE"]; 
             } 
            } 
            ?> 
         </label> 
        </div> 
        <div> 
        <input type="hidden" name="question-1-correct_answer" id="question-1-correct-answer" value="$row["CorrectAnswer"]" > 
       </div> 
      </ol> 

      <input type="submit" class="hvr-grow" value="SUBMIT" /> 
    </form> 

現在在我按下提交按鈕,它會告訴我去grades.php在那裏將分析CorrectAnswer代碼:

 <?php 
     $correctAnswer = $_POST['question-1-correct_answer']; 
     $answer1 = $_POST['question-1-answer']; 

     if ($answer1 == $correctAnswer) { 

     echo "<img src=correct.svg"; 
     } 
     else { 
     echo "<img src=wrong.svg"; 
     } 
     ?> 

我現在相信在grades.php(上面的代碼)我搞砸了簡單的東西。我想知道什麼是正確的代碼來匹配CorrectAnswer與用戶的答案?謝謝

+1

再次從數據庫中獲取正確的答案,並查看它是否與給定的答案相符。完成 – khuderm

回答

0

多種方式:


  1. 發送的問題ID在一個隱藏的輸入,並重新查詢數據庫,以得到正確的答案,這需要你編輯的查詢也得到了問題的ID

    <input type="hidden" name="question-id" id="question-id" value="$row["id"]" > 
    

在grades.php那麼你可以用它來重新查詢數據庫得到所有的答案(尤其是科爾ECT一個)

$questionID= $_POST['question-id']; 

第二個是更容易,但安全性較低,所以嘗試的第一個選項第一

  • 你可以使用一個隱藏的輸入發送它類型,但正如@khuderm所評論的那樣,這是一個壞主意,因爲一個技能很低的人可以在源代碼中看到答案。我不認爲有人會真的嘗試,但更安全,然後抱歉。

    <input type="hidden" name="question-1-correct_answer" id="question-1-correct-answer" value="$row["CorrectAnswer"]" > 
    
  • grades.php,你需要這樣的事情:

    $servername = "localhost"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "qbank"; 
    $questionID= $_POST['question-id']; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
        die("Connection failed: " . $conn->connect_error); 
    } 
    
    $sql = "SELECT CorrectAnswer FROM qbanktable where id = $questionID"; 
    $result = $conn->query($sql); 
    
    +1

    這將是一個壞主意,因爲它會暴露正確的答案,客戶端 – khuderm

    +0

    這是真的我正在編輯我的問題與其他選項+1的評論,沒想到那 – davejal

    +0

    謝謝@davejal,我更新如你所說的代碼,但我與grad.php部分代碼糟糕,它似乎不工作。 –

    0

    所以一些修改之後,現在它的工作原理。

    1)我必須包括隱藏的輸入標籤在PHP如下:

    <input type="hidden" name="question-id" id="question-id" value=  <?php 
               $result = $conn->query($sql); 
               if ($result->num_rows > 0) { 
                while($row = $result->fetch_assoc()) { 
                 echo $row["id"]; 
                 } 
                } 
                ?> > 
    

    現在從我的表獲取ID行,並將其發送到grades.php

    2 )在grades.php代碼,最終檢查用戶輸入與問題ID正確答案從最後一頁提供:

     <?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "root"; 
    $dbname = "qbank"; 
    $questionID= $_POST['question-id']; 
    $answer1 = $_POST['question-1-answers']; 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    if ($conn->connect_error) { 
        die("Connection failed: " . $conn->connect_error); 
    } 
    
    $sql = "SELECT CorrectAnswer FROM qbanktable WHERE id = $questionID"; 
    $result = $conn->query($sql); 
          if ($result->num_rows > 0) { 
           while($row = $result->fetch_assoc()) { 
            $correct = $row["CorrectAnswer"]; 
                 } 
                } 
    
          if ($answer1 == $correct) { 
    
          echo "<img src=correct.svg"; 
          } 
          else { 
          echo "<img src=wrong.svg"; 
          } 
    ?> 
    

    現在它工作正常。 特別感謝@davejal

    相關問題