Writing a test for my co-workers MCITP test, in case anyone’s interested, here’s the code :)
This bad boy can list questions with answers with radiobuttons or checkboxes in case of multiple correct answers
it runs through every question, no matter how many you have
the database is easily customisable through the config file
Live test: http://mc.munsking.com/quiz
the index.php:
<?PHP
include('conf.php');
/*
* conf.php :
* $HOST = "YOUR_MYSQL_HOST";
* $USER = "YOUR_MYSQL_USER";
* $PASS = "$USER_PASSWORD";
* $DATA = "YOUR_DATABASE_NAME";
* $TEST = "TEST_TABLE_NAME";
* $UMLA = array("ü","ö","ä","Ü","Ö","Ä","ß"); //characters to replace with:
* $REPL = array("ü","ö","ä","Ü","Ö","Ä","ß"); //herpderp
*
*/
?>
<!DOCTYPE html>
<html>
<head>
<title>MCITP WITH MySQL SHIZNIZ</title>
</head>
<body>
<?PHP
mysql_connect($HOST,$USER,$PASS) or die("cant connect to".$HOST);
mysql_select_db($DATA) or die("cant select database ".$DATA);
$query="SELECT * FROM ".$TEST." ORDER BY question_ID ASC";
$result=mysql_query($query) or die("fucker cant query brah");
$retcount=mysql_num_rows($result);
echo('<form name="questions" action="checkanswers.php" method="POST">'."\r\n".'
<input type="hidden" name="test" value="'.$TEST.'" />'."\r\n".'
<input type="hidden" name="retcount" value="'.$retcount.'" />'."\r\n");
while ($resarr = mysql_fetch_assoc($result)){
$question=str_replace($UMLA,$REPL,$resarr['question']);
echo("Frage ".$resarr['question_ID']."<br /><br />\r\n".
$question."<br />\r\n");
$x=1;
$a_n_s="answer".$x;
while(strlen($resarr[$a_n_s])>0){
if(strlen($resarr[$a_n_s])>0){
$resarr[$a_n_s]=str_replace($UMLA,$REPL,$resarr[$a_n_s]);
if(strlen($resarr['correct'])<2){
echo('<input type="radio" name="'.$resarr['question_ID'].'" value="'.chr($x+64).'" /> '.chr($x+64).': '.$resarr[$a_n_s].'<br />'."\r\n");
}else{
echo(' <input type="checkbox" name="'.$resarr['question_ID'].'[]" value="'.chr($x+64).'" /> '.chr($x+64).': '.$resarr['answer1'].'<br />'."\r\n");
}
}
$x++;
$a_n_s="answer".$x;
}
echo("<br /><br />");
}
//echo("<br />\r\nCONNECTION DATA: ".$HOST." & ".$USER." & ".md5($PASS)." & ".$DATA."<br />\r\nQUERY: ".$query);
echo('<input type="submit" name="submit" />');
?>
</body>
</html>
and the checkanswers.php:
<?PHP
include('conf.php');
$corr=0;
$fals=0;
$total=0;
$i=0;
$retcount=$_POST['retcount']+1;
mysql_connect($HOST,$USER,$PASS) or die("cant connect to".$HOST);
mysql_select_db($DATA) or die("cant select database ".$DATA);
$query="SELECT * FROM ".$TEST." ORDER BY question_ID ASC";
$result=mysql_query($query) or die("fucker cant query brah");
while ($resarr = mysql_fetch_assoc($result)){
$i++;
$ans[$i]=$resarr['correct'];
}
echo("<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<title>MCITP RESULTS</title>\r\n</head>\r\n<body>\r\n");
function checkansw($given, $correct) {
global $corr, $fals, $total;
if(strlen($correct)<2){
if ($given != $correct){
echo("<div style=\"color:red;\">WRONG<br />Ihre antwort: ".
$given."<br />\r\nRichtige antwort: ".$correct."</div>");
$fals++;
}
else{
echo "<div style=\"color:green;\">CORRECT<br />Ihre antwort: ".
$given."<br />\r\nRichtige antwort: ".$correct."</div>";
$corr++;
}
}
else{
$ansarr=implode(',',$given);
if ($ansarr != $correct){
echo("<div style=\"color:red;\">WRONG<br />Ihre antwort(en): ".
$given."<br />\r\nRichtige antwort(en): ".$correct."</div>");
$fals++;
}
else{
echo "<div style=\"color:green;\">CORRECT</div>";
$corr++;
}
}
$total++;
}
for($i=1; $i<$retcount; $i++)
{
echo("\r\n<h2>Answer ".$i."</h2>\r\n");
checkansw($_POST[$i],$ans[$i]);
}
echo("correct: ".$corr."<br />\r\nfalse:".$fals."<br />\r\ntotal:".$total);
$cal1=$corr / $total;
$cal2=$cal1 * 100;
$perc=number_format($cal2,2);
if($perc<80){
echo("<div style=\"color:red;\">");
}
else{
echo("<div style=\"color:green;\">");
}
echo("<br />\r\n<h1>".$perc."% correct</h1></div>");
echo("</body>\r\n</html>\r\n");
?>
and the SQL file for the table(you can have more than 6 answer fields if needed)
CREATE TABLE `Test1` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `question_ID` INT(11) NOT NULL, `question` MEDIUMTEXT NOT NULL, `answer1` TEXT NOT NULL, `answer2` TEXT NOT NULL, `answer3` TEXT NOT NULL, `answer4` TEXT NOT NULL, `answer5` TEXT NULL, `answer6` TEXT NULL, `correct` VARCHAR(10) NOT NULL, PRIMARY KEY (`id`) ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM AUTO_INCREMENT=48;
last but not least, conf.php:
<?PHP
$HOST = "ip/hostname of the mysql server";
$USER = "the mysql user";
$PASS = "user's password";
$DATA = "database name";
$TEST = "table name";
//array with characters to replace:
$UMLA = array("ü","ö","ä","Ü","Ö","Ä","ß");
//matching replacements:
$REPL = array("ü","ö","ä","Ü","Ö","Ä","ß");
?>
