Diskuze: true/false z databáze

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, nejsem si jistý, ale řekl bych, že metoda Db::query() ti nevrací záznamy z databáze. Nemá to být spíš něco takovýho?
$result = Db::query("SELECT ...");
return $result->fetchRow();
Zároveň ten SELECT samotný se mi zdá divný, jednak bych úplně nespoléhal na to, že permission s ID = 1 bude vždy admin, tzn. v tabulce "user_permission" (nebo jak se nazývá tabulky s právy) bych udělal sloupec třeba "is_admin (0/1)" nebo tak něco, co by to jasně rozlišilo. Nicméně aktuálně bych to napsal asi takhle
SELECT 1 FROM user_permission WHERE user_id = ? AND permission_id = 1
To ti pak vrátí buď "1" a nebo FALSE, pokud to nic nenajde (PDO vrací FALSE, pokud nenajde žádné záznamy). Takže bys to pak mohl jednoduše udělat jako
return (bool) Db::query("
SELECT 1 FROM user_permission
WHERE user_id = ? AND permission_id = 1
", array($userId));
Ale znovu říkám, zkontroluj si, co přesně vrací ta metoda Db::query(), podle mě určitě nebude vracet jednu konkrétní hodnotu jednoho sloupce.
Variantou is_admin, jsem to původně chtěl řešit, ale funkci chci mít univezální. Sice se funkce jmenuje isAdmin(), ale rád bych s její pomocí kontroloval i ostatní oprávnění. Jinak tabulka user_permission, spojuje tabulku user, a tbulku permission. Kdy v druhé jmenované je jasně dané co je jaké oprávěnní - id1 = admin, id2 = user atd.
Jinak kontrolu toho co mi databáze posílá jsem provedl s pomocí print_r. To je v pohodě nebo ne? Pokud ne tak co je ideálnější použít jako kontrolu toho co přitéká?
Každopádně díky, za pomoc tvůj kód funguje, stále se s databází učím takže mě ani nenapadlo že by za selectem mohlo být něco jiného než název sloupce.
A to ID je primární klíč a auto_increment? Jestli jo, tak bych na to
osobně raději vážně nespoléhal, že ID = 1 bude vždy admin, ID = 2 bude
vždy user apod. jelikož
je to číslo generované, musel by sis vždycky ohlídat, že to AI bude vždy
tou jedničkou začínat.
Podle mě print_r() nebo var_dump() pro jednoduché "debugování" stačí,
osobně teda ještě před to přidávám echo "<pre>"
a za
to exit;, aby se mi vypsalo jen to a ještě úhledně (to dělá to
<pre>) tzn.
$result = Db::query("...");
echo "<pre>";
var_dump($result);
exit;
ale to spíš když je to třeba nějaké pole, tak to potřebuji vidět úhledně, pokud jen obyč objekt, tak stačí jen to var_dump() / print_r().
V SELECT můžeš mít cokoliv tedy i nějakou statickou hodnotu mimo sloupec, výpočet atd.
Ano je to tak ID je primátní a auto. Každopádně již dříve jsem přemýšlel že bych to upravil tak aby každé oprávnění mělo dva identifikátory. Takže něco jako:
ID (primar, auto) | permission_id | permission_name |
1 | 1 | admin |
S tím že by se jako identifikátor, při propojování by se používalo to druhé ID.
Podle mě by to bylo takhle lepší ID slouží pro jednoznačnou
identifikaci záznamu, nepoužíval bych to i k něčemu jinému. Tzn. jestli
chceš oprávnění rozdělovat číselně, tak si pro to udělat vlastní
sloupec, který bude na ID nezávislý. Jen bych to raději pojmenoval jinak
než "permission_id", protože to na první pohled zavání nějakým FK (cizí
klíč). Třeba "permission_level" nebo tak něco
Tak, to už je pak víceměně na doladění. Zatím neplánuju to co dělám ani prodávat ani používat komerčně. Spíš jsem se rozhodl udělat něco na čem bych se učil, pro ten účel jsem se rozhodl kompletně překopat Davidův framework (kompletní do desáté lekce o eshopu). Už jsme toho udělal relativně dost, ale hodě jsem se sekl na autorizačním systému. Kdy každá stránka má svoje oprávnění a uživateli je na základě těchto oprávnění povolen přístup. Nemalou zásluhu na tom má i relativně malá znalost právě sql a toho jak v něm dělat, což jsem doufal že se naučím práv na autorizačním systému. A také to tak dopadlo, mé znalosti o sql se rozhodně zvýšili a to minimálně o 100%, věci co jsem dřív nechápal mi jsou již jasné, a díky tvojí pomoci vím i že sql může být mnohem pruženější než jsem si doteď myslel.
Je to sice "jen" doladění, ale proč to neudělat rovnou nějak pořádně,
než to udělat "nějak" a potom to předělávat každopádně na chybách se
učíme, v programování zvlášť, takže i to předělávání ti pak
pomůže si utřídit myšlenky a postupy nějakých úloh a zadání.
Jo to máš, pravdu díky tomu "doladění" jsem už jednou zůstal asi půl dne na jednom místě než mi došlo, že jsem ještě neupravil databázi. Protože jsem si celou dobu stál za tím že chybu mám v php.
To se stane ještě tolikrát, než se to naučíš o tom to už holt je.
Tak s tím se musí počítat. A mít člověk trpělivost, bez toho by to
nešlo
Zobrazeno 11 zpráv z 11.