donglun4521 2009-06-22 17:14
浏览 33
已采纳

随机化 - 记住随机化 - php中的多项选择题

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>

";

        echo "\t\t<label>
\t\t\t<span class=\"qNum\">Q" . $questions[$i][id] . ": </span>
\t\t\t";
        echo $questions[$i][question] . "
\t\t</label>
";

            $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 "
\t\t<span class=\"correct\"><span class=\"hint\">✓</span>";
                    echo "<input checked type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
                    echo " value=\"$c\" />";
                }
                else {
                    echo "
\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 "
\t\t<span class=\"thisOne\">";
                echo "<input type=\"radio\" name=\"question" . $questions[$i][id] . "\"";
                echo " value=\"$c\" />";
            }
            else {
                echo "
\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 "

\t\t</fieldset>

";
    }

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>

";

        echo "\t\t<label>
\t\t\t<span class=\"qNum\">Q" . $questions[$i][id] . ": </span>
\t\t\t";
        echo $questions[$i][question] . "
\t\t</label>
";


        for ($c=0;$c<sizeof($questions[$i][answers]);$c++) {
            echo "
\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 "

\t\t</fieldset>

";
    }



?>

    <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!

  • 写回答

1条回答 默认 最新

  • dongpo7467 2009-06-22 17:36
    关注

    Your data tables are awful. You need one table for questions and another table for answers. Each entry in the answers table refers back to a question in the questions table and has a flag indicating whether it is the correct answer.

    So, the QUESTIONS table has the following fields:

    • QUESTION_ID
    • QUESTION_TEXT
    • QUESTION_TYPE -- Like MC, TF, FIB ...

    The ANSWERS table has the following fields:

    • ANSWER_ID
    • QUESTION_ID
    • ANSWER_TEXT
    • IS_CORRECT

    Makes your life infinitely easier and obviates the raison d'etre for this question.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀