Autor Zpráva
alan113
Profil *
Zdravím,chci vás poprosit o radu
potřebuju náhodně vybírat řádky z tabulky,tohle umím,ale potřebuju to dát do funkce,kterou bych pak používal pro celý web..funkci bych taky napsal,ale já to potřebuju nějak udělat abych to vlastně..no,dám radši příklad:
chci dát do funkce nebo třídy mysql query s proměnnýma,kde pak vlastně budu jen vyvolávat ty proměnný
jenže přes funkci to nepujde,jelikož i když vyvolám funkci tak tu proměnnou ta stránka nezná a nenajde jí
function mysqls(){
    $level=mysql_query("SELECT * FROM user WHERE id='{$_SESSION['id']}'");
    while($userlevel=mysql_fetch_array($level))
    $database=mysql_query("SELECT * FROM mision WHERE lvl='{$userlevel['level']}' order by rand() DESC LIMIT 1");
    while($databaseuser=mysql_fetch_array($database)){
    $questspecial=$databaseuser['special'];
    $questtext=$databaseuser['text'];
    $questname=$databaseuser['name'];
    $money=$databaseuser['money'];
    $exp=$databaseuser['exp'];
    $time=$databaseuser['time'];
    }
}

nějak takhle bych to potřeboval,mám výběr databáze,a pak v proměnných nějaký řádky...
je to náhodně vybraný řádek..
pak vlastně bych potřeboval,abych tu funkci/třídu vyvolal a vybral si jen kterou proměnnou budu potřebovat

jak jsem psal,tohle mě nefunguje,jelikož ty proměnný ta stránka nezná...(tu funkci mám ve složce,kterou volám pomocí require na každý stránce)

jak by jste to řešily vy?
můžete to udělat i jinač,jde mě prostě jen o to,abych si ty proměnný volal,a zůstal ten náhodně vybraný řádek všude stejný...abych sním pak mohl dál pracovat..(zapisovat ten náhodně vybraný řádek následně do db apod...

Díky moc všem kteří pomůžou ;)
Keeehi
Profil
aby se data dostala dovnitř funkce, používají se vstupní parametry function mysqls($a, $b, $c){, aby se zase na konci dostaly data ven, používá se návratová hodnota funkce return $x; nebo pro více dat return array($x, $y, $z);.
Sir Tom
Profil
alan113:
Také zdravím, ten příklad máš moc komplikovaný... Oba dva dotazy můžeš spojit do jednoho a vracet pak můžeš celý jeden řádek z výsledku databáze. Ten řádek pak můžeš rozpiplávat až později v aplikaci.
alan113
Profil *
Sir Tom:
nevím jak to myslíš,jak by se to dalo udělat že by se to pak rozdělávalo v aplikaci když to nezná ty proměnný?
dík za odpověď
Sir Tom
Profil
alan113:
Ta myšlenka je nějak takto:

function mysqls(){
 $query = "SELECT * FROM mision WHERE lvl = (SELECT level FROM users WHERE id = ".$_SESSION['id']." LIMIT 1) ORDER BY rand() LIMIT 1";
 $result = mysql_query($query);
 return mysql_fetch_array($result); //vracíš z funkce celý 1 řádek z db
}

$row = mysqls();
echo $row['name']." má popis ".$row['text']; // a tady z něj už vybíráš data, která potřebuješ už přímo v aplikaci a mimo funkci...
Tori
Profil
alan113:
K té funkci v [#1]: cyklus while ($pole = mysql_fetch_array($dbResult)) se používá v případě, že SQL dotaz má vracet více než jeden řádek výsledků. Pokud chcete jen jeden řádek (LIMIT 1), tak cyklus není potřeba a stačí to napsat jako v [#5].
Tu funkci ([#1] i [#5]) ale můžete použít pouze pro přihlášeného uživatele, protože je závislá na ID v session. Řešením je předávat ID jako parametr. Taky bych přidala ochranu proti SQL injection. I kdyby to zrovna tady nebylo nutné, tak je lepší si zvykat na to, že všechna data, která posílám do DB, by měla být správně ošetřena. (viz Definitivní příručka escapování).
function nahodnaMise($id){
 $id = intval($id); // ošetření vstupu přetypováním na číslo. Pro řetězec byste použil mysql_real_escape_string($retezec)
 $query = "SELECT * FROM mision WHERE lvl = (SELECT level FROM users WHERE id = $id LIMIT 1) ORDER BY rand() LIMIT 1";
 $result = mysql_query($query);
 return mysql_fetch_array($result); //vracíš z funkce celý 1 řádek z db
}
 
$row = nahodnaMise($_SESSION['id']);

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: