Autor Zpráva
blackjoker
Profil
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
co to davat do pole a kontrolovat pres in_array?
blackjoker
Profil
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
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
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
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
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
Děkuju za pomoc. Zkusím to nějak přepsat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: