Egy egyszerű szerkezetű szövegfájlt alakít tesztté egyetlen PHP program. Érdekessége, hogy ugyanaz a program tartalmazza a kérdőívet és az értékelést!
Minden feladat egy kérdésből és két vagy több válaszból (max. 5) áll. A válaszok közt több hibátlan is lehet, ezeket kell megjelölni. (Előfordulhat az is, hogy egy hibátlan sincs, azaz semmit sem kell bejelölni!) Az összes kérdés megválaszolása után törölhetjük válaszainkat vagy kérhetünk egy összesített értékelést, amely kérdésenként és százalékosan is értékel.
Az adatfájl elején pontosan öt sornak kell állnia, mert a 6. sort már kérdésnek értelmazi a feldolgozó program!
var grade = 0; // pontszám var count1 = 0; // jó válaszok számlálója az üzenethez (mod 4) var count2 = 0; // rossz válaszok számlálója az üzenethez (mod 4) var msg = 6; // üzenetek/hibaüzenetek száma var msg1 = new Array( 'Eltaláltad! Lottózzál!', 'Szuper!', 'A válasz hibátlan!', 'Jó választás. A helyes választ adta!', 'Rendben! Ügyes!', 'Csak így tovább! A válasz helyes ...'); var msg2 = new Array( 'Nem nyert! No még egyszer!', 'Nem talált! No még egyszer!', 'Nem, a válasz helytelen. Próbáld meg újból!!', 'Hoppá! A válasz helytelen. Próbáld meg újra!', 'A válasz helytelen. Gondold át, és próbáld meg újra!', 'Sajnos nem ez a helyes válasz. Próbáld meg újra!'); ...
Itt adjuk meg azokat a szövegeket, amelyek közül (véletlenszerű választással) egyet kiír a Javascript program (jó válasz esetén a felsőkből, hibás válasznál az alsókból választ). Ezek természetesen módosíthatók, de bővíthető is a lista, csak ügyelni kell a határolójelekre (bővítéskor az "msg = 6" is javítandó!)!
Másoljuk le az "indexE.php" fájlt "indexF.php", a "mainE.css" fájlt "mainF.css", valamint a "menuE.inc" fájlt "menuF.inc" néven és javítsuk át a rá való hivatkozásokat!
===================
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>PHP Quiz 3</title> <link rel='stylesheet' href='css/style3.css'/> </head> <body> <?php if (isset($_POST['elkuldott'])) { // a kérdőív elküldése után - értékelés (második futás) 1. teszt megjelenítése/kitöltése } else { // a kérdőív kitöltése (első futás) 2. teszt kiértékelése } 3. egy PHP függvény ?> </body> </html>
Az utolsó teszt (index3.php) egy vegyes HTML - PHP program. Első híváskor a PHP betét "else" ága fut, azaz megjeleníti a kérdőívet/tesztet. Ha ezt kitöltöttük, és rákattintunk a "Rendben ..." gombra, az "if" utáni ágra kerülünk, s megtörténik a teszt kiértékelése.
===================
function dekod($num,$db) { // dekod(19,5); // ++--+ $str = ""; for ($j=1;$j<=$db;$j++) { $bin = $num % 2; $num = floor($num/2); if ($bin==1) { $str = $str."+"; } else { $str = $str."-"; } } return $str; }
ccc
===================
$kdrb = $_POST["kdrb"]; // kérdések darabszáma $vdrb = explode(";",$_POST["vdrb"]); // válaszok darabszámának tömbje $hval = explode(";",$_POST["hval"]); // helyes válaszok kódolt tömbje $aval = array(""); // adott válaszok kódolt tömbje $tdrb = 0; // találatok darabszáma for ($i=1;$i<=$kdrb;$i++) { $av = $_POST["v$i"]; $num = 0; $hatv = 1; for ($j=1;$j<=$vdrb[$i];$j++) { if ($av[$j]) { $num += $hatv; } $hatv = 2*$hatv; } if ($num==$hval[$i]) { $tdrb++; } array_push($aval,$num); } $szaz = round(100*$tdrb/$kdrb,1); echo "<p class='h1'>Értékelés ($tdrb/$kdrb) => $szaz %</p>\n"; echo "<p class='h2'>(elöl a helyes, utána az adott válasz)</p>\n"; echo "<div id='ertekeles'>\n"; for ($i=1;$i<=$kdrb;$i++) { $db = $vdrb[$i]; $hst = dekod($hval[$i],$db); $ast = dekod($aval[$i],$db); echo "<h5>$i. kérdés: _____________________"; if ($ast==$hst) { echo "<img src='css/yes.gif' id='ynimg'>"; } else { echo "<img src='css/no.gif' id='ynimg'>"; } echo "</h5>\n"; for ($j=0;$j<$db;$j++) { if ($hst[$j]=="+") { $hkep="css/yes.gif"; } else { $hkep="css/no.gif"; } if ($ast[$j]=="+") { $akep="css/yes.gif"; } else { $akep="css/no.gif"; } echo "<div id='yesno'><img src='$hkep'> <img src='$akep'></div>\n"; } echo "\n"; } echo "<p id='vissza'><a href='../..'>Vissza a kezdőoldalra!</a></p>\n"; echo "</div>\n";
===================
$kod = $_GET['kd']; if ( $kod == "" ) { $kod = "minta"; } // hívás .txt nélkül $inpfajl = "data/$kod.txt"; if (!file_exists($inpfajl)) { echo "A(z) $inpfajl nem létezik!"; } else { $s = file("$inpfajl"); // 5. a kérdés $cim = chop(array_shift($s)); // teszt megnevezése $info = chop(array_shift($s)); // információ $szerzo = chop(array_shift($s)); // szerző(i) $datum = chop(array_shift($s)); // dátuma $forras = chop(array_shift($s)); // forrása(i) echo "<p class='h1'> $cim </p>\n"; echo "<p class='h2'> $info </p><br>\n\n"; echo "<form id='form' method='POST' action='index3.php'>\n\n"; echo "\n<ol>\n\n"; $i = 1; $ii = 0; $vdrb = ""; $hval = ""; do { $sor = chop($s[$ii]); $ii++; $j = 0; $num = 0; $hatv = 1; echo "<div class='kerdes'>\n"; echo "<li> <div class='pk'>$sor</div> \n"; echo "\t<div class='valasz'>\n"; do { $sor = chop($s[$ii]); $sor = substr($sor,1); // tab leszedve $ii++; $j++; if ($sor[0]=='*') { $sor = substr($sor,1); // * leszedve $num += $hatv; } $valt = "v$i"."[$j]"; $hatv = 2*$hatv; echo "\t<div class='pv'><input name=$valt type='checkbox'> $sor</div>\n"; } while (chop($s[$ii])!=''); echo "\t</div>\n"; echo "</li>\n"; echo "</div>\n\n"; $hval = $hval.";".$num; // stringben adom át a helyes válaszokat $vdrb = $vdrb.";".$j; // stringben adom át a válaszok darabszámát $ii++; $i++; } while (chop($s[$ii])!=''); $i--; echo "</ol>\n\n"; echo "<input type='hidden' name='elkuldott'>\n"; // első futás jelzésére echo "<input type='hidden' name='kdrb' value='$i'>\n"; // kérdések darabszáma echo "<input type='hidden' name='vdrb' value='$vdrb'>\n"; // válaszok darabszáma (tömb) echo "<input type='hidden' name='hval' value='$hval'>\n"; // helyes válaszok (kódolt tömb) echo "<div class='ressub'><input type='reset' value=' Adott válaszok törlése '> <input type='submit' value=' Rendben van, értékelés '></div>\n\n"; echo "</form>\n\n"; echo "<p class='h3'>$forras</p>\n"; echo "<p class='h4'>$szerzo ($datum)</p>\n"; echo "<p id='vissza'><a href='../..'>Vissza a kezdőoldalra!</a></p>\n"; } }