Diskuze: Zobrazení obrázků z databáze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 12 zpráv z 12.
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.
Protože to vypisuješ špatně. Tvůj výpis končí >, ale
to má být ?>. Pokud sis tedy vybral data z databáze
správně, výpis by měl být takovýto:
<img id="foto" src="<?= $fotografie['foto'] ?>" />
Tedy za předpokladu, že to vypisuješ jako HTML v pohledu. Pokud to echuješ v PHP, správně je to takto:
echo '<img id="foto" src="' . $fotografie['foto'] . '" />';
Mozno ty chyba otaznik
<img id="foto" src="<?=$fotografie['foto'] ?>";
alebo
Skus neco podobne
<?php foreach ($fotografie as $foto) : ?>
<img src="images/<?php echo $foto['foto']; ?>" >
<?php endforeach; ?>
Ale daj pozor na adresu src kde mas ulozene obrazky
Když dám obrázek za PHP;
<img id="foto" src="<?= $fotografie['foto'] ?>" />
tak chrome hlásí Forbidden. A v PHP;
echo '<img id="foto" src="' . $fotografie['foto'] . '" />';
říká Undefined index . Blbě šahám do databáze?
Mám to tam takhle:
require_once 'Db.php';
Db::connect('127.0.0.1', 'databaze', 'root', '');
$fotografie = Db::queryAll('SELECT `foto` FROM `fotogalerie` WHERE `fotogalerie_id` = ?', $fotoid);
Ta třída Db.php je odsud, z výše zmíněného tutoriálu.
vojak528 -> obrázky nemám ve složce, ale databázi
ukazuje to nenačtený obrázek
Undefined index je zpravidla vyhazován, pokud se snažíš získat hodnotu z
pole, která tam není. V tomto případě pole $fotografie neobsahuje index
foto. Řekl bych, že daný obrázek v databázi není, což je
situace, kterou musíš ošetřit.
Dále záleží jak s obrázky pracuješ.
1) Ukládáš je na disk a do databáze ukládáš cestu k
souboru
V tomto případě by měl fungovat postup, jakým to děláš. Zkontroluj cestu
jestli sedí ad.
2) Ukládáš do DB celé obrázky (base64, nebo v raw
podobě):
V tom případě je můžeš zobrazit přes další PHP script.
šablona:
<img src="image.php?id=1" width="200" height="150" alt="" />
image.php:
$id = $_GET['id'];
# vytáhneš řádek z DB ($row)
$image = $row ? $row['foto'] : file_get_contents('/images/noimage.jpeg') # možnost, jak zobrazit zástupný obrázek, pokud v DB neexistuje
header("Content-type: image/jpeg");
echo $image;
Zjednodušeně, třeba content-type bych nastavoval podle typu obrázku ad.
Myslel jsem spíš to, jak vypadá výstup toho skriptu - to HTML, co se odesílá prohlížeči.
Udělej si var_dump proměnné $fotografie a zjistíš, že nemá index foto. Mělo by to vracet pole polí, něco jako
$fotografie = [
[
'foto' => '...'
]
]
Takže ideálně nepoužít metodu fetchAll ale něco jako fetchSingle (nevím, jak přesně ta třída vypadá), protože se snažíš vybírat jen jeden prvek. Nebo vypisovat $fotografie[0]['foto'] a nebo použít foreach, ale to dává smysl jen pokud vybíráš víc prvků.
A potom taky dát pozor na správný formát výpisu, viz třeba Data URIs na CSS tricks
Díky všem moc za rady.
Zjistil jsem, že jsou fotografie skutečně uložené v $fotografie[0]['foto']. Zkoušel jsem je všemožnými způsoby zobrazit, přes DATA URIs (to vypadá šikovně, ale nefunguje mi to, vypíše se mi do prohlížeče ten obrázek binárně).
Nakonec jsem to provizorně vyřešil tak, že jsem obrázky (mám jich asi
35) nahrál do FTP, pojmenoval je obrazek01 až obrazek35 a podle fotoid z $_GET
jsem je zobrazoval. Což, uznávám, je celkem prasárna, ale ta databáze se mi
prostě zprovoznit nepodařila. Tak aspoň ta galerie funguje a o to mi přece
šlo
.
Pro příště to asi udělám tak, že do ní uložím odkazy, protože texty a čísla se mi z databáze dařilo tahat v pohodě. Stejně mám pro FTP několikrát větší prostor než na databáze.
Tak ještě jednou díky všem.
Většinou to tak bývá lepší. Databázi chceš zatěžovat co nejméně, takže máš místo souborů uložené třeba jejich url. Navíc, jak říkáš, máš typicky databázového prostoru méně než diskového.
Zobrazeno 12 zpráv z 12.
