Slezská univerzita v Opavě Obchodně podnikatelská fakulta v Karviné PORTÁL A JEHO SPRÁVA A Pro prezenční formu studia Petr Suchánek Jan Górecki Karviná 2013 Projekt OP VK č. CZ.1.07/2.2.00/28.0017 „Inovace studijních programů na Slezské univerzitě, Obchodně podnikatelské fakultě v Karviné“ Obor: Informatika. Anotace: Webové portály lze v dnešní době považovat za klíčové rozhraní v prostředí internetu. Jejich využití je možné jak pro pouhou prezentaci obsahu, tak i například pro podnikatelské účely v podobě internetových obchodů, přístup k podnikovým informačním systémům, řízení dislokovaných pracovišť, komunikaci a podporu řízení obsahu v rámci intranetu, apod. Tato studijní opora je zaměřena na problematiku tvorby webových portálů s využitím technologií HTML, PHP, MySQL a lokálního serveru Apache. Primárním cílem je seznámit studenty s tvorbou dynamických webových stránek, metodami práce se skripty a propojením dynamických webových stránek s databázemi. Po studiu dané studijní opory budou studenti schopni vytvořit jednoduchá portálová řešení, která budou funkční jak s využitím lokálního serveru, tak i v rámci webhostingu. Klíčová slova: Webový portál, skript, databáze, webové formuláře, vytváření dynamických webových stránek, předávání dat. © Doplní oddělení vědy a výzkumu. Autor: Doc. Mgr. Petr Suchánek, Ph.D. Ing. Jan Górecki Recenzenti: Doc. RNDr. Petr Šaloun, Ph.D. Ing. Mgr. Roman Šperka, Ph.D. ISBN Doplní oddělení vědy a výzkumu. - 3 - OBSAH ÚVOD ........................................................................................................................................ 6 1 WEBOVÝ & INTERNETOVÝ PORTÁL ................................................................... 7 1.1 DEFINICE WEBOVÉHO PORTÁLU A SOUVISEJÍCÍCH POJMŮ ....................................................... 7 1.2 TYPY WEBOVÝCH PORTÁLŮ ..................................................................................................... 8 1.2.1 HORIZONTÁLNÍ WEBOVÉ PORTÁLY .............................................................................. 8 1.2.2 VERTIKÁLNÍ WEBOVÉ PORTÁLY ................................................................................... 8 1.2.3 KOMBINACE HORIZONTÁLNÍHO A VERTIKÁLNÍHO WEBOVÉHO PORTÁLU ...................... 9 1.3 TVORBA WEBOVÉHO PORTÁLU ................................................................................................ 9 1.4 NÁSTROJE A TECHNOLOGIE PRO TVORBU WEBOVÉHO PORTÁLU........................................... 11 1.5 PSPAD .................................................................................................................................... 12 1.5.1 INSTALACE PROGRAMU PSPAD................................................................................. 12 1.5.2 ZÁKLADNÍ PRÁCE S PROGRAMEM.............................................................................. 13 2 HTML ............................................................................................................................ 14 2.1 CHARAKTERISTIKA HTML .................................................................................................... 14 2.2 CHARAKTERISTIKA XHTML ................................................................................................. 14 2.3 ZÁKLADNÍ ROZDÍLY MEZI HTMNL A XHTML..................................................................... 14 2.4 TAGY...................................................................................................................................... 14 2.4.1 PÁROVÝ TAG ............................................................................................................ 15 2.4.2 NEPÁROVÝ TAG ........................................................................................................ 15 2.4.3 STRUKTURA HTML DOKUMENTU............................................................................... 15 2.5 ODSTAVCE A ZALOMENÍ TEXTU............................................................................................. 17 2.6 NADPISY................................................................................................................................. 17 2.7 TYPY PÍSMA............................................................................................................................ 18 2.8 ODKAZY ................................................................................................................................. 18 2.9 SEZNAMY ............................................................................................................................... 19 2.10 OBRÁZKY ............................................................................................................................... 19 2.11 TABULKY ............................................................................................................................... 20 2.12 RÁMY ..................................................................................................................................... 21 2.13 FORMULÁŘE........................................................................................................................... 23 2.13.1 TAG FORM................................................................................................................ 23 2.13.2 TAG INPUT ............................................................................................................... 24 2.13.3 TAG TEXTAREA ......................................................................................................... 24 2.13.4 TAG SELECT ............................................................................................................. 25 2.13.5 TAG FIELDSET.......................................................................................................... 25 2.14 STRUKTUROVANÝ PŘEHLED VYBRANÝCH TAGŮ ................................................................... 27 2.14.1 ZÁKLADNÍ ZNAČKY ................................................................................................... 27 2.14.2 TYPOGRAFICKÉ ZNAČKY........................................................................................... 27 2.14.3 FORMÁTOVACÍ ZNAČKY ............................................................................................ 28 2.14.4 ODKAZY ................................................................................................................... 28 2.14.5 OBRÁZKY ................................................................................................................. 28 2.14.6 SEZNAMY.................................................................................................................. 29 2.14.7 FORMULÁŘE ............................................................................................................ 29 2.14.8 RÁMY ....................................................................................................................... 29 2.14.9 TABULKY.................................................................................................................. 30 - 4 - 3 CSS (CASCADING STYLE SHEETS)....................................................................... 31 3.1 STYL....................................................................................................................................... 31 3.2 DĚDIČNOST ............................................................................................................................ 31 3.3 PŘIPOJENÍ STYLU K SOUBORU................................................................................................ 32 3.3.1 EXTERNÍ SOUBOR ..................................................................................................... 32 3.3.2 DEFINOVÁNÍ STYLU UVNITŘ DOKUMENTU................................................................. 32 3.4 BARVY.................................................................................................................................... 32 3.5 PÍSMO ..................................................................................................................................... 33 3.5.1 RODINA PÍSMA ......................................................................................................... 33 3.5.2 STYL PÍSMA .............................................................................................................. 34 3.5.3 VARIANTA PÍSMA ...................................................................................................... 34 3.5.4 VELIKOST PÍSMA....................................................................................................... 34 3.6 ODKAZY ................................................................................................................................. 35 3.6.1 BARVA ODKAZU........................................................................................................ 35 3.6.2 PSEUDOTŘÍDY.......................................................................................................... 36 3.7 SEZNAMY ............................................................................................................................... 36 3.8 OHRANIČENÍ........................................................................................................................... 37 3.9 POZADÍ ................................................................................................................................... 38 3.10 TABULKY ............................................................................................................................... 39 3.11 TŘÍDY A IDENTIFIKÁTORY...................................................................................................... 42 3.11.1 TŘÍDY V CSS ............................................................................................................ 42 3.11.2 DĚDIČNOST.............................................................................................................. 42 3.11.3 KONTEXTOVÁ DEKLARACE........................................................................................ 43 3.12 IDENTIFIKÁTOR ID V CSS....................................................................................................... 43 3.13 CSS POZICOVÁNÍ.................................................................................................................... 43 3.14 SÉMANTIKA............................................................................................................................ 46 4 PHP ................................................................................................................................ 48 4.1 INSTALACE LOKÁLNÍHO SERVERU ......................................................................................... 48 4.2 FUNKČNOST LOKÁLNÍHO SERVERU........................................................................................ 49 4.3 ZÁKLADY PHP ....................................................................................................................... 49 4.4 PROMĚNNÉ ............................................................................................................................. 52 4.5 VĚTVENÍ................................................................................................................................. 54 4.5.1 IF............................................................................................................................. 54 4.5.2 IF ELSE A ELSEIF ...................................................................................................... 54 4.6 CYKLY.................................................................................................................................... 55 4.6.1 DO WHILE ................................................................................................................ 56 4.6.2 WHILE ..................................................................................................................... 56 4.6.3 FOR ......................................................................................................................... 56 4.6.4 BREAK ..................................................................................................................... 57 4.6.5 CONTINUE ............................................................................................................... 57 4.7 FUNKCE.................................................................................................................................. 57 4.7.1 VYVOLÁNÍ FUNKCE................................................................................................... 58 4.7.2 FUNKCE BEZ ARGUMENTU........................................................................................ 58 4.7.3 FUNKCE S ARGUMENTEM ......................................................................................... 58 4.7.4 FUNKCE VRACEJÍCÍ HODNOTU, PŘÍKAZ RETURN........................................................ 59 4.7.5 GLOBÁLNÍ PROMĚNNÉ.............................................................................................. 59 - 5 - 4.8 POLE....................................................................................................................................... 59 4.8.1 VYTVOŘENÍ POLE ..................................................................................................... 59 4.8.2 VÝPIS PRVKŮ POLE................................................................................................... 60 4.8.3 PROCHÁZENÍ POLEM................................................................................................ 60 4.9 PHP MENU.............................................................................................................................. 61 4.10 ÚLOHY K ZAMYŠLENÍ ............................................................................................................ 61 5 VYUŽITÍ PHP PRO ZPRACOVÁNÍ FORMULÁŘŮ ............................................. 62 5.1 ÚLOHY K ZAMYŠLENÍ ............................................................................................................ 64 6 MYSQL.......................................................................................................................... 65 6.1 VYTVOŘENÍ DATABÁZE.......................................................................................................... 65 6.1.1 TVORBA TABULKY..................................................................................................... 65 6.1.2 VLOŽENÍ ZÁZNAMŮ DO TABULKY .............................................................................. 67 6.2 PŘÍKAZY SQL......................................................................................................................... 68 6.2.1 VYTVOŘENÍ TABULKY................................................................................................ 68 6.2.2 VLOŽENÍ ZÁZNAMU DO TABULKY .............................................................................. 69 6.2.3 ZMĚNA HODNOT V TABULCE..................................................................................... 70 6.2.4 SMAZÁNÍ ZÁZNAMŮ V TABULCE................................................................................. 70 6.2.5 VÝBĚR ZÁZNAMŮ Z DATABÁZE................................................................................... 71 6.3 DATA VE VÍCE TABULKÁCH ................................................................................................... 72 6.3.1 ERD DIAGRAM......................................................................................................... 73 6.3.2 PŘÍKAZ SELECT PRO VÍCE NEŽ JEDNU TABULKU..................................................... 74 7 REGISTRACE A OVĚŘENÍ UŽIVATELE.............................................................. 77 7.1 REGISTRACE UŽIVATELE........................................................................................................ 77 7.1.1 HTML - REGISTRAČNÍ FORMULÁŘ ............................................................................ 78 7.1.2 PHP –SKRIPT PRO ZPRACOVÁNÍ FORMULÁŘOVÝCH DAT............................................ 79 7.1.3 SQL – DOTAZ ZAJIŠŤUJÍCÍ ZÁPIS DAT DO DATABÁZE.................................................. 80 7.1.4 ŠIFROVÁNÍ HESLA..................................................................................................... 81 7.2 OVĚŘENÍ UŽIVATELE.............................................................................................................. 81 7.2.1 HTML – PŘIHLAŠOVACÍ FORMULÁŘ ......................................................................... 82 7.2.2 PHP – SKRIPT PRO OVĚŘENÍ UŽIVATELE................................................................... 83 8 PŘÍPADOVÁ STUDIE................................................................................................. 88 ZÁVĚR.................................................................................................................................. 109 SEZNAM POUŽITÉ LITERATURY................................................................................ 110 - 6 - ÚVOD Jedním z předmětů, který je na Slezské univerzitě v Opavě, obchodně podnikatelské fakultě vyučován v rámci oboru „Manažerská informatika“ studijního programu „Systémové inženýrství a informatika“ je předmět „Portál a jeho správa A“. Tento předmět si jako volně volitelný mohou vybrat i studenti jiných oborů a podle sledovaného zájmu lze konstatovat, že se jedná o oblíbený předmět pro všechny, které zajímá problematika tvorby webových stránek resp. dynamických webových stránek a ještě lépe webových portálů, které jsou dnes primárním komunikačním rozhraním v rámci internetu. Současné nástroje a technologie se stále více přibližují uživatelům a i lidé s neinformatickým vzděláním jsou schopni vytvořit si kvalitní webové stránky využitelné pro osobní nebo i profesionální účely. A to je právě jeden z primárních cílů předmětu „Portál a jeho správa A“, v rámci kterého si na jedné straně studenti oboru Manažerská informatika prohloubí své dosavadní znalosti z tvorby dynamických webových stránek a portálů a studenti jiných, v našem případě oborů souvisejících s ekonomií, marketingem apod., proniknou do dané problematiky a získají minimálně základní znalosti a dovednosti, které budou moci dle vlastního zájmu a potřeb v budoucnu dále rozvíjet. Z obsahového hlediska je předmět zaměřen spíše do praktické roviny. Z tohoto hlediska je cílem zvládnout tvorbu struktury webového portálu pomocí HTML (HyperText Markup Language (resp. XHTML (eXtensible HyperText Markup Language)) a kaskádových stylů CSS (Cascading Style Sheets), tvorbu webových formulářů, vkládání dynamických prvků v podobě PHP (Hypertext Preprocessor) skriptů, tvorbu databáze v MySQL a základní metody komunikace webových portálů s databází MySQL (předávání hodnot mezi databází a webovými formuláři). Petr Suchánek, Jan Górecki; Portál a jeho správa A - 7 - 1 WEBOVÝ & INTERNETOVÝ PORTÁL Vyjdeme-li z nejobecnějšího pohledu, pak pojem „portál“ pochází z latinského porta (brána) a má celou významů. Lze ho použít například pro označení architektonickými nebo jinými výtvarnými prvky ozdobeného orámování vstupu do významné, obvykle veřejné budovy, např. do katedrály, pohledového orámování divadelního jeviště, v němž bývá zavěšena divadelní opona, vstupu do jeskyně nebo dalších objektů. Ve spojitosti s výukou předmětu Portál a jeho správa se budeme v tomto textu zabývat jiným významem resp. formou portálu, kterou je tzv. webový nebo internetový portál. V této publikaci bude z důvodu zachování jednotnosti a konzistence textu využíván pojem webový portál. 1.1 DEFINICE WEBOVÉHO PORTÁLU A SOUVISEJÍCÍCH POJMŮ Webový portál můžeme definovat z různých pohledů orientovaných zejména na technologie, oblasti využití, cílové skupiny a funkce (Definice 1 – 3). DEFINICE 1 Termínem portál v pojetí informačních technologií (Information Technology – IT) označujeme (webovou) aplikaci, která svému uživateli poskytuje jednotným způsobem a centralizovaně informace z různých zdrojů, které uživatele zajímají nebo se ho nějakým způsobem týkají. Jiná definice říká že: DEFINICE 2 Technicky je portál internetovou aplikací napojenou na různé datové zdroje a pracuje se s ním prostřednictvím internetového prohlížeče. Z hlediska funkcí, využitelnosti a cílových skupin může být dále webový portál definován jako: DEFINICE 3 Webový portál představuje bezpečný a jednotný bod interakce s různorodými informacemi, obchodními procesy a lidmi, přizpůsobený individuálním potřebám konkrétních uživatelů. Abychom dále upřesnili definice 1 – 3, je nutné nadefinovat ještě pojem webová aplikace (Definice 4) a v návaznosti na tuto definici ještě pojem webový server (Definice 5). DEFINICE 4 Webová aplikace v softwarovém inženýrství je aplikace poskytovaná uživatelům z webového serveru přes počítačovou síť Internet, nebo její vnitropodnikovou obdobu (intranet). 1 Webový & internetový portál - 8 DEFINICE 5 5 a) Webový server je počítač, který je odpovědný za vyřizování požadavků HTTP od klientů - programů zvaných webový prohlížeč. Vyřízením požadavků se rozumí odeslání webové stránky. 5 b) Webový server je počítačový program, který provádí činnosti popsané v předchozím bodě (démon). Webové portály jsou primárně založeny na komunikaci klient-server (Definice 6). DEFINICE 6 Klient-server je síťová architektura, která odděluje klienta (často aplikaci s grafickým uživatelským rozhraním) a server, kteří spolu komunikují přes počítačovou síť. Klient-server popisuje vztah mezi dvěma počítačovými programy, v nichž první program, klient, žádá o služby jiný program zvaný server. Příkladem je webový prohlížeč, tj. klientský program na uživatelském počítači, který může přistupovat k informacím na libovolném webovém serveru na světě (v rámci Internetu) (samozřejmě s přihlédnutím k autorizaci přístupu). 1.2 TYPY WEBOVÝCH PORTÁLŮ Webové portály nabízejí širokou škálu služeb a informací s možností jejich přizpůsobení uživateli podle osobních potřeb a zájmů (personalizace). Z hlediska služeb a orientace na cílové skupiny rozdělujeme webové portály na tři typy, kterými jsou horizontální, vertikální a kombinované. 1.2.1 HORIZONTÁLNÍ WEBOVÉ PORTÁLY Horizontální webové portály obsahují široké tematické zaměření a jsou orientované na co nejširší cílovou skupinu. Do této kategorie řadíme klasické webové vyhledávače, kterými jsou například:  www.seznam.cz;  www.google.com;  www.centrum.cz;  www.atlas.cz;  www.volny.cz;  www.yahoo.com;  www.msn.com;  www.aol.com;  www.altavista.com;  www.go.com;  www.dogpile.com;  a další. 1.2.2 VERTIKÁLNÍ WEBOVÉ PORTÁLY Tento typ webových portálů je zaměřen na určitou skupinu uživatelů (např. tzv. community portals slouží uživatelům z určitého regionu) nebo jsou orientovány tematicky, opět s ohledem na zájmy určité skupiny uživatelů. Terminologicky jsou označovány i jako oborové portály (vortály). Jako příklady je možné uvést:  www.diit.cz;  www.statnisprava.cz;  www.itnews.sk;  management.blog.cz;  www.microsoft.com;  www.cd.cz;  www.vodafone.cz;  www.opf.slu.cz;  www.idos.cz;  a další. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 9 Vertikální webové portály můžeme dále konkrétněji dělit na následující typy:  Osobní portály nabízející možnost personalizace prezentace a výběru informací pro své uživatele (například sociální sítě a podobně);  Regionální portály;  Zpravodajské portály;  Vládní portály;  Obchodní a byznys portály;  Podnikové portály (často sloužící i jako intranet). 1.2.3 KOMBINACE HORIZONTÁLNÍHO A VERTIKÁLNÍHO WEBOVÉHO PORTÁLU Jako speciální případ kombinovaného webového portálu můžeme uvést internetové obchody, které jsou orientované na různé cílové skupiny (buď na širokou cílovou skupinu, nebo úzkou) a nabízejí buď specifické produkty, nebo velmi široký rozsah produktů. Ve vztahu k vertikálním portálům je nutné uvést, že studijní text se nebude zaměřovat na problematiku podnikových portálů, ale pouze těch, které jsou vytvářené za účelem poskytování a sdílení informací v prostředí Internetu. Jen pro upřesnění uvedeme, že podnikové portály jsou chápány jako webové stránky (obvykle dynamické webové stránky), které slouží k lepšímu publikování a sdílení informací ve firmě. V podstatě se termínů firemní, podnikový, či vnitrofiremní portál užívá pro označení aplikace s názvem intranet či extranet. Firemní portály jsou většinou vystavěny na redakčních systémech typu ECM (Enterprise Content Management), které dokáží agregovat data z více datových zdrojů. 1.3 TVORBA WEBOVÉHO PORTÁLU Jak již vyplývá z předchozího textu, webové portály jsou ve svém pojetí „dynamické webové stránky“ představující uživatelské rozhraní poskytující uživateli nejen statický obsah, ale i celou řadu služeb, jako například mailové schránky, vyhledávání, zprávy do mailu, informace o počasí, diskusní fórum, chat, kalendář akcí, katalog zdrojů a další. Chceme-li vytvářet portál sami nebo ho zadat v rámci externí dodávky, vždy je nutné provést podrobnou analýzu potřeb založenou na jasné vizi a strategii. Předpokladem úspěšnosti projektu tvorby webového portálu jsou:  Identifikace potřeb potenciálních uživatelů portálu;  Specifikace použitelnosti a uživatelské přívětivosti;  Technologické možnosti;  Bezpečnost;  Stabilita;  Redukce technologií potřebných pro fungování webového portálu;  Maximalizace flexibility portálu potřeby průběžných úprav, vylepšení a doplnění;  Časový harmonogram tvorby;  Finanční rozpočet;  Možnosti personalizace webového portálu;  Testování použitelnosti a uživatelské přívětivosti. 1 Webový & internetový portál - 10 Z hlediska vlastní tvorby se musí brát do úvahy a zajistit:  Použitelnost webu - návštěvník musí snadno najít informaci, pro kterou na web přišel. Zejména kontakt, poptávka či objednání zboží musí být po ruce;  Přehledná struktura webu - vychází z výše uvedené Použitelnosti webu. Jde zejména o logické členění stránek a intuitivní orientaci návštěvníka napříč webem;  Přístupnost webu - zahrnuje (nejen) technické požadavky, např. výrazné a logické menu pro ovládání stránek, alternativní popisy obrázků, velikost písma, barva odkazů atd.  Validní kód - vyhledávače mají dnes již velmi sofistikované indexovací algoritmy, které si poradí i s nepřívětivým kódem, ale není jediný důvod jim práci komplikovat. Základem je orientace na uživatele webu. V rámci seminářů budou vytvářené různé projekty v podobě portálů, resp. dynamických webových stránek. Když je budete vytvářet nebo jejich tvorbu řídit nyní nebo kdykoliv později v praxi, vždy byste měli dodržovat některé důležité zásady, které se staly nebo stávají standardem a jejich aplikací do svých semestrálních projektů si jejich použití můžete nacvičit. Jedná se zejména o následující výčet základních zásad vytahujících se k výšeuvedeným čtyřem oblastem:  Obsah webových stránek je dostupný a čitelný: o Každý netextový prvek nesoucí významové sdělení má svou textovou alternativu; o Informace sdělované prostřednictvím skriptů, objektů, appletů, kaskádových stylů, obrázků a jiných doplňků na straně uživatele jsou dostupné i bez kteréhokoli z těchto doplňků; o Informace sdělované barvou jsou dostupné i bez barevného rozlišení; o Barvy popředí a pozadí jsou dostatečně kontrastní. Na pozadí není vzorek, který snižuje čitelnost; o Předpisy určující velikost písma nepoužívají absolutní jednotky; o Předpisy určující typ písma obsahují obecnou rodinu písem.  Práci s webovou stránkou řídí uživatel: o Obsah WWW stránky se mění, jen když uživatel aktivuje nějaký prvek; o Webová stránka bez přímého příkazu uživatele nemanipuluje uživatelským prostředím; o Nová okna se otevírají jen v odůvodněných případech a uživatel je na to předem upozorněn; o Na webové stránce nic nebliká rychleji než jednou za sekundu; o Webová stránka nebrání uživateli posouvat obsahem rámů; o Obsah ani kód webové stránky nepředpokládá ani nevyžaduje konkrétní způsob použití ani konkrétní výstupní či ovládací zařízení.  Informace jsou srozumitelné a přehledné: o Webové stránky sdělují informace jednoduchým jazykem a srozumitelnou formou; o Úvodní webová stránka jasně popisuje smysl a účel webu. Název webu či jeho provozovatele je zřetelný; o Webová stránka i jednotlivé prvky textového obsahu uvádějí své hlavní sdělení na svém začátku; o Rozsáhlé obsahové bloky jsou rozděleny do menších, výstižně nadepsaných celků; o Informace zveřejňované na základě zákona jsou dostupné jako textový obsah webové stránky; o Na samostatné webové stránce je uveden kontakt na technického správce a prohlášení jasně vymezující míru přístupnosti webu a jeho částí. Na tuto webovou stránku odkazuje každá stránka webu. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 11  Ovládání webu je jasné a pochopitelné: o Každá webová stránka má smysluplný název, vystihující její obsah; o Navigační a obsahové informace jsou na webové stránce zřetelně odděleny; o Navigace je srozumitelná a je konzistentní na všech webových stránkách; o Každá webová stránka (kromě úvodní webové stránky) obsahuje odkaz na vyšší úroveň v hierarchii webu a odkaz na úvodní WWW stránku; o Všechny webové stránky rozsáhlejšího webu obsahují odkaz na přehlednou mapu webu. o Obsah ani kód webové stránky nepředpokládá, že uživatel již navštívil jinou stránku; o Každý formulářový prvek má přiřazen výstižný nadpis; o Každý rám má vhodné jméno či popis vyjadřující jeho smysl a funkčnost.  Odkazy jsou zřetelné a návodné: o Označení každého odkazu výstižně popisuje jeho cíl i bez okolního kontextu; o Stejně označené odkazy mají stejný cíl; o Odkazy jsou odlišeny od ostatního textu, a to nikoli pouze barvou; o Obrázková mapa na straně serveru je použita jen v případě, že nebylo možné pomocí dostupného geometrického tvaru definovat oblasti v obrázkové mapě. V ostatních případech je použita obrázková mapa na straně uživatele. Obrázková mapa na straně serveru je vždy doprovázena alternativními textovými odkazy; o Uživatel je předem jasně upozorněn, když odkaz vede na obsah jiného typu, než je webová stránka. Takový odkaz je doplněn sdělením o typu a velikosti cílového souboru.  Kód je technicky způsobilý a strukturovaný: o Kód webových stránek odpovídá nějaké zveřejněné finální specifikaci jazyka HTML či XHTML. Neobsahuje syntaktické chyby, které je správce webových stránek schopen odstranit; o V metaznačkách je uvedena použitá znaková sada dokumentu; o Prvky tvořící nadpisy a seznamy jsou korektně vyznačeny ve zdrojovém kódu. Prvky, které netvoří nadpisy či seznamy, naopak ve zdrojovém kódu takto vyznačeny nejsou; o Pro popis vzhledu webové stránky jsou upřednostněny stylové předpisy; o Je-li tabulka použita pro rozvržení obsahu webové stránky, neobsahuje záhlaví řádků ani sloupců. Všechny tabulky zobrazující tabulková data naopak záhlaví řádků a/nebo sloupců obsahují; o Všechny tabulky dávají smysl čtené po řádcích zleva doprava. 1.4 NÁSTROJE A TECHNOLOGIE PRO TVORBU WEBOVÉHO PORTÁLU Pro tvorbu webového portálu je možné využít celé řady technologií a nástrojů, pomocí kterých je možné vytvářet webové stránky s dynamickým obsahem. Z hlediska jazyků a skriptovacích jazyků lze pro tvorbu www stránek využít HTML (HyperText Markup Language), XHTML (Extensible HyperText Markup Language), CSS (Cascading Style Sheets), Java Skript, AJAX (Asynchronous JavaScript and XML (Extensible Markup Language)), PHP (Hypertext Preprocessor), JSP (JavaServer Pages), Java, Ruby, Python, Perl, ASP.NET apod. Jedná se dnes o běžné jazyky, které se většinou využívají v nejnovějších verzích, ovšem v některých případech ani pozdější přechod k novější verzi většinou nečiní žádné významnější problémy. V rámci této studijní opory budeme pro tvorbu webového portálu využívat:  HTML nebo XHTML (v textu se využívá HTML s tím, že téměř všechny kódy odpovídají i standardu XHTML);  Lokální server Apache;  PHP;  MySQL; 1 Webový & internetový portál - 12 Z hlediska softwarové podpory budou všechny ukázky a příklady realizovány pomocí PSPad a EasyPHP. Aby bylo možné si hned od začátku výkladu doplněného o příklady tyto příklady zkoušet, bude jako první popsán v předchozí větě uvedený software PSPad, ve kterém je možné průběžně, bez jakýchkoliv doplňků a dalších software, zkoušet kódy prezentované v kapitolách HTML a CSS. 1.5 PSPAD PSPad je celosvětově rozšířený freewarový textový editor a editor zdrojových kódů pro platformu Microsoft Windows vyvíjený v prostředí Delphi. Je navržen jako univerzální editor pro editaci prostých textů a zdrojových kódů mnoha programovacích, skriptovacích a značkovacích jazyků (podporuje přes 30 různých prostředí - PHP, HTML, XML, Java, JavaScript, Perl, C, C++, ASP, SQL, Python, aj.) a další. Základními funkcemi programu jsou:  práce s projekty;  práce ve více dokumentech současně s možností uložení rozdělané práce;  záznam makra s možností uložení a načtení z disku;  hledání s nahrazením v souborech;  porovnávání textu s barevným zvýrazněním rozdílů;  šablony (HTML tagy, skripty, kusy kódu...) včetně uživatelsky definovatelných klávesových zkratek;  instalace obsahuje šablony pro HTML, PHP, Pascal, JScript, VBScript, MySQL, MS-Dos, Perl, ...;  uživatelská definice zvýrazňovačů pro exotická prostředí;  konverze češtiny (LatinII, Kamenických, Windows 1250, ISO 8859-2, UTF-8, UNICODE);  zvýraznění syntaxe s automatickým nastavením dle typu souboru;  automatické opravy;  inteligentní interní HTML náhled pomocí IE i Mozilly;  plnohodnotný HEXA editor od verze 3.2.5;  přímé odeslání souboru na disketu, jako obsahu e-mailu nebo příloha e-mailu;  definice externích programů, ve kterých je možné soubor otevřít;  tisk zvýrazněné syntaxe s možností náhledu před tiskem;  export včetně zvýraznění do RTF, HTML, XHTML, TeX souboru nebo do schránky;  sloupcové a řádkové bloky, záložky v textu, zobrazení čísel řádků;  přeformátování a komprese HTML kódu, změna velikosti tagů, odstranění tagů;  integrovaná knihovna TiDy pro formátování a kontrolu HTML, převod do CSS, XML, XHTML;  integrovaný free editor TopStyle Lite (odkaz ke stažení) pro editaci CSS;  setřídění řádků s možností třídění dle definovaného sloupce;  změny velikosti písmen, odstranění diakritiky;  zobrazení ASCII tabulky s možností tisku;  práce se dvěma soubory současně v rozděleném okně s možností synchronizace posuvu;  uživatelská lokalizace do jiných jazyků (doufám, že se podělíte s vlastními lokalizacemi);  jednoduchá integrace do systému Windows a oblíbených programů. 1.5.1 INSTALACE PROGRAMU PSPAD Software PSPad si lze stáhnout z celé řady odkazů. Základním odkazem je http://www.pspad.com/cz/. Instalace proběhne automaticky po spuštění instalačního souboru. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 13 - 1.5.2 ZÁKLADNÍ PRÁCE S PROGRAMEM Po instalaci a spuštění programu se nám zobrazí pracovní plocha programu. Defaultně je při prvním spuštění otevřený soubor označený jako Novy1.txt, jehož záložka je zobrazena v levém horním rohu. (Obrázek 1) Obrázek 1: Záložka souboru v programu PSPad. Tento soubor zavřeme způsobem, že klepneme pravým tlačítkem myši na záložku souboru a zadáme příkaz zavřít. Je zřejmé, že se jedná o standardní způsob využitelný v libovolném okamžiku při práci s programem PSPad. Jak bylo uvedeno v základním popisu programu, tento umožňuje práci s celou řadou různých prostředí (resp. jazyků), přičemž po prvním otevření souboru daného typu automaticky vkládá na pracovní plochu základní strukturu podle výchozí syntaxe. Jako příklad si ukážeme otevření dokumentu html. Zadáme příkaz Soubor/Nový a z nabídky vybereme HTML. Otevře se nám soubor s názvem Novy1.html obsahující základní strukturu html dokumentu (konkrétně bude popsána v následující kapitole). (Obrázek 2) Obrázek 2: Otevření souboru html v programu PSPad. Mezi tagy a vepište podle Obrázku 2 text “Zkušební soubor.”. Takto vytvořený html dokument nepotřebuje žádnou speciální podporu a proto po kliknutí na funkční tlačítko F10 se obsah html dokumentu zobrazí v prohlížeči. Obecně tedy je funkční klávesa F10 je využívána pro zobrazování souborů, které nepotřebují žádnou jinou podporu. Důležitým krokem je samozřejmě uložení souboru, které se provádí standardním příkazem Soubor/Uložit jako…. 2 HTML - 14 - 2 HTML 2.1 CHARAKTERISTIKA HTML HTML (HyperText Markup Language) je značkovací jazyk pro hypertext, který umožňuje tvorbu www stránek. Jazyk je aplikací dříve vyvinutého rozsáhlého univerzálního značkovacího jazyka SGML (Standard Generalized Markup Language). Vývoj HTML byl ovlivněn vývojem webových prohlížečů, které zpětně ovlivňovaly definici jazyka. 2.2 CHARAKTERISTIKA XHTML XHTML (eXtensible Hypertext Markup Language) je značkovací jazyk pro tvorbu hypertextových dokumentů v prostředí WWW vyvinutý W3C. Původně se předpokládalo, že se stane nástupcem jazyka HTML, jehož vývoj byl verzí 4.01 ukončen. V roce 2007 však došlo k založení pracovní skupiny, která má za cíl vytvořit novou verzi HTML, která ponese označení HTML 5 a její XML variantu XHTML 5. 2.3 ZÁKLADNÍ ROZDÍLY MEZI HTMNL A XHTML Některé věci platily už v HTML, ovšem XHTML je striktně vyžaduje. Jedná se zejména o:  Všechny atributy mají hodnoty v uvozovkách;  Zákaz křížení tagů. Již konkrétními rozdíly mezi HTML a XHTML jsou:  Tagy a atributy jsou malými písmeny;  Nepárové tagy končí lomítkem;  Párové tagy jsou párové povinně;  Všechny atributy musejí mít hodnotu;  Interní javascript a styly se zapisují jiným způsobem;  Dokument má mít XML prolog;  Dokument požaduje správný doctype. Než začneme s následujícím výkladem orientovaným na výklad základních postupů při práci s jazyky a prostředími, pomocí kterých budeme portály vytvářet, je vhodné doporučit, aby všechny příklady a ukázky, které budou níže prezentované, jste si vyzkoušeli prakticky v programech PSPad a EasyPHP. 2.4 TAGY Jak již bylo uvedeno výše, HTML je značkovací jazyk pro tvorbu www stránek. Jako například Český jazyk má svá slova, tak i HTML obsahuje slova, neboli tagy (značky), které dávají vlastnímu obsahu stránky význam a také dokument formátují. Tagy máme párové a nepárové. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 15 - 2.4.1 PÁROVÝ TAG Párový tag – má začátek a konec: ŘEŠENÝ PŘÍKLAD 1

Já jsem krátký odstavec.

V příkladu 1 představuje:

- začátek – tag uzavřený do lomených závorek;

- konec – tag uzavřený do hranatých závorek, před tagem je lomítko. U párových tagů se text (obsah) stránky se vkládá mezi začátek a konec. Konkrétně tag p značí odstavec (z anglického paragraph). 2.4.2 NEPÁROVÝ TAG Nepárové tagy nemají ukončovací značku. Tyto tagy neobalují text, ale mají svůj vlastní význam (Řešený příklad 2). ŘEŠENÝ PŘÍKLAD 2
– horizontální čára na naší stránce Text můžeme vložit i do více tagů. Tagy se nesmí kžížit! (Řešený příklad 3) ŘEŠENÝ PŘÍKLAD 3

Zvýrazněný odstavec

– správný zápis

Zvýrazněný odstavec

– špatný zápis 2.4.3 STRUKTURA HTML DOKUMENTU Každý html dokument má svou strukturu. Celý html dokument se skládá ze dvou částí hlavičky a těla. Hlavička má značku , tělo . HTML dokument má značku . Struktura html dokumentu je tedy následující (Řešený příklad 4): ŘEŠENÝ PŘÍKLAD 4 Tady bude titulek stránky První řádek nám říká, jaká verze HTML byla použita. Tento údaj není součástí html dokumentu. V hlavičce se umisťují prvky, které mají být interpretovány prohlížečem dříve než tělo - kaskádové styly (tělo se již musí zobrazovat s těmito styly), skripty (obzvláště funkce, které se v těle již volají) a mnohé další. Jedním takovým prvkem je , který 2 HTML - 16 obsahuje titulek v okně prohlížeče. Tento titulek má mimořádnou důležitost, neboť vlastně reprezentuje název stránky - například v historii, v oblíbených položkách a podobně, což je určitě uživatelsky příjemnější než celá adresa včetně dotazovacího řetězce. V hlavičce se také často vyskytují metainformace (častěji využíván obecnější výraz metadata) - jakési skryté informace pro spolupráci mezi serverem a klientskou stanicí (prohlížečem). Následující příklad dává prohlížeči úkol obnovovat stránku každé dvě sekundy, nastavuje znakovou sadu na windows-1250 a zobrazuje počet sekund v dané minutě (z reálného systémového času) (Řešený příklad 5): ŘEŠENÝ PŘÍKLAD 5 <html> <head> <title>Meta obnova Tzv. metainformace jsou důležitou součástí html dokumentů. Pokud použijeme tyto informace v hlavičce stránky, budou je moci vyhledat META vyhledávače. Vedle informací, které byly v rámci metainformací prezentovány v Příkladu 5, lze tímto způsobem (a je to například z hlediska SEO – Search Engine Optimization i doporučeno) uvádět jako součást html dokumentu celou řadu dalších informací, kterými mohou být například (Řešený příklad 6): ŘEŠENÝ PŘÍKLAD 6 Popis stránek, klíčová slova nebo jméno autora z příkladu 6 jsou zřejmé. Zajímavá metainformace je přesměrování na jinou stránku (4. řádek z Příkladu 6). Pokud vyplníte adresu URL, přesměruje se dokument v tomto případě po 4 sekundách. Pokud se adresa nevyplní, bude se aktuální stránka každé 4 sekundy obnovovat. 5. řádek z Řešeného příkladu Petr Suchánek, Jan Górecki; Portál a jeho správa A - 17 - 6 charakterizuje znakovou sadu dokumentu. Pro správné zobrazení české diakritiky se používají především tato dvě kódování:  windows-1250 nebo utf-8 - preferováno na platformě Windows;  ISO 8859-2 - podporované i Unixem a Linuxem, ve Win známé jako Středoevropské jazyky (ISO). Na posledním řádku v Příkladu 6 jsou prezentovány charakteristiky platnosti html dokumentu. Jedná se o datum a čas kdy informace na stránce přestávají platit. Prohlížeč si stáhne aktuální stránku ze serveru - nikoli uloženou z paměti. 2.5 ODSTAVCE A ZALOMENÍ TEXTU K oddělení odstavců se používá tag

(Řešený příklad 7). ŘEŠENÝ PŘÍKLAD 7

První odstavec

Druhý odstavec

třetí odstavec

nebo

První odstavec

Druhý odstavec

Třetí odstavec

Před zobrazením odstavce, prohlížeč převádí všechny konce řádků na mezery. Pokud je za sebou více mezer, nahradí je jednou mezerou - mezi slovy můžeme psát mezer kolik chceme, ovšem nakonec se zobrazí mezera jediná. Další věcí je, že se text zarovnává podle aktuální velikosti okna, takže dokument lze zobrazit v různých rozlišeních. Někdy však potřebujeme, aby se text zalomil na určitém místě. To dosáhneme pomocí tagu
(Řešený příklad 8): ŘEŠENÝ PŘÍKLAD 8 Nějaký text
a další text
a ještě jeden text
2.6 NADPISY K vytváření nadpisů se používá element (x=1,2,3,4,5,6). Největším a nejvýraznějším písmem je zobrazován text s elementem

. Ostatní elementy h(2-6) se postupně zmenšují (Řešený příklad 9). ŘEŠENÝ PŘÍKLAD 9

nadpis1

podnadpis2

2 HTML - 18 - 2.7 TYPY PÍSMA V html dokumentech můžeme používat písma tučná, různě velká, kurzívu, použít jiný font, zvýraznit text nebo dát textu např. jinou barvu. Prostě můžeme s textem dělat to, co umožňují textové editory. Řešený příklad 10 prezentuje zvýraznění textu pomocí tagu ... a pomocí tagu ... je nastaven font Arial, barva textu černá a velikost písma 6. ŘEŠENÝ PŘÍKLAD 10 < strong>nadpis < font color="black" face="arial" size=6>text 2.8 ODKAZY Odkaz je zvýrazněná část textu, ve které se skrývá adresa dalších stránek (URL). Po kliknutí na tento odkaz prohlížeč otevře okno s touto adresou. Odkaz vložíme do dokumentu následujícím způsobem (Řešený příklad 11): ŘEŠENÝ PŘÍKLAD 11 text odkazu Kromě textu můžeme odkazovat i obrázkem. Toho jednoduše docílíme vložením obrázku mezi tagy ... (Řešený příklad 12). ŘEŠENÝ PŘÍKLAD 12 text odkazu Atribut border="0" u obrázku použijeme tehdy, pokud nechceme, aby byl okolo odkazujícího obrázku rámeček. slouží k určení adresy, kam odkaz po aktivaci vede. Odkaz nemusí být jen text, ale i obrázek. Někdy potřebujeme, aby odkaz odkazoval do nějaké části dokumentu (třeba doprostřed). K tomu slouží tag . Stačí jen tento tag umístit doprostřed dokumentu a k odkazu připsat (Řešený příklad 13): ŘEŠENÝ PŘÍKLAD 13 druhá část ... ... < a name="001"> druhá část Pokud potřebujeme vytvořit odkaz, který by zajišťoval stažení nějakého souboru, do URL uvedeme přesnou adresu, kde se soubor nachází (Řešený příklad 14). ŘEŠENÝ PŘÍKLAD 14 soubor.zip Petr Suchánek, Jan Górecki; Portál a jeho správa A - 19 - 2.9 SEZNAMY V html dokumentech můžeme používat různé typy seznamů. Členíme je do třech základních typů - číslované, nečíslované a definiční. U číslovaných seznamů je před každou položku automaticky umisťováno číslo. Jednotlivé položky se uvozují tagem
  • . Můžeme definovat styl odrážky
      ...
    . (A pro velká písmena, a pro malá písmena, I pro římské číslování, 1 pro arabské číslování) Ukázka číslovaného seznamu je prezentována v Řešeném příkladu 15): ŘEŠENÝ PŘÍKLAD 15
      < li>položka č. 1 < li>položka č. 2 < /ol> Stejně se vytváří nečíslovaný seznam. Akorát místo ol napíšeme ul. Stejně jako u číslovaných seznamů, můžeme měnit styl odrážky
        ...
      . Definiční seznamy jsou odlišné od předchozích dvou. Můžeme s ním vytvořit např. slovníček pojmů, který obsahuje termíny a jejich vysvětlení. Uvozuje se tagem
      a jednotlivé položky pak
      a
      (Řešený příklad 16). ŘEŠENÝ PŘÍKLAD 16
      < dt>název 1 < dd>text < dt>název 2 < dd>text < /dl> 2.10 OBRÁZKY Ke vložení obrázku na stránku se používá tag , ve kterém specifikujeme cestu v atributu src, kde máme obrázek uložen. Dále existuje atribut alt, který slouží k jednoduchému popisu obrázku (např. popis fotky). Text se v internetových prohlížečích zobrazí po najetí kurzoru na obrázek. Tento atribut má ale ještě další výhodu a to pro majitele negrafických internetových prohlížečů (SecureCRT, Lynx). V těchto prohlížečích se zobrazí místo obrázku jen text v atributu alt (Řešený příklad 17). ŘEŠENÝ PŘÍKLAD 17 text Align určuje způsob zarovnání obrázku a okolního textu. Může nabývat pěti hodnot:  Top - zarovnává se s řádkou horní okraj obrázkup;  Middle - obrázek je vzhledem k řádce vertikálně vycentrován;  Bottom - zarovnává se s řádkou spodní okraj obrázku;  Left/right - obrázek je umístěn u levého nebo pravého okraje stránky a obtéká ho text; 2 HTML - 20 Width a height určují velikost obrázku v pixelech. Říkají prohlížeči, jak je obrázek velký, takže nedochází k deformaci a reformátování layoutu při načítání. Než se obrázek na stránky vloží, je vhodné si zjistit v libovolném grafickém editoru jeho přesné rozměry. Tyto atributy můžeme také používat ke zvětšování a zmenšování obrázků. Pokud zadáme větší rozměry obrázku, obrázek se sice zvětší, ale jeho kvalita je vůči jeho původní velikosti horší. 2.11 TABULKY Tabulky je možné je používat jak při prezentaci informací, tak pro přesnou kontrolu nad layoutem stránky. Tabulky se vytvářejí pomocí tagu . Jednotlivé řádky se vkládají pomocí tagu . Řádky pak rozdělujeme do sloupců (buněk) pomocí . Velikost tabulky můžeme určit ručně (natvrdo) a to pomocí atributu width a height. Width je šířka tabulky a height je výška tabulky. Zadává se v pixelech. Pokud se ale obsah do tabulky nevejde, prostě se zvětší. Podobně můžeme zadávat velikost buněk a . Výška řádků se přizpůsobí obsahu buněk tak, aby nic nebylo skryto. Pomocí parametru height je možné přikázat výšku větší, definování menší výšky však budou prohlížeče ignorovat. Minimální šířka sloupců bude odpovídat nejširšímu objektu, potažmo slovu v daném sloupci, nuže zde může tvůrce stránky kalkulovat s obsahem tabulky, co se týče například nedělitelných nadpisů či obrázků. Podstatné je, že do nestlačitelného obsahu buněk se započítává i vycpávka, téměř univerzálním trikem tedy může být vpašování prázdného řádku do tabulky s definovanou vycpávkou (Řešený příklad 63). ŘEŠENÝ PŘÍKLAD 63 #prvniSloupec {width: 100px;} #druhySloupec {width: 500px;} #prvniRadek {visibility: hidden;} #prvniBunka {padding-left: 100px;} #druhaBunka {padding-left: 500px;} Kde popis tabulky bude:
      (Řešený příklad 18). ŘEŠENÝ PŘÍKLAD 18
      měsíc rok
      leden 2001
      Stejně jako u obrázku můžeme využít atribut align, pomocí kterého zarovnáváme texty v buňkách tabulky (Řešený příklad 19). ŘEŠENÝ PŘÍKLAD 19
      měsíc rok
      Zcela shodně se používá atribut valign, který slouží k vertikálnímu zarovnání. Valign může nabývat tří hodnot:  Top (obsah buňky se zarovná s horním okrajem buňky);  Bottom (obsah buňky se zarovná se spodním okrajem buňky);  Middle (obsah buňky se zarovná doprostřed);  Valign i align můžeme použít jak u
      , tak u
      . Pokud ovšem zadáme velikost tabulky, součet velikostí buněk se musí rovnat velikosti tabulky (Řešený příklad 20). Petr Suchánek, Jan Górecki; Portál a jeho správa A - 21 ŘEŠENÝ PŘÍKLAD 20
      rok
      2001
      Mezi atributy tagu patří cellpadding, pomocí kterého určíme vzdálenost obsahu buňky od okrajů buňky. Atribut cellspacing nastavuje mezeru mezi buňkami. Dále si můžeme pomocí atributu border nastavit velikost rámečku okolo tabulky. Každé tabulce můžeme uvést její nadpis pomocí elementu caption (Řešený příklad 21). ŘEŠENÝ PŘÍKLAD 21
      název
      měsíc rok
      Důležitou a často využívanou vlastností u tabulek je tzv. slučování buněk. Atributy, pomocí kterých nastavujeme informaci o tom, kolik "buněk prostoru" zabírá aktuální buňka, jsou rowspan a colspan (Řešený příklad 22). ŘEŠENÝ PŘÍKLAD 22
      Hlavička
      A B C
      D
      E
      Rowspan="2" znamená, že buňka C zasahuje přes dva řádky, colspan="3" říká, že buňka zabírá prostor přes tři sloupce. 2.12 RÁMY Rámy se využívají pro definici struktury webové stránky. V současné době se již příliš nevyužívají (a ani se využívat nedoporučují), nicméně pro výuku předmětu Portál a jeho správa jsou využitelné pro ilustraci některých přístupů k vytváření tzv. layoutu web stránek. Chceme-li využívat rámy, pak Stránka musí obsahovat definici rozložení rámů . V tomto párovém tagu používáme atributy rows a cols, které určují na jaký počet řádků a sloupců se obrazovka rozdělí. Velikost se zadává v pixelech nebo v procentech z celkové výšky (šířky) (Řešený příklad 23). 2 HTML - 22 ŘEŠENÝ PŘÍKLAD 23 obsah rámů obsah rámů obsah 1. rámu obsah 2. a 3. rámu Jestliže máme hotové rozložení rámů pomocí , musíme pomocí elementu určit, které html dokumenty se mají v rámech zobrazovat, a to pomocí atributu src (Řešený příklad 24). ŘEŠENÝ PŘÍKLAD 24 U tagu lze použít spoustu atributů. Atribut noresize, který se postará o to, aby nešla velikost rámu měnit. Atribut scrolling=no/yes/auto - pokud nastavíme na hodnotu no, nepůjde se po obsahu rámu pohybovat. Rámy jsou od sebe odděleny rámečkem a jeho velikost (nebo úplné zrušení) měníme atributem frameborder=0. Vzdálenost obsahu rámu od pravého a levého okraje se provádí atributem marginwidth=x (za x počet pixelů). Atributem marginheight=x zase vzdálenost obsahu od horního a dolního okraje. Velice důležitým atributem je name, pomocí něhož zadáváme jméno rámu. To se hodí v případech, kdy chceme, aby se stránky schované za odkazem v jednom rámu zobrazovaly v jiném rámu. U odkazů můžeme použít atribut target, který určuje jméno rámu, ve kterém se má dokument zobrazit. Pokud toho chceme dosáhnout, musíme mít definovány jména rámů Petr Suchánek, Jan Górecki; Portál a jeho správa A - 23 v tagu Jako příklad si můžeme uvést situaci, kdy máme v souboru prvni.html odkazy a chceme, aby se stránky otevíraly v druhém rámu (Řešený příklad 25). ŘEŠENÝ PŘÍKLAD 25 Odkazy v souboru prvni.html budou vypadat následovně: < a href="neco.html" target="hlavni">odkaz 2.13 FORMULÁŘE Formuláře lze nalézt téměř na každém webu. Slouží například pro vyhledávání, pro vkládání uživatelských komentářů, pro komunikaci mezi tvůrci webu a uživateli, pro přihlášení uživatele atd. Při tvoření formulářů se používá pouze několik tagů. Všechny vstupní pole sjednocuje v jeden formulář párový tag
      . Samotná vstupní pole se tvoří pomocí tagů , Petr Suchánek, Jan Górecki; Portál a jeho správa A - 25 - 2.13.4 TAG SELECT Tag 2.13.5 TAG FIELDSET Pomocí tagu
      vytváříme tzv. skupiny voleb. Jednoduchá ukázka je prezentována v rámci Řešeného příkladu 31. ŘEŠENÝ PŘÍKLAD 31
      Pohlaví: muž
      žena
      Využijeme-li některé z výše charakterizovaných formulářových prvků, můžeme si jejich konkrétní využité prezentovat na konkrétním příkladu prezentujícím možnost realizace ankety (Případová studie 1). PŘÍPADOVÁ STUDIE 1

      Demonstrace formulářů

      Anketa

      Jaký používáte typ procesor má Váš PC?
      AMD
      Intel
      Jiný
      2 HTML - 26 Jaká je frekvence Vašeho procesoru? (v MHz)
      Jaký používáte OS?

      Jaká je rychlost vašeho připojení k Internetu?

      Poznámky pro redakci:

      registrační údaje
      E-mail:
      Heslo:
      Zasílejte mi novinky e-mailem Petr Suchánek, Jan Górecki; Portál a jeho správa A - 27 - 2.14 STRUKTUROVANÝ PŘEHLED VYBRANÝCH TAGŮ Na konci kapitoly HTML bude nyní uveden strukturovaný přehled vybraných HTML tagů, z nichž některé představují doplnění k tagům a jejich variantám uvedeným v řešených příkladech. 2.14.1 ZÁKLADNÍ ZNAČKY Tabulka 2: Základní značky. Tag Popis značka html dokumentu záhlaví html dokumentu meta informace (je uvnitř ) klíčová slova stránky (pro vyhledávající nástroje) popis stránky (pro vyhledávací nástroje) titulek dokumentu (je uvnitř ) tělo html dokumentu obrázek na pozadí barva pozadí stránky (#000000 - #ffffff) barva textu barva odkazu barva aktivovaného odkazu barva navštíveného odkazu 2.14.2 TYPOGRAFICKÉ ZNAČKY Tabulka 3: Typografické značky. Tag Popis základní velikost písma (1 až 7) pro celou stránku hlavička (1 až 6) -

      atd.) tučný text zvýrazněný text kurzíva podtržený text přeškrtnutý text dolní index horní index pevná šířka písma menší písmo než normální velikost větší písmo než normální velikost velikost písma (1 až 7) druh písma (verdana, arial, courier atd.) barva písma v hexadecimální hodnotě 2 HTML - 28 - 2.14.3 FORMÁTOVACÍ ZNAČKY Tabulka 4: Formátovací značky. Tag Popis
      odsadí blok textu
      zalomení řádku
      centruje
      vodorovná dělící čáru
      zarovná dělící čáru
      tloušťka dělící čáry
      délka dělící čáry
      zakáže zalamování na hraně stránky

      nový odstavec

      zarovnává text odstavce

       předformátovaný text
      2.14.4 ODKAZY
      Tabulka 5: Značky pro práci s odkazy.
      Tag
      Popis
       odkaz na url
       odkaz na url do nového okna prohlížeče
      
      odkaz na url do rámu
       odkaz uvnitř rámu na url rámu, z něhož byl odkaz
      aktivován
       odkaz na url do FRAMESET
       uvnitř rámu vylučuje FRAMESET a odkazuje na url
      do vlastního okna prohlížeče
      2.14.5 OBRÁZKY
      Tabulka 6: Značky pro práci s obrázky.
      Tag
      Popis
       zobrazí obrázek
      
      zarovnává obrázek svisle
       zarovnává obrázek vodorovně
      text popisný text
       obrázková mapa a název mapy
       rozměry obrázku v pixelech
       okraj obrázku
      
      horizontální a vertikální mezera okolo obrázku v
      pixelech
       počáteční obrázek s nízkým rozlišením, než bude
      natažen s plným rozlišením
      Petr Suchánek, Jan Górecki; Portál a jeho správa A
      - 29 -
      2.14.6 SEZNAMY
      Tabulka 7: Značky pro práci se seznamy.
      Tag Popis
      
      seznam definic
      definice pojmu
      definici termů
        uspořádaný seznam
          kompaktní uspořádaný seznam
            uspořádaný seznam různých typů
          1. položka seznamu
          2. formát položky seznamu
              neuspořádaný seznam
                kompaktní neuspořádaný seznam
                  styl odrážky 2.14.7 FORMULÁŘE Tabulka 8: Značky pro práci s formuláři. Tag Popis
                  definuje parametry formuláře vstupní pole formuláře skryté pole jméno pole formuláře zaškrtávací políčko velikost pole v počtu znaků
                • . .
                  V návaznosti na uvedené příklady se doporučuje šířku sloupců zadávat pomocí parametru , u kterého lze pomocí atributu span zadat, na kolik sloupců se má vztahovat, případně může reprezentanty těchto sloupců obsahovat jako značku (Řešený příklad 64). ŘEŠENÝ PŘÍKLAD 64 Vnořené značky použijeme zejména v případě, že chceme pro sousední sloupce definovat stejnou šířku, ale jiné zarovnání a naopak. 3 CSS (Cascading Style Sheets) - 42 - 3.11 TŘÍDY A IDENTIFIKÁTORY 3.11.1 TŘÍDY V CSS Třídy a identifikátory v CSS slouží k tomu, abychom mohli různé elementy formátovat různě. Například odkazy na stránce. Každý z nás asi chce mít na stránce různé druhy odkazů, ne jen jeden. Jinak se obvykle dělají odkazy v menu, jinak odkazy v textu. Třídy vytvoříme snadno tak, že k elementu v HTML přidáme atribut class. Jeho hodnotou bude nějaký řetězec písmen, stejný pak budeme používat v CSS stylu jako selektor (Řešený příklad 65). ŘEŠENÝ PŘÍKLAD 65

                  Nějaký text

                  Tímto říkáme, že tento odstavec bude formátován podle pravidel třídy poznamka, na formátování ostatních odstavců se tato pravidla neprojeví. Teď musíme ještě ta pravidla určit v CSS stylu (Řešený příklad 66). ŘEŠENÝ PŘÍKLAD 66 .poznamka {font-size: x-small; color: black} Teď tedy budeme mít všechny odstavce stejné, jen odstavec s třídou poznamka bude vypadat jinak (malým černým písmem). Resp. jinak budou vypadat všechny odstavce s třídou poznamka, protože stejnou třídu můžeme použít u libovolného množství elementů. Dokonce i u různých elementů (Řešený příklad 67). ŘEŠENÝ PŘÍKLAD 67

                  Nějaký odstavec

                • Položka seznamu
                • .poznamka {color: black} - styl se aplikuje na všechny elementy s třídou poznamka li.poznamka {color: blue} - styl se aplikuje jen na elementy li s třídou poznamka 3.11.2 DĚDIČNOST Třída každého elementu bude dědit všechny vlastnosti daného elementu a navíc bude mít své vlastní, tedy např. (Řešený příklad 68): ŘEŠENÝ PŘÍKLAD 68 p {text-align: center; color: blue} .poznamka {font-size:x-small; color: black} Tímto zápisem je řečeno, že všechny odstavce budou zarovnány na střed a jejich text bude mít modrou barvu (první deklarace). Toto obecně platí pro všechny odstavce stránky. Odstavec s třídou poznamka bude mít navíc ještě menší písmo (druhá deklarace). Barva je určená v obou deklaracích, v takovém případě ma vyšší prioritu deklarace zadaná později, Petr Suchánek, Jan Górecki; Portál a jeho správa A - 43 tedy odstavec s třídou poznamka bude mít černý text. Všechny odstavce tedy budou modré, zarovnané na střed, kromě odstavce s třídou poznamka, ten bude černý, s malým písmem, zarovnaný bude také na střed. 3.11.3 KONTEXTOVÁ DEKLARACE V CSS lze využít i tzv. kontextovou deklaraci. Možnost kontextové deklarace platí i pro třídu (Řešený příklad 69) ŘEŠENÝ PŘÍKLAD 69

                  Odkaz Nějaký text

                  .poznamka a {color: red} Zápis v Řešeném příkladu XY říká, že odkazy v odstavci třídy poznamka budou červené. 3.12 IDENTIFIKÁTOR ID V CSS Identifikátor se od třídy liší tím, že se jedná vždy o jednoznačný identifikátor. To znamená, že ho na každé stránce můžeme použít jen jednou. Tím je myšleno na každé stránce, tedy v každém souboru.html jen jednou. V rámci celého webu je možné stejný identifikátor použít libovolněkrát. Oproti tomu třídu je možné použít libovolněkrát na každé stránce webu. Identifikátory se tedy používají právě tam, kde je jisté, že se daný element objeví ve stránce jen jednou. Ideálně se tedy hodí pro věci jako je box celé stránky, menu, záhlaví nebo zápatí. Identifikátory se označují dvojkřížkem (#). Jinak je jejich zápis stejný jako zápis třídy (Řešený příklad 70). ŘEŠENÝ PŘÍKLAD 70 #menu {width:14em; background-color:black} #menu a {color: white} Poznámka: v Řešeném příkladu XY je využit zatím v tomto textu nevysvětlený tag
                  . V tomto případě to nevadilo, protože věcná náplň daného příkladu je orientovaná na jinou problematiku. Charakteristika tagu
                  je ovšem vysvětlena hned v následující podkapitole. 3.13 CSS POZICOVÁNÍ Jakýkoliv objekt (obrázek, tabulka, text, cokoliv) lze umístit kamkoliv na stránku, s objekty se může posouvat a mohou se překrývat. Existují dva naprosto odlišné druhy pozicování:  Absolutní pozice - umístí objekt do stránky na udané souřadnice bez ohledu na okolní text.  Relativní pozice - určuje o kolik se má objekt posunout oproti své normální poloze. Vlastnosti, které určují směr a míru posunutí, jsou top a left. Top určuje posunutí objektu směrem dolů a left doprava. Pro posouvání nahoru a doleva se nepoužívá bottom a right, 3 CSS (Cascading Style Sheets) - 44 ale top a left se zápornými hodnotami. Velikost posunu je možné zadat ve všech jednotkách, které CSS podporuje (nejčastěji px, pt nebo cm). Pro pozicování se využívají dva tzv. neutrální tagy
                  a . Tyto tagy nedávají obsahu v html dokumentu význam a sami o sobě nijak html dokument neformátují. Jedná se o párové tagy. Pomocí CSS vlastností se tyto tagy dají všemožně formátovat (můžeme jim přidělovat rozměry, umísťovat je na stránce, kam se nám zlíbí – pozicovat je, barvit je atd.). Především pomocí divů se pak tvoří layouty stránek (rozmístění jednotlivých prvků). Jeden div určuje hlavičku, další třeba sloupec s menu, jiný zas patičku atp. Základním rozdílem mezi tahy
                  a je, že div je blokový a span řádkový. Blokový prvek před sebou i za sebou zalamuje řádek a roztáhne se přes celou dostupnou šířku. Pro porovnání uveďme, že mezi blokové prvky patří také odstavec, nadpisy a další. Vedle tohoto řádkový prvek nezalamuje řádek, tudíž jich v jednom řádku může být více. Při striktním dodržování Doctype, což by mělo být primárním požadavkem, by pak měl být (nejen) tag umístěn v nějakém blokovém tagu. Obecně by pak blokový tag neměl být v tagu řádkovém. Navíc
                  by neměl být ani v jiném blokovém tagu než zase v tagu
                  (Řešený příklad 71). ŘEŠENÝ PŘÍKLAD 71

                  Řádkové a blokové tagy

                  – špatný zápis

                  Řádkové a blokové tagy

                  – správný zápis

                  Řádkové a blokové tagy

                  – špatný zápis

                  Řádkové a blokové tagy

                  – správný zápis Vrátíme-li se konkrétně zpět k pozicování, pak můžeme jako výchozí uvést Řešený příklad 72, na kterém bude daná problematika názorněji vysvětlena: ŘEŠENÝ PŘÍKLAD 72 Normální text, relativně umístěný text a absolutně umístěný text. V Řešeném příkladu 72 se relativně umístěný text posouvá o 20 pixelů. Absolutní poloha umisťuje levý horní roh objektu (span) na souřadnice 150, 100 (vlastnost left: 150px zde v tuto chvíli posouvá po ose x o 150 pixelů). Obecnou syntaxi zápisu pozicování lze vyjádřit ve tvaru: Pozicovaný element Budeme-li konkrétnější, pak position:relative je v každém smyslu pouze posunutí. Okolní text se formátuje bez ohledu na jakoukoliv pozici objektu, to znamená, že tam, kde by posouvaný objekt měl být, zůstává prázdné místo. Jinými slovy při relativní poloze element není vyjmut z toku dokumentu (Řešený příklad 73). Petr Suchánek, Jan Górecki; Portál a jeho správa A - 45 ŘEŠENÝ PŘÍKLAD 73 relativní Objekt s vlastností position: absolute je možné umístit kamkoliv. Okolní text se chová, jako by takový objekt vůbec neexistoval, jinými slovy je vyjmut z toku dokumentu. Při práci s vlastnostmi top a left lze docílit i některých dalších možností, kterými mohou být:  ve stylu se neuvede left ani top => objekt se umístí na svojí normální pozici a následující text bude plynout přes něj (nebo se uvede left: auto; top: auto);  při style="position: absolute; left: 0px; top: 0px" se levý horní roh objektu umístí do počátku souřadného systému, což je většinou horní levý roh stránky (pokud nevyužíváme tzv. vnořené pozice);  uvedení nenulových hodnot top a left samozřejmě posunuje objekt po stránce (z levé horní polohy) - tento se přitom překrývá s normálním obsahem;  pokud se uvede pouze jedna ze souřadnic (vlastností left nebo top), zůstává ta neuvedená taková, jakou by měl objekt v toku dokumentu. Například style="position: absolute; left: 0px" umístí objekt na levý okraj stránky, ale nezmění jeho pozici vertikální, protože není uvedeno top. Stejně jako neuvedení funguje nastavení hodnoty na "auto". V případě, že pozicovaný prvek (absolutní nebo relativní) obsahuje druhý absolutně pozicovaný prvek, bude ten druhý brát počátek souřadnic podle horního levého rohu prvního prvku. Jinými slovy každý absolutně či relativně pozicovaný prvek definuje souřadnicový systém pro všechny absolutně pozicované prvky, které obsahuje. Pro lepší pochopení dané problematiky si můžeme uvést dvě konkrétní případové studie (Případová studie 3 a Případová studie 4), ve kterých bude prezentováno použití CSS a HTML. PŘÍPADOVÁ STUDIE 3 CSS: .barva-1 {color: green; font-size: 120%;} .barva-2 {color: magenta; font-size: 120%;} Aplikace v HTML:

                  Mezi moje oblíbené barvy patří zelená a purpurová.

                  V prohlížeči bude výsledek zobrazen jako: Mezi moje oblíbené barvy patří zelená a purpurová. PŘÍPADOVÁ STUDIE 4 CSS: .oramovany {border: 1px solid violet;} .box {width: 200px; background-color: #0066CC; color: white; border: 3px solid yellow;} HTML:
                  Ukázka orámovaného divu

                  Další ukázka divu formátovaného pomocí CSS.

                  3 CSS (Cascading Style Sheets) - 46

                  Druhý odstavec v divu…

                  V prohlížeči bude výsledek zobrazen jako: Jak je vidět na prvním divu, pokud mu šířku nenastavíme, roztáhne se přes celou dostupnou šířku. Rámeček mu byl přidán z důvodu názornějšího zobrazení. Pokud bychom měli jen jeden odstavec a chtěli ho vybarvit a orámovat jako div ve druhém případě, stačí nastavit stejné css vlastnosti přímo tomu odstavci a nemusíme ho balit do divu. Poměrně častým nešvarem je tzv. podivný kód. Tak můžeme nazvat HTML kód, který obsahuje divy i na místech, kde nemají co hledat nebo jich (divů) je v kódu víc, než je třeba, případně obojí. Jako příklad můžeme uvést (Řešený příklad 74): ŘEŠENÝ PŘÍKLAD 74
                  Název mého webu

                  Název mého webu

                  Jelikož pomocí CSS můžeme div i h1 naformátovat zcela stejně, jejich vzhled v prohlížeči bude shodný. Avšak nejen, že stránky s podivným kódem budou pro vyhledávače hůře viditelné, ale takový kód je méně přehledný a tím jsou složitější jeho úpravy. 3.14 SÉMANTIKA V souvislosti s propojováním HTML kódu a CSS je nutné uvést, že základním požadavkem je psát sémanticky správné kódy. Při psaní kódu by každá HTML značka měla být používána na to, k čemu byla určena. Ve vazbě na CSS platí pravidlo, nesémantické tagy (nenesou význam)
                  a by pak měly být používány pouze k definici vzhledu stránky. Pro názornou prezentaci si můžeme ukázat dva zcela jednoduché příklady, kdy první představuje nesprávně napsaný kód a druhý správně (Řešený příklad 75). ŘEŠENÝ PŘÍKLAD 75 Špatně:
                  Nadpis (název) webu

                  Střevlík
                  Tesařík
                  Páteříček
                  Krasec
                  Potápník

                  Petr Suchánek, Jan Górecki; Portál a jeho správa A - 47 ŘEŠENÝ PŘÍKLAD 76 Správně:

                  Nadpis (název) webu

                  • Střevlík
                  • Tesařík
                  • Páteříček
                  • Krasec
                  • Potápník
                  Ačkoliv se v mnohých případech stává, že špatně i správně zapsaný kód zobrazuje v prohlížeči stejný výsledek, je tedy otázkou, proč je důležité klást na správnou sémantiku velký důraz. Důvodů je hned několik:  Stránky se sémantickým kódem jsou pro vyhledávače (Google, Seznam, Bing, Yahoo, …) více viditelné. Ve výsledcích vyhledávání se tak budou naše stránky umísťovat na přednějších pozicích a tím pádem je navštíví více lidí. Na web s nesémantickým kódem, který je ve výsledcích hledání někde na páté stránce či dál, moc lidí nezavítá.  Sémantický a správně strukturovaný kód se lépe spravuje.  Pokud se vypnou kaskádové styly, web je i tak poměrně přehledný.  V neposlední řadě, správně strukturovaný a sémantický web je důležitý pro zrakově postižené uživatele, kterým obsah stránek předčítá hlasová čtečka, jež se řídí právě HTML kódem. 4 PHP - 48 - 4 PHP PHP (rekurzivní zkratka PHP: Hypertext Preprocessor, česky „PHP: Hypertextový preprocesor“, původně Personal Home Page) je skriptovací programovací jazyk. Je určený především pro programování dynamických webových stránek a webových aplikací například ve formátu HTML, XHTML nebo WML (Wireless Markup Language). PHP lze použít i k tvorbě konzolových a desktopových aplikací. PHP skripty lze tvořit v samostatných souborech nebo je vkládat přímo do html kódu. V obou případech musí mít soubory příponu *.php. Při požadavku na php stránku server prochází soubor a php skripty programově vyhodnocuje. Zpracování proběhne na straně serveru a klientovi se zpět odesílá „čisté“ HTML. (Obrázek 4) Obrázek 4: Zpracování php skriptu na straně serveru. 4.1 INSTALACE LOKÁLNÍHO SERVERU Pro vývoj webových portálů je možné využít celou řadu prostředí. V tomto studijním materiálu zaměřeného zejména na prezentaci praktických příkladů budeme využívat moduly softwarového balíku EasyPHP. EasyPHP obsahuje Apache (lokální server), PHP, MySQL (databáze) a PHPMyAdmin. Poznámka: vedle EasyPHP lze samozřejmě využít některé jiné nástroje, kdy jako příklad můžeme uvést PHPTriad, PHPHome, WAMP nebo jiné. Prvotním předpokladem instalace je stažení instalačního souboru, který je možné stáhnout z celé řady webových stránek. EasyPHP se neustále vyvíjí a existuje celá řada vývojových verzí, které je nutné vybrat tak, aby danou verzi podporoval operační systém. Princip činnosti je ve všech verzích stejný. Pro účely vysvětlení základních principů bude využita verze EasyPHP1.8.0.0, který lze snadno stáhnout například z http://www.slunecnice.cz/sw/easyphp/. Po stažení instalačního souboru spustíme instalaci (od verze operačního systému Windows Vista je nutné spustit instalaci jako správce). Uvedená verze obsahuje češtinu, přičemž jazyk lze nastavit v prvním okně po spuštění instalace. Následně stačí kladně potvrdit všechny kroky instalace a instalaci dokončit. Po správné instalaci a spuštění programu EasyPHP se v hlavním panelu Windows zobrazí ikona s blikajícím červeným čtverečkem (Obrázek 5): Petr Suchánek, Jan Górecki; Portál a jeho správa A - 49 Obrázek 5: Ikona informace o spuštěném programu EasyPHP. Na ploše se dále zobrazí buď automaticky, nebo po spuštění příkazu Konfigurace/EasyPHP (lze vybrat po kliknutí pravým tlačítkem myši na ikonu z Obrázku 5) okno informující o běhu lokálního serveru Apache a databáze MySQL. Pokud jsou v daném okně (Obrázek 6) zobrazeny semafory se svítící zelenou a popiskem běží, je vše v pořádku. Pokud ne, lze provést konfiguraci nebo byla zvolena nevhodná verze software. Obrázek 6: Okno s informací o správně běžícím lokálním serveru a databázi. V některých případech se po instalaci zobrazí informace, že “Server Apache nemůže být spuštěn: port už používá jiný Web server“. Toto lze velmi snadno vyřešit tím, že v okně Konfigurace/EasyPHP vypneme kontrolu portů pro obsluhy před startem. 4.2 FUNKČNOST LOKÁLNÍHO SERVERU Po instalaci a spuštění lokálního serveru lze jeho funkčnost ověřit zadáním adresy http://localhost do prohlížeče. Měla by se objevit stránka z rootu lokálního serveru (slovo localhost znamená vždy něco jako "server na tomto počítači"). Pokud se neobjeví, můžeme vyzkoušet odkaz http://localhost/home. Rovnež tak lze vyzkoušet odkaz http://127.0.0.1. Cesta ke složce, která představuje kořen dokumentů, je C:\Program files (x86)\EasyPHP1_8\www. Po umístění jakéhokoliv souboru *.html nebo *.php (a samozřejmě dalších) do této složky a zadání do prohlížeče adresy http://localhost/*.html se tento soubor v prohlížeči zobrazí. 4.3 ZÁKLADY PHP PHP není nijak těžké pochopit a už se základy si lze vystačit. Umí ukládat, měnit a mazat data. Vše se odehrává na webovém serveru (kde jsou uloženy zdrojové kódy webových stránek). PHP skript se nejprve provede na serveru a potom odešle prohlížeči pouze výsledek (znamená to, že nejprve spočítá kolik je 300/30 a pak prohlížeči odešle jen číslo 10). Proto ve zdrojovém kódu najdete jen "10" (to je rozdíl oproti JavaScriptu, který počítá přímo v prohlížeči). Zdrojový kód PHP narozdíl od JavaScriptu a HTML nezobrazíte. Pomocí PHP je možné na portálu vytvořit diskuzní fórum, knihu návštěv, počítadlo, anketu nebo graf. Navíc máte možnost propojit vaše stránky s databázemi, např. MySQL. Je rozhodně alespoň jedna funkce PHP, která se hodí snad do každého webu. Na webových stránkách se obvykle opakují některé části, hlavička s odkazy, menu, patička. S PHP si můžete snadno vytvořit šablonu pro web, do které se budou vkládat soubory s menu, patičkou atd. Můžete tedy mít menu jen jednou zapsané a do dalších stránek ho pouze kopírovat. Až budete chtít menu změnit, bude to nesmírně jednoduché. Více v kapitole PHP menu. 4 PHP - 50 Webová stránka s prvky PHP má nejčastěji koncovku .php. Avšak je možné použít i .php3, php4, php5 a phtml. Stávající verze PHP je 5. Nejlépe je používat koncovky .php. Použijete-li .php5, až vznikne nová verze, web bude působit zastarale. Každý PHP skript musí být ohraničen značkami k tomu určenými. První možností je všechny příkazy skriptu zapsat mezi znaky ‘’. Volba právě těchto znaků není náhodná. Elementy, které můžeme používat v jazyce HTML, jsou definovány pomocí jazyka SGML. Jazyk SGML zároveň definuje, že příkazy pro různé preprocesory, které dokument zpracovávají, mají být uzavřeny právě v této dvojici znaků. Následující skript vypíše text v uvozovkách (Řešený příklad 77). ŘEŠENÝ PŘÍKLAD 77 Druhá možnost je již trošku upovídanější. Pokud chceme PHP použít pro generování XML-dokumentů, musíme použít zahajovací značku ‘ Vůbec nejdůležitější částí skriptu PHP je středník (;). Každou funkci, řádek, deklaraci musíte oddělit středníkem. Ne jako v JavaScriptu, který na něm tolik nelpí. Dá se to přirovnat k CSS (když vlastnosti neoddělíte středníkem, prohlížeč jim neporozumí). Vždy, když je skript nefunkční, zkuste zkontrolovat, kde jste zapomněli středník. Užitečné věci ve skriptu tvoří komentáře. Tj. text, který je vidět jen ve zdrojovém kódu stránky, je určen autorovi, aby se v něm vyznal (Řešený příklad 79): ŘEŠENÝ PŘÍKLAD 79 Chcete-li na stránku vložit již hotový skript, užijete k tomu příkaz include (Řešený příklad 80): ŘEŠENÝ PŘÍKLAD 80 Petr Suchánek, Jan Górecki; Portál a jeho správa A - 51 Nyní jsme na stránku vložili obsah souboru funkce.php. Obsah tohoto souboru musí být ohraničen tagy značkami . Může vypadat takto (Řešený příklad 81): ŘEŠENÝ PŘÍKLAD 81 Stejným způsobem je možné do stránek vkládat HTML, např. menu a mít tak celý web v šabloně, kterou lze snadno upravit. Nyní jste se seznámili se základy PHP a nic vám nebrání začít opravdu programovat. Nejčastěji užívaným příkazem, je příkaz pro vypsaní textu echo(), nebo, pro úplnost, její méně užívaná obdoba print() (Řešený příklad 82): ŘEŠENÝ PŘÍKLAD 82 "); echo ("vypíše text
                  "); echo "i bez závorek se to vypíše
                  "; print ("to samé
                  "); echo ("též můžete používat HTML značky
                  "); echo 'můžete používat jednoduché uvozovky'; ?> Víceřádkový text je nutné rozdělit a spojit tečkou. Když vypisujeme text, můžeme použít libovolné značky jazyka (X)HTML. Výsledek předchozího skriptu v prohlížeči nabude tvaru: toto je text přes dvě řádky vypíše text i bez závorek se to vypíše to samé též můžete používat tagy můžete používat jednoduché uvozovky Je dobré se hned od začátku rozhodnout, jaké budete používat uvozovky - " nebo '. Lze je zaměnit a týká se to celého PHP. Zrádné znaky jsou znaky, které ohrožují chod skriptu především " ' / \. Před tyto znaky je nutné vložit zpětné lomítko \ a je po problémech. Pokud chcete zobrazit špičaté závorky < a >, musíte zapsat < a > (obdobně jako v HTML). Pokud chcete vypsat <, musíte do zdroje zapsat &lt;. Takže, když chci zapsat zapíši to takto (Řešený příklad 83) a (Řešený příklad 84): ŘEŠENÝ PŘÍKLAD 83 echo ("<body bgcolor=\"red\">"); 4 PHP - 52 Další příklady: ŘEŠENÝ PŘÍKLAD 84 echo "Toto \" je uvozovka"; echo "Toto \' je také uvozovka"; Uvozovky lze požívat vnořeně. Proto je vhodnější používat primárně jednoduché uvozovky, kterými si usnadníte vypisování HTML. Vysvětlíme příkladem (Řešený příklad 85): ŘEŠENÝ PŘÍKLAD 85 echo 'Tvorba- webu.cz>/a>' echo "Tvorba- webu.cz>/a>" 4.4 PROMĚNNÉ Bez proměnných se neobejde žádný skript. Ani PHP není výjimkou. Proměnné deklarujeme pomocí znaku dolaru $ (zapíšete ho buď pomocí [PRAVÝ ALT]+[ů] nebo [SHIFT]+[4/Č]) (Řešený příklad 86): ŘEŠENÝ PŘÍKLAD 86 $dolar = "1$"; $den="středa"; Název proměnné se uvádí hned za značku $ (bez mezery). Zde jsme tedy zavedli proměnné: dolar, den a datum. Jejich hodnoty jsou uvedené za rovnítkem. Před rovnítkem a za ním nemusí, ale může být mezera (i více). Pokud proměnnou tvoří číslo, se kterým se bude později počítat (sčítat, dělit atd.), musí být zapsáno bez uvozovek, jinak by jej server pokládal za text. Název proměnné nesmí začínat číslem (jinak může čísla obsahovat), toto je chybné $1promenna = "hodnota". Při zavádění a vyvolávání proměnných také musíte respektovat velikost písmen. Toto nefunguje: $prom = "abc"; echo $Prom; Proměnnou vypisujeme pomocí příkazu echo()(Řešený příklad 87): ŘEŠENÝ PŘÍKLAD 87 $dolar="1$"; echo($dolar); echo("$dolar"); echo("mám jen" . $dolar . "
                  "); echo("nemám ani $dolar"); Petr Suchánek, Jan Górecki; Portál a jeho správa A - 53 Možností je spousta, ale nejlepší je první a třetí - vždy oddělit proměnnou od normálního textu, tím se vyvarujete případných komplikací. Obyčejný text se píše do uvozovek a od proměnné odděluje tečkou. Pomocí operátorů můžeme proměnné měnit, násobit, porovnávat atd. (Tabulka 11). Tabulka 11: Operátory v PHP aritmetické operátory $a+$b přičte k A B $a-$b odečte B od A $a/$b vydělí A proměnnou B $a*$b vynasobí A proměnnou B přirovnávací operátory (zkracující zápisy) $a++ $a = $a + 1 $a-- $a = $a - 1 $a += $b $a = $a + $b $a -= $b $a = $a - $b $a *= $b $a = $a * $b $a /= $b $a = $a / $b porovnávací operátory $a == $b $a má stejnou hodnotu jako $b $a != $b $a má jinou hodnotu než $b $a > $b $a je větší než $b $a < $b $a je menší $b logické operátory $a || $b vrátí 1 pokud alespoň jedna proměnná je pravdivá $a && $b vrátí 1 pokud jsou obě proměnné vyhodnoceny jako pravda !$a negace (opak) $a Při logickém porovnávání má pravda true hodnotu 1, nepravda false má hodnotu 0. Proměnné se v PHP vyskytují v několika typech (Tabulka 12): Tabulka 12: Typy proměnných Typ Význam String Text, řetězec (sada znaků), příklad: $retezec = "obyčejný text"; Integer Celé číslo, se kterými je možné pracovat, počítat, příklad: $cislo = 2; Float, real nebo double Desetinné číslo Boolean Logická proměnná, hodnota PRAVDA, NEPRAVDA (1, 0), zapisuje se TRUE nebo FALSE Odlišné typy proměnných se odlišně zavádějí (Řešený příklad 88): ŘEŠENÝ PŘÍKLAD 88 $retezec = "obyčejný text"; $celecislo = 2; $desetinnecislo = 0.2; $logickapromenna = TRUE; 4 PHP - 54 - 4.5 VĚTVENÍ Větvení je skupina příkazů, které rozhodují (porovnávají proměnné) a určují, jak se bude skript dál vyvíjet. Jsou to příkazy typu if, else, elseif a switch. 4.5.1 IF Příkaz if zjišťuje, zda je daná podmínka pravdivá (Řešený příklad 89): ŘEŠENÝ PŘÍKLAD 89 $a=1; $b=2; if($a == $b){ echo ("Jsou si rovny."); echo ("A i b mají stejnou hodnotu"); } Pokud by proměnná $a byla rovna $b, skript by vypsal: Jsou si rovny. $a i $b mají stejnou hodnotu. To se však nestane, jelikož daná podmínka: $a==$b je rovna 0 (není pravdivá). Více viz operátory v přechozí části. 4.5.2 IF ELSE A ELSEIF Podmínka if - else opět rozhoduje, zda pro proměnnou platí zadané podmínky. if (podmínka) proces1; else proces2; Platí-li podmínka provede se proces1, jinak se provede proces2. Příkazů může být i více. if (podmínka) proces1; elseif(podmínka2) proces2; elseif(podmínka3) proces3; else poslední proces; Příklad (Řešený příklad 90): ŘEŠENÝ PŘÍKLAD 90 $a = 5; if ($a==4) echo("4"); elseif ($a<4) echo("menší než 4"); else{ Petr Suchánek, Jan Górecki; Portál a jeho správa A - 55 if($a>4 && $a<7){ echo("číslo je větší než 4 a menší než 6"); } else echo($a); } Rozhodujeme zda $a je rovna 4. Pokud není, nejprve rozhodne, zda je menší než 4, jinak rozhoduje, jestli je větší než 4 a zároveň menší než 7. Pokud ani tato podmínka neplatí, skript vypíše hodnotu proměnné. Nyní se podíváme, jak lze pomocí PHP vytvářet celé stránky (Řešený příklad 91): ŘEŠENÝ PŘÍKLAD 91 generování HTML Funkce PHP Proměnné Cykly větvení"); ?> A k čemu je to dobré? Můžete v jedné stránce zobrazovat desítky stránek, které se budou lišit v URL jen předávanou proměnnou. Skript se například jmenuje skript.php, když zavoláme URL skript.php?action=a1, zobrazí se obsah u první podmínky, když zavoláme skript.php?action=a2, zobrazí se obsah u druhé podmínky atd. 4.6 CYKLY Cykly se používají, chceme-li opakovat určitou činnost několikráte za sebou (opakovaně provádět stejnou proceduru, postupně ověřovat data nebo generovat informace, apod.) 4 PHP - 56 - 4.6.1 DO WHILE Chceme zapsat čísla od od 1 do 100. Je zbytečné zapsat 1,2,3... Poslouží nám jednoduchý skript (Řešený příklad 92): ŘEŠENÝ PŘÍKLAD 92 $c = 1; do { echo($c . " "); $c++; } while($c<101); $c je proměnná. Cyklus do {proces} while(podmínka) vždy vypíše hodnotu proměnné $c. Zároveň k ní vždy přičte 1 pomocí $c++. Nakonec jsme příkazem while(podmínka) cyklus omezili, cyklus se bude provádět, pouze když je proměnná menší než 101. V momentě, kdy není menší, se skript přeruší. Stejným způsobem můžete vytvářet i jiné skripty, například pracovat s polem nebo databází. Projíždět postupně jednotlivé položky a vypisovat jejich obsah. 4.6.2 WHILE Příkaz while(podmínka) je možné použít samostatně (Řešený příklad 93). ŘEŠENÝ PŘÍKLAD 93 $c = 1; while($c<101){ echo($c . " "); $c++; } Výsledek je stejný, pouze pokud $c přiřadíte hodnotu 101, příkaz do while vypíše 101, protože podmínka je definována až po procesu (skript nezná podmínku a tak napíše 101, teprve poté kontroluje podmínky). Příkaz while 101 nezapíše, protože podmínka předchází proces. Příkaz do while jednou provede proces, když už podmínka neplatí. Na tento rozdíl je třeba si vždy dát dobrý pozor a ověřit skript, když se dostane k podmínce. 4.6.3 FOR Posledním příkazem je příkaz for. Syntaxe: for(inicializace proměnné; podmínka; operace) {skript} (Řešený příklad 94). ŘEŠENÝ PŘÍKLAD 94 for($c=1; $c<101; $c++){ echo($c." "); } Petr Suchánek, Jan Górecki; Portál a jeho správa A - 57 Příkaz for se užívá především, když víme, kolikrát chceme proces uskutečnit. Počet je konečný. U do while a while ověřujeme proměnnou, která se v procesu mění. U for zavádíme přímo proměnnou určenou k tomu, aby se určil počet procesů. 4.6.4 BREAK Příkaz break slouží k zlomení, přerušení cyklu ještě v době, kdy platí podmínky (Řešený příklad 95): ŘEŠENÝ PŘÍKLAD 95 $a = 0; while ($a<10) { if($a == 5) break; $a++; echo($a . "
                  "); } Cyklus umožňuje zapsat 10 čísel. Bude-li se však $a rovnat 5, cyklus se ukončí. 4.6.5 CONTINUE Příkaz continue slouží k tomu, aby se cyklus vrátil zpět na začátek, pokud dojde k porušení některé podmínky (Řešený příklad 96): ŘEŠENÝ PŘÍKLAD 96 $a = 0; while ($a<10) { if($a == 5) break; if($a == -1) continue; $a++; echo($a . "
                  "); } Pokud se nyní $a bude rovnat 5 dojde k přerušení cyklu, pokud se $a bude rovnat -1 cyklus se zopakuje. Obecně lze říct, že cykly a větvení jsou základními strukturami, které v PHP budete používat určitě často. Tyto struktury existují i v jiných programovacích jazycích. 4.7 FUNKCE Funkce je jakousi zkratkou pro větší počet procesů, pokud je nechceme vypisovat celé. Kromě předem zavedených a vyhrazených funkcí PHP, si můžete deklarovat své vlastní (Řešený příklad 97): ŘEŠENÝ PŘÍKLAD 97 function napis(){ echo("ahoj"); } 4 PHP - 58 function deklaruje funkci, napis je název funkce, (názvy pište bez diakritiky). U názvu funkce je třeba si dát pozor, aby se její název nekryl s názvem již zavedené funkce PHP (nemůžete použít např. echo, return...). V závorkách jsou uvedené argumenty funkce. Funkce může být i bez argumentu. Složené závorky{ } vymezují procesy funkce (složené závorky zapíšete pomocí SHIFT + [ú] a SHIFT + [)] nebo pomocí PRAVÝ ALT + [F] a PRAVÝ ALT + [G]). Kdykoli zavoláme tuto funkci skript vypíše ahoj. Taková funkce se nám může hodit, pokud třeba chceme opakovaně vypisovat nějaký delší text, nebo část zdrojového kódu. 4.7.1 VYVOLÁNÍ FUNKCE Nyní jsme deklarovali funkci, ale teď ji chceme vyvolat (Řešený příklad 98): ŘEŠENÝ PŘÍKLAD 98 napis(); Zapíšeme pouze název funkce a závorky. Skript vypíše 'ahoj'. 4.7.2 FUNKCE BEZ ARGUMENTU Je již zmíněná funkce napis(), která nemá uvnitř závorek žádný argument(proměnnou). 4.7.3 FUNKCE S ARGUMENTEM Kdybychom chtěli někdy napsat 'ahoj', jindy 'dobrý den', nebo něco úplně jiného, použijeme funkci s argumentem (Řešený příklad 99). ŘEŠENÝ PŘÍKLAD 99 function napis($jmeno){ echo($jmeno); } napis("dobrý večer"); //napíše dobrý večer napis("ahoj"); //napíše ahoj napis("dobré ráno"); //napíše dobré ráno Deklarace je úplně stejná až na argument $jmeno. Ten zavádí proměnnou $jmeno. Když jsme vyvolali funkci a jako její argument jsme uvedli "dobrý večer" a "ahoj", byly tyto hodnoty přiřazeny k proměnné $jmeno, následně je funkce zapíše. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 59 - 4.7.4 FUNKCE VRACEJÍCÍ HODNOTU, PŘÍKAZ RETURN Můžete také zavést funkci, která vrací hodnotu (Řešený příklad 100): ŘEŠENÝ PŘÍKLAD 100 function vrat($cislo){ return $cislo*2; } echo(vrat(20)); echo(vrat(100)/vrat(10)); Funkce vrat(); příkazem return vrácí $cislo*2 (tedy vrací dvojnásobek zadané hodnoty). S danou funkcí lze potom nakládat jako s proměnnou, počítat s ní, vypisovat ji atd. 4.7.5 GLOBÁLNÍ PROMĚNNÉ Pracujeme-li uvnitř funkce s proměnnými, které jsou definované mimo tělo funkce, je třeba k nim přistupovat trochu odlišně (Řešený příklad 101): ŘEŠENÝ PŘÍKLAD 101 Pomocí $GLOBALS přistupujeme k proměnné deklarované vně funkce. 4.8 POLE Pole (Array), to je skupina prvků, které spolu souvisí. Pole je třeba abeceda. Pole jsou základním prvkem PHP, ve složitějších aplikacích a skriptech se bez nich neobejdete. Pole nesmírně usnadní práci s databází (MySQL), ale lze ho využít i jinde. 4.8.1 VYTVOŘENÍ POLE Pole se tvoří příkazem array("prvek0", "prvek1", "prvek2"), každý prvek má své číslo - ten první (prvek0) má číslo nula (Řešený příklad 102). ŘEŠENÝ PŘÍKLAD 102 $pole = array ("mrkev", "celer", "brambory"); echo($pole[0]); //vypíše 'mrkev'; $zahrada = array (3 => "jablon", "hrusen"); echo($zaharda[4]); //vypíše 'hrusen'; $sklenik[1] = "redkvicky"; //postupné přiřazování prvků i s indexem(1) $sklenik[3] = "fazole"; 4 PHP - 60 Pole se ukládají pod proměnné($pole, $zahrada a $sklenik). V prvním případě jsme vytvořili $pole, jehož položkami jsou mrkev, celer a brambory. Následně echo($pole[0]); jsme vypsali nultou položku pole. Pak jsme zavedli pole $zahrada, do kterého jsme zařadili prvek jablon pod číslo 3 a hrusen s číslem následujícím, tedy 4. Do posledního pole $sklenik jsme postupně zařadili prvky redkvicky a fazole pod čísla 1 a 3. 4.8.2 VÝPIS PRVKŮ POLE Syntax: echo($pole[cislo prvku]). To je nejjednodušší způsob, jak vypsat prvek. Druhá možnost je prvky pojmenovat a pak odkazovat pomocí jmen (Řešený příklad 103): ŘEŠENÝ PŘÍKLAD 103 $pole["br"] = "brambor"; $pole["kv"] = "kvetak"; echo("nemám rád ".$pole["br"]." ani ".$pole["kv"]); //nemám rád bramobory ani květák $knihy = array("js" => "JavaScript v příkladech", "php" => "PHP pro profesionály"); echo($knihy["js"]); 4.8.3 PROCHÁZENÍ POLEM Procházení polem znamená postupné vybrání všech prvků. Metoda count($pole) vrací počet prvků pole (Řešený příklad 104). ŘEŠENÝ PŘÍKLAD 104 $dodelat = array("PHP", "CSS", "SQL", "XML"); for ($p = 0; $p < count($dodelat); ++$p){ echo ("je třeba dodělat ".$dodelat[$p]."
                  "); } Tento skript postupně vypíše každý prvek pole $dodelat. Metodu count($pole) lze použít, pouze pokud jsou prvky číslované, pokud jsou pojmenované, je třeba použít each(), list() a reset()(Řešený příklad 105): ŘEŠENÝ PŘÍKLAD 105 $pole[PHP]="Hotové"; $pole[CSS]="Rozepsané"; $pole[XML]="Hotové"; $pole[SQL]="Nezačaté"; reset($pole); while(list($index, $stav) = each($pole)){ echo ($index." - ".$stav."
                  "); } Petr Suchánek, Jan Górecki; Portál a jeho správa A - 61 Metoda reset()nastavuje ukazatel na první prvek pole. Metoda list() bere prvky z pole a jeho číslo uloží jako $index a jeho hodnotu jako proměnnou $stav. Metoda each() značí, že se tak má provést u každého prvku. 4.9 PHP MENU Může nastat situace, kdy do každé stránky vkládáte stejný text (objekt), například menu, patičku. Pomocí PHP lze snadno vkládat do každého souboru jiný soubor.Veškeré opakující se prvky je vhodné vkládat pomocí PHP. Vytvořte stránku - třeba menu.html (ve které budou jen odkazy a prvky společné pro všechna menu, žádné , ani ). Tuto stránku vložíte pomocí PHP do dokumentu, např. (Řešený příklad 106): ŘEŠENÝ PŘÍKLAD 106 Nyní se obsah souboru menu.html vloží do každého dokumentu, ve kterém bude tento zdrojový kód. Když budete chtít menu změnit, změníte pouze soubor menu.html a změna se projeví ve všech dokumentech. Samozřejmě všechny dokumenty musejí mít koncovku .php a na serveru musí být podpora PHP. Obdobným způsobem vkládejte menu, patičky, reklamy, hlavičky a další. Ušetří vám to práci a web bude nesmírně jednoduchý. Ukázkový příklad použití include bude v kapitole 8. 4.10 ÚLOHY K ZAMYŠLENÍ  Máme tři čísla a, b, c. Tato čísla odpovídají délkám stran nějakého trojúhelníku. Jak zkonstruujeme v PHP podmínku, která bude pravdivá pouze v případě, že trojúhelník je pravoúhlý?  Využijte cyklů v PHP k vypsání prvních n sudých přirozených čísel.  Vykreslete čtvercovou tabulku o libovolném rozměru pomocí spojení HTML a PHP jazyků. Vypište do každé buňky této tabulky její pozici. 5 využití php pro zpracování formulářů - 62 - 5 VYUŽITÍ PHP PRO ZPRACOVÁNÍ FORMULÁŘŮ Abychom vytvořili prakticky použitelný portál, potřebujeme do hry aktivně zapojit uživatele. Portál musí od uživatele získat vstupní informace, aby mu mohl poskytnout požadované údaje. Jazyk HTML proto obsahuje podporu formulářů. Součástí webové stránky se tak stanou různá vstupní pole a tlačítka — vznikne nám něco velice podobné dialogovým oknům. Uživatel do formuláře zadá data, která jsou odeslána skriptu na serveru ke zpracování. Skript získaná data nějakým způsobem zpracuje a poskytne uživateli odpověď. Vidíme, že bez formulářů by uživatel neměl příliš šanci aktivně vstoupit do dění. V jedné z předchozích kapitol jsme se již s tvorbou formulářů v jazyce HTML seznámili. Nyní se budeme věnovat zpracováním dat z formulářů právě pomocí skriptů v PHP. Pro vložení formuláře do stránky slouží HTML element FORM. Pro správnou funkci celého formuláře jsou nezbytné dva atributy — ACTION a METHOD. Atribut ACTION určuje URL skriptu, který se použije pro zpracování dat z formuláře. V PHP je obvykle stránka s formulářem i skript v jednom adresáři a s výhodou použijeme samotné jméno skriptu, které v tomto případě odpovídá relativnímu URL. Pomocí atributu METHOD určujeme způsob, jakým budou data z formuláře předána zpět serveru. K dispozici jsou dvě metody — GET a POST. Metoda GET je vhodná pro přenášení kratších dat z malých formulářů, protože data formuláře se připojí na konec URL ukazujícího na obslužný skript. Metoda POST se hodí pro odesílání větších formulářů, které obsahují mnoho dat. Údaje z formuláře jsou v tomto případě přenášeny v těle HTTP požadavku. Z hlediska psaní skriptů v PHP není mezi oběma metodami žádný rozdíl - data jsou vždy přístupná stejným způsobem. Výše zmíněné poznatky shrneme a ukážeme si, jak má vypadat základ každého formuláře (Řešený příklad 107): ŘEŠENÝ PŘÍKLAD 107
                  PHP bylo navrženo speciálně jako jazyk pro tvorbu dynamicky generovaných webových stránek a v mnoha ohledech se tomuto požadavku přizpůsobuje. Říkali jsme si, že data mohou být skriptu odeslána metodami GET a POST. PHP pak automaticky nastaví odpovídající proměnné. Kromě toho máme k dispozici dvě asociativní pole $HTTP_GET_VARS a $HTTP_POST_VARS, která obsahují všechny proměnné odeslané metodami GET a POST. Tímto způsobem můžeme zpracovávat data i z formulářů, u kterých neznáme jména vstupních polí. Nyní si využití PHP pro zpracování formulářů ilustrujeme na jednoduchém příkladu kalkulačky, která umí jen jednu operaci, a to sčítání. Do formuláře vložíme dvě vstupní textová pole s názvy Scitanec1 a Scitanec2 . Dále přidáme tlačítko pro odeslání údajů. Parametr action nastavíme na skript vypocet.php, který součet zadaných hodnot provede a vypíše. Údaje pošleme na server metodou get (Řešený příklad 108). ŘEŠENÝ PŘÍKLAD 108 Příklad zadávání údajů Petr Suchánek, Jan Górecki; Portál a jeho správa A - 63 -

                  Kalkulačka

                  Zadejte sčítance:
                  +
                  Výše uvedený kód vytvoří takovýto formulář (Obrázek 7): Obrázek 7:Formulář jednoduché kalkulačky Pokud zadáme do vstupních polí hodnoty např. 10 a 50, v URL se objeví http://localhost/vypocet.php?Scitanec1=10&Scitanec2=50. Následující skript, který uložíme jako vypocet.php, poslaná data zpracuje (sečte) a vypíše výsledek (Řešený příklad 109). ŘEŠENÝ PŘÍKLAD 109

                  Kalkulačka

                  První sčítanec:
                  Druhý sčítanec:
                  =============================
                  Součet:

                  Zpět k zadání

                  V případě, že bychom parametr method formuláře nastavili na post, v URL se objeví pouze http://localhost/vypocet.php. Odeslaná formulářová data bychom potom přistupovali pomocí příkazu $_POST, jako v následujícím příkladu (Řešený příklad 110): 5 využití php pro zpracování formulářů - 64 ŘEŠENÝ PŘÍKLAD 110

                  Kalkulačka

                  První sčítanec:
                  Druhý sčítanec:
                  =============================
                  Součet:

                  Zpět k zadání

                  5.1 ÚLOHY K ZAMYŠLENÍ Zamyslete se nad tím, jak by se kalkulačka dala rozšířit na více aritmetických operací, např. děleno, krát a mínus. Zkuste do stávajícího kódu přidat další prvek, který umožní volbu aritmetické operace. Do zpracovávajícího skriptu pak zakomponujte odpovídající reakci na volbu aritmetické operace. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 65 - 6 MYSQL MySQL je relační databázový systém typu DBMS (Database Management System), vlastněný společností Oracle. Každá databáze v MySQL je tvořena z jedné nebo více tabulek, které mají řádky a sloupce. V řádcích rozeznáváme jednotlivé záznamy (řádek=>záznam). Sloupce mají jméno a uvozují datový typ jednotlivých polí záznamu (sloupec=>pole). Práce s databázemi, tabulkami a daty se provádí pomocí příkazů, respektive dotazů. Dotazy vycházejí z deklarativního programovacího jazyka SQL (Structured Query Language). Systém MySQL je využitelný v ADO.NET, C, C++, JDBC, ODBC, Perl, PHP, Python Ruby. Systém MySQL je šířen jako Open source. Pro vzdálenou správu MySQL přes WWW je vhodný phpMyAdmin nebo český Adminer. PhpMyAdmin je součástí balíku EasyPHP, jehož instalace byla popsána v kapitole 4. Programový systém phpMyAdmin je nástroj napsaný v jazyce PHP umožňující jednoduchou správu obsahu databáze MySQL prostřednictvím webového rozhraní. V současné době umožňuje vytvářet/rušit databáze, vytvářet/upravovat/rušit tabulky, provádět SQL příkazy a spravovat klíče. 6.1 VYTVOŘENÍ DATABÁZE Do správy databáze se dostaneme přes program EasyPHP z nabídky Konfigurace/PhpMyAdmin. Zobrazí se nám rozhraní, ve kterém můžeme začít s databází pracovat. Prvním krokem je vytvoření nové databáze. Její název vepíšeme do pole Vytvořit novou databázi. V tomto příkladu vytvoříme databázi s názvem moje_databaze (viz Obrázek 8). U databází a všech databázových objektů je nutné věnovat velkou pozornost nastavení znakových sad. Budeme-li chtít využívat v záznamech českou diakritiku, musíme zvolit správné kódování, které by mělo být v celé databázi jednotné. V našem případě zvolíme cp1250_czech_cs. Obrázek 8: Rozhraní phpMyAdmin. Po zadání všech hodnot klepneme na tlačítko Vytvořit. Tím se nám vytvoří nová prázdná databáze. Jak je a bude vidět počínaje Obrázkem 9, paralelně při provádění jednotlivých akcí se nám generuje SQL kód pro jejich provedení. 6.1.1 TVORBA TABULKY Základním objektem v databázích je tabulka. Tabulku můžeme vytvořit několika způsoby. Prvním z nich je varianta, kdy vytvoříme prázdnou tabulku (bez záznamů) obsahující pouze názvy příslušných polí (sloupců) a to pomocí webového rozhraní phpMyAdmin. Druhým způsobem je vytvoření tabulky pomocí příkazu SQL pro tvorbu tabulky a třetím je import existující tabulky v podobě textového nebo jiného souboru. 6 MySQL - 66 Jako základní si v této první části ukážeme tvorbu tabulky pomocí webového rozhraní phpMyAdmin. Obrázek 9: Okno databáze s názvem moje_databaze. Předpokládejme, že vytvoříme tabulku s názvem seznam, která bude obsahovat pole id, jmeno, prijmeni, město a psc. V okně obsahujícím, mimo jiné, pole Vytvořit novou tabulku v databázi moje_databaze (Obrázek 9) tedy vyplníme název tabulky (seznam) a počet sloupců (5). Po klepnutí na tlačítko Proveď se dostaneme do okna pro editaci jednotlivých polí tabulky (Obrázek 10). Obrázek 10: Editace polí tabulky. U každého pole tabulky budeme pro naše potřeby jako klíčové editovat:  Sloupec (název pole);  Typ (datový typ) – u textových polí to je nejčastěji TEXT nebo VARCHAR, u číselných polí INT (celá čísla) nebo DOUBLE (reálná čísla) apod.;  Délka/Množina – nastavujeme nejdelší možnou délku, kterou je možné vložit jako hodnotu záznamu v daném poli;  Porovnání – představuje znakovou sadu;  Extra – v našem případě pole id představuje primární klíč, kdy jako hodnoty pole bude vkládána posloupnost celých čísel. Toto pole bude nastaveno jako primární klíč, což zajistíme tak, že na konci řádku přepneme přepínač na první pozici. Po nastavení uvedených hodnot a kliknutí na tlačítko Ulož dojde k vytvoření tabulky seznam a dostaneme se do základního rozhraní, ve kterém je možné provádět celou řadu úprav vztahujících se k dané tabulce. (Obrýzek 11) Petr Suchánek, Jan Górecki; Portál a jeho správa A - 67 Obrázek 11: Okno editace tabulky. 6.1.2 VLOŽENÍ ZÁZNAMŮ DO TABULKY Do tabulky můžeme vložit záznamy ručně, pomocí SQL příkazu, importem z externího souboru nebo například přebírám hodnot z webových formulářů, což je jedním z primárních obsahových zaměření tohoto studijního textu a této problematice bude věnována velká část výkladu v následujících kapitolách. Prohlédnout záznamy v tabulce lze pomocí karty Projít. Ručně lze záznamy do tabulky vkládat pomocí karty Vložit (Obrázek XY). V případě, že chceme využít SQL dotaz, ten můžeme vložit do pole Spustit SQL dotaz(y) na databázi nazev_databaze (nebo pomocí karty SQL). Jeden z možných příkladů již je zobrazený na Obrázku 11, kde je vepsán SQL dotaz přidávající do tabulky seznam jeden záznam. ŘEŠENÝ PŘÍKLAD 111 INSERT INTO seznam (jmeno, prijmeni, mesto, psc) VALUES ('Jana', 'Pokorná', 'Praha', 74589) Jak je patrné z Řešeného příkladu 111, za klíčovými slovy INSERT INTO se udává jméno tabulky, do které chceme data vkládat (je-li tabulka v jiném databázovém schématu, použijeme tvar jméno_schématu.jméno_tabulky). Seznam sloupců uvedený v závorkách je 6 MySQL - 68 nepovinný. Za klíčovým slovem VALUES je uveden seznam hodnot, které vkládáme. Pořadí hodnot musí přesně odpovídat pořadí sloupců v tabulce. Pokud toto pořadí hodnot nechceme dodržet, pak musíme uvést část jména_sloupců za klíčovým slovem INTO, ve které budeme vlastně specifikovat, v jakém pořadí vkládáme jednotlivé hodnoty. Pořadí sloupců tedy musí odpovídat pořadí hodnot. Třetí možností je import dat z externího souboru. K tomuto účelu samozřejmě potřebujeme soubor se správnou strukturou. V tomto příkladu zůstaneme u nejjednodušší varianty, kdy budeme importovat soubor *.txt (konkrétně se bude jednat o soubor data.txt). Soubor data.txt bude obsahovat: ŘEŠENÝ PŘÍKLAD 112 ;Jan;Novák;Ostrava;75412 ;Hana;Drobná;Karviná;73586 ;Jiří;Hanák;Opava;76512 ;Lenka;Pokorná;Brno;71245 Import dat do dané tabulky lze provést pomocí odkazu Vložit textové soubory do tabulky, umístěném zcela ve spodní části okna pro editaci tabulky (Obrázek 11). Po klepnutí na tento odkaz se nám zobrazí okno, ve kterém nastavíme potřebné parametry. Primárním je samozřejmě výběr konkrétního souboru (Obrázek 12). Obrázek 12: Okno výběru textového souboru pro import dat do tabulky. Po klepnutí na tlačítko Odešli se akce provede a záznamy se do tabulky vloží. 6.2 PŘÍKAZY SQL V této kapitole si uvedeme přehled některých důležitých příkazů jazyka SQL, které budeme dále potřebovat. 6.2.1 VYTVOŘENÍ TABULKY Pro vytvoření tabulky se používá příkaz CREATE TABLE v následující syntaxi: CREATE TABLE [název_tabulky] (název_sloupce1 typ [, název_sloupce2 typ, název_sloupce3 typ, …]) Konkrétně je daná struktura využita v Řešeném příkladu 113): Petr Suchánek, Jan Górecki; Portál a jeho správa A - 69 ŘEŠENÝ PŘÍKLAD 113 CREATE TABLE telefony ( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, jmeno VARCHAR(40), telefon VARCHAR(14), email VARCHAR(60), pracoviste INT) Tento příklad vytvoří prázdnou tabulku s následující strukturou (Tabulka 13). Tabulka 13: Nová tabulka telefony id jmeno telefon email pracoviste Jak jste si všimli, při vytváření tabulky je za každým názvem sloupce uveden jeho typ. Každý typ sloupce se může skládat z několika vlastností. První vlastností by měla být definice datového typu sloupce. My se pro naše účely omezíme pouze na dva datové typy – INT a VARCHAR. Pokud chceme do sloupce ukládat pouze celá čísla, použijeme datový typ INT. Pokud budeme chtít do daného sloupce ukládat data nečíselného charakteru, např. jméno, adresa, titul, atp., použijeme typ VARCHAR, který nám umožní vkládat do sloupce libovolné textové řetězce. V případě použití tohoto typu je potřeba ještě uvést maximální délku řetězce, tzn. víme-li, že do sloupce jmeno budeme zapisovat jména o délce maximálně 40 znaků, definujeme datový typ tohoto sloupce jako jmeno(40). Další vlastnosti sloupce budeme definovat pouze u prvního sloupce, který budeme vždy nazývat id a vždy bude sloužit jako primární klíč (viz příklad výše), což definujeme pomocí klíčových slov PRIMARY KEY. Vlastnost NOT NULL zajištuje, že u každého nového záznamu (řádku) vkládaného do tabulky bude tento sloupec obsahovat neprázdnou (not null) hodnotu. Vlastnost AUTO_INCREMENT nám usnadňuje práci s tímto sloupcem a při vkládání nového záznamu do tabulky se o hodnotu v tomto sloupci nemusíme starat – nastaví se totiž automaticky a to tak, že se zjistí prozatímní nejvyšší hodnota v tomto sloupci (označme jako n) a pro nový záznam se hodnota v tomto sloupci nastaví jako n + 1, např. je-li nejvyšší hodnota ve sloupci id číslo 45, hodnota v id pro nový záznam se nastaví jako 46. 6.2.2 VLOŽENÍ ZÁZNAMU DO TABULKY V předchozí části textu jsme se již vložení záznamu do tabulky v databázi věnovali v souvislosti s prostředím phpMyAdmin. Pro jistotu si jej však ještě jednou zopakujeme na příkladu s tabulkou telefony. Příkaz INSERT INTO má obecně následující syntaxi: INSERT INTO [název_tabulky] (sloupec, ...) VALUES (hodnota, ...) Pro tabulku telefony se může použít takto (Řešený příklad 114): 6 MySQL - 70 ŘEŠENÝ PŘÍKLAD 114 INSERT INTO telefony (jmeno, telefon, email, pracoviste) VALUES ('Jan Novák', '+420212131415', 'novak@email.cz'‚ '25' ) Tento příklad vloží do tabulky telefony jeden nový záznam. Výsledkem je následující tabulka (Tabulka 14). Tabulka 14: Tabulka telefony s jedním novým záznamem id jmeno telefon email pracoviste 1 Jan Novák +420212131415 novak@email.cz 25 Pozn.: Všimněte si automaticky nastavené hodnoty ve sloupci id. Pokud je tabulka prázdná, hodnota n (viz vlastnost AUTO_INCREMENT) je rovna 0. Novému záznamu je tedy do sloupce id automaticky přiřazena hodnota 1. 6.2.3 ZMĚNA HODNOT V TABULCE Pro změnu hodnot v tabulce se používá příkaz UPDATE, který má následující syntaxi: UPDATE tabulka SET sloupec=hodnota [,jiný sloupec=hodnota...] WHERE něco='něco' Nyní si přestavme situaci, kdy je potřeba přečíslovat některá pracoviště, např. pracoviště č. 25 je potřeba přečíslovat na pracoviště č. 26. Následující příklad změní u všech pracovníků z pracoviště č. 25, uvedených v tabulce telefony, jejich pracoviště na č. 26 (Řešený příklad 115). ŘEŠENÝ PŘÍKLAD 115 UPDATE telefony SET pracoviste=26 WHERE pracoviste=25 Výše uvedená tabulka by se tedy změnila takto (změna je vyznačena kurzívou) (Tabulka 15): Tabulka 15: Tabulka telefony se změněným záznamem id jmeno telefon email pracoviste 1 Jan Novák +420212131415 novak@email.cz 26 6.2.4 SMAZÁNÍ ZÁZNAMŮ V TABULCE Pro smazání záznamů v tabulce se používá příkaz DELETE, který má následující syntaxi: DELETE FROM název_tabulky WHERE název_sloupce=hodnota Petr Suchánek, Jan Górecki; Portál a jeho správa A - 71 Rušíme-li pracoviště č. 26, odstraníme všechny kontakty z tabulky telefony. Toto provede následující příklad (Řešený příklad 116): ŘEŠENÝ PŘÍKLAD 116 DELETE FROM telefony WHERE pracoviste=26 Výsledkem bude prázdná tabulka telefony (Tabulka 16). Tabulka 16: Tabulka telefony po odstranění záznamu id jmeno telefon email pracoviste 6.2.5 VÝBĚR ZÁZNAMŮ Z DATABÁZE Zřejmě nejdůležitější SQL příkaz je příkaz pro výběr dat z databáze. Má jméno SELECT a následující syntaxi. SELECT [co vybrat (které sloupce)] FROM [z jaké tabulky nebo tabulek] WHERE [podmínka] GROUP BY [podle čeho seskupit] ORDER BY [seřazení podle něčeho] Pokud bychom chtěli vypsat celý obsah nějaké tabulky, použijeme příkaz SELECT následovně (Řešený příklad 117): ŘEŠENÝ PŘÍKLAD 117 SELECT * FROM telefony Značka * je zástupný symbol pro všechny sloupce v dané tabulce a používá se pro zkrácení zápisu. Abychom si příkaz lépe ilustrovali, vložme do tabulky telefony dva záznamy, tak aby vypadala následovně (Obrázek 17). Tabulka 17: Tabulka telefony se dvěma záznamy id jmeno telefon email pracoviste 1 Jan Novák +420212131415 novak@email.cz 25 2 Jana Nová +420123456789 nova@gmail.com 28 Představme si, že nás nyní zajímají pouze jména a telefonní čísla zaměstnanců v tabulce. V takovém případě je vhodné použít příkaz SELECT takto (Řešený příklad 118): ŘEŠENÝ PŘÍKLAD 118 SELECT jmeno, telefon FROM telefony 6 MySQL - 72 Výsledkem bude (Tabulka 18): Tabulka 18: Výsledek příkazu SELECT jmeno telefon Jan Novák +420212131415 Jana Nová +420123456789 Nyní nás budou zajímat pouze zaměstnanci z pracoviště č. 25, a to opět pouze jejich jména a telefon. V tomto případě je vhodné použít příkaz SELECT takto (Řešený příklad 119): ŘEŠENÝ PŘÍKLAD 119 SELECT jmeno, telefon FROM telefony WHERE pracoviste = 25 Dle očekávání bude takovýto výsledek (Tabulka 19): Tabulka 19: Výsledek příkazu SELECT jmeno telefon Jan Novák +420212131415 Pokud nás zajímají pouze zaměstnanci, kteří májí svůj e-mail na určité doméně (např. gmail.com), můžeme použít příkaz SELECT takto (Řešený příklad 120): ŘEŠENÝ PŘÍKLAD 120 SELECT jmeno, telefon, email FROM telefony WHERE email like '%@gmail.com' Znak % je použit jako zástupný znak pro jakýkoli řetězec a porovnávací operátor like funguje v podstatě stejně jako operátor =. Dotaz tedy zobrazí všechny záznamy, u kterých email končí řetězcem @gmail.com. Výsledkem tedy bude (Tabulka 20): Tabulka 20: Tabulka zaměstnanců s emailem na gmail.com jmeno telefon email Jana Nová +420123456789 nova@gmail.com 6.3 DATA VE VÍCE TABULKÁCH Zatím jsme si představili využití SQL příkazů pouze v souvislosti vždy jen s jednou tabulkou najednou. Data v databázích jsou však velmi často rozdělena do více tabulek, které jsou mezi sebou určitým způsobem svázány. V této kapitole si ukážeme, jak lze v takovém případě získávat data z více tabulek najednou. Pro ukázku použijeme dvě tabulky. První tabulka dum obsahuje záznamy o třech různých domech (Tabulka 21). Druhá tabulka osoba obsahuje záznamy o šesti osobách (Tabulka 22). Petr Suchánek, Jan Górecki; Portál a jeho správa A - 73 Tabulka 21: Tabulka dum id nazev_domu mesto pocet_pokoju 1 Penzion Aldo Karviná 15 2 Hotel Clarion Ostrava 30 3 Hotel Hilton Praha 200 Tabulka 22: Tabulka osoba id jméno vlastni bydli_v 1 Jan Górecki - - 2 Kamil Rychlý - 1 3 Emil Sklář - 3 4 Jan Novák 1 2 5 Petr Koukal 2 3 6 Richard Hilton 3 3 Tabulka osoba, kromě informací o dané osobě, také obsahuje informace o tom, jak je daná osoba spojena s nějakým domem z tabulky dum. Tyto informace jsou uloženy ve sloupcích vlastni a bydli_v, které uvádějí identifikační čísla domů (id z tabulky dum), které daná osoba vlastní, resp. ve kterém z těchto domů daná osoba bydlí. Tyto sloupce se nazývají jako tzv. vazební sloupce, jelikož reprezentují vazbu mezi tabulkami. 6.3.1 ERD DIAGRAM Tyto dvě tabulky jsou mezi sebou svázány několika vazbami skrze vazební sloupce. Tyto vazby lze reprezentovat pomocí tzv. ERD diagramu (z angl. Entity-Relationship Diagram). Obdélníky v diagramu reprezentují jednotlivé tabulky v databázi, kosočtverce a hrany pak reprezentují vztahy mezi nimi. Jak lze vidět na příkladu níže, mezi dvěma tabulkami může existovat libovolné množství různých vztahů. Nás zajímají tři vztahy. První vztah nazvaný v ERD diagramu Vlastní popisuje, který dům je vlastnictví dané osoby. V databázi je tento vztah reprezentován sloupcem vlastni v tabulce osoba, kde je uvedeno id domu, který daná osoba vlastní. Další vztah nazvaný v ERD diagramu Bydlí v popisuje, ve kterém domě daná osoba bydlí. V databázi je tento vztah reprezentován sloupcem bydli_v v tabulce osoba, kde je uvedeno id domu, ve kterém daná osoba bydlí. Další vztah nazvaný v ERD diagramu Bydlí v i vlastní je zřejmou kombinací obou předchozích vztahů. V databázi je tento vztah reprezentován pomocí obou sloupců vlastní a bydli_v (Obrázek 13). 6 MySQL - 74 Obrázek 13: ERD diagram 6.3.2 PŘÍKAZ SELECT PRO VÍCE NEŽ JEDNU TABULKU V případě, že chceme vybírat data z více než jedné tabulky najednou, můžeme opět použít známý příkaz SELECT. Všechny tabulky, ze kterých chceme výběr provést, napíšeme za klíčové slovo FROM. Výběr dat ze dvou tabulek najednou si vyzkoušíme na následujícím příkladu, kde si necháme zobrazit hodnoty ze sloupců id jak z tabulky dum, tak z tabulky osoba. Výběr dat provedeme následujícím příkazem (Řešený příklad 121): ŘEŠENÝ PŘÍKLAD 121 SELECT dum.id id_dum, osoba.id id_osoba FROM dum, osoba Jak už víme, po klíčovém slově SELECT následuje seznam sloupců, které chceme ve výsledku zobrazit. Jelikož vybíráme sloupce z více tabulek najednou, je potřeba u každého sloupce specifikovat, ze které tabulky má být tento sloupce vybrán. Dva sloupce v různých tabulkách se mohou jmenovat stejně, např. právě sloupce id z tabulky dum a id z tabulky osoba. Specifikace se provede tak, že se před název sloupce přidá název dané tabulky a tečka (viz dum.id a osoba.id v příkladu výše). Někdy je také výhodné jednotlivé sloupce ve výsledku přejmenovat. To se dosáhne tak, že se za specifikaci sloupce přidá mezera a nový název sloupce, např. dum.id přejmenujeme na id_dum a osoba.id na id_osoba. Záhlaví výsledku tedy budou tvořit názvy sloupců id_dum a id_osoba (Tabulka 23). Dům Osoba Vlastní Bydlí v Bydlí v i vlastní Petr Suchánek, Jan Górecki; Portál a jeho správa A - 75 Tabulka 23: Kartézský součin tabulek dum a osoba id_dum id_osoba 1 1 1 2 1 3 … … 1 6 2 1 … … 3 6 Záznamy výsledné tabulky pak tvoří kartézský součin záznamů z jednotlivých tabulek. V našem případě to znamená, že výsledek mám 3 x 6 záznamů, ve kterém jsou kombinace všech záznamů z tabulky dum a všech záznamů z tabulky osoba, tzn. „každý s každým“, jak lze vidět v tabulce výše. Samotný kartézský součin nám však často není příliš k užitku, jelikož se ve výsledku neprojeví vazba mezi tabulkami. Abychom mohli vybírat záznamy z různých tabulek, které jsou v nějaké vazbě, je nutno tuto vazbu do příkazu SELECT zahrnout. To zařídíme tak, že přidáme klíčové slovo WHERE, za které vložíme tzv. vazebnou podmínku. Vazebná podmínka se tvoří tak, že spojíme operátorem rovnosti = odpovídající si sloupce z různých tabulek. Představme si situaci, kdy nás zajímá, kdo vlastní který dům, přesněji řečeno, chceme si nechat vypsat jméno osoby vlastníka ke každému názvu domu. Pro výběr dat tedy využijeme vazbu Vlastní, která je reprezentována sloupcem vlastni v tabulce osoba a jemu odpovídajícímu sloupci id z tabulky dum. Vazební podmínka tedy bude dum.id = osoba.vlastni a celý příkaz pro výběr bude vypadat takto (Řešený příklad 122): ŘEŠENÝ PŘÍKLAD 122 SELECT dum.id id_dum, osoba.id id_osoba, dum.nazev_domu, osoba.jmeno, osoba.vlastni FROM dum, osoba WHERE dum.id = osoba.vlastni Výsledkem pak bude tato tabulka (Obrázek 24): Tabulka 24: Vlastníci domů id_dum id_osoba dum.nazev_domu osoba.jmeno osoba.vlastni 1 4 Penzion Aldo Jan Novák 1 2 5 Hotel Clarion Petr Koukal 2 3 6 Hotel Hilton Richard Hilton 3 Z kartézského součinu všech záznamů z obou tabulek jsou vypsány je záznamy, ve kterých se hodnota ve sloupci rovná hodnotě dum.id ve sloupci osoba.vlastni (vyznačeno tučně). Zajímalo-li by nás, kde která osoba bydlí, tzn. u každého jména osoby bychom chtěli vypsat název domu, ve kterém daná osoba bydlí, postupovali bychom obdobně. Vazební 6 MySQL - 76 podmínku bychom formulovali jako dum.id = osoba.bydli_v a celý příkaz by vypadal následovně (Řešený příklad 123): ŘEŠENÝ PŘÍKLAD 123 SELECT dum.id id_dum, osoba.id id_osoba, dum.nazev_domu, osoba.jmeno, osoba.bydli_v FROM dum, osoba WHERE dum.id = osoba.bydli_v Výsledkem by pak pak byla tato tabulka (Obrázek 25): Tabulka 25: Obyvatelé jednotlivých domů id_dum id_osoba dum.nazev_domu osoba.jmeno osoba.bydli_v 1 2 Penzion Aldo Kamil Rychlý 1 3 3 Hotel Hilton Emil Sklář 3 2 4 Hotel Clarion Jan Novák 2 3 5 Hotel Hilton Petr Koukal 3 3 6 Hotel Hilton Richard Hilton 3 Realizace vazby Bydlí v a vlastní by se provedla takto (Řešený příklad 124): ŘEŠENÝ PŘÍKLAD 124 SELECT dum.id id_dum, osoba.id id_osoba, dum.nazev_domu, osoba.jmeno, osoba.vlastni, osoba.bydli_v FROM dum, osoba WHERE dum.id = osoba.bydli_v and dum.id = osoba.vlastni Vazební podmínka je zde tvořená dvěma podmínkami, dum.id = osoba.bydli_v a dum.id = osoba.vlastni, které jsou spojeny logickou spojkou and. Výsledná tabulka, která zobrazuje osoby, které bydlí ve vlastním domě, vypadá takto (Obrázek 26): Tabulka 26: Obyvatelé domů, kteří jsou zároven jejich vlastníky id_dum id_osoba dum.nazev_domu osoba.jmeno osoba.vlastni osoba.bydli_v 3 6 Hotel Hilton Richard Hilton 3 3 tzn., že pouze pan Hilton bydlí ve svém vlastním domě. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 77 - 7 REGISTRACE A OVĚŘENÍ UŽIVATELE Téměř každý webový portál obsahuje formulář pro přihlášení uživatele. Registrovaným uživatelům, po zadání uživatelského jména a hesla a jejich úspěšném ověření, jsou pak nabídnuty personalizované služby jako vlastní e-mail, úložiště dat, nástroje pro komunikaci s ostatními uživateli, atd. Proces jak registrace, tak ověření uživatele většinou zahrnuje 3 části. V první části je uživateli portálu nabídnut formulář, pomocí kterého jsou získány informace o uživateli, hlavně tedy uživatelské jméno a heslo, pod kterým se poté bude na portál přihlašovat. Pro zajištění (naprogramování) této části můžeme vystačit jen s HTML. Druhá část procesu zajištuje převzetí dat z formuláře a jejich zpracování, např. odeslání do databáze nebo ověření správnosti uživatelského hesla. Tuto část můžeme zpracovat pomocí jazyka PHP. Třetí část procesu zahrnuje uložení dat na správná místa databáze, popř. získání správných dat z databáze, např. zjištění uživatelského hesla k zadanému uživatelskému jménu. Tuto část procesu můžeme zajistit pomocí jazyka SQL. Jak je tedy vidět, proces registrace a ověření uživatele zahrnuje veškeré poznatky, kterým jsme se doposud v této práci věnovali, a jeho zpracování bude určitým vrcholem celého našeho snažení.V této kapitole si ukážeme, jak je možno zmiňovaný proces zpracovat s doposud nabytými znalostmi na úrovni současného standardu většiny menších portálových aplikací. 7.1 REGISTRACE UŽIVATELE Technicky jde při registraci uživatele o to, získat od uživatele určité informace a tyto informace pak uložit do odpovídající předem připravené tabulky (tabulek) v databázi. Nejdříve je tedy potřeba si uvědomit, jaké informace chceme od uživatele získávat. V příkladu, na kterém budeme celý proces registrace ilustrovat, budeme od uživatele získávat tyto informace: jeho jméno a příjmení, město, ve kterém bydlí a přihlašovací údaje uživatelské jméno (z angl. login) a heslo (z angl. password). Předpokládejme, že už máme vytvořenou databázi registrace na serveru localhost a vytvoříme zde odpovídající tabulku uzivatele, kde budeme informace získané od uživatele ukládat (viz předchozí kapitola). Tabulka bude obsahovat sloupec id a dalších 5 sloupců pro získávané informace – vyhneme se mezerám a diakritice, tudíž sloupce nazveme: id, jmeno, prijmeni, město, login a password. Tabulku vytvoříme např. pomocí následujícího SQL dotazu (Řešený příklad 125): ŘEŠENÝ PŘÍKLAD 125 CREATE TABLE uzivatele ( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, jmeno VARCHAR(20), prijmeni VARCHAR(30), mesto VARCHAR(20), login VARCHAR(20), password VARCHAR(200) ) Pro password rezervujeme 200 znaků z důvodu případného kódování hesla, viz níže. 7 Registrace a ověření uživatele - 78 - 7.1.1 HTML - REGISTRAČNÍ FORMULÁŘ Nyní můžeme připravit formulář, kterým budeme získávat dané informace od uživatele. V našem příkladu by mohl být formulář vytvořen takto (Řešený příklad 126): ŘEŠENÝ PŘÍKLAD 126

                  Registrace

                  Jméno:
                  Příjmení:
                  Město:
                  Uživatelské jméno:
                  Heslo:
                  Takto vytvořený formulář vypadá v prohlížeči následovně (z estetických důvodů vždy dbáme na to, aby byl úhledně naformátován do tabulky) (Obrázek 14): Petr Suchánek, Jan Górecki; Portál a jeho správa A - 79 Obrázek 14: Registrační formulář Parametr action jsme nastavili na hodnotu zapis.php. Poté, co uživatel vyplní požadované informace a klikne na tlačítko "odeslat", odešlou se informace na server a zavolá se (spustí se) tento PHP skript, který bude tyto informace zpracovávat. V následující kapitole si ukážeme, jak si takový skript vytvořit. 7.1.2 PHP –SKRIPT PRO ZPRACOVÁNÍ FORMULÁŘOVÝCH DAT Druhá část procesu registrace uživatele obecně zajišťuje převzetí dat z formuláře a jejich odeslání do databáze. Toto můžeme implementovat v PHP. Nejdříve převezmeme informace z formuláře poslané na server a uložíme si je do proměnných. To můžeme v našem příkladu zařídit takto (Řešený příklad 127): ŘEŠENÝ PŘÍKLAD 127 $a=$_POST["jmeno"]; $b=$_POST["prijmeni"]; $c=$_POST["mesto"]; $d=$_POST["login"]; $e=$_POST["password"]; Je třeba velmi důsledně dbát na to, aby jména přebíraných polí přesně odpovídala jménům polí ve formuláři. Jména (jmeno, prijmeni, město, login a password) tedy zásadně neopisujeme, ale vždy pouze kopírujeme (CTRL + C, VTRL + V) z kódu formuláře. Jelikož jsme odeslali informace metodou post, pro jejich převzetí a uložení do proměnných a až e použijeme funkci $_POST. Nyní se připojíme na databázi. Nejprve se připojíme na server, na kterém se databáze nachází. To se provede pomocí příkazu mysql_connect("název serveru db", "jméno", "heslo"); Parametry příkazu mysql_connect, tedy název serveru, kde je databáze (zkráceně db) uložena, přístupové jméno a heslo na server, poskytuje zprostředkovatel webhostingu. Dále se připojíme na databázi pomocí příkazu mysql_select_db("název db"); 7 Registrace a ověření uživatele - 80 Parametr příkazu je název databáze, na kterou se chceme připojit, a taktéž ji získáme od zprostředkovatele webhostingu. V našem příkladu, kdy se připojujeme na server localhost, můžeme připojení na databázi registrace implementovat takto (Řešený příklad 128): ŘEŠENÝ PŘÍKLAD 128 $link = mysql_connect("localhost", "root") or die("Nelze se připojit: " . mysql_error()); print "Připojeno úspěšně"; mysql_select_db("registrace") or die("Nelze vybrat databázi"); Nyní můžeme data převzatá z formuláře poslat do databáze. To se provede pomocí příkazu mysql_query("SQL dotaz"); Parametr "SQL dotaz" by měl obsahovat nějaký SQL dotaz, který informace z formuláře, nyní uložené v proměnných, uloží do určené tabulky. 7.1.3 SQL – DOTAZ ZAJIŠŤUJÍCÍ ZÁPIS DAT DO DATABÁZE SQL příkaz, kterým zapisujeme data do tabulky je příkaz INSERT INTO. Jelikož v našem příkladu chceme informace z formuláře zapsat do předem připravené tabulky uzivatele, příkaz formulujeme takto: INSERT INTO uzivatele (jmeno, prijmeni, mesto, login, password) VALUES ('$a','$b','$c','$d', '$e') Vždy pečlivě dbejme na to, zda vkládáme správnou proměnnou do správného sloupce v tabulce, např. proměnná $e, která obsahuje údaj z formulářového pole nazvaného password, se vkládá do sloupce password v tabulce uzivatele. Jména jednotlivých formulářových polí (hodnoty parametru name) jsme schválně nastavili stejně jako jména sloupců v databázi. Toto však nemusí být pravidlem! Velmi často chybou potom je, že v případech, kdy jsou jména odpovídajících si formulářových polí a sloupců v tabulce různá, snažíme se zapsat obsah proměnné z údajem z formuláře do sloupce, který v tabulce vůbec neexistuje. Celý PHP skript zapis.php zajišťující zpracování dat z formuláře registrace by potom vypadal takto (Řešený příklad 129): ŘEŠENÝ PŘÍKLAD 129 $a=$_POST["jmeno"]; $b=$_POST["prijmeni"]; $c=$_POST["mesto"]; $d=$_POST["login"]; $e=$_POST["password"]; $link = mysql_connect("localhost", "root") or die("Nelze se připojit: " . mysql_error()); Petr Suchánek, Jan Górecki; Portál a jeho správa A - 81 print "Připojeno úspěšně"; mysql_select_db("registrace") or die("Nelze vybrat databázi"); $dotaz = "INSERT INTO uzivatele (jmeno, prijmeni, mesto, login, password) VALUES ('$a','$b','$c','$d', '$e')"; mysql_query($dotaz); 7.1.4 ŠIFROVÁNÍ HESLA Pokud chceme zvýšit zabezpečení přístupu na naše stránky, je vhodné při registraci uživatele ukládat do databáze uživatelské heslo v zašifrované podobě. V takové případě pak znemožníte komukoli nepovolanému, aby si heslo zjistil a případně ho nějakým způsobem zneužil. Můžeme k tomu použít jednosměrné šifrování (tzv. hashování) hesla. To probíhá tak, že se daný řetězec přetvoří na shluk znaků, přičemž ani my nevíme, na základě jakého klíče. Není tedy možné, aby šel daný hash rozšifrovat – to je rozdíl od šifrování obousměrného, kde k šifře máme k dispozici také klíč, jak šifru rozluštit a získat zpátky to, co jsme si do šifry „uložili“. V PHP existuje několik funkcí pro bezpečné ukládání hesel / hashování. Jsou jimi např. md5() nebo sha1(), nicméně tyto algoritmy jsou dnes již poněkud zastaralé a jejich bezpečnost byla zpochybněna. My si ukážeme na našem příkladu vhodnější funkci hash(), pomocí níž lze zvolit nějaký modernější šifrovací algoritmus, např. "whirpool" nebo "sha512". Při přebírání informace z formuláře obsahující heslo, tedy v řádku $e = $_POST["password"]; upravíme příkaz tak, aby se do proměnné $e uložilo heslo v zašifrované podobě. To provedeme následující úpravou řádku na: $e = hash("sha512", $_POST["password"]); Tím zajistíme šifrování hesla pomocí algoritmu "sha512". Heslo v databázi pak máme uloženo v zahashované podobě. Když např. uživatel při registraci vyplnil heslo 123456, pomocí funkce hash("sha512", "123456") se převedlo na shluk znaků, např. ba3253876aed6bc2c6a956df346eab413, a v této podobě se také uložilo do databáze. Jelikož se heslo tímto způsobem výrazně prodlouží, je důležité dbát na dostatečnou kapacitu tohoto pole v tabulce databáze – v našem příkladu jsme pro jistotu nastavili u pole password kapacitu 200 (viz definice tabulky uzivatele). Při ověřování uživatele potom budeme heslo porovnávat v nějaké takové zašifrované podobě (viz níže). 7.2 OVĚŘENÍ UŽIVATELE Při ověřování (autentizaci) uživatele jde o to, porovnat údaje, které uživatel zadává při přihlašování, s údaji, které zadal při registraci. Technicky to znamená, porovnat, pro dané uživatelské jméno, heslo, které uživatel zadává při přihlašování, s heslem, které uživatel zadal při registraci. V případě, že je uživatel již registrován, tzn. jeho uživatelské jméno je již uloženo v databázi, a obě hesla se shodují, je identita uživatele ověřena a umožníme mu vstup na personalizované části webu. V opačném případě pak identita uživatele ověřena není a přístup na personalizované části portálu je mu odepřen. 7 Registrace a ověření uživatele - 82 - 7.2.1 HTML – PŘIHLAŠOVACÍ FORMULÁŘ Formulář pro přihlášení uživatele většinou obsahuje pouze dvě vstupní pole, uživatelské jméno a heslo. V našem příkladu bychom vystačili s tímto formulářem (Řešený příklad 130): ŘEŠENÝ PŘÍKLAD 130

                  Přihlášení

                  Uživatelské jméno:
                  Heslo:
                  Uložíme pod názvem form2.html. V prohlížeči vypadá takový formulář takto (Obrázek 15): Obrázek 15: Přihlašovací formulář Parametr action jsme nastavili na hodnotu overeni.php. Poté, co uživatel vyplní požadované informace a klikne na tlačítko "Odeslat", odešlou se informace na server a zavolá se (spustí se) tento PHP skript, který bude tyto informace zpracovávat, tzn. který ověří správnost zadaného hesla pro dané uživatelské jméno. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 83 - 7.2.2 PHP – SKRIPT PRO OVĚŘENÍ UŽIVATELE Skript pro ověření nejprve převezme údaje z přihlašovacího formuláře a uloží je do nastavených proměnných $form_uziv_jmeno a $form_heslo. V případě, kdy využíváme šifrování hesla je potřeba ještě heslo převést na šifrovanou podobu, viz řádek $form_heslo = hash("sha512", $_POST["password"]);. Následující PHP skript se postará o ověření uživatele (Řešený příklad 131). ŘEŠENÝ PŘÍKLAD 131 ".$sql; $spojení = mysql_connect($server, $uzivatel, $heslo) or die("Nelze se připojit: " . mysql_error());; // pripojeni na server mysql_select_db($databaze); // pripojeni na databazi print "
                  Připojeno úspěšně"; 7 Registrace a ověření uživatele - 84 $výsledek = mysql_query($sql); // dotaz na heslo pro uzivatele // ověřovací proces if (!$výsledek): echo "
                  Ověření nelze použít. Zřejmě máte špatně nastavené údaje o db. Server nevrátil odpověď na dotaz ".$sql; exit; endif; if(!mysql_num_rows($výsledek)): echo "
                  Uživatel není v tabulce."; exit; else: $i=0; if (mysql_result($výsledek, $i, $db_sloupec_heslo) != $form_heslo ): echo "
                  Nesprávné heslo. Uživatel je registrován v tabulce, ale není zadáno správné heslo."; exit; else: endif; endif; //pokud odpovídají přihlašovací údaje session_start(); header("Cache-control: private"); //zaregistruje proměnou user_is_logged a nastaví ji na 1 $_SESSION["user_is_logged"] = 1; //a pošle na úvodní soubor chráněné sekce header("Location: ".$private_url); exit; ?> První část skriptu (část nad znaky -------) je potřeba nastavit dle našich podmínek. První 4 řádky $server = "localhost"; $uzivatel = "root"; $heslo = ""; $databaze = "registrace"; nastavíme dle údajů od poskytovatele webhostingu, tedy ip adresa serveru, uživatelské jméno a heslo na tento server a název databáze, kterou máme k dispozici. V našem příkladu už by bylo nastaveno vše správně. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 85 Další 3 řádky nastavují informace o tabulce s registračními údaji, tzn. název tabulky, jméno sloupce, kde jsou uloženy uživatelská jména a jméno sloupce, kde jsou uloženy uživatelská hesla. V našem příkladu je to takto: $db_nazev_tabulky = "uzivatele"; $db_sloupec_uziv_jmeno = "login"; $db_sloupec_heslo = "password"; Další dva řádky určují jména formulářových polí, ze kterých budou převzaty přihlašovací údaje. V našem příkladu: $form_uziv_jmeno = $_POST['login']; $form_heslo = hash("sha512", $_POST["password"]); Všimněme si, že heslo ukládané do $form_heslo je šifrováno, tzn. tento skript bude pracovat správně pouze s šifrovanou verzí registrace. Poslední řádek, který je potřeba nastavit, je úvodní stránka neveřejné sekce, na kterou prohlížeč přejde po úspěšném přihlášení. V našem příkladu jsme ji nastavili na stránku private.php, tedy takto: $private_url = "private.php"; Tato stránka se tedy zobrazí pouze v případě, kdy uživatel při přihlašování zadal správnou kombinaci jména a hesla. V opačném případě se zobrazí buď hláška Nesprávné heslo. Uživatel je registrován v tabulce, ale není zadáno správné heslo., to v případě, že je zadáno uživ. jméno, které je v databázi, ale nesprávné heslo, nebo hláška Uživatel není v tabulce., to v případě, že uživatelské jméno není v tabulce uživatelů vůbec. Do zbylé části skriptu overeni.php není třeba zasahovat a ani se nebudeme věnovat detailně popisu jeho funkčnosti, jelikož bychom už výrazně překročili rámec tohoto výukového materiálu. Spokojíme se se pouze s vědomím toho, že skript získá pro dané uživatelské jméno (login z formuláře) příslušné heslo v zašifrované podobě z tabulky uzivatele a porovná jej s zašifrovaným uživatelským heslem z formuláře (pole password). Na základě jejich porovnání pak postupuje tak, jak již bylo popsáno v předchozím odstavci. Nyní je potřeba zajistit, aby každou stránku v neveřejné sekci bylo možno zobrazit pouze přihlášeným uživatelům. K těmto účelů využijeme pomocný skript protection.php, který vypadá takto (Řešený příklad 132): ŘEŠENÝ PŘÍKLAD 132 7 Registrace a ověření uživatele - 86 Tento skript pak vložíme na začátek každé stránky neveřejné sekce pomocí jednoho řádku v PHP, který vypadá takto (Řešený příklad 133): ŘEŠENÝ PŘÍKLAD 133 Stránka neveřejné sekce, např. private.php, pak může vypadat třeba takto (Řešený příklad 134): ŘEŠENÝ PŘÍKLAD 134 Private Nyní se nacházíte v privátní sekci. Tyto řádky se zobrazí pouze přihlášeným uživatelům. V případě, že URL stránky zadá do prohlížeče nepřihlášený uživatel, skript protection.php ho okamžitě přesměruje na přihlašovací formulář form2.php a tudíž zbylou část neveřejné stránky neuvidí. Takto uchráníme obsah našich neveřejných stránek před očima nepřihlášených uživatelů. Pro odhlášení ze stránek lze použít následující skript (Řešený příklad 135): ŘEŠENÝ PŘÍKLAD 135 Tento skript nás odhlásí a přesměruje na přihlašovací formulář form2.html. Petr Suchánek, Jan Górecki; Portál a jeho správa A - 87 Celá procedura přihlašování a kontroly přihlášení využívá tzv. sessions. Díky sessions jsou předávána data ukládána do souboru přímo na serveru a programátor k nim přistupuje prostřednictvím speciálního pole proměnných $_SESSION. Každá stránka, která má mít přístup ke sdíleným informacím (v našem případě o stavu přihlášení uživatele), musí ještě před jakýmkoliv výstupem zavolat funkci session_start(). Kvůli podivnému chování s diskovou mezipamětí (cache) v MS Internet Exploreru, je vhodné v každém skriptu nastavit vlastní správu cachování, čehož docílíme posláním hlavičky header("Cache-control: private"). I tento příkaz je nutno zadat před jakýkoliv výstup do HTML! Jakmile máme session nastartovanou, můžeme do ní uložit nějaká data přiřazením, např. $_SESSION['moje_promenna']=hodnota; Tento příkaz zaregistruje (případně přepíše) session proměnou $moje_promenna a uloží do ní hodnotu (řetězec, číslo, ...). Samozřejmě můžeme registrovat větší počet proměnných. K této hodnotě se následně dostaneme opačným přiřazením $hodnota=$_SESSION['moje_promenna']; Pozor, na levé straně MUSÍ být proměnná. Pro zrušení proměnné ji stačí přiřadit prázdnou hodnotu ('',případně false). Pro zrušení celé session je potřeba na začátek stránky (ale až za funkci session_start()) zadat tyto dva příkazy: $_SESSION = array(); //Vyčistí všechy registrované proměnné session_destroy(); //uzavře session To jsme provedli ve skriptu logout.php. Ke zrušení session dojde automaticky po zavření prohlížeče a také po určité době nečinnosti (standardně kolem 20 minut). Celé ověřovaní uživatele pak probíhá velmi jednoduše. Nabídneme uživateli přihlašovací formulář form2.html. Pokud zde zadá správné přihlašovací údaje, což ověří skript overeni.php, je na serveru v sessions nastavena proměnná user_is_logged na hodnotu 1. Na všech neveřejných stránkách pak pomocí skriptu protection.php ověřujeme, zda je proměnná user_is_logged rovná 1. Pokud ano, uživatel je přihlášen a obsah neveřejné sekce mu zobrazíme. V opačném případě, když $_SESSION["user_is_logged"] != 1, zobrazíme uživateli pouze přihlašovací formulář. Jak lze z předchozího vidět, proces registrace a ověření uživatele již není zcela triviální záležitostí a využívá znalosti nabyté ve všech třech programovacích jazycích, se kterými jsme se v tomto materiálu setkali, tedy HTML, PHP a SQL. Na druhou stranu, jen málokterý portál se bez implementace těchto procedur obejde, tudíž i v semestrální práci bude kladen důraz na správnou implementaci právě těchto procedur, bez kterých pak nebude možno práci považovat za obhajitelnou. 8 Případová studie - 88 - 8 PŘÍPADOVÁ STUDIE V této kapitole si ukážeme praktickou ukázku velmi jednoduchého portálu, na kterém ilustrujeme využití většiny z toho, co jsme se doposud naučili. Téměř každému, kdo s programováním začíná, se stane, že ačkoli již má znalosti o všech prvcích portálu samostatně, má problém všechno dohromady propojit. V této kapitole si proto tvorbu portálu ukážeme v celé své komplexnosti. Jelikož vše, co je v ukázce použito, je již známé, omezíme se v komentářích na minimum a zaměříme se především na jednotlivé kusy kódu, ve kterých je vše obsaženo. Ukázkový portál bude věnovat významnému francouzskému hudebnímu skladateli jménem Claude Debussy a bude obsahovat informace o jeho životě, díle, nějaké multimediální soubory, zajímavosti a přihlašovací formulář. Funkční portál (pro localhost) je umístěn v ZIPu na této URL: http://suzelly.opf.slu.cz/~gorecki/others/Debussy.zip . Než začneme náš portál implementovat, vždy si nejprve dobře rozmysleme, jak by náš portál měl vypadat, co by měl obsahovat a co by měl umět. Pokud v této první fázi něco zanedbáme, nepříjemně se nám to vrátí v pozdějších fázích, kde budeme muset stále něco znova a znova předělávat. Předělávání se samozřejmě nevyhneme nikdy, ale právě díky detailnímu rozpracování návrhu portálu v první fázi se mu můžeme ze značné části vyhnout. Nejlepší je tedy vzít si obyčejnou tužku a papír a návrh portálu si pořádně rozpracovat. Až poté, co bude vše jasné, můžeme sednout k počítači a pustit se do implementace. Náš ukázkový portál, resp. jeho úvodní stránku, si rozvrhneme (na papír) takto (Obrázek 16): Obrázek 16: Návrh rozvržení (layout) portálu (jeho úvodní stránky) S využitím HTML a CSS pak můžeme implementovat toto rozvržení stránek, tzv. layout, který se bude skládat z hlavičky s fotografií, levého pruhu s obrázky, hlavní sekce a patičky. Implementaci této první stránky, kterou pojmenujeme index.php, je dobré věnovat maximální pozornost. Tato stránka bude totiž to první, co uživatel při vstupu na náš portál uvidí. Pokud hned první stránka bude nepřehledná a nevzhledně vyhlížející, nemůžeme Fotografie Claude Debussy Obrázky Patička Život Dílo Audio a video Zajímavosti Přihlásit Hlavní sekce Petr Suchánek, Jan Górecki; Portál a jeho správa A - 89 čekat, že se na ní zdrží déle než pár vteřin. Až bude první stránka (sekce) precizně navržena a zpracována, teprve potom se začneme věnovat zpracování dalších sekcí (dílo, audio a video, zajímavosti a přihlásit). Celý portál budeme formátovat pomocí stylopisu vytvořeného v CSS, který uložíme do souboru style.css, který má tento kód (Řešený příklad 136). ŘEŠENÝ PŘÍKLAD 136 /*CSS3 styl */ /*Lay-out*/ html { margin: 20px; background: white; } body { width: 840px; margin: 20px auto; padding: 10px; font: 12pt/1.5em Tahoma, Helvetica,"Helvetica neue", Arial, sans-serif; background: url(figures/blbkgnd.gif) repeat; } /*HTML 5 specific*/ header,section,article,aside,footer, nav{ display: block; /*border: black solid 1px;*/ } /*Headings*/ h1 { font: 32pt Tahoma,Helvetica,"Helvetica neue", Arial, sans- serif; } /* nastaveni seznamu odkazu v navignacni oblasti */ nav { margin: 10px 0 10px 0; height: 45px; text-align: center; clear:both !important; color: #222; background: #333; background: -moz-linear-gradient(#444, #222); background: -o-linear-gradient(#444, #222); background: -webkit-linear-gradient(#444, #222); box-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px; border: 1px solid #222; 8 Případová studie - 90 - } nav ul{ margin: 10px; } nav li{ display: inline; list-style-type: none; padding: 10px; } /* nastaveni odkazu */ nav a:link, nav a:visited { font:16pt normal Tahoma,"Helvetica neue", Arial, sans- serif; color:white; text-decoration:none; } /* kdyz na link najedu mysi */ nav a:hover { background-color: white; padding-top: 12px; padding-bottom: 12px; color: #222; } #bright { background-color: white; padding-top: 12px; padding-bottom: 12px; color: #222; } nav a { padding: 20px; } aside{ float: left; width: 150px; min-height: 400px; margin: 0 0 20px 0; padding: 10px; } section{ float: left; Petr Suchánek, Jan Górecki; Portál a jeho správa A - 91 border-left: 1px dotted black; padding-left: 20px; width: 640px; margin: 0 0 20px 0px; } article { margin: 0 0 10px 0; } footer{ clear:both !important; height: 70px; padding: 2px; text-align:center; } #flip { -moz-transform: scaleX(-1); -o-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1); filter: FlipH; -ms-filter: "FlipH"; } Tento stylopis je výsledkem mnoha hodin dá se říct designerské práce. Ve stylopisu je definován formát základních HTML prvků jako html, body, header, section, aside, footer, nav, atd. Veškeré formátování, které do stylopisu šlo přenést, je do něj přeneseno, a v ostatních souborech je formátování využito minimálně. Pokud se někdy rozhodneme vzhled stránek měnit, bude nám pak stačit upravovat tento soubor. Rozhodli jsme se, že hlavička a patička vždy zůstanou stejné (až na rozsvícení tlačítek v navidařní oblasti, viz níže) a bude se měnit pouze levý pruh s obrázky a hlavní sekce. Každá sekce tedy bude odpovídat jednomu php souboru, do kterého vložíme hlavičku a patičku pomocí PHP příkazu include a potom informace relevantní pro danou sekci. Začněme tedy implementací hlavičky header.php (Řešený příklad 137). ŘEŠENÝ PŘÍKLAD 137
                  8 Případová studie - 92 -

                  Claude Debussy

                  Francouzský hudebník

                  Není žádná teorie, jediným pravidlem je libost.

                  Výsledkem nák kódu je takováto hlavička (Obrázek 17). Petr Suchánek, Jan Górecki; Portál a jeho správa A - 93 Obrázek 17: Vzhled hlavičky Hlavička má v horní části tabulku 1 řádek x 2 sloupce. V prvním sloupci je umístěna fotka a ve druhém jméno skladatele a jeho známý citát. Ve spodní části je navigační sekce nav, ve které jsou umístěny v nečíslovaném seznamu
                    odkazy na další sekce. Abychom zajistili, že odkaz pro danou sekci je rozsvícen, využili jsme následující kousek kódu (např. pro první sekci Život) (Řešený příklad 138): ŘEŠENÝ PŘÍKLAD 138 href="index.php">Život Pokud je proměnná $menu nastavená na hodnotu 1, výsledkem zpracování PHP je HTML kód Život který zajistí rozsvícení odkazu tím, že ho nastyluje podle třídy bright ze stylopisu. V opačném případě je výsledkem zpracování PHP tento HTML kód: Život Ten odpovídá nerozsvícenému odkazu. Případ, kdy chceme rozsvítit pátou sekci Přihlásit, probereme později. V každé sekce nesmíme opomenout nastavit proměnnou $menu na nějakou hodnotu. Tu nastavíme podle toho, kterou sekci zrovna zobrazujeme. Pokud zobrazuje první sekci Život, vložíme před příkaz include("header.php"); ještě příkaz $menu = 1;. Tím zajistíme, že v hlavičce bude rozsvícen odkaz Život. V další sekci dílo před příkaz include vložíme příkaz $menu = 2;, atd. Takto lze jednoduše využít propojení PHP a HTML k implementaci této poměrně často používané funkci na většině webů. 8 Případová studie - 94 Patičku můžeme implementovat takto (Řešený příklad 139): ŘEŠENÝ PŘÍKLAD 139

                    Počet přístupů: počítadlo.abz.cz
                    Copyrights (c) 2013 Jan Górecki

                    Výsledek bude vypadat takto (Obrázek 18): Obrázek 18: Vzhled patičky Patička obsahuje počítadlo přístupů na stránky, které lze najít na této URL: http://pocitadlo.abz.cz/. Máme-li připravenou hlavičku i patičku, můžeme implementovat celou úvodní stránku index.php takto (Řešený příklad 140): ŘEŠENÝ PŘÍKLAD 140 Claude Debussy - francouzský hudebník - život

                    Achille-Claude Debussy

                    čti [ašil klód debysy] ( 22. srpna 1862, SaintGermain-en-Laye - 25. března 1918, Paříž) byl francouzský skladatel, otec a jeden z nejvýznamnějších představitelů hudebního impresionismu. Své umělecké názory sdílel s malíři a básníky, kteří se ve svých dílech snažili zachytit neopakovatelné okamžiky, prchavé vjemy a dojmy, nálady či barevné odstíny.

                    Život

                    V sedmi letech se začal učit hrát na klavír a v deseti letech, roku 1872 byl přijat na Pařížskou konzervatoř. Mezi jeho učiteli byl také varhaník César Franck a klavírista Isidor Philipp. Vynikal jako klavírista hrou z listu, rád experimentoval s disonancemi a vzpouzel se klasickým pravidlům. Veřejně hrál hlavně skladby Beethovenovy, Schumannovy a Chopinovy. Roku 1884 získal cenu Prix de Rome a v letech 1885-1887 žil ve Villa Medici v Římě, italské prostředí ho však nenadchlo. V letech 1888 a 1889 navštívil Bayreuth a Wagnerova harmonie na něj udělala velký dojem, podobně jako javánská pentatonická hudba.

                    Debussy měl řadu milostných afér a společenských skandálů, roku 1904 se seznámil s Emmou Bardac, ženou pařížského bankéře a vynikající zpěvačkou, s níž se nakonec 1908 oženil a měl s ní dceru Claude-Emmu. Zemřel na rakovinu během obléhání Paříže na jaře 1918, za dělostřeleckého bombardování byl provizorně pohřben na hřbitově Pere-Lachaise a o rok později definitivně na malém hřbitově Passy u Trocadéra.

                    8 Případová studie - 96 Výsledkem kódu je pak tato úvodní stránka (Obrázek 19): Obrázek 19: Vzhled celé uvodní stránky ukázkového portálu Všimněme si tučně zvýrazněného kódu, který zajišťuje rozsvícení prvního odkazu v navigační sekci v hlavičce. Do levého pruhu