Problém s vlastní funkcí

Zdravím,
je nějaká chyba v tomto kódu?
<?
function rank($user){
$sql = "SELECT * FROM users WHERE `id` = $user;";
$vysledek = MySQL_Query($sql, $spojeni);
if($zaznam = MySQL_Fetch_Row($vysledek))
$rank_number = $zaznam[9];
if($rank_number=1)
$rank="Uživatel";
elseif($rank_number=2)
$rank="V.I.P.";
elseif($rank_number=3)
$rank="Moderátor";
elseif($rank_number=4)
$rank="Administrátor";
return $rank;
}
?>

Když funkci volám:
rank(1);

Děkuji
Jo, je.

Od čeho php plive chybové hlášky? To si to nemůžeš vyzkoušet, než se zeptáš? Řeklo by ti to úplně přesně, o jakou chybu se jedná.

___
Ale, že je ten večer, tak ti to prozradím.. chyba je ta, že není definována proměnná $spojeni (která by měla obsahovat spojení s databází). Stačí tuto proměnnou předat jako parametr.

Pominu to, že ve funkci vytváříš úplně zbytečnou proměnnou $rank. V dotazu by mohl být LIMIT 1 (předpokládám, že id uživatele je unikátní) a nemusel by tahat celý řádek, ale pouze vybranou položku (viz manuál SQL).
Ach děkuji, patlal jsem se s tim včera necelou půlhodinu a už mi to nedalo se nezeptat. Chybovým hláškám právě skoro vůbec nerozumím. Ještě jednou děkuji.
<HTML>Ale kopírovat je by ses naučit mohl, když už jim nerozumíš.</HTML>
Uuuh, jak kopírovat? Teď jsem nějak mimo... Jako že jsem ji měl sem napsat?
Přesně tak.

___
Nevím, čemu na nich nerozumíš - většinou vypadají asi takto (v různých modifikacích pro Notice, Warning...):

Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /umisteni/souboru/na/serveru/soubor.php on line 24

Se základní znalostí angličtiny pochopíš, že v souboru soubor.php na řádku 24 (používáš doufám editor, který číslování řádků vypisuje) je "parse error" - tedy překlep nebo jiná blbost :) Co přesně znamená "T_CONSTANT_ENCAPSED_STRING" vědět nemusíš - vždycky se to dá vygooglit a nebo to pochopíš :)
<HTML>Ano, měl si ji sem celou pěkně nakopírovat. Ty jim možná nerozumíš, ale nám se pak lépe hledá chyba.</HTML>
Ah, tak to se omlouvám, tak takový ty expected bla bla pochopim, akorát jsem fakt netušil že to $spojeni neveme z indexu :).
Bloky kódu uvnitř funkce nebo třídy žiji vlastním životem.
To znamená, že proměnné uvnitř funkce jsou platné jen ve funkci a proměnné z venku se ve funkci neprojevuji. Výjimkou jsou globální proměnné, které se projevuji všude.

Příklad:

$a=5;
echo $a; // vypíše 5
function neco() {
echo $a; // vypíše varování - undefined
$a = 10;
echo $a; // vypíše 10
}
echo $a; // vypíše 5
Můžeš na začátek těla funkce hodit
global $spojeni
potom se jako $spojeni vezme ta globální proměnná. Obecně to podle moderních trendů (už nějakej ten pátek) není dobrý způsob programování, ale v konkrétním případě to může být dobré.
Nechci vám nic říkat, ale místo porovnávání == má přiřazení = ... ;)
if($x == 1){ ... }
Lamicz: Má, no. Ale on na to přijde, až tu funkci jednou vyzkouší pustit :)
ja bych misto if pouzil switch/case/break
php.net/switch
php.net/case
php.net/break

Je tam spoustu zajimavych prikladu.

K tem chybovym hlaskam, mi pripadaji velmi srozumitelne, ikdyz si to prelozis slovo od slova podle slovnik.seznam.cz

Pak ti tam komentuji, ze mas v ifu nejake nesmysly, tak si projdi priklady na
php.net/if
if ( $zaznam = MySQL_Fetch_Row($vysledek) )
if ( $rank_number = 1 )
$a = 5; // je prirazeni do $a hodnoty 5
mysql_blabla(); // funkce, ktera podle manualu vraci error/hodnotu
$a = funkce(); // prirazeni vysledku funkce do promenne, pokud je tam error, tak to hodi chybu;
($a = funkce()) // pretypovani vysledku prirazeni na boolean hodnotu true/false
($a = 5) // je prirazeni do $a hodnoty 5 // pretypovano hodi vzdy true, protoze se prirazeni zdari
to pretypovani je fiktivni, jako priradi se $a hodnota, nejaka, treba error, a vysledek v $a se fiktivne pretypuje na boolean. Cili $a je 5, v ifu je true.
$x = ($a = 5);
if ($x) {...}
>> ja bych misto if pouzil switch/case/break
ja bych to namapoval pres pole
Tonik: hlavně aby se Meelkor naučil neplést si porovnávání a přiřazování, rozlišoval viditelnost proměnných a používal složené závorky.

Mapování přes pole je na stejné úrovni jako if/else. Teoreticky optimální řešení je JOIN tabulky typu uživatelů.