Diskuze: MVC - vypisování
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 34 zpráv z 34.
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.
Nevím to jistě, ale nechtělo by to při tom volání upřesni kategorii dát té metodě nějaký parametr?
To jsem už všelijak zkoušel, ale nijak mi to nefungovalo.. zkoušel jsem ['jmeno'] v různých tvarech a bez výsledku :/
Možná zkus použít místo Db::dotazVsechny, Db::dotazJeden, ale to už je spíš z mé strany spíš střílení na slepo...
Pokud očekáváš pouze jednu hodnoty, nebylo by tedy lepší použít něco jako fetch místo fetchAll? Za další, zkusil bych nejprve zjistit, jaký obsah ti vrací daná metoda (upresniInzeraty) a dle toho si zřídit přistup k hodnotě přes index.
Já tam nikde ale fetch (zatím) nepoužívám.. A nefunguje mi žádný způsob pro rozepsání toho, co je v poli..
Když použiju pouze fetch, nic to nevrátí, v případě fetchAll to vrátí právě pole, ze kterého se mi nedaří vypsat jeho obsah..
FetchAll asi budeš mít v te metodě dotazVsechny. Zkus var_dump a uvidis.
Postni obsah pole
konečně jsem něco vypsal, ale pouze url adresu.. vypisuje to například automobily/dodavky což je sloupec url, ale ten nechci vybírat pomocí SELECT.. pomocí selectu volám sloupec jméno a nic :/
konečně jsem něco vypsal, ale pouze url adresu.. vypisuje to například automobily/dodavky což je sloupec url, ale ten nechci vybírat pomocí SELECT.. pomocí selectu volám sloupec jméno a nic :/
Ahoj nejsem v tom uplne zbehly ale co jsem nejak pochopil z tutorialu tak bys mel bud pouzit na pole data funkci extract ktera ti to pole rozlozi na promenne nebo tam kde to vypisujes misto $jmeno pouzit $data[jmeno] nevim jestli je spravne syntaxe.
vypisuje to z toho pole toto:
automobily/osobni_automobily/
jenže já chci, aby to podle url automobily/osobni_automobily vzalo z příslušného sloupce jméno název Osobní automobily..
Použij dotaz jeden z místního wrapperu:
$result = Db::dotazJeden('
SELECT `jmeno`
FROM `podstranky`
WHERE `url` = ?
', array($url));
echo $result['jmeno'];
Pořád to nechce fungovat :/ tentokrát to nevypisuje vůbec nic..
Máš zapnuté hlášky? Píše to něco či? Toto by totiž mělo fungovat..
Hlášky zapnuté jsou, když mám nějakou chybu tak to vyskočí jen hláška, ale teď se normálně zobrazuje šablona pro danou podstránku subkategorie.. Wrapper používám ze zdejšího MVC tutoriálu, v některých částech lehce upravěný
A ten dotazJeden ti nic nevyhodí? Result neobsahuje žádné pole s daty?
Nic nevyhazuje zjevně.. mám na konci metody echo ale nic se nikde neprojevuje.. ale když si vypíšu parametry 0 a 1 tak to vypíše správně automobily/osobni_automobily, ale pak když chci do nadpisu vypsat 'jmeno' tak to vypíše do nadpisu Array
Když použiješ dotaz všechny, tak ti to logicky výpis hodí do několika polí, protože se očekává, že dotazů bude více. Resp. pole dotazu všechny může vypadat asi takto:
Array
(
[0] => Array
(
[jmeno] => Nějaké jméno
[0] => Nějaké jméno
[url] => Url
[1] => Url
)
[1] => Array
(
[jmeno] => Nějaké jméno2
[0] => Nějaké jméno2
[url] => Url2
[1] => Url2
)
)
A při dotaz jeden:
Array
(
[jmeno] => Nějaké jméno
[0] => Nějaké jméno
[url] => Url
[1] => Url
)
Takže funkci upresni inzeráty uprav:
public function upresniInzeraty($url){
return Db::dotazJeden('
SELECT `jmeno`
FROM `podstranky`
WHERE `url` = ?
',array($url));
}
A do šablony zadej na zkoušku:
$result = upresniInzeraty($urlDleKtereToUrcujes);
echo result['jmeno'];
A jestli ti ani toto nebude fungovat, tak opravdu nevím..
Nebo to zavolej dle názvu třídy, nevím kde ji máš umístěnou přesně:
$result = $router->upresniInzeraty($urlDleKtereToUrcujes);
echo result['jmeno'];
Apod..
pořád to nechce nic vypsat.. chápu že to musím volat přes dotazJeden, protože chci jen jednu hodnotu výslednou.. ale stále mi to nefunguje.. už fakt nevím jak to vyřešit..
Zdá se tedy, že to nic nepředává, což by mělo, protože v databázi je to, co hledám.. :/
Ok, jako první bych ověřil SQL dotaz přímo v DB, pokud třeba on nevypisuje NULL.
A pokud bude v pořádku zkusil bych jít postupně např. ve funkci upresniInzeraty:
public function upresniInzeraty($url){
$res = Db::dotazJeden('
SELECT `jmeno`
FROM `podstranky`
WHERE `url` = ?
',array($url));
var_dump($res);
return $res;
}
A tak lze zjistit, kde ti to nefunguje.
sice to nic neriesi, ale je tam drobna chybicka, ktora moze ti vyhodit chybu E_Warn... v povodnom kode mas deklarovanu mrodu s parametrom url, ktoru volas bez ziadnych parametrov
Tak v DB mi nejde ten dotaz rozjet.. v phpMyAdminu ho zadám ale nic to nevyhodí, po zpracování se to okno jen vyčistí..
A když jsem kód upravil na podobu dle tebe tak to nyní vypisuje:
bool(false)
Asi je jasné, že problém je v SQL dotazu nebo ve třídě DB. Nevím jak je tvoje třída DB připravená na debug...
Nevidím ti do kódu a nechce se mi hádat, proto zkus změnit select na
SELECT jmeno FROM podstranky
Pokud v tomto případě něco vypíše je problém v parametru $url, jak psal mkub.
Ostatní SQL dotazy ti fungují?
Takto vypadá moje Db.php
public static function dotazJeden($dotaz, $parametry = array()) {
$navrat = self::$spojeni->prepare($dotaz);
$navrat->execute($parametry);
return $navrat->fetch();
}
// Spustí dotaz a vrátí všechny jeho řádky jako pole asociativních polí
public static function dotazVsechny($dotaz, $parametry = array()) {
$navrat = self::$spojeni->prepare($dotaz);
$navrat->execute($parametry);
return $navrat->fetchAll();
}
// Spustí dotaz a vrátí z něj první sloupec prvního řádku
public static function dotazSamotny($dotaz, $parametry = array()) {
$vysledek = self::dotazJeden($dotaz, $parametry);
return $vysledek[0];
}
// Spustí dotaz a vrátí počet ovlivněných řádků
public static function dotaz($dotaz, $parametry = array()) {
$navrat = self::$spojeni->prepare($dotaz);
$navrat->execute($parametry);
return $navrat->rowCount();
}
Takže si smaž ten var_dump() z té metody, dej tam jen ten dotazJeden místo dotazVsechny a uprav si kód:
$url = $parametry[0] . '/' . $parametry[1];
$nazevKategorie = $spravceInzeratu->upresniInzeraty($url);
$this->data['jmeno'] = $nazevKategorie['jmeno'];
Ve směs poskládat všechny příspěvky do sebe stačilo. 
Spojeni s DB je OK?
Pro tvoji potřebu by ve funkci "upresniInzeraty" stačilo volat metodu
dotazSamotny.
Zkus:
public function upresniInzeraty($url){
if(empty($url)) return FALSE; //akce bez parametru
var_dump('SELECT jmeno FROM podstranky WHERE url ='.$url);
return Db::dotazSamotny('
SELECT jmeno
FROM podstranky
WHERE url = ?
',array($url));
}
Zobrazeno 34 zpráv z 34.
