![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.03.2004 Skąd: Mrągowo Ostrzeżenie: (0%) ![]() ![]() |
Witam!!
Mam problemik, mianowicie nie mam pomysłu jak pozbyć sie duplikatów losowanych za pomoca funkcji rand () z bazy. Chcem wybierac losowo pytania z bazy i nawet to robi ale pytania czasami sie powtarzaja ![]() [php:1:050845fe6a]<?php //funkcja zwracajaca ilosc pytan w tabeli function ile() { { $wynik = mysql_query ("SELECT id_pytanie FROM pytanie ;"); $ile = mysql_num_rows($wynik); } return $ile; } $max=ile(); $id_pytanie=rand(1,$max); // i tu sobie przedzial robie w ktorym losowane sa pytania i tu mam pytanie jak sie pozbyc duplikatów pytan $zapytanie = 'SELECT tresc FROM pytanie WHERE id_pytanie="'.$id_pytanie.'" '; $wynik = mysql_query($zapytanie); if (mysql_num_rows($wynik) == 1) { $wiersz = mysql_fetch_array($wynik); //formularz wyswietlajacy // a tu sa pobierane odpowiedzi w postaci radio buttonow $zapytanie = 'SELECT id_odpowiedz, tresc FROM odpowiedz WHERE id_pytanie="'.$id_pytanie.'"'; $wynik2 = mysql_query($zapytanie); for($i=0; $i<mysql_num_rows($wynik2); $i++) { $wiersz2 = mysql_fetch_array($wynik2); echo ' <tr>'; echo ' <td><input type="radio" name="odpowiedz" value="'.stripslashes($wiersz2['id_odpowiedz']).'"></td>'; echo ' <td>'.stripslashes($wiersz2['tresc']).'</td>'; echo ' </tr>'; } //itd........ ?>[/php:1:050845fe6a] Dzieki za pomoc :] |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
mozesz to zroibć np. za pomocą sesji(tak będzie najprościej i najszybciej:)
a wiec: :arrow: Poczytaj o sesjach [manual:529c937fef]session[/manual:529c937fef] :arrow: Zastosuj je do przekazania między kolejnymi stronami z pytaniami tablicy zawierjącej numery pytań już wylosowanych. Możesz to zrobić np tak: [php:1:529c937fef]<?php [php:529c937fef]<?php <?php //funkcja zwracajaca ilosc pytan w tabeli function ile() { { $wynik = mysql_query ("SELECT id_pytanie FROM pytanie ;"); $ile = mysql_num_rows($wynik); } return $ile; } $max=ile(); session_start();//rozpocznij sesje while(in_array ($id_pytanie=rand(1,$max),$_SESSION['used'])); //losuj tak dlugo az wylosujesz pytanie jeszcze nie uzywane $_SESSION['used'][] = $id_pytanie; //zapisz pytanie jako uzyte.. koniec:) $zapytanie = 'SELECT tresc FROM pytanie WHERE id_pytanie="'.$id_pytanie.'" '; $wynik = mysql_query($zapytanie); if (mysql_num_rows($wynik) == 1) { $wiersz = mysql_fetch_array($wynik); //formularz wyswietlajacy // a tu sa pobierane odpowiedzi w postaci radio buttonow $zapytanie = 'SELECT id_odpowiedz, tresc FROM odpowiedz WHERE id_pytanie="'.$id_pytanie.'"'; $wynik2 = mysql_query($zapytanie); for($i=0; $i<mysql_num_rows($wynik2); $i++) { $wiersz2 = mysql_fetch_array($wynik2); echo ' <tr>'; echo ' <td><input type="radio" name="odpowiedz" value="'.stripslashes($wiersz2['id_odpowiedz']).'"></td>'; echo ' <td>'.stripslashes($wiersz2['tresc']).'</td>'; echo ' </tr>'; } //itd........ ?> ?>[/php:529c937fef] ?>[/php:1:529c937fef] update musisz jeszcze dodac taka linie po session_start: [php:1:529c937fef]<?php if(!isset($_SESSION['used'])) $_SESSION['used'] = array(); ?>[/php:1:529c937fef] ta linia powoduje, że przy pierwszym pytaniu inicjowana jest tablica , która bedzie przechowywała info o użytych pytaniach. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.03.2004 Skąd: Mrągowo Ostrzeżenie: (0%) ![]() ![]() |
Jeszcze pytanko mam narazie tylko 15 pytan i losuje 5 to rozumiem ze to przez to ze jest duze prawdopodobienstwo wystapienia pytania tak sie muli na lokalhoscie i czasami wyskakuje
![]() Kod Fatal error: Maximum execution time of 120 seconds exceeded in
UPDATE TAK dodalem i to wszystko super działa nie owtarzaja sie pytania ale nie moge testu do konca skonczyc bo juz przy 4 pytaniu laduje i jest timeout :x |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
hmm to raczej nie to;) bo powiinen losowac przynajmnie 1000razy na sekunde...
UPDATE a dopisałes ta linię która napisałem w updatcie poprzednigo posta? a wstaw tam gdzies po losowaniu [php:1:97c3623f6f]<?php print_r($_SESSION['used']); ?>[/php:1:97c3623f6f]i zobacz co dostaniesz z kazdym nastepnym pytaniem. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.03.2004 Skąd: Mrągowo Ostrzeżenie: (0%) ![]() ![]() |
Dodalem podglad i normalnie ladnie wybiera elementy z tablicy. a moze trzeba gdzies na koniec przy wychodzeniu dodac session_unset albo destroy. Bo moze jak wchodze jeszcze raz to sie pula zaciesnia?
UPDATE Dzięki rmn ;] ale na to mi tez moze doradzisz ![]() UPDATE OK dodalem i dziala poprost dochodzi do konca test to sesja zostaje zniszczona [php:1:7c70608f6a]<?php session_unset(); session_destroy(); ?>[/php:1:7c70608f6a] |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 91 Pomógł: 0 Dołączył: 19.02.2004 Skąd: Piaseczno Ostrzeżenie: (0%) ![]() ![]() |
no janse:)
pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 14:18 |