Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowanie bez powtórzeń, prosty skrypt egzaminacyjny
artur81
post
Post #1





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


Witam , mam taki problem: napisałem skrypt którego zadaniem jest przeprowadzenie egzaminu ( losowanie pytania z bazy + ewentualne odpowiedzi do wyboru, użytkownik zaznacza odpowiedź, daje "dalej" i przechodzi do następnego pytania). W jaki sposób zrobić coś takiego , żeby podczas trwania egzaminu użytkownik nie wylosował powtórnie tego samego pytania (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Kod pliku pierwszego:
  1. <?php
  2.  
  3. //Jeżeli nie ma ustanowionej sesji przekierowuję użytkownika do logowania
  4. if (!isset($_SESSION['uzytkownik'])) {
  5. //ob_end_clean();
  6. header (&#092;"Location: http://localhost/logowanie.php\");
  7.  
  8. exit ();
  9. } else {
  10.  
  11. require_once('./polacz_z_baza.php');
  12.  
  13.  
  14. $wynik = mysql_query (&#092;"SELECT * FROM pytania ORDER BY RAND() LIMIT 1;\");
  15.  
  16. print &#092;"<table cellpadding = 5 border = 0>\";
  17. //print \"<tr><td><b>Numer</b></td><td><b>Pytanie</b></td></tr>n\";
  18.  
  19.  while ($rekord = mysql_fetch_array ($wynik)) {
  20.  
  21. $nr = $rekord['nr'];
  22. $pyt = $rekord['pyt'];
  23. $odp1 = $rekord['odp1'];
  24. $odp2 = $rekord['odp2'];
  25. $odp3 = $rekord['odp3'];
  26. $odppop = $rekord['odppop'];
  27. $nrok = $rekord['nrok'];
  28.  
  29.  }
  30.  
  31.  
  32. print &#092;"<tr><td><h3>$pyt</b></h3></td></tr>\";  //<td><h3><b>$nr.</b></h3></td>
  33. print &#092;"</table>\";
  34.  
  35.  // LISTA ROZWIJANA
  36. /*przesylam formularzem wybrana przez uzytkownika odpowiedz i numer pytania na kt
  37. re odpowiadal
  38. oraz za pomocą zmiennej sesyjnej poprawną odpowiedź*/
  39. print '<form action=egzamin1.php method=post>';
  40. print &#092;"<input type = 'hidden' name='nr' value=$nr>\";
  41.  
  42. print ' <select name=\"opcja\" style=\"background-color: #C0E2C1;\">';
  43. print ' <option selected value =\"\">';
  44. print &#092;" <option>$odp1</option> \";
  45. print &#092;" <option>$odp2</option> \";
  46. print &#092;" <option>$odp3</option> \";
  47. print ' </select>';
  48. print '<br><br><br> ';
  49. print '<input type=\"submit\" value=\"Następne pytanie\" style=\"background-color: #C0E2C1;\">';
  50. print ' </form>';
  51.  }
  52. $_SESSION['odpowiedz_na_1'] = $odppop;
  53. $_SESSION['punkty']=0;
  54. $_SESSION['pytanie1']=$nr;
  55.  
  56.  //kto odpowiada??
  57. //$odpowiada=$_SESSION['uzytkownik'];
  58. //print \"Na pytania udziela odpowiedz $odpowiada\";
  59.  
  60. print '<body bgcolor = #CCFFCC>';
  61. //ob_end_flush();
  62. ?>

Kod pliku drugiego ( w sumie jest ich 5):
  1. <?php
  2.  
  3. //Jeżeli nie ma ustanowionej sesji przekierowuję użytkownika do logowania
  4. if (!isset($_SESSION['uzytkownik'])) {
  5. header (&#092;"Location: http://localhost/logowanie.php\");
  6.  
  7. exit ();
  8. } else {
  9.  
  10. require_once('./polacz_z_baza.php');
  11.  
  12.  
  13. $wynik = mysql_query (&#092;"SELECT * FROM pytania ORDER BY RAND() LIMIT 1;\");
  14.  
  15. print &#092;"<table cellpadding = 5 border = 0>\";
  16. //print \"<tr><td><b>Numer</b></td><td><b>Pytanie</b></td></tr>n\";
  17.  
  18.  while ($rekord = mysql_fetch_array ($wynik)) {
  19.  
  20. $nr = $rekord['nr'];
  21. $pyt = $rekord['pyt'];
  22. $odp1 = $rekord['odp1'];
  23. $odp2 = $rekord['odp2'];
  24. $odp3 = $rekord['odp3'];
  25. $odppop = $rekord['odppop'];
  26. $nrok = $rekord['nrok'];
  27.  
  28.  
  29.  }
  30.  
  31.  
  32. print &#092;"<tr><td><h3>$pyt</b></h3></td></tr>\"; //<td><h3><b>$nr.</b></h3></td>
  33. print &#092;"</table>\";
  34.  
  35.  
  36. //CHECKBOXY
  37. //Formularz
  38.  
  39. print '<form action=egzamin2.php method=post>';
  40. print &#092;"<input type = 'hidden' name='nr' value=$nr>\";
  41. print &#092;"<input type = 'hidden' name='odppop' value='$odppop'>\";
  42.  
  43. print &#092;"<input type='checkbox' name='odp' value='$odp1'>$odp1\";
  44. print '<br>';
  45. print &#092;"<input type='checkbox' name='odp' value='$odp2'>$odp2\";
  46. print '<br>';
  47. print &#092;"<input type='checkbox' name='odp' value='$odp3'>$odp3\";
  48. print '<br>';
  49.  
  50. print '<br><br><br> ';
  51. print '<input type=\"submit\" value=\"Następne pytanie\" style=\"background-color: #C0E2C1;\">';
  52. print ' </form>';
  53.  
  54. $odp_na_1=$_SESSION['odpowiedz_na_1'];
  55. $_SESSION['odpowiedz_na_2'] = $odppop;
  56.  
  57. //odebranie i wyswietlenie odpowiedzi udzielonych na pierwsze pytanie w egzaminie
  58. $wybrano =$_POST['opcja'];
  59. $numer =$_POST['nr'];
  60. print '<br<<br><br>';
  61. print 'W poprzednim pytaniu udzieliłeś następujących odpowiedzi:<br>';
  62. print &#092;"Pytanie było oznaczone numerem <b>$numer</b>,<br>\";
  63. print &#092;"Ty wybrałeś/aś odpowiedź: <b>$wybrano</b>,<br>\";
  64. print &#092;"natomiast poprawną odpowiedzią było: <b>$odp_na_1</b><br>\";
  65.  
  66. $punkty =$_SESSION['punkty'];
  67. if ($odp_na_1 == $wybrano ) {
  68. $punkty= $punkty + 20;
  69. } else {
  70. $punkty = $punkty - 10;
  71. }
  72. $_SESSION['punkty']=$punkty;
  73. print '<br><br><br> ';
  74. print &#092;"Na razie zgromadziłeś <b>$punkty punktów</b>\";
  75. /* kto odpowiada??
  76. $odpowiada=$_SESSION['uzytkownik'];
  77. print \"Na pytania udziela odpowiedz $odpowiada\"; */ }
  78. $_SESSION['pytanie2']=$nr;
  79.  
  80. print '<body bgcolor = #CCFFCC>';
  81. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


każdą odpowiedź musisz przecież gdzieś zapisać - polecam do tego celu bazę danych ... i tak:

każdemu userowi nadajesz jakiś identyfikator (jeśli nie ma loginu to użyj np. czasu zhashowanego). ten identyfikator zapisujesz w bazie dnaych.

następnie:
1) losujesz pytanie to dopisujesz do bazy danych do tabelki answers takie info:
uid - identyfikator użytkownika
qid - identyfikator pytania
answer - odpwoiedź jakiej udzielił lub puste gdy jeszcze nie odpowiadał

2) potem gdy odpowie aktualizujesz odpowiednie pole.

3) do losowania używać musisz lekko zmodyfikowanego zapytania.

Napisz czy takie rozwiązanie Ci pasuje to wtedy kod odpowiedni Ci napiszę.

Pozdrawiam
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 10.10.2025 - 18:23