Проблема:
Я пытаюсь закодировать тест с несколькими вариантами ответов для моих сокурсников - и в первую очередь, чтобы помочь моему собственному обучению - и поэтому я создаю тест с несколькими вариантами ответов на основе веб-интерфейса с использованием PHP (5.2.08) и MySQL (5.0) 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-думаю, значение $questions[$i][answers][$c][correct]
, чтобы определить, является ли ответ верным ('1') или ложным ('2'). Но я думаю, что я заблудился где-то в кладже. Если у кого-нибудь есть какая-либо помощь, предложения, чтобы сделать их, были бы очень рады.
Как и любой человек, любезно отредактировавший примеры кода до необходимого (слишком много, я просто не уверен, что это за необходимая информация).
Спасибо!