Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Test - pomoc w zliczeniu wyników
Forum PHP.pl > Forum > Przedszkole
asterf
Witam
Pełno quizow nie do końca przemyślanych i działających na forach i różnych stronkach, sam chciałem z jednego skorzystać ale jego doprowadzenie do działania przy jego poziomie skomplikowania okazało się udręką. Więc postanowiłem sam zacząć pisać. Liczę na waszą pomoc i uprzedzam, że jestem totalnie początkujący także nie wszystkie podpowiedzi od razu do mnie trafią. Forum przejrzałem i nie znalazłem podobnych do mojego problemów, przynajmniej nie do końca, a mam też pytania także zakładam ten temat. Nie wiem też czy podam wszystko co potrzeba...

Test odczytuje pytania z bazy danych, gdzie w tabeli mamy strukturę:
id | pytanie | obrazek

Pytanie jest zapisane razem z odpowiedziami w formie ( pytanie`odp1`odp2`odp3 ), pierwsza odpowiedź jest poprawna.
Taki układ został z użycia gotowca przerobionego przeze mnie z txt na mysql, który jak się okazało po wprowadzeniu 500 pytań do bazy w taki głupi sposób nie działa.
Liczba pytań będzie dowolna, ustalana przez administratora, losowana z bazy dlatego nie mogę statycznie dać pytań i łatwo porównać odpowiedzi, trochę to wykracza poza moją wyobraźnię;]
Udało mi się zrobić pewnie niewiele, losuje pytania, wypisuje je oraz odpowiedzi do nich w przelosowanej kolejności co jest konieczne, ponieważ w bazie zawsze pierwsza jest poprawna:

  1. srand((double)microtime()*1000000);
  2.  
  3. $ilosc_pytan=30;
  4. $sql = mysql_query("SELECT id,pytanie,obrazek FROM pytania ORDER BY RAND() LIMIT $ilosc_pytan");
  5. $i=1;
  6. while($pytania = mysql_fetch_array($sql))
  7. {
  8. $pyt = explode("`", $pytania['pytanie']);
  9. $nr_pyt[$i]=$pytania['id'];
  10. $tresc_pyt[$i]= $pyt[0];
  11. $odpp[$i]=$pyt[1];
  12. $odp[$i][0]=$pyt[1];
  13. $odp[$i][1]=$pyt[2];
  14. $odp[$i][2]=$pyt[3];
  15. $obrazek[$i]=$pytania['obrazek'];
  16. $i++;
  17. }
  18. $i=0;
  19.  
  20. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  21. $zaznaczone = $_POST["zaznaczone"]; //Jak wiecie tutaj zaczyna się dla mnie problem, niżej opiszę czego nie potrafię
  22.  
  23. if($_POST['zaznaczone'])
  24. {
  25. $poprawne=0;
  26. $bledy=0;
  27.  
  28. if ()
  29.  
  30. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  31. echo "<form method=\"post\">";
  32. echo "<input type=\"hidden\" name=pytanie value=>";
  33.  
  34. for($i=1;$i<=$ilosc_pytan;$i++)
  35. {
  36. if(!empty($obrazek[$i]))
  37. echo "<IMG SRC=".$obrazek[$i]."><br>";
  38. else
  39. echo "<br>";
  40. echo "<b>$i. $tresc_pyt[$i]</b><br>";
  41.  
  42. shuffle($odp[$i]);
  43. for($j=0;$j<=2;$j++)
  44. {
  45. $odpz[] = "<input type=radio name=\"zaznaczone[$odp[$i]]\" value=>".$odp[$i][$j].""; [b]// nie wiem jakie tu dać value i name, oraz jak potem się odwołać[/b]
  46. echo array_pop($odpz);
  47. if ($j==0||$j==1||$j==2)
  48. echo "<br>";
  49. }
  50.  
  51. echo "<br>------------------------------------------------------------------------------------------------------------<br>";
  52. }
  53. echo "<br><input type=submit value=\" Gotowe! \"></form>";


Wiem, że jak już dojdę do rozwiązania będę musiał zapisać w zmiennych sesji zaznaczone w teście odpowiedzi żeby ich nie stracić, ale to na razie pomińmy.
Czy ktoś może mi jakoś pomóc lub trochę mnie naprowadzić?smile.gif Test stoi pod adresem http://www.tczew.net.pl/~asterf/inz/moj.php
IceManSpy
Pierwsza rzecz co widzę to:
  1. srand((double)microtime()*1000000);
  2.  
  3. $ilosc_pytan=30;
  4. $sql = mysql_query("SELECT id,pytanie,obrazek FROM pytania ORDER BY RAND() LIMIT $ilosc_pytan");
Po co Ci srand, skoro go nie używasz? Do losowania używasz RAND() w zapytaniu, więc skasuj tego sranda.
Cytat
Wiem, że jak już dojdę do rozwiązania będę musiał zapisać w zmiennych sesji zaznaczone w teście odpowiedzi żeby ich nie stracić, ale to na razie pomińmy.
Tego trochę nie rozumiem. Nie musisz zapisywać do zmiennych sesji, musisz jakoś przesłać zmienne czyli te radio o nazwach zaznaczone[$odp[$i]] i potem sprawdzać, czy jest poprawne.

Ogólnie musisz się zastanowić, jak to ma działać. Najlepiej na kartce narysuj sobie schemat i potem zaprogramuj. Nie programuj, a potem myśl nad działaniem. Tak jest strasznie pod górę smile.gif
asterf
To jest tak że gdybym chciał w tym samym pliku wyświetlić wyniki to owszem, po naciśnięciu submita strona się odświeża i musiałbym mieć w zmiennych sesji prawda? Bo inaczej wylosuje mi nowe pytania i już do poprzednich nie będę mógł się odwołać...

No fakt rand już zastąpiony przez shuffle().

Widzę jak to ma działać, ale nie wiem jak zapisać sobie to name i value przy radio i potem się odwołać do tego ;/
Wiem, że muszę zaciągnąć z name zmienną $odp[$i] i porównać z $odpp[$i] ale jak to zapisać...
Name może zostać tak jak jest?

EDIT:właśnie zauważyłem, że tak jak mam teraz mogę zaznaczyć odpowiedź tylko w jednym pytaniu, nie bardzo wiem dlaczego i jak to zmienić;/
skarabe.pl
W name musisz dać numer pytania - tylko w ten sposób seria radiobuttonów będzie działać tak, jak powinna. Wpisz tam np. "pytanie-$i". W value daj indeks pytania (samo $j). Jeżeli chodzi o samo losowanie, to musisz sobie zapisać do sesji tablicę przypisań typu: "numer pytania" => "indeks prawidłowej odpowiedzi" - dzięki temu będziesz mógł się do tego odwołać w skrypcie zliczającym wyniki. Dlatego, dla spójności, warto by było shuffle zrobić już przy pobieraniu danych z bazy.
asterf
skarabe.pl o taką pomoc mi chodziło:) Możesz powiedzieć czy tak będzie ok? Czy to da mi w zmiennej sesji USERTESTODPZ zaznaczoną w radio odpowiedź dla każdego pytania ?

  1. if($_POST['submit'])
  2. {
  3. for($i=1;$i<=$ilosc_pytan;$i++)
  4. {
  5. $_SESSION['USERTESTODPZ'][$i]=$_POST['$tresc_pyt[$i]'];
  6. .........
  7. }
  8.  
  9. else
  10. {
  11. echo "<form method=\"post\">";
  12. echo "<input type=\"hidden\" name=pytanie value=>";
  13. ......
  14. for($j=0;$j<=2;$j++)
  15. echo "<input type=radio name=\"$tresc_pyt[$i]\" value=\".$odp[$i][$j].\">".$odp[$i][$j]."";
  16. ......
  17. echo "<br><input type=submit value=\" Gotowe! \"></form>";
  18.  
  19. }
skarabe.pl
Cytat(asterf @ 3.08.2010, 15:13:47 ) *
skarabe.pl o taką pomoc mi chodziło:) Możesz powiedzieć czy tak będzie ok? Czy to da mi w zmiennej sesji USERTESTODPZ zaznaczoną w radio odpowiedź dla każdego pytania ?


Nie da, bo zamiast $_POST['$tresc_pyt[$i]']; powinno być $_POST[$tresc_pyt[$i]];, to raz. Dwa, że naprawdę dobrze radzę stosować w name i value ustandaryzowane wartości typu "pytanie-X" (gdzie X jest numerem pytania) w name i "X" (numer odpowiedzi) w value. Aha, a radzę tak dlatego, że jak Ci w końcu Twój pomysł przestanie działać (a dla pewnych pytań/odpowiedzi na 100% przestanie) to spędzisz tydzień szukając błędu, a i tak będziesz musiał ten skrypt napisać od nowa.
asterf
Ok dzięki za pomoc rolleyes.gif Takie nazwy mam już i tak we wszystkich skryptach gdzie odczytuję z POST'a i mi działają, jak przestaną to trudno.
A ten skrypt nie chce działać i jeszcze nie wiem dla czego... No nic ktoś kto chce uzyskać zamiast pomocy gotowy skrypt tu go nie dostanie.
Ja się staram i napisałem sam, ale i tak nic to nie zmienia, nikt nie rozwiąże za mnie problemu. Raczej nie ma to sensu, ale może ktoś coś podsunie patrząc na cały skrypt więc wrzucę.
Dodam, że taki mały test wyświetla dobrze pytania i poprawne odpowiedzi:
  1. for($i=1;$i<=$ilosc_pytan;$i++)
  2. {
  3. echo " ".$_SESSION['USERTESTPYT'][$i]."".$_SESSION['USERTESTODPP'][$i]." ";
  4. echo "<br>";
  5. }


Problem tkwi w tym ze do POSTA najwyraźniej nie przekazuje nic i w rezultacie po wybraniu submit test po prostu losuje się od nowa i nie przechodzi do wyników... Wydaje mi się że wszystko napisałem z sensem...

Cały skrypt:
  1.  
  2. $ilosc_pytan=30;
  3.  
  4. if (empty($_SESSION['USERTESTODPZ'])) //jesli nic nie zostalo przeslane z POST'a wykonuje zapytanie SQL aby wylosowac liste pytan
  5. {
  6. if (!empty($_SESSION['USERTESTPYT'])||!empty($_SESSION['USERTESTODPP'])) //to zabezpieczenie na wypadek gdyby ktos wlaczyl test
  7. { //i nie uzyl przycisku gotowe, tylko wlaczyl go jeszcze raz
  8. unset($_SESSION['USERTESTPYT']); //wiec czyszcze zmienne sesji z zestawem pytan i prawidlowymi odp
  9. unset($_SESSION['USERTESTODPP']); // jest w obrebie poprzedniego ifa takze jesli uzyto przycisku nic nie skasuje
  10. }
  11.  
  12.  
  13. $sql = mysql_query("SELECT id,pytanie,obrazek FROM pytania ORDER BY RAND() LIMIT $ilosc_pytan");
  14. $i=1;
  15. while($pytania = mysql_fetch_array($sql))
  16. {
  17. $pyt = explode("`", $pytania['pytanie']);
  18. $nr_pyt[$i]=$pytania['id'];
  19. $tresc_pyt[$i]= $pyt[0];
  20. $_SESSION['USERTESTPYT'][$i]=$tresc_pyt[$i]; //przypisuje do zmiennej sesji tresc pytania
  21. $odpp[$i]=$pyt[1];
  22. $_SESSION['USERTESTODPP'][$i]=$odpp[$i]; //przypisuje do zmiennej sesji prawidlowa odp do pytania
  23. $odp[$i][0]=$pyt[1];
  24. $odp[$i][1]=$pyt[2];
  25. $odp[$i][2]=$pyt[3];
  26. $obrazek[$i]=$pytania['obrazek'];
  27. $i++;
  28. }
  29. $i=0;
  30. }
  31.  
  32.  
  33. if($_POST['submit'])
  34. {
  35. $poprawne=0;
  36. $bledy=0;
  37. for($i=1;$i<=$ilosc_pytan;$i++)
  38. {
  39. $pytanie[$i]=$_POST['$tresc_pyt[$i]']; //odczytuje z POST'a zaznaczana w radio odpowiedz do pytania o indeksie $i
  40. $_SESSION['USERTESTODPZ'][$i]=$pytanie[$i]; // i zapisuja ja do zmiennej sesji
  41. echo $_POST['$tresc_pyt[$i]'];
  42. echo $_SESSION['USERTESTODPP'][$i];
  43. echo $_SESSION['USERTESTODPZ'][$i];
  44.  
  45. if ($_SESSION['USERTESTODPP'][$i]==$_SESSION['USERTESTODPZ'][$i]) //sprawdzam poprawnosc odpowiedz
  46. $poprawne++;
  47. else
  48. $bledy++;
  49. }
  50. echo " <br>Ilość odpowiedzi poprawnych: $poprawne <br>";
  51. echo " <br>Ilość odpowiedzi błędnych: $bledy <br>Twój wynik to:";
  52. $wynik=(($poprawne/$ile)*100);
  53. echo round($wynik, 2);
  54.  
  55. unset($_SESSION['USERTESTPYT']); //czyszczenie zmiennych sesji przed nastepnym urochomieniem testu
  56. unset($_SESSION['USERTESTODPP']);
  57. unset($_SESSION['USERTESTODPZ']);
  58.  
  59. }
  60. else
  61. {
  62.  
  63. echo "<form method=\"post\">";
  64. echo "<input type=\"hidden\" name=pytanie value=>";
  65.  
  66. for($i=1;$i<=$ilosc_pytan;$i++)
  67. {
  68. if(!empty($obrazek[$i]))
  69. echo "<IMG SRC=".$obrazek[$i]."><br>";
  70. else
  71. echo "<br>";
  72. echo "<b>$i. $tresc_pyt[$i]</b><br>";
  73.  
  74. shuffle($odp[$i]);
  75. for($j=0;$j<=2;$j++)
  76. {
  77. $odpz[] = "<input type=radio name=\"$tresc_pyt[$i]\" value=\".$odp[$i][$j].\">".$odp[$i][$j].""; //name=\"f[$pyt[0]]\"
  78. echo array_pop($odpz);
  79. if ($j==0||$j==1||$j==2)
  80. echo "<br>";
  81. }
  82.  
  83. echo "<br>------------------------------------------------------------------------------------------------------------<br>";
  84. }
  85. echo "<br><input type=submit value=\" Gotowe! \"></form>";
  86.  
  87. }
skarabe.pl
  1. <input type="submit" value="Gotowe!">

Brakuje atrybutu name="submit":
  1. <input type="submit" name="submit" value="Gotowe!">
asterf
No to przeoczyłem! Dzięki zaczęło działać coś, ale nie dodaje mi prawidłowych odpowiedź do poprawnych jeszcze;/
skarabe.pl
Cytat(asterf @ 3.08.2010, 16:17:54 ) *
No to przeoczyłem! Dzięki zaczęło działać coś, ale nie dodaje mi prawidłowych odpowiedź do poprawnych jeszcze;/

Już Ci tłumaczyłem, że nie możesz pisać $_POST['$tresc_pyt[$i]'], tylko $_POST[$tresc_pyt[$i]]! Bez apostrofów!
asterf
No to też zmieniłem dla pewności, przecież inaczej nie zawracałbym głowy smile.gif
Zrobiłem wyświetlanie wyników w osobnym pliku i olałem dzięki temu te zabezpieczenia ale coś jest nie tak, że nie uznaje poprawnych odpowiedzi;/
skarabe.pl
A ten fragment co wyświetla?
  1. echo $_POST['$tresc_pyt[$i]'];
  2. echo $_SESSION['USERTESTODPP'][$i];
  3. echo $_SESSION['USERTESTODPZ'][$i];
asterf
To takie sprawdzenie, no i wyświetla mi tylko to środkowe echo, pierwsze i trzecie to jest ta sama wartość.. No jakoś nie odczytuje z POST'a tego jaka odpowiedź była zaznaczona...
skarabe.pl
Ehhh,
  1. print_r($_POST);
  2. print_r($_SESSION);
asterf
Przepraszam, że nie zastosowałem się do regulaminu wstydnis.gif

POST daje tylko tyle:
Array ( [pytanie] => [submit] => Gotowe! )

a SESSION nie zawiera USERTESTODPZ, wyświetla tylko wartości USERTESTODPP, USERTESTPYT

EDIT: Nie wszystko miało sens, wywaliłem linijkę:
  1. echo "<input type=\"hidden\" name=pytanie value=>";

A to:
  1. #
  2. for($j=0;$j<=2;$j++)
  3. #
  4. {
  5. #
  6. $odpz[] = "<input type=radio name=\"$tresc_pyt[$i]\" value=\".$odp[$i][$j].\">".$odp[$i][$j].""; //name=\"f[$pyt[0]]\"
  7. #
  8. echo array_pop($odpz);
  9. #
  10. if ($j==0||$j==1||$j==2)
  11. #
  12. echo "<br>";
  13. #
  14. }


wygląda teraz tak:
  1. {
  2. echo "<input type=radio name=$tresc_pyt[$i] value=".$odp[$i][$j].">".$odp[$i][$j]."";
  3. if ($j==0||$j==1||$j==2)
  4. echo "<br>";
  5. }



To były niepotrzebne inspiracje z gotowca...
Teraz z POSTEM jest już lepiej, wyświetla mi pierwsze wyrazy z treści pytania i odpowiedzi, ALE tylko pierwszego pytania...
Np:Array ( [Jacht] => wiatr [submit] => Gotowe! )
Coś jest nie tak przy tym radio zapewne w name i value
skarabe.pl
  1. echo "<input type=radio name=\"{$tresc_pyt[$i]}\" value=\"".$odp[$i][$j]."\">".$odp[$i][$j]."";
asterf
No też właśnie stwierdziłem, że mam tam nie tak znaki, mam z tym problemy jak umieszczam html'a w obrębie php...
Teraz już niby problem jest rozwiązany:
POST -> Array ( [Pyt_daje_ale_z_podłogami?] => odpowiedź tu daje normalnie [submit] => Gotowe! )
SESSION ->mam już też wyświetlaną tablice USERTESTODPZ, ale wszystkie indeksy w niej puste.

Mam już uzyskana przez posta zaznaczoną odpowiedź ale jakoś ten fragment niczego nie zaciąga z POST'a więc jak to zaciagnąć, przecież już to mam w POST;/?
  1. $pytanie[$i]=$_POST[$tresc_pyt[$i]]; //odczytuje z POST'a zaznaczana w radio odpowiedz do pytania o indeksie $i
  2. $_SESSION['USERTESTODPZ'][$i]=$pytanie[$i];
skarabe.pl
Bo w $_POST masz z podkreślnikami, a w tablicy $tresc_pyt pewnie bez - no i klops. Sugerowałem użycie ustandaryzowanych nazw, ale nie posłuchałeś - teraz musisz zadziałać tak, żeby w $tresc_pyt[$i] mieć dokładnie taką samą postać stringa jak w $_POST. Zrób print_r($tresc_pyt) obok print_r($_POST) i print_r($_SESSION).
asterf
No sugerowałeś ale ja nie bardzo wiedziałem jak zapisać, te podłogi nie przeszkadzają bo mi i tak jest potrzebna wartość value do porównania USERTESTODPP.
Ale nie wiem jak ją z POST'a do zmiennej zapisać. print_r($_POST); print_r($_SESSION); print_r($tresc_pyt) - nic nie zwraca;/

  1. Array ( [Przedstawiona_na_rysunku_tablica_(pochylony_biały_kwadrat_z_zieloną_obwódką)_oznacza:] => przebieg szlaku wzdłuż prawego brzegu [Odpadanie_jest_to:] => zwiększanie nawietrzności jachtu [submit] => Gotowe! )
  2.  
  3. Array ( [USERNAME] => adam [USERID] =>
  4. [USERTESTPYT] =>
  5. Array ( [1] => Przedstawiona na rysunku tablica (pochylony biały kwadrat z zieloną obwódką) oznacza:
  6. [2] => Odpadanie jest to:
  7. [3] => Określenie &#8222;bardzo gęsta mgła” oznacza zasięg widzialności:
  8. [USERTESTODPP] =>
  9. Array ( [1] => przebieg szlaku wzdłuż lewego brzegu
  10. [2] => skręcanie jachtem od linii wiatru
  11. [3] => poniżej 50 m
  12. [USERTESTODPZ] => Array ( [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24] => [25] => [26] => [27] => [28] => [29] => [30] => ) ) &#65279;

WIdać, że POST nic nie indeksuje, tak jak zmienne w SESSION gdzie przy każdym elemencie jest [1],[2],[3]...

Btw będę musiał zabezpieczyć formularz żeby trzeba było zaznaczyć w każdym pytaniu odpowiedź
skarabe.pl
Wklej proszę cały kod - poprawię i napiszę dokładniej o co mi od początku chodziło.
asterf
Kurcze już jakoś niewierze, że to będzie śmigać ;] Ale będę bardzo wdzięczny jak to ruszy snitch.gif

test.php
  1. $ilosc_pytan=30;
  2.  
  3. $sql = mysql_query("SELECT id,pytanie,obrazek FROM pytania ORDER BY RAND() LIMIT $ilosc_pytan");
  4. $i=1;
  5. while($pytania = mysql_fetch_array($sql))
  6. {
  7. $pyt = explode("`", $pytania['pytanie']);
  8. $nr_pyt[$i]=$pytania['id'];
  9. $tresc_pyt[$i]= $pyt[0];
  10. $_SESSION['USERTESTPYT'][$i]=$tresc_pyt[$i]; //przypisuje do zmiennej sesji tresc pytania
  11. $odpp[$i]=$pyt[1];
  12. $_SESSION['USERTESTODPP'][$i]=$odpp[$i]; //przypisuje do zmiennej sesji prawidlowa odp do pytania
  13. $odp[$i][0]=$pyt[1];
  14. $odp[$i][1]=$pyt[2];
  15. $odp[$i][2]=$pyt[3];
  16. $obrazek[$i]=$pytania['obrazek'];
  17. $i++;
  18. }
  19. $i=0;
  20.  
  21. echo "<form method=\"post\" action=wynik.php>"; //TU ZMIENILEM
  22. //echo "<input type=\"hidden\" name=pytanie value=>";
  23.  
  24. for($i=1;$i<=$ilosc_pytan;$i++)
  25. {
  26. if(!empty($obrazek[$i]))
  27. echo "<IMG SRC=".$obrazek[$i]."><br>";
  28. else
  29. echo "<br>";
  30. echo "<b>$i. $tresc_pyt[$i]</b><br>";
  31.  
  32. shuffle($odp[$i]);
  33. for($j=0;$j<=2;$j++)
  34. {
  35. //echo "<input type=radio name=\"$tresc_pyt[$i]\" value=\"$odp[$i][$j]\">".$odp[$i][$j]."";
  36. echo "<input type=radio name=\"{$tresc_pyt[$i]}\" value=\"".$odp[$i][$j]."\">".$odp[$i][$j]."";
  37. //echo array_pop($odpz);
  38. if ($j==0||$j==1||$j==2)
  39. echo "<br>";
  40. }
  41.  
  42. echo "<br>------------------------------------------------------------------------------------------------------------<br>";
  43. }
  44. echo "<br><input type=submit name='submit' value=\" Gotowe! \"></form>";
  45.  
  46. }


wynik.php
  1. $ilosc_pytan=30;
  2.  
  3. if($_POST['submit'])
  4. {
  5. $poprawne=0;
  6. $bledy=0;
  7. for($i=1;$i<=$ilosc_pytan;$i++)
  8. {
  9. $pytanie[$i]=$_POST[$tresc_pyt[$i]]; //odczytuje z POST'a zaznaczana w radio odpowiedz do pytania o indeksie $i
  10. $_SESSION['USERTESTODPZ'][$i]=$pytanie[$i]; // i zapisuja ja do zmiennej sesji
  11.  
  12. if ($_SESSION['USERTESTODPP'][$i]==$_SESSION['USERTESTODPZ'][$i]) //sprawdzam poprawnosc odpowiedz
  13. $poprawne++;
  14. else
  15. $bledy++;
  16. }
  17. echo " <br>Ilość odpowiedzi poprawnych: $poprawne <br>";
  18. echo " <br>Ilość odpowiedzi błędnych: $bledy <br>Twój wynik to:";
  19. $wynik=(($poprawne/$ile)*100);
  20. echo round($wynik, 2);
  21.  
  22.  
  23. print_r($_POST);
  24. print_r($_SESSION);
  25. print_r($tresc_pyt);
  26.  
  27. unset($_SESSION['USERTESTPYT']); //czyszczenie zmiennych sesji przed nastepnym urochomieniem testu
  28. unset($_SESSION['USERTESTODPP']);
  29. unset($_SESSION['USERTESTODPZ']);
  30.  
  31. }
  32. }
skarabe.pl
test.php:
  1. <?php
  2. $ilosc_pytan = 30;
  3. $sql = mysql_query("SELECT id,pytanie,obrazek FROM pytania ORDER BY RAND() LIMIT $ilosc_pytan");
  4. $i = 1;
  5. $tresc_pyt = array();
  6. $odp = array();
  7. $_SESSION['quiz'] = array();
  8. while($pytania = mysql_fetch_assoc($sql))
  9. {
  10. $pyt = explode("`", $pytania['pytanie']);
  11. $tresc_pyt[$i] = $pyt[0];
  12. $odpp = $pyt[1];
  13. $odp[$i] = array_slice($pyt, 1);
  14. shuffle($odp[$i]);
  15. $_SESSION['quiz'][$i] = array_search($odpp, $odp[$i]);
  16. $obrazek[$i] = $pytania['obrazek'];
  17. $i++;
  18. }
  19.  
  20. echo '<form method="post" action="wynik.php">';
  21. for($i = 1;isset($tresc_pyt[$i]);$i++)
  22. {
  23. if(!empty($obrazek[$i])) {
  24. echo '<img src="'.$obrazek[$i] . '"><br>';
  25. } else {
  26. echo '<br>';
  27. }
  28. echo "<b>$i. {$tresc_pyt[$i]}</b><br>";
  29. for($j = 0;isset($odp[$i][$j]);$j++)
  30. {
  31. echo "<input type=\"radio\" name=\"pytanie-{$i}\" value=\"{$j}\"> {$odp[$i][$j]}";
  32. if (isset($odp[$i][$j + 1])) {
  33. echo '<br>';
  34. }
  35. }
  36. echo '<br><hr><br>';
  37. }
  38. echo '<br><input type=submit name="submit" value="Gotowe!"></form>';


wynik.php:
  1. <?php
  2. if($_POST['submit'])
  3. {
  4. $poprawne=0;
  5. $bledy=0;
  6. for($i=1;isset($_SESSION['quiz'][$i]);$i++)
  7. {
  8. if ((string)$_SESSION['quiz'][$i] === $_POST['pytanie-' . $i]) {
  9. $poprawne++;
  10. } else {
  11. $bledy++;
  12. }
  13. }
  14. echo " <br>Ilość odpowiedzi poprawnych: $poprawne <br>";
  15. echo " <br>Ilość odpowiedzi błędnych: $bledy <br>Twój wynik to:";
  16. $wynik=(($poprawne/($poprawne + $bledy))*100);
  17. echo round($wynik, 2), '%';
  18.  
  19. unset($_SESSION['quiz']);
  20. }

EDIT: są dwa pozytywne efekty uboczne - 1) liczbą pytań sterujesz tylko z jednego miejsca - w klauzuli LIMIT w zapytaniu, 2) nie masz żadnych limitów co do liczby odpowiedzi w pytaniu (no, musi być przynajmniej jedna).
asterf
Działa, wielkie dzięki

Nie wiem czym sobie zasłużyłem na pomoc!?
Ci którzy chcieli by dostać gotowy skrypt może nie zrozumieją, ale ja i tak czuje się zawiedziony zamiast myśleć sobie że mam gotowe i się cieszyć,
bo ten Twój skrypt to nie jest mój poprawiony, tylko zrobiony prawie całkiem innymi metodami nowy skrypt;p. Może jeszcze uda mi się mój doprowadzić do działania smile.gif
skarabe.pl
Cytat(asterf @ 3.08.2010, 21:03:26 ) *
(...) ten Twój skrypt to nie jest mój poprawiony, tylko zrobiony prawie całkiem innymi metodami nowy skrypt

To nieprawda - przynajmniej nie do końca. Gdybym robił to od zera, to pewnie wyglądałoby to zupełnie inaczej. Ja naprawdę wziąłem Twój kod i po prostu poprzerabiałem tylko te kwestie, które szwankowały :) Ale skoro się upierasz, to podpowiem, że całkiem możliwe że nie wywołałeś session_start() (a przynajmniej tego nie widać w Twoim kodzie), przez co tablica $_SESSION w ogóle u Ciebie nie działa tak jak powinna. To pierwszy krok - reszta to szczegóły :)

Radzę Ci w pierwszej kolejności zrozumieć co i dlaczego zmieniłem w Twoim kodzie. Potem napisz go po swojemu. W razie problemów - chętnie pomogę.
asterf
session start(); jest w pliku który jest includowany jako górna część stronki, nie dawałem takich zbędnych rzeczy do kodu który wkleiłem, no ale mogłeś to podejrzewać...

Nie wiem czy mam czas na to żeby zrozumieć i napisać po swojemu, ale postaram się i chętnie z pomocy skorzystam;p

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.