Diskuze: Uncaught exception
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 11 zpráv z 11.
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.
zdar,
ohraničuje ten wrapper sloupce do zpětných apostrofů? Pokud ne, zřejmě ti tam koliduje nějaký sloupec s klíčovým slovem (např. 'text).
Wrapper na vkládání dělá toto:
public static function vloz($tabulka, $parametry = array()) {
return self::dotaz("INSERT INTO `$tabulka` (`".
implode('`, `', array_keys($parametry)).
"`) VALUES (".str_repeat('?,', sizeOf($parametry))."?)",
array_values($parametry));
}
Zkusím si tam pohrát s apostrofy
Zkus si vypsat, co obsahuje pole $clanek (třeba v metodě ulozClanek)
No, tam někde bude zakopanej pes. vrací to totiž prázdný pole a za boha
mi ho nejde nijak naplnit..
Zkouším už i takový věci v kontroleru:
if($_POST)
{
$_SESSION['clanek']=$clanek=array(
'ID_clanek'=>$_POST['ID_clanek'],
'nadpis'=>$_POST['nadpis'],
'anotace'=>$_POST['anotace'],
'text'=>$_POST['text'],
'autor'=>$_POST['autor'],
'datum_vlozeni'=>'1',
'url'=>'FEF',
'active'=>0
);
$klice = array( 'nadpis','anotace','text','autor', 'datum_vlozeni','url', 'active');
$clanek = array_intersect_key($_POST, array_flip($klice));
$spravceClanku->ulozClanek($_SESSION['clanek']['ID_clanek'],$clanek);
$this->pridejZpravu('Článek přidán!');
$this->presmeruj('clanky');
}
Už to načítá alespoň z formuláře, byla tam chyba že jsem u inputů
neměl "name" ale jen "id" a proto to nic nebralo
Teď ještě vyřešit tu stejnou
chybu co na začátku
Te´d je pro změnu takováto chyba:
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1' in /data/www/19227/teplostyl_cz/admin/modely/Db.php:50 Stack trace: #0 /data/www/19227/teplostyl_cz/admin/modely/Db.php(50): PDO->prepare('INSERT INTO `cl...') #1 /data/www/19227/teplostyl_cz/admin/modely/Db.php(60): Db::dotaz('INSERT INTO `cl...', Array) #2 /data/www/19227/teplostyl_cz/admin/modely/SpravceClanku.php(22): Db::vloz('clanky', Array) #3 /data/www/19227/teplostyl_cz/admin/kontrolery/ClankyKontroler.php(53): SpravceClanku->ulozClanek('', Array) #4 /data/www/19227/teplostyl_cz/admin/kontrolery/SmerovacKontroler.php(50): ClankyKontroler->zpracuj(Array) #5 /data/www/19227/teplostyl_cz/admin/index.php(26): SmerovacKontroler->zpracuj(Array) #6 {main} thrown in /data/www/19227/teplostyl_cz/admin/modely/Db.php on line 50
máš tam někde v SQL dotazu chybu u nějaké závorky 
umí wrapper ten dotaz vypsat?
Vymazal jsem ty zpětné apostrofy, na té databázi klienta co to běží se
právě moc nemají ty apostrofy používat. Jenže teď jsem chtěl jen doladit
editaci, ale i tam to háže chybu, zase tam asi bude problém ve wrapperu.
Chyba:
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= ? WHERE ID_clanek = ?' at line 1' in /data/www/19227/teplostyl_cz/admin/modely/Db.php:50 Stack trace: #0 /data/www/19227/teplostyl_cz/admin/modely/Db.php(50): PDO->prepare('UPDATE clanky S...') #1 /data/www/19227/teplostyl_cz/admin/modely/Db.php(69): Db::dotaz('UPDATE clanky S...', Array, '3') #2 /data/www/19227/teplostyl_cz/admin/modely/SpravceClanku.php(24): Db::zmen('clanky', Array, 'WHERE ID_clanek...', '3') #3 /data/www/19227/teplostyl_cz/admin/kontrolery/ClankyKontroler.php(53): SpravceClanku->ulozClanek('3', Array) #4 /data/www/19227/teplostyl_cz/admin/kontrolery/SmerovacKontroler.php(50): ClankyKontroler->zpracuj(Array) #5 /data/www/19227/teplostyl_cz/admin/index.php(26): SmerovacKontroler->zpracuj(Array) #6 {main} thrown in /data/www/19227/teplostyl_cz/admin/modely/Db.php on line 50
wrapper s funkcí pro editaci:
public static function zmen($tabulka, $hodnoty = array(), $podminka, $parametry = array()) {
return self::dotaz("UPDATE $tabulka SET ".
implode(' = ?, ', array_keys($hodnoty)).
" = ? " . $podminka. ";",
array_merge(array_values($hodnoty)), $parametry);
}
No a co ti vypíše ta část
echo "UPDATE $tabulka SET ".
implode(' = ?, ', array_keys($hodnoty)).
" = ? " . $podminka. ";"
?
Už to nakonec všechno běží.. Teď zpětně po pár hodinách nevím,
čím to přesně bylo, ale musel jsem promazat nějaké apostrofy ve wrapperu

Díky za předešlou pomoc! 
Zobrazeno 11 zpráv z 11.