Problem:
I'm trying to code a multiple choice quiz for my fellow students -and primarily to aid my own learning- and so I'm creating a multiple choice web-based quiz using PHP (5.2.08) and MySQL (5.0.32)
The questions table is:
+----------+--------------+------+-----+---------+----------------+
| 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 | |
+----------+--------------+------+-----+---------+----------------+
Sample print_r($questions) output for one question:
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 to retrieve the questions/answers and assign to variables:
$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++;
}
To display the questions/answers:
<?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>
What I'd like to do is to reorder the answers and remember the reorder (using -I think- the value of $questions[$i][answers][$c][correct]
to determine if the answer's true ('1') or false ('2'). But I think I got lost in the kludge, somewhere. If anyone has any help to offer, suggestions to make they'd be most welcome.
As would anyone being kind enough to edit the code examples down to the necessities (there's way too much, I'm just not sure what's necessary information).
Thanks!