Diskuze: Data z DB
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 21 zpráv z 21.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Použiješ PDO a pomocí metod (ted si nevzpomenu, podívej se tady na tutoriály) ti to vrátí asociativní pole.
Například v DB máš sloupec ID - takže v poli máš klíč také ID 
Jo, tu metodu jsem právě tady v tutoriálech hledal, ale nedohledal 
Teď jsem se díval na metodu PDO fetch assoc, příklad co tam měli:
Kód:
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>
Výsledek:
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)
)
A já bych potřeboval nejlépe
Příkaz
SELECT name, value FROM data
Výsledek
Array
(
[header] => 'hodnota pro header'
[slogan] => 'hodnota pro slogan'
...
)
Můžu to nějak přesvědčit, aby mi to nedělalo pole v poli, ale rovnou
pole, kde budou klíče hodnoty sloupečku name a hodnoty ze sloupečku values?
Omlouvám se, jsem dneska fakt nadmíru natvrdlej a vůbec mi to nemyslí 
No, nic, vytahám to z toho pole, nebudu to kombinovat 
Sice to jde, ale ne přímo. K PDO se dá přidat Messenger, který ti to pak servíruje dle potřeby.
Jeví se mi to však jako nešťastné řešení. Opravdu to v DB potřebuješ jako EAV?
U jednostránkového webu, kde potřebuji měnit obsah a kde se nebude měnit struktura mi to přijde jako ideální řešení, máš lepší nápad?
Jistě. Může to být jako jeden záznam v tabulce, která bude mít sloupečky "header" a "slogan". Když dáš fetch, tak se ti to rovnou objeví v požadovaném asociativním poli s klíči "header" a "slogan".
Nevím jestli si rozumíme, header a slogan byli jenom pro příklad, dál tam bude halda dalších částí - titulek, description, keywords, pak nadpisy, obsah asi 3 sekcí, patička, ...
Další možností by mohl být soubor INI, který se velmi dobře edituje a načítá se přímo do pole funkcí parse_ini_file(). To pole může být i dvourozměrné.
Velmi dobře se dá použít i XML, které načteš do objektu funkcí simplexml_load_file() a pak se odkazuješ už jen $config->header.
Stejným způsobem můžeš konfiguraci uložit i do JSON a načíst funkcí json_decode().
Také se to dá nacpat do výstupní šablony.
Radši bych to měl v databázi, protože do toho bude vyhazovat data i
herní server 
Z tebe to najednou leze...
Tak si nech databázi jak máš a to načtení do pole si udělej v konstruktoru třídy, která ti bude držet konfiguraci a nadefinuješ magickou metodu __get().
Jen je mi divné, proč máš v tabulce to "ID", když primárním klíčem je "name".
Protože jste mi to poradili 
// Jinak bych ho tam neměl 
On je to takový zvyk, používat ID jako primární klíč. Většinou je to správné řešení, ale v daném případě jsem na pochybách. Už proto, že je použita relační databáze v místě, kde je potřebné KVS. Něco z toho by možná mělo být ve výstupní šabloně (titulek, header, patička). Nadpisy kapitol by měly být u těch kapitol v jiné tabulce, do nastavení to nepatří. Možná je ta tabulka úplně zbytečná.
Numerický primární klíč dávám všemu, IMHO je to dobrá praktika, už jen proto, kdyby se index objevil v cizím klíči. Varchary mají mnohem vyšší režii.
Numerické syntetické ID je dobrou praktikou u vazby relačních tabulek. Jenže klíčem do této tabulky není "ID", ale "name". Podívej se do zadání.
V cizím klíči bych určitě uvedl "header" nebo "slogan". Nevidím důvod, proč by v této tabulce mělo být víc headerů nebo sloganů.
Uvědom si, že pokud máš ID, name a value, porušuješ 3NF, protože sloupec value je závislý nejen na "ID", ale také na "name".
Já jsem to jeho zadání nějak nepochopil, ale kdybych to psal, určitě bych tam ten numerický klíč měl. Spíše mi přijde, že je někde chyba v návrhu, když tam není.
Ano, chyba je v návrhu. To jsem už také psal. Proto je řešení kostrbaté, ať se to udělá jakkoli.
Zobrazeno 21 zpráv z 21.