如何在下面的示例中显示不正确的答案

时间:2012-11-07 03:48:50

标签: php mysql sql mysqli

下面我有4个数据库表,Session,Question,Answer和Option_Type。

会话表:

SessionId  SessionName
1          AAA

问题表:

SessionId   QuestionId  QuestionContent       OptionId
1           1           What is 1+1 and 4+4   2
1           2           Does 2+2 = 4          26
1           3           What is 3+3 and 5+5   3

答案表:

AnswerId  SessionId QuestionId  Answer
1         1         1           B
2         1         1           C
3         1         2           Yes
4         1         3           A
5         1         3           C

Option_Type

OptionId OptionType
1        A-C
2        A-D
3        A-E
4        A-F

.... goes up to 24 where it goes up to A-Z

25       True or False
26       Yes or No

现在我在jsfiddle中创建了一个演示html表,你可以看到here

现在,如果您对html表有一个很好的了解,您会发现我想要做的是在"不正确的答案"下显示错误的答案。列。

所以我想要做的是,例如问题1,如果你查看数据库表," OptionId"对于问题1是2,这意味着如果你查找" OptionId"在" Option_Type"表" OptionType"对于这个OptionId是" A-D"。所以选项是" A"," B"," C"和" D"。问题1的答案是" B"和" C"。所以我不想在表格中显示这些答案,因为它们是正确的,但我想显示其他选项" A"和" D"因为他们是不正确的。

这有意义吗?我的问题实际上是如何在"不正确的答案"下显示正确的答案?列,但在下面的代码中每个问题显示此列下的其他选项:

   $query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionContent, an.Answer, q.QuestionMarks 
   FROM Session s 
   INNER JOIN Question q ON s.SessionId = q.SessionId
   JOIN Answer an ON q.QuestionId = an.QuestionId AND an.SessionId = q.SessionId
   WHERE s.SessionName = ?
   ORDER BY q.QuestionId, an.Answer
   ";

   // prepare query
   $stmt=$mysqli->prepare($query);
   // You only need to call bind_param once
   $stmt->bind_param("s", $assessment);
   // execute query
   $stmt->execute(); 


       // This will hold the search results
    $searchQuestionId = array();
    $searchQuestionContent = array();
    $searchAnswer = array();
    $searchMarks = array();

    // Fetch the results into an array

   // get result and assign variables (prefix with db)
   $stmt->bind_result($dbSessionId, $dbSessionName, $dbQuestionId, $dbQuestionContent, $dbAnswer, $dbQuestionMarks);
      while ($stmt->fetch()) {
        $searchQuestionId[] = $dbQuestionId;
        $searchQuestionContent[] = $dbQuestionContent;
        $searchAnswer[] = $dbAnswer;
        $searchMarks[] = $dbQuestionMarks;
      } 

?>      

</head>

<body>

<form id="QandA" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">

<?php 

echo "<table border='1' id='markstbl'>
      <tr>
      <th class='questionth'>Question No.</th>
      <th class='questionth'>Question</th>
      <th class='answerth'>Incorrect Answer</th>
      <th class='answermarksth'>Penalty per Incorrect Answer</th>
      </tr>\n";
$previous_question_id = null;
$rowspans = array_count_values($searchQuestionId);
foreach ($searchQuestionContent as $key=>$question) {

    // removed logic, not necessary to set empty strings if you're skipping them

    echo '<tr class="questiontd">'.PHP_EOL;

    if ($previous_question_id != $searchQuestionId[$key]) {
        echo '<td class="questionnumtd" name="numQuestion" rowspan="'.$rowspans[$searchQuestionId[$key]].'">'.htmlspecialchars($searchQuestionId[$key]).'</td>' . PHP_EOL;
        echo '<td class="questioncontenttd" rowspan="'.$rowspans[$searchQuestionId[$key]].'">'.htmlspecialchars($question).'</td>' . PHP_EOL;
    }

    echo '<td class="answertd" name="answers[]">';
    echo $searchAnswer[$key];
    echo '</td>' ;
    echo '<td class="answermarkstd"><input class="individualMarks" name="answerMarks[]" id="individualtext" type="text" /></td>' . PHP_EOL;

    // moved this to the end
    if ($previous_question_id != $searchQuestionId[$key]) {
        $previous_question_id = $searchQuestionId[$key];
    }
}
        echo '</tr>';
        echo "</table>" . PHP_EOL;

        ?>

</form>

目前,上面的代码在&#34;不正确的答案&#34;下显示了正确的答案。专栏,而不是错误的答案。

0 个答案:

没有答案