Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Sprawdzenie poprawności odpowiedzi w teście
piasektubyl
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 26.03.2013

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


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ź (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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ć

Ten post edytował piasektubyl 26.03.2013, 10:39:13
Go to the top of the page
+Quote Post
_Borys_
post
Post #2





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


  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>


Ten post edytował _Borys_ 26.03.2013, 14:54:49
Go to the top of the page
+Quote Post
piasektubyl
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 26.03.2013

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


No Borys, jeszcze tego nie testowałem, ale już z góry Ci dziękuję i gdybym tylko mógł to wysłał browara!
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 Aktualny czas: 23.12.2025 - 17:31