Problém s vlastní funkcí
16 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
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ů.