Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Prosty skrypt na quiz
folt3k
post 19.02.2014, 10:35:45
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
Kshyhoo
post 19.02.2014, 10:51:14
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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"?


--------------------
Go to the top of the page
+Quote Post
markuz
post 19.02.2014, 10:52:46
Post #3





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


Użyj sesji, przechowuj w nich identyfikator ostatniego pytania na które odpowiedział użytkownik i wyświetlaj następne pytanie.


--------------------
Go to the top of the page
+Quote Post
folt3k
post 19.02.2014, 13:18:35
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
Turson
post 19.02.2014, 13:25:19
Post #5





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


@$odp = $_GET['odp'];
formularz wysyła post a nie get
Go to the top of the page
+Quote Post
folt3k
post 19.02.2014, 13:38:05
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


Tak wiem, już to zmieniłem. Ale nadal to nie działa smile.gif
Go to the top of the page
+Quote Post
markuz
post 19.02.2014, 13:38:19
Post #7





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


  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.


--------------------
Go to the top of the page
+Quote Post
folt3k
post 19.02.2014, 14:43:18
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
markuz
post 19.02.2014, 15:02:16
Post #9





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

Ostrzeżenie: (0%)
-----


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.



--------------------
Go to the top of the page
+Quote Post
folt3k
post 19.02.2014, 15:28:17
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.02.2014

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
Kshyhoo
post 19.02.2014, 16:00:52
Post #11





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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...


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2025 - 00:51