Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak pozbyc sie duplikatów z funkcji rand()
Wescik
post
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 (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Czy ma ktoś pomysł jak to wykonać. Znajomy mi doradził zeby wylosowane puytanei jakoś trzymac w tablicy tymczasowej ale nie zabardzo wiem jak to zrobić.


[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 :]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
rmn
post
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.
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: 5.10.2025 - 02:45