Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Upload obrázků
redakcni system
20. prosince 2001, 00.00 | Pokračujeme v tvorbě vlastního redakčního systému v PHP. Dnes načneme téma uploadování obrázků ke článkům. Chcete mít vlastní redakční systém? Sledujte náš seriál...
Jak jsem slíbil, dnes si ukážeme upload obrázků. Vezmu to pěkně popořadě.První co se nám zobrazí je formulář pro vložení článku. Tam jsou první změny. Nejdříve se musí změnit typ odesílaných dat, aby server věděl, že mu nepřicházejí jen textové řetězce, ale i obrázek. Výsledkem toho je, že musíme zadat typ kodování dat. Bude to tedy vypadat následovně:
|
Tím serveru říkáme, že je zde více typů dat. Základním typem kódování je application/x-www-form-urlencoded. Ten je ale pro nás nepoužitelný. My musíme použít multipart/form-data. Každé pole je pak přenášeno jako jedna část MINE zprávy. Musíme také použít metodu odesílání typu POST.
Další věc, kterou musíme udělat, je načíst obrázek do formuláře. To nám udělá následující řádek.
|
Tyto čtyři řádky přidáme do formuláře, a tím si zajistíme načítání obrázku. Myslím, že jediné co potřebuje vysvětlení, je parametr ACCEPT. Ten nám říká, jaký typ souborů můžeme do formuláře vložit. Hodnota image/* nám bude brát všechny obrázky. Můžeme však autory omezit jen na jpeg obrázky (image/jpeg ale také image/pjpeg), gify (image/gif) či obrázek z ASCII-znaků (text/plain). Ve "windowsovském" oknu se sice zobrazí, že tam můžeme vloži jakýkoliv soubor, ale prohlížeč, pokud typ souboru nesouhlasí, nedovolí formulář odeslat.
Vložili jsme obrázek, napsali článek a odeslali formulář. Na začátku scriptu addclanek.php je něco, co nám ukládá články do databáze. My to musíme trochu změnit. Mělo by to vypadat takhle:
|
Podmínka se provede, jen když je odeslána z formuláře proměnná $send, velikost obrázku je menší než 20 KB (1 KB=1024 B to jest 210, jen pro úplnost), článek má nadpis a je něco v těle zprávy. Vložíme článek do databáze, protože jak víme, generování se spouští až po schválení článku. Pokud exisistuje obrázek, uložíme ho. Funkce MySQL_Insert_Id() zjistí hodnotu ID posledního příkazu INSERT tam, kde se ID generuje automaticky. Tím se myslí, že když jsme vytvářeli tabulku museli jsme u této položky udat direktivu AUTO_INCREMENT. Jinak jsme nuceni spoléhat se na jiné možnosti, jako například vybrat všechny id a z nich vybrat to největší. Je tu ještě ta divná proměnná $obr_size. Když odesíláme tímto způsobem formulář, tak v našem případě máme obrázek v proměnné $obr. Tam máme uloženo jméno souboru, do kterého nám PHP obrázek DOČASNĚ uložilo. Tento soubor se po ukončení scriptu smaže. Pokud s ním ještě chceme pracovat, musíme ho překopírovat někam jinam. U proměnné $obr máme k dispozici ještě doplňkové proměnné. Jsou to $obr_size, kde je uložena velikost souboru v bytech, $obr_type zjistí typ dat a $obr_name obsahuje jméno souboru v takové podobě, v jaké ho měl autor na svém počítači. My ale používáme pro zjištění typu obrázku GetImageSize(). Proměnnou $obr_type nepoužívám, protože MINE typ se nastavuje podle koncovky a funkce GetImageSize() to zjišťuje pomocí analýzy hlavičky souboru. Ještě něco. Jestliže zeleně označený text přidáte do scriptu add_user.php, bude se vám chybová hláška zobrazovat jen a pouze, pokud budou chybět povinné údaje. Nezapomeňte přidat skryté pole do formuláře. (kde $send=true).
Něco si k této funkci řeknem. Má dva parametry. První typu string, ve kterém je uloženo jméno souboru (respektive cesta k souboru). Druhý je pro nás nepodstatný.
Návratový typ je asociativní jednorozměrné pole. Pole je čtyřprvkové. V prvku s indexem 0 dostaneme šířku obrázku, s číslem 1 zase výšku. Pro nás je důležitý ten s číslem
2. Vrací typ obrázku. K dispozici máme GIF, JPG a PNG. Tyto formáty odpovídají určitým hodnotám:
|
Poslední prvek obsahuje řetězec ve tvaru height=xxx width=xxx, kde xxx nahrazuje rozměry obrázku. Proto tam kde chcete, aby se zobrazil obrázek v plném rozměru můžete použít tohle:
|
Přesto, že se jedná o "obrázkovou" funkci, nemusíme používat knihovnu GD. To jen tak mimochodem. A teď si konečně vysvětlíme onu podmínku. Pokud je obrázek typu jpeg, uložíme ho do adresáře ./images a jako název dáme číslo článku. To samé oděláme s obrázkem typu gif. Ještě malé vysvětlení fce Copy(). Pokud to vezmu zkráceně, tak první parametr naznačuje co a druhý, kam máme kopírovat.
Nyní jen uděláme menší změnu v souboru korektura.php. Následující řádky umístíme před konec tabulky.
|
Co se to děje? Pokud existuje obrázek s číslem $id a je typu jpeg či gif, vytvoříme na něj odkaz, aby si ho korektor mohl prohlédnout. Když obrázek není připojen, vypíšeme "Bez obrázku". Tím končí formulář pro úpravu článku. Když obrázek existuje, můžeme jej smazat. Tehdy se nám objeví formulářové tlačítko s nápisem "Smazat obrázek". Je to vlastně formulář, který odešle skryté pole s názvem smaz a hodnotou, která odpovídá číslu obrázku. Ten je poté smazán. Ještě před odesláním je zobrazeno okno s dotazem na jistotu rozhodnutí korektora.
Asi by ale bylo potřeba se autora napřed zeptat, jestli s tím souhlasí. Nejlépe mu poslat mail. Jak to udělat poloautomaticky, si řekneme příště.
Obsah seriálu (více o seriálu):
- Redakční systém I.
- Redakční systém II.
- Redakční systém III.
- Redakční Systém IV.
- Redakční systém V.
- Redakční systém VI.
- Redakční systém VII.
- Redakční systém VIII
- Redakční systém - tisk
- Redakční systém - generování
- Redakční systém - generování II.
- Redakční systém - generování III.
- Redakční systém - generování IV
- Redakční systém - generování V.
- Redakční systém - krátké zprávy a CSS styly
- Upload obrázků
- Upload - II a logout
- Schvalování článků - II
- Dodatečné přidání obrázku
- Regulární výrazy I
- Regulární výrazy II
- Redakční systém: Fulltext - I.
- Fulltext - II
- Co s RS?
- Optimalizace databáze v RS
- Interní vzkazy - I
- Interní vzkazy - II
- Interní vzkazy - III
- Náměty od čtenářů - I
- Náměty od čtenářů - II
- Náměty od čtenářů - III
- Náměty od čtenářů - IV
- Náhrada FTP
- Ankety
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007