Cześć!
Chciałbym opowiedzieć jak zrobić prosty quiz w języku PHP. Niedawno wykonałem sobie taki quiz, ponieważ nabrałem ochoty na programowanie. Wytłumaczę też zasadę jego działania. Do dzieła!
Quiz od strony użytkownika
Na pewno każdy spotkał się z quizami w swoim życiu. Czy to rozwiązując je dla zabawy, z braku lepszego zajęcia, szlifując swoje umiejętności bądź wiedzę lub co gorsza zdając jakiś ważny egzamin. Quiz składa się z pytania oraz dołączonych do niego dwóch, trzech lub nawet czterech odpowiedzi, z których tylko jedna jest prawidłowa. Oczywiście zdarzają się też takie typy, gdzie można zaznaczyć więcej niż jedną odpowiedź, ponieważ pytanie posiada więcej niż jedną prawidłową odpowiedź. W tym przypadku quiz będzie miał 4 odpowiedzi a jedna z nich będzie odpowiedzią prawidłową. Będzie on wyglądał w takiej formie:
[nr] Jakieś pytanie?
a) Odpowiedź 1
b) Odpowiedź 2
c) Odpowiedź 3
d) Odpowiedź 4
To jest oczywiście szablon ale dla przykładu może to wyglądać w ten sposób:
1. Która planeta jest 3-cią od Słońca?
a) Mars
b) Merkury
c) Ziemia
d) Wenus
Oczywiście prawidłową odpowiedzią na to pytanie jest Ziemia czyli odpowiedź C. W przypadku wybrania odpowiedzi C otrzymujemy jeden punkt. Natomiast, gdy wybrane zostaną inne odpowiedzi nie dzieje się nic czyli z naszym punktem możemy się pożegnać. Przy okazji wytłumaczyłem troszeczkę zasadę działania naszego kodu.
Quiz od strony programisty
Aby uzyskać quiz w takiej formie w jakiej przedstawiłem go w przykładzie powyżej należy wpisać następujący kod HTML:
<h2><b>1. Która planeta jest 3-cią od Słońca?</b></h2>
<input type=”radio”/> a) Mars <br><br>
<input type=”radio”/> b) Merkury <br><br>
<input type=”radio”/> c) Ziemia <br><br>
<input type=”radio”/> d) Wenus <br><br>
Po wpisaniu takiego kodu w przeglądarce ukaże nam się pytanie w takiej okazałości jak w przykładzie powyżej. Dodam tylko, że tag h1 to nagłówek pierwszego stopnia, który wyróżni pytanie od odpowiedzi a tag b powoduje pogrubienie tekstu. No dobrze ale to tylko wygląd. Po zaznaczeniu odpowiedzi nic się stanie a przecież chcielibyśmy się dowiedzieć jaką ilość punktów uzyskaliśmy. Tu już wkracza nam z pomocą PHP.
System sprawdzania odpowiedzi i liczenia punktów
Nasz system będzie działał następująco: Wszystkie nasze odpowiedzi zostaną przesłane do osobnego pliku z kodem PHP. Tam serwer porówna je z prawidłowymi odpowiedziami i jeśli są poprawne przydzieli nam punkty. Zatem aby takie przesłanie danych się u nas odbyło powyższy kod HTML trzeba trochę poszerzyć. Będzie on wyglądał tak:
<form action=”wynik.php” method=”post”>
<h2><b>1. Która planeta jest 3-cią od Słońca?</b></h2>
<input type=”radio” name=”pytanie1” value=”a”/> a) Mars <br><br>
<input type=”radio” name=”pytanie1” value=”b”/> b) Merkury <br><br>
<input type=”radio” name=”pytanie1” value=”c”/> c) Ziemia <br><br>
<input type=”radio” name=”pytanie1” value=”d”/> d) Wenus <br><br>
<input type=”submit” value=”Sprawdź wynik”/>
</form>
Już wyjaśniam wszystko po kolei. Wszystko zamknęliśmy w formularzu, do którego przypisaliśmy 2 atrybuty action i method. Action oznacza plik do jakiego nasze odpowiedzi zostaną przesłane w tym przypadku trafią one do pliku wynik.php. Method natomiast określa jaką metodą je prześlemy. W tym przypadku posłużymy się metodą POST. Do naszych odpowiedzi zostały również przypisane wartości takie jak name oraz value. Name oznacza nazwę jaką będzie nosiła nasza zmienna $_POST, która będzie zawierać naszą odpowiedź. Czyli w tym przypadku nasza odpowiedź trafi do zmiennej: $_POST[‘pytanie1’]. Value natomiast określa co będzie przechowywała ta zmienna. Czyli na przykład jak wybierzemy odpowiedź C to będzie ona wartością tej zmiennej. Zatem: $_POST[‘pytanie1’] = „c” . Na końcu umieszczony został jeszcze przycisk który wysyła te dane do pliku wynik.php a tam dane trafiają do odpowiednich zmiennych. Skoro nasze dane są już na miejscu i wiemy jakich odpowiedzi udzielono to możemy przystąpić do ich sprawdzenia. Otwieramy kod PHP, a robimy to w ten sposób:
<?php
//jakiś kod
?>
Teraz tworzymy zmienne, które będą przechowywać dane pamiętając przy tym że w języku PHP linijkę należy zamknąć posługując się średnikiem.
<?php
$_POST[‘pytanie1’];
?>
W ten sposób dajemy znać serwerowi, że istnieje taka zmienna, która przechowuje wartość przesłaną z pliku. Tworzymy też sobie zmienną, która będzie przechowywała nasze zdobyte punkty nazwijmy ją na przykład po prostu punkty. Na początku nie mamy żadnych punktów, bo będziemy je dopiero zdobywać, więc jej wartość będzie wynosić 0.
<?php
$_POST[‘pytanie1’];
$punkty = 0;
?>
Teraz musimy sprawdzić czy wybrana odpowiedź, jest prawidłowa. Załóżmy, że prawidłową odpowiedzią jest B. Skorzystamy tutaj z instrukcji warunkowej if.
<?php
$_POST[‘pytanie1’];
$punkty = 0;
If($_POST[‘pytanie1’]==”b”)
{
$punkty++;
}
Else
{
;
}
?>
W tym przypadku zaprogramowaliśmy serwer w ten sposób, że porównuje on rzeczywistą wartość zmiennej z wartością, którą powinna zawierać. Jeśli są takie same do wartości zmiennej punkty zostaje dodane 1 czyli w tym przypadku 0+1, więc obecnie wartość zmiennej punkty wynosi 1. Jeżeli wartości są różne nie dzieje się nic. Analogicznie robimy z pozostałymi pytaniami. Na koniec dobrze by było, gdyby te zdobyte przez nas punkty zostały wyświetlone. W pliku .php możemy posługiwać się językiem HTML. Język HTML i PHP współgrają ze sobą a to nam ułatwi sprawę. Wyświetlamy zdobytą ilość punktów. Możemy to zrobić na przykład w ten sposób:
<h1>Test zakończony</h1>
<p>Zdobyłeś <?php echo $punkty; ?> na 10 punktów.</p>
W tym przypadku do naszego tekstu zostaje wyświetlona wartość zmiennej punkty.
Komentarze zależne od wyniku
Można jeszcze do uzyskanego wyniku dodać komentarz, inny w zależności od uzyskanej liczby punktów. Na przykład jeśli ilość zdobytych punktów zawiera się w przedziale od 10 do 7 to wyświetli się komentarz „Nieźle ci poszło” , jeśli zawiera się w przedziale od 6 do 3 komentarz będzie następujący „Dobrze, ale mogło być lepiej”, a jeśli wynik jest mniejszy od 3 to komentarz będzie wyglądał tak: „Poszło Ci słabo. Musisz jeszcze poćwiczyć.” Tutaj również skorzystamy z instrukcji warunkowej tylko, że będzie ona bardziej złożona bo będzie ona zawierać aż 3 warunki.
if(($punkty<=10) && ($punkty>=7))
{
echo „Nieźle ci poszło”;
}
elseif(($punkty<=6) && ($punkty>=3))
{
echo „Dobrze, ale mogło być lepiej”;
}
elseif($punkty<3)
{
echo „Poszło Ci słabo. Musisz jeszcze poćwiczyć” ;
}
Na zakończenie
Myślę, że wszystko już wytłumaczyłem w miarę dokładnie. Niedługo pojawią się nowe posty, mam nadzieję, że będą równie ciekawe jak ten. Post ten jest trochę dłuższy niż pozostałe, ale mam nadzieję, że jest on ciekawy i nie zanudzicie się zbytnio czytając go a może nawet czego sobie i wam życzę nauczycie się coś od niego. Dziękuję, że poświęciliście mi swoją cenną uwagę. Pozdrawiam!