Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  Kvíz v PHP (1)
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Rádi byste umožnili návštěvníkům svých stránek, aby si otestovali své znalosti? Proč jim nenabídnout na stránkách třeba kvíz, včetně vyhodnocení a jednoduchých statistik kvízu. A to vše bez použití databáze.

Pecka Miroslav - 10.03.2003 - tutorial - Rubrika: PHP

Asi před čtvrt rokem jsem chtěl na svůj web implementovat kvíz. Původně jsem měl v plánu využít některou ze snadno implementovatelných služeb pro tvůrce WWW stránek. Hledal jsem na českém i zahraničním Internetu, ovšem kvíz jaký jsem si představoval, jsem nenalezl. Mezi českými weby nabízejícími různá "udělátka" pro webdesignery (jako ankety, knihy hostů, mailformy ap.) jsem kvíz vůbec nenašel. Kdysi jsem našel zahraniční službu nabízející kvíz, ovšem v neplacené verzi byla personalizace tohoto kvízu výrazně omezená a především nebylo možno ovládání kvízu lokalizovat do češtiny.

Rozhodl jsem se udělat si tedy jednoduchý kvíz v PHP (bez použití databáze).
Vlastnosti kvízu jsou následující:

  • odpovědi na otázky jsou realizovány formou výběru z možností (pomocí radio-buttonů)
  • pro každou otázku musí být stejný (ale neomezený) počet variant odpovědí
  • je neomezený počet otázek
  • při vyhodnocení kvízu se zobrazuje otázka, odpověď soutěžícího, správná odpověď, resumé ("správně"/"špatně")
  • na závěr kvízu se zobrazí souhrnné hodnocení (např.: "Z celkových 10 otázek jste zodpověděl(a) správně 3.
    Vaše úspěšnost v kvízu je tedy 30%.")
  • do souboru výsledků jsou formou CSV zapisovány výsledky jednotlivých soutěžících
  • do souboru statistik je zapsána informace o datu posledního dokončeného kvízu, počtu soutěžících (kteří již vyzkoušeli kvíz), nejlepší a nejhorší výsledek kvízu
  • do souboru statistik a souboru výsledků se zapisuje jen "1. pokus" soutěžícího (kontrola pomocí cookies)

Kvíz si můžete vyzkoušet zde.

Kvíz sestává ze tří souborů:

  • hlavni.php - skript pro vypsání otázek a možných odpovědí + formulář pro odeslání dat ke zpracování
  • vyhodnoceni.php - skript na nějž se odkazuje hlavni.php a který zobrazuje správnost odpovědí na jednotlivé otázky + souhrnné hodnocení
  • data.php - soubor obsahující vlastní texty otázek a odpovědí (tento souboru se vkládá (pomocí require) do souboru hlavni.php i vyhodnoceni.php)
data.php
<? 
$pocetotazek=3;
$pocetmoznosti=3;
$q1 = Array("Hlavní město ČR je", "a) Praha", "b) Brno", "c) Beroun", 1);
$q2 = Array("Česká vlajka obsahuje", "a) 2 barvy", "b) 3 barvy", "c) 4 barvy", 2);
$q3 = Array("Český národní strom je", "a) javor", "b) lípa", "c) kaštan", 2);
?>

Soubor data.php obsahuje především pole otázek a odpovědí. Počet polí odpovídá počtu otázek, přičemž názvy polí musí být q1 (1. otázka), q2, q3, q4 (4. otázka) atd. První prvek (tedy např. $q1[0]) každého pole obsahuje otázku, druhý (tedy např. $q1[1]) až předposlední prvek obsahuje příslušnou odpověď, poslední prvek obsahuje index prvku, který obsahuje správnou odpověď. Proměnná $pocetotazek by měla obsahovat hodnotu odpovídající počtu otázek, proměnná $pocetmoznosti by měla obsahovat počet možných odpovědí na každou z otázek.

hlavni.php
<html>
<head>
<title>Kvíz</title>
</head>
<body>
<p>KVÍZ - ZADÁNÍ OTÁZEK</p><br>
<form method="post" name="mujform" action="vyhodnoceni.php"
onSubmit="mujform.mujsubmit.value='Odesílá se...';">
<?
require "./data.php";
$krok=1;
while($krok<=$pocetotazek): //CYKLUS PRO OTÁZKY
   echo "Otázka ".$krok.".:<br>";
   echo "<b>".${"q".$krok}[0]."</b>";
   $subkrok=1;
   while($subkrok<=$pocetmoznosti): //CYKLUS PRO JEDNOTLIVÉ ODPOVĚDI
      echo "<br><input type=\"radio\" value=\"" . $subkrok .
      "\" name=\"a".$krok."\">".${"q".$krok}[$subkrok];
      $subkrok++;
   endwhile;
echo "<br><hr noshade>";
$krok++;
endwhile;
echo "<center><br>
<input type=\"submit\" name=\"mujsubmit\" value=\"Odeslat\">
</center>";
?>
</form>
</body>
</html>

Ve výše uvedeném kódu hlavni.php je kompletní zdrojový kód stránky, jehož stěžejní část tvoří formulář s otázkami a odpověďmi.  Na úplném začátku PHP skriptu se do hlavni.php vloží data.php. Následují dva vnořené cykly pro zobrazování otázek a odpovědí, přičemž nadřízený cyklus projíždí jednotlivé otázky a vnořený cyklus zobrazuje pro danou otázku její možné odpovědi. Princip fungování těchto cyklů, domnívám se, je zřejmý. Zastavím se alespoň u konstukce složeného názvu proměnné s níž se zde pracuje. Jak jsme si řekli v úvodu, názvy polí s jednotlivými otázkami jsou jsou q1, q2, q3..... Naším úkolem je podívat se v cyklu na jednotlivé otázky - tedy jednotlivá tato pole - to zajistíme právě pomocí zápisu ${"q".$krok}, protože všechny proměnné (pole) začínají "q" a následuje číslo odpovídající číslu otázky - toto číslo se bude v cyklu stále zvyšovat (dokud nebude dosaženo počtu požadovaného počtu otázek). Abychom mohli v názvu proměnné využít obsah jiné proměnné, využíváme složených závorek. Podobné skládání (ale již bez složených závorek) se nám objevuje ještě u názvu (name) radiobuttonů v cyklu pro jednotlivé odpovědi - name=\"a".$krok."\". Zajistíme takto příslušné názvy proměnných (paramerů), které se budou předávat skriptu vyhodnoceni.php.

Na závěr se zastavím ještě u malinkatého (pro funkčnost kvízu nepodstatného) javascriptu, který zajistí změnu nápisu na tlačítku pro odeslání kvízu po jeho odeslání (z "Odeslat" na "Odesílá se..."). Je to detail, který se hodí, zvláště má-li návštěvník kvízu pomalejší připojení a změna nápisu na tlačítku mu dá jasně najevo "že se něco už děje". Jedná se o akci onSubmit="mujform.mujsubmit.value='Odesílá se...';" u elementu FORM, kde mujform a mujsubmit odpovídají názvu formuláře a názvu tlačítka pro odeslání.

Tolik pro dnešek. Příště si ukážeme jak zpracovat data, která nám z hlavni.php přijdou, zobrazit vyhodnocení kvízu a zapsat výsledky a statistiky.

Pecka Miroslav


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.79 (2440)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
Radka08.10.14:07Máte to pořád špatně
pavel Prochazka.zde.cz25.08.19:37DIakritika
dusko15.11.12:15co za blbost
martin11.05.11:07dotaz
libor11.03.13:11Mate to blbe
Miroslav Pecka11.03.19:15RE: Mate to blbe
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!