Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prosty skrypt na quiz
Forum PHP.pl > Forum > Przedszkole
folt3k
Witam,

Postanowiłem stworzyć quiz w PHP i zadanie to po części mi się udało. Quiz, którego wszystkie pytania są na jednej stronie działa bez zarzutu.

Ale chodzi mi o stworzeniu quizu, w którym po kliknięciu w przycisk "Odpowiedz" ładuję się nowa strona z nowym pytaniem.

Próbowałem różnych sposobów, gdzie z strony pytanie1.php otwierało stronę pytanie2.php, a z kolei z tej pytanie3.php.
Ale niestety nie działa to. Proszę o udzielenie informacji jak mam się za to zabrać, pozdrawiam!
Kshyhoo
Po co zakładasz więc dwa tematy, różniące się jedynie tytułem? Pokaż swoją pracę, jak przekazywałeś dane i co "nie działa to"?
markuz
Użyj sesji, przechowuj w nich identyfikator ostatniego pytania na które odpowiedział użytkownik i wyświetlaj następne pytanie.
folt3k
Poniżej zamieszczam kod trzech stron z pytaniami. proszę o napisanie co jest nie tak.


QUIZ1.PHP

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <?
  4. ?>
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  9. <title>QUIZ 1</title>
  10. </head>
  11.  
  12.  
  13. <body>
  14. <h1>Pierwszym królem Polski był:
  15. </h1><br />
  16.  
  17.  
  18. <form action="quiz2.php" method="post"><INPUT name="odp" TYPE="Radio" VALUE="a">
  19. Mieszko I
  20. <br>
  21. <INPUT name="odp" TYPE="Radio" VALUE="b">
  22. Bolesław Chrobry
  23. <br>
  24. <INPUT name="odp" TYPE="Radio" VALUE="c">
  25. Kazimierz Wielki
  26. <br />
  27. <input name="submit" type="submit" value="Wyslij" /></form>
  28.  
  29. <?php
  30.  
  31. @$odp = $_GET['odp'];
  32.  
  33. if($odp == "a") {
  34. $_SESSION['poprawne']++;
  35. }
  36. ?>
  37.  
  38. </body>
  39. </html>


QUIZ2.PHP

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <?
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>Untitled Document</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12. <h1>W którym roku Polska przyjęła chrzest?
  13. </h1><br />
  14.  
  15. <form method='post' action='quiz3.php'>
  16.  
  17. <INPUT name='odp2' TYPE='Radio' VALUE='a'>
  18. 966<br>
  19. <INPUT name='odp2' TYPE='Radio' VALUE='b'>
  20. 1025<br>
  21. <INPUT name='odp2' TYPE='Radio' VALUE='c'>
  22. 1235<br />
  23. <input name='submit' type='submit' value='Wyslij' />
  24.  
  25. </form>
  26.  
  27. <?php
  28.  
  29. $odp2 = $_POST['odp2'];
  30.  
  31. if ($odp == "a") {
  32. $_SESSION['poprawne']++;
  33. }
  34. ?>
  35.  
  36. </body>
  37. </html>
  38.  


QUIZ3.PHP

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7.  
  8. <body>
  9. <h1>Który wladca był ostatnim królem z dynastii Piastów?
  10. </h1>
  11.  
  12. <form>
  13.  
  14. <INPUT name='odp3' TYPE='Radio' VALUE='a'>
  15. Kazimierz Wielki<br>
  16. <INPUT name='odp3' TYPE='Radio' VALUE='b'>
  17. Bolesław Śmiały<br>
  18. <INPUT name='odp3' TYPE='Radio' VALUE='c'>
  19. Kazimierz Odnowiciel<br />
  20. <input name='submit' type='submit' value='Wyslij' />
  21.  
  22. </form>
  23.  
  24. <?php
  25.  
  26. $odp3 = $_POST['odp3'];
  27.  
  28. if($odp3 == "a") {
  29.  
  30. $_SESSION['poprawne']++;
  31. }
  32. echo $_SESSION['poprawne'];
  33.  
  34. ?>
  35.  
  36. </body>
  37. </html>
Turson
@$odp = $_GET['odp'];
formularz wysyła post a nie get
folt3k
Tak wiem, już to zmieniłem. Ale nadal to nie działa smile.gif
markuz
  1. <?php
  2.  
  3. $questions = array(1 => 'Pytanie 1', 2 => 'Pytanie 2', 3 => 'Pytanie 3');
  4. if(!isset($_SESSION['last_question'])) $_SESSION['last_question'] = 0;
  5.  
  6. $question = $_SESSION['last_question'] + 1;
  7.  
  8. echo $questions[$question];
  9.  
  10. $_SESSION['last_question'] = $question;

Kod pisany z palca, możliwe błędy. Do tego dodajesz wyświetlanie pytań zamiast echo $questions[$question] możesz zrobić switcha i wyświetlać konkretne quizy.
folt3k
Dzięki, przerobiłem go trochę i gdy pytania są na jednej stronie to wszystko super działa.

Ale zależy mi na tym aby po odpowiedzeniu na pierwsze pytanie na stronie np. pytanie1.php, skrypt przenosił nas na drugą stronę z drugim pytaniem.
markuz
Ciekawi mnie twój kod po przerobieniu wink.gif Zamiast tworzyć pliki z pytaniami od pytanie1.php do pytanieN.php lepiej zastosować tablicę (jak na przykładzie który Ci podałem) i wszystko robić w 1 pliku.

folt3k
Zrobiłem to tak, wiem że źle, ale jestem na takim poziomie, że lepiej nie byłem w stanie wykorzystać twojego skryptu biggrin.gif


  1. <?php session_start(); ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>Untitled Document</title>
  7.  
  8. </head>
  9.  
  10. <body>
  11.  
  12. <?php
  13.  
  14. $questions = array(1 => 'Pytanie 1', 2 => 'Pytanie 2', 3 => 'Pytanie 3');
  15. if(!isset($_SESSION['last_question'])) $_SESSION['last_question'] = 0;
  16.  
  17. $questions[1] = "<form method='post' action=''>
  18.  
  19. <INPUT name='odp3' TYPE='Radio' VALUE='a'>
  20. Kazimierz Wielki<br>
  21. <INPUT name='odp3' TYPE='Radio' VALUE='b'>
  22. Bolesław Śmiały<br>
  23. <INPUT name='odp3' TYPE='Radio' VALUE='c'>
  24. Kazimierz Odnowiciel<br />
  25.  
  26. </form>";
  27.  
  28. echo $questions[1];
  29.  
  30. @$odp3 = $_POST['odp3'];
  31.  
  32. if ($odp3 == "a") {
  33. $_SESSION['last_question']++;
  34. }
  35.  
  36. $questions[2] = "<form method='post' action=''>
  37.  
  38. <INPUT name='odp2' TYPE='Radio' VALUE='a'>
  39. 966<br>
  40. <INPUT name='odp2' TYPE='Radio' VALUE='b'>
  41. 1025<br>
  42. <INPUT name='odp2' TYPE='Radio' VALUE='c'>
  43. 1235<br />
  44. <input name='submit' type='submit' value='Wyslij' />
  45.  
  46. </form>" ;
  47.  
  48. echo $questions[2];
  49.  
  50. @$odp2 = $_POST['odp2'];
  51. if($odp2 == "a") {
  52. $_SESSION['last_question']++;
  53. }
  54.  
  55. echo $_SESSION['last_question'];
  56.  
  57. ?>
  58.  
  59. </body>
  60. </html>
Kshyhoo
Skrypt musi być uniwersalny, więc może umieść pytania i odpowiedzi np. w pliku (zauważ, że może być różna ilość odpowiedzi):
Cytat
Pytanie 1|Odpowiedź A|Odpowiedź B|Odpowiedź C|
Pytanie 2|Odpowiedź A|Odpowiedź B|Odpowiedź C|Odpowiedź D|Odpowiedź E
Pytanie 3|Odpowiedź A|Odpowiedź B|Odpowiedź C|Odpowiedź D

A potem pobierałbyś pytania:
  1. $pytania = file("test.txt");
  2.  
  3. $komunikat5 = "Genialnie";
  4. $komunikat4 = "Bardzo dobrze";
  5. $komunikat3 = "Średnio";
  6. $komunikat2 = "Słabo";
  7. $komunikat1 = "Lipa";
  8.  
  9. $f = $_POST["f"];
  10. $wyniki = $_POST["wyniki"];
  11. srand((double)microtime() * 1000000);
  12.  
  13. if ($wyniki>0) {
  14. $ile = count($pytania); $dobre = 0;
  15. for ($o=0; $o<$ile ;$o++)
  16. if ($f[$o] == 1)
  17. $dobre++;
  18. $srednia = sprintf("%2d", ($dobre / $ile) * 100);
  19. echo "Poprawne odpowiedzi: $dobre z $ile. ";
  20. echo "Zaliczone $srednia procent testu.<p>";
  21. if ($srednia <= 25) echo $komunikat1;
  22. if ($srednia > 25 && $srednia <= 50) echo $komunikat2;
  23. if ($srednia > 50 && $srednia <= 75) echo $komunikat3;
  24. if ($srednia > 75 && $srednia <= 99) echo $komunikat4;
  25. if ($srednia == 100) echo $komunikat5;
  26. echo "";
  27. } else {
  28. echo "<form action=\"quiz2.php\" method=\"post\">";
  29. echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
  30. $ile = count($pytania);
  31. for($i=0;$i<$ile;$i++) {
  32. $nr = array_rand($pytania);
  33. $tmp = $pytania[$nr];
  34. $pytania[$nr] = $pytania[count($pytania) - 1];
  35. $pytania[count($pytania) - 1] = $tmp;
  36. $pyt = explode("|", array_pop($pytania));
  37. echo "<p><strong>";
  38. echo $i + 1;
  39. echo ". $pyt[0] </strong><br>";
  40. for ($b=1;$b<=count($pyt)-1;$b++)
  41. $odp[] = "<input type=\"radio\" name=\"f[$i]\" value=\"$b\" />$pyt[$b]<br />";
  42. $ileodp = count($odp);
  43. for($io=0;$io<$ileodp;$io++) {
  44. $nr = array_rand($odp);
  45. $tmp = $odp[$nr];
  46. $odp[$nr] = $odp[count($odp) - 1];
  47. $odp[count($odp) - 1] = $tmp;
  48. echo array_pop($odp);
  49. }
  50. }
  51. echo "<input type=submit value=\" Odpowiedz! \" /></form>";
  52. }

I wszystko mieści się na jednej stronie...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.