VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
S y s t é m p ro s p r á v u p o r a d n y na VŠPJ Bakalářská práce
Autor: Michal Juřina Vedoucí práce: PhDr. Eva Půlkrábková Jihlava 2013
Abstrakt Tato bakalářská práce se zabývá tvorbou aplikace, která bude sloužit pro správu studentské poradny. V aplikaci je možné plánovat schůzky a jiné činnosti. Zároveň je možné uchovávat a modifikovat informace o návštěvnících poradny. Samozřejmostí je statistika údajů ve formě grafů, stejně jako jejich výstup do formátu PDF. Práce je realizována pomocí PHP,XHTML a MySQL.
Klíčová slova Poradna, Systém pro správu, PHP, XHTML, MySQL
Abstract The main aim of this bachelor thesis is a creation of an application that would administrate a student advisory bureau. Scheduling meetings and other activities can be done in the application. The application also makes it possible to store and modify information about visitors of the bureau.. Data statistics in the form of graphs as well as their output to PDF are a natural part of the application. The goal is accomplished by using PHP, XHTML and MySQL.
Keywords Student advisory bureau, Management system, PHP, XHTML, MySQL
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl/a jsem seznámen/a s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne ...................................................... Podpis
Poděkování Na tomto místě bych chtěl poděkovat především své vedoucí bakalářské práce PhDr. Evě Půlkrábkové za navržené téma. Dále panu Ondřeji Benešovi za poskytnutí odborných rad a vynaloženého času. V neposlední řadě také své rodině za podporu a shovívavost, kterou mi projevovali během celého mého studia.
Obsah Abstrakt ......................................................................................................................................... 3 Klíčová slova .................................................................................................................................. 3 Abstract ......................................................................................................................................... 3 Keywords ....................................................................................................................................... 3 Poděkování .................................................................................................................................... 5 1
Úvod a motivace ................................................................................................................... 9
2
Požadavky na práci ............................................................................................................. 10
3
2.1.
Tabulka požadavků na aplikaci .................................................................................... 10
2.2.
Architektura ................................................................................................................ 11
2.3.
Použité technologie..................................................................................................... 11
2.4.
Existující řešení ............................................................................................................ 11
Nástroje pro vytvoření webové aplikace............................................................................ 12 3.1.
4
PHP .............................................................................................................................. 13
3.1.1.
Historie PHP ............................................................................................. 13
3.1.2.
O PHP ....................................................................................................... 13
3.1.3.
Základní prvky .......................................................................................... 14
3.2.
(X)HTML....................................................................................................................... 15
3.3.
CSS ............................................................................................................................... 15
3.4.
Databáze MySQL ......................................................................................................... 16
3.5.
Dotazovací jazyk SQL ................................................................................................... 16
Datový model ..................................................................................................................... 18 4.1.
Popis datového modelu .............................................................................................. 18
4.2.
Popis Entit ................................................................................................................... 18
4.2.1.
Entita owner .............................................................................................. 18
4.2.2.
Entita tab_klient ........................................................................................ 18
4.2.3.
Entita tab_udalost ..................................................................................... 19
4.2.4.
Entita tab_type .......................................................................................... 19
4.2.5.
Entita tab_obor .......................................................................................... 19
4.2.6.
Entita tab_kontakt ..................................................................................... 19
4.2.7.
Entita tab_popis ........................................................................................ 20
4.2.8.
Entita tab_barvy ........................................................................................ 20
4.2.9.
Entita tie_typ_klient .................................................................................. 20
4.2.10. 4.3.
Entita tie_udalost_klient........................................................................ 20
E–R model ................................................................................................................... 21
4.4. 5
6
7
Vývojová prostředí ............................................................................................................. 24 5.1.
MySQL Workbench...................................................................................................... 24
5.2.
NetBeans ..................................................................................................................... 24
5.3.
Vývojové prostředí WAMP .......................................................................................... 24
Zabezpečení webových aplikací ......................................................................................... 26 6.1.
Bezpečnost na straně serveru ..................................................................................... 26
6.2.
SQL Injection ............................................................................................................... 26
6.3.
Heslo............................................................................................................................ 27
Popis implementace ........................................................................................................... 28 7.1.
Adresářová struktura .................................................................................................. 28
7.1.1.
Kořenový adresář ...................................................................................... 28
7.1.2.
Adresář Class ............................................................................................ 28
7.1.3.
Adresář Ext ............................................................................................... 28
7.1.4.
Adresář Inc ................................................................................................ 28
7.1.5.
Adresář CSS .............................................................................................. 28
7.1.6.
Adresář Img .............................................................................................. 29
7.1.7.
Adresář html2pdf ...................................................................................... 29
7.2.
8
Popis atributů .............................................................................................................. 22
Jádro aplikace .............................................................................................................. 29
7.2.1.
Přihlášení do aplikace ............................................................................... 29
7.2.2.
Konfigurační soubory ............................................................................... 30
7.2.3.
Soubor qry.php.......................................................................................... 30
7.2.4.
Soubory pro export ................................................................................... 30
7.2.5.
Soubor Template.php ................................................................................ 31
7.2.6.
Soubor url.php .......................................................................................... 31
7.2.7.
Soubor func.php ........................................................................................ 32
7.2.8.
Soubor graph.php ...................................................................................... 32
7.2.9.
Soubory začínající act_ ............................................................................. 32
7.2.10.
Soubory začínající form_ ...................................................................... 33
7.2.11.
Soubor Calendar.php ............................................................................. 33
Systém ................................................................................................................................ 35 8.1.
Grafický vzhled ............................................................................................................ 35
8.2.
Přihlášení ..................................................................................................................... 35
8.3.
Menu ........................................................................................................................... 35
8.3.1.
Přidej klienta ............................................................................................. 35
8.3.2.
Přehled klientů .......................................................................................... 35
9
8.3.3.
Statistiky ................................................................................................... 36
8.3.4.
Typ ............................................................................................................ 36
8.3.5.
Obor .......................................................................................................... 36
8.3.6.
Události ..................................................................................................... 36
8.3.7.
Kalendář a Kalendář II .............................................................................. 37
Závěr ................................................................................................................................... 38
9.1.
Zhodnocení práce............................................................................................................ 38
9.2.
Možnosti rozšíření ........................................................................................................... 38
10
Seznam použité literatury .................................................................................................. 39
11
Seznam obrázků ................................................................................................................. 40
12
Seznam tabulek .................................................................................................................. 41
13
Seznam použitých zkratek .................................................................................................. 42
14
Seznam příloh ..................................................................................................................... 43
A.
Obsah přiloženého CD ..................................................................................................... 43
1 Úvod a motivace Jako téma práce jsem si zvolil „Systém pro správu poradny na VŠPJ “. Téma jsem si vybral při hodinách psychologie s paní Půlkrábkovou. Zde se zmínila, že by takový systém školní poradna uplatnila. Činnost poradny na škole považuji za důležitou službu studentům, to byl jeden z důvodů, proč jsem si toto téma zvolil. Domnívám se, že by mohl být dobrým pomocníkem při plánování schůzek, tvorbě různých druhů statistik, které mohou pomoci zlepšit chod poradny nebo výsledky studentů ve studiu a usnadnění celkového vedení administrativní agendy pro poradenské centrum. Dále to byla možnost pro mě rozšířit si své schopnosti a znalosti programování v jazyce PHP a získat další vědomosti o vývoji webových aplikací. Velkým pozitivem je také fakt, že tento systém bude opravdu reálně používán pro pracovní účely. Cílem bakalářské práce je vytvořit aplikaci pro vedení studentské poradny. Aplikace bude vytvořena pomocí XHTML, PHP, CSS, případně pomocí Java Scriptu. Databáze bude vytvořena pomocí MySQL s možností exportu do MS Excel. V aplikaci bude umožněno vytvoření plánovacích kalendářů pro poradnu, různé akce a v případě potřeby pro další témata a jejich export v PDF formátu. Statistiky bude možné zobrazit v tabulkách, nebo pomocí grafů. Ovládací rozhraní aplikace bude tvořeno webovými stránkami. Poradci musí být umožněno kromě vytváření nových klientů a plánování schůzek, také tvorba nových poradenských kategorií. Přístup do aplikace budou mít pouze pracovníci poradny. To bude zajištěno heslem na úvodní stránce. Pro vytvoření aplikace jsem se rozhodl použít hlavně skriptovací jazyk PHP. Ten ve spojení s databázovým systémem MySQL zajišťuje i práci s bází dat. Rozhraní pro ovládání aplikace resp. webová stránka bude vytvořena ve značkovacím jazyce XTML. Její vzhled se upraví za použití kaskádových stylů.
9
2 Požadavky na práci Hlavním požadavkem je přístupnost z více míst. Proto bude celá aplikace umístěna na webovém serveru. I když se předpokládá, že bude pouze jeden uživatel, pro přístup bude sloužit login a heslo. Aplikace bude obsahovat kalendář, kde bude možné zaznamenat naplánované schůzky. Ty budou v kalendáři barevně odlišeny, záleží na typu schůzky. Bude zde možnost upravit nebo přidat typ a barvu schůzek. Další požadavek je tvorba různých statistik (návštěvnost jednotlivých oborů, nejčastější způsob kontaktování, důvod návštěvy poradny apod.) a jejich grafické zpracování s možností tisku. Samozřejmostí je vypsat informace o studentovi.
2.1. Tabulka požadavků na aplikaci Po konzultacích byla sestavena následující tabulka požadavků. Tabulka 1. Seznam požadavků Požadavek na aplikaci Přihlášení do systému Odhlášení ze systému Přidání klienta Editace klienta Smazání klienta Přidání události Editace události Smazání události Vytvoření typu události Vytvoření oboru Statistiky poradny Grafy statistik Kalendář pro poradnu Kalendář pro osobní účely Export kalendáře do pdf Export klientů do excel Administrátorský přístup
Stav Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ano Ne
10
2.2. Architektura Tato aplikace bude realizována v třívrstvé webové architektuře. Datová vrstva bude oddělena a zálohována v pravidelných intervalech. Aplikační vrstva zajišťuje obhospodařující logiku. Pro ovládání celé aplikace bude sloužit prezenční vrstva. Ta bude vycházet z možností jazyka XHTML a kaskádových stylů.
2.3. Použité technologie Pro vytvoření aplikace bude použit převážně skriptovací jazyk PHP. Báze dat bude vytvořena pomocí phpMyAdmin. Uživatelské rozhraní bude tvořeno jazykem XHTML, CSS a případně JavaScriptem. Tyto technologie jsem zvolil pro jejich běžnou dostupnost a rozšířenost. Většina webových aplikací je tvořena právě těmi to technologiemi.
2.4. Existující řešení Plánovacích kalendářů nalezneme na internetu mnoho. Mezi nejznámější patří bezpochyby Outlok od společnosti Microsoft, nebo kalendář k emailové schránce na Googlu. Existují i specializovanější programy jako je např. Lotus Organizer. Jejich nevýhoda ale většinou spočívá v nemodifikovatelnosti a chybějícími možnostmi pro získání statistik a grafů, nebo nutnosti si tento software zakoupit. Aplikace poradna, o které je tato práce tuto nevýhodu nemá. Dá v případě potřeby rozšířit o nové funkce a je zdarma.
11
3 Nástroje pro vytvoření webové aplikace Základní
kritéria
pro
tvorbu
dobré
webové
aplikace
jsou
přehlednost
a jednoduchost. Také by měla co nejlépe splňovat požadavky na funkčnost. Pro tvorbu webových aplikací existuje mnoho nástrojů. Jejich základem je internetový prohlížeč.
Obrázek 1: Žebříček interne1tových prohlížečů (zdroj: http://blog.oit.wvu.edu) Z připojeného prvního grafu je patrné, že v současné době na prvních příčkách internetových prohlížečů umístil Google Chrome, Mozilla Firefox a Internet Explorer. Ve spodních příčkách využívanosti se udržují prohlížeče Safari a Opera s velkým rozdílem. HTML stránka zobrazená v prohlížeči je vygenerována webovým serverem. Nejčastějšími webovými servery je Apache http Server, Microsoft (IIS) a nginx. Aplikace pro poradnu poběží na serveru Apache.
12
3.1. PHP 3.1.1. Historie PHP Počátky PHP spadají do roku 1994. Rasmus Lerdorf se rozhodl vytvořit si jednoduchý systém na počítání přístupu ke svým stránkám napsaný v PERLu. Kvůli velkému zatížení serveru byl, ale po nějaké době systém přepsán do jazyka „C“.[1][2] Ten samý rok byla vydána sada těchto skriptů pod názvem „Personal Home Page Tools“, zkráceně PHP. Spojení PHP a nástroje „Form Interpret“ v polovině roku 1995 dalo vznik PHP/FI 2.0. Tento systém se později velmi rozšířil. V roce 1998 Izraelští vývojáři Zeev Suraski a Andi Gutmans přepsali parser a vytvořili základ pro PHP 3. Zkratka PHP dostává nový význam (Hypertext Preprocessor) v roce 1998, kdy je PHP 3 oficiálně uvolněno.[1][2] V roce 2000 vychází PHP 4, které je postaveno na Zend Engine. O čtyři roky později je představena verze 5, která se stane v roce 2008 jedinou stabilní a vyvíjející se verzí.[1][2]
3.1.2. O PHP PHP (původně Personal Home Page, nyní Hypertext Preprocessor) je skriptovací programovací jazyk. Je určen hlavně pro programování dynamických internetových stránek a webových aplikací. Nejčastěji ve formátu HTML, XHTML či WML. Využít se dá také pro tvorbu konzolových nebo desktopových aplikací. [2] Skripty jazyka PHP jsou prováděny na straně serveru a k uživateli je přenesen pouze výsledek jejich činnosti. Interpret PHP skriptu je možné volat několika způsoby. Pomocí příkazového řádku, dotazovacích metod http nebo pomocí webových prohlížečů. Syntaxe jazyka je kombinace několika programovacích jazyků (Perl, C, Pascal a Java). [2] Výhodou PHP je jeho nezávislost na platfotmě. Skripty lze většinou bez jakýchkoliv úprav přenášet mezi operačními systémy. Další výhodou je podpora značného množství knihoven. Mezi ty nejdůležitější patří například knihovna pro zpracování textu, grafiky, práci se soubory nebo přístup k většině databázových systémů (mj. MySQL, ODBC,
13
Oracle, TPoetgreSQL MSSQL). Také podporuje celou řadu internetových protokolů (HTTP, SMTP, SNMP, FTP, IMAP, POP3, LDAP). [2] PHP je nejrozšířenější skriptovací jazyk pro tvorbu webových aplikací. Především ve spojení s webovým serverem Apache a databázovým systémem (nejčastěji MySQL nebo PostgreSQL). [2]
3.1.3. Základní prvky Základní prvky pro tvorbu drtivé většiny programů jsou podmínky, cykly a funkce. Nejinak je tomu i v PHP. Chceme-li provést kus PHP kódu pouze za určitých podmínek, využijeme konstrukci if. Její tvar vypadá následovně. IF (podmínka) {příkaz vykonaný po splnění podmínky} ELSE {příkaz vykonaný se po nesplnění podmínky}. Podmínka vyjde jako nepravdivá pokud je její hodnota false, 0 nebo NULL. Ukázka použití podmínky, která vypíše denní dobu podle data.
Potřebujeme-li vykonávat nějaký kus kódu stále dokola, použijeme cykly. Jazyk PHP podporuje více druhů cyklů. Konstrukce jednoduchého cyklu FOR vypadá následovně. FOR (počáteční příkaz; podmínka; příkaz po každém cyklu) {příkazy prováděné uvnitř cyklu;} Následující kód vypíše pod sebe čísla od jedné do deseti.
"; ?>
Někdy potřebujeme kus kódu vykonat vícekrát aniž bychom tento kód museli psát stále dokola. Na to je vhodné použít funkci. Funkce začíná slovem FUNCTION, následuje 14
její název a případně parametry. V množinových závorkách je dále uveden kód jen se bude při volání funkce vykonávat. Funkce v ukázce dostane dvě čísla a vynásobí je mezi sebou.
"; ?>
3.2. (X)HTML „HTML je jednoduchý značkovací jazyk, který slouží k výrobě webových dokumentů. Jeho největší výhodou je univerzálnost. Je tedy jedno, kdo si vaše stránky prohlíží, ať už používá Windows, Linux nebo mobilní telefon, stačí jen, aby měl webový prohlížeč.“[4] To X na začátku XHTML znamená eXtensible, rozšiřitelný. V podstatě jde, ale o zpřísnění pravidel pro HTML kód stránky. Platí například zákaz křížení tagů nebo pravidlo o jejich ukončování. HTML dokument se skládá ze dvou hlavních částí: hlavičky a těla . V hlavičce jsou uvedeny informace o stránce jako například verzi použitého jazyka HTML nebo název stránky. Tělo dokumentu může být rozděleno na více částí a obsahuje kód stránky. Značky (nebo také tagy) jsou příkazy jazyka HTML definující formát jednotlivých prvků dokumentu. Tyto značky rozdělujeme na párové a nepárové. Například tagy a jsou párové a proto musí být ukončeny stejnou značkou před kterou je lomítko. Takže třeba hlavičku ukončíme tagem . Nepárové značky jsou ukončeny také lomítkem, ale až za názvem např.
.
3.3. CSS Jazyk kaskádových stylů byl navržen organizací W3C. Hlavním smyslem je oddělit od sebe vzhled a obsah dokumentu. Toto je důležité pro snadnou změnu vzhledu jednotlivých elementů na stránce. Pokud se rozhodneme změnit například barvu 15
a umístění tlačítek na stránce, zvládneme to jednoduchým upravením stylu v css souboru. Bez použití kaskádových stylů bychom museli předělávat každé tlačítko na stránce. To by při větším rozsahu webu mohlo být docela zdlouhavé a pracné. Kaskádové styly jsou uloženy v souborech s příponou css. Definice kaskádových stylů sestává z několika pravidel. Každé pravidlo obsahuje selektor a blok deklarací. Každý blok deklarací pak obsahuje seznam deklarací oddělených středníky a každá deklarace sestává z identifikátoru vlastnosti, následuje dvojtečka a hodnota vlastnosti.[5] Ukázka nastavení těla webové stránky na bílou barvu, černý text a 10 pixelový okraj.
body { background-color:white; color:black; padding: 10px; }
3.4. Databáze MySQL „MySQL je bezplatný systém správy relačních databází podnikové úrovně spouštěný ve více vláknech. Byl vyvinut švédskými TcX. Díky využitelnosti na platformě Linux si v jejím případě získal dnes již výsadní postavení zásluhou své pružnosti, spolehlivosti a rychlosti. Z úvodní definice lze jednoduše vyvodit, že MySQL umožňuje práci více uživatelů zaráz s přijatelnou mírou zabezpečení, jednotlivé tabulky lze mezi sebou různě provázat.“[6] Tato databáze je použita i pro aplikaci pro správu poradny. Pro jednoduché ovládání databáze je použit program phpMyAdmin. Ten je napsán v jazyce PHP a pro ovládání využívá jednoduché webové rozhraní.
3.5. Dotazovací jazyk SQL Je to obecný strukturovaný dotazovací jazyk, odtud zkratka SQL (Structured Query Language). Jazyk má v sobě nástroje pro tvorbu databází (tabulek) a dále nástroje na manipulaci s daty jako je vkládání, mazání, vyhledávání a další.
16
Ukázka syntaxe jazyka SQL na jednoduchém příkladě. Vytvoříme tabulku pro studenty a jejich známku ze zkoušky. Poté ji naplníme daty a nakonec vybereme ty studenty, kteří mají lepší známku než 3.
CREATE TABLE studenti ( Id_student, jmeno CHAR(20), prijmeni CHAR(20), znamka INT(1), PRIMARY KEY (číslo)) INSERT INTO studenti VALUES (1, 'Marek', 'Novák', 2), (2, 'Jan', 'Klubko', 3), (3, 'Radek', 'Nora', 2), (4, 'Petr', 'Sek', 4)
SELECT jmeno, prijmeni FROM studenti WHERE znamka < 3
17
4 Datový model 4.1. Popis datového modelu Každý kdo využije služeb poradny, bude uložen v databázi v tabulce tab_klient. U každého klienta se kromě školního čísla, jména, příjmení, kontaktů uchovávají také informace o typu studia. Tabulka tab_udalost zahrnuje informace o naplánovaných schůzkách. Pro rychlejší a méně pracnější změnu jsou některé informace uchovávány v oddělených tabulkách. Pokud by tomu tak nebylo a některý obor změnil například svůj název, museli bychom u všech studentů z tohoto oboru měnit údaj ručně. Při použití samostatné tabulky stačí název přepsat pouze jednou. K propojení dochází přes identifikační čísla entit.
4.2. Popis Entit 4.2.1. Entita owner Zde nalezneme uživatele aplikace. V atributu username je uloženo přihlašovací jméno uživatele. Heslo je uloženo v zahashované podobě v atributu password.
4.2.2. Entita tab_klient Informace o klientech navštěvujících poradnu jsou uloženy v entitě Klient. Jsou zde základní informace, jako je číslo, jméno, příjmení a datum registrace. Pro kontaktní údaje jsou zde atributy telefon a email. Na rozlišení typu je použit atribut typu ENUM. Doplňující informacemi může být semestr, studovaný obor a způsob kontaktování poradny. V atributech id_obor, id_kontakt a id_popis nalezneme pouze identifikační čísla jiných entit, ze kterých se vybere požadovaný údaj. Některé atributy jsou nepovinné, protože do poradny může zajít i personál školy, nebo klient nemusí chtít sdělovat podrobné informace. Nicméně podrobnější informace slouží k lepšímu zpracování statistik. Jako primární klíč slouží atribut ID.
18
4.2.3. Entita tab_udalost Pro efektivní vedení poradny je zapotřebí mít dobře naplánované schůzky klientů. Na to slouží entita tab_udalost. Primárním klíčem je zde ID. Nejdůležitějšími atributy jsou vedle id_typ a primárního klíče ID atributy datumového a časového typu datum, s_time a e_time. V nich jsou uloženy informace o plánovaném začátku a konci schůzky. Další důležitá entita je owner, která určuje majitele události. Ta slouží pro rozlišení událostí k jednotlivým uživatelům. K události také můžeme připojit poznámku. Ta je poté uložena a označena v popisu klienta.
4.2.4. Entita tab_type Je nemožné, aby měli všichni návštěvníci poradny stejný problém. Z toho důvodu byla vytvořena entita tab_type. Dopředu se nedají odhadnout všechny typy poradenství, které mohou nastat, a proto je přidání nových typů poradenství umožněno pomocí formuláře z webového rozhraní aplikace. Atributy zkratka a barva nesou informace pro rozlišení zobrazení v plánovacím kalendáři. Ke stejnému účelu slouží informace, zda se jedná o typ pro poradnu nebo vlastní kalendář. Atribut nazev nepotřebuje žádný komentář. ID je primárním klíčem entity.
4.2.5. Entita tab_obor Entita Obor je reprezentací oboru studovaného návštěvníky poradny. Pro rady si ovšem nemusí chodit pouze studenti, ale mohou do poradny zavítat i zaměstnanci školy. Během let mohou také vzniknout nové studijní obory, proto je zde opět možnost přidání nových oborů pomocí formuláře z webového rozhraní aplikace. Atribut nazev a zkratka obsahují základní informace o pozici návštěvníka ve škole. Jako primární klíč je zvolen atribut ID.
4.2.6. Entita tab_kontakt Na požádání byla pro účely vedení statistik zavedena entita s názvem tab_kontakt. Zde se uloží informace o způsobu kontaktování poradny. Základními možnostmi jak si domluvit schůzku v poradně jsou: osobní návštěva, telefon, email. Tento způsob je uložen v atributu nazev. Jako primární klíč se zde vyskytuje atribut ID.
19
4.2.7. Entita tab_popis Některé problémy se nepodaří vyřešit hned na první schůzce a vyžadují tedy další návštěvy poradny. Kvůli velkému počtu možných klientů a časové prodlevě mezi jejich návštěvami, je potřeba někde uchovávat informace o předchozích schůzkách. Ty budou uloženy v tabulce tab_popis. Každý záznam obsahuje svoje identifikační číslo. To je v atributu ID, který je zároveň primárním klíčem. Atribut datum říká, kdy byla provedena poslední úprava popisu. V atributu text je pak samotný popis ke klientovi. Popis začíná datem registrace a poté jsou do něj ukládány záznamy z klienta a poznámky k události níž se účastní.
4.2.8. Entita tab_barvy Pro větší přehlednost v kalendáři je potřeba od sebe jednotlivé události odlišit. Nejlepší použití různých barev. V této tabulce nalezneme barvy, které můžeme přiřadit jednotlivým typům poradenství nebo osobním plánům. Zatím je zde uloženo 22 barev. Identifikační atribut je zde ID. Atribut název nese informaci o barvě zapsanou jménem.
4.2.9. Entita tie_typ_klient Může se stát, že klient přijde do poradny vícekrát a pokaždé ho bude trápit něco jiného. Pouhou změnou typu poradenství bychom přišli o data použitelná ke statistikám, a proto byla vytvořena Entita tie_typ_klient. Zde se při každé události uloží její typ do atributu id_typ a do atributu id_klient se uloží identifikační číslo klienta. Pokud je klientů více uloží se každý na nový řádek. Opět je zde atribut ID sloužící pro identifikaci.
4.2.10. Entita tie_udalost_klient Jeden klient může za dobu řešení jeho problému přijít do poradny několikrát. Pro každou takovouto návštěvu je třeba vytvořit událost v plánovacím kalendáři. Do entity tie_udalost_klient se uloží informace s identifikačním číslem klienta a události. Proto jsou zde vytvořeny atributy id_klient a id_udalost. Poslední atribut v entitě je ID, který slouží jako primární klíč.
20
4.3. E–R model
Obrázek 2 E-R model
2Obr. 2 E-R model databáze2Obr. 2 E-R model databázeObr. 2 E-R model databáze 2 2Obr. 2 E-R model databáze Obrázek 3 Obrázek 4 Obr. 2 E-R model databáze 3
21
4.4. Popis atributů Tabulka 2 owner Název
Datový typ
Popis
id username password
TINYINT(2) VARCHAR(20) VARCHAR(40)
id uživatele login uživatele zahashované heslo
Název pole
Datový typ
Popis
ID cislo jmeno prijmeni id_obor semestr typ_stud telefon email id_popis id_kontakt registrace owner
MEDIUMINT(8) MEDIUMINT(8) VARCHAR(35) VARCHAR(35) TINYINT(3) TINYINT(4) ENUM(prezenční,kombi) VARCHAR(13) VARCHAR(30) MEDIUMINT(8) TINYINT(2 ) DATE VARCHAR(20)
id klienta volitelné číslo jméno klienta příjmení klienta id studovaného oboru semestr studia typ studia klienta telefon klienta email klienta id popisu ke klientovi id způsobu kontaktování datum registrace login poradce klienta
Název pole
Datový typ
Popis
ID datum s_time e_time poznamka owner
INT(11) DATE TIME TIME TEXT VARCHAR(20)
id události datum události začátek události konec události poznámka k události login poradce události
Název pole
Datový typ
Popis
ID barva typ zkratka nazev
TINYINT(3) VARCHAR(20) ENUM(poradna,moje) VARCHAR(5) VARCHAR(30)
id typu poradenství barva zvolená pro vyznačení druh události zkratka názvu název typu poradenství
Tabulka 3 tab_klient
Tabulka 4 tab_udalost
Tabulka 5 tab_type
22
Tabulka 6 tab_obor Název pole
Datový typ
Popis
ID zkratka nazev
TINYINT(3) VARCHAR(5) VARCHAR(30)
id oboru zkratka oboru název oboru
Název pole
Datový typ
Popis
ID nazev
TINYINT(3) VARCHAR(10)
id způsobu kontaktování název způsobu
Název pole
Datový typ
Popis
ID datum text
MEDIUMINT(8) DATE TEXT
id popisu ke klientovi datum změny popisu popis ke klientovi
Název pole
Datový typ
Popis
ID nazev
TINYINT(3) VARCHAR(15)
id záznamu název barvy
Název pole
Datový typ
Popis
ID id_typ
MEDIUMINT(8) TINYINT(3)
id záznamu v tabulce id typu poradenství
Tabulka 7 tab_kontakt
Tabulka 8 tab_popis
Tabulka 9 tab_barvy
Tabulka 10 tie_typ_klient
Tabulka 11 tie_udalost_klient Název pole
Datový typ
Popis
ID id_udalost id_klient
MEDIUMINT(8) MEIUMINT(8) MEDIUMINT(8)
id záznamu id události id_klienta
23
5 Vývojová prostředí 5.1. MySQL Workbench MySql Workbench je multiplatfomní vizuální návrhář pro Mysql databáze. Umožňuje podrobné vytváření schémat tabulek včetně jejich atributů. Samozřejmostí je vytváření relací mezi tabulkami. Velkou výhodou je možnost reverzního inženýrství. Je zde umožněna tvorba a realizace SQL dotazů a editor SQL umožňuje barevné zvýraznění syntaxe [7] Tato možnost je využita pro tvorbu grafického zpracování databáze. Software je volně šiřitelný pod licencí GPL. Je možno jej tedy volně používat, modifikovat a šířit. Podmínkou je že tento software bude šířen bezplatně s možností získat zdrojové kódy. [8]
5.2. NetBeans Dříve se zdrojové kódy pro webové aplikace psaly v poznámkovém bloku. Vznikaly požadavky na přehlednější, rychlejší a modifikovatelnější vývojové prostředí. Pro vývoj naší aplikace je zvoleno vývojové prostředí NetBeans. Toto prostředí jsem zvolil, protože už s ním mám nějaké zkušenosti. Zvládne otevřít více souborů najednou, které se dají různě uspořádat jako vnitřní okna. Barevné zvýrazňování syntaxe je velice užitečné pro rychlé zorientování a snadný přehled v kódu. Také se dá velmi snadno přizpůsobit požadavkům programátora. Vývojové prostředí je vytvořeno v jazyce Java, ale podporuje prakticky jakýkoliv programovací jazyk. K dispozici je také velké množství doplňků, kterými se dá rozšířit. NetBeans je bezplatně šiřitelný produkt bez omezení užívání. [9]
5.3. Vývojové prostředí WAMP Vývoj webových aplikací je často komplikovaná záležitost, nelze vystačit pouze se značkovacím jazykem (X)HTML. Některé aplikace potřebují pro správnou funkčnost další technologie. Těmi může být například skriptovací jazyk PHP nebo nástroj 24
pro správu databáze MySQL. PHP skripty je potřeba během vývoje nahrát na server, který s nimi umí pracovat. Pokud bychom při vývoji aplikace používali pouze server v internetu, museli bychom neustále používat FTP klienta pro nakopírování souborů s kódy. To by práci podstatně zdržovalo. Proto bývá zvykem aplikaci zkoušet na takzvaném lokálním serveru, který nám simuluje chování skutečného serveru někde v internetu. Jeho IP adresa je 127.0.0.1 a odborně se mu říká localhost. Instalace a nastavení takového serveru může být docela složitá záležitost, jelikož nastavení se provádí editací zdrojových souborů. Z toho důvodu jsem se rozhodl použít balík WAMP, který je určen pro operační systém Windows.
25
6 Zabezpečení webových aplikací Bezpečnost webových aplikací je v dnešní době velký problém. Existuje relativně velké množství zranitelností, které se mohou na stránkách vyskytnout. Při zneužití těchto bezpečnostních děr získá útočník v lepším případě pouze přístup do aplikace. V horším případě může dojít k odcizení důvěrných dat nebo jejich smazání.
6.1. Bezpečnost na straně serveru Pokud nemáme vlastní server a potřebujeme umístit aplikaci na internet, budeme muset využít služeb některé hostingové firmy. V takovém to případě nebudeme moci jeho nastavení moc ovlivnit. Měli bychom tedy pečlivě vybírat firmu, kterou si zvolíme.
6.2. SQL Injection Asi nejčastějším typem útoku je SQL Injection. Ten není nikterak složitý a využívá špatného ošetření vstupu od uživatele při sestavování dotazů. Mějme tedy tabulku users se jmény a hesly uživatelů a jednoduchý formulář pro přihlášení. Uživatel zde zadá své jméno a heslo a potvrdí kliknutím na tlačítko odeslat. SQL dotaz by pak mohl vypadat například nějak takto. [10]
select count(*) from users where userName='admin' and userPass='Swr2k'
Na první pohled možná není na tomto dotazu nic neobvyklého či nebezpečného. Místo hesla ale zadáme or 1=1. Dotaz nyní vyhledá uživatele se jménem admin a místo zkontrolování hesla je heslo pouze porovnáno s prázdným řetězcem nebo je ověřena podmínka rovnice 1=1. Je tím tedy myšleno: jestliže je heslo prázdné nebo 1 se rovná 1, pak je odpovídající záznam v tabulce users nalezen. [10] Pokud přijímáme číselné hodnoty pro ID z ostatních tabulek, měli bychom používat funkci pro zkontrolování tohoto vstupu, tedy zda je hodnota opravdu číselná. Také vždy odesíláme data z formulářů metodou POST, čímž zabráníme dopsání škodlivých dat do URL adresy.[10]
26
6.3. Heslo V tomto odstavci pouze shrnu pár základních rad pro bezpečnější webové stránky. Každému programátorovi, který se alespoň trochu zabývá webovými aplikacemi, jsou dobře známé. Pokud máte stránky s obsahem určeným pouze pro konkrétní návštěvníky je potřeba vytvořit uživatelské jméno a heslo. Tyto Informace budou uloženy v databázi, ke které se může někdo dostat. Hodně běžných uživatelů má stejné heslo ke svému účtu na více webových aplikacích. Heslo by se nemělo za žádných okolností ukládat ve stejné podobě, v jaké ho uživatel zadává do formuláře. V případě zcizení jejich hesel hrozí nebezpečí, že se útočník dostane například i na jejich email. Hesla ukládáme vždy v zašifrované podobě. Můžeme si vytvořit vlastní algoritmus šifrování, ale bohatě postačí dostupné veřejné nástroje např. hashování. K heslům přikládáme takzvanou sůl. Je to řetězec znaků připojený k heslu na vstupu hashovaní funkce. Sůl by měla být náhodná, aby pro stejná hesla pokaždé vyšel jiný hash. Další možností je zkombinování více hashovacích algoritmů. Hesla rozhodně neposíláme na server metodou GET. Tím bychom je zobrazily jako součást URL. Nezapomeňte také ověřovat odesílané údaje ve formulářích. Následuje ukázka zahashování a vypsání hesla s proměnnými myusername: jmeno a password: heslo. Jako sůl bude přidán login a jako algoritmus je použit SHA1. Předpokládáme příjem hodnot metodou POST.
$myusername=addslashes($_POST['username']); $mypassword=SHA1($_POST['password'].$myusername); echo “výsledný hash: “.$mypassword; výsledný hash: 5691ed27e155723244ae9c10472e78dda72c7b08
27
7 Popis implementace 7.1. Adresářová struktura Soubory a PHP skripty aplikace jsou pro lepší orientaci rozděleny do několika složek. V adresáři core nalezneme složky obsahující základ aplikace. Některé soubory budou popsány níže.
7.1.1. Kořenový adresář V kořenovém adresáři jsou soubory obsahující z webu viditelnou část aplikace. Každá záložka hlavního menu má zde svůj soubor.
7.1.2. Adresář Class Zde jsou uloženy soubory typu PHP. Tyto soubory obsahují třídy nebo funkce potřebné pro správný běh aplikace nalezneme zde i soubor obsahující údaje pro připojení k databázi.
7.1.3. Adresář Ext Tento adresář obsahuje stažený doplňek Libchart. Libchart je používán pro tvorbu grafů z údajů v databázi. Graf uloží jako obrázek s příponou png. Ten je na požádání převeden na pdf pomocí Html2pdf potom.
7.1.4. Adresář Inc Zde jsou pouze dva soubory. config.inc a startup.inc. Oba soubory se starají o správné určení cesty k ostatním souborům a budou ještě popsány.
7.1.5. Adresář CSS Zde se nachází soubory obsahující kaskádové styly aplikace. Pomocí nich je tvořen celý vzhled aplikace
28
7.1.6. Adresář Img Tato složka obsahuje ikony použité pro pohyb v kalendáři a operace v tabulkách. Také je zde umístěna složka png do které se generují grafy.
7.1.7. Adresář html2pdf V tomto adresáři je stažený doplněk pro převod Huml do pdf. Využívá se pro tisk grafů, kalendářů a také pro vytištění informací o klientovi.
7.2. Jádro aplikace 7.2.1. Přihlášení do aplikace Přihlášení do aplikace probíhá přes soubor index.php. Zde se uživateli zobrazí formulář pro zadání uživatelského jména a hesla. Po odeslání formuláře se zkontrolují zadané údaje s databází. Pokud se nalezne shoda, je uživateli umožněn přístup a je přesměrován na stránku s kalendářem. Pokud jsou údaje chybné, zůstane uživatel na stránce index.php. Porovnání údajů v databázi probíhá hledáním shodného výsledku. Ochrana je zajištěna hashováním a také podmínkou, která hlídá pouze jeden výsledný řádek. To je dobré pro větší bezpečnost aplikace. Modifikování pole hesla stylem heslo‘ OR ‘a‘=‘a tedy nebude fungovat. if($_SERVER["REQUEST_METHOD"] == "POST") { $myusername=addslashes($_POST['username']); $mypassword=SHA1($_POST['password'].$myusername); $q = new Qry(DB::pr()); $q->select("ID") ->from ("owner") ->where("username='$myusername' and password='$mypassword'") ->execute(true); if ($q->num_rows()==1) { session_start("myusername"); $_SESSION['login_user']=$myusername; header("location: calendar.php"); }else{ echo "Zadali jstě špatné jméno nebo heslo"; }
} 29
Pokusíme-li se dostat na konkrétní adresu stránek aplikace (např. .../form_client.php) bude ověřena hodnota login_user uložená v proměnné SESSION. O to se stará skript umístěný v souboru authentication.php. Pokud najde shodu s databází, bude umožněn vstup do aplikace. Soubor je vložený na začátek všech z menu dostupných stránek. Pro odhlášení slouží soubor logout.php na který je uživatel přesměrován po kliknutí na odkaz odhlásit v hlavním menu.
7.2.2. Konfigurační soubory První souborem je config.inc.php umístěný v adresáři inc. Zde nalezneme definice cest k jednotlivým složkám souborů a definici pro přihlášení do databáze. Soubor start.up.inc.php se stará o správné nalinkování souborů ve složce class. V této složce je i další konfigurační soubor a to db.php. Zde jsou údaje potřebné pro přihlášení do databáze a realizace tohoto připojení.
7.2.3. Soubor qry.php V aplikaci je potřeba přistupovat k databázi, načítat a ukládat do ní data. V tomto souboru nalezneme funkce, které nám tento přístup zpřehledňují. Místo vypisování celého dotazu do uvozovek vytvoříme objekt a použijeme jeho vlastnosti. Tuto třídu jsem dostal k dispozici dříve při spolupráci na stránkách pro sportovní centrum. Díky její snadné použitelnosti jsem se ji rozhodl využít i v bakalářské práci. Níže je ukázka, která do tabulky tab_type uloží obsah pole Info. Toto pole je vytvořeno formulářem. $q = new Qry(DB::pr()); $q->insert ("tab_type") ->values ($array["info"]) ->execute (true);
7.2.4. Soubory pro export Pomocí Html2pdf je export velmi jednoduchý. Stačí vytvořit Html stránku a na jejím konci zavolat níže uvedené příkazy. Soubory jsou umístěny přímo ve složce s doplňkem a nesou názvy export_calendar, export_client a export_graf. Obsahují proměnou Html do které je uložen kód a potřebná data.. $mpdf=new mPDF(); $mpdf->WriteHTML($html); $mpdf->Output();
30
7.2.5. Soubor Template.php Část programového kódu je potřeba opakovat na všech stránkách. To může mít za následek velký nárůst počtů řádků a nutnost dlouhého scrollování při editaci kódu. Pro vyhnutí se neustálému opakování a nepřehlednosti tím vzniklé, jé tento kód přesunut do třídy template. Například je potřeba na každé stránce vykreslovat menu. V případě kopírování kódu na každou stránku by se jeho pozdější editace mohla stát časově náročnou. Níže je funkce menu a ukázka použití s třídou Template.
public function menu() { $html = ''; $html .= ''; return trim($html); }
Tato funkce je uložena ve třídě Template. Nyní stačí pouze vytvořit objekt třídy a potom už jen zavolat funkci. Podobným způsobem probíhá nalinkování kaskádových stylů a JavaScriptových souborů. $_template = new Template(true); $_template->css[] = "layout"; $_template->js[] = "pridat_klienty"; echo $_template->header();
7.2.6. Soubor url.php Pro časté využívání změny adresy byl vytvořen soubor url.php. Obsahuje funkce potřebné pro změnu URL adresy. Nejčastěji využívaná fuknce je funkce modify a refresh. Modify pozmění adresu aktuální stránky a to tak že přidá potřebný parametr. Využívá se například v kalendáři pro posunutí data. Refresh je využíván hlavně 31
pro předání typu zprávy při vkládání nových údajů. Tuto třídu jsem dostal k dispozici k projektu, na kterém jsem pracoval dříve a rozhodl jsem se ji použít pro její jednoduchost. Posun data kalendáře o jeden měsíc dopředu.
$pomoc,"month"=>$next_month)) ?>"
Zobrazení zprávy o úspěšném uložení. Text zprávy je rozlišen pomocí čísla a podmínky switch. Url::refresh(array("save"=>null ,"mess"=>11));
7.2.7. Soubor func.php Obsahuje pouze dvě funkce check_post a check_get. Obě funkce jsou pouze zjednodušením zápisu pro kontrolu předání pomocí POST a GET.
7.2.8. Soubor graph.php Zde jsou uloženy SQL dotazy pro tvorbu grafů v kombinaci s příkazy knihovny Libchart pro jejich vykreslení. Samotné grafy pak stačí zavolat odkazem směrovaným na export do html2pdf.
7.2.9. Soubory začínající act_ Soubory s touto předponou obsahují funkce pro jednotlivé tabulky databáze. Například soubor act_type obsahuje funkce potřebné pro jeho přidání, smazání, kontrolu id a kontrolu zkratky. Také zde nalezneme funkce tvořící potřebné seznamy. Seznam barev, seznam použitých barev a seznam typů poradenství. Tyto funkce jsou tvořeny SQL dotazem zapsaným pomocí třídy Qry. Výsledek je potom formátován do požadovaného tvaru. Pokud je požadováno více možností je zde uveden parametr podle kterého se rozhodne o tvaru výpisu. V ukázce je část kódu, která formátuje tvar výpisu pro select nebo tabulku ve formuláři události. SQL dotaz je přeskočen, neboť jeho způsob zápisu je uveden v části 7.2.3.
32
if($param == 1) { foreach ($q->result as $value) { $typ = ($value["typ"] == 'poradna') ? 'P' : 'M'; $result[$value["ID"]] = $typ." / ".$value["zkratka"]." / ".$value["nazev"]; } } else /** * output for tab seznam událostí in form_event */ if($param == 2){ foreach ($q->result as $value) { $result[$value["ID"]] = $value["nazev"]; } }
7.2.10. Soubory začínající form_ Tyto souboru spolu s view_client.php, calendar.php a index.php tvoří zobrazitelné stránky aplikace. Na začátku souboru jsou vloženy skripty pro ověření, zda je uživatel přihlášen a pro nastavení cest v adresářích. Následuje vytvoření formuláře a jeho vstupů. Provede se kontrola check_get a podle předaného parametru v url adrese se rozhodne o provedení funkce. Těmi může být zobrazení chybové zprávy, uložení, smazání, nebo editace, která předvyplní známé informace do vstupů kalendáře. Načtou se kaskádové styly a JavaScriptové funkce. Pak už následuje samotné vytvoření Html stránky. Pomocí šablony je vytvořena hlavička a nahráno menu. Následované formulářem a případně tabulkami s přehledem a možnostmi editace či smazání.
7.2.11. Soubor Calendar.php V tomto souboru jsou skripty zajišťující vykreslování a naplnění kalendáře. Na začátku je JavaScript který se stará o zobrazení nebo skrytí vyskakovacího boxu. V tomto boxu jsou podrobnější informace o schůzce jako celý název, počáteční a koncový čas, čísla zúčastněných klientů a poznámka k události. Posun data kalendáře probíhá předáváním hodnot day a month v url adrese. Ta je potom zpracována PHP funkcí modify. Samotný kalendář je tvořen tabulkou rozdělenou po třiceti minutách. Vykreslování události je rozděleno na dvě části. První část kontroluje, zda je buňka shodná s počátečním časem události. Ta druhá potom porovnává, jestli událost stále trvá. V obou částech probíhá ještě ověření na typ události. Záznamy označené jako moje jsou vykresleny šedě a je u nich zakázán informativní box. Detail osobních událostí je vidět ve druhém 33
kalendáři. Toto rozdělení je z důvodu lepší ochrany soukromí a jasné viditelnosti typu událostí. Také zde je tlačítko pro export kalendáře. Export je ve formátu pdf a je v něm vidět celý týden.
34
8 Systém 8.1. Grafický vzhled Na grafický vzhled aplikace nebyly kladeny žádné zvláštní požadavky. Proto jsem se rozhodl jej vytvořit pouze za použití kaskádových stylů. Za zmínku stojí především kulaté okraje, které dávají aplikaci modernější vzhled. Vzhledem k jejich použití doporučuji aplikaci spouštět v prohlížeči Mozilla Firefox nebo Google Chrome.
8.2. Přihlášení Pro vstup do poradny je potřeba se přihlásit na stránce index.php. Po vyplnění platného jména a hesla budeme přesměrování do aplikace. Jako první se zobrazí stránka s kalendářem.
8.3. Menu Vzhledem k rovnosti uživatelů je hlavní nabídka stejná pro všechny. Její položky jsou rozepsány v dalších odstavcích.
8.3.1. Přidej klienta Na této stránce najdeme formulář pro přidání klienta. Převážná většina údajů je nepovinná, ale jejich získání vede k větší smysluplnosti některých statistik, potažmo grafů. Aby byly zajištěny alespoň nějaké informace, jsou zde povinné informace o způsobu kontaktování a typu studia. Hlavním údajem je zde číslo, které slouží pro identifikaci klienta. Do pole záznam se zapisují poznámky ke klientovi, které se při editaci zapíší do popisu. Po kliknutí na export dojde k vytištění klienta do pdf souboru.
8.3.2. Přehled klientů Pod tímto odkazem nalezneme podrobnější přehled registrovaných klientů. Vedle jejich informací jsou ikony pro detail a smazání. Detail nás přepne zpět na stránku Přidej klienta. Známé informace budou předvyplněny do formuláře a je tak snadné klienta upravit, nebo si přečíst jeho popis. V horní části stránky najdeme pole pro vyhledávání. 35
Po kliknutí na odkaz export se provede uložení seznamu klientů do souboru typu csv. Tento soubor se jednoduše otevře v programu Microsoft Office Excel a rozdělí se podle středníků do sloupců.
8.3.3. Statistiky Na této stránce nalezneme výpis několika dostupných statistik. Vzhledem k malému množství povinných informací je jejich výčet velmi omezen. Doporučuje se klienty v některých případech požádat o další informace jako je semestr nebo obor. Bez podrobnějších informací budou pravděpodobně statistikám a grafům dominovat položky nic nebo neuvedeno. Vedle většiny statistik je odkaz pro zobrazení grafu. Graf je tvořen pomocí koláčů a je zobrazen v pdf formátu, který je možné ihned uložit.
8.3.4. Typ V horní části stránky najdeme formulář pro přidání nového problému. Zvolíme, zda je to problém určen pro poradnu nebo jestli je to typ osobních plánů. Následuje volba barvy, zkratky a delší název. Ve spodní části je potom zobrazena tabulka obsahující už vytvořené typy problémů.
8.3.5. Obor Stránka se velmi podobá té předchozí. Opět zde najdeme formulář, jenž nám dovolí přidat nový studijní obor. Pokud poradnu navštíví zaměstnanci školy, můžeme si pro ně zavést novou zkratku. Pro případ že by návštěvník nechtěl tuto informaci uvádět je vytvořen obor nic. Ve spodní části stránky nalezneme tabulku obsahující již vytvořené obory.
8.3.6. Události Ve formuláři pro přidání události můžeme zvolit typ události. Název je složen ze tří částí. První je písmeno P nebo M. To nám označuje, zda jde o typ problému pro poradnu nebo typ moje určený pro vlastní kalendář. Následuje zkratka a název typu problému. Datum je vybíráno pomocí staženého mootools DatePickeru. Pole poznámka slouží pro psaní informací k události. Tato informace je po uložení události automaticky zapsána do popisu přidělených klientů. Již vytvořené události vidíme v tabulce 36
označené jako seznam událostí. Seznam klientů zde slouží pro přehlednější volbu klienta k události. Provedeme tak kliknutím na zelenou ikonu ve tvaru znaménka plus. V poli účastníci potom vidíme čísla přidaných klientů.
8.3.7. Kalendář a Kalendář II Stránka s kalendářem je velmi jednoduchá. Nahoře nalezneme šipky sloužící pro pohyb v kalendáři. Dvojitá šipka posouvá kalendář o měsíc, jednoduchá potom o týden. Vpravo dole je odkaz pro export. Po kliknutí se provede vytištění kalendáře do souboru pdf. Kalendář obsahuje všech sedm dní v týdnu. Začíná šestou hodinou ranní a končí o půl deváté večer. Po najetí myší na událost se nám zobrazí její celý název, časové údaje, čísla klientů a popis k události. Osobní plány jsou zde vyznačeny šedě a tuto funkci nemají. Kalendář II je potom skoro stejný. Rozdíl je pouze v zobrazovaných událostech .
Obrázek 3 Kalendář 2Obr. 2 E-R model databáze2Obr. 2 E-R model databázeObr. 2 E-R model databáze 4 5Obr. 2 E-R model databáze Obrázek 6 Obrázek 7 Obr. 2 E-R model databáze 5
37
9 Závěr 9.1.
Zhodnocení práce
Cílem mé bakalářské práce bylo vytvořit systém pro vedení studentské poradny. Aplikace splňuje až na jeden všechny požadavky. Systém je umístěn na internetu a je tak dostupný odkudkoliv kde je internet. Přístup do aplikace mají podle zadání pouze registrovaní uživatelé. Je umožněno přidávání, upravování a mazání klientů a událostí. Jedním z hlavních požadavků bylo vytvoření plánovacího kalendáře a jeho export. To bylo splněno. Druhým hlavním požadavkem byla tvorba grafů a statistik. Tento cíl byl také splněn, ale vzhledem k nepovinným údajům nejsou jeho možnosti nijak velké. Také byl vytvořen export grafů do pdf formátu. Export seznamu klientů byl také splněn. Seznam se ovšem musí otevírat z programu MS Excel a rozdělit podle oddělovače, kterým je středník. Práce je dostupná na adrese www.pomocprovas.eu/poradna . Přihlašovací údaje jsou, jméno: admin a heslo: poradce. Řešení některých problémů se může zdát zbytečně složité. Je tomu proto, že zkušenosti jsem nabýval postupně během práce na aplikaci. Největší problém byl s kalendářem. Hlavně podmínky pro ohlídání volného času na vložení události a posun data pomocí šipek. Ve vývoji systému by jsem rád nadále pokračoval. Stéle mě totiž napadají možnosti jeho vylepšení.
9.2.
Možnosti rozšíření
Tento systém není dokonalý a je na něm co vylepšovat. Jedna z věcí, které by jsem chtěl dosáhnout, je jistá uživatelská variabilita ve tvorbě grafu. Další možností je zlepšení zabezpečení souborů na serveru nebo vylepšení rychlosti aplikace. V budoucnu plánuji vytvořit administrátora, který bude mít možnost přesunout klienty k jinému poradci a nahlížet do všech pracovních kalendářů. Statistiky a grafy by se daly rozdělit na celkové a podle uživatelů. Toto rozšíření má smysl ale jen v případě dalšího poradce.
38
10 Seznam použité literatury [1] Zajíc, P.: PHP (1) - Historie a budoucnost [online]. 27.5.2004 [cit. 2013-05-21]. Dostupné z: http://www.linuxsoft.cz/article.php?id_article=171 [2] PHP. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2001- [cit. 2013-05-24]. Dostupné z: http://cs.wikipedia.org/wiki/PHP [3] KYSELA, Jiří. Všechno, co jste chtěli vědět o PHP. In: Interval.cz [online]. 18.4.2000. [cit. 2013-05-24]. Dostupné z: http://interval.cz/clanky/vsechno-co-jstechteli-vedet-o-php/ [4] HTML Tutoriál 1. - První kroky. In: Webtvorba.howto [online]. 29.1.2009. [cit. 2013-05-24]. Dostupné z: http://webtvorba.howto.cz/html-tutorial-1-prvni-kroky/ [5] Kaskádové styly. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2001- [cit. 2013-05-24]. Dostupné z: http://cs.wikipedia.org/wiki/Kask%C3%A1dov%C3%A9_styly [6] MAKOWSKI, Lukáš. Prakticky s MySQL - 1. díl. In: Zive [online]. 15.3.2002. [cit. 2013-05-24]. Dostupné z: http://www.zive.cz/clanky/prakticky-s-mysql---1-dil/sc3-a-105693/default.aspx [7] New! MySQL Workbench 6.0: Database Migration: mysql.com [online]. [cit 201307-22]. Dostupné z: http://www.mysql.com/products/workbench [8] Softwarové licence: slunečnice.cz [online]. [cit 2013-07-16]. Dostupné z: http://www.slunecnice.cz/licence/gnu-gpl/
[9] Netbeans:
netbeans.org
[online].
[cit.
2013-06-10].
Dostupné
z:
https://netbeans.org/index_cs.html [10] .CCUMINN. SOOM.cz [online]. [cit. 2012-05-24]. Dostupné z: http://www.soom.cz/index.php?name=articles/show&aid=167
39
11 Seznam obrázků Obrázek 1: Žebříček interne1tových prohlížečů ............................................................. 12 Obrázek 2: E – R model databáze ................................................................................... 21 Obrázek 3: Kalendář ......................................................................................................37
40
12 Seznam tabulek Tabulka:1 seznam požadavků ...………………………………………………......…10 Tabulka 2 owner ……………………………………………………………………..22 Tabulka 3 tab_klient …………………………………………………………………22 Tabulka 4 tab_udalost ………………………………………………………………..22 Tabulka 5 tab_type …………………………………………………………………..22 Tabulka 6 tab_obor …………………………………………………………………..23 Tabulka 7 tab_kontakt ……………………………………………………………….23 Tabulka 8 tab_popis ………………………………………………………………….23 Tabulka 9 tab_barvy …………………………………………………………………23 Tabulka 10 tie_typ_klient ……………………………………………………………23 Tabulka 11 tie_udalost_klient ……………………………………………………….23
41
13 Seznam použitých zkratek XHTML - Extensible hypertext markup language PHP - Personal Home Page CSS - Structured Query Language MySQL - My Structured Query Language HTML - Hypertext Transfer Protocol FTP - File Transfer Protocol SQL - Structured Query Language PDF - Package Definition File NGINX – eNGINE X WML - Wireless mark up language
42
14 Seznam příloh A. Obsah přiloženého CD
Adresář poradna se zdrojovými soubory
Soubor poradna.sql
Bakalářská práce ve formátu PDF
E –R model databáze
43