php quiz脚本,它使用复选框并动态地从数据库中检索值

时间:2014-01-11 09:26:24

标签: php mysql

我的测验脚本有问题,我正在尝试使用复选框进行测验。但答案只适用于第一个复选框,我试图检查每个输入类型复选框的答案。这是我正在使用的代码 -

<!DOCTYPE HTML>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="stylesheet" media="all" href="css/lessframwork.css"/>
<title>Model Test & Quiz</title>
<link rel="stylesheet" href="css/style.css" type="text/css" />
<link rel="stylesheet" href="css/menu.css" type="text/css" />

</head>

<body>

<h2>Result Details:</h2>
<?php
include ("connection.php");

@$Test_Title_ID = mysql_real_escape_string($_GET['Test_Title_ID']);
//echo $Test_Title_ID.'T';
@$Quiz_Cat_ID = mysql_real_escape_string($_POST['Quiz_Cat_ID']);
//echo $Quiz_Cat_ID.'C';
$php_self = $_SERVER['PHP_SELF'];
$display = mysql_query("SELECT * FROM quiz WHERE Test_Title_ID='$Test_Title_ID' ORDER BY Quiz_ID");
if (!@$_POST['submit']) {

echo "<form method=post action='$php_self'>";
echo "<table border=0>";

while ($row = mysql_fetch_array($display)) {

$Quiz_ID = $row["Quiz_ID"];
$question = $row["question"];
$opt1 = $row["opt1"];
$opt2 = $row["opt2"];
$opt3 = $row["opt3"];
$answer = $row["answer"];
$Test_Title_ID = $row["Test_Title_ID"];

echo "<tr><td colspan=3><br><b>$question</b></td></tr>";

echo "<tr><td>$opt1<input type=checkbox name='q[]' value=\"$opt1\"></td>
<td>$opt2<input type=checkbox name='q[]' value=\"$opt2\"></td>
<td>$opt3<input type=checkbox name='q[]' value=\"$opt3\"></td></tr>";

}

echo "</table>";
if(@$Test_Title_ID!="")
{
echo "<input type='hidden' name='Test_Title_ID' value='$Test_Title_ID'>";
}


echo "<input type='submit' value='See how you did' name='submit'>";
echo "</form>";

}
elseif ($_POST['submit']) {
$Test_Title_ID = mysql_real_escape_string($_REQUEST['Test_Title_ID']);
//echo 'hi'.$Test_Title_ID.'bb';
$display = mysql_query("SELECT * FROM quiz WHERE Test_Title_ID='$Test_Title_ID' ORDER BY Quiz_ID");
$score = 0;
$total = mysql_num_rows($display);
//echo $total;

while ($result = mysql_fetch_array($display)) {
$ar=$_POST[q];
//echo $ar;
$arrlength=count($ar);
//echo $arrlength;
for($x=0;$x<$arrlength;$x++)
{
echo $ar[$x];
echo "<br>";
}
$comma_separated = implode(",", $ar);
echo $comma_separated."<br>";
@$answer = $result[answer];
$q = "q$result[Quiz_ID]";
$q = trim($q);
if ($comma_separated == $answer) {
$score++;
}
}

echo "<p align=center><b>You scored $score out of $total</b></p>";
echo "<p>";
}
if ($_POST['submit'])
{
$percentage=$score*100/$total;
if($percentage>=50)
{
echo "You got $percentage% mark. Passed. Get Complete Result <a href='quiz_view.php?Test_Title_ID=$Test_Title_ID'><font color='red'>Here</font></a>";
}
else
{
echo "You got $percentage% mark. Failed. You have to pass to get complete result.";
}
}
mysql_close($connection);

?>

</body>
</html>

任何人都可以帮助我为什么答案没有为每个问题检查循环

1 个答案:

答案 0 :(得分:0)

这里的问题是你如何存储结果。对于每个问题,您都会使用name=q[]呈现复选框,但是,您为每个问题呈现此相同name的三个复选框。这意味着$_POST["q"]数组将在已选中的页面上具有每个复选框的值,而不仅仅是针对该特定问题检查的复选框循环过来。基本上你每次测试都得到答案而不是每个问题。

例如,假设你有:

问题1:可能的答案:1,2,3。正确答案:2,3

问题2:可能的答案:1,2,3。正确答案:1

学生回答:

问题1:2,3

问题2:1

这些是正确的答案,但$comma_separated变量将等于2,3,1,并且您将检查与2,31的相等性,因此当然永远不会有匹配。

因此,结果是,如果学生正确回答了一个问题,则分数仅会增加。

我在这里为所有想知道的人提供了一个带注释的来源(解释我不想在这里讨论的弃用):http://pastebin.com/MumuA60M

编辑:解决这个问题的方法是让复选框的名称取决于qustion的名称。例如:

<input type=checkbox name='$Quiz_ID-q[]'>

然后

$id = $results["Quiz_ID"]; $ar=$_POST["$id_q"];

这仍然是一个令人困惑的符号,但我认为它会更好。