Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Vyšší odborná škola informačních sluţeb v Praze
František Procházka
Databázová aplikace umoţňující tvorbu posudků bakalářských a absolventských prací na VOŠIS v Praze Bakalářská práce
2010
Zadávací list
Prohlašuji, ţe bakalářskou práci na téma „Databázová aplikace umožňující tvorbu posudků bakalářských a absolventských prací na VOŠIS v Praze“ jsem vypracoval samostatně. Pouţitou literaturu a podkladové materiály uvádím v přiloţeném záznamu.
_____________________ V Praze dne
_________________ František Procházka
Poděkování Chtěl bych poděkovat všem, kteří mi jakýmkoliv způsobem pomohli při zpracování této bakalářské práce. Osobní poděkování patří mým rodičům a všem blízkým, kteří mě po celou dobu studia plně podporovali a umoţnili mi dopracovat se aţ sem.
Obsah Obsah........................................................................................................................................................5 Anotace ....................................................................................................................................................7 Annotation ................................................................................................................................................8 Pouţité zkratky .........................................................................................................................................9 1.
Anotace Cílem této bakalářské práce byla optimalizace procesu tvorby hodnocení vedoucích bakalářských a absolventských prací na VOŠIS v Praze prostřednictvím nově navrhnuté a realizované databázové aplikace a zpracování přehledu a popisu pouţitých technologií. V teoretické části jsou popsány všechny vyuţité technologie s ukázkami jejich pouţití a krátkým přehledem jejich vývoje z historického hlediska. Čtenář je seznámen s hypertextovými jazyky HTML a xHTML, s kaskádovými styly CSS, se skriptovacím jazykem PHP a systémem řízení báze dat MySQL. Popsáno je praktické pouţití CSS ve spojení s xHTML a spojení PHP s MySQL. Stěţejní částí této bakalářské práce je praktická část, kde je popsána realizace zabezpečené databázové aplikace, která umoţňuje tvorbu a archivaci hodnocení vedoucích bakalářských a absolventských prací a moţnost generovat je do formátu PDF.
Annotation The aim of this bachelor work was to optimize the process of creating reviews of bachelor and graduate works at VOŠIS in Prague through the newly designed and implemented database application and review and description of the web technology. The theoretical part describes all the technology used in and describes their use and gives a short summary of their evolution from a historical perspective. The reader is familiar with hypertext languages HTML and XHTML, with Cascading Style Sheets CSS, with PHP scripting language and database management system MySQL. Practical application is described in conjunction xHTML with CSS and PHP with MySQL. The main part of this thesis is the practical part, which describes the implementation of a secured database application that let user create and store reviews of bachelor and graduate works and generate them in PDF format.
Použité zkratky CSS – Cascading Style Sheets – kaskádové styly, slouţí k definici vzhledu webových stránek HTML – HyperText Markup Language – hypertextový značkovací jazyk umoţňující propojení velkého mnoţství oddělených informací v jednom dokumentu xHTML – Hypertext Markup Language – značkovací jazyk zaloţený na základech HTML a XML XML – eXtensible Markup Language – obecný značkovací jazyk zaloţený na SGML (ovšem zjednodušený), jedná se o standardní formát pro výměnu informací vyvinutý konsorciem W3C Java Script – programovací jazykpouţívaný při tvorbě internetových stránek, zapisován je přímo do HTML kódu a je interpretován jiţ v klientském prohlíţeči JQuery – framework („nadstavba“) Java Scriptu, klade důraz na interakci mezi Java Scriptem a HTML a zjednodušuje především zápis stále se opakujících akcí PHP – Personal Home Page – programovací jazyk určený především pro webové stránky a aplikace, který je interpretován na serveru RDBMS – Relational Database Management System – systém pro správu relační databáze SQL – Structured Query Language – standardizovaný dotazovací jazyk určený pro práci s daty uloţenými v relačních databázích MySQL – strukturovaný dotazovací jazyk systému pro správu relační databáze typu klient/server ODBC – Open DataBase Connectivity – aplikační rozhraní pro přístup k datům SSL – Secure Socket Layer – vrstva mezi transportní a aplikační vrstvou poskytující zabezpečenou šifrovanou komunikaci a autentizaci komunikujících stran SGML – Standard Generalized Markup Language – univerzální značkovací jazyk W3C – World Wide Web Consortium – mezinárodní konsorcium zaměřené na vývoj webových standardů s pomocí veřejnosti PDF – Portable Document Format – meziplatformní multimediální formát vyvinutý firmou Adobe
1. Úvod Téma „Databázová aplikace umoţňující tvorbu posudků bakalářských a absolventských prací na VOŠIS v Praze“ jsem si vybral s ohledem na mé dlouholeté působení v oblasti webové tvorby a rozhodnutí specializovat se na tuto oblast i v budoucnosti a právě v oblasti tvorby posudků bakalářských a absolventských prací na VOŠIS v Praze se naskytl prostor vyuţít dosavadních znalostí a načerpat znalosti nové. Cílem práce je optimalizace procesu hodnocení vedoucích bakalářských a absolventských prací na VOŠIS v Praze prostřednictvím nově navrhované aplikace. V současném stavu jsou k tomuto procesu vyuţívána klasická papírová média, která obvykle komplikují archivaci i předávání mezi jednotlivými subjekty procesu. Vyuţití databázové aplikace v prostředí internetu ušetří vedoucím bakalářských a absolventských prací čas a zjednoduší práci, díky přístupu k formuláři pro hodnotitele přes webové rozhraní. Aplikace umoţní vést evidenci vytvořených posudků a jejich generování do formátu PDF. Vyuţito bude skriptovacího jazyka PHP ve spojení s relační databází MySQL, ve které budou všechna hodnocení archivována a bude tedy moţné i zpětně jednoduše dohledat hodnocení jednotlivých vyučujících. Zabezpečení přístupu do systému bude řešeno pomocí hesla, které dostane kaţdý uţivatel unikátní. Při tvorbě aplikace vyuţiji znalostí skriptovacího jazyka PHP ve verzi 4 ve spojení se systémem řízení báze dat MySQL, ale i jeho objektové verze 5, dále značkovacího jazyka xHTML 1.0 ve spojení s CSS a JQuery pro stylizaci uţivatelského prostředí při dodrţení standardů organizace W3C.
Teoretická část
2. SW prostředky vhodné pro tvorbu webových stránek K tvorbě webových stránek a aplikací lze vyuţít celou řadu technologií. Pokud bychom se zaměřili na tvorbu statických webových stránek, pak výběr není tak široký. Jedná se spíše pouze o výběr z verzí HTML a xHTML v kombinaci s kaskádovými styly CSS pro oddělení formátu od samotného obsahu. Cílem této práce je ovšem vytvoření dynamické databázové aplikace a při její tvorbě lze zvolit celou řadu skriptovacích a databázových jazyků a technologií. Nejčastěji vyuţívaným skriptovacím jazykem v prostředí internetu (vyuţívá ho zhruba 62% webových vývojářů) je jazyk PHP, který je nejčastěji vyuţíván ve spojení se systémem řízení báze dat MySQL. Kombinaci PHP a MySQL jsem zvolil i ve své praktické části. Mezi další nejuţívanější programovací jazyky pro tvorbu dynamických webových stránek patří ASP.NET (vyuţívá 16% webových vývojářů), Ruby (16%), Java (11%), Python (11%), Perl (Practical Extraction and Report Language - 7%) a ASP (Active Server Pages - 7%). Jako systémy pro řízení báze dat jsou kromě MySQL, který vyuţívá zhruba 70% vývojářů, vyuţívány systémy Microsoft SQL Server (20%), PostgreSQL (10%) a Oracle (7%).[22]
Obrázek 1- Využití programovacích jazyků a systémů řízení báze dat ze strany vývojářů
- 12 -
2.1.
HTML a xHTML První koncepty zaloţené na hypertextu se objevují jiţ v padesátých letech 20.
století a nadále se s ním experimentovalo na univerzitách, ovšem bez větších výsledků. Díky společnostem Apple a Microsoft se ovšem začal koncem devadesátých let běţně pouţívat a umoţnil tak i nevědeckým pracovníkům přístup k informacím v prostředí internetu. Jazyk HTML se postupem času vyvíjel a tak vznikla jeho rozšířená verze zaloţená na principech jazyka XML, tedy xHTML. Jelikoţ se jedná o nástavbu HTML, lze pouţívat všechny jeho značky, ovšem s řadou rozdílů.[4][5][20] 2.1.1. HTML a jeho historie Historie HTML sahá do padesátých let 20. století, přesněji července roku 1945, kdy v Atlantic Monthly vyšel článek „As We May Think“ od Vannera Bushe kde byl poprvé popsán systém pro prohlíţení a pořizování poznámek z rozsáhlých textů a grafiky. Další vývoj ovlivnila kniha Computer Lib/Dream Machines od Theodora Colm Nelsona, která vyšla roku 1960 a byly v ní poprvé pouţity termíny hypertext a hypermédia (spojení multimédií a textu). S hypertextem bylo na univerzitách a v dalších institucích experimentováno, ale bez větších výsledků. Průlom přinesl aţ v roce 1987 projekt Hypercard od společnosti Apple a vývoj podpůrných systémů pro Windows a Macintosh. Tyto systémy jiţ umoţňovaly uţivatelům přesouvat se mezi dílčími informacemi pomocí odkazů a bylo moţné zobrazovat „popisky“.[2][4][20] HTML i xHTML jsou hypertextové jazyky. Hypertext umožňuje propojit velké množství oddělených informací (textu, obrázků atd.) a vytvořit tak nové uspořádání pro existující informace. To znamená, že v jednom dokumentu mohou být vedle sebe umístěny informace z oddělených zdrojů.[4, s.19] Značkovací jazyk HTML neboli HyperText Markup Language vznikl na základě SGML (Standard Generalized Markup Language) – značkovací jazyk standardizovaný dle norem ISO roku 1986. Slouţí k tvorbě dokumentů obsahujících pokročilejší formátování a hypertextové odkazy. Formátování umoţňují prvky a vlastnosti, jako například element FONT umoţňující definovat vzhled a velikost - 13 -
fontu v textu nebo atribut ALIGN slouţící k zarovnání vybraného textu. Všechny prvky i vlastnosti jsou podporovány i v nejnovějších verzích HTML, ovšem zde k těmto úpravám slouţí mnohem elegantnější kaskádové styly (CSS).[4][5] 2.1.2. XHTML XHTML – Extensible Hypertext Markup Language – lze definovat jako klasické HTML doplněné o moţnosti XML. Přesnou definicí by ovšem bylo, ţe se jedná o XML, jehoţ definice typu dokumentu (DTD) obsahuje HTML. V podstatě se jedná o přeformulované HTML 4 do XML a kombinuje nejlepší vlastnosti obou. Lze tedy pouţívat klasické HTML značky, ovšem výhodou je moţnost definování značek vlastních. XML není tolerantní vůči ţádným chybám v zapsaném kódu, je tedy nutné dodrţovat správnou syntaxi. Tím odpadá dřívější nutná vlastnost prohlíţečů a tou je porozumění i chybně zapsanému kódu. Kaţdý dokument xHTML musí na svém samotném začátku obsahovat definici specifikující druh dokumentu. Momentálně je xHTML definován ve třech různých typech dokumentů (DTD): 1) Strict – exaktní verze HTML neobsahující nedoporučené atributy a značky (např. pro tvorbu rámů). Dokumenty definované jako strict se pouţívají ve spojení s kaskádovými styly. 2) Transitional – plná verze HTML, která obsahuje všechny značky a atributy (i ty, jejichţ pouţití se v xHTML uţ nedoporučuje). Dokumenty definované jako transitional jsou určeny pro pouţití bez kaskádových stylů. 3) Frameset – tato verze je určena pro tvorbu dokumentů obsahujících rámy. [4][21] 2.1.3. XHTML a HTML Jelikoţ xHTML je zaloţeno na HTML, v xHTML dokumentech lze vyuţívat všechny formátovací HTML značky, vyuţívat kaskádových stylů či skriptů napsaných v libovolném skriptovacím jazyce. Díky faktu, ţe je xHTML zaloţeno na XML modelu, je nutné zajistit validitu napsaného kódu, tedy dodrţení veškerých standardů a definic jazyka. - 14 -
Mezi konkrétní rozdíly patří fakt, ţe v xHTML je nutné psát všechny formátovací značky malými písmeny, zatímco v HTML tomu bylo přesně naopak. Ukázka kódu v HTML: <TITLE>Relativní velikost písma
Relativní velikost písma
…
Ukázka kódu v xHTML: Relativní velikost písma
Relativní velikost písma
…
Dalším rozdílem je kříţení značek. Zatímco při vykreslování webové stránky napsané v HTML dokáţe prohlíţeč tuto chybu ignorovat a vše vykreslit správně, tak u xHTMl tomu uţ tak není, zde se projevuje xHTML právě jako potomek XML a dbá na řádný zápis. Ukázka chybně zapsaného kódu v HTML, který by byl ovšem řádně vykreslen:
Ukázka tučného písma
Ukázka správně zapsaného kódu v xHTML:
Ukázka tučného písma
Podobným rozdílem je i nutnost ukončení všech párových značek v xHTML, u HTML byla při vykreslování opět jistá benevolence a i při chybějící ukončovací značce bylo vše řádně vykresleno, to se týká především odstavců, poloţek seznamů, buněk v tabulce apod.
- 15 -
Ukázka kódu v HTML, který by byl přes chybný zápis řádně vykreslen:
Odstavec obsahující dvě věty.
Každá věta na samostatném řádku.
V xHTML musí ovšem zápis vypadat takto:
Odstavec obsahující dvě věty
Každá věta na samostatném řádku
Změna na to přímo navazující je nutnost ukončení i nepárových značek. Zápis některých z těchto značek v HTML:
A jejich zápis v xHTML:
Mezi další rozdíly xHTML oproti HTML patří:
nutnost zápisu hodnot atributů jednotlivých značek do uvozovek (namísto musí být )
nemoţnost uţití minimalizovaných atributů (namísto CHECKED musí být checked=“checked“)
předformátovaný text nesmí obsahovat některé značky (uvnitř bloku <pre> se nesmí vyskytnout značky img, object, big, small, sub a sup)
v kódu stránky se nesmí vyskytnout znak & (namísto něj je nutné pouţít jeho HTML entitu &)
zákaz vnořených formulářů
povinné uţití značek a
nahrazení HTML atributu name za atribut id
[4][6][21]
- 16 -
2.2.
CSS S chaotickým vývojem HTML se objevila potřeba oddělit obsah od jeho formy.
Oddělení obsahu formátovaného pomocí HTML značek od jeho formy formátované prostřednictvím CSS přináší řadu výhod. Šablony stylů lze definovat buď přímo v HTML dokumentu nebo v externím CSS dokumentu.[8]
2.2.1.
Vývoj CSS První návrh oddělení formátování od samotné struktury dokumenty pochází
z roku 1990 a jeho autorem je Tim Berners Lee. První návrh CSS1 se objevil roku 1994 a jiţ v roce 1996 byla vydána jeho výsledná specifikace. CSS v této verzi umělo pracovat s vlastnostmi písma, textů a boxů, podporovalo klasifikační vlastnosti (např. display, white-space, list-style) a podporovalo řízení pozice, ovšem ne jako standard, jelikoţ se nacházelo stále ve fázi vývoje. Prvním webovým prohlíţečem, který CSS1 podporoval, byl Internet Explorer 3 z roku 1996 (podpora vlastností písem a barev) a ve verzi 4 jiţ dosáhla podpora CSS1 slušné úrovně, ovšem i přesto nešlo o plnou podporu a ostatní prohlíţeče na tom byly mnohem hůře, zejména Netscape, který se choval chaoticky a valnou většinu vlastností nepodporoval vůbec. To byl jeden z důvodů, proč CSS nedostalo do obliby širokých vrstev webmasterů, jelikoţ bylo velice komplikované je pouţívat tak, aby pracovaly ve většině prohlíţečů alespoň podobně. Krátce po uvedení CSS1 byla roku 1998 vydána specifikace CSS2. To přineslo především podporu více médií, lze tedy dokumentu nastavit, jakou šablonu stylů má zvolit pro vykreslení na obrazovce, při tisku nebo na projektoru. Dále přináší vylepšenou práci s písmy, nově přidává moţnost formátování tabulek, plnou podporu řízení pozice jednotlivých elementů, rozšířené moţnosti selektorů a nově lze CSS pouţít i pro formátování XML dokumentů. Jiţ v roce 1999 byly započaty práce na CSS3 a krátce poté se očekávalo jeho vydání, ovšem k tomu dodnes nedošlo. Připravovaná specifikace CSS3 je značně rozsáhlá a zřejmě proto stále nebyla publikována. Práce pracovní skupiny vyvíjející CSS3 je jiţ dlouhou dobu kritizována a například Andy Budd se jiţ dlouhou dobu zasazuje o vydání alespoň části CSS3, kterou nazývá jako CSS2.2. [18][19] - 17 -
Stěţejní je ovšem podpora webových prohlíţečů, jelikoţ do dnešních dní nedošlo ani k plné podpoře CSS2. Nejlépe si v tomto směru dlouhodobě stojí prohlíţeč Mozilla (dnes jiţ Mozilla Firefox), který se při vykreslování dokumentů snaţí plně dodrţovat standardy. [19]
Obrázek 2 - Podpora CSS3 vlastností v nejpoužívanějších webových prohlížečích
2.2.2.
Vlastnosti CSS Základní struktura webových stránek je tvořena pomocí HTML (nebo pomocí
jakéhokoliv jiného značkovacího jazyka), ovšem je třeba jí ještě definovat vzhled a právě k tomu slouţí CSS, tedy kaskádové styly. Ideální kaskádové styly se snaží dosáhnout úplného oddělení obsahu od formy (způsobu prezentace). Jinými slovy, tvoříte, spravujete a skladujete jádro obsahu webových stránek, webového serveru či aplikace (text, související obrázky, formuláře a tak dále) odděleně od jeho vizuální prezentace (jako je layout, typografie, dekorativní obrázky a podobně).[10, s.27] - 18 -
Šablonu stylů tvoří textový soubor obsahující vlastnosti jednotlivých elementů a jejich hodnoty, tedy pravidla, dle kterých se řídí vzhled definovaných prvků. Dle zadaných hodnot jádro prohlíţeče vykreslí dané prvky HTML stránky. Pomocí CSS lze definovat základní vlastnosti, které se dříve definovaly přímo pomocí HTML značek a jejich atributů, tedy např. barvu a velikost textu a zarovnání odstavce. Ovšem CSS přineslo mnohem širší moţnosti neţ jen základní formátování textu, lze pomocí něj utvořit kompletní layout webové stránky, tedy pozice a velikosti jednotlivých komponent stránky. Díky CSS lze snadno připravit rozvrţení stránky pro tisk (např. nezobrazovat obrázky a nastavit čitelnější podobu textu). CSS obsahuje ovšem i dynamické prvky, které umoţňují zobrazování či mizení jednotlivých poloţek a to i v interakci s pohybem uţivatelova kurzoru. Tyto dynamické vlastnosti slouţí také pro tvorbu rozbalovacích i víceúrovňových nabídek a nápověd.[8] 2.2.3. Výhody Jelikoţ je šablona stylů definována nezávisle na samotném obsahu webové stránky a tvoří pouze její vzhledovou vrstvu, umoţňuje zjednodušené přidávání, odstraňování nebo aktualizování obsahu bez rizika narušení layoutu celého webu. Pro celý web můţe být vyuţita jediná šablona stylů, coţ přináší moţnost zásadních změn vzhledu celého webu ve velice krátkém čase, např. pro změnu fontu celého webu bylo dříve nutné upravit všechny značky , kde byl typ písma definován, ale pomocí CSS stačí pouze přepsat definici font-family pro prvky, u kterých chceme změnu provést. Oddělení obsahové (xHTML) a vzhledové vrstvy (CSS) zjednodušuje pracovní postupy. Návrhář vizuální podoby se nemusí zaobírat obsahem a můţe se zaměřit čistě jen na vzhled webové stránky a naopak tvůrce obsahu není nucen řešit vzhledovou stránku a soustředí se pouze na kvalitu vytvářeného obsahu.
- 19 -
Dříve pomocí čistého HTML bylo velice obtíţné nabídnout uţivatelům webové aplikace moţnost nastavení vzhledu, ovšem díky CSS stačí pouze definovat dvě oddělené šablony stylů a mezi nimi nechat uţivatele pomocí individuálního nastavení přepínat. Dříve by se jednalo o modifikaci stovek souborů (dle rozsáhlosti aplikace), pomocí CSS postačí změna jednoho.[7][8] 2.2.4. Použití Definice stylů pro daný dokument lze zapsat buď přímo do jeho hlavičky (do tagu head) nebo do externí šablony stylů (soubor s příponou .css). Zde poté definujeme pravidla stylů, která se skládají vţdy ze tří prvků a to ze selektoru (identifikace prvku webové stránky, jehoţ vzhled chceme ovlivňovat), názvu vlastnosti a její hodnoty. Následující kód definuje pravidlo pro všechny odstavce, kterým nastavuje červenou barvu, podtrţení a velikost textu 12px. Prvním řádkem je komentář, který lze libovolně umístit kamkoliv v dokumentu. Při vykreslování webové stránky se obsah mezi značkami /* a */ ignoruje. /* definice odstavce */ p { color: #f00; text-transform: underline; font-size: 12px; }
Zápis přímo do hlavičky dokumentu pomocí deklarace #CDATA (to přináší další výhodu, ţe starší prohlíţeče před příchodem xHTML s velmi špatnou nebo chybovou podporou CSS budou definice stylů zde definované naprosto ignorovat): <style type=“text/css“> /* */
- 20 -
Základním a nejčastějším způsobem přiřazení stylů k dokumentu je jeho externí načtení pomocí značky . Pokud bychom definici stylů uloţili do souboru s názvem styly.css a umístili ho do stejné sloţky, kde se nachází daný dokument, celá hlavička dokumentu s načtením externí šablony stylů by pak vypadal následovně (v reálném případě by ovšem v hlavičce bylo prvků mnohem více – meta tagy, linky a popřípadě i skripty):
[5][6]
- 21 -
2.3.
PHP PHP původně vzniklo jako pomůcka při úpravě webových stránek jednotlivce,
ovšem díky jeho vysokému potenciálu a skupině nadšenců a později zkušených vývojářů se vyvinul v jeden z nejrozšířenějších webových programovacích jazyků vůbec. Jedná se o Open Source programovací jazyk kompilovaný na serveru, který je pouţitelný na většině platforem a poskytuje vysoký výkon při minimálním zatíţení serveru.[11] 2.3.1. Historie jazyku PHP Celý programovací jazyk vznikl v roce 1995 jako soukromý program Rasmuse Lerdorfa, který měl slouţit pro přidání funkcionality na jeho osobních webových stránkách (PHP = Personal Home Page). Po přeprogramování do jazyka C ovšem uvolnil je k pouţívání svým známým. Díky nim a jejich připomínkování a ţádostem o další funkcionalitu vznikla roku v roce 1996 další verze PHP/FI 2.0, která byla obohacená o funkce pro práci s daty z formulářů (FI = Form Interpreter). Roku 1998 se tým vývojářů PHP rozrostl o další osoby a Zeev Suraski a Andi Gutmans přepsali celý základ pro tuto verzi. V této fázi se jiţ nedalo mluvit o PHP jako o jazyk pouţívaný k rozšíření funkcionality domovských stránek uţivatelů. Nasazeno bylo na tisícovkách velkých serverů pracujících s velkými objemy dat. Od roku 2000 bylo vyvíjeno PHP ve verzi 4, které běţelo jiţ na novém jádře Zend engine, které přineslo především vyšší výkon a celou řadu nových funkcí a vlastností. Dne 13.7.2004 bylo představeno PHP 5 s jádrem Zend Engine II s novým objektovým modelováním. Došlo také ke kompletnímu přepisu MySQL rozšíření, vytvoření soupravy rozšířeních spolupracujících s XML a mnohým dalším vylepšením. Nejnovější verzí PHP je verze 5.3.2, která vyšla 4.3.2010. [14]
- 22 -
2.3.2. PHP – hypertext preprocessor PHP je hypertextový preprocesor, který se vyuţívá především při tvorbě dynamických webových aplikací. Jedná se o Open Source produkt, je tedy přístupný jeho zdrojový kód, který lze bezplatně pouţívat, upravovat a dál distribuovat. Oproti jeho hlavním konkurentům (Perl, Microsoft Active Server Pages – ASP, Java Server Pages – JSP a Allaire ColdFusion) nabízí:
vyšší výkonnost (i jednoduchý a nenáročný server dokáţe obslouţit miliony poţadavků denně)
rozhraní pro mnoho druhů databázových připojení (pomocí PHP se lze bez prostředníků připojit nejen k MySQL, ale také k postgreSQL, mSQL, Oracle, dbm, filePro, Hyperware, Informix, InterBase a Sybase a navíc při vyuţití ODBC – Open Database Connectivity Standard – se lze připojit k jakékoliv databázi vyuţívající ovladač ODBC včetně produktů Microsoft a jiných)
zabudované knihovny pro implementaci mnoha běžných webových úloh (práce s obrázky, připojení k různým síťovým sluţbám, odesílání emailů, práce s cookies nebo generování PDF dokumentů)
přenositelnost (PHP je k dispozici pro mnoho operačních systémů)
PHP umoţňuje vkládat vlastní skripty přímo do hypertextových stránek, ovšem oproti Java Scriptu se zdrojový kód interpretuje na serveru a klientskému browseru je prezentován pouze výsledný interpretovaný kód. Interpretace přímo na serveru přináší mnoho výhod. Jednou z hlavních je lepší interakce s dalšími serverovými aplikacemi (např. MySQL či databáze obecně) a celou interakci lze snadněji zabezpečit. Jelikoţ je výstupem čisté HTML, které dokáţe interpretovat i starší browser, není třeba provádět na straně klienta ţádné výpočty či spouštět skripty, coţ sebou přináší i přenos menších datových objemů. Hlavní - 23 -
výhodou pro vývojáře je vyšší ochrana zdrojových kódů, jelikoţ klient má přístup pouze k interpretovanému kódu. [11][14] Ovšem na druhou stranu má interpretace na serveru i své nevýhody. Interpretování jazyka PHP zatěţuje server a sniţuje interaktivou s objekty na webové stránce, pokud jí chceme zachovat, tak musíme pouţít Java Script či ještě lépe jeho framework JQuery. [14] 2.3.3. Vložení PHP do HTML PHP kód je nutné uzavírat do PHP značek, aby webový server věděl, jakou část kódu má interpretovat právě jako PHP (kde PHP kód začíná a kde končí). Vše ostatní je povaţováno za čistý HTML kód. K správnému vykonání je dále třeba celý dokument uloţit s příponou .php (nebo .phpx, kde x je číslo verze PHP, v které je dokument napsán) nebo .phtml, jinak by byly skripty obslouţeny jako prostý text. Značek PHP existuje několik druhů: 1) XML styl XML styl je doporučený pro práci s PHP3 a výše a pro pouţití v XML dokumentech. Jeho výhodou je nemoţnost vypnutí těchto značek správcem serveru, bude tedy dostupný na všech serverech. Ukázka zápisu: 2) Krátký styl Tento styl zápisu kopírující styl SGML je nejkratší a při práci tedy šetří čas. Pro jeho pouţití je nutné na serveru v konfiguračním souboru povolit short_tags, ovšem naprostá většina dnešních komerčně pouţívaných serverů má jiţ tuto volbu zapnutou. Ukázka zápisu: 3) SCRIPT styl Pro vývojáře pracující s JavaScriptem nebo VBScriptem je určen SCRIPT styl, který je převzat právě z těchto jazyků. Jedná se ovšem o zápis nejdelší. Ukázka zápisu: <script langure='php'> echo 'Hello Word!';
- 24 -
4) ASP styl Pro vývojáře pracující s Active Server Pages (ASP) je určen právě tento zápis, který je shodný s tím, který je vyuţíván právě při tvorbě ASP. Pro práci s ním je nutné v konfiguračním souboru povolit volbu asp_tags. <% echo 'Hello Word!'; %> [14]
- 25 -
2.4.
MySQL
2.4.1. MySQL a jeho historie MySQL je strukturovaný dotazovací jazyk (SQL, Structured Query Language) systému pro správu relační databáze typu klient/server ze Skandinávie. MySQL zahrnuje SQL server, klientské programy pro přístup k serveru, nástroje pro správu a programovací rozhraní.[14] Historie MySQL sahá do roku 1979, kdy švédská firma TcX, jmenovitě Michael „Monty“ Widenius, vyvinula databázový stroj UNIREG. V roce 1994 firma potřebovala SQL server pro vývoj webových aplikací, Widenius tedy začal vyvíjet nový server zaloţený na mSQL, jelikoţ pro něj byla dostupná celá řada nástrojů zdarma. Roku 1996 bylo MySQL 3.11.1 uveřejněno na internetu ve formě binárních distribucí pro Linux a Solaris. Systém pro správu relační databáze (RDBMS) je dnes nepostradatelný nástroj při tvorbě a běhu většiny webových aplikací a e-commerce řešení. Z historického hlediska se vţdy jednalo o finančně velice nákladný software a databázové stroje měli vysoké nároky na hardware, čímţ se náklady ještě zvyšovaly. V posledním desetiletí se objevilo celé hnutí za účelem tvorby vysoce výkonného softwaru za nízké ceny (či dokonce zadarmo), tedy Open Source. Situace se změnila i v oblasti hardwaru, jelikoţ dnešní osobní počítače jsou vysoce výkonné a umoţňují běh i těch nejnáročnějších aplikací. Mezi software pod hlavičkou Open Source vyuţitelný při běhu databází patří Apache, coţ je na internetu nejrozšířenější webový server, dále například programovací jazyky Perl a PHP a právě MySQL. Tyto projekty jsou většinou pouţitelné plně ke komerčním účelům a je k nim k dispozici kompletní zdrojový kód, coţ je změna, která odstraňuje dřívější majetnický model. Dříve byl zákazník v zajetí drahých produktů, které s sebou přinášely vysoké náklady na aktualizaci a samotnou správu a neposkytovali ani zdrojový kód. [14][15]
- 26 -
2.4.2. Výhody MySQL je databázový stroj, který je nejen zdarma a pracuje na většině platforem (i na těch komerčních), ale nabízí celou řadu dalších výhod:
Rychlost (Dle vývojářů se jedná o nejrychlejší databázi, kterou lze sehnat.)
Snadné používání
Podpora dotazovacího jazyka SQL
Způsobilost (K MySQL serveru se můţe najednou připojit více klientů přes různá rozhraní a mohou vyuţívat simultánně různé databáze. Programovací rozhranní jsou dostupná pro jazyky C, Perl, Java, PHP a Python, dále lze k MySQL přistupovat pomocí všech aplikací podporujících ODBC.)
Připojitelnost a zabezpečení (MySQL je plně síťový produkt, lze k němu tedy přistupovat odkudkoliv z internetu. Podporuje také řízení přístupu prostřednictvím uţivatelských práv a šifrování dat pomocí protokolu SSL.)
Přenositelnost (MySQL běţí na široké škále platforem a lze ho provozovat na hardwaru počínaje domácím PC aţ po high-end servery.)
Malá datová velikost
Další obrovskou výhodou je informační zázemí, které si MySQL za léta působení vybudovalo. K dispozici je ke kaţdé distribuci MySQL Reference Manual, který je dostupný i online, existuje i moţnost školení a odborných kurzů, či zapojení se do aktivní konference. [14][16]
- 27 -
2.4.3. PHP a MySQL V případě, ţe je nutné vybudovat web s e-komercí, nebo jakoukoliv dynamickou webovou aplikaci, je nutné zvolit správnou konfiguraci produktů. Jedním z mnoha kladných rysů PHP je jeho schopnost spolupráce s Microsoft Windows, většinou UNIX systémů a s kterýmkoliv webovým serverem. Jelikoţ MySQL je podobně všestranný, kombinace PHP a MySQL vytváří opravdu účinný nástroj a v současné době se jedná o mezi webovými vývojáři nejvyuţívanější řešení. Hlavním důvodem proč vyuţít PHP ve spojení s MySQL je moţnost generování dynamického obsahu. Abychom mohli tento obsah generovat, je nejdříve nutné připojit dokument pomocí PHP k MySQL serveru pomocí funkce mysql_connect() a vybrat databázi, s kterou se bude pracovat pomocí funkce mysql_select_db(): @mysql_connect('hostitelský server', 'uživatelské jméno', 'uživatelské heslo') or exit; mysql_select_db('jméno databáze') or exit;
V případě, ţe by se nepodařilo navázat spojení, činnost skriptu bude ukončena díky příkazu exit a skript nevypíše ţádnou chybovou hlášku, jelikoţ je toto potlačeno prostřednictvím znaku @ před názvem funkce. Pokud se ovšem celý skript úspěšně provede, pak nezbývá neţ vypsat poţadovaný data z databáze. K tomuto účelu slouţí funkce mysql_query, která na MySQL serveru spustí poţadovaný SQL dotaz a funkce mysql_fetch_row, která načte řádek, ten se následně přiřadí do proměnné $row a vypíše poţadovanou hodnotu ze zadaného sloupce: $sql = mysql_query ('SELECT * FROM název_tabulky') or exit; if ($row = mysql_fetch_row($sql) echo $row['název_sloupce'];
[14]
- 28 -
Praktická část
- 29 -
3. Realizace databázové aplikace Aplikace má za cíl optimalizovat proces tvorby hodnocení vedoucích bakalářských a absolventských prací na VOŠIS v Praze. Hlavními úkoly tedy bylo:
vyřešení zabezpečení celé aplikace, aby bylo moţné spustit aplikaci na lokálním či serveru třetí strany bez obavy o zneuţití dat
archivace jednotlivých hodnocení, aby se nejednalo o jednorázovou tvorbu a bylo moţné hodnocení vytvořit i zpětně
vytvoření seznamu jiţ vytvořených hodnocení daného uţivatele
moţnost generování hodnocení do formátu PDF
Pro formátování dokumentu jsem zvolil hypertextový značkovací jazyk xHTML 1.0 Transitional, ten umoţnil oproti HTML širší spolupráci s kaskádovými styly CSS. Pro obohacení vzhledové stránky obsahu jsem vyuţil framework JQuery. Jako skriptovací jazyk jsem pouţil skriptovací jazyk PHP, jelikoţ poskytuje celou řadu výhod a ve spojení se systémem řízení báze dat MySQL nabízí široké moţnosti s nulovými náklady. Formát PDF jsem zvolil z několika důvodů a to především pro jeho nezávislost na platformě, malou datovou velikost, vysokou kvalitu při tisku a nemoţnost následné editace.[35]
- 30 -
3.1.
Návrh aplikace Po stanovení poţadované funkcionality databázové aplikace bylo nutné
navrhnout její strukturu, tzv. mapu webu (sitemapu). Jelikoţ hlavním úkolem bylo vytvoření zabezpečené aplikace, tak při vstupu na jakoukoliv stránku aplikace se nejdříve ověří, jestli je uţivatel přihlášen a pokud ne, tak ho aplikace přesměruje na přihlašovací formulář (login.php). Další sekce vznikly na základě úkolu vytvořit archiv hodnocení daného uţivatele (moje-posudky.php) a moţnosti tvorby hodnocení bakalářských (posudek.php?typ=bakalar) a absolventských (posudek.php?typ=absolvent) prací. Hodnocení ve formátu PDF lze vygenerovat v sekci Seznam mých hodnocení prostřednictvím create-pdf.php. Poslední sekcí je Odhlášení (logout.php).
Obrázek 3 - Struktura navrhované databázové aplikace
Důleţitou součástí databázové aplikace je samotná struktura databáze. Vznikly tak čtyři základní tabulky s daty:
01_login Tabulka obsahující přihlašovací údaje o jednotlivých uţivatelích, tedy přihlašovací jméno a šifrované heslo, občanské jméno a příjmení.
02_posudek Tabulka obsahující data k jednotlivým hodnocením všech uţivatelů, tedy ID autora (provázáno s tabulkou 01_login pomocí vzájemné relace), ID typu práce (provázáno s tabulkou 03_typ_prace), jméno vedoucího práce
- 31 -
a absolventa, název práce, známky jednotlivých částí hodnocení a známku celkovou a dále den vytvoření a připomínky.
03_typ_prace Tabulka obsahuje slovní názvy typu práce.
04_znamka Tabulka obsahující slovní názvy jednotlivých známek.
Obrázek 4 - Struktura navrhované databáze
- 32 -
3.2.
Zabezpečení aplikace Bezpečnost aplikací je v současnosti často řešeným tématem a jedná se o jednu
z jejích nejdůleţitějších částí, jelikoţ jsou ve hře často citlivá data a tak je tomu i v tomto případě. Základním prvkem bezpečnosti je samozřejmě bezpečné heslo a z toho důvodu není dobré ho nechat tvořit samotné uţivatele. V hesle by se měly vyskytnout nejen malá a velká písmena, ale nejlépe také číslice a speciální znaky (např. 12s*S/6l5sX+oA=.€). Heslo v databázi by mělo být uloţeno v podobě haše originálního hesla. Většina starších aplikací vyuţívá hašovací funkce MD5, která byla ovšem prolomena a zdokumentována uţ v roce 2004. Pouţil jsem tedy funkci SHA1 a to navíc v kombinaci s náhodným řetězcem nazývaným SALT, tedy sha1(SALT.heslo). Jako SALT jsem zvolil řetězec $€2#Lcj2+|nBWodA*m/. Důvodem jeho pouţití je ztíţení moţnosti rekonstrukce původního hesla z dané haše případným útočníkem. [23][24][25] Pro vloţení údajů o uţivateli včetně hesla jsem vyuţil následující skript: $salt = "$€2#Lcj2+|nBWodA*m/"; $heslo = sha1("12s*S/6l5sX+oA=.€".$salt); if(MYSQL_QUERY("INSERT INTO 01_login VALUES ('','[email protected]','$heslo','David','Klimánek')")) echo "hotovo";
Pro přihlášení uţivatelů slouţí jednoduchý přihlašovací formulář (login.php), kde uţivatel aplikace zadá uţivatelské jméno a heslo.
Obrázek 5 - Přihlašovací formulář
- 33 -
Formulář směřuje na skript umístěný v souboru login-kontrola.php. Tento skript porovná uţivatelské jméno a haš hesla z databáze se zadanými údaji. Pokud skript nalezne v databázi zadané údaje, uloţí údaje (uţivatelské jméno a příjmení, uţivatelské jméno a heslo, ID uţivatele a čas vypršení platnosti relace) vytvářené relace pomocí funkce session_register() a přesměruje uţivatele na úvodní stranu aplikace (index.php).[26][27] Pokud skript uţivatele v databázi nenalezne, přesměruje ho zpět na přihlašovací formulář (login.php) pomocí funkce header(). Při dalším uţívání aplikace se vţdy při načítání kaţdé stránky kontroluje, jestli je uţivatel přihlášen pomocí funkce session_is_registered() a jestli nevypršel čas spojení. Pokud relace existuje a čas spojení nevypršel, pokračuje se dále ve zpracování poţadované stránky, jinak je uţivatel přesměrován na přihlašovací formulář. Kontrolní skript je umístěn v inc/user-check.inc.php a je vkládán na začátek kaţdé stránky pomocí funkce include(). Celý skript vypadá následovně: if(!session_is_registered(myusername)){ header("location:login.php?error=3"); exit; } elseif ($_SESSION['time'] < Time()) { Session_Destroy(); header("location:login.php?error=2"); exit; }
- 34 -
3.3.
Zadávací formulář a jeho zpracování K samotné tvorbě hodnocení vedoucích bakalářských a absolventských prací
slouţí jednoduchý formulář umístěný v posudek.php. Pro jeho správné fungování musí být v URL uveden parametr typ a to buď posudek.php?typ=bakalar pro vytvoření hodnocení bakalářské práce nebo posudek.php?typ=absolvent pro vytvoření hodnocení absolventské práce. Pomocí pole $_GET['typ'] se načte typ práce do proměnné $typ a na základě její hodnoty se nastavují další hodnoty potřebných proměnných. $typ = $_GET['typ']; if ($typ == "bakalar") { $h1 = 'bakalářské'; $vedouci = 'Vedoucí bakalářské práce'; $absolvent = 'Bakalář'; $typ_db = 1; // typ práce pro databázi $disable = 'disabled="disabled"'; // použito u checkboxů u Náročnosti tématu } elseif ($typ == "absolvent") { $h1 = 'absolventské'; $vedouci = 'Jméno vedoucího práce'; $absolvent = 'Absolvent'; $typ_db = 2; // typ práce pro databázi }
Hodnoty jméno vedoucího práce a datum se vyplňují automaticky, ale je moţné je samozřejmě upravit dle potřeby. Do inputu jmeno_vedouciho se nahrávají hodnoty polí $_SESSION['user_jmeno'] a $_SESSION['user_prijmeni'] vytvořené při přihlášení a načtené z databáze. Do inputu den se nahrává aktuální den ve tvaru RRRR-MM-DD pomocí funkce date(). Pro odeslání formuláře a následné uloţení dat do databáze je nutné vyplnit všechny údaje, pokud nejsou vyplněny, objeví se varovné hlášení s ţádostí o vyplnění všech polí. Pokud je vše vyplněno správně, zpracují se všechna odeslaná data pomocí metody POST, vše se uloţí do databáze do tabulky 02_posudek a uţivatel je pomocí funkce header() přesměrován do sekce Seznam mých hodnocení.
- 35 -
Obrázek 6 - Formulář pro vytvoření hodnocení vedoucího bakalářské práce
- 36 -
3.4.
Seznam všech hodnocení uživatele Po vytvoření hodnocení bakalářské nebo absolventské práce je uţivatel
přesměrován do sekce Seznam mých hodnocení. V této sekci se nachází přehled všech doposud vytvořených hodnocení daného uţivatele a má zde moţnost vygenerovat jakékoliv toto hodnocení do formátu PDF. K vytvoření seznamu je vyuţito jednoduchého skriptu, který vypíše všechny poloţky z databáze jako řádky tabulky. Vypisovány nejsou všechny informace, chybí výpis jednotlivých dílčích hodnocení, ten lze ovšem nalézt ve vygenerovaném hodnocení ve formátu PDF. Záznamy jsou vypisovány z databáze pomocí následujícího SQL dotazu: SELECT * FROM 02_posudek JOIN 03_typ_prace ON 02_posudek.typ=03_typ_prace.id03 JOIN 04_znamka ON 02_posudek.znamka=04_znamka.id04 WHERE id01='".$_SESSION['user_id']."' ORDER BY 02_posudek.den DESC
Pro stylizaci a větší interakci uţivatelského rozhraní je vyuţito frameworku JQuery a jeho knihovny jquery.tooltip. Pomocí této knihovny se po najetí myši na informační ikonu zobrazí poznámky vedoucího k práci a po najetí myši na ikonu pro generování PDF se zobrazí popis. Pozadí řádků tabulky je obarveno také prostřednictvím JQuery.[28]
- 37 -
Obrázek 7 – Náhled sekce Seznam mých hodnocení s ukázkovými daty
- 38 -
3.5.
Generování hodnocení do formátu PDF Skriptovací jazyk PHP sám o sobě nemá zabudované funkce pro tvorbu
dokumentů ve formátu PDF, proto je nutné vyuţít externích tříd. Projektů zabývajících se generováním PDF prostřednictvím PHP tříd je celá řada. Mezi nejvyuţívanější a nejpovedenější třídy patří PDFlib (http://www.pdflib.com/), mPDF (http://mpdf.bpm1.com/), TCPDF (http://www.tcpdf.org) a FreePDF (http://www.fpdf.org/). Pro účely generování hodnocení vedoucích bakalářských a absolventských prací nejlépe poslouţí třída FPDF (FreePDF), jelikoţ je nejvhodnější pro tiskové pouţití. Zápis kódu prostřednictvím FPDF je poněkud zdlouhavý a těţkopádný, ale výsledek je precizní. [29][30][31][32] 3.5.1. FPDF a čeština Pouţití českých znaků v dokumentu ve formátu PDF generovaném pomocí třídy FPDF je velice problematické, ovšem ne neřešitelné. Knihovna FPDF obsahuje několik vlastních písem (ve sloţce font), ty ovšem nepodporují české znaky, je tedy nutné si vygenerovat vlastní písma, která tyto znaky obsahují. To lze buď pomocí přiloţené třídy MakeFont, nebo s vyuţitím online generátoru na adrese http://fpdf.fruit-lab.de/ (tato moţnost je výrazně jednodušší).[33] Pro vytvoření písem obsahujících české znaky jsem vyuţil online generátoru písem pro FDPF a vytvořil písmo Arial v normální a tučné verzi. Po vygenerování je nutné umístit vygenerované soubory (jsou celkem čtyři, vţdy se stejným názvem, ale s koncovkami .php, .afm, .t1a a .z) do adresáře font. Vytvořené písmo lze poté pouţít při tvorbě PDF následovně: $pdf->AddFont('arial_n', '', 'd8193948bb9fefa6696621749e87cb96_arial.php'); $pdf->AddFont('arial_b', '', 'cdd1baf5b0debac2b26019fbeac10cdf_arialbd.php'); $pdf->SetFont('arial_b', '',8); // tučné o velikosti 8
Třída FPDF nepodporuje kódování UTF-8, to jsem ovšem vyuţil na celém webu a v databázi. Při vkládání textů do generovaného dokumentu ve formátu PDF bylo tedy nutné převádět všechny texty do kódování ISO-8859-2 nebo Windows-1250, k tomuto účelu jsem si vytvořil jednoduchou funkci:
3.5.2. Generování výsledného dokumentu ve formátu PDF Výsledný dokument s hodnocením vedoucího práce ve formátu PDF se generuje pomocí skriptů v create-pdf.php. Aby vše fungovalo správně, musí být skriptům předány z URL tři potřebné parametry a to posudek (unikátní ID hodnocení v databázi), user (unikátní ID autora hodnocení) a typ (typ práce – bakalářská nebo absolventská). Pro načtení informací o hodnocení z databáze slouţí tento SQL dotaz: SELECT * FROM 02_posudek JOIN 04_znamka ON 02_posudek.znamka=04_znamka.id04 WHERE id01='".$user."' AND id02='".$posudek."' ORDER BY den DESC
Stěţejní pouţité metody při generování dokumentu s hodnocením vedoucích:
Cell() Metoda vytvoří buňku, které lze nastavit ohraničení, barvu pozadí, tok textu a vloţit do ní text.
Write() Tato metoda vytiskne text od aktuální pozice a při dosaţení konce řádku text automaticky zalomí.
Image() Metoda vloţí obrázek, kterému lze nastavit rozměry a pozici.
Ln() Metoda vloţí řádek s nastavitelnou výškou.
Output() Metoda odešle výsledný dokument k danému cíli. Lze nastavit, jestli se má pouţít zásuvný modul prohlíţeče, nebo nabídnout staţení souboru.[34] - 40 -
Na základě parametru z URL se nastaví pozadí dokumentu. Pokud je parametr roven 1, pak se jedná o bakalářskou práci a pouţije se dané pozadí, pokud je roven 2, pouţije se pozadí pro absolventskou práci. Pozadím je myšlen klasický nevyplněný formulář doposud pouţívaný pro hodnocení vedoucích, do kterého se doplní data z databáze. Funkce tvořící toto pozadí: function Pozadi ($typ) { if ($typ == 1) { $this->Image('img/vedouci_bakalarske_prace.jpg',0,0,200); } elseif ($typ == 2) { $this->Image('img/vedouci_absolventske_prace.jpg',0,0,200); } }
Pole vedoucí práce, jméno absolventa a název práce jsou řešeny pomocí metody Cell(), data z databáze jsou tedy vkládána do staticky umístěných buněk. Pro vyplnění jednotlivých známek jsem zvolil metodu, kdy se vkládá obrázek (kříţek, který můţe být kdykoliv jednoduše zaměněn za jakýkoliv jiný) na pozice kolonek s dílčím hodnocením prostřednictvím metody Image(). Řešit to lze i pomocí vkládání buňky s textovým „X“, ale tato metoda je náročnější na zapsaný kód a zhoršuje tím editovatelnost celého řešení. Samotná funkce řešící vyplnění známek má jako vstupní parametry všechny známky dílčího hodnocení načítené z databáze. Pro ukázku takto vypadá rozhodovací blok pro známku z Náročnost tématu na teoretické znalosti: switch($narocnost_teorie): case "1": $this->Image($img,$i,93,$s); break; case "2": $this->Image($img,$ii,93,$s); break; case "3": $this->Image($img,$iii,93,$s); break; case "4": $this->Image($img,$iv,93,$s); break; endswitch;
V tomto bloku je vyuţito několika proměnných, které jsou společné pro všechny rozhodovací bloky a to: $i $ii $iii $iv $img $s
= = = = = =
92; 99.3; 106.8; 113.5; 'img/x.jpg'; 3;
// // // // // //
pozice X pro známku pozice X pro známku pozice X pro známku pozice X pro známku cesta k obrázku velikost obrázku
- 41 -
1 2 3 4
Navrţená známka a datum jsou opět vkládány pomocí metody Cell(), ovšem datum bylo nutné převést z databázového formátu RRRR-MM-DD do standartního středoevropského formátu DD.MM.RRRR. Zatímto účelem jsem vytvořil následující jednoduchou funkci: function Datum($od) { $od=$od[8].$od[9].".".$od[5].$od[6].".".$od[0].$od[1].$od [2].$od[3]; return $od; }
Posledním elementem, který v hodnocení vedoucího nesmí chybět je pole Přípomínky a otázky vyţadující doplnění. To se ovšem nalézá na straně 2, proto bylo nutné pomocí metody AddPage() vytvořit novou stranu a na ní pomocí metody Write() umístit daný text. Výsledný generovaný PDF dokument lze prostřednictvím metody Output() uţivateli nabídnout několika způsoby. Tato má dva parametry a to název souboru (string) a cíl dokumentu (string). Moţnosti nastavení jsou následující:
Output("nazev_souboru.pdf","I") Dokument se otevře pomocí zásuvného modulu webového prohlíţeče (pokud je k dispozici). Název souboru se pouţije v případě, ţe uţivatel zvolí moţnost „Uloţit jako“.
Output("nazev_souboru.pdf","D") Dokument se odešle prohlíţeči s poţadavkem k vynucenému staţení se zadaným názvem souboru.
Output("nazev_souboru.pdf","F") Soubor se uloţí na server pod zadaným názvem (lze zadat i cestu kam).
Output("nazev_souboru.pdf","S") Vrátí dokument jako string (název souboru je ignorován). [34]
V tomto případě jsem zvolil druhou moţnost: $pdf->Output($_GET['posudek']."-hodnoceni.pdf","I");
- 42 -
Obrázek 8 - Náhled strany 1 vygenerovaného dokumentu ve formátu PDF
- 43 -
4. Vlastní přínos Při tvorbě databázové aplikace umoţňující tvorbu bakalářských a absolventských prací na VOŠIS v Praze jsem setkal s mnoha problémy, jejichţ řešení mě obohatilo o celou řadu zkušeností, které v praxi ještě mnohokrát vyuţiji. Jedním ze zásadních problémů byla podobnost výsledného dokumentu s dokumentem v současnosti pouţívaným, při generování veškerého obsahu toho nebylo moţné na 100% dosáhnout, proto jsem zvolil řešení, kdy se původní formulář vkládá do PDF jako pozadí a generuje se pouze jeho obsah. Tím se zaručila 100% podobnost výsledného PDF dokumentu s původním formulářem a sníţil se tak i objem kódu potřebný ke generování. Vytvořit popisovaný systém generování dokumentů ve formátu PDF byl velice náročný úkol s mnoţtvím překáţek (např. FPDF nepodporuje kódování UTF-8, které jsem pouţil napříč celou aplikací; problém s generováním textů obsahujích české znaky) a vyţadoval nastudování obsáhlé dokumentace a osvojení si objektových principů ve spojení s PHP. Velice pracnou záleţitostí bylo vytvoření účinného zabezpečení aplikace, aby nedošlo k ohroţení dat ze stran útočníků. Nakonec se mi podařilo vyvinout systém, který pracuje se zatím neprolomeným šifrováním a při kaţdém načtení stránky ověřuje, jestli je uţivatel přihlášen a jestli nevypršel časový limit spojení. Jedná se tedy o vcelku sofistikované řešení.
- 44 -
5. Závěr Cílem této bakalářské práce byla optimalizace procesu tvorby hodnocení vedoucích bakalářských a absolventských prací na VOŠIS v Praze. Domnívám se, ţe tento cíl bys splněn, protoţe jsem navrhl a realizoval funkční zabezpečenou aplikaci, která umoţňuje nejen tvorbu hodnocení, ale i jejich archivaci a moţnost generování těchto hodnocení do formátu PDF. Práce je rozdělena na teoretickou a praktickou část. V teoretické části jsem popsal technologie vyuţité v praktické části. Jedná se zejména o shrnutí práce s hypertextovými jazyky HTML a xHTML, s kaskádovými styly CSS, se skriptovacím jazykem PHP a systémem řízení báze dat MySQL. V této části jsem se zabýval jinými technologiemi pouze okrajově, protoţe jsem se snaţil popsat nejvyuţívanější technologie současné webové tvorby. Zaměřil jsem se také na vysvětlení praktického pouţití CSS ve spojení s xHTML a spojení PHP s MySQL. Teoretická práce dále objasňuje rozdíly mezi jazyky HTML a xHTML, jejich historický vývoj, výhody pouţití CSS, historii PHP a MySQL a jejich výhody a vloţení PHP skriptů do HTML. Praktická část se zaměřuje na popis realizované webové aplikace. V této aplikaci jsem úspěšně vyřešil a v předloţeném textu popsal realizaci zabezpečení databázové aplikace pomocí přihlašovacího formuláře, který ověřuje šifrovaný hash z databáze se zadaným heslem a následně vytvoří relaci, která je ověřována při kaţdém znovunačtení aplikace. Dále jsem úspěšně vyřešil tvorbu a archivaci hodnocení vedoucích bakalářských a absolventských prací a jejich moţnost generovat je do formátu PDF. Toho jsem docílil tak, ţe všechna vytvářená hodnocení jsou ukládána do databáze, coţ umoţňuje jejich archivaci a následnou práci s nimi. Vytvořená aplikace neřeší tvorbu hodnocení oponentů bakalářských a absolventských prací, protoţe to bylo nad rámec zadaného úkolu. Další rozvoj aplikace by mohl vést k integraci administrátorského účtu, který by umoţňoval správu účtů, hesel a všech hodnocení.
- 45 -
6. Použitá literatura 1. VAN DUYNE, Douglas K.; LANDAY, James A.; HONG, Jason I. Návrh a tvorba webů – vytváříme zákaznicky orientovaný web. 1. Brno : CP Books a.s., 2005. 672 s. ISBN 80-251-0508-3 2. DELLWIG, Ingo. HTML 4 - Příručka tvůrce webu. 1. Praha : Grada Publishing a.s., 2002. 272 s. ISBN 80-247-0297-5 3. BOUMPHREY, Frank; GREER, Cassandra; REGGETT, Dave; RAGGETT, Jenny; SCHNITZENBAUMER, Sebastian; WUGOFSKI, Ted. xHTML – Průvodce vývojáře. 1. Praha : Mobil Media a.s., 2002. 479 s. ISBN 80-86593-14-2 4. PÍSEK, Slavoj. HTML a xHTML - začínáme programovat. 1. Praha : Grada Publishing a.s., 2003. 256 s. ISBN 80-247-0571-0 5. DRUSKA, Peter. CSS a xHTML – Tvorba dokonalých webových stránek krok za krokem. 1. Praha : Grada Publishing a.s., 2006. 200 s. ISBN 80-247-1382-9 6. CASTRO, Elisabeth. HTML, xHTML a CSS – Názorný průvodce tvorbou WWW stránek. 1. Brno : Computer Press a.s., 2007. 438 s. ISBN 978-80-251-1531-2 7. ZELDMAN, Jeffrey. Tvorba webů podle standardů – xHTML, CSS, DOM, ECSMAScript a dalších. 1. Brno : Computer Press a.s., 2004. 410 s. ISBN 80-251-0347-1 8. CYROŇ, Miroslav. CSS – Kaskádové styly. 1. Praha : Grada Publishing a.s., 2006. 340 s. ISBN 80-247-1420-5 9. BUDD, Andy. CSS – Filtry, hacky a pokročilé postupy. 1. Brno : ZONER software, s.r.o., 2007. 270 s. ISBN 978-80-86815-54-1 10. CROFT, Jeff; LLOYD Ian; RUBIN, Dan. Mistrovství v CSS. 1. Brno : Computer Press a.s., 2007. 409 s. ISBN 978-80-251-1705-7 11. BRÁZA, Jiří. PHP 4 - učebnice základů jazyka. 1. dotisk. Praha : Grada Publishing a.s., 2003. 224 s. ISBN 80-247-0442-0. 12. LARVIN, Peter. PHP – objektově orientované. 1. Praha : Grada Publishing a.s., 2009. 224 s. ISBN 978-80-247-2137-8. 13. BRÁZA, Jiří. PHP 5: začínáme programovat. 1. Praha : Grada Publishing a.s., 2005. 244 s. ISBN 80-247-1146-X. 14. WELLING, Luke; THOMPSON, Laura. PHP a MySQL – Rozvoj webových aplikací. 2. Praha : SoftPress s.r.o., 2004. 910 s. ISBN 80-86497-60-7. 15. STEPHENS, Ryan K.; PLEW, Ronald R. Naučte se SQL za 21 dní. 1. Brno : Computer Press a.s., 2004. 581 s. ISBN 80-722-6870-8 16. DUBOIS, Paul. MySQL profesionálně. 1. Praha : Mobil Media a.s., 2003. 1071 s. ISBN 80-86593-41-X - 46 -
17. KOVACICH, Dr. Gerald L. Průvodce bezpečnostního pracovníka informačních systémů. 1. Brno : UNIS Publishing, s.r.o., 2000. 197 s. ISBN 80-86097-42-0 18. HASSMAN, Martin. Lupa.cz : Server o českém internetu [online]. 2007-07-25 [cit. 2010-0426]. Quo vadis, CSS?. Dostupné z WWW: . 19. SMITH, David. Deep Blue Sky : web design and development [online]. 2009 [cit. 2010-04-26]. Browser support for CSS3 and HTML5. Dostupné z WWW: . 20. SHANNON, Ross. HTML Source : HTML Tutorials [online]. 2010-05-08 [cit. 2010-05-05]. The History of HTML. Dostupné z WWW: . 21. W3C [online]. 2002 [cit. 2010-05-05]. XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition). Dostupné z WWW: . 22. Web Directions [online]. 2010 [cit. 2010-05-10]. State of Web Development 2010 Results. Dostupné z WWW: . 23. PHP triky [online]. 2005 [cit. 2010-05-11]. Ukládání hesel. Dostupné z WWW: . 24. KLÍMA, Vlastimil. Root.cz [online]. 2004-05-25 [cit. 2010-05-11]. Hašovací funkce MD5 a další prolomeny!. Dostupné z WWW: . 25. MyEgo.cz [online]. 2010-01-24 [cit. 2010-05-11]. Přihlášení uţivatele a ukládání hesla v databázi. Dostupné z WWW: . 26. PHP.net [online]. 2008, 2010-04-30 [cit. 2010-05-11]. Session Handling. Dostupné z WWW: . 27. LHOTÁK, Jaroslav. Interval.cz [online]. 2001-03-01 [cit. 2010-05-11]. Pracujeme se session v PHP. Dostupné z WWW: . 28. ZAEFFERER, Jörn. Bassistance.de [online]. 2006 [cit. 2010-05-13]. JQuery plugin: Tooltip. Dostupné z WWW: . 29. ZÁBOJNÍK, Ondřej. Interval.cz [online]. 2003-11-25 [cit. 2010-05-13]. Vytváření dokumentů PDF v PHP. Dostupné z WWW: . 30. Linuxsoft.cz [online]. 2004-10-15 [cit. 2010-05-13]. PHP (56) - Tisk a PDF. Dostupné z WWW: . 31. HULÁN, Radek. MyEgo.cz [online]. 2004-05-01 [cit. 2010-05-13]. PHP skript na automatické generování PDF souborů. Dostupné z WWW: .
- 47 -
32. HOUŢVIČKA, Jakub. Jakub Houžvička - Webdesign [online]. 2009-07-13 [cit. 2010-05-13]. Jak generovat PDF na webovém prostředí v PHP?. Dostupné z WWW: . 33. ZACHAR, Jiří. Zaachi.com [online]. 2008-09-02 [cit. 2010-05-13]. FPdf: jak na české znaky. Dostupné z WWW: . 34. FPDF Library : PDF generator [online]. 2001, 2008-08-03 [cit. 2010-05-13]. Dostupné z WWW: . 35. Adobe.com [online]. 2010 [cit. 2010-05-13]. Adobe and PDF. Dostupné z WWW: .
- 48 -
7. Přílohy Příloha 1 - Zdrojový kód index.php
Administrace hodnocení závěrečných prací
<strong>Vítejte v administračním systému závěrečných prací VOŠIS v Praze. Tento systém Vám pomůže vytvořit snadno a rychle hodnocení Vámi vedené práce a umožní Vám vygenerovat PDF soubor s tímto hodnocením.
V sekci <strong>Seznam mých hodnocení Hodnocení do formátu PDF lze generovat i zpětně pro všechna Vaše dosavadní hodnocení, která jste v tomto systému vytvořili.
// Počet vybraných záznamů (měl by být roven 1) $count = mysql_num_rows($result); if($count==1){ // Zaregistrování údajů relace a redirect na "index.php" session_register("myusername"); session_register("mypassword"); session_register("user_id"); session_register("user_jmeno"); session_register("user_prijmeni"); session_register("time"); header("location:index.php"); } else { header("location:login.php?error=1"); } ?>
- 56 -
Příloha 6 – Zdrojový kód moje-posudky.php
Seznam Vašich posudků
V této sekci máte možnost si prohlédnout veškerá Vaše dosavadní hodnocení k závěrečným pracem studentů VOŠIS v Praze (absolventské i bakalářské práce). Kdykoliv je třeba lze právě zde vygenerovat PDF soubor s daným hodnocením.
Prozatím jste nevložil/a žádný posudek.'; } else { echo '