我刚开始学习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);
?>
答案 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);
?>