Randomizing-ve php bu randomisation-çoktan seçmeli soruları hatırlayarak

1 Cevap php

Sorun:

Ben arkadaşım için bir çoktan seçmeli sınav kod çalışıyorum öğrenci ve öncelikle yardım için kendi öğrenme ve bu yüzden PHP kullanarak bir çoktan seçmeli web tabanlı sınav (5.2.08) oluşturma ve MySQL (5.0.32) ediyorum

Sorular tablo:

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

Bir soru için örnek print_r ($ soru) çıktı:

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

Soru / cevaplar almak ve değişkenlere atamak için 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++;
 }

Soru / cevapları görüntülemek için:

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

Ne yapmak istiyorum cevapları yeniden düzenlemek ve kullanarak-bence-değeri $questions[$i][answers][$c][correct] belirlemek için (sıralamadan hatırlamak için ise kargılık gerçek ('1 ') ya da yanlış ('2') . Ama ben bir yerde, kludge kayboldu düşünüyorum. herkes sunmak için herhangi bir yardım varsa, bunlar en hoş olurdu yapmak için öneriler.

Tür yeterli ihtiyaçlar için kod örnekleri aşağı düzenlemek olmanın herkes gibi (çok fazla var, ben sadece gerekli bilgiler ne emin değilim).

Teşekkürler!

1 Cevap

Sizin veri tabloları korkunç. Bir soru için masa ve cevapları için başka bir tablo gerekir. Cevaplar tablodaki her giriş soruları tabloda bir soruya geri gelir ve doğru cevap olup olmadığını gösteren bir bayrağı vardır.

Yani, QUESTIONS tablo aşağıdaki alanlar bulunur:

  • QUESTION_ID
  • QUESTION_TEXT
  • QUESTION_TYPE - gibi MC, TF, FİB ...

ANSWERS tablo aşağıdaki alanlar bulunur:

  • ANSWER_ID
  • QUESTION_ID
  • ANSWER_TEXT
  • IS_CORRECT

Hayatınızı sonsuz kolaylaştırır ve bu soru için raison d'etre ortadan kaldırır.