问题:
我正在尝试为我的同学编写一个多项选择测验 - 主要是为了帮助我自己的学习 - 所以我正在使用PHP(5.2.08)和MySQL(5.0)创建一个基于Web的多选择测验0.32)
问题表是:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(6) | NO | PRI | NULL | auto_increment |
| question | varchar(200) | NO | | NULL | |
| correct | varchar(80) | NO | | NULL | |
| wrong1 | varchar(80) | NO | | NULL | |
| wrong2 | varchar(80) | NO | | NULL | |
| wrong3 | varchar(80) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
一个问题的print_r($ questions)示例输出:
Array
(
[0] => Array
(
[id] => 1
[question] => What is the correct pipeline pressure for Nitrous Oxide (<abbr title="Nitrous Oxide.">N<span class="chem-notation">2</span>O</abbr>)?
[answers] => Array
(
[0] => Array
(
[correct] => 1
[answer] => 60<abbr title="Pounds per square inch">PSI</abbr>.
)
[1] => Array
(
[correct] => 0
[answer] => 45<abbr title="Pounds per square inch">PSI</abbr>.
)
[2] => Array
(
[correct] => 0
[answer] => 30<abbr title="Pounds per square inch">PSI</abbr>.
)
[3] => Array
(
[correct] => 0
[answer] => 15<abbr title="Pounds per square inch">PSI</abbr>.
)
)
)
PHP检索问题/答案并分配给变量:
$results = $results2 = mysql_query("
SELECT questions.id AS id,
questions.question AS q,
questions.correct AS c,
questions.wrong1 AS w1,
questions.wrong2 AS w2,
questions.wrong3 AS w3
FROM questions
ORDER BY questions.id
LIMIT 40")
or die("Oops, unable to access database at this time." . mysql_error());
while ($row = mysql_fetch_array($results)) {
if (!isset($i)) {
$i = 0;
}
else {
$i = $i;
}
$answers[$i] = array(
0=>array (correct => 1, answer => $row['c']),
1=>array (correct => 0, answer => $row['w1']),
2=>array (correct => 0, answer => $row['w2']),
3=>array (correct => 0, answer => $row['w3'])
);
$questions[$i] = array(id=>$row['id'],
question=>$row['q'],
answers=>$answers[$i]);
$correctAnswer[$i] = array($row['c']);
$i++;
}
显示问题/答案:
<?php
require_once 'incs/dbcnx.php';
require_once 'incs/questions.php';
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Multiple choice questions for ODP students.</title>
<link rel="stylesheet" type="text/css" href="css/stylesheet.css" />
</head>
<body>
<?php
$submitted = $_POST['submit'];
$quesions = $_SESSION['questions'];
$correctAnswers = $_SESSION['correctAnswer'];
if (isset($submitted) && $submitted == "1") {
// display the results.
echo "<form>";
for ($i=0;$i<sizeof($questions);$i++) {
echo "\t\t<fieldset>\n\n";
echo "\t\t<label>\n\t\t\t<span class=\"qNum\">Q" . $questions[$i][id] . ": </span>\n\t\t\t";
echo $questions[$i][question] . "\n\t\t</label>\n";
$submittedName = (string) "question" . $questions[$i][id];
for ($c=0;$c<sizeof($questions[$i][answers]);$c++) {
if ($_POST["$submittedName"] == $c) {
if ($questions[$c][answers][$c][correct] == 1) {
echo "\n\t\t<span class=\"correct\"><span class=\"hint\">✓</span>";
echo "<input checked type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
echo " value=\"$c\" />";
}
else {
echo "\n\t\t<span class=\"submitted\"><span class=\"hint\">✗</span>";
echo "<input type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
echo " value=\"$c\" />";
}
}
elseif ($questions[$c][answers][$c][correct] == 1) {
echo "\n\t\t<span class=\"thisOne\">";
echo "<input type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
echo " value=\"$c\" />";
}
else {
echo "\n\t\t<span class=\"optionLine\">";
echo "<input disabled type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
echo " value=\"$c\" />";
}
echo $questions[$i][answers][$c][answer] . "</span>";
}
echo "\n\n\t\t</fieldset>\n\n";
}
echo "</form>";
}
else {
// show the form
?>
<form enctype="form/multipart" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php
for ($i=0;$i<sizeof($questions);$i++) {
echo "\t\t<fieldset>\n\n";
echo "\t\t<label>\n\t\t\t<span class=\"qNum\">Q" . $questions[$i][id] . ": </span>\n\t\t\t";
echo $questions[$i][question] . "\n\t\t</label>\n";
for ($c=0;$c<sizeof($questions[$i][answers]);$c++) {
echo "\n\t\t<span class=\"optionLine\">";
echo "<input type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
echo " value=\"$c\" />";
echo $questions[$i][answers][$c][answer] . "</span>";
}
echo "\n\n\t\t</fieldset>\n\n";
}
?>
<fieldset>
<input type="reset" value="clear" />
<input type="submit" value="submit" />
<input type="hidden" name="submit" value="1" />
</fieldset>
</form>
<?php
}
?>
<div id="variables">
</div>
</body>
</html>
我想做的是重新排序答案并记住重新排序(使用-I think- $questions[$i][answers][$c][correct]
的值来确定答案是真的('1')还是假的('2'但是我觉得我迷失在某个地方。如果有人有任何帮助,建议让他们受到欢迎。
任何人都很友善地编写代码示例到必需品(太多了,我只是不确定什么是必要的信息)。
谢谢!
答案 0 :(得分:1)
您的数据表非常糟糕。您需要一个表格来提问题,另一个表格需要答案。答案表中的每个条目都返回问题表中的一个问题,并有一个标志,表明它是否是正确的答案。
因此,QUESTIONS
表包含以下字段:
QUESTION_ID
QUESTION_TEXT
QUESTION_TYPE
- 像MC,TF,FIB ...... ANSWERS
表格包含以下字段:
ANSWER_ID
QUESTION_ID
ANSWER_TEXT
IS_CORRECT
使您的生活变得更加轻松,并避免了这个问题的 raison d'etre 。