代码之家  ›  专栏  ›  技术社区  ›  David Thomas

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

  •  2
  • David Thomas  · 技术社区  · 15 年前

    问题表如下:

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

    一个问题的打印示例(问题)输出:

    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>.
                            )
                    )
            )
    

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

    $questions[$i][answers][$c][correct] 确定答案是真('1')还是假('2')。但我想我在某个地方迷路了。如果有人能提供任何帮助,欢迎提出建议。

    任何人都会很友好地编辑代码示例,直到必要的部分(有太多了,我只是不知道必要的信息是什么)。

    谢谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   Sinan Ünür    15 年前

    你的数据表太糟糕了。你需要一张桌子放问题,另一张桌子放答案。答案表中的每个条目都引用问题表中的一个问题,并有一个标志指示该问题是否为正确答案。

    那么 QUESTIONS

    • QUESTION_ID
    • QUESTION_TEXT
    • QUESTION_TYPE --像MC,TF,FIB。。。

    ANSWERS 表包含以下字段:

    • ANSWER_ID
    • 问题编号
    • ANSWER_TEXT
    • IS_CORRECT

    使你的生活无限轻松,并消除 存在的理由 对于这个问题。