使用php和mysql在测验中添加分数是不同点的答案

时间:2013-05-09 21:25:03

标签: php mysql points

我刚开始学习php。我有一个测验,每个正确答案得到不同点。我在互联网上看了一下,但直到现在我都找不到解决办法。 This SO question帮助了我,但另一方面,我无法得到总分,这就是我正在寻找的。我想在同一页面上显示总分。 这是代码是有问题的。里面有一些荷兰人,但这不是问题所在:

    <?php
    $strSQL="select vraag, vraagnummer, image_1, image_2, image_3, image_4, punten, antwoord ".
    "from tbvragen as v ".
    "inner join tbpunten as p ".
    "on v.id_ptn = p.id_ptn ".
    "inner join tbantwoorden as a ".
    "on v.id_antw=a.id_antw ";

    $rs = mysql_query($strSQL, $db);
    while ($r = mysql_fetch_array($rs))
    {
    ?>

    <form>
    <h3>Vraag <?php echo($r["vraagnummer"]);?>  <?php echo($r["vraag"]);?><span>(<?echo($r["punten"]); ?> punten)</span>
    </h3>
    <ul>
    <li><img src="images/<?echo($r["image_1"]); ?>"  /><input type="radio" name="keuze" value="A" /><label>A</label></li>
     <li><img src="images/<?echo($r["image_2"]); ?>" /><input type="radio" name="keuze" value="B" /><label>B</label></li>
    <li><img src="images/<?echo($r["image_3"]); ?>" /><input type="radio" name="keuze" value="C"/><label>C</label></li>
     <li><img src="images/<?echo($r["image_4"]); ?>" /><input type="radio" name="keuze" value="D" /><label>D</label></li>
     <li><input type="hidden" name="keuze" value="<?php echo($r["antwoord"]);?> " /></li>            
    </ul>
   </form>

   <?php
    }

    ?>
   <form name="quiz" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"><input type="submit" 
   class="button" value="verstuur je antwoorden" name="verstuur" /></form>






     <?php
        $rs = mysql_query($strSQL, $db);
   while ($r = mysql_fetch_array($rs))
  {


    $beantwoord=$r["vraag".isset($_POST['keuze'])];
    $juistAntw=$r["antwoord"];
    if ($r["vraagnummer"]==$r["antwoord"]) {
                echo $r["punten"].'<br />';
    }

    }
    echo ("je hebt".$r["punten"]." punten");
    ?>



      <?php

      mysql_free_result($rs);
      mysql_close($db);    
      ?>   

1 个答案:

答案 0 :(得分:0)

如果你从php代码中查看输出html源代码,你就能看到大部分错误。

首先,您将每个问题/答案集包装在自己的<form></form>中,但您的提交按钮位于单独的<form></form>中,因此您的答案都不会发布,因为它们不在带有动作和提交按钮的表单。

其次,每个收音机都有name="keuze",所以没有办法检查他们对这个问题的回答,因为只有最后一个选中的无线电元素会设置keuze

第三,您使用name="keuze"在隐藏元素中提供正确答案,因此即使没有第二个问题,您也会使用正确答案覆盖答案,他们可以通过查看页面轻松获得答案源代码。

第四,很难理解你在总得分代码中想要做什么。要获得总分,您需要先检查表单是否已提交 - if(isset($_POST['verstuur']))。然后,您需要将他们的回复与正确答案进行比较,如果相同且问题指向总分数变量。

尝试解决上述所有问题,尝试做类似的事情 -

<?php
$strSQL="select vraag, vraagnummer, image_1, image_2, image_3, image_4, punten, antwoord ".
"from tbvragen as v ".
"inner join tbpunten as p ".
"on v.id_ptn = p.id_ptn ".
"inner join tbantwoorden as a ".
"on v.id_antw=a.id_antw ";

$rs = mysql_query($strSQL, $db);

// check to see if they submitted their quiz
if(isset($_POST['verstuur'])){
// a variable for total points
$totaalpunten = 0;
while ($r = mysql_fetch_array($rs))
 {
      // give the question number
    echo "Vraag ".$r["vraagnummer"])." - ";
      // check if their reply is the same as the correct answer
    if ($_POST["antwoord".$r["vraagnummer"]]==$r["antwoord"]) {
             // echo the points they got for this question
            echo $r["punten"]." puntens<br />";
             // add the points to the total points
            $totaalpunten += $r["punten"];
    }
    else {   
            // if wrong show 0 points
            echo "0 puntens<br />";
}
 // give their total score
echo "je hebt ".$totaalpunten." punten";

}
 // if the quiz was not submitted, show the quiz
else { ?>
<form name="quiz" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<?php
while ($r = mysql_fetch_array($rs))
{ ?>
      <fieldset>
      <h3>Vraag <?php echo($r["vraagnummer"]);?>  <?php echo($r["vraag"]);?><span>(<?echo($r["punten"]); ?> punten)</span></h3>
      <ul>
          <li><img src="images/<?echo($r["image_1"]); ?>"  /><input type="radio" name="antwoord<?php echo($r["vraagnummer"]);?>" value="A" /><label>A</label></li>
          <li><img src="images/<?echo($r["image_2"]); ?>" /><input type="radio" name="antwoord<?php echo($r["vraagnummer"]);?>" value="B" /><label>B</label></li>
          <li><img src="images/<?echo($r["image_3"]); ?>" /><input type="radio" name="antwoord<?php echo($r["vraagnummer"]);?>" value="C"/><label>C</label></li>
          <li><img src="images/<?echo($r["image_4"]); ?>" /><input type="radio" name="antwoord<?php echo($r["vraagnummer"]);?>" value="D" /><label>D</label></li>            
      </ul>
      </fieldset>
<?php  }    ?>
<input type="submit" class="button" value="verstuur je antwoorden" name="verstuur" />
</form>
<?php
}
mysql_free_result($rs);
mysql_close($db);    
?>