Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Sprawdzenie poprawności odpowiedzi w teście
Forum PHP.pl > Forum > Przedszkole
piasektubyl
Witam!
Zacznę od tego, że ostatnie zadanie jakie dał mi mój boss z aplikacji jest zrobienie testu. Idę na łatwiznę i robię go tylko na jedną poprawną odpowiedź smile.gif
Do rzeczy... Baza danych w mysql ma zawierać treść pytania, odpowiedzi i kolumnę z odpowiedziami poprawnymi(Ja zrobiłem rekordy tj. Id, Tresc, Odp_a, Odp_b, Odp_c, Popr_Odp). W bazie zawierać ma się w około 30 pytań, z których wylosuje 20 i wyświetli.

  1. <?php
  2.  
  3. require "config.php";
  4. connect();
  5.  
  6. ?>
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  10. <title>Teścik</title>
  11. </head>
  12. <body>
  13. <br /><br />
  14. <form method="post" action="">
  15. <?php
  16.  
  17. $wynik = mysql_query("SELECT * FROM pytania ORDER BY RAND() LIMIT 2") or die('Błąd zapytania');
  18.  
  19. echo "<table cellpadding=2 border=0>";
  20.  
  21. while($r = mysql_fetch_array($wynik)) {
  22. echo "<tr>";
  23. echo "<td>".$r[1]."</td>";
  24. echo "</tr><tr><td><input type=\"radio\" name=\"r".$r['Id']."\" value=\"a\"/>".$r[2]."</td>";
  25. echo "</tr><tr><td><input type=\"radio\" name=\"r".$r['Id']."\" value=\"b\"/>".$r[3]."</td>";
  26. echo "</tr><tr><td><input type=\"radio\" name=\"r".$r['Id']."\" value=\"c\"/>".$r[4]."</td>";
  27. echo "</tr>";
  28. }
  29. echo "</table>
  30. <br />
  31. <input type=\"submit\" name=\"check\" value=\"Wyślij\"> ";
  32.  
  33. ?>
  34. </form>
  35. </body>
  36. </html>


Ten oto kodzik ładnie wyświetla mi 2 pytania (tak 2, a nie 20, bo moja baza danych na razie ma 4 pytania ). Każde pole input otrzymuje name w postaci [r+id z bazy pytań] i na sztywno sprawdzanie poprawnych odpowiedzi zrobiłbym takim kodem:

  1.  
  2.  
  3. if(isset($_POST['check']))
  4. {
  5.  
  6. $pkt=0;
  7. if($_POST['r1'] == 'a')
  8. $pkt++;
  9. if($_POST['r2'] == 'b')
  10. $pkt++;
  11.  
  12. echo "<br />Zdobyłeś <b style=\"color: red\">".$pkt."</b> punktów, bądź teraz dumny!";
  13.  
  14. }


Ewentualnie znalazłem rozwiązanie gdzie mogę zapisać odpowiedzi do pliku i z niego wczytywać. Porównywać z Id pytania i reasumować, wtedy usunął bym tą ostatnią kolumnę z bazy(Popr_Odp) i wsio. Jednak boss nie przystał na takie rozwiązanie i trzyma się w tym co napisałem na początku, że mam użyć do tego bazy danych. Każde moje rozwiązanie kończy się fiaskiem, żałuję że nie słuchałem go na wszystkich lekcjach smile.gif
Tak sobie pomyślałem, że mógłbym takim czymś:

  1. $wynik = mysql_query("SELECT * FROM pytania ") or die('Błąd zapytania');
  2. while($r = mysql_fetch_array($wynik)) {
  3. echo $r[5];
  4. }


Wypisać wszystkie poprawne odpowiedzi (oczywiście dałbym je w hiddenie, tylko na szybko napisałem od razu zmienną) i później może jakoś je porównać...
Nei wiem... potrzebowałbym pomocy jak to zrobić
_Borys_
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  4. <title>Teścik</title>
  5. </head>
  6. <body>
  7. <?php
  8.  
  9. require "config.php";
  10. connect();
  11. if (!empty($_POST['r']))
  12. {
  13. $pkt = 0;
  14. foreach ($_POST['r'] as $key => $value)
  15. {
  16. $key = (int)$key;
  17. $value = mysql_real_escape_string($value);
  18. $row = mysql_fetch_assoc(mysql_query("SELECT Id FROM pytania WHERE Id = $key AND Odp_$value = Popr_Od"));
  19. if ($row['Id'])
  20. {
  21. $pkt++;
  22. }
  23. }
  24. echo 'Zdobyłeś ' . $pkt . ' pkt.';
  25. }
  26.  
  27. ?>
  28.  
  29. <form method="post" action="">
  30. <?php
  31.  
  32. $wynik = mysql_query("SELECT * FROM pytania ORDER BY RAND() LIMIT 2") or die('Błąd zapytania');
  33. echo "<table cellpadding=2 border=0>";
  34. while ($r = mysql_fetch_array($wynik))
  35. {
  36. echo "<tr>";
  37. echo "<td>" . $r[1] . "</td>";
  38. echo "</tr><tr><td><input type=\"radio\" name=\"r[" . $r['Id'] . "]\" value=\"a\"/>" .
  39. $r[2] . "</td>";
  40. echo "</tr><tr><td><input type=\"radio\" name=\"r[" . $r['Id'] . "]\" value=\"b\"/>" .
  41. $r[3] . "</td>";
  42. echo "</tr><tr><td><input type=\"radio\" name=\"r[" . $r['Id'] . "]\" value=\"c\"/>" .
  43. $r[4] . "</td>";
  44. echo "</tr>";
  45. }
  46. echo "</table>
  47.  
  48. <br />
  49.  
  50. <input type=\"submit\" name=\"check\" value=\"Wyślij\"> ";
  51.  
  52. ?>
  53. </form>
  54. </body>
  55. </html>
piasektubyl
No Borys, jeszcze tego nie testowałem, ale już z góry Ci dziękuję i gdybym tylko mógł to wysłał browara!
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.