Jak stworzyć zaawansowany test wyboru lub quiz, PHP Skrypty


[PHP] Jak stworzyć zaawansowany test wyboru lub quiz?

0x01 graphic

Chcesz stworzyć rozbudowany test wyboru, gdzie użytkownik może wybrać jedną z kilku sugerowanych odpowiedzi w wielu pytaniach, jak w przykładzie

0x01 graphic

Dobry test powala losować kolejność pytań i kolejność odpowiedzi w pytaniu. Umożliwia również podgląd ile procent testu zostało wykonane poprawnie, pozwala też na umieszczenie komentarza w zależności od stopnia poprawności rozwiązania testu.

Inną ważną cechą jest łatwe przygotowanie pytań i odpowiedzi. Mało tego - test powinien działać z dowolną ilością pytań i dowolną ilością odpowiedzi w każdym pytaniu, a więc musi być zupełnie elastyczny i dać się dowolnie kształtować.

Ponieważ pytania i odpowiedzi są wyświetlane na stronie WWW nic nie stoi na przeszkodzie aby dołączać do nich zdjęcia czy pliki za pomocą poleceń HTML, co spowoduje, że test będzie w pełni interaktywny.

Właśnie taki test przedstawiony poniżej. Zobacz jak go wykonać:

<?

$pytania = file("test001.txt");

$k5 = "<b>GRATULACJE!</b> <p>Twoja wiedza jest imponująca!";

$k4 = "Bardzo dobrze. Jeszcze trochę wysiłku i zostaniesz mistrzem!";

$k3 = "Poszło Ci przeciętnie. Koniecznie musisz wzbogacić swoją wiedzę!";

$k2 = "Oj... słabo. Pora nadrobić braki i uzupełnić swoje wiadomości!";

$k1 = "To nie były dobre odpowiedzi. Musisz się bardziej przyłożyć!";

$f = $_POST["f"];

$wyniki = $_POST["wyniki"];

srand((double)microtime()*1000000);

if ($wyniki>0) {

$ile = count($pytania); $dobre=0;

for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;

$srednia=sprintf("%2d",($dobre/$ile)*100);

echo "<p><center>Poprawne odpowiedzi: $dobre z $ile. ";

echo "Zaliczone $srednia procent testu.<p>";

if ($srednia<=25) echo $k1;

if ($srednia>25 && $srednia<=50) echo $k2;

if ($srednia>50 && $srednia<=75) echo $k3;

if ($srednia>75 && $srednia<=99) echo $k4;

if ($srednia==100) echo $k5;

echo "</center>";

} else {

echo "<form action=\"index.php\" method=\"post\">";

echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\">";

$ile = count($pytania);

for($i=0;$i<$ile;$i++) {

$nr = array_rand($pytania);

$tmp = $pytania[$nr];

$pytania[$nr] = $pytania[count($pytania)-1];

$pytania[count($pytania)-1] = $tmp;

$pyt = explode("`", array_pop($pytania));

echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";

for ($b=1;$b<=count($pyt)-1;$b++)

$odp[]="<input type=radio name=\"f[$i]\" value=\"$b\">$pyt[$b]<br>";

$ileodp=count($odp);

for($io=0;$io<$ileodp;$io++) {

$nr=array_rand($odp);

$tmp=$odp[$nr];

$odp[$nr]=$odp[count($odp)-1];

$odp[count($odp)-1]=$tmp;

echo array_pop($odp);

}

}

echo "<center><input type=submit value=\" Gotowe! \"></center></form>";

}

?>

Zmienna $pytania jest tablicą, do której wczytywana jest zawartość pliku test001.txt przechowującego pytania - nazwa pliku może być dowolna. Składnię pytań i konstrukcję tego pliku opiszę na końcu.

Zmienne od $k1 do $k5 są komentarzami wypisywanymi w zależności od tego jak ktoś sobie poradził z odpowiedziami. Do nich też wrócę za chwilę, gdy pojawią się w skrypcie.

Zmienna $wyniki ustawiana jest na wartość 1 gdy wciśnięty zostanie guzik "Gotowe!" po wypełnieniu testu, dzięki czemu wiadomo od razu czy należy pokazać wynik czy wygenerować test. Zmienna $f zwraca zaznaczone odpowiedzi poszczególnych pytań.

Jeżeli zmienna $wyniki jest większa od zera, a więc użytkownik odpowiedział na pytania, obliczane są wyniki testu. Liczba dobrych odpowiedzi jest zerowana, a następnie w pętli sprawdzamy czy wskazana odpowiedź równa jest 1. Jeżeli tak, odpowiedź jest dobra.

System testowania odpowiedzi jest sprytny, bo pomimo tego, że odpowiedzi są przypadkowo ułożone w tescie, ich numeracja jest zgodna z układem pytań w pliku. Ponieważ zawsze pierwsza odpowiedź w pliku jest poprawna, wystarczy sprawdzić czy wskazana odpowiedź jest równa 1.

Na koniec wyliczana jest średnia z całego testu w procentach, ilość dobrych i wszystkich odpowiedzi oraz pokazywane są komentarze (możesz je wyłączyć, jeżeli będą zbędne).

Komentarze podzieliłem na pięć grup. Od 0 do 25 proc., od 26 do 50 proc., od 51 do 75 proc., od 76 do 99 proc. i 100 proc. Użytkownik może więc od razu otrzymać prognozy ocen lub komentarze słowne w zależności od tego, jak dobrze rozwiązał test.

Nieco bardziej rozbudowana jest część generująca test na podstawie pytań z pliku. Po wypisaniu nagłówka formularza losowana jest kolejność pytań. Następnie wypisywany jest tytuł pytania i losowana jest kolejność odpowiedzi w pytaniu.

Proces ten trwa tyle razy ile jest pytań, więc za każdym uruchomieniem testu, pytania i odpowiedzi ułożone są zupełnie inaczej. Nie można nauczyć się kolejności na pamięć, co powoduje, że test dobrze spełnia swoją rolę.

Najważniejsza jest oczywiście konstrukcja pliku z pytaniami i odpowiedziami. Każde pytanie i odpowiedzi znajdują się w osobnej linijce i zawsze pierwsza odpowiedź za pytaniem jest poprawna. W pliku nie może być pustych linii.

Odpowiedzi w pytaniu może być dowolna ilość. Pytań również może być dowolnie wiele. Poszczególne pytania i odpowiedzi muszą być oddzielone znakiem `. Oto przykładowa zawartość pliku:

Jakie miasto jest stolicą Polski?`Warszawa`Poznań`Kraków`Płock

Kiedy była bitwa pod Grunwaldem?`1410`1456`1520`1100`nigdy jej nie było!

Najbardziej znana mysz?`Miki`Mia

Co to jest PHP?`język programowania`bohater kreskówki`marka kotłów parowych

Zapis jest więc bardzo prosty. Pytanie, dobra odpowiedź, pozostałe odpowiedzi. Możesz wpisać dowolną ilość pytań i odpowiedzi, każde pytanie w jednej linijce, nawet gdy odpowiedzi są długie. Całość zapisz w zwykłym pliku tekstowym.



Wyszukiwarka

Podobne podstrony:
jak stworzyc licznik klikniec ze statystyka dzienną, PHP Skrypty
Jak sprawdzić czy zmienna przechowuje liczbę całkowitą lub rzeczywistą, PHP Skrypty
jak miedzy stronami przesłać zmienne korzystajac z sesji, PHP Skrypty
Jak zrobić licznik pobrań plików ze strony, PHP Skrypty
Jak zrobić przekierowanie z jednej strony na drugą, PHP Skrypty
jak wypisac zawartosc bazy danych dBase (dbf), PHP Skrypty
Jak dopisać dane na początku pliku tekstowego, PHP Skrypty
Jak wygenerować statyczny plik .html z bazy danych, PHP Skrypty
Jak zamienić liczby na kwoty zapisane słownie, PHP Skrypty
jak samodzielnie obliczyc numer dnia w dowolnym roku, PHP Skrypty
Jak odbierać dane pochodzące z różnych pól formularza, PHP Skrypty
Jak wysłać list do grup dyskusyjnych USENET, PHP Skrypty
Jak cenzurować wypowiedzi i brzydkie słowa na forum, PHP Skrypty
jak w grafice zmienic wybrane kolory na inne, PHP Skrypty
jak wykonac strone z logowaniem do innej strony, PHP Skrypty
Jak automatycznie pokolorować na przemian wiersze tabeli, PHP Skrypty
Jak stworzyć prostą wyszukiwarkę dla własnych stron WWW, PHP Skrypty
Jak stworzyć indeks pierwszych liter dla wybranej kolumny z tabeli, PHP Skrypty

więcej podobnych podstron