Рандомизация – и запоминание того, что вопросы рандомизации – множественного выбора в php

Проблема:

Я пытаюсь запрограммировать многократную викторину для своих сокурсников и, в первую очередь, помогать в моем собственном обучении, и поэтому я создаю веб-викторину с несколькими вариантами, используя PHP (5.2.08) и MySQL (5.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 ') или false (' 2 '). Но я думаю, что где-то я заблудился в kludge. Если кто-нибудь может помочь, предложите, чтобы они были наиболее желанными.

Как и любой человек, достаточно любезный, чтобы редактировать примеры кода вплоть до необходимости (слишком много, я просто не уверен, что такое необходимая информация).

Благодаря!

Ваши таблицы данных ужасны. Вам нужна одна таблица для вопросов и другая таблица для ответов. Каждая запись в таблице ответов ссылается на вопрос в таблице вопросов и имеет флаг, указывающий, является ли он правильным ответом.

Итак, таблица QUESTIONS имеет следующие поля:

  • QUESTION_ID
  • QUESTION_TEXT
  • QUESTION_TYPE – как MC, TF, FIB …

Таблица ANSWERS имеет следующие поля:

  • ANSWER_ID
  • QUESTION_ID
  • ANSWER_TEXT
  • IS_CORRECT

Делает вашу жизнь бесконечно легче и устраняет смысл существования этого вопроса.