Autor | Zpráva | ||
---|---|---|---|
blackjoker Profil |
#1 · Zasláno: 25. 7. 2009, 16:02:04
Dobrý den,
snažil jsem se napsat skript, který by se postupně ptal na několik náhodných otázek, ale zasekl jsem se právě na tom opakování čísel. Zatím jsem došel k tomuhle, ale nefunguje to : ) $max = mysql_result(mysql_query("SELECT COUNT(*) FROM words"), 0); do{ $number = rand(2, $max)-1; $testnotnumber = strrpos($_COOKIE['notnumber'], $number); }while($testnotnumber != FALSE); $notnumber .= " ".$number; SetCookie ("notnumber", $notnumber); |
||
Majkl578 Profil |
#2 · Zasláno: 25. 7. 2009, 16:25:23
co to davat do pole a kontrolovat pres in_array?
|
||
blackjoker Profil |
#3 · Zasláno: 25. 7. 2009, 16:58:57
Majkl578
To by šlo, ale já hlavně nevim, jak napsat tu podmínku. Jinak by to dopadlo stejně, ne? Jen bych musel rozdělovat $notnumber do polí a místo strrpos() by bylo in_array() ? |
||
Majkl578 Profil |
#4 · Zasláno: 25. 7. 2009, 19:51:18 · Upravil/a: Majkl578
nevim jestli presne rozumim zadani. v podstate jde o script, ktery zamezi zopakovani stejne otazky?
priklad: <?php $pocetOtazek = 10; //mysql_result(mysql_query(... $answered = !empty($_COOKIE['answered']) ? unserialize($_COOKIE['answered']) : array(); $otazky = range(1, $pocetOtazek); shuffle($otazky); do { $break = false; foreach($otazky as $value) { if(!in_array($value, $answered)) { //otazka nepolozena, tudiz ji polozime? ;) $answered[] = $value; //... //.... echo 'something'; $break = true; break; } }; //vsechny otazky byly jiz polozeny? resetujeme tedy pole s polozenymi otazkami $answered = array(); } while(!$break); setCookie('answered', serialize($answered), time() + 3600 * 24); //zapamatujeme na den |
||
blackjoker Profil |
#5 · Zasláno: 25. 7. 2009, 20:55:38
Děkuju, ale jsme v php začáteční, tak mi bude chvíli trvat něž vyzkouším tvůj příklad (zvlášť, když pole mi nikdy nešli :), tak to raději ještě jednou rozvedu.
Potřeboval jsem získat náhodné číslo jako id pro vytažení jedné otázky z databáze pak po zodpovězení by se vytáhla další. Tak jsem tedy začal ukládat už použitá čísla do cookies jako $notnumber (ve tvaru 2 5 7 20 9) a pomocí strrpos jsme chtěl ověřit jestli nové $number již nebylo použito a tedy jestli neni v $notnumber, jinak by se znovu zopakovalo rand() v do. (netuším proč to nic nedělá) Tenhle postup je, pokud to chápu, částečně stejný i v tvém příkladu, ale ty si načteš čísla od 1 do 10 a proházíš je a pak je porovnáváš s použitými. Takže mám použít $value jako to id pro databázi? |
||
Majkl578 Profil |
#6 · Zasláno: 25. 7. 2009, 23:59:59
blackjoker
ja jsem myslel, ze chces uzivateli polozit nahodnou otazku a to tak, aby se zadna znich neopakovala. o polich si precti zde: http://cz2.php.net/manual/en/language.types.array.php bez nich je prace mnohem slozitejsi (o oop nemluve, to je mnohem slozitejsi) |
||
BetaCam Profil |
#7 · Zasláno: 26. 7. 2009, 09:37:53
blackjoker
Nevim k čemu to tedy přesně chceš ale tohle mi přijde trochu složité. Jednoduší by asi bylo nějaká variace na : Pokud by se to mělo tahat pojednom : SELECT * FROM words WHERE id NOT IN(xxx) ORDER BY RAND() LIMIT 1 s tim že do in si budeš dosazovat čísla co již byly. a nebo to vytáhnout na jednou a pak to jen zobrazovat : SELECT * FROM words ORDER BY RAND() LIMIT 10 |
||
blackjoker Profil |
#8 · Zasláno: 26. 7. 2009, 22:20:48
Děkuju za pomoc. Zkusím to nějak přepsat.
|
||
Časová prodleva: 15 let
|
0