Katedra počítačov a informatiky Fakulta elektrotechniky a informatiky Technická univerzita Košice. Informačné technológie Branislav Sobota

Size: px
Start display at page:

Download "Katedra počítačov a informatiky Fakulta elektrotechniky a informatiky Technická univerzita Košice. Informačné technológie Branislav Sobota"

Transcription

1 Katedra počítačov a informatiky Fakulta elektrotechniky a informatiky Technická univerzita Košice Informačné technológie Branislav Sobota 2006

2 Informačné technológie 2

3 Predslov Predkladané skriptá majú za úmysel na malom miestom predložiť študentovi niektoré technológie používané v Internete a následne ukázať ich použitie v praxi. Predstavujú len štartovaciu platformu a tomu je aj podriadená forma, rozsah aj hĺbka uvádzaných informácií požadovaná pre 2.ročník programového zamerania Informatika. Napriek tomu z praktických skúseností viem, že na základné zvládnutie tejto technológie by mal uvedený rozsah postačovať. Publikácia predpokladá základné znalosti algoritmizácie a programovania. Napriek tomu, že obsahuje vybrané časti z databázových systémov nebude sa venovať ich širšiemu popisu ani rozsiahlejšiemu popisu jazyka SQL. Jednotlivé časti predstavujú jednotlivé okruhy a nebudú vždy priamo na seba nadväzovať, ich sumárne použitie bude uvedené v poslednej časti. Prvá časť v krátkosti približuje problematiku informačných systémov. Druhá časť obsahuje základné informácie o Internete, jeho službách a aplikáciách. Tretia, pomerne rozsiahla kapitola sa zaoberá problematikou jazyka HTML a tvorby WWW stránok. Ďalšia rozsiahla časť popisuje skriptovací jazyk PHP jednak uvedením jeho základov ako aj príkladov. Piata časť je venovaná databázovým systémom, jazyku SQL a najmä systému MySQL a jeho spolupráci s PHP. Šiesta časť rozoberá problematiku projektovania a tvorby rozsiahlych internetových aplikácií. Následné časti pojednávajú o bezpečnosti informačných systémov a elektronickom obchodovaní. Posledná obsahuje príklady niekoľkých aplikácií. Na tomto mieste by som chcel poďakovať mnohým kolegom z Katedry počítačov a informatiky FEI TU Košice, ktorí boli nápomocní pri tvorbe tejto publikácie. Najmä Ing. Jaroslavovi Porubänovi, ktorý stál pri zrode prvej vezie týchto učebných textov, Ing. Františkovi Jakabovi PhD. a Ing. Jurajovi Giertlovi za cenné rady z oblasti počítačových sietí, doc. Ing. Zdenkovi Havlicemu CSc. za pomoc v oblati informačných systémov a softvérového inžinierstva, Ing. Henriete Telepovskej PhD. za pomoc v oblasti databázových systémov a bezpečnosti a Ing. Danielovi Mihályimu za mnohé praktické postrehy a podporu pri príprave niektorých podkladov pre túto publikáciu. Motto: autor Za presne definovaných podmienok ako teplota, vlhkosť, tlak a pod. bude počítač robiť presne to, čo sa mu práve chce. 3

4 Informačné technológie 2006 Branislav Sobota Informačné technológie 4

5 Obsah Obsah 1 Úvod Informácia Informačné systémy a informačné technológie Informačné systémy a sieť procesov v organizácii Informačné systémy a ich komunikácia s okolím Internet, internetové služby a technológie Základné sieťové služby Internetu World Wide Web (WWW) Technológie Internetu Procesné platformy jednotlivých služieb a technológií Agentové systémy Jazyk HTML a používateľské rozhrania Štruktúra HTML dokumentu Kaskádové štýly Rámce v HTML Formuláre v HTML Ďalšie možnosti jazyka HTML a obslužné skripty CGI (Common Gateway Interface) a CGI skripty Javascript Java Interaktívna tvorba WWW stránok, HTML editory Ergonómia farieb v používateľských rozhraniach Úvod do jazyka PHP Niečo z histórie PHP Prvý skript Ukončenie behu skriptu Základné možnosti PHP PHP a formuláre PHP a databázy Základy jazyka PHP Integrovanie PHP skriptov do HTML Vkladanie PHP skriptu do PHP skriptu Syntax jazyka PHP Oddeľovanie príkazov v jazyku PHP Premenné jazyka PHP Prekrývanie premenných

6 Informačné technológie Pretypovanie premenných Konštanty v PHP Jednoduché (skalárne) údajové typy jazyka PHP Typ integer Typ double Typ string Zložité (štruktúrované) údajové typy jazyka PHP Polia Inicializácia poľa Funkcie pre prácu s poľom Viacrozmerné polia Výrazy v jazyku PHP Operátory v jazyku PHP Priraďovacie a aritmetické operátory Relačné a logické operátory Bitové operátory Operátor spájania reťazcov Podmienený operátor Priorita operátorov Základné príkazy jazyka PHP Neštruktúrované príkazy Štruktúrované príkazy Vetvenia Cykly Definovanie funkcií v jazyku PHP Rozsah platnosti premenných Odovzdávanie parametrov Štandardné hodnoty parametrov Statické premenné Niekoľko slov záverom Databázové systémy Základná charakteristika databázových systémov Charakteristiky databázových prístupov Kategórie ľudí pracujúcich s databázovým systémom Relačný databázový model Kľúče a integrita RDM Primárne kľúče Cudzie kľúče Doménová a referenčná integrita Charakteristka SQL Základné príkazy jazyka SQL CREATE

7 7 Obsah DROP INSERT DELETE UPDATE SELECT Komunikácia PHP s databázou Pripojenie a odpojenie databázy Operácie nad databázou Operácie manipulácie s údami Obsluha chýb a manažment pamäte Projektovanie a tvorba internetových aplikácií Základné etapy riešenia úloh Personálne zabezpečenie prác Životný cyklu aplikácie Formulácia (špecifikácia) úloh Analýza, syntéza a návrh Kódovanie, implementácia Ladenie, overovanie a testovanie Nasadenie a údržba aplikácie Bezpečnosť informačných systémov Kritériá podľa TCSEC (Oranžová kniha) Bezpečnosť internetových aplikácií Kontrola dát Dispatch metóda Include metóda Filtrovanie (overovanie) vstupných dát Identifikovanie vstupných dát Filtrovanie (overovanie) vstupných dát Rozlíšenie medzi overenými a chybnými dátami Prekódovanie (upravovanie) výstupných dát Identifikovanie výstupných dát Prekódovanie (upravovanie) výstupných dát Rozlíšenie medzi upravenými a chybnými dátami Autentifikácia a autorizácia Brute Force útoky Password Sniffing Opakované útoky Použitie LDAP servera pre autentifikáciu Include súbory Nechránený zdrojový kód Manipulácia s menami súborov...131

8 Informačné technológie Súbory a príkazy Prehľadávanie systému súborov Command Injection Databázy a SQL Nechránené prístupové dáta SQL Injection Elektronické obchodovanie Modely elektronického obchodovania Niektoré služby elektronického obchodovania E-shop - virtuálna maloobchodná predajňa E-mall- virtuálny obchodný dom E-banking E-procurement - elektronické verejné obstarávanie E-auction - elektronické dražby Virtual Community E-service providing Information brokerage - sprostredkovanie informácií Príklady aplikácií Anketný formulár s Javascriptom Grafika a PHP Kontrola a formátovanie rodného čísla Trochu zábavy s PHP Zoznam študentov Záver

9 Informácia a informačné systémy 1 Úvod Za posledných pár rokov sme svedkami prudkého rozvoja sveta a to najmä na báze výpočtovej techniky a informačných technológií. Spolu s týmto rozvojom dochádza aj k rozvoju celosvetovej počítačovej siete Internet. V dnešnej dobe už Internet pokrýva všetkých šesť kontinentov našej planéty, za ktorými stojí nepočetné množstvo používateľov, ktorých počet z roka na rok neustále stúpa. Tento fenomén samozrejme nemohol obísť ani oblasti priemyselných, obchodných a štátnych organizácií. Okrem počítačov jednotlivcov spája Internet práve rôzne akademické, komerčné, vládne ale i mimovládne organizácie. Prenikol aj do takých oblastí akými sú televízia (vysielanie cez internet) alebo telefonovanie. Tieto organizácie dodávajú výrobky určené na uspokojovanie potrieb alebo požiadaviek zákazníkov resp. občanov. Celková zvýšená konkurencia vyvoláva neprestajne vzrastajúce očakávania zákazníka týkajúce sa kvality ale aj pružnosti t.j. flexibility organizácie a najmä informácií o produkte. Je možné hovoriť o určitom type verejných informačných systémoch, ktorých zdroje nevyužívajú len zamestnanci tej-ktorej organizácie, ale aj ľudia mimo nej. Informácia sa stala tovarom. 1.1 Informácia Pojem informácia vzhľadom na svoju mnohovýznamovosť je rozsiahlejšie definovateľný. V princípe informácia je slovo s mnohými významami, ktoré závisia na kontexte, ale vo všeobecnosti dá sa opísať ako predpis blízky pojmom význam, poznatok, signál, inštrukcia, komunikácia, reprezentácia a mentálny podnet. Informácia zahrňuje v sebe správu spolu s jej významom pre príjemcu. Je to správa, ktorá vyjadruje istý stav, slúži nejakému cieľu alebo vyvoláva nejakú akciu. Správa sa stáva informáciou buď v dôsledku ľudskej interpretácie alebo tým, že ju spracujú algoritmy, alebo že je uložená v súboroch. Podľa Shannonovej teórie informácií je informácia mierou stredného informačného obsahu, prenositeľného daným kódovaním. Najmenšia jednotka informácie je jeden bit. Z tohto pohľadu 1 bit (1b) je množstvo informácií, ktoré získame správou o realizácii jedného z dvoch možných rovnako pravdepodobných stavov napr. Pravda/Nepravda, otvorené/zatvorené, 1/0 a pod. = 0 = 1 9

10 Informačné technológie Základnými charakteristikami informácie sú: merateľnosť - možno ju merať a tým určiť jej množstvo (kvantitu), napr. na pošte sa platí za telegram podľa počtu slov (počet slov je vyjadrením množstva informácie) adresovateľnosť - má svojho adresáta pre ktorého môže, ale nemusí mať význam. Z tohto hľadiska teda môžeme informácie rozdeliť na: o užitočné a o neužitočné. Z toho nám vyplýva vzťah medzi údajom a informáciou: Každá informácia musí byť súčasne údajom, ale nie každý údaj musí byť pre nás informáciou s nenulovým obsahom. Človek pre svoju činnosť potrebuje informácie. Nedostatok informácií môže viesť k subjektívnemu rozhodovaniu. Podobné dôsledky však môže mať aj nadbytok informácií. Pre kvantitu informácií objektívne existuje prah nasýtenia, za ktorým už človek nie je schopný spracovať ďalšie informácie. Zvyšovanie kvantity informácií vedie zákonite k poklesu ich využiteľnosti. S poklesom využiteľnosti informácií klesá aj použiteľná hodnota údajov. Pre hodnotenie kvality informácií nie je zatiaľ k dispozícii objektívna miera hodnotenia. Napriek tomu sa za vhodné kritériá považujú: pravdivosť (objektívnosť) konzistentnosť integrovanosť pragmatičnosť pohotovosť K týmto kritériám by sme mohli pripojiť aj inteligentnosť", t.j. schopnosť zachytiť poznatky a vedomosti v asociatívnom princípe, ktorý je blízky ľudskému mysleniu. Z iného pohľadu sa za kvalitatívnu mieru zhodnotenia informácií považujú: relevantnosť - vyjadruje či daná informácia súvisí s danou úlohou vierohodnosť, správnosť (validita) - je mierou správnosti vyjadrenia príslušného javu alebo objektu pochopiteľnosť - vyjadruje schopnosť informácie sprostredkovať informačný obsah svojmu príjemcovi presnosť - budeme chápať ako informačnú presnosť aktuálnosť - chápeme ako mieru súladu časových súradníc informácie a úlohy, pre ktorú sa informácie používajú. Aktuálnosť informácie súvisí so starnutím informácií a poklesom ich úžitkovej hodnoty. Aktuálnosť údajov je funkciou času medzi momentom, ku ktorému informácie vyjadrujú pozorovaný objekt, a momentom využitia informácie 10

11 Informácia a informačné systémy včasnosť informácií - vyjadruje to, že informácie sú k dispozícii v čase riešenia úlohy. Ide tu o zabezpečenie úlohy informáciami a nie o kvalitu informácií (to obsahuje aktuálnosť), teda o kvalitu vo vzťahu k úlohe, na riešenie ktorej sa používajú frekvencia poskytovania informácií - je v tesnom spojení s rytmom riadených procesov 1.2 Informačné systémy a informačné technológie Aby si organizácie zachovali schopnosť konkurovať a udržiavať dobrú ekonomickú výkonnosť, musia využívať stále efektívnejšia a účinnejšie systémy a technológie. Takéto systémy by mali viesť k neprestajnému zvyšovaniu kvality a k zvýšenému uspokojovaniu odberateľov organizácie a zainteresovaných účastníkov (zamestnancov, vlastníkov, subdodávateľov, spoločnosti). Z tohto pohľadu je užitočné vyčleniť štyri generické (druhové) kategórie produktov, ktoré sú z pohľadu informačných technológií v súčasnosti veľmi dôležité : hardvér; softvér; spracúvané materiály; služby. Tieto štyri generické kategórie zahŕňajú všetky druhy produktov dodávaných organizáciami. Ponuka akejkoľvek organizácie na trhu zvyčajne obsahuje dve alebo viac generických kategórií produktu bez ohľadu na to, v akom priemyselnom/hospodárskom odvetví táto organizácia pôsobí. Napríklad väčšina organizácií dodávajúcich hardvér, softvér alebo spracúvané materiály má vo svojej ponuke i zložku služieb (napr. poradenské služby). Zákazníci (a iní zainteresovaní účastníci) v každej generickej kategórii produktu hľadajú hodnotu obsiahnutú v ponuke. Analytické prístroje sú príkladom, v ktorom hardvér (t.j. prístroj), softvér (pre výpočty vykonávané prístrojom), spracúvané materiály (napr. referenčné materiály) a služby (napr. školenie obsluhy a údržby) môžu byť dôležitými súčasťami ponuky. Napr. taká organizácia služieb, akou je dnes obyčajná reštaurácia, zahŕňa hardvér (najčastejšie počítač vo forme registračnej pokladnice a zároveň určený na spracovanie skladu surovín), softvér (ekonomická a databázová aplikácia) a spracúvané materiály (suroviny, jedlo) ako aj zložky služieb (evidencia personálu, jedálne lístky apod.). Takisto je možné identifikovať štyri nasledujúce zložky, ktoré rozhodujúcim spôsobom prispievajú ku kvalite produktu a k jeho konkurencie schopnosti: zložka vyplývajúca z definície potrieb produktu (flexibilná zmena, uvedenie produktu, reklama, marketing a pod. najmä s podtrhnutím časového faktoru a ceny), zložka 11

12 Informačné technológie vyplývajúca z dizajnu produktu (pre programové produkty sa mimoriadne do popredia dostáva problematika používateľských rozhraní, ich prehľadnosti, jednoduchosti ovládania a stability, jednoducho povedané dizajn softvérového produktu), kvalita vyplývajúca zo zhody s dizajnom výrobku (napr. schopnosť vyhľadávať podľa zadaných kritérií, zabudovanie prvkov expertných systémov a pod.), kvalita vyplývajúca zo starostlivosti o výrobok (napr. zjednodušenie, zrýchlenie a zlacnenie upgrade, prísun vylepšených ovládačov zariadení a pod.). Dôležité vlastnosti niektorých výrobkov (programových nevynímajúc) zahŕňajú charakteristiky spoľahlivosti. Spoľahlivosť (bezporuchovosť, udržiavateľnosť, pohotovosť a zabezpečenosť údržby) môžu ovplyvňovať všetky štyri zložky kvality produktu. Niektoré zložky kvality môžu byť osobitne dôležité, napr. v zmluvných vzťahoch, všeobecne však ku kvalite výrobku prispievajú všetky zložky. 1.3 Informačné systémy a sieť procesov v organizácii Každá organizácia vykonáva prácu pridávajúcu hodnotu. Práca sa vykonáva pomocou siete procesov. Štruktúra siete zvyčajne nie je jednoduchá sekvenčná štruktúra, ale často býva zložitá. Z hľadiska organizácie sa zisk vyrába najmä na pridanej hodnote. Najmä v oblasti informačných technológií môže byť podiel pridanej hodnoty veľmi vysoký. V organizácii sa musí ale vykonávať veľa funkcií zahŕňajúcich výrobu, dizajn výrobku, riadenie technológie, marketing, školenie, riadenie ľudských zdrojov, strategické plánovanie, dodávanie, fakturáciu a údržbu. Pri zväčša zložitých organizáciách je dôležité objasniť hlavné procesy, zjednodušiť a stanoviť ich prioritu na účely riadenia. Organizácia musí identifikovať, organizovať a riadiť svoju sieť procesov a styčných plôch. Organizácia pomocou tejto siete vytvára, zlepšuje a poskytuje trvalú kvalitu svojich ponúk. Tu je kľúčovým momentom v dnešnej dobe zavedenie informačného systému a ďalších podporných informačných technológií. Tam, kde ľudia musia riadiť niekoľko procesov a ich vzájomné vzťahy, môžu vzniknúť problémy, najmä ak ide o rozsiahle procesy, ktoré môžu zahŕňať niekoľko funkcií. Aby sa vyjasnili styčné plochy, zodpovednosti a právomoci, za každý proces musí zodpovedať konkrétna osoba. Osobitne dôležitá je kvalita výkonných manažérskych procesov, akým je strategické plánovanie, čo v prípade fungujúceho informačného systému je jednoduchšie ako bez neho. V tejto súvislosti prichádzajú k slovu najmä dátové sklady (datawarehouse) a systémy dolovania údajov (datamining) a teda aj používateľského rozhrania. 12

13 Informácia a informačné systémy Informácia Výrobný proces resp. organizmus organizácie Položka databázy. Podsystémy KS Jadro (model) IS Objekt IS Výpočtový systém Obr. 1 Naviazanie Informačného systému, výpočtového systému a organizácie V rámci toho má hodnota informácie resp. dokumentu, ktorý ju obsahuje významnú ba až strategickú úlohu. Preto by mala byť príprava a používanie dokumentácie dynamickou činnosťou pridávajúcou hodnotu. Primeraná dokumentácia je dôležitá z hľadiska niekoľkých kritických úloh: dosahovania požadovanej kvality (produktu); zlepšovania kvality; udržiavania zlepšení. Dokumentácia je dôležitá pre zlepšovanie kvality. Ak sa postupy dokumentujú, rozpracujú a zavedú, možno vierohodne stanoviť, na čom sa priebežne pracuje, a možno merať priebežný výkon. To uľahčuje spoľahlivé meranie účinku zmeny. Dokumentované štandardné pracovné postupy sú okrem toho podstatné na udržanie prínosov z činností zlepšujúcich kvalitu. Výsledkom kombinácie dokumentácie, zručnosti a školenia pracovníkov je udržiavanie súladu rozpracovaných a zavedených postupov. V každej situácii treba hľadať primeranú rovnováhu medzi rozsahom dokumentácie a rozsahom zručnosti a školenia s cieľom zachovať dokumentáciu na rozumnej úrovni, ktorá sa môže udržiavať v primeraných intervaloch. Toto sa prejavuje najmä pri činnostiach vyplývajúcich zo starostlivosti o produkt, možnosti jeho rozširovania a vylepšovania. Z hľadiska samotnej správy Informačného systému (ďalej IS) a jeho využívania v organizácii je potrebné brať do úvahy nasledujúce činnosti: 13

14 Informačné technológie Návrh, správa a práca v heterogénnom sieťovom prostredí IS organizácie (podniku). Správa a práca na pracovných staniciach v IS organizácie Správa aplikácií a práca so systémami v IS organizácie Zálohovanie v IS organizácie Bezpečnosť IS organizácie Komplexná správa IS organizácie Pri práci s IS je potrebné si uvedomiť, že veľkú úlohu v používaní IS v jednotlivých organizáciách má ľudský faktor. Výpočtová technika nesie určité percento nespoľahlivosti, ale ľudia ešte väčšie. Každý systém, ktorý je závislý od ľudského faktora spoľahlivosti, je nespoľahlivý. Jedným z najväčších problémov súčasných IS je situácia, keď informačný systém organizácie narastie do takej veľkosti a rozmanitosti, že sa stáva neprehľadným. Každá kúpa nového sieťového zariadenia, upgrade hardvéru počítačov, zmena kabeláže, aktualizácie operačného systému alebo softvéru a pod. zneprehľadňuje stav v IS organizácie. Následkom býva čoraz ťažšia identifikácia porúch v informačnom systéme organizácie. Príčiny bývajú rôzne, najčastejšie sú tie klasické t.j. ľudský faktor, horšie sú však tie, ktoré sú zapríčinené nekompatibilitou hardvéru či softvéru. A medzi tie najťažšie odhaliteľné poruchy patria poruchy, ktoré sa "záhadne" objavia a ešte nečakanejšie miznú. Zvyčajne príčinou týchto porúch býva preťaženie systémových zdrojov (či už HW, alebo SW). Prostriedky vynaložené na zabezpečenie spoľahlivosti narastajú dovtedy, kým výdavky neprekročia pravdepodobné straty z chýb alebo kým sa z hľadiska organizačného nedosiahne, aby sa plánovala a robila aj užitočná práca. To znamená, aby administrátori mali k dispozícii nástroje na monitoring celého firemného IS (HW a SW) z jedného miesta, t. j. "videli" všetky pripojené zariadenia, štruktúru ich pripojenia, status (stav, v akom sa nachádzajú), ich konfiguráciu HW a SW s možnosťou monitoringu výkonnostných charakteristík pripojených zariadení (pre PC využitie disku, pamäte, procesora, množstva prenášaných paketov a pod.), a to v čase približujúcom sa reálnemu. Takýto nástroj by mal, samozrejme, obsahovať aj logy (zápisy do súborov) o dianí vo IS organizácie, aj keď administrátor nesedí za monitorom. Na najvyššom stupni stojí možnosť, aby nástroj uskutočňoval nápravné akcie na známe udalosti automaticky, t. j. bez zásahu administrátora (ten sa zatiaľ môže venovať iným činnostiam). Takéto nástroje existujú (dosť ťažko si potom predstaviť centrálnu správu multiplatformového IS v rozsiahlej, zemepisne distribuovanej organizácii), ich možnosti najčastejšie však aj zodpovedajú výške nákladov potrebných na ich nadobudnutie a prevádzku. V súčasnosti je niekoľko riešení, ktoré riešia správu IS na princípe architektúry manažér-agent (agentové systémy, pozri kapitolu ). Pod pojmom manažér sa myslí aplikácia, ktorá zbiera údaje získané od agentov, teda vlastne server, na ktorý je napojený administrátor ako klient. Tieto údaje 14

15 Informácia a informačné systémy ukladá do databázy, spracúva, navzájom porovnáva a vyhodnocuje, potom sú v grafickej, prípadne textovej forme zobrazené v okne aplikácie administrátorovi. Agent je služba (prípadne program) "sediaci" v monitorovanom zariadení, ktorý načúva premávke v IS. Keď príde k nemu požiadavka od manažéra, odpovie na ňu poslaním žiadanej informácie. V prípade, že dôjde k dôležitej udalosti na monitorovanom zariadení, agent sám pošle manažérovi informáciu o udalosti. Dokonalejšie systémy môžu obsahovať migrujúcich agentov a dokonca môže byť toto migrovanie časovo závislé (napr. plánovač kontroly integrity v antivírusovej kontrole). 1.4 Informačné systémy a ich komunikácia s okolím Vychádzajúc z Obr. 1 tvorí jadro komunikácie IS komunikačný systém. V princípe IS používa tri komunikačné kanály: dva vonkajšie a jeden interný. Interný kanál slúži na komunikáciu medzi jednotlivými modulmi IS prípadne časťami IS, ak sa jedná o distribuovaný IS na báze počítačovej siete (veľmi častý prípad dnes). Ostatné dva kanály slúžia na priamu a nepriamu komunikáciu s objektmi organizácie, ktorá IS prevádzkuje. Pri priamej komunikácii dochádza k priamej interakcii s ľudským činiteľom. Pri nepriamej komunikácii je možné napr. sledovanie dochádzky či dokonca riadenie výrobného procesu na úrovni napr. robotizovaných pracovísk. Z pohľadu komunikácie je väčšina súčasných IS riadená udalosťami. Z hľadiska štandardov sa podľa pôvodcu udalosti (aplikácia (IS) alebo používateľ) definujú tri spôsoby prijímania údajov: event (udalosť) - práca používateľa a aplikácie (IS) je relatívne asynchrónna. Používateľ generuje vstupy (napr. pohybuje myšou), tie sú ukladané do schránok a aplikácia (IS) ich odtiaľ vyzdvihne v prípade potreby. sample (vzorkovanie) - práca používateľa a aplikácie (IS) je asynchrónna. Aplikácia (IS) len vzorkuje stav vstupného zariadenia, na reakciu používateľa sa však nečaká. request (žiadosť) - práca používateľa a aplikácie (IS) je synchrónna. Aplikácia (IS) v prípade potreby žiada vstupný údaj a čaká na používateľov vstup. Základom každého IS je kvalitný výpočtový systém s príslušným operačným systémom, ktorý môže byť: dedikovaný alebo nededikovaný pre potreby nadstavbového IS. Z hľadiska návrhu, správy a práce s IS platia pravidlá uvedené v kapitole 1.3. Zjednodušene povedané súčasné IS je možné vystavať s nasledujúcimi programovými prostriedkami: operačný systém, databázový systém, komunikačné programové vybavenie, samotná aplikácia (jadro) IS a jeho používateľské a komunikačné rozhranie. Z hľadiska budúcnosti sa veľmi perspektívnou javí komunikácia medzi používateľom IS a samotným IS pomocou prostriedkov virtuálno-realitných systémov. Ukážku vidno na nasledujúcich obrázkoch. 15

16 Informačné technológie Obr. 2 Ukážka vizuálnej informácie s väzbou na informačný systém vo VR systéme (KPI FEI TU Košice) Obr. 3 Funkcia niektorých V/V prvkovvr-systému ako používateľského rozhrania nad informačným systémom (KPI FEI TU Košice) Len málo systémov v súčasnosti poskytuje pri zachovaní svojej integrity a zároveň požiadavky otvorenosti a dostupnosti také podmienky, ako je uvedené v predchádzajúcom. Jednou platformou, ktorá svojimi službami a technológiami spĺňa tieto podmienky je internet. Internet, jeho služby a technológie v značnej miere prispievajú k tomu, aby sa myšlienky uvedené v predchádzajúcich riadkoch stali každodennou praxou modernej informačnej spoločnosti. Z pohľadu tejto publikácie, vychádzajúc z Obr. 1 si uvedieme všetky úrovne na to, aby sme mohli jednotlivé aplikácie vytvárať. Nasledujúci obrázok ukazuje tri základné technológie, ich prepojenie a funkciu v celom procese aplikácie. Aj keď na jednotlivých úrovniach je možné použiť aj iné prostriedky, z hľadiska tejto publikácie sa budeme venovať najmä uvedeným. prezentačná vrstva Používateľské rozhranie Jadro, procesná logika HTML PHP, Java, JavaScript implementačná vrstva Databáza Obr. 4 Úrovne aplikácie a použité prostriedky 16 SQL

17 Internet, internetové služby a technológie 2 Internet, internetové služby a technológie Obrovský fenomén dneška. Svoj raketový nástup medzi verejnosť datuje do roku 1995, aj keď existoval predtým. Názvom Internet sa označuje spojenie všetkých počítačov, ktoré spolu komunikujú cez protokol (predpis komunikácie resp. je to množina všeobecne platných pravidiel komunikácie) TCP/IP. V roku 1969 ministerstvo obrany USA vytvorilo počítačovú sieť s názvom ARPANET, ktorá spájala štyri počítače. Táto sieť bola verejne predstavená v roku Vtedy sa na ňu pripojili mnohé univerzity aj výskumné organizácie. Špecifikovanie a programovanie druhej generácie sieťového programového vybavenia prebiehalo až do roku Dva hlavné prvky tejto generácie, Transmission Control Protocol (TCP) a Internet Protocol (IP), sa potom použili na pomenovanie celej rodiny protokolov. Protokoly TCP/IP sa rozšírili veľmi rýchlo. Internet sa dnes prezentuje ako spojenie mnohých čiastkových sietí, o ktoré sa starajú rôzne organizácie a je to vlastne WAN sieť. Hoci niektoré organizácie plnia úlohy pre celý Internet, predsa len nejestvuje žiadna organizácia, kompetentná a zodpovedná za Internet ako celok. 2.1 Základné sieťové služby Internetu Doteraz bolo popísané, čo to je Internet a akým spôsobom sa v ňom počítače identifikujú a spájajú. Teraz bude odpovedané, čo s Internetom vo všeobecnosti je možné robiť a aké služby ponúka. Niektoré z týchto služieb sú už historické, napriek tomu tu majú svoje miesto. Medzi základné služby patria: elektronická pošta ( ), hyperlinkové spojenia (www). priama komunikácia používateľov (irc, mud, icq, skype, miranda) prenos údajov (ftp) emulácia terminálu (telnet, ssh), diskusné fóra (netnews), distribuované informačné centrum (gopher) a prehľadávanie údajov podľa obsahových kritérií (wais). V nasledujúcich kapitolách v krátkosti budú popísané niektoré z nich. V súčasnosti je jednoznačne najviac používaný systém elektronickej pošty. Prakticky každý používateľ Internetu má svoju ovú schránku a je teda možné sa s ním spojiť prostredníctvom u. Druhý najviac používaný systém je systém World Wide Web (WWW), ktorý za posledných pár rokov zaznamenal fenomenálny nárast a v podstate naštartoval záujem o Internet pre bežného človeka. Veľká väčšina virtuálnych systémov na Internete dnes pracuje práve prostredníctvom 17

18 Informačné technológie WWW rozhrania. Jednoduchosť použitia tohoto rozhrania spočíva v tom, že samotná aplikácia zabezpečujúca služby beží na WWW serveri a WWW klientom môže byť ľubovoľný prezerací program (tzv. browser) zodpovedajúci príslušným štandardom. Okrem týchto dvoch je veľmi silne používaným systémom aj systém diskusných skupín. Tento systém umožňuje voľné zdieľanie informácií a ideí v rámci diskusných fór na rôzne témy. Veľkú popularitu má aj ďalší komunikačný systém (chat) - ICQ, čo je v princípe kombinácia elektronickej pošty a priamej komunikácie. S rozširovaním kapacity sieťových spojov narastá tiež používanie audio a video programov pre telefonovanie cez Internet. Ukážku aplikácie videospojenia vidno na nasledujúcom obrázku. Táto forma vďaka výraznému poklesu cien jednoduchých videokonferenčných kamier sa teší dnes mimoriadnej obľube medzi internetovou komunitou, najmä aplikácia Skype. Obr. 5 Ukážka aplikácie jednoduchého videospojenia a pomocou aplikácie Skype World Wide Web (WWW) Systém World Wide Web (WWW, v preklade celosvetová pavučina) je systém Internet serverov, ktoré poskytujú špeciálne formátované dokumenty v jazyku HTML (HyperText Markup Language, súbory s príponou.html resp..htm). Tento jazyk podporuje odkazy na iné dokumenty, ako aj grafické, zvukové a video súbory. To znamená, že môžete prechádzať z jedného dokumentu na iný jednoduchým klikaním myšou na aktívne miesta (hyperlinky). WWW tiež podporuje formuláre, pomocou ktorých je možné zaslať údaje späť na WWW server. Server tieto dáta spracuje a na ich základe môže dynamicky generovať stránky s požadovanými informáciami alebo vyplniť informácie v databáze. Existuje niekoľko aplikácií nazývaných Web prehliadače (WWW browser), ktoré uľahčujú prístup na World Wide Web. Dva najpopulárnejšie sú Mozilla Firefox a MS Internet Explorer. Okrem toho sa používajú ďalšie prehliadače ako Opera, či na platforme Linux-u Galeon alebo Conqueror. 18

19 Internet, internetové služby a technológie Obr. 6 Ukážka obrazovky prehliadača Mozilla FireFox Web prehliadače sa zvyčajne dajú rozšíriť o ďalšie vlastnosti pomocou tzv. plugg-in-ov. Tie sú osobitnými programami komunikujúcimi s používateľom priamo v okne Web prehliadača. Sú pomocou nich implementované napríklad prehrávače video súborov, prehliadače cudzích formátov (PostScript, PDF, DOC,...) ale aj komplexnejšie aplikácie ako napríklad VRML prehliadač pre zobrazovanie scén virtuálnej reality. S úspechom služby WWW sa presadila aj koncepcia jednotný a jednoznačný popis Internetových zdrojov. Ide o Uniform Resource Locator, skrátene URL. Na identifikovanie určitej informácie v Internete je potrebné vedieť: o aký druh informácie ide, na ktorom počítači sa informácia nachádza a kde je na tomto počítači informácia uložená. URL kombinuje tieto tri prvky do usporiadanej podoby a tak umožňuje jednotný popis informačného zdroja. Koncepciu URL je najlepšie vysvetliť na príklade. Zoberme si ho napríklad: Prvá časť http: označuje druh prenosového protokolu. V tomto prípade je to HTTP (HyperText Transfer Protocol) prenosový protokol pre World Wide Web. Okrem tohto protokolu sa dnes pre zabezpečenie vyššej bezpečnosti používa aj protokol HTTPS zabezpečený HTTP. Druhá časť :// definuje meno servera, na ktorom sa dokument nachádza a teda je potrebné ho osloviť. Tretia časť /indexsk.htm popisuje cestu k príslušnému súboru. Táto časť začína lomítkom a aj jednotlivé časti popisu cesty sa oddeľujú lomítkami (analogicky popisu cesty v operačnom systéme). Tento príklad sa teda odkazuje na súbor indexsk.htm v hlavnom adresári servera a na súbor je potrebné sa obrátiť prostredníctvom http prenosového protokolu WWW. Pri použití dnešných WWW prehliadačov postačuje aj napísanie len mena servera (napr. a http protokol sa použije automaticky a takisto sa hľadá implicitný inicializačný súbor index.htm, ak sa tam nenachádza alebo chceme presne špecifikovaný súbor, musí sa napísať aj celá tretia časť URL. 19

20 Informačné technológie. Obr. 7 Ukážka obrazovky Microsoft Internet Explorer-a 2.2 Technológie Internetu Po zopakovaní si základných internetovských služieb prichádzajú na radu technológie, ktoré sa v priebehu používania Internetu vyvinuli. V prvom rade sa jedná o rôzne komunikačné protokoly, kde vývoj technológií sa zameriava najmä na zvyšovanie rýchlosti a bezpečnosti protokolov. Príkladom môže byť zavedenie rôznych šifrovacích techník a tým bezpečnejších prenosov (HTTPS či SSH). Veľmi diskutovanou témou v tomto ohľade je autentifikácia internetových zdrojov a aj elektronickej pošty najmä v súvislosti s možnosťou vírovej nákazy klientského počítača. Tu sa jedná najmä o problematiku elektronického podpisu. V druhom rade sa jedná o problematiku druhej najviac využívanej služby Internetu WWW a jej hypertextových stránok. Spomínaný jazyk HTML prekonal od svojho vzniku dlhú púť a v súčasnosti predstavuje celosvetový štandard tvorby elektronických dokumentov. Okrem jednoduchých statických WWW stránok sa technológie v tomto smere pohli ku aktívnym stránkam s možnosťou spätnej väzby smerom k serveru, s možnosťou prehrávania audio a video sekvencií. Vývoj priniesol také jazyky a systémy ako DHTML (dynamické HTML), ActiveX, XML alebo aj stránky pre prehliadače integrované do mobilných telefónov na báze protokolu WAP. Treťou oblasťou je mimoriadny rozvoj najmä programovacích jazykov pôsobiacich v oblasti Internetu. Jedná sa o pomerne veľkú škálu jazykov jednoduchými skriptovacími počnúc a rozsiahlymi objektovo-orientovanými končiac. Tu sa jedná najmä o jazyky PERL, PHP, JavaScript či samotná JAVA. 20

21 Internet, internetové služby a technológie V spolupráci s týmito jazykmi sa jedná aj o využívanie stále sa tiež vyvíjajúcich a zdokonaľujúcich databázových systémov začínajúcich u menej rozsiahlych MiniSQL, MySQL a končiacich u veľkých systémoch ako sú PostgreSQL či Oracle. Práve zachytenie niektorých technológií z jednotlivých spomínaných oblastí bude náplňou ďalších kapitol tejto publikácie Procesné platformy jednotlivých služieb a technológií V princípe dnes dominujúcim sieťovým modelom je model klient-server popri ktorom už menej často distribuované aplikácie využívajú aj model peer-to-peer resp. agentový prístup. Dôležité je uvedomiť si, že základnou funkciou každého servera je poskytovanie služieb klientom. Súčasné sieťové technológie, internetové a informačné technológie nevynímajúc, pracujú s rôznymi typmi serverov. Medzi najpožívanejšie patria: súborový server, tlačový server, databázový server, WWW/http server, komunikačný server, ftp server, proxy server, autentifikačný server, poštový server, faxový server a zálohovací server. Tieto servery potom tvoria jednotlivé procesné platformy pre používané služby a technológie. Súborový server (file server) patrí medzi najstaršie druhy serverov. V princípe sa jedná o poskytovanie súborov, ich častí alebo celého súborového systému. Základným princípom tejto služby je umožniť používateľom pristupovať k spoločným súborom. Súborové servery využívajú rôzne optimalizačné techniky na to, aby poskytli požadované údaje čo najrýchlejšie. Medzi takéto techniky patria využívanie vyrovnávacej pamäte, optimalizácia prístupu na disky pomocou priorizácie požiadaviek, technológie RAID (diskové polia) a pod. Úlohou a zároveň výhodou súborových serverov je aj to, že umožňujú zdieľať súbory v nehomogénnych prostrediach, napríklad používateľom používajúcim Unix alebo Linux umožnia pristupovať k súborom používateľov používajúcich MS Windows a naopak. Dobrým súborovým serverom je aj Novell Netware, ktorý zároveň podporuje aj široké spektrum klientov. Aj MS Windows NT/2000/2003/Vista je možné použiť ako súborový server. Požiadavky súčasných používateľov na poskytovanie súborových služieb klesajú, a teda samotný výkon súborového servera nie je primárnym kritériom. Pokles požiadaviek na výkon súborového servera je spôsobený napríklad aj nástupom databázových serverov, ktoré nahrádzajú klasický súborový prístup k databázam (DBF) prístupom na základe požiadaviek (SQL - Structured Query Language). Špeciálnym typom súborového servera je CD-ROM server resp. DVD-ROM server. Najčastejšie ide o samostatné zariadenie obsahujúce niekoľko CD-ROM mechaník (DVD-ROM, Blue-Ray) a poskytujúce ich obsah príslušnému množstvu klientov. Je vhodné použiť tieto zariadenia v prípade, že používatelia potrebujú veľmi často pristupovať k veľkému 21

22 Informačné technológie množstvu statických informácií, ktoré sú obsiahnuté na niekoľkých CD-ROM médiách. Databázové servery postupne nahrádzajú v niektorých typoch aplikácií - najmä v informačných systémoch podnikov - klasický súborový prístup. Dôvodom je to, že údaje sú spravované a spracúvané centrálne, čo zvyšuje ich bezpečnosť a jednoducho umožňuje zabezpečiť integritu. Navyše databázové servery sú optimalizované na manipuláciu s dátami, a teda dokážu efektívnejšie splniť požiadavky. Nakoľko klientovi odosielajú iba dáta, ktoré potrebuje, výrazne znižujú záťaž komunikačného média, napr. počítačovej siete, a tým aj celého systému. Použitím databázového servera sa komunikácia redukuje na odoslanie požiadavky, ktorá je veľká niekoľko sto bajtov a prijatie odpovede, ktorej veľkosť je závislá od podmienky požiadavky. Dnes najčastejšie využívaným typom databázových serverov sú tzv. SQL servery (napr. Oracle, Microsoft SQL Server, InterBase, Sybase, MySQL či PostgreSQL). V poslednom čase sa databázové servery začínajú čoraz častejšie využívať ako zdroje dát pre intranetové a internetové servery. Je to spôsobené tým, že okrem klasických dát typu reťazec, číslo, dátum a pod. pribudla možnosť uchovávať aj multimediálne dáta ako zvuky, obrázky a animácie tzv. blob (binary large objects) dáta. Aplikačný server (application server) je pomerne novým typom servera. Na klientovi je prezentačná vrstva a na serveri je aplikačná logika aplikácie. Oproti súborovému serveru predstavuje aplikačný server rozdiel. Súborový server môže poskytovať miesto pre uloženie aplikácie. V prípade spustenia sa však celá aplikácia vykonáva na strane klienta. Naproti tomu pri aplikačnom serveri sa mnohé časti aplikácie vykonávajú aj na serveri (napr. rôzne výpočty a kontroly). Výhodou tohto usporiadania je ľahká správa aplikácie vrátane konzistentnej správy nových verzií (upgrade). Tieto typy serverov umožňujú resp. by mali umožňovať aj prenájom aplikácií za podstatne nižšiu cenu ako keby si ich mal zákazník celé kúpiť, ak potrebuje príslušnú aplikáciu len dočasne. Z toho vyplýva aj výhoda pri podnikovom nasadení aplikácie. Tlačový server (print server) poskytuje ďalšiu často požadovanú službu. Ceny bežných tlačiarní dnes klesajú a je občas diskutabilné, či má zmysel inštalovať spoločnú sieťovú tlačiareň alebo je jednoduchšie kúpiť každému používateľovi vlastnú tlačiareň. Používanie sieťovej tlačiarne je však jednoznačne ekonomickejšie a v konečnom dôsledku aj efektívnejšie. Tlačový server zbiera požiadavky používateľov na tlač a pomocou tlačiarní pripojených k nemu ich vybavuje. Okrem tejto základnej úlohy výhody tlačového servera nekončia. Mal by vedieť obslúžiť niekoľko tlačiarní (často aj niekoľko desiatok), mal by zabezpečiť aby v prípade, keď je tlačiareň obsadená, sa dokument vytlačil na inej, administrátorom definovanej tlačiarni. Ďalej by mal zabezpečiť, aby určité tlačiarne mohli používať iba určití používatelia a vedieť sledovať využívanie jednotlivých tlačiarní používateľmi. Mnoho súčasných tlačových 22

23 Internet, internetové služby a technológie serverov však dokáže omnoho viac. Pri menších sieťach častokrát samotný tlačový server nie je potrebný a postačuje len zdieľanie tlačiarní (podobne ako u platformy MS Windows alebo Linuxe). Proxy server je špeciálnym typom servera. Aplikuje sa od transportnej vrstvy a svojou účinnosťou patrí do oblastí brán (gateway). Jeho úlohou je vystupovať voči iným serverom v mene klientov. V prípade teda, že klient za proxy serverom chce zo servera ftp.xyz.com prevziať súbor abc.def, potom sa tento klient obráti na svoj proxy server a oznámi mu, že chce daný súbor z daného FTP servera. Proxy server sa potom pripojí na zvolený FTP server a prevezme vybraný súbor a následne ho odovzdá klientovi, ktorý oň žiadal. Tento prístup má viacero výhod. Keďže proxy server maskuje aktivitu klienta, o klientovi za proxy serverom sa nik nedozvie a tým sa zvyšuje bezpečnosť. Ak zabezpečíme že, všetci klienti pristupujú do vonkajšej siete iba cez proxy server, je možné sledovať, kto a čo robí, prípadne obmedziť prístup na vybrané servery vybraným používateľom, čím sa zlepšuje kontrola. Do proxy serverov sa často zabudováva vyrovnávacia pamäť, ktorá zachytáva najčastejšie navštevované stránky WWW serverov a najčastejšie prenášané súbory z FTP serverov. Keď potom klient požiada o stránku, ktorá sa už medzičasom nahrala do vyrovnávacej pamäte proxy servera, tak proxy server iba skontroluje, či objekty na stránke na WWW serveri sú zhodné s objektmi na danej stránke v jeho vyrovnávacej pamäti a klientovi potom odošle stránku z vyrovnávacej pamäte. To má za následok zníženie záťaže prenosových liniek a zníženie záťaže na často používaných serveroch. Medzi často používané proxy servery patria Novell Border Manager pre Novell NetWare, Microsoft Proxy Server pre MS Windows a Squid pre Linux. Autentifikačný server je jedným z bezpečnostných prvkov informačného systému. Jeho úlohou je spravidla dozerať na to kto, kedy, odkiaľ príp. ako sa do systému prihlásil. Na druhej strane jeho úlohou je zabezpečiť informovanie klienta, že je pripojený práve na zabezpečený a systém a nie na prípadný podhodený systém, čo je dôležité napr. pri internet bankingu (e-banking). FTP server poskytuje súbory. Možno sa niekomu bude zdať, že je to zbytočná činnosť, pretože to isté zabezpečujú aj súborové servery, no nie je to úplná pravda. FTP servery sa používajú predovšetkým v prostredí Internetu, teda vo veľmi heterogénnom prostredí. V tomto prostredí nie je definovaný štandardný protokol, teda okrem HTTP a FTP, ktorý by umožňoval prenášať súbory medzi takými rozdielnymi systémami, ako sú napríklad Unix a Apple Macintosh. FTP má zabudované vlastnosti, ktoré zabezpečia, že FTP server a jeho obsah budú totožné pre všetkých klientov. Najčastejšie využitie dnes nachádzajú FTP servery v spojení s HTTP servermi, ktoré síce tiež dokážu prenášať súbory, no FTP servery to robia efektívnejšie. FTP server je podporovaný všetkými základnými platformami OS. Z hľadiska bezpečnosti však častokrát systémoví inžinieri nepovoľujú túto službu. 23

24 Informačné technológie HTTP server je spojený s protokolom HTTP. Tento protokol a aplikácie s ním spojené, t. j. WWW servery sú príčinou takého rapídneho rozvoja Internetu. WWW server je vlastne súbor stránok s presne určenou štruktúrou. HTTP server tieto stránky dokáže čítať a poskytovať ich klientom. Jeden HTTP server môže obsluhovať viacero WWW serverov. Medzi najpoužívanejšie HTTP servery patria Apache (najviac používaný), Microsoft Internet Information Server (len Windows platforma) a Netscape Enterprise Server (všetky platformy). HTTP servery sa s výhodou používajú pri budovaní vnútorných, intranetových WWW serverov. Na takýchto serveroch je možné jednoduchým spôsobom sprístupniť všetko od základných informácií, ako sú vnútorný telefónny zoznam, organizačná štruktúra organizácie, organizačné normy podniku, až po komplexné aplikácie pracujúce s databázovými servermi poskytujúcimi informácie napr. o finančnej situácii a pod. Poštový server (mail server) zabezpečuje najvyužívanejšiu službu Internetu a to elektronickú poštu. V súčasnosti sa bežne používajú tri základné protokoly na prenos elektronickej pošty: SMTP, POP a IMAP. SMTP je protokol, ktorý sa používa na odosielanie správ a na ich doručenie do používateľských poštových schránok. POP vo verziách POP2 a POP3 a IMAP vo verziách IMAP3 a IMAP4 sa používajú na čítanie správ z používateľských poštových schránok. Z poštových serverov sa dnes vyvinuli tzv. groupware servery podporujúce skupinovú prácu. Tieto servery dokážu udržiavať skupinové kalendáre, sledovať plnenie úloh jednotlivých používateľov, manažovať stretnutia a pod. Príkladmi takýchto serverov môžu byť Novell GroupWise, Microsoft Exchange, ako aj Netscape Collabra a Messaging server. Faxový server (fax server) sa používa na manažovanie faxových správ v organizácii. Popularita faxových serverov dnes postupne klesá, pretože ich nahrádza elektronická výmena dokumentov, napr. pomocou už spomenutej elektronickej pošty, no sú prípady, keď je kvalitný faxový server veľkým skvalitnením práce. Bežný prístup k faxovaniu je: vytlačiť alebo inak prichystať stránku a potom odfaxovať. V prípade obsadenosti volaného čísla sa faxovaním zaoberá používateľ pomerne dlho. Takisto nastávajú problémy ak sa podarí odfaxovať len časť dokumentov alebo neúplné strany a pod. Faxové servery odstraňujú potrebu manuálnej manipulácie s dokumentmi. Dokument sa jednoducho priamo z aplikácie pošle na faxový server, čo je úkon podobný zaslaniu elektronickej správy alebo tlače. Navyše je potrebné zadať len adresáta alebo skupinu adresátov a faxový server sa postará o odoslanie dokumentu. Častokrát navyše je možné nastavovať také parametre ako napr. koľkokrát sa má pokúšať odoslať dokument, aké časové intervaly musia uplynúť medzi týmito pokusmi, či má odoslať iba neodoslaný zvyšok alebo celý dokument a pod. Tieto funkcie dokážu však aj inteligentné faxy, no faxový server môže byť užitočný aj pri prijímaní faxov. Na základe ID odosielateľa alebo na základe zadaného kódu (pomocou DTMF), prípadne na základe iných znakov dokáže 24

25 Internet, internetové služby a technológie faxový server prijaté dokumenty priamo smerovať k príjemcovi, a to napríklad vo forme správy v elektronickej pošte, prípadne sa mu dokument vytlačí na tlačiarni. Takýmto spôsobom možno ušetriť prácu napr. sekretárke, ktorá by musela došlé taxy rozniesť po kanceláriách, a zabezpečí sa aj to, že fax si prečíta iba oprávnená osoba. Zálohovací server (archive server) umožňuje bezproblémovo zálohovať všetky potrebné údaje na všetkých počítačoch v príslušnej sieti, či už sú to servery, alebo klientské stanice. So zálohovaním je často spojený tzv. recovery plan, teda plán obnovy, ktorého základ tvorí snaha o obnovenie prevádzky kritických častí informačného systému podniku v istom stanovenom časovom limite. Aj keď je možné pomocou zálohovacích serverov zálohovať aj klientské stanice, najčastejšie sa zálohujú iba disky serverov, keďže sa nedá zaručiť, že používateľ napríklad nevypne počítač. Problémom je aj, ako zálohovať. Tento problém zahŕňa voľbu technológie záložného média a aj voľbu metódy zálohovania. Podľa rozsahu je možné použiť CD médiá, magnetické alebo magnetooptické médiá alebo najlepšie magnetické pásky. Výhodou magnetických pások je, že ich možno použiť namiesto jednoduchej mechaniky tzv. changer - výmenníkový automat, ktorý sa stará o automatické zakladanie pások v prípade, že práve používaná páska sa naplní. Takýto "vymieňač" bežne obsluhuje do 10 pások. Súborový server klient Zálohovací server Databázový server Faxový server Aplikačný server Poštový server Tlačový server Proxy server FTP server HTTP server Autentifikačný server Obr. 8 Typy serverov 25

26 Informačné technológie Agentové systémy Iným príkladom pre model distribuovaného informačného systému sú tzv. agentové resp. multi-agentové systémy (MAS). Pojem multi-agentový systém je v súčasnosti chápaný ako systém skladajúci sa z viacerých autonómnych komponent majúcich nasledovné vlastnosti: každý agent má neúplné schopnosti pre riešenie stanovenej úlohy, neexistuje globálne riadenie systému, údaje sú decentralizované a výpočet je asynchrónny. Multi-agentové systémy (MAS) sa stávajú základnou technológiou v systémoch, kde hrajú dôležitú úlohu vzájomné závislosti komponent, dynamické prostredie, neurčitosť a sofistikované riadenie, pričom ponúkajú možnosť pre modelovanie a teoretickú reprezentáciu týchto systémov. Samotné programové agenty môžeme rozdeliť do viacerých skupín, pričom si uvedieme aspoň niektoré: spolupracujúce agenty - dôraz je kladený na autonómnosť a spoluprácu jednotlivých agentov, vyžadujú spoločné dorozumievanie sa s cieľom splniť zadané úlohy, agenty rozhrania - z vlastností je dôraz kladený na autonómnosť a schopnosť učiť sa, pričom v pozadí stojí koncepcia osobných asistentov, ktorí spolupracujú s používateľom s cieľom uľahčiť mu prácu v danom prostredí, mobilné agenty - programové výpočtové procesy, ktorých základnou charakteristikou je schopnosť autonómneho putovania po rozľahlých počítačových sieťach (WAN) s cieľom vykonať zadanú úlohu, informačné/internetové agenty - sú na rozdiel od predchádzajúcich kategórií definované podľa toho, čo vykonávajú (a nie podľa toho, čo sú) a ich základnou úlohou je uľahčenie získavania informácii z čoraz väčších a bohatších (a tým aj neprehľadnejších) informačných zdrojov (napr. WWW). Tento druh agentov, najmä z pohľadu vyhľadávania informácií, sú dnes populárne v informačných systémoch. Z pohľadu počítačových sietí sú najzaujímavejšou skupinou mobilné agenty. Ako už bolo spomenuté, základnými vlastnosťami mobilných agentov je autonómnosť a mobilita. Autonómnosť preto, že po svojom vzniku majú schopnosť samostatného rozhodovania, t.j. ktoré miesta - lokácie - navštívia v rámci svojho prostredia (počítačová sieť) a ktoré akcie budú na týchto lokáciách vykonané. Toto správanie je implicitne definované v zdrojovom texte agenta, alebo prostredníctvom v čase existencie agenta modifikovateľného cestovného plánu (itinerary) agenta. Mobilita je teda charakteristickou vlastnosťou pre schopnosť mobilných agentov premiestňovať sa medzi lokáciami, ktoré predstavujú základné prostredie pre ich vykonanie a zároveň reprezentujú abstrakciu použitej počítačovej siete a operačného systému. 26

27 Internet, internetové služby a technológie Životný cyklus agenta spravidla obsahuje nasledovné udalosti: vznik a zánik, príprava na premiestnenie na novú lokáciu (dispatch), príchod na novú lokáciu (arrival) a komunikáciu, v rámci ktorej mobilný agent obsluhuje prichádzajúce správy od iných agentov. Mobilita samotná však nie je ani nutnou, ani postačujúcou vlastnosťou charakterizujúcou agenta. Mobilné agenty však tvoria samostatnú skupinu a oblasť výskumu v rámci programových agentov z dôvodu svojej autonómnosti a schopnosti spolupracovať na inom princípe, odlišnom od skupiny spolupracujúcich agentov. Samozrejme použitie stacionárnych alebo mobilných agentov závisí v prvom rade od aplikácie, pre ktorú sú určené. K motiváciám použitia mobilných agentov patria: redukcia komunikačnej záťaže - vyplývajúca hlavne z možnosti prenášať vybrané, pre používateľa zaujímavé informácie, ktoré mobilný agent odfiltroval už na mieste zdroja informácie (napr. na rozdiel od spojenia so zdrojom typu Remote Procedure Call), šetrenie lokálnych zdrojov - umožňuje použitie na výpočtové zdroje náročných služieb aj u počítačov s nedostatočnými lokálnymi zdrojmi, jednoduchšia koordinácia - vzdialené a navzájom nezávislé dotazy sa môžu koordinovať jednoduchšie, pričom porovnanie ich výsledkov prebieha lokálne, asynchrónny výpočet - mobilné agenty konajú samostatne aj bez udržiavania neustáleho spojenia s domovskou lokáciou a až po vykonaní zadanej úlohy nadviažu spojenie späť, ktoré im umožní návrat, pružná architektúra pre distribuovaný výpočet - mobilné agenty predstavujú zároveň aj nový, dynamický typ architektúry pre distribuované výpočty, vznik novej technológie - príležitosť pre radikálnu zmenu myslenia pri procese návrhu a tvorby softvéru. Systémy na báze mobilných agentov sa využívajú hlavne pri správe inteligentných sietí, vyhľadávaní informácií a pri tvorbe sieťových služieb novej generácie pre používateľov mobilných zariadení (mobilné telefóny, PDA, laptopy...), ktorým tradičný model klient-server neumožňuje využiť všetky možnosti. 27

28 Informačné technológie 3 Jazyk HTML a používateľské rozhrania Ako už bolo skôr povedané základom WWW služby sú WWW stránky, ktoré sú definované pomocou hypertextového jazyka HTML. Prvá verzia HTML vznikla v roku 1989 v stredisku CERN v Ženeve. Od toho roku jazyk HTML prešiel dlhým vývojom. O štandardizáciu jazyka HTML sa snaží WWW konzorcium (W3C), ale mnohé firmy (napr. Microsoft) zapracovávajú do jazyka rôzne rozšírenia. Potom nie všetky prehliadače vedia takéto rozšírenia spracovať a neznáme príkazy v rámci jazyka sú ignorované. Pre tvorbu HTML dokumentov existuje celý rad podporných prostriedkov. Podporné prostriedky pre tvorbu WWW stránok môžeme rozdeliť do troch typov: použitie klasického textového editora, na úrovni UNIXu aj napr. editora vi. Niektoré moderné textové editory tohto typu (napr. UltraEdit) poskytujú aspoň podporu v tom, že dokážu už farebne odlišovať príkazy (značky) HTML od ostatného textu a takto sprehľadniť celú tvorbu. špeciálne textové editory umožňujúce okrem písania a editovania textu vkladať celé HTML príkazy. interaktívne grafické editory, ktoré umožňujú priame vkladanie jednotlivých komponentov a tým vizuálnu kompozíciu stránky (napr. FrontPage, Namo a pod.). Jazyk HTML rozoznáva dva druhy príkazov (tagov): Riadiace: tieto majú tvar <príkaz> prípadne príkaz s parametrami, ktoré sú uvedené tiež medzi znakmi <>. Pri písaní príkazov sa nerozlišujú veľké a malé písmená. Formátovacie: tieto sú párované a majú tvar <príkaz> pre počiatok a </príkaz> pre koniec. Niekedy sa týmto prílazom hovorí aj HTML značky alebo tag-y. V ďalšom výklade bude používané však označenie príkaz resp. párový príkaz. Súčasná špecifikácia HTML (4.x) je už pomerne rozsiahla a v tejto publikácii sa obmedzíme len na výklad základných a niektorých rozšírených prvkov, ktoré sa budú pri ďalšom výklade používať. Detailnejší popis je možné nájsť na Štruktúra HTML dokumentu Celý dokument sa začína príkazom <HTML> a končí párovým príkazom </HTML>. Dokument sa delí na dve časti: hlavičku a telo dokumentu. 28

29 Jazyk HTML Hlavička je ohraničená párovým príkazom <HEAD> a telo párovým príkazom <BODY>. Hlavička dokumentu obyčajne obsahuje názov dokumentu, ktorý je definovaný párovým príkazom <TITLE>. Názov dokumentu sa spravidla zobrazí v priehliadači v záhlaví okna a takisto identifikuje dokument v zozname adries pre hypertextové skoky. Hlavným formátovacím prvkom v rámci tela je odstavec. Pri zobrazovaní HTML dokumentu sa totiž medzery a nové riadky, ktoré idú za sebou, zobrazia ako jediná medzera. Preto, ak je potrebné členiť text na odstavce, potom sa tieto uzavrú do párového príkazu <P>.V otváracom príkaze môžu byť uvedené aj parametre predpisujúce zarovnanie okrajov odstavca. Ako už bolo uvedené, znak nového riadku je prehliadačom ignorovaný. Ak je potrebné v rámci odstavca zalomiť riadok zadá sa príkaz <BR>. Keď je potrebné zabrániť zalomeniu textu na konci riadku, potom príslušný riadok sa uvedie v tele párového príkazu <NOBR>. Na vloženie tzv. pevnej medzery sa vloží špeciálny znak &nbsp. Ak je potrebné do HTML dokumentu vložiť úsek textu so zachovaním jeho pôvodného formátovania s akceptovaním viac medzier po sebe, tabelátorov resp. nových riadkov potom pre tento účel sa použije párový príkaz <PRE>. Potom v takomto texte je všetko skôr uvedené akceptované, ale použije sa neproporcionálne písmo. Okrem týchto základných prvkov umožňuje HTML používať aj: Rôzne druhy, zarovnanie a veľkosti textov, Obrázky, Hyperlinkové odkazy, Tabuľky, Zoznamy, Formulárové prvky Kaskádové štýly Jazyk HTML bol pôvodne navrhnutý pre popis štruktúry WWW stránok. Preto do neho neboli implementované technológie zaoberajúce sa formou výsledného zobrazenia dokumentu. Postupom času sa však používanie Internetu rozšírilo z vedeckých centier a univerzít, a grafická podoba stránok začala mať väčšiu váhu. HTML bolo obohatené o príkazy a atribúty sledujúce tento trend (príkaz <FONT> apod.), avšak toto riešenie sa ukázalo ako nedostatočné a nesystematické. V súčasnej dobe je propagované oddelenie obsahu stránky od definície formy jeho zobrazovania. Doporučovanou technológiou pre úpravu grafického vzhľadu sú kaskádové štýly CSS (Cascading Style Sheets). Umožňujú pre každý príkaz nastaviť mnoho atribútov ovplyvňujúcich jeho vizuálnu podobu. Niektoré z nich sú podobné štandardným atribútom príkazov jazyka HTML (napr. ALIGN pre definovanie spôsobu zarovnania), iné sú však dostupné len použitím štýlu (napr. BORDER-STYLE pre definíciu štýlu ohraničujúcej čiary pri tabuľkách). Naviac je možné definovať niekoľko rôzne 29

30 Informačné technológie pomenovaných variantov jedného príkazu a pri zápise stránky si vybrať, který z nich chceme použiť. Zápis definície štýlu sa vykonáva buď priamo do zdrojového textu stránky ako obsah príkazu <STYLE>, alebo do zvláštneho súboru, ktorý sa príkazom <LINK> pripojí ku stránke. <LINK REL="stylesheet" TYPE="text/css" HREF="styly.css"> Druhý uvedený spôsob je používaný častejšie, pretože umožní využiť jednu definíciu štýlu pre niekoľko dokumentov. Tak je možné jednoducho dosiahnuť jednotný dizajn celej WWW prezentácie a tým vlastne celého používateľského rozhrania aplikácie. Naučiť sa používať CSS nie je príliš zložité. Niektoré programy pre návrh HTML stránok majú integrované nástroje pre tvorbu štýlu, takže si používateľ nemusí pamätať všetky vlastnosti príkazov, len si vyberie zo zoznamu. Príklad obsahu súboru so štýlmi je uvedený v nasledovnom: P { background-color : Green; } H1 { } font-size : xx-large; font-family : sans-serif; color : Blue; text-align : center; background-color : Black; A { font-size : x-small; } A:Hover { font-size : small; } BODY { background-color : Fuchsia; }.menu { font-family : sans-serif; color : Blue; font-style : normal; font-weight : normal; text-decoration : none; font-size : medium; }.nadpis { font-family : sans-serif; font-weight : bold; color : Black; font-size : medium; }.malynadpis { font-family : sans-serif; font-weight : bold; color : Black; font-size : small; } Príklad použitia kaskádového štýlu je možné vidieť v kapitole

31 3.2 Rámce v HTML Obr. 9 Príklady definovania rámcov 31 Jazyk HTML Technika rámcov umožňuje rozdeliť okno prehliadača na niekoľko častí a v každej časti môže byť zobrazená iná stránka. Navyše je možné definovanie odkazu v jednom rámci tak, aby sa vykonalo načítanie stránky do iného rámca. Týmto spôsobom je možné umiestniť na stránku napr. navigačnú ponuku. Rámce sú dnes už podporované spravidla väčšinou prehliadačov. Pri tvorbe používateľského rozhrania IS na báze HTML je použitie rámcov výbornou voľbou. Jeden rámec môže obsahovať menu aplikácie a druhý rámec použiť na výstup aplikácie Definovanie rámcov a ich rozloženie na stránke sa vykoná v jednom HTML dokumente. Tento následne bude odkazovať na ďalšie dokumenty, ale už príslušne zobrazené do definovaných rámcov. Dokument resp. stránka obsahujúca definíciu a rozloženie rámcov musí obsahovať klasický párový príkaz <HEAD> a potom samotnú definíciu rozloženia rámcov pomocou párových príkazov <FRAMESET>. Párové príkazy <FRAMESET> môžu byť do seba vnárané. Telo stránky definované párovým príkazom <BODY> nemusí byť uvedené a je zobrazované len v tých prehliadačoch, ktoré rámce nepodporujú. Sem je potom možné umiestniť odkaz napr. na alternatívnu verziu dokumentu, ktorá rámce neobsahuje. Pri použití príkazu <FRAMESET> sa používajú dva parametre: ROWS (riadky, vodorovne) a COLS (stĺpce, zvisle). Hodnoty týchto parametrov sú zoznamy veľkostí jednotlivých vodorovných alebo zvislých rámcov oddelených čiarkami. Počet položiek v danom zozname určuje počet rámcov, ktoré sa vytvoria. Obvykle sa používa len jeden z parametrov a pokiaľ sa použijú obidva, vytvorí sa vlastne matica rámcov, ktorých počet odpovedá súčinu počtu vodorovných a zvislých častí. Hodnoty jednotlivých prvkov zoznamu môžu byť zadané absolútne v bodoch, percentuálne alebo je možné použiť dvojznak X* (kde X je číslo, ak nie je uvedené je X=1). Potom pri rozdeľovaní voľnej plochy sa najprv priradí priestor rámcom definovaných bodovo alebo percentuálne. Zvyšná plocha sa rozdelí medzi rámce definované *. Plocha je rozdelená proporcionálne podľa čísel uvedených pred príslušnými hviezdičkami. A B <FRAMESET ROWS=50%,50%> definícia rámca A definícia rámca B </FRAMESET> A B C <FRAMESET COLS=*,40%,*> definícia rámca A definícia rámca B definícia rámca C </FRAMESET> B A C <FRAMESET ROWS=50,*> definícia rámca A <FRAMESET COLS=20%,*> definícia rámca B definícia rámca C </FRAMESET> </FRAMESET> A C E B D F <FRAMESET ROWS= *,2*,50 COLS=50%,50%> definícia rámcov A-F </FRAMESET>

32 Informačné technológie Samotná definícia jednotlivých rámcov sa vykoná pomocou <FRAME>. Tento príkaz má nasledujúce parametre: 32 príkazu Parameter Význam SRC Definuje stránku, ktorá sa prvotne zobrazí v príslušnom rámci napr. NORESIZE SCROLLING FRAMEBORDER MARGINWIDTH MARGINHEIGHT NAME <FRAME SRC= stranka. html > Zabraňuje používateľovi meniť veľkosť rámca jeho hodnota rozhoduje o tom, či rámec bude doplnený o posúvač (posuvnú lištu) umožňujúci používateľovi pohyb po dlhších stránkach zobrazených v rámci. Implicitne je hodnota = AUTO. Hodnotou YES je posúvač vnútený, hodnotou NO zakázaný. definuje okolo rámca orámovanie. Ak nechceme orámovanie nastavíme tento atribút na 0. Toto je však nutné vykonať aj pre všetky susedné rámce. definuje vzdialenosť obsahu rámca vľavo a vpravo od jeho okraja. Udáva sa v bodoch (pixeloch) definuje vzdialenosť obsahu rámca hore a dolu od jeho okraja. Udáva sa v bodoch (pixeloch) definuje meno rámca. Je to dôležitý parameter. Na toto meno je možné sa potom odvolávať napr. v hypertextovom odkaze. Tým sa dosiahne to, že aktivácia odkazu v jednom rámci, vykoná načítanie stránky v inom rámci. Meno rámca môže byť ľubovoľné, malo by však začínať písmenom. Tab. 1 Parametre príkazu <FRAME> Následne je možné meno využiť v jednotlivých stránkach pomocou parametra TARGET. Jemu priradíme meno rámca, v ktorom chceme zobraziť stránku, ktorá je definovaná odkazom alebo inak, vlastne definujeme, do ktorého rámca podľa jeho mena sa má daná stránka zobraziť. Parameter TARGET sa najčastejšie používa s <A HREF=...>. Ak sa budeme odkazovať na ten istý rámec v dokumente, je možné definovať v časti záhlavia stránky (<HEAD>) bázický rámec a potom už nie je nutné pri všetkých odkazoch implicitne definovať hodnotu parametra TARGET. Definovanie bázického cieľového rámca sa dosiahne príkazom <BASE> s následne uvedením cieľa TARGET napr. <BASE TARGET=ramecA>. Okrem takto definovaných mien rámcov je možné použiť pre hodnotu TARGET aj niektoré preddefinované možnosti, ako ukazuje nasledujúca tabuľka:

33 Jazyk HTML Hodnota _blank _top _self _parent Význam Stránka (dokument) sa zobrazí v novom nepomenovanom okne. Stránka (dokument) sa nahrá do celého okna prehliadača a všetky rámce sa zrušia Stránka (dokument) sa zobrazí v rovnakom okne. To je možné s výhodou využiť v prípade, že v dokumente (stránke) je použitý príkaz: <BASE TARGET=meno_rámca> Stránka (dokument) sa nahrá do rámca alebo okna, ktoré obsahuje najbližší nadradený príkaz <FRAMESET> Tab. 2 Niektoré preddefinované hodnoty parametra TARGET Záverom ešte niečo k prehliadačom, ktoré nepodporujú rámce. Okrem už spomínaného spôsobu (v tele dokumentu) je možné ešte použiť aj párový príkaz <NOFRAMES>. Jeho obsah sa zobrazí len v prehliadačoch, ktoré rámce nepodporujú. Obr. 10 Ukážka zobrazenia stránky s rámcami 3.3 Formuláre v HTML Formuláre predstavujú pokročilejšiu technológiu na internetových stránkach a sú nevyhnutnou črtou pre nasadenie v informačných systémoch. Pomocou formulárov môže používateľ vyplniť určité údaje a tieto sú potom následne odoslané serveru na ďalšie spracovanie. Odpoveďou servera môže byť napr. ďalšia stránka. Typickým a častým prípadom využitia formulárov je vkladanie registračných údajov na serveroch, ktoré poskytujú zdarma kontá elektronickej pošty. Komplexné spracovanie tvorby a vyhodnocovania formulárov je pomerne rozsiahla záležitosť a tak sa v nasledujúcom budeme venovať len základom. 33

34 Informačné technológie Formuláre môžu obsahovať niekoľko typov objektov. Najpoužívanejšie objekty sú: textové pole objekt obsahujúci jedno- (text) alebo viacriadkové (textarea) textové pole pre zadávanie údajov. Špeciálnym typom je zabezpečené pole typu password. tlačidlo výkonný objekt, ktorý má pre svoju následnú činnosť buď preddefinovaný význam (napr. odoslanie alebo resetovanie obsahu formulára), alebo mu môže byť jeho činnosť naprogramovaná. zaškrtávacie políčka - predstavujú typ objektov, ktoré umožňujú vybrať z daných možností buď práve jednu (radio) (napr. pri pohlaví), alebo niekoľko (checkbox)(napr. výber koníčkov). rozbaľovací zoznam (select) ponúka voľby, z ktorý môže používateľ vyberať (napr. výber dosiahnutého vzdelania). výber súboru umožňuje vybrať súbor z lokálneho disku používateľovho počítača napr. na pripojenie doplnku k pošte a pod. skryté pole (hidden) tento objekt sa nezobrazuje, s výhodou sa však používa na prenos takých údajov, ktoré je potrebné odoslať ale nie zobraziť. Vloženie formulára zabezpečí párový príkaz <FORM>. V rámci neho sú potom uvedené všetky objekty, ktoré tvoria samotný formulár. Takisto tu môžu byť uvedené ďalšie príkazy na úpravu vzhľadu formulára (textu, tabuľky, obrázka a pod.). Najdôležitejšími atribútmi príkazu <FORM> sú: ACTION definuje, kde sa bude formulár spracovávať METHOD definuje spôsob odovzdania informácií spracovateľovi (pozri aj kapitolu 3.4.1). Ak má byť formulár spracovaný určitým programom (napr. napísaným v skriptovacom jazyku), môže vyzerať príkaz <FORM> nasledovne: <FORM ACTION= METHOD= post >... obsah formulára... </FORM> Okrem tohto prípadu je tu aj možnosť odoslania vyplneného formulára na špecifikovanú adresu elektronickej pošty: <FORM ACTION= mailto: sobota@tuke.sk METHOD= post >... obsah formulára... </FORM> Ako obsah formulára sa zadávajú jednotlivé prvky, ich formát a umiestnenie. V rámci jednej stránky sa môžu nachádzať aj viaceré formuláre ale sa nesmú prekrývať.v nasledujúcom príklade si uvedieme jednoduchý formulár. 34

35 Jazyk HTML <html> <head> <title>anketa</title> </head> <body background="pozadie.gif"> <table> <tr><td><h1>anketa</h1> <td align="right"><form action=" method="post"> Vstupný kód: <input TYPE = "password" NAME = "e_kod" SIZE=5 MAXLENGTH=20 VALUE="kod"> <input type="image" src="eshop.gif"> </form> <form action=" method="get"> <tr><td>váš vek:<td><input TYPE="text" NAME="vek" SIZE=10 MAXLENGTH=20> rokov <tr><td>pohlavie:<td><input TYPE="radio" NAME="pohlavie" VALUE="muz">Muž <input TYPE="radio" NAME="pohlavie" VALUE="zena" CHECKED>Žena <tr><td>priemerný príjem:<td><input TYPE = "prijem" NAME = "tovar" SIZE=10 MAXLENGTH=20 VALUE="0"> Sk / mesiac <tr><td>priemerný výdaj za tovar:<td><input TYPE = "text" NAME = "vydaj" SIZE=10 MAXLENGTH=20 VALUE="0"> Sk / mesiac <tr><td>priemerný počet nákupov:<td><select name="nakupy" size=1> <option value="1" SELECTED>Jeden <option value="2">dva <option value="3">tri <option value="4">štyri a viac </select> za mesiac <tr><td>uvítal(a) by som:<td><input TYPE="checkbox" NAME="balenie" CHECKED>Darčekové balenie <input TYPE="checkbox" NAME="odvoz">Odvoz tovaru <tr><td>vaše návrhy<td><textarea name="navrhy" rows=3 cols=40>sem napíšte Vaše návrhy</textarea> <tr><td colspan=2><input TYPE="reset" VALUE="Zmaž"> <input TYPE="submit" VALUE="Odoslať"> <form> </table> </body> </html> Formulár v prehliadači vyzerá tak, ako ukazuje nasledujúci obrázok. 35

36 Informačné technológie Obr. 11 Ukážka formulára Každý prvok formulára má svoje meno. Potom sa na spracovanie odošle skupina uspriadaných dvojíc v tvare "meno, hodnota. V tomto príklade je použitý jeden všeobecný prvok <INPUT>, ktorého funkcia sa nastavuje poľa hodnoty atribútu TYPE. V prvom formulári je vidieť efekt textového poľa typu password a zobrazenie tlačidla s obrázkom (obsluha nie je implementovaná). V druhom formulári je typ text, ktorý je zobrazený ako jednoriadkové pole, kam môže používateľ vložiť textovú hodnotu. Ďalšie dve položky majú zhodný typ radio. Tvoria spolu logickú skupinu, preto majú aj rovnaké meno. Pri zobrazení bude pre každú z nich vykreslené jedno políčko prepínača. Z celej skupiny môže byť však vždy vybratá len jedna položka (aktivácia jedného automaticky ruší označenie u ostatných). Nakoľko používateľ nezadáva žiadny text, ktorý by sa odoslal ako hodnota tohto vstupného prvku, musí byť jednotlivým políčkam hodnoty priradené v atribúte VALUE. Ďalší prvok predstavuje použitie rozbaľovacieho zoznamu select. Jeho položky sa rozbalia po nakliknutí na šípku vedľa zoznamu. Nasledujúce prvky sú zaškrtávacie políčka checkbox. U prvého je vidieť ako nastaviť zaškrtnutie ako predvolené pomocou atribútu checked. Možnosť vloženia rozsiahlejšieho textu návrhov je riešený pomocou viacriadkového textového poľa textarea. Posledné dva prvky predstavujú tlačidlá. Po stlačení prvého (typ SUBMIT) sa vykoná odoslanie formulára k ďalšiemu spracovaniu programom, ktorý je definovaný na začiatku formulára atribútom ACTION (správna funkcia tohto formulára je samozrejme podmienená existenciou spracovateľského programu). Stlačenie tlačidla s typom RESET sa vykoná obnovenie pôvodného stavu formulára. Obidve tlačidlá majú atribútom VALUE definovaný text, ktorý sa vypíše na tlačidlo. 36

37 37 Jazyk HTML Ako už teda bolo uvedené, aby bolo možné údaje o ovládacom prvku (vstupnom poli) formulára odoslať musí sa tento dať charakterizovať párom názov-hodnota. Na určenie názvu slúži atribút NAME príslušného príkazu a hodnota je určená obyčajne atribútom VALUE. Závisí však aj od toho, aké zmeny so vstupným poľom vykonal používateľ. Údaje vstupných polí bez názvu alebo bez hodnoty sa neodosielajú. Čo sa vlastne vykoná v momente stlačenia odosielacieho tlačidla, závisí od atribútov ACTION a METHOD príkazu FORM. Vieme, že ACTION obsahuje URL objektu (programu, skriptu)", ktorý má údaje spracovať. Tým pádom to nemôže byť obyčajná stránka v HTML ani iný súbor určený iba na stiahnutie a interpretáciu prezeračom. ACTION musí smerovať na program, ktorý sa vykoná na serveri, prevezme údaje z formulára a vhodne na ne zareaguje (avšak v rámci toho aj odošle späť dokument, ktorý má zobraziť prehliadač (klient)). Tento program môže byť k www-serveru pripojený napr. prostredníctvom CGI, ASP, PHP alebo ľubovoľného iného rozhrania. Parameter METHOD určuje "metódu prístupu" k objektu určenému v ACTION. V súčasnosti prichádzajú prakticky do úvahy pri odosielaní údajov z formulára iba dve metódy: GET a POST. Metóda GET je tá istá, aká sa používa pri sťahovaní bežných HTML-dokumentov, obrázkov a iných dokumentov, ktoré sa iba interpretujú v prehliadači (klientovi). Keďže pri nej klient serveru posiela v podstate iba URL požadovaného dokumentu, je potrebné údaje z formulára zakódovať do tohto URL. Vykoná sa to tak, že za URL uvedené v ACTION sa pridá znak "?" a za ním všetky údaje z formulára zakódované do textového reťazca. Takto vzniknutý URL môže byť neobvykle dlhý, preto formuláre s väčším množstvom údajov môžu spôsobovať problémy. Pri dôslednom dodržaní protokolu HTTP by metóda GET nemala ukladať alebo meniť údaje na serveri, a tým ovplyvňovať jeho reakcie na ďalšie požiadavky. Údaje z formulára sa pri metóde GET odovzdávajú tak, že časť URL za znakom "?" sa pred spustením obslužného programu uloží do premennej prostredia "QUERY _STRING" (jej obsah možno vypísať príkazom SET vo väčšine operačných systémov). Do premenných prostredia sa uložia aj ďalšie údaje, ktoré www-serveru klient v požiadavke zasiela: názov použitého prehliadača, IP adresa a doménové meno počítača, z ktorého požiadavka prišla a iné. Naproti tomu metóda POST odosiela údaje z formulára mimo URL, takže neobmedzuje množstvo odosielaných údajov. Neobmedzuje ukladanie týchto údajov na serveri. Spôsob dekódovania odoslaných údajov, predpisu ich spracovania a odoslania odpovede závisí od použitého rozhrania na www-serveri. Pri metóde POST sa teda údaje z formulára neukladajú do premennej prostredia, ale odovzdajú sa obslužnému programu ako jeho štandardný vstupný prúd (stdin). Vo väčšine jazykov je to výhodné, lebo to umožňuje použiť príkazy určené na spracovanie (potenciálne veľkých) dátových súborov.

38 Informačné technológie K interaktívnym službám, ktoré odosielajú údaje z formulárov na spracovanie na serveri, patria najmä rôzne hlasovania, prihlášky, objednávky, diskusie, knihy návštev, vyhľadávanie údajov z veľkých databáz (hľadanie textu podľa kľúčových slov, telefónne zoznamy, hľadanie dopravných spojení...), ako aj web-kamery, mapy, SMS brány a rôzne služby vyžadujúce autentifikáciu (napr. heslo). Spoločne ich možno charakterizovať tým, že k činnosti vyžadujú zdroje, ktoré je nemožné alebo neefektívne prenášať na stranu klienta (veľké databázy, nastaviteľné webkamery, SMS brány), alebo musia byť centralizované, aby sa dosiahla úplnosť a bezpečnosť údajov (objednávky, diskusie, autentifikácia). Okrem nich sa na serveri spracúvajú aj niektoré dynamické prvky, ktoré nepotrebujú vstup od čitateľa stránky, a teda ani formuláre. Najčastejšie sú to počítadlá prístupov na stránky alebo náhodne sa obmieňajúce reklamné alebo informačné prúžky. 3.4 Ďalšie možnosti jazyka HTML a obslužné skripty Možnosti jazyka HTML sú podstatne širšie. Napriek tomu, poznatky, ktoré boli uvedené v predchádzajúcich kapitolkách, už povoľujú vytvárať pomerne pekné stránky. Niektoré vyspelé prehliadače podporujú napr. definovanie a vkladanie aj zvukov a videosekvencií do dokumentu. Na ich spracovanie však musí byť prehliadač vybavený častokrát prídavnými modulmi (plugg-in). Dokumenty definované podľa predchádzajúcich riadkov sú statické tzn., že existujú v nemennom tvare v podobe textového dokumentu. Napriek tomu, že o histórii Internetu a HTML už bolo skôr čo-to povedané, skúsme to teraz z inej strany tak, aby sme si uvedomíme, koľko relatívne nových technológií je s Webom spojených a ako spolu tieto technológie súvisia. V roku 1990, keď bola služba World-Wide Web prvýkrát spustená na pôde výskumného centra CERN, sme si vystačili len s troma technológiami ( jazyk HTML (HyperText Markup Language), ktorý slúžil k zápisu webových stránok, prenosový protokol HTTP (HyperText Transfer Protocol od pôvodnej verzie 0.9 po dnešnú 1.1, ktorú podporujú všetky najvýznamnejšie WWW-servre a prehliadače), ktorý zaisťuje prenos HTML-stránok z WWW-servera do prehliadača, URL (Uniform Resource Locator). Z dnešného pohľadu spojenie týchto troch technológií neponúka veľa - umožňuje iba prezeranie elektronických dokumentov, ktoré sú previazané systémom odkazov. Omnoho viac sa používateľ natrápil s vyhľadaním určitej informácie na internete. Ako sa teda uberal vývoj ďalej k dnešnej podobe Webu, ktorý je interaktívny a reaguje na požiadavky užívateľa? Prvou inováciou bola možnosť automatického generovania stránok, ktoré obsahujú informácie premenlivé v čase. HTML-stránka je súbor uložený na disku WWW-servera, ktorý má svoje URL. Nič však nebráni tomu, aby URL ukazovalo na nejaký spustiteľný súbor (program), ktorý vygeneruje HTML-stránku. Táto stránka potom môže obsahovať aktuálne informácie. Spustiteľný súbor je vyvolaný 38

39 39 Jazyk HTML WWW-serverom a bolo preto potrebné rozhranie, ktoré by definovalo spôsob spustenia programu a predávania dát medzi WWW-servrom a programom. Rozhranie sa volá CGI (Common Gateway Interface). Programom, ktoré generujú HTML-stránky, sa preto často hovorí CGI-skripty. Ďalší vývoj prirodzene smeroval k tomu, aby používateľ mohol ovplyvniť správanie CGI-skriptu. V HTML 2.0 sa tak objavili elementy, ktoré umožňovali na stránkach definovať formulár (pozri kapitolu 3.3). Údaje vyplnené používateľom do formulára odoslal prehliadač serveru a ten ich pomocou rozhrania CGI odovzdal CGI-skriptu k ďalšiemu spracovaniu. Týmto spôsobom funguje na Internete mnoho služieb dodnes. Rôzne vyhľadávacie servery sú typickým príkladom. Používateľ zadá do vstupného poľa formulára kľúčové slová. Tie sa odošlú vyhľadávaciemu serveru, kde CGI-skript prehľadá indexy. Výsledkom behu CGI-skriptu je potom stránka v HTML, ktorá obsahuje odkazy na stránky vyhovujúce otázke. Všetko vyzerá jednoducho, ale skutočnosť býva zložitejšia. Písanie CGIskriptov nebolo úplne jednoduché. Pre ich písanie sa používali najčastejšie rôzne interpretované jazyky, ako Perl alebo príkazové shelly Unixu. Nebol však problém použiť v podstate ľubovoľný programovací jazyk a tak existuje mnoho CGIskriptov napísaných v jazykoch C a C++. Nový jazyk Java sa dá pre písanie CGIskriptov takisto použiť - takýmto programom sa potom hovorí servlety. Veľké databázové systémy, ako napr. Oracle, umožňujú písanie CGI-skriptov priamo vo svojom vlastnom jazyku (napr.pl/sql). Pre vytvorenie CGI-skriptu tak bola potrebná znalosť určitého programovacieho jazyka. Okrem toho musel človek ovládať rozhranie CGI, ktoré neodovzdávalo parametre akurát v šikovnom formáte. Väčšina CGI-skriptov sa preto z väčšej časti skladala z kódu, ktorý konvertoval získané parametre do použiteľnej podoby. V interpretovaných CGI-skriptoch naviac veľa práce stálo dostatočné zabezpečenie skriptu. Totižto odoslaním špeciálneho textu v poliach formulára bolo možné získať prístup k systému, na ktorom bežal WWW-server. CGI-skripty generujú svoj výstup v jazyku HTML. Jazyk HTML však nie je možné priamo kombinovať s inými jazykmi, a preto bolo generovanie HTML-kódu v CGI-skripte otravná záležitosť, kde sa každý riadok HTML-kódu zadával ako parameter príkazu print či echo podľa použitého jazyka. Správa väčších aplikácií je takisto náročná, pretože aplikácia je roztrúsená v mnohých samostatných súboroch s HTML-stránkami a CGI-skriptmi. Aj technológia CGI má však svoje hranice. Ako už bolo uvedené, CGI-skripty sa vykonávajú na WWW-serveri. Používateľská odozva je tak veľmi pomalá, keďže používateľ si stiahne stránku, potom vyplní a odošle formulár späť na server, server spustí CGI-skript a od neho získaný výstup zašle späť do používateľovho prehliadača. Zhruba v rovnakom čase ako CGI-skripty sa pomerne rozšírila i ďalšia technológia SSI (Server Side Includes). SSI boli jednoduché príkazy, ktoré sa

40 Informačné technológie zadávali do HTML-stránky ako komentár. Stránky však boli uložené v súboroch so špeciálnou príponou.shtml a tak WWW-server vedel, že pred odoslaním stránky v nej má vykonať všetky SSI. SSI umožnili vykonávanie jednoduchých úkonov, ako vloženie iného súboru do stránky, alebo vypísanie údajov poslednej modifikácie dokumentu. Svoje uplatnenie našli predovšetkým na rozsiahlych serveroch, ktoré chceli mať na všetkých stránkach štandardizovanú hlavičku a pätu optimálna úloha pre nasadenie SSI. Riešenie pomalej odozvy CGI-skriptov spočívalo v presunutí vykonávania programov na stranu klienta do prehliadača. Približne súčasne, v priebehu roku 1996, boli predstavené dve rôzne technológie, ktoré daný problém riešia. Prvou technológiou bol nový jazyk Java predstavený firmou Sun Microsystems. Tento jazyk umožňoval písanie Java-apletov, čo boli krátke programy, ktoré boli začlenené priamo do HTML-kódu. V stránke mali vyhradený priestor, ktorý bol úplne pod ich kontrolou. Možnosti Javy sú naozaj široké, od jednoduchých animácií oživujúcich stránku až po zábavné hry či aplikácie informačných systémov. Veľkou výhodou Javy je jej nezávislosť na platforme. Programy sa po sieti prenášajú vo forme tzv. byte-code (bajtového kódu), ktorý je spustiteľný v ľubovoľnom operačnom systéme, pokiaľ pre neho existuje interpret Javy (JVM Java Virtual Machine). Dnes môžeme s odstupom času povedať, že Java je výborná a perspektívna technológia. Na bežných stránkach sa s ňou zatiaľ veľmi nestretneme, pretože je kvôli svojej univerzálnosti pomerne náročná na systémové zdroje počítača. Druhou novou technológiou roku 1996 bol JavaScript. JavScript je jednoduchý jazyk so syntaxom vychádzajúcim z jazyka Java. S JavaScriptom prišla firma Netscape a zabudovala ho do svojho legendárneho prehliadača Netscape Navigator. JavaScript sa zapisoval priamo do HTML-kódu stránky a dokázal poslúžiť v mnohých situáciách. Jeho najčastejšie použitie bolo v spojení s formulármi. Krátke skripty v JavaScripte mohli kontrolovať správnosť údajov v poliach formulára ešte pred odoslaním na server. Používateľ tak získal neporovnateľne rýchlejšiu odozvu v porovnaní s klasickým spôsobom využívajúcim iba CGI-skripty. Druhou oblasťou použitia JavaScriptu boli drobné vylepšenia interaktívnosti stránok celkom ľahko šlo napr. zariadiť, aby odkaz zmenil farbu po prejdení myšou (roll-over). Používateľ tak hneď vedel, že za odkazom sa (možno) skrýva niečo zaujímavé. Dnes Javu i JavaScript podporujú obidva najrozšírenejšie prehliadače Mozilla Firefox (MF) i Microsoft Internet Explorer (MSIE). Smutnou pravdou však je, že implementácia JavaScriptu v MSIE nie je úplne kompatibilná s MF a so špecifikáciou firmy Netscape. To núti tvorcov stránok k vytváraniu zložitejších skriptov, ktoré sa vedia prispôsobiť vlastnostiam jednotlivých prehliadačov. To bolo na strane klienta. Poďme sa však presunúť späť na stranu servera. Úspech JavaScriptu bol taký obrovský, že sa firma Netscape rozhodla pre využitie JavaScriptu na strane servera. Na serveroch Netscaspe bolo možné do HTML- 40

41 41 Jazyk HTML stránok písať skripty, ktoré sa vykonajú priamo na serveri. Vnútri stránky boli skripty uzavreté medzi párovými príkazmi <SERVER> a </SERVER> a server tak ľahko rozpoznal, ktoré časti stránky má interpretovať. Výsledkom skriptov musel byť HTML-kód, ktorý sa doplnil do zvyšku stránky a prehliadaču sa už posielala obyčajná HTML-stránka. Riešenie sa najprv šírilo pod názvom LiveWire, dnes je meno výstižnejšie SSJS (Server Side JavaScript). V SSJS je k dispozícii mnoho objektov, ktoré umožňujú ľahko pracovať s dátami z formulárov, s databázami atď. Výsledný efekt aplikácií napísaných v SSJS je tak rovnaký ako u CGI-skriptov, s tým rozdielom, že písanie SSJS je omnoho jednoduchšie. Aby Microsoft neostal pozadu, uviedol na trh ASP (Active Server Pages). ASP sú obdobou SSJS. Ako programovací jazyk je možné využiť VBScript alebo Jscript, čo je implementácia JavaScriptu spoločnosťou Microsoft. Systémy samozrejme nie sú kompatibilné ASP používa iné príkazy k oddeleniu skriptu od stránky a hierarchia objektov, ktorá sprístupňuje všetky dôležité údaje, je takisto rozdielna. Okrem VBScriptu a JScriptu je možné v ASP používať ďalšie jazyky, ktoré dodávajú tretie firmy Perl, REXX, Python. SSJS i ASP majú jednu veľkú spoločnú nevýhodu(?) sú to komerčné produkty, ktoré nie sú vôbec lacné a ich použitie je naviac zviazané s použitím WWW-servera danej firmy. ASP naviac beží iba na platforme Windows pokiaľ sa tak v budúcnosti rozhodneme ASP-aplikáciu z MS Windows presunúť na výkonnejší Unix, jednoducho to asi nepôjde. Všetky tieto nedostatky a mnohé ďalšie odstránil systém PHP. Princíp použitia PHP je podobný ako u SSJS a ASP. Na rozdiel od nich je šírený celý produkt ako freeware. Ďalšou výhodou PHP je jeho nezávislosť na platforme. Dnes sú k dispozícii verzie PHP pre Unix a Windows. PHP nie je zviazané so žiadnym konkrétnym serverom, môže bežať na ľubovoľnom. Najlepšie si však rozumie so servrom Apache. Okrem toho PHP-skript, ktorý má rovnakú funkčnosť ako ASP, je obyčajne omnoho kratší a zrozumiteľnejší. Možnosti JavaScriptu na strane klienta boli v pôvodnej implementácii od firmy Netscape nevyužité, a preto prišiel v roku 1997 Microsoft vo svojom prehliadači MSIE 4.0 s novou technológiou dynamického HTML (DHTML). DHTML vychádza z tej istej myšlienky ako JavaScript, ale omnoho viac ju doťahuje. V DHTML je prístupný každý objekt webovskej stránky a s každým objektom je možné kedykoľvek manipulovať meniť jeho obsah, spôsob zobrazenia či polohu. Ako objekty sú prístupné i štýly pripojené k stránke a ich zmenou je veľmi jednoduché dosiahnutie prekvapivých vizuálnych efektov. Až stránky zapísané pomocou DHTML sú skutočne interaktívne. Veľkou výhodou DHTML je zachovanie obojstrannej kompatibility s bežnými HTML-stránkami. Ďalšou technológiou, s ktorou prišla firma Microsoft snáď ako konkurenciu Jave (?), je v istom zmysle ActiveX. Tento produkt umožňuje používaním komponentov rozšíriť schopnosti kompatibilnej aplikácie a teda napr. aj WWW prehliadača.

42 Informačné technológie Oproti Jave tu môže programátor využívať rozsiahle knižnice funkcií vytvorené aj trebárs pre kancelársky balík alebo operačné systémy firmy Microsoft. Všetky vyššie zmienené technológie môžeme rozdeliť do dvoch skupín podľa toho, či sú vykonávané na serveri alebo na klientovi. Nič však nebráni ich vzájomnej kombinácii, pokiaľ je účelná. Z technológií uvedených v predchádzajúcich vetách si teraz v krátkosti bližšie niečo povieme o CGI skriptoch, Javascripte a Jave. Samostatne sa však budeme venovať technológii PHP, ktorá je dominantné používaná CGI (Common Gateway Interface) a CGI skripty V kapitole 3.3 sme sa oboznámili s príkazmi, pomocou ktorých sa tvoria formuláre, čiže zoskupenia ovládacích prvkov, prostredníctvom ktorých prezerateľ stránky môže vkladať údaje. Bolo poukázané aj na interakciu formulárov so skriptami na strane klienta, vďaka ktorej stránka môže okamžite reagovať na zmeny, ktoré používateľ s prvkami formulára vykonáva. Podstatné na formulároch však je, že predstavujú zoskupenie údajov zadaných čitateľom stránky, ktoré sa vo vhodnom okamihu (po stlačení odosielacieho tlačidla) môžu naraz odoslať na spracovanie serveru. Snaha odoslať údaje z formulára serveru naraz (v jednej požiadavke HTTP) vyplýva z toho, že každé odoslanie požiadavky je spojené s prenosom údajov cez internet a so zdržaním pri čakaní na odpoveď servera. Ako sme sa už dozvedeli, CGI je najstarším z bežných rozhraní na tvorbu dynamických prvkov na strane servera. Obľúbené je vďaka svojej dostupnosti, pretože CGI podporujú takmer všetky www-servery (napr. aj Apache) bežiace na unixovských operačných systémoch. Pre svoju jednoduchosť vyžaduje CGI pri tvorbe podstatných súčastí dynamických prvkov na strane servera programovať aj notoricky sa opakujúce operácie spojené s dekódovaním údajov z formulára a generovaním odpovede. Neskúsený používateľ môže naraziť na problémy so správnou konfiguráciou a bezpečnosťou aplikácie (vrátane odolnosti servera voči útokom prostredníctvom www). Na pomoc však prichádzajú mnohé hotové aplikácie CGI, knižnice pre rôzne programovacie jazyky a iné podporné materiály ľahko dostupné na internete. CGI je veľmi flexibilné: Možno ním k www-serveru pripojiť ľubovoľný program (vytvorený v ľubovoľnom programovacom jazyku) spustiteľný na počítači, na ktorom beží www-server. Tento obslužný program musí byť v súlade s konfiguráciou www-servera umiestnený v správnom adresári a musí mať správneho vlastníka, aby sa skutočne mohol vykonať pri príchode požiadavky na príslušný URL. Úlohou obslužného programu je dekódovať odovzdané údaje, 42

43 43 Jazyk HTML spracovať ich a vyprodukovať odpoveď, ktorá sa má zobraziť v prehliadači. Dokument odpovede program odovzdá prostredníctvom svojho štandardného výstupného prúdu (stdout). V ňom samotný dokument (napr. v HTML) musí byť uvedený hlavičkou podľa protokolu HTTP. Táto musi obsahovať aspoň typ odovzdávaného dokumentu (podľa štandardu MIME), v prípade binárneho dokumentu (napr. obrázok) aj jeho dĺžku. Hlavička má textový formát, každý jej údaj je na samostatnom riadku a ukončená je prázdnym riadkom. Konce riadkov musia byť kódované kombináciou 2 bajtov s kódmi 13(0DH) a 10 (0AH) (ASCII: CR a LF). Záver si uveďme jeden veľmi jednoduchý príklad. Tento nebude vykonávať žiadnu konkrétnu službu, pôjde iba o jednoduchý program, pomocou ktorého možno vidieť aké údaje a v akej podobe prechádzajú rozhraním CGI. K testovacím účelom použijeme príklad formulára z kapitoly 4.4 s modifikovaným nasledujúcim riadkom: <FORM ACTION=" METHOD="get"> Ak napríklad používate Apache potom adresár, v ktorom je povolené použitie CGI sa najčastejšie volá "cgi-bin" (napr. /apache/cgi-bin/). V adresári pre CGI sa vytvorí príslušný súbor so skriptom napr. test (na platforme Windows môže byť napr. aj test.bat). Podľa toho, na ktorej platforme bude spúšťaný bude obsahovať napr. nasledujúce riadky (Unix/Linux - pozor na veľké/malé písmenách): #!/bin/sh echo -en "Content-type: text/plain\r\n\r\n" set Podľa prvého riadku ide o skript interpreta sh (Bourne Shell). Prvý príkaz (echo) generuje jednoriadkovú hlavičku HTTP s údajom "Content-type" určujúcim, že odpoveď prehliadača bude vo formáte "text/plain", t.j. obyčajný text (bez formátovania). Druhú príkaz (set) vypíše aktuálne hodnoty všetkých premenných prostredia, a tým vytvorí obsah dokumentu odpovede. Ak sa jedná o prostredie Windows, môže obsah tohto súboru vyzerať nasledovne: echo off echo Content-type: text/plain set Môže v princípe obsahovať len príkaz set a ako už aj prípona napovedá, jedná sa o dávkový súbor. Ak je všetko v poriadku mal by sa zjaviť výstup z programu test(.bat). Napr. s týmto podobným obsahom:

44 Informačné technológie COMSPEC=C:\WINDOWS\COMMAND.COM DOCUMENT_ROOT=c:/apache/htdocs HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword,, */* HTTP_ACCEPT_ENCODING=gzip, deflate HTTP_ACCEPT_LANGUAGE=sk HTTP_CONNECTION=Keep-Alive HTTP_HOST=localhost HTTP_REFERER= HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) PATH=C:\WINDOWS;C:\WINDOWS\COMMAND REMOTE_ADDR= REMOTE_PORT=1058 SCRIPT_FILENAME=c:/apache/cgi-bin/test.bat SERVER_ADDR= SERVER_NAME=localhost SERVER_PORT=80 SERVER_SIGNATURE=<ADDRESS>Apache/ Server at localhost Port 80</ADDRESS> SERVER_SOFTWARE=Apache/ (Win32) WINDIR=C:\WINDOWS GATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.1 REQUEST_METHOD=GET QUERY_STRING=meno=Mesia%E8ik&svietivost=200 REQUEST_URI=/cgi-bin/test.bat?meno=Mesia%E8ik&svietivost=200 SCRIPT_NAME=/cgi-bin/test.bat Vo výstupe je vhodné sledovať premennú QUERY_STRING a premenné začínajúce na "HTTP_", "REMOTE_" a "SERVER_". V tomto príklade sme pre meno nebeského telesa určili Mesiačik so svietivosťou 200. Po odoslaní sa to objavilov premennej QUERY _STRING. Pekne v nej vidno spôsob kódovania údajov z formulára. Jednotlivé vstupné polia sú oddelené znakom "&". Každé vstupné pole je reprezentované reťazcom, tak ako už bolo uvedené v tvare názov=hodnota. V názvoch a hodnotách sú mnohé špeciálne znaky (okrem iných aj &, - a %) nahradené sekvenciou %XY, kde XY je ASClI-kód prislušného znaku v hexadecimálnej sústave (napr. %26 namiesto &). Medzery sú nahradené znakmi "+". Toto kódovanie je potrebné, pretože reťazec znakov sa prenáša ako súčasť URL, v ktorom sú povolené iba niektoré znaky. Hoci obslužný program pre CGI možno vytvoriť v ľubovornom jazyku, najčastejšie sa používa skriptovací jazyk Perl. Je dostupný prakticky pre všetky platformy. Pri väčšine jednoduchých aplikácíí nevadí, že vykonanie je mierne spomalené interpretáciou skriptu. Ak treba dosiahnuť vyššiu efektivnosť programu 44

45 Jazyk HTML (napr. pri zaťaženom serveri), alebo ak ide o zložité spracovanie nevhodné pre opis skriptovacím jazykom, sú k dispozícii najrozšírenejšie kompilované jazyky C a C++. Naopak, pre veľmi jednoduché aplikácíe (ako testovací skript uvedený vyššie) vystačíme i so štandardným interpretom (shellom) použitého operačného systému. Ak chceme preniesť do www už existujúcu aplikáciu, pravdepodobne bude najjednoduchšie prepojenie na CGI programovať v tom jazyku, v ktorom je vytvorená táto aplikácia Javascript Javascript vylepšuje možnosti HTML jazyka. Ako už bolo uvedené Javascript uviedla firma Netscape. Vo svojej podstate HTML umožňuje vytvárať a prezentovať statické stránky a maximum interaktivity spočíva vlastne v možnosti kliknúť na odkaz a prejsť na určitú inú stránku. Môžete kombinovať obrázky a text a prípadne používať ďalšie podporné prostriedky ako rámci či formuláre. Pokiaľ však je potrebné vytvoriť aj procesnú logiku, v princípe nezostáva nič iné len odoslať údaje na server, kde sa spracujú a spracované vrátia naspäť (ako napríklad pri využití PHP), najčastejšie vo forme novovygenerovanej stránky. Javascript obsahuje základné črty známych programovacích jazykov: môže získavať údaje z niektorých zdrojov, spracovávať ich a posielať na výstup. Vzhľadom na to, že je integrovaný do HTML, vždy vie to, čo vie aj prehliadač, môže tento prehliadač konfigurovať (napr. koľko formulárových elementov je na stránke alebo koľko rámcov je v okne). Takisto vie pracovať v takomto prostredí napr. špecifikovať rámec, do ktorého sa presmeruje výstup napr. po kliknutí na hyperlinkový odkaz. Činnosti, ktoré môžete pomocou Javascriptu vykonať predstavujú: Riadenie stránky Otváranie a zatváranie okien a rámcov Programový prístup k histórii okien (to povoľuje vývojárovi prístup na predtým zobrazené stránky resp. dokumenty) Niektoré ďalšie črty prehliadača Možnosť vytvárať spätnú väzbu na používateľa Generovanie HTML stránok s využitím hodnôt premenných Implementácia používateľom definovaných funkcií Ako mnoho iných programovacích jazykov tejto generácie, aj Javascript je objektovo orientovaný programovací jazyk. So všetkým Javascript narába ako s objektom napr. aj okno prehliadača je objekt, HTML dokument je objekt, formulár v dokumente je objekt ale aj napr. textové pole vo formulári je objekt. Takýmto spôsobom je možné používateľovi spätne poskytnúť interaktívne pregenerovanie obsahu stránky na základe niektorých variabilných informácií resp. udalostí, ktoré spôsobia zmenu príslušného objektu. 45

46 Informačné technológie Javascript je rozsiahly jazyk a preto na tomto mieste sa obmedzíme len na popis základných vlastností a uvedenie niektorých príkladov. Bližšie informácie je možné získať napr. na Základné vloženie Jvascriptovej časti do kódu HTML sa vykoná pomocou párového príkazu <script> </script>. Jednoduchá ukážka je v nasledujúcom príklade, ktorý vypíše do okna prehliadača text Ahoj svet. <HTML> <BODY> <SCRIPT TYPE="TEXT/JAVASCRIPT"> DOCUMENT.WRITE("<H1>Ahoj svet!</h1>") </SCRIPT> </BODY> </HTML> Tým vidíme, že základné príkazy Javascriptu sa vkladajú medzi uvedené tagy. Ako ďalší jednoduchý a praktický príklad si uvedieme použitie spodného stavového riadku prehliadača na výpis doplnkových informácií a základnú obsluhu niektorých udalostí. Cieľom programu je dať používateľovi o niečo viac informácií než ako sa zmestí na stránku. Normálne (defaultstatus) sa do stavového riadku vypisujú informácie o objektoch a linkách, keď sa používateľ pohybuje ukazovateľom kurzora v okne prehliadača ponad ne. Je možné referovať na aktuálne okno buď ako na okno (window) alebo na práve aktuálny objekt (self). V syntaxi Javascriptu je objekt oddelený od jeho vlastností a metód. Preto potom window.status a self.status referujú na obsah stavového riadku aktuálneho okna a je možné ho čítať alebo doň zapisovať. Narába sa s tým rovnako ako keď je potrebné priradiť hodnotu premennej. menopremennej = hodnotapremennej hodnotapremennej môže byť aj výraz, ktorého hodnota sa vypočíta pred priradením hodnoty premennej. Výraz môže teda byť vzorec, hodnota alebo vlastnosť inej premennej alebo literál ako množina znakov uzavretých medzi úvodzovkami. window.status = Kliknutím prevezmete súbor s príkladom. Spojenie (konkatenáciu) reťazcov v Javascripte je možné vykonať pomocou operátora + ako je uvedené v príklade: window.status = "Starý stav: " + window.defaultstatus Týmto ste videli ako je možné narábať s obsahom stavového riadku. V ďalšom bude uvedené niečo o udalostiach, ktoré generuje prehliadač. V princípe v rámci Javacriptu je možné určiť akciu, ktorá sa vykoná v prípade výkytu danej udalosti, a to nasledujúcou syntaktickou konštrukciou: onevent="action" 46

47 Jazyk HTML kde action je Javascriptový kód. Napríklad je potrebné, aby sa v prípade, že používateľ prejde ukazovateľom kurzora myši (udalosť onmouseover), vypísal informatívny text do stavového riadku. Toto je možné vykonať napr. pomocou nasledujúceho kódu integrovaného do HTML: <a href="ftp://ftp.server.com/priklad.zip" onmouseover="window.status=' Kliknutím prevezmete súbor s príkladom.'; return true">priklad</a> V tomto kóde navyše je vidieť, ža ak chceme jednej udalosti priradiť viacero akcií, musia byť oddelené pomocou bodkočiarky. Príkaz return true je potrebný v prípade, že v rámci udalosti onmouseover sa mení stavový riadok. V nasledujúcom bude ukázané ako získať spätnú väzbu, napr. vo forme chybového hlásenia, v prípade odoslania formuláru. Samozrejme, že túto funkciu je možné použiť aj pri inej príležitosti. Použitou funkciou bude alert. Jej základná sysntax je nasledujúca: window.alert(arg) alebo alert(arg) Argumentom arg je opäť hodnota alebo vlastnosť premennej alebo literál t.j. znakový reťazec. Argument je v apostrofoch. Napríklad chceme vypísať poďakovanie za vyplnenie formulára (napr. na báze príkladu z kapitoly 3.3). Príslušná časť kódu môže vyzerať nasledovne: <form action="" method="post" onsubmit="alert(ďakujeme!'); return true"> Výsledkom je otvorenie okna so správou podobne, ako ukazuje nasledujúci obrázok. onsubmit je udalosť, ktorá sa vyvolá pri odoslaní formulára. Obr. 12 Príklad funkcie alert Na báze funkcie alert je postavená sofistikovanejšia funkcia na potvdzovanie určitých akcií confirm. Kým alert má len funkciu správy, confirm vracia aj hodnotu potvrdenia. Príklad je uvedený v nasledujúcom. alert('návratová hodnota potvrdenia: ' + confirm('vyberte OK alebo Zrušiť.')) 47

48 Informačné technológie Najprv je vykonaný confirm a potom alert vypíše návratovú hodnotu. Ak sa klikne na OK, potom je návratová hodnota true inak vráti false. Praktickým príkladom použitia funkcie confirm je napríklad potvrdenie toho, že naozaj chceme odoslať určité data vyplneného formulára. <form action="" method="post" onsubmit="return confirm('ste si istý?')"> Ak použijete konštrukciu if/else potom je možné predchádzajúci riadok prepísať nasledovne: <form action="" method="post" onsubmit="if (confirm('ste si istý?')) {alert('ďakujeme za odpoveď'); return true} else {return false}" > Poslednou časťou je ukážka generovania HTML dokumentu pomocou príkazov Javascriptu. Napriek tomu, že Javascript môže byť umiestnený prakticky kdekoľvek v HTML dokumente, nahrávanie resp definovanie funkcií musí byť vykonané skôr ako budú použité. Nie všetky funkcie musia byť písané vždy v každom súbore. Je možné niektoré častejšie používané funkcie umiestniť aj v inom súbore (napríklad common.js) a potom ho nahrať na začiatku dokumentu podobne, ako v nasledujúcom príklade riadku kódu. <script type="text/javascript" src="common.js"></script> Aby bolo možné ukázať definovanie HTML dokumentu, zadefinuje sa najprv základná šablóna, ktorá môže vyzerať nasledovne: <html> <head> <title>javascript priklad</title> </head> <script language="javascript"> // Tu zacina definovanie JavaScript funkcii function ZobrazAnketu() { /* Tato funkcia bude obsahovat kod na generovanie stranky */ } </script> <body> <h1>anketa</h1> <form onsubmit="zobrazanketu()"> <input type="submit" value="zobrazit formular ankety"> </form> <hr> </body> </html> 48

49 Jazyk HTML V šablóne je možné vidieť definovanie funkcie ZobrazAnketu(), ktorá bude obsahovať kód na vygenerovanie nového obsahu stránky aj s políčkami formulára ankety. Predpokladajme, že anketový formulár sa otvorí v novom okne. Na otvorenie okna je možné použiť funkciu window.open. Celková syntax funkcie je nasledovná: premenna = window.open("url", "MenoOkna", ["VlastnostiOkna"]) Pomocou premennej premenna je možné potom pristupovať k objektu nového okna. Najjednoduchšie volanie potom môže byť napríklad displaywindow = window.open("","noveokno"), ktoré otvorí nové prázdne okno (URL nebolo zadané a použijú sa vlastnosti prednastavené v systéme). Do daného okna je možné pomocou metódy write zapisovať potrebné údaje. displaywindow.document.write("<html>") displaywindow.document.write ("<HEAD><TITLE>Anketa</TITLE></HEAD>") displaywindow.document.write("<body>") displaywindow.document.write("<h1>anketa</h1>")..... displaywindow.document.write("</body>") displaywindow.document.write("</html>") displaywindow.document.close() Do miesta označeného... je možné podobne dodávať pomocou príkazu displaywindow.document.write ďalšie riadky, ktoré budú definovať obsah nového okna. Príkladovo si uvedieme napríklad definovanie formulárového prvku: displaywindow.document.write("<tr><td>váš vek:<td><input TYPE = \"text\" NAME = \"vek\" SIZE=10 MAXLENGTH=20> rokov ) Pomocou objektov top (najvyššie hierarchicky otvorené okno), parent (rodičovské okno) a self (aktuálne okno) je možné pristupovať k objektom v hierarchii objektov a samozrejme aj k ich vlastnostiam napríklad: displaywindow.document.write("rodičovské okno: ") displaywindow.document.write(window.parent.document.title+"<br>") V prípade, že použijeme šablónu a vyplníme definíciu funkcie ZobrazAnketu() celkovo pomocou uvedených príkladov a ako bázický použijeme zjednodušený príklad z kapitoly 3.3, môžeme dostať výsledok podobný nasledujúcemu obrázku. 49

50 Informačné technológie Obr. 13 Príklad generovania HTML dokumentu do nového okna pomocou Javascriptu Možnosti Javascriptu sú samozrejme omnoho bohatšie. Z hľadiska jeho využitia v informačných systémoch pri použití uvádzaných technológií sa asi najviac využije pri zinteraktívnení používateľského rozhrania. Celkový príklad bez obslužných skriptov je uvedený v kapitole Java Táto kapitola bude len informatívneho charakteru nakoľko vysvetlenie jazyka Java a Java API niekoľkými riadkami v princípe ani nie je možné. Java je navrhnutá s cieľom zvýšenia spoľahlivosti a bezpečnosti programov. Jazyk Java je objektovo-orientovaný jazyk, syntaxou podobný jazyku C++ avšak aj s niektorými odlišnosťami (tvrdá typová kontrola, bez automatických konverzií (napr. int float a pod.). Jednotnú špecifikáciu jazyka vydáva a manažuje firma Sun Microsystems. Veľmi dôležitým prvkom pre vývojárov je, že je zadarmo ponúkané aj vývojové prostredie - Java Development Kit (JDK), spolu s množstvom dokumentácie a príkladov. Oproti spomínaným skriptovacím jazykom (napr. PHP) je potrebné aplikáciu pri každej zmene preložiť pomocou programu javac (v JDK) z tvaru zdrojového textu do bytecode. Na zrýchlenie a aj spohodlenie práce sú k dispozícii mnohé integrované vývojové prostredia (IDE) od rôznych firiem najmä však Sun One Studio, Borland JBuilder, IBM Visual Age for Java a pod. Samotná špecifikácia Javy sa vyvíjala cez niekoľko verzií a existujúce prehliadače vo svojich JRE podporujú rôzne (staršie) verzie Java API. Netscape Navigator 3 a Microsoft Internet Explorer 3 podporujú Javu vo verzii 1.0, ktorá má viacero nedostatkov. Verziu 1.1 podporuje Netscape Navigator od verzie 4 a Internet Explorer od verzie 4 (s určitými obmedzeniami). Verziu 1.2 (tzv. Java 2) podporuje Netscape Communicator 6 alebo prehliadač s nainštalovaným Javaplug-inom. V súčasnosti sa podpora rieši nainštalovaním príslušnej verzie JRE (Java Runtime Environment) a prehliadač automaticky použije toto prostredie v prípade potreby. Jednotlivé verzie sa líšia v mnohom, ale snáď najviac v možnostiach grafického používateľského rozhrania (GUI) a možnosti 50

51 Jazyk HTML komunikácie po sieti so serverom. Verzie Javy staršie ako 1.2 ponúkajú pre GUI iba rozhranie Abstract Window Toolkit (AWT, ktoré neumožňujú vývojárom ovplyvniť vzhľad a fungovanie prvkov GUI). Od verzie JDK 1.2 (Java 2) je k dispozicii knižnica Java Foundation Classes, ktorá obsahuje aj balík Swing. Tento ponúka oveľa lepšiu kontrolu nad GUI. Keďže vačšina súčasných prehliadačov Swing neobsahuje, spustiť applet používajúci Swing vyžaduje stiahnutie celého tohto pomerne rozsiahleho balíka. Objektovo-orientovaný spôsob komunikácie pomocou vzdialeného volania metódy (RMI - Remote Method Invocation)) je dispozícii od JDK 1.1. Z pohľadu internetových technológií a najmä služby WWW, ktorá práve umožnila Jave presadiť sa, je Java reálnym prostriedkom, ktorý umožňuje do tejto služby umiestniť naozaj čokoľvek bez obmedzenia prehliadačmi, plugg-in-mi, či operačným systémom t.j. byť platformovo nezávislé. Ako je teda možné spúšťať aplikačné programy bez ohľadu na hardvér jednotlivých počítačov a na nich nainštalované operačné systémy, webovské prehliadače a pod.? Je to dané uniformným prostredím, ktoré JAVA ponúka. V rámci tohto prostredia je definovaný abstraktný javovský počítač (tzv. Java Virtual Machine) a abstraktné rozhranie operačného systému (tzv. Java API). Potom postačuje pre každú aplikáciu v Jave napísať program pre tento abstraktný počítač a preložiť ho do jeho strojového kódu (spomínaný bytecode). Každé prostredie podporujúce beh programov v Jave (Java Runtime Environment, JRE) musí vedieť interpretovať bytecode a musí s programom správne komunikovať cez rozhranie Java API. Z hľadiska HTML dokumentov sa najčastejšie možno stretnúť s tzv. Javaappletmi. Java-aplety predstavujú javovské programy, ktoré sú vložené do HTML stránok (analogicky obrázkom) a bežia vďaka JRE poskytovanému WWWprehliadačom. Applety majú dispozícii celé Java API až na bezpečnostné obmedzenia, ktoré im napr. zakazujú pristupovať k lokálnym súborom a dovoľujú im po sieti komunikovať iba s počítačom domény, z ktorej pochádzajú. Dá sa teda povedať, že prehliadač podporujúci Javu vytvára pre applety javovský počítač vložený priamo do HTML stránok. Aj keď technológia Java má svoje prednosti, má aj niektoré nedostatky. Snáď najväčší je, že programy v Jave bežia pomerne pomaly. Je to dané tým, že sú tieto programy vykonávané na reálnom počítači, ktorý pomocou JRE iba emuluje javovský počítač, pre ktorý sú napísané a skompilované t.j. je to interpretované. Už len spustenie JVM chvíľu trvá, čo mnohých návštevníkov stránok s Javou hnevá. Napriek tomu JRE sa stále zdokonaľujú, napríklad aj tým, že priebežne počas vykonávania programu prekladajú jeho časti do natívneho kódu určeného pre konkrétny počítač, čím faktor spomalenia stále zmenšujú. Spomínané Java-applety môžu fungovať: na strane klienta (najčastejší spôsob) alebo na strane servera (tzv. servlety). 51

52 Informačné technológie Applety bežia na strane klienta. Môžu však komunikovať so serverom (bezpečnostné obmedzenia umožňujú appletu komunikovať po sieti s počítačom v doméne, z ktorej bol stiahnutý). Majú pri tom oveľa bohatšie možnosti ako formuláre HTML. Môžu otvárať TCP-sockety a v rámci nich používať ľubovoľný komunikačný protokol vrátane HTTP. Na rozdiel od HTML-formulárov, ktoré údaje serveru zasielajú iba pri stlačení odosielacieho tlačidla, applety môžu cez svoje sockety komunikovať so serverom v ľubovoľnom okamihu, čo zvyšuje interaktivitu stránky (najmä napr. priebežné kontroly vyplňovaných polí formulára a pod.). Na strane servera implementované servlety, podobne ako applety, bežia v rámci www-klienta. Servlety tvoria súčasť www-servera, ktorý ich podporuje. Požiadavky od klienta, ktorých URL zodpovedá servletu, www-server odovzdáva tomuto servletu. Servlet musí analyzovať tieto údaje (typicky hodnoty vyplnené vo formulári), vykonať potrebné spracovanie a vygenerovať odpoveď (typicky vo formáte HTML). Značné zjednodušenie tvorby a údržby servletov priniesli Java Server Pages (JSP). Sú inšpirované spomínanou technológiou Active Server Pages (ASP). Na rozdiel od servletov, ktoré sú napísané v čistom jazyku Java, v ktorom sú za účelom generovania odpovede citované kúsky HTML-kódu, volia opačnú syntax, ktorá je oveľa prehľadnejšia a umožňuje oddeliť logiku spracovania od formátovacích príkazov. Stránka JSP má základnú syntax, ako HTML alebo XML s doplnenými špeciálnymi príkazmi, ktoré umožňujú citovať úseky programu v Jave. Tieto úseky Java-kódu slúžia na opis toho, čo sa má vykonať dynamicky na strane servera vrátane vloženia premenlivých údajov do odpovede v podobe HTML stránky. Na vloženie Java-appletu do HTML stránky sa používa párový príkaz APPLET. Všetok bežný kód HTML umiestnený do jeho vnútra prehliadače podporujúce Javu ignorujú. Naopak prehliadače, ktoré nepoznajú alebo nepodporujú príkaz APPLET, tento obsah zobrazia ako náhradu za Java-applet. Najdôležitejším parametrom príkazu APPLET je CODE, ktorý obsahuje názov hlavnej triedy (v zmysle objektovo-orientovaného programovania) appletu. Triedy v jazyku Java sú po preložení do bytecode uložené v súboroch s príponou.class. Ak sa súbory appletu nenachádzajú v tom istom adresári ako HTML-dokument, môžeme tento adresár určiť parametrom CODEBASE. Okrem toho mnoho zaujímavých aplikácií sa dá vytvoriť pomocou jednoduchších nástrojov ako Java, napr. pomocou Javascriptu. Možnosti zobrazenia sú však obmedzené možnosťami HTML a jeho formulárov. Appletu sa na stránke vyhradí pevný obdĺžnikový priestor podobne ako pre obrázok. Z tohto dôvodu je potrebné určiť jeho veľkosť v pixeloch parametrami WIDTH a HEIGHT. Príkaz APPLET môže mať aj nepovinné parametre NAME, ALIGN, VSPACE a HSPACE s analogickým významom ako pri príkaze IMG. Appletom možno v HTML-dokumente špecifikovať parametre vložením príkazov 52

53 Jazyk HTML PARAM do vnútra príkazu APPLET. Parametrami príkazu PARAM sú NAME (určuje názov parametra) a VALUE (hodnota parametra). <APPLET CODE="NahodnyText.class" WIDTH="200" HEIGHT="40"> <PARAM NAME="text" VALUE="Náhodne veľký text"> Tento prehliadač nemá inštalovanú podporu Javy </APPLET> Navyše je potrebné ešte v jazyku Java napísať triedu NahodnyText. Následne uvedený program (bez vysvetliviek, slúži len ako príklad) treba uložiť do textového súboru NahodnyText.java a preložiť do bytecode (napr. pomocou javac). Po preklade vznikne súbor NahodnyText.class. Tento súbor stačí umiestniť do rovnakého adresára ako HTML-dokument s príkazom APPLET, ktorý sa naň odvoláva. // tento priklad vypise zadany text s nahodne velkymi pismenami import java.awt.*; public class NahodnyText extends java.applet.applet { static final int NAHODA_LIMIT = 36; String napis; int textdlzka; public void inic() { napis = getparameter ( text ); textdlzka = napis.length(); } // vid prikaz PARAM public void paint(graphics nt) { nt.clearrect( 0, 0, getsize().width, getsize().height)); } } for (int i=0, j=0; i < textdlzka; i++) { Font nahodnyfont = new Font( Arial, Font.BOLD, (int) Math.random(NAHODA_LIMIT)); nt.setfont(nahodnyfont); nt.drawstring(napis.substring(i, i+1), j, 0); j += nt.getfontmetrics().charwidth(napis.charat(i)); } 53

54 Informačné technológie 3.5 Interaktívna tvorba WWW stránok, HTML editory HTML editory sú systémy na spracovanie stránok v jazyku HTML t.j. v jazyku pre tvorbu hypertextových dokumentov najmä v počítačovej sieti Internet, tiež označovaných ako WWW-stránky. V princípe je možné, nakoľko HTML je obyčajného textového charakteru, napísať takúto stránku, ako už bolo uvedené, aj v tom najjednoduchšom textovom editore. Pre platformu DOS to môže byť napr. Norton editor, pre platformu Windows napr. Poznámkový blok (Notepad) alebo pre UNIX platformu sa môže použiť aj editor vi. Pri tomto spôsobe však tvorca stránky musí poznať syntax HTML jazyka, tvorba je častokrát zdĺhavá a výsledok nie vždy odráža predstavy tvorcu. S rastúcimi požiadavkami a takisto možnosťami súčasných počítačov sa presadila vizuálna tvorba WWW-stránok. Editory, ktoré toto umožňujú, už pracujú WYSIWYG (What You See Is What You Get t.j. čo vidieť na obrazovke, bude aj na výstupe t.j. na obrazovke WWW prehliadača). Pri použití takéhoto editora vlastne tvorca vizuálne, bez nutnosti znalosti samotného jazyka HTML, vytvorí stránku. Editor mu ju častokrát ešte skontroluje, umožní urobiť náhľad a potom umiestniť na želané miesto. Daňou za túto cestu je častokrát rozsiahlejší kód stránky. Prednosťou je však interaktívny prístup a tým flexibilnejšia tvorba. HTML editorov, ktoré pracujú týmto spôsobom je v súčasnosti pomerne veľa. Tak isto niektoré klasické textové editory ako MS Word umožňujú export svojich dokumentov do formátu HTML resp. ako web-stránky. Takto vytvorené stránky však neumožňujú väčšinou využitie žiadnych moderných "špecialít" (skripty, aplety) a pohybujú sa na úrovni klasických hypertextových dokumentov. Takisto bývajú problémy s formátom niektorých objektov, ktoré síce idú pekne vytvoriť v editore, ale po exporte do HTML vyzerajú odlišne. Navyše výsledný kód je zväčša nadbytočný a neoptimálny. Potom je nutné siahnuť k "ručnej" úprave. Napriek týmto nedostatkom sa táto cesta výdatne používa pre rýchle publikovanie na internete, pretože valná väčšina používateľov má svoje dokumenty vytvorené práve pomocou týchto editorov. 3.6 Ergonómia farieb v používateľských rozhraniach Ako už bolo uvedené v kapitole 1.4, jazyk HTML je vhodný na úrovni prezentačnej vrstvy ku tvorbe používateľských rozhraní. Z hľadiska používateľského rozhrania je pomerne dôležitou stránkou použitie vhodných farieb. Farby určujú predstavy, ale aj symboliku. Farebné obrazy sú podstatne komplikovanejšie ako monochromatické. S farbou vchádzajú do komunikácie človek - výpočtový systém nové kontrasty a nové vyjadrenie pocitov. Farby odovzdávajú, vytvárajú a ovplyvňujú psychiku a tým aj náladu používateľa. Navyše prinášajú farby aj určitú symboliku, zmenu tvarov (napr. svetlé plochy sa vždy zdajú väčšie ako tmavé) a aj vzájomné zmeny (napr. šedá na čiernej pôsobí zelenavo). Čo sa týka symboliky farieb v nasledujúcom je krátky prehľad: 54

55 Jazyk HTML biela symbolizuje čistotu a nepoškvrnenosť; je to veselá farba. čierna symbolizuje smútok; je to pasívna farba. modrá symbolizuje vernosť a diaľku; pôsobí zdržanlivo, uvoľňujúco, kľudne a vážne; je to studená a pasívna farba. červená symbolizuje lásku; pôsobí energicky, vzrušujúco až bombasticky; je to teplá, aktívna a dominantná farba. zelená symbolizuje nádej; pôsobí osviežujúco, ukľudňujúco; je to pasívna, neutrálna farba. šedá symbolizuje nerozhodnosť; je to pasívna, neenergetická a nedominantná farba. žltá symbolizuje inteligenciu; pôsobí veselo, vzrušujúco a mocne; je to aktívna, teplá a dominantná farba. 1.0 r e la tívn a c i tl ivo sť o k a d e n n é vi d e n ie 0.5 r b x 1 0 g Obr. 14 Relatívna citlivosť ľudského oka vln o vá d l žk a ( nm ) Dnes už máme pomerne veľkú bázu údajov o fyziológii a ľudskom vnímaní. Za týmito znalosťami ale ešte pokrivkáva znalosť ľudských duševných procesov. Ale aj napriek tomu, že sme ešte len v začiatkoch, pomerne dobre sa rozvíja nová veda, veda o rozpoznávaní farieb. Bolo vykonaných mnoho neurofyziologických a psychofyzikálnych testov a meraní. Na základe toho bolo stanovených niekoľko pravidiel resp. doporučení pre používanie farieb. Problematiku používania farieb v používateľských rozhraniach možno rozdeliť do niekoľkých okruhov: počet rôznych farieb podobnosť farieb zoskupenie spoločnou farbou pozadia jas a intenzita farieb stupeň farebnej zmeny "teplota" farieb 55

56 Informačné technológie Vychádzajúc z uvedených aspektov, je potrebné často v súčasnosti siahnuť ku kompromisu. Problém rozpoznávania a rozlišovania informácií na farebných monitoroch nie je ešte úplne doriešený. Ako je uvedené v nasledujúcich odstavcoch, dochádza niekedy ku protichodnosti niektorých pravidiel. Aj v praxi to znamená potom použitie v závislosti od typu a charakteru príslušného programového vybavenia. Počet farieb - Veda, ktorá sa zaoberá problémom ľudského poznávania, dokázala, že ľudská myseľ má veľké problémy, aby udržala a spracovávala naraz viac ako päť až sedem elementov. V rámci tohto rozmedzia sú skôr muži pri dolnej hranici a ženy pri hranici hornej. Všetko ale závisí od tréningu. Preto by sa nemalo používať viac farieb súčasne než je nutné. Stanovenie tohto počtu nie je vždy ľahkou záležitosťou. Navyše pre ľudský mozog v rámci asociácie nastáva ďalší problém. Ak určíme pre rôzne farby aj ich atribút, ktorý predstavuje určitý význam každej farby, potom hranica súčasne použitých dominantných farieb je okolo šesť. Tu zároveň je nutné sa zmieniť o základnom farebnom spektre. Toto obsahuje 7 základných farieb v poradí: červená, oranžová, žltá, zelená, modrá, atramentová (indigo) a fialová. Podobnosť farieb - Vzhľadom na obrovské asociačné schopnosti ľudského mozgu by mali podobné farby predznamenávať podobný význam. Elementy, ktoré spolu určitým spôsobom súvisia, môžu túto svoju spolupatričnosť vyjadriť aj stupňom farebnej zhody. V tejto súvislosti má veľký význam následnosť farieb vo farebnom spektre podľa vlnovej dĺžky. Z tohto dôvodu je napr. rozsah farieb od modrej k zelenej vnímaný viac podobný ako od červenej ku zelenej. Svoju nezastupiteľnú úlohu tu hrá aj stupeň intenzity (saturácie). Zoskupenie spoločnou farbou pozadia - Veľmi dôležitým faktorom, najmä v intuitívnych prostrediach je typ resp. metóda "predspracovania" používateľa pred samotnou konkrétnou akciou. V tomto aspekte je možné používateľa "nastaviť" na príbuzné prípady použitím unifikovaného (spoločného) farebného kódu. Množina po sebe idúcich zobrazení môže byť daná do vzájomnej súvislosti použitím rovnakej farby pozadia. Z hľadiska upútania pozornosti používateľa sa poväčšine ani nepoužívajú jasné farby. Naopak. Používané farby môžu byť veľmi nenápadné a nevýrazné ako napr. tmavočervená, modrá, hnedá či tmavošedá a pritom stále plnia účel zoskupenia. Jas a intenzita farieb - Zmena jasu resp. intenzity farby na obrazovke, je významným činiteľom pri orientácii pozornosti používateľa. Dôležitým javom je saturácia farby. Jasná a vysokosaturovaná oblasť obrazovky okamžite pritiahne pozornosť používateľa. Využívaním tohto javu sa zaisťuje prenášanie pozornosti používateľa. Určitým faktorom na presmerovanie pozornosti je aj použitie priamo blikania. 56

57 Jazyk HTML Stupeň farebnej zmeny - V tomto aspekte je možné použiť zmenu farebnosti do spojitosti s nejakou zmenou udalosti a túto zmenu zvýrazniť podľa dôležitosti resp. hĺbky zmeny. Je to známe použitie nap. v oblasti spotrebnej elektroniky v indikátoroch vybudenia. Postupné prepínanie z jednej farby na druhú môže určovať závažnosť zmeny resp. nebezpečnosť akcie. Táto metóda farebného kódovania je tak užitočná najmä pre "dynamickú" grafiku. "Teplota" farieb - "Teplota" farieb sa skoro zásadne používa na označenie aktívnosti dejov. Farby s dlhou vlnovou dĺžkou, teplé farby, sú už tradične používané na označenie činnosti (akcie, bežiaceho procesu) alebo na požiadavku a odozvu (odpoveď). Farby, ktoré majú krátku vlnovú dĺžku, t.j. studené farby sa väčšinou používajú na indikáciu stavu. Toto súvisí aj s ľudským vnímaním. Teplé farby priťahujú ľudí, lebo sa zdajú, že "vystupujú" pred nich, vyžadujú pozornosť. Naopak studené farby odvracajú pozornosť a zdajú sa byť ustupujúce. Ako už bolo povedané, aj pre prácu s farbami platia určité pravidlá. Uveďme si aspoň základné z nich. výhodné je pre dosiahnutie veselosti, rozhodnosti a vyrovnanosti použiť pestrú paletu farieb. Ale ako vždy platí, všetko s mierou. použitie silných farebných kontrastov typu svetlý-tmavý budí pozornosť. Vďaka rôznej svetlosti a sýtosti sa charakter farby môže meniť. na získanie dojmu pôsobenia priestoru sa použije kontrast studených a teplých farieb (červená/zelená, modrá/žltá, fialová/oranžová). Je to dané tým, že teplé farby vystupujú do popredia a studené ustupujú do úzadia. na vytvorenie akcentov (dominantných častí) je možné použiť kombináciu žiarivých (červená, oranžová) a kalných (zelená, modrá) farieb. nakoniec aj používanie monochromatickej palety (len svetlé alebo tmavé odtiene tej istej farby) alebo používanie príbuzných farieb vytvára niekedy decentný vzhľad. 57

58 Informačné technológie 4 Úvod do jazyka PHP Cieľom tejto kapitoly je stručný a hlavne jednoduchý úvod do jazyka PHP. V krátkosti sa tu oboznámime s možnosťami jazyka PHP. Všetko bude vysvetlené na jednoduchých príkladoch, čo by mohlo v úvode postačovať na základné pochopenie tvorby aplikácií pomocou jazyka PHP. 4.1 Niečo z histórie PHP Rasmus Lerdorf bol človek, ktorého môžeme označiť za otca systému. Rasmus vytvoril v programovacom jazyku PERL systém evidencie prístupu k jeho stránkam. V roku 1994 bol systém prepísaný do jazyka C vzhľadom na záťaž servera. Tento systém sa zapáčil aj iným ľuďom a začali ho používať. Systém sa stal obľúbeným a používalo ho stále viac používateľov. Množili sa požiadavky na jeho vylepšenie, a preto Rasmus systém rozšíril, zdokumentoval a uviedol ho pod názvom Personal Home Page (PHP) Tools (neskôr Personal Home Page Construction Kit). V rámci týchto úprav a rozšírení bol dodaný aj spôsob, ktorý umožňoval začleňovanie SQL-príkazov do stránok, vytváranie formulárov a zobrazovanie ich výsledkov, ktorý sa volal Form Interpreter (FI). PHP/FI 2.0 vznikol spojením dvoch predchádzajúcich programov. Takto definovaný systém už prerazil naozaj po celom svete, pretože sa jednalo o jednoduchý programovací jazyk, ktorý sa zapisoval priamo do HTML-stránok. Potom nastúpila verzia PHP 3.0. Oproti predošlej verzii bol celý systém zrýchlený a rozšírený o mnoho ďalších funkcií. Táto verzia PHP bola k dispozícii od polovice roku Na rozdiel od verzie 2.0 už fungovala aj pod Windows. Vývoj išiel dopredu a tak v roku 2000 už pod ochrannými krídlami firmy ZEND uzrela svetlo sveta verzia PHP 4.x, ktorá bázicky kraľuje v miernych modifikáciách dodnes. V súčasnosti je používaná verzia 5.x. Oproti predchádzajúcim verziám je táto stabilnejšia, bezpečnejšia a v mnohých ohľadoch aj rýchlejšia. Pôvodný obsah skratky PHP sa zmenil na hypertextový preprocesor PHP (PHP: Hypertext Preprocessor). 4.2 Prvý skript Čo vlastne predstavujú skripty v PHP. Nie je to nič iné ako klasické HTML stránky rozšírené o výkonné príkazy. Súbory s PHP skriptom sa najčastejšie ukladajú s príponou.php. Tento spôsob potom umožní jednoduchšiu identifikáciu stránok obsahujúcich PHP skript na strane servera. Samozrejme, že môžu byť použité aj iné prípony, to si ale aj častejšie vyžaduje jednoduché dokonfigurovanie 58

59 59 Úvod do jazyka PHP servera. Potom ak WWW-server obdrží požiadavku na súbor, ktorý končí na uvedenú príponu, odovzdá požiadavku systému PHP. Ten sa postará o vykonanie všetkých príkazov uložených v súbore a výsledok odovzdá naspäť serveru. Server výslednú stránku odošle ako odpoveď klientovi. Spravidla po nainštalovaní máme k dispozícii niektoré ukážkové skripty. Veľmi dobrou voľbou pre úvodné experimentovanie so systémom PHP na platforme MS Windows, je nainštalovanie niektorého integrovaného balíka, ktorý zabezpečí konzistentnú inštaláciu WWW servera (Apache), interpretera PHP a databázového systému MySQL. Príkladom neplatenej možnosti je nainštalovanie balíka WAMP, ktorý je určený primárne pre platformu MS WindowsXP. Pre systém LINUX je možné použiť ekvivaletný balík XAMP. Medzi najjednoduchšie skripty patrí zobrazenie informácií o systéme PHP. Takýto skript obsahuje len jednu funkciu phpinfo(). Ak takýto skript nemáme, postačí ak si v obyčajnom textovom editore (napr. aj Poznámkový blok) vytvoríme súbor info.php s nasledujúcim obsahom: <? PHPInfo();?> Tento súbor je potrebné uložiť do adresára, ktorý je súčasťou stromu dokumentov WWW-servra. Spravidla je tento adresár na každom systéme iný. Na platforme UNIX sa najčastejšie jedná o adresár public_html, ktorý sa nachádza vo vašom domovskom adresári. Na platforme Windows je to závislé od použitého WWW servera. V prípade uvádzaného integrovaného balíka je nutné tento adresár špecifikovať pri inštalácii (document root). Pred akoukoľvek činnosťou je potrebné ešte spustiť WWW server prípadne povoliť automatické spúšťanie pri štarte MS Windows. Skript je možné spustiť aj pomocou interperetera PHP jednoduchým zadaním do príkazového riadku. V takomto prípade však nie je možné pracovať s grafikou a fontami, výpisy sú jednoduché znakové a v princípe je tento postup podobný ako keby ste pracovali napr. v programovacom jazyku BASIC. php.exe subor_so_skriptom.php Súbor so skriptom je najlepšie v takomto prípade umiestniť do adresára, kde je nainštalované php. Ak chceme dosiahnuť plnohodnotné využitie v kombinácii s HTML potom skript musíme vždy vyvolať pomocou jeho URL adresy. V prehliadači teda zadáme jeho adresu, ktorá môže vyzerať napr. Skript však nesmieme v prehliadači otvárať ako súbor priamo z disku. Pokiaľ v prehliadači zadáme ako URL dokumentu iba cestu k súboru napr. c:\users\php\info.php, nezobrazí sa výsledok skriptu. Skript musí byť pred zaslaním interpretovaný systémom PHP. Interpret je vyvolaný iba v prípade, keď k dokumentu ( skriptu ) pristupujeme cez WWW-

60 Informačné technológie server, tj. pomocou URL, ktoré začína na http. Pokiaľ je teda všetko v poriadku, mala by sa zobraziť stránka, ktorá obsahuje informácie o používanej verzii systému PHP. Obr. 15 Ukážka úvodnej informačnej stránky o používanej verzii PHP Pokiaľ sa vám nezobrazil požadovaný výsledok, skontrolujte, či ste pri opisovaní skriptu neurobili preklep. Pokiaľ to nepomôže, uistite sa, že ste súbor uložili do správneho adresára a v prehliadači máte správne zadané URL dokumentu. Pokiaľ i tu je všetko v poriadku, bude asi problém v inštalácii a konfigurácii PHP. Problém potom radšej konzultujte s pokročilejším používateľom, správcom systému alebo si skúste prečítať inštalačný manuál.. Už z tohto príkladu je vidno, že príkazy PHP sa zapisujú v HTML kóde medzi dvojicu dvojznakov <? a?>. Tieto slúžia k oddeleniu príkazov PHP od HTML-kódu. V našom skripte žiadny HTML-kód síce nie je, ale aj tak musíme znaky použiť. PHP interpretuje iba príkazy uvedené medzi týmito špeciálnymi značkami Ukončenie behu skriptu Špeciálny príkaz na korektné ukončenie resp. uzavretie skriptu sa neuvádza. Častokrát je však potrebné skript ukončiť násilne, počas behu. PHP povoľuje túto možnosť. Skript je možné kedykoľve ukončiť príkazom exit alebo funkcie Die(). Pri používaní tejto funkcie by sme mali byť opatrní. Pokiaľ v našom skripte kombinujeme HTML s príkazmi PHP a použijeme niekde uprostred skriptu exit, do prehliadača sa nič ďalšie neposiela - teda ani prípadné ukončovacie párové príkazy ako </BODY></HTML>. Potom skript v tomto prípade vygeneruje nekorektnú HTML-stránku. Tento nedostatok môžeme v niektorých prípadoch odstrániť pomocou funkcie, Register_ShutDown_Function()(pre bližšie informácie je výhodnejšie v tomto prípade pozrieť originálny manuál k príslušnej verzii PHP). 60

61 4.3 Základné možnosti PHP Úvod do jazyka PHP Po úvodnom pokuse je možné prejsť k ďalším príkladom. V nasledujúcom príklade už skombinujeme príkazy PHP s HTML-kódom. Vytvoríme príklad stránky, ktorá bude jednoduchou kalkulačkou a bude sčítavať dve čísla a výskedok vypíše. Vstup čísel zatiaľ bude daný zápisom konštanty priamo v zdrojovom texte skriptu. Príklad: <HTML> <HEAD> <TITLE>Kalkulačka</TITLE> </HEAD> <BODY> <H1>Kalkulačka</H1> <?php $x = 9; $y = 14; $z = $x+$y; echo Sčítanie $x+$y = $z\n ;?> </BODY> </HTML> V skripte boli použité tri premenné $x, $y, $z. Do premenných môžeme priraďovať rôzne hodnoty a vzájomne ich kombinovať pomocou matematických operácií. Príkaz echo slúži k vypísaniu textu za ním uvedeného. V tomto texte môžeme samozrejme používať skôr vytvorené premenné. Obr. 16 Príklad jednoduchej kalkulačky Zobrazenie zdrojového textu vyvoláme v prehliadači príkazom Zobraziť Zdroj alebo View Page Source. Vidíme, že do prehliadača dorazí už iba webová stránka. Všetky príkazy PHP sú na serveri vykonané a výsledkom je čisté HTML, ktoré vie zobraziť každý prehliadač. 61

62 Informačné technológie Čo v jazyku HTML nie je a niekedy by sa veľmi zišlo je možnosť algoritmického opakovania určitých častí t.j. možnosť používania cyklov. Použitím PHP je to možné a dokonca aj použitie vnorených cyklov, ako je uvedené v nasledujúcom príklade. Príklad: <HTML> <HEAD> <TITLE>Cyklová stránka</title> </HEAD> <BODY> <H1>Cyklová stránka</h1> <?php for($i=1; $i<=7; $i++):?> <P><FONT SIZE="<?echo $i?>"> <? for($j=1; $j<=$i; $j++) echo $i?></font></p> <?php endfor?> </BODY> </HTML> Po vykonaní tento skript dostane v nasledujúcom tvare (HTML) a tak ju aj zobrazí: <HTML> <HEAD> <TITLE>Cyklová stránka</title> </HEAD> <BODY> <H1>Cyklová stránka</h1> <P><FONT SIZE="1"> 1</FONT></P> <P><FONT SIZE="2"> 22</FONT></P> <P><FONT SIZE="3"> 333</FONT></P> <P><FONT SIZE="4"> 4444</FONT></P> <P><FONT SIZE="5"> 55555</FONT></P> <P><FONT SIZE="6"> </FONT></P> <P><FONT SIZE="7"> </FONT></P> </BODY> </HTML> Úlohou bolo vypísať taký počet a hodnotu číslic, ktoré reprezentujú práve použitú veľkosť písma. Stránka po zobrazení v prehliadači bude vyzerať nasledovne: 62

63 Úvod do jazyka PHP Obr. 17 Výsledok použitia cyklov v skripte Všetko, čo je medzi príkazmi for a endfor sa urobilo celkom sedemkrát, pretože premenná $i nadobúdala postupne hodnoty od 1 do 7. Príslušný počet vypisovaných číslic je riadený hodnotou premennej $j. Okrem uvedených aritmetických cyklov má PHP aj prostriedky na použitie iných typov cyklov. Okrem základného vybavenie disponuje PHP pomerne slušnou množinou knižníc, ktoré obsahujú najrozmanitejšie funkcie použiteľné v procese programovania. Napríklad v PHP nie je problém doplniť stránku o zobrazenie aktuálneho dátumu a času. Na to využijeme Date(), ktorej parametrom je požadovaný formát zobrazenia dátumu resp. času. V tomto príklade sú formáty d.m.s a H:i:s vypísania dňa.mesiaca.roku a hodín,minút a sekúnd oddelených dvojbodkou. Príklad: <HTML> <HEAD> <TITLE>Chronometer</TITLE> </HEAD> <BODY> <DIV ALIGN=CENTER> <H1>Chronometer</H1> Aktuálny dátum je <?php echo Date("d.m.Y");?><BR> Aktuálny čas je <?php echo Date("H:i:s");?> </DIV> </BODY> </HTML> 63

64 Informačné technológie Obr. 18 Zobrazenie aktuálneho dátumu a času 4.4 PHP a formuláre Prvý stupeň sily PHP pocítime však až teraz a týka sa najmä možností spracovania formulárov. Formuláre sú akousi vstupnou bránou do interaktívneho sveta Webu. Pomocou formulárov sa môžu používatelia na stránkach registrovať, zapájať do súťaží či používať jednoduché e-obchody. Aby však formulár nebol iba čiernou dierou, musí k nemu existovať skript, ktorý používateľom zadané dáta spracuje a na ich základe poskytne používateľovi adekvátnu odozvu. My si jednoduchosť práce s parametrami z formulárov ukážeme na jednoduchej aplikácii. Používateľ do formulára zadá nebeské teleso a jeho svietivosť. Na základe toho dostane odpoveď či sa jedná o malé, stredné alebo veľké nebeské teleso. Stránka formulára môže vyzerať nasledovne: <HTML> <HEAD> <TITLE>Formulár nebeských telies</title> </HEAD> <BODY BACKGROUND="mraky.jpg"> <H1><B><FONT SIZE=6><P ALIGN=LEFT>Formulár pre nebeské telesá</p></font></h1> <HR SIZE=6> <FONT SIZE=3> <FORM ACTION="spracuj.php" METHOD="post"> <P> Meno telesa: <BR> <INPUT TYPE="radio" NAME="meno" VALUE="Slniečko">Slniečko<BR> <INPUT TYPE="radio" NAME="meno" VALUE="Mesiačik">Mesiačik<BR> <INPUT TYPE="radio" NAME="meno" VALUE="Hviezdička">Hviezdička<BR><BR> Svietivosť: <INPUT TYPE="text" NAME="svietivost"><BR><BR> <INPUT TYPE="submit" VALUE="Vyhodnotiť"> <INPUT TYPE="reset" VALUE="Obnoviť"><BR> </P> </FORM> </BODY> </HTML> 64

65 Úvod do jazyka PHP Obsah atribútu ACTION určuje skript, ktorý bude vyvolaný pre obsluhu dát formulára. Skript spracuj.php sa vyvolá potom, čo používateľ vyplní formulár a odošle ho stisnutím tlačidla Vyhodnotiť. Príklad: spracuj.php <HEAD> <TITLE>Vyhodnotenie formulára nebeských telies</title> </HEAD> <BODY BACKGROUND="mraky.jpg"> <H1><B><FONT SIZE=6><P ALIGN=LEFT>Vyhodnotenie nebeského telesa</p></font></h1> <HR SIZE=6> <FONT SIZE=4> <? echo $meno?> so svietivosťou <? echo $svietivost?> je <? if ($svietivost < 100): echo "malé nebeské teleso"; elseif ($svietivost < 1000): echo "stredné nebeské teleso"; else: echo "veľké nebeské teleso"; endif?> </BODY> </HTML> V skripte máme obsah polí prístupný pomocou premenných. V našom prípade máme k dispozícii meno a svietivosť nebeského telesa v premenných $meno a $svietivost. Pomocou podmienok potom skript v závislosti na zadanej svietivosti vyberie správny text, ktorý vypíše. Ukážku postupu pri výbere mesiačika so svietivosťou 500 vidíme na nasledujúcom obrázku. Obr. 19 Ukážka spracovania formulára v PHP 65

66 Informačné technológie Prenos parametrov z formulára do premenných skriptu týmto spôsobom v súčasnosti nie je považovaný za bezpečný. PHP poskytuje špeciálne premenné vo forme asociatívnych polí $HTTP_GET[] ($_GET[]) a $HTTP_POST[] ($_POST[]) podľa použitej metódy prenosu. Meno formulárového prvku je potom identifikátorom v tomto asociatívnom poli napríklad pre uvádzaný formulár nebeských telies by sa použilo $_POST["meno"] a $_POST["svietivost"]. Potom by použitie v tomto príklade vyzeralo napríklad nasledovne... <? if ($_POST["svietivost"] < 100):... V prípade, že programátor chce využiť zjednodušenú formu uvedenú v našom príklade je nutné nastaviť v súbore PHP.INI direktívu register_globals = On (predvolené Off). V publikácii kvôli zjednodušeniu budú používané hodnoty formulárových premenných len ako globálne. 4.5 PHP a databázy Jednoduchá spolupráca s databázami to je to čo je na PHP najzaujímavejšie a zároveň znamenalo pre neho taký používateľský úspech. V skriptoch je možné používať štandardný dotazovací jazyk SQL a vykonávať s údajmi v databáze ľubovoľné operácie. Možnosti praktického využitia databázy sú naozaj veľmi široké. V nasledujúcom bude uvedený jednoduchý príklad, ktorý umožní pohodlné prehľadávanie databázy s nebeskými telesami. Každé teleso bude v databáze mať uchované svoje meno, svietivosť a veľkosť. Len pre príklad bude tabuľka databázy vyzerať nasledovne (bez vysvetľovania, jedná sa čisto o príklad a takisto sa predpokladá, že databáza je už naplnená určitým množstvom informácií. Takisto si všimnite, že táto stránka v atribúte ACTION volá samú seba): databáza: nebesa tabuľka : telesa( meno varchar(64), svietivost int, velkost varchar(10) ) Príklad: súbor dbnebesa.php <HEAD> <TITLE>Katalóg nebeských telies</title> </HEAD> <BODY BACKGROUND="mraky.jpg"> <H1>Katalóg nebeských telies</h1> <FORM ACTION="dbnebesa.php"> Zistiť nebeské teleso so svietivosťou väčšou ako: <INPUT NAME=Svietivost VALUE="<?echo $Svietivost?>"> <INPUT TYPE=Submit VALUE="Vyhľadať"> </FORM> 66

67 Úvod do jazyka PHP <HR> <?php if ($Svietivost!=""): $spojenie = mysql_connect("localhost"); if (!$spojenie): echo "Nepodarilo sa pripojiť k databáze."; else: $otazka = "SELECT * FROM telesa WHERE svietivost > ".$Svietivost; $vysledok = mysql_db_query("nebesa", $otazka, $spojenie); if (!$vysledok): echo "Chyba pri vykonávaní otázky nad databázou"; else: echo "Počet vyhľadaných telies: ".mysql_num_rows($vysledok); echo "<TABLE CELLPADDING=2>\n"; echo "<TR><TH BGCOLOR=AQUA WIDTH=250>Meno</TH> <TH BGCOLOR=AQUA WIDTH=250>Svietivosť a veľkosť</th></tr>\n"; echo "</TABLE>\n"; while ($zaznam = mysql_fetch_array($vysledok)): echo "<TABLE CELLPADDING=2>\n"; echo "<TR VALIGN=TOP><TD BGCOLOR=WHITE WIDTH=250>".$zaznam["meno"]."</TD>"; echo "<TD BGCOLOR=WHITE WIDTH=250><SMALL>".$zaznam["svietivost"]."<BR> veľkosť: ".$zaznam["velkost"]."</small><td></tr>"; echo "</TABLE>\n"; endwhile; endif; mysql_close($spojenie); endif; endif;?> </BODY> </HTML> V tomto príklade pre prístup k databáze sa používa rozhranie k databáze MySQL. Je to jedna z možností, ktorú PHP pri prístupe k databázam ponúka a v uvádzanom WAMP je táto databáza implicitne dodaná. Volaním funkcie mysql_connect() sa pripojíme k databázovému servru. Funkcia mysql_db_query() slúži k zadaniu otázky na databázu v jazyku SQL. Výsledok sa spracuje pomocou funkcie mysql_fetch_array(), ktorá uloží 67

68 Informačné technológie výsledok do asociatívneho poľa $zaznam. Funkcia mysql_num_rows() vracia počet záznamov, ktoré vyhovujú otázke. Výsledok sa prehľadne formátuje pomocou tabuliek. Problematika databáz je veľmi zaujímavá a široká. Tento príklad bol iba veľmi malou ukážkou toho, čo PHP v tejto oblasti dokáže. Na nasledujúcom obrázku je ukážka výsledku otázky na databázu, ak budeme požadovať všetky telesá, ktorých svietivosť je väčšia ako 50. Obr. 20 Ukážka výsledku otázky na databázu 4.6 Základy jazyka PHP V predchádzajúcej kapitole bolo v krátkosti načrtnuté aké schopnosti má PHP. V tejto kapitole si preberieme základy PHP, ukážeme si spôsoby, ktorými sa dá PHP začleňovať do HTML-stránok. Potom si popíšeme prácu s premennými rôznych typov a s výrazmi. Bude ozrejmené, čo sa chápe pod pojmom výraz v PHP a aké operátory môžeme používať pri zápise výrazov. Nakoniec budú v krátkosti uvedené základné príkazy jazyka PHP Integrovanie PHP skriptov do HTML Spôsoby integrovania PHP skriptov do HTML kódu sú viaceré: Na predchádzajúcich príkladoch bola viacmenej ukázaná len schopnosť ako vlastne oddeľovať príkazy PHP od kódu HTML. To bolo vykonané tak, že všetky príkazy sa zapisovali medzi znaky `<?` a `?>`. Voľba práve týchto znakov nie je náhodná. Elementy, ktoré môžeme používať v jazyku HTML, sú definované pomocou jazyka SGML. Jazyk SGML zároveň definuje, že príkazy pre rôzne preprocesory, ktoré dokument spracovávajú, majú byť uzavreté práve v tejto dvojici znakov. Presnejšie povedané, v SGML sa pre oddelenie rôznych príkazov od textu dokumentu používa špeciálna sekvencia 68

69 Úvod do jazyka PHP znakov označovaná ako PI(Processing instructions). V jazyku SGML sa otváracia sekvencia skladá z dvoch znakov `<?` a ukončovacia len zo znaku `>`. Otáznik z ukončovacej značky bloku príkazov PHP je v podstate ešte súčasťou skriptu. Interpreter PHP ho však ignoruje. Novší jazyk XML (zjednodušený SGML) už rovno počíta s ukončovacím znakom `?>`. Tento najjednoduchší variant, je pre zaraďovanie skriptov do stránok vo väčšine prípadov najlepší. Po nainštalovaní balíka WAMP je nutné v súbore PHP.INI nastaviť direktívu short_open_tag = On (predvolené Off). Inak je nutné uvádzať tag <?php t.j. nasledujúcu možnosť, aby bol script rozpoznaný ako skript php. Druhá možnosť je o niečo lepšia. Ak sa PHP používa na generovanie XMLdokumentov, musíme použiť otvárací príkaz `<?php`. XML už má možnosť zaradenia príkazov pre viac rôznych preprocesorov naraz. Preto je vždy nutné určiť, pre aký systém (preprocesor) sú vkladané príkazy určené. K označeniu systému PHP slúži práve identifikátor php: <?php echo vkladanie PHP skriptu ;?> Posledný spôsob ako zaradiť skript do stránky, je použitie párového príkazu <SCRIPT>. Tento spôsob bol do PHP pridaný kvôli niektorým editorom, ktoré si neporadia s kratšou formou zápisu. Jedná sa väčšinou o WYSIWYG editory, ako je napríklad už popisovaný FrontPage. <SCRIPT LANGUAGE= php > echo vkladanie PHP skriptu ; </SCRIPT> Kvôli kompatibilite s niektorými HTML-editormi bola do PHP pridaná i podpora oddeľovacích príkazov, ktoré normálne používa ASP od Microsoftu. ASPpríkazy by sme mali používať len vtedy, pokiaľ nám už nič iné nezostáva. Použitie klasických príkazov PHP je omnoho elegantnejšie a úplne vyhovuje štandardom HTML, SGML a XML. Ak je teda povolene používanie ASP príkazov (v konfiguračnom súbore povolená direktíva asp_tags), je možné používať značky `<%...%>` a `<%=...%>`. Použitie `<%...%>` je ekvivalentom zápisu `<?...?>`. Použitie `<%=...%>` v znaku `=` zastupuje príkaz echo Vkladanie PHP skriptu do PHP skriptu Pri tvorbe stránok pomocou skriptov sa veľmi často stretneme s potrebou načítania iných skriptov či časti stránok. Načítané súbory môžu obsahovať preddefinované funkcie, ktoré používame na viacerých stránkach, alebo napr. štandardizované hlavičky a päty stránok. Pre načítanie skriptov sú v PHP k dispozícii príkazy require a include. 69

70 Informačné technológie Príkaz require slúži k načítaniu skriptu zo súboru. Načítaný skript sa vloží v mieste použitia príkazu. Vykonajú sa všetky jeho príkazy a potom sa vo vykonávaní pokračuje príkazom uvedeným za require. require meno súboru; meno súboru je pritom ľubovoľný výraz, ktorý sa vyhodnotí ako reťazec. Špecialitou príkazu require je, že sa vykoná iba raz. Pokiaľ by sme ho volali v cykle a chceli načítať viackrát, načíta sa súbor iba pri prvom prechode cyklom. Pre opakované čítanie súboru je potrebné využiť príkaz include. Parametrom príkazu je meno súboru. Meno súboru samozrejme môže obsahovať aj cestu. Cestu možno zadať aj relatívnu; ako základný adresár sa berie adresár, z ktorého je spustený skript obsahujúci príkaz require. Najčastejšie sa require požíva pre načítanie používateľom definovaných funkcií. require./mojafunkcia.php ; Príkaz include slúži na načítanie skriptu zo súboru. Jeho použitie je rovnaké ako pri príkaze require. Rozdiel je v tom, že jeden príkaz include môžeme volať niekoľkokrát napr. vo vnútri cyklu. Ak budeme chcieť vložiť do stránky resp. skriptu trikrát obsah súboru mojafunkcia.php, môžeme použiť skript: for ($i=0;$i<3;$i++): include./mojafunkcia.php ; endfor; Použitie tohto syntaktického zápisu je výhodné pretože príkaz include je v našom prípade ekvivalentný mnohým príkazom, prípadne HTML-kódu, ktorý je obsadený v súbore mojafunkcia.php. Takže pozor na jeho použitie na mieste, kde je očakávaný iba jeden príkaz Syntax jazyka PHP Hneď v úvode je nutné poznamenať, že syntax sa pomerne dosť podobá jazyku C. Každý PHP program (skript) je zložený z postupnosti príkazov Oddeľovanie príkazov v jazyku PHP Na vizuálne oddeľovanie príkazov a tým priehľadnejšie formátovanie zdrojového textu sa môžu použiť tzv. blank znaky. Medzi blank znaky zaraďujeme medzery, tabelátory a znaky koncov riadkov. Pri ich použití je možné použiť ľubovoľný počet. 70

71 <? $premenna = priklad ; echo $premenna;?> Úvod do jazyka PHP Pre faktické oddeľovanie existujú dve možnosti ako príkazy PHP oddeľovať: 1. Každý príkaz je možné uviesť samostatne medzi znaky <? a?> <? $premenna = priklad?> <? echo $premenna?> 2. Uvedenie viac príkazov naraz. V tomto prípade však musia byť oddelené pomocou bodkočiarky, tak ako je zvykom aj v jazyku C. <? $premenna = priklad ; echo $premenna?> V PHP môžeme používať dva druhy komentárov. Na ich oddeľovanie sa používa rovnaký spôsob ako v jazyku C. 1. In-line komentáre používané pre kratšie poznámky sa používa komentár `//`. Všetko od tejto dvojice znakov až do konca riadku, je v skripte ignorované. <? $premenná = priklad ; echo $premenna;?> // Priradenie obsahu premennej // Vypísanie obsahu premennej 2. Viacriadkové komentáre používané pre dlhšie poznámky. Všetko medzi dvojicami znakov `/ ` a ` /` sa považuje za komentár. Tento druh komentára môže zabrať aj viac riadkov. <??> / Toto je priklad poznámky uvedenej ako viacriadkovy komentar. Nasledujuci skript najprv priradi retayec priklad do premennej a potom obsah premennej zobrazi na vystup. / $premenna = priklad ; echo $premenna; Premenné jazyka PHP Premenné sú dôležitým prvkom každého jazyka. Premenné slúžia na uchovávanie hodnôt či už vstupných, výstupných alebo priebežných (tzv. procesných). Každá premenná je jednoznačne definovaná svojím typom a identifikátorom. 71

72 Informačné technológie Typ premennej nie je nutné v PHP, oproti napr. jazyku C alebo Pascal, dopredu deklarovať. Je možné ich používať priebežne. Premenná je deklarovaná okamihom, kedy ju po prvýkrát použijeme, čo je podobné ako v klasickom jazyku BASIC. V okamihu priradenia do premennej sa automaticky určí jej typ. Pokiaľ do premennej nič neuložíme priraďovacím príkazom, má premenná obsah prázdneho reťazca. O typy premenných sa však väčšinou nemusíme starať, pretože sa podľa potreby automaticky konvertujú na vhodný typ. V PHP máme k dispozícii päť základných typov: typ premennej integer double string array object význam typu celé číslo desatinné číslo znakový reťazec pole objekt Tab. 3 Tabuľka základných typov v PHP Z hľadiska identifikátora je situácia mierne zložitejšia. Identifikátor premennej v PHP sa skladá z dvoch častí. Prvá časť je povinný znak `$`, po ktorom nasleduje druhá časť a to meno premennej. Navyše je dôležité ako sa u mena premennej v PHP reaguje na malé a veľké písmena. V PHP môžeme použiť pre zápis príkazov a funkcií ľubovolné písmena malé, veľké, či ich kombináciu. Je teda jedno, či použijeme echo, Echo alebo ECHO. Avšak z hľadiska identifikátorov premenných t.j. ich mien záleží na veľkosti písmen. Potom $Premenna, $premenna, $PREMENNA a $premenna sú štyri rôzne premenné. V menách premenných môžeme okrem ľubovoľných písmen používať aj znak _ a číslice. Prvý znak názvu premennej však musí byť len písmeno alebo _. Prípustnými názvami premenných sú teda $_Premenná, $premenná_1, $PREMENNA2. Neprístupná je však napríklad premenná $1premenná, pretože začína číslicou. Okrem toho je možné v menách premenných používať aj znaky s diakritikou. Pred použitím premennej je vhodné do nej priradiť nejakú hodnotu. Nemali by sme sa spoliehať na to, že premenná bude prázdna. Obsah premennej sa totiž dá nastaviť šikovným parametrom zadaným za URL. Napr. URL končiace na?premenna=99 priradí do premennej $premenna hodnotu 99. Tento spôsob sa používa pri prenášaní hodnôt medzi jednotlivými stránkami (pozri prenos hodnoty svietivosti v kapitole 4.5) Prekrývanie premenných PHP umožňuje prekrývanie premenných. Jedná sa o to vtedy, keď obsah jednej premennej je menom inej. V takom prípade je nutné viacnásobné použitie znaku $. 72

73 Úvod do jazyka PHP Vo všeobecnosti je v PHP možný zápis ${<<výraz>>}. Hodnota <<výrazu>> je potom považovaná za meno premennej alebo môže byť aj ukazovateľom na funkciu. Lepší však bude príklad. $a = b ; $b = c ; $c = d ; $d = Abs ; echo $$$$a(-123); funkcie // Vypíše 123 ako výsledok absolútnej hodnoty Pretypovanie premenných Pod procesom pretypovania premennej sa myslí zmena typu premennej počas behu skriptu. Pretypovanie môže byť v PHP použité automatické alebo vnútené. Vo väčšine prípadov sa PHP postará o to samo. Napr. pri priradení celého čísla int do double dôjde automaticky k jeho pretypovaniu na double. Pokiaľ teda napríklad sčítame čísla, z ktorých je jedno double, všetky ostatné sa prevedú na typ double a výsledok bude taktiež typu double. Pokiaľ sú všetky čísla int, bude taktiež výsledok int. Ku zisteniu typu premennej môžeme použiť funkciu GetType(<premenná>). Tá vracia meno typu <premennej>. V prípade potreby zistenia, či má premenná určitý konkrétny typ, je možné použiť funkcie Is_Integer(), Is_Double(), Is_String(), Is_Array() a Is_Object(). Pri vnútenom pretypovaní sa použije funkcia SetType(<premenná>, <typ>). Pokiaľ teda chceme z číselnej premennej $x vytvoriť premennú $x typu reťazec, použijeme volanie SetType($x, string ). Dopredu je však nutné upozorniť na zvýšenú opatrnosť pri vnútenom pretypovávaní. Častokrát môže tento proces pri nedocenení všetkých dôsledkov priniesť chyby alebo nekorektné správanie sa skriptu. Funkcia SetType() zmení typ premennej. Pokiaľ však potrebujeme typ nejakej premennej zmeniť len jednorázovo, pri jej použití vo výraze, použijeme dočasné pretypovanie. Dočasné pretypovanie sa vykoná tak, že pred premennú napíšeme do okrúhlych zátvoriek typ, na ktorý ju potrebujeme pretypovať. Napríklad $x nech je typu integer. Po nasledujúcom zápise bude výsledná $y už typu double ale $x svoj typ nestratila. Vnútri zátvoriek s typom môžeme použiť ľubovoľný počet medzier. $y = (double) $x; Nasledujúca tabuľka obsahuje možné zápisy pri dočasnom pretypovávaní. 73

74 Informačné technológie Nastavovaný typ celé číslo desatinné (reálne) číslo textový reťazec pole objekt Použiteľný zápis (int) alebo (integer) (double), (real) alebo (float) (string) (array) (object) Tab. 4 Možné zápisy pri dočasnom pretypovávaní Jedným z najčastejšie používaných pretypovaní je vlastne konverzia reťazca na číslo a späť. Pokiaľ je reťazec použitý v miestach, kde je očakávaný číselný výraz, vykoná sa automatická konverzia na číselný typ (integer alebo double). Výsledok bude číslo typu double, pokiaľ reťazec obsahuje niektorý zo znakov `.`, `E` a `e`. Inak bude výsledok typu integer. Za prípadnými znakmi `E` alebo `e` sa očakáva celé číslo vyjadrujúce exponent, ktorý môže byť aj záporný. Pri zisťovaní číselnej hodnoty reťazca sa v úvahu berie jeho počiatočná časť. Pokiaľ obsahuje číslo, je výsledkom konverzie typov toto číslo. Pokiaľ reťazec nezačína číslom, výsledkom konverzie bude 0. Zápis Typ výsledku Hodnota výsledku Poznámka $x = číslo1 ; integer 0 len reťazec, konverzia na 0 $x = 1 + číslo2 ; integer 1 reťazec začína číslom $x = číslic ; integer 6 int, v reťazci nie je znak e $x = ; double 6.67 reťazec obsahuje znak. $x = 1 + výsledok3 ; double 1 v reťazci je znak e, preto double $x = čísel ; double 6 v reťazci je znak e, preto double $x = e1 ; double -50 Tab. 5 Typy a hodnoty výsledkov pri konverzii reťazca na číslo Konštanty v PHP Konštanty podobne ako premenné slúžia k uchovaniu hodnôt, ktoré môžeme používať v našich skriptoch. Konštanty na rozdiel od premenných, však behom chodu skriptu nie je možné meniť. Navyše na rozdiel od premenných majú konštanty globálnu platnosť. Sú prístupné i vo všetkých funkciách a objektoch. Každá konštanta je jednoznačne definovaná svojím typom a identifikátorom. Konštanty môžeme definovať iba jednoduchého typu integer, double a string. Z hľadiska identifikátora je situácia opäť obdobná ako u identifikátora premennej, avšak pred menom konštanty sa nepoužíva znak $. Pre definovanie konštanty sa používa funkcia define(). Oproti menám premenných je možné definovať konštantu tak, aby v jej mene nezáležalo na veľkosti písmen. Je to možné 74

75 Úvod do jazyka PHP zabezpečiť tak, že vo funkcii define() sa použije tretí parameter a jeho hodnota bude true. K zisteniu, či je nejaká konštanta definovaná, slúži funkcia defined(). Ako parameter sa uvádza meno konštanty. Syntax funkcie define() je: define( meno_konštanty, hodnota_konštanty) alebo define( meno_konštanty, hodnota_konštanty, podmienka_velkosti) Pre definíciu konštanty LIMIT, ktorá bude mať hodnotu 999, môžeme použiť: define( LIMIT, 999); V skripte teraz môžeme konštantu LIMIT používať vo všetkých výrazoch namiesto čísla 999: for($i=0; $i<limit; $i++) ---- telo cyklu -----; Ak túto konštantu definuje nasledovne: define( LIMIT, 999, true); Potom môžeme používať konštanty LIMIT, limit, Limit, LiMiT a pod., všetky predstavujú definovanú hodnotu Jednoduché (skalárne) údajové typy jazyka PHP Typ integer Celočíselný údajový typ je reprezentovaný v PHP štyrmi bajtami. Celočíselné konštanty zapisujeme ako čísla v desiatkovej sústave prípadne doplnené o znamienko, ako čísla v šestnástkovej alebo osmičkovej sústave. Pri zápise v šestnástkovej sústave sa na začiatok pridáva dvojica znakov 0x alebo 0X a potom nasledujú šestnástkové číslice reprezentované číslicami 0-9 a malými alebo veľkými písmenami `A` -`F`. Pri zápise v osmičkovej sústave sa na začiatok pridáva znak O a potom nasledujú osmičkové číslice reprezentované číslicami 0-7. Dekadický rozsah je potom od do V šestnástkovej sústave akceptuje PHP len čísla v rozsahu od 0x0 do 0x7FFFFFFF. Ostatné šestnástkové čísla považuje za nulu. V nasledujúcom sú uvedené príklady jednotlivé zápisy celočiselných hodnôt. $x = 123; // v $x bude dekadicky hodnota 123 $x = 0x123; // v $x bude dekadicky hodnota 291 $x = O123; // v $x bude dekadicky hodnota 83 $x = 0XDF; // v $x bude dekadicky hodnota

76 Informačné technológie Typ double Typ double reprezentuje v PHP reálne čísla t.j. desatinné. Reprezentácia je závislá od platformy a väčšine platforiem je uložený na ôsmich bajtoch. Číselné konštanty typu double sa zapisujú ako čísla s voliteľným znamienkom a s desatinnou čiarkou. Počet platných číslic je 15. Pokiaľ chceme číslo zapísať v exponeciálnom tvare, nasleduje písmeno `e` alebo `E` a za ním je celé číslo vyjadrujúce exponent (napr. 1.23e2 = 1, = 123). Rozsah je približne od 1, do 1, Najmenšie kladné číslo, ktoré dokáže typ double obsiahnuť je 3, V prípade potreby väčšej presnosti je nutné napísať vlastnú obsluhu alebo použiť matematickú knižnicu BC, ktorej podpora je do PHP zahrnutá. $x = 1,23; // v $x bude dekadicky hodnota 1,23 $x = 1,23e2; // v $x bude dekadicky hodnota Typ string Typ string reprezentuje v PHP reťazec znakov (aj jeden). Reťazce môžeme v PHP zapisovať do úvodzoviek alebo do apostrofov. Pokiaľ je potrebné úvodzovky použiť vnútri reťazca, použije sa podobne ako u jazyka C sekvencia `\ `. Obdobne pre zápis iných špeciálnych znakov sa použijú nasledujúce sekvencie. Sekvencia Význam \\ `\` - spätné lomítko \ ` ` - úvodzovky \$ `$`- znak doláru \t tabulátor \n nový riadok \r návrat vozíka Tab. 6 Sekvencie zápisu zvláštnych znakov v reťazcoch Tieto sekvencie je možné používať len v reťazcoch uzavretých do úvodzoviek. Reťazce uzavreté do apostrofov interpretujú celý svoj obsah len ako obyčajný text bez špeciálneho významu. Teda ak je potrebné sa odkazovať na premennú, potom len v reťazcoch uzavretých v úvodzovkách. $premenna = 123; echo Premená \$premenna má hodnotu $premenna ; echo Premená \$premenna má hodnotu $premenna ; Na výstupe dostaneme: Premenná $premenna má hodnotu hodnotu123 Premenná \$premenna má hodnotu hodnotu $premenna 76

77 Úvod do jazyka PHP S reťazcom uloženým v premennej je možné pracovať dvoma základnými spôsobmi: ako s celkom pri použití obyčajnej premennej. po znakoch pri použití štrukturovanej premnnej. Pozíciu (číslovanie od 0) požadovaného znaku v reťazci uvedieme do hranatých zátvoriek za meno reťazcovej premennej. $premenna = Premenna ; echo $premenna; echo $premenna[3]; Na výstupe dostaneme: Premenna m Okrem sekvencií (tiež nazývané aj escape sekvencie) uvedených v tabuľke môžeme znak zapísať priamo jeho ASCII kódom. Kód môže byť číselne zadaný osmičkovo alebo šesťnástkovo. Ak je kód reprezentovaný v osmičkovej sústave číslom nnn potom jednoduchá sekvencia `\nnn` vypíše znak, ktorého kód v osmičkovej sústave je nnn. Analogicky je to so zápisom `\xnn`. echo \x41\302c ; // vypíše ABC Zložité (štruktúrované) údajové typy jazyka PHP Polia Polia patria k najzákladnejším štrukturovaným údajovým typom. Z fundamentálneho hľadiska si uveďme základný rozdiel medzi jednoduchým (skalárnym) typom a zložitým (štruktúrovaným) typom. Pokiaľ meníme hodnotu neštruktúrovaného objektu (premennej), stačí na jeho jednoznačnú identifikáciu uviesť identifikátor premennej, ktorý jej bol pridelený. U štruktúrovaných objektov (premenných) je identifikátor odkazom na celý objekt a preto potrebujeme mechanizmus, na určenie konkrétneho prvku zo štruktúry, ktorého sa zmena týka. U polí sú zvyčajne všetky prvky rovnakého typu (a zvyčajne majú aj ten istý význam). Na jednoznačnú identifikáciu prvku poľa je dostatočné uviesť jeho poradové číslo (index) spolu s menom premennej, v ktorej je celé pole uložené. Na označenie indexu sa zvyčajne používajú hranaté zátvorky " [" a "]". Príklad: Majme pole znakov uložené v premennej Teleso, Na prvý znak telesa sa odvoláme konštrukciou Teleso[l], na desiaty Teleso[10] atď, V prípade viacrozmerných polí sa uvádzajú indexy podľa počtu rozmerov (napr, druhý riadok a siedmy stĺpec objektu tabul'ky označíme Tabulka[2][7]) 77

78 Informačné technológie Poslednou otázkou spojenou s údajovými objektmi je spôsob ich reprezentácie v operačnej pamäti počítača. Tu je prijatá zásada, že pre každý údajový objekt sa vymedzuje súvislá oblasť pamäte, bez ohľadu na to, či ide o neštruktúrovaný, alebo štruktúrovaný údajový objekt. U štruktúrovaných objektov sa jednotlivé prvky objektu ukladajú v pamäti v takom poradí, v akom boli deklarované. Jednotlivé prvky však nemusia vždy nadväzovať v pamäti tesne jeden na druhý z dôvodu požiadavky zarovnania niektorých objektov na určitú hranicu. Napr. celé čísla sú zvyčajne zarovnávané na hranicu slova. Ak v zázname pred celým číslom je špecifikovaný prvok o veľkosti jedného bajtu, potom zvyčajne zvyšok medzi týmto bajtom a najbližšou hranicou slova zostane nevyužitý. Podľa toho ako sa definuje index rozoznávame aj neasociatívne a asociatívne polia. Podľa toho, či sú prvky poľa rovnakého typy (najčastejší prípad) alebo rôzneho typu, hovoríme o homogénnom alebo nehomogénnom poli. V prípade, že sa index použije tak, ako bolo uvedené vyššie ide o neasociatívne (aritmetické) pole. V nasledujúcom vidíme príklad homogénneho neasociatívneho poľa teleso. $teleso[0] = Slniečko ; $teleso[1] = Mesiačik ; $teleso[2] = Hviezdička ; Teraz máme k dispozícii pole $teleso, ktoré obsahuje tri prvky. Jednotlivé prvky poľa môžu byť ľubovolného typu (nehomogénne neasociatívne). PHP tento spôsob podporuje, takže nasledujúci skript nie je žiadnym problémom: $teleso[0] = Slniečko ; $teleso[1] = 8542; $teleso[2] = veľké ; V PHP môžeme ako index poľa používať aj znakové reťazce. Potom získame tzv. asociatívne pole. Tento spôsob sa s veľkou výhodou používa v PHP práve pre narábanie s tabuľkou a jednotlivými stĺpcami databáz. $teleso[ meno ] = Slniečko ; $teleso[ svietivost ] = 8542; $teleso[ velkost ] = veľké ; Pre úplnosť poznamenajme, že prvok poľa $teleso[0] a $teleso[ meno ] napriek tomu, že majú rovnaký obsah aj význam nie sú tie isté premenné, aj v pamäti zaberajú dve rôzne pozície Inicializácia poľa Základným spôsobom inicializácie poľa je priradenie hodnoty jednotlivým prvkom poľa. Existujú však aj pohodlnejšie spôsoby. Pokiaľ u poľa použijeme prázdny index, hodnota sa automaticky uloží na miesto prvého voľného indexu. 78

79 Úvod do jazyka PHP Indexy pritom začínajú od nuly. Nasledujúci skript je teda ekvivalentný vyššie uvedenému príkladu homogénneho neasociatívneho poľa: $teleso[] = Slniečko ; $teleso[] = Mesiačik ; $teleso[] = Hviezdička ; Inicializáciu poľa je možné vykonať ešte úspornejším a pohodlnejším zápisom. Pre tento účel sa používa špeciálny príkaz Array: $teleso = Array( Slniečko, Mesiačik, Hviezdička ); V prípade potreby inicializácie poľa od iného ako implicitného indexu 0, použije sa modifikovaný príkaz Array: $velkost = Array(1=> malá, stredná, veľká ); Teraz bude mať prvý prvok poľa ( malá ) index 1. Dopadne to teda rovnako, ako keby sme napísali: $velkost[1] = malá ; $velkost[2] = stredná ; $velkost[3] = veľká ; V podstate záleží len na programátorovi, ku ktorému spôsobu sa prikloní. Avšak pokiaľ inicializujeme pole pomocou Array, môžeme index priradiť zvlášť každej hodnote. Operátor => môžeme použiť u ľubovoľného prvku poľa. Najčastejšie sa však použije u prvého prvku alebo u všetkých prvkov. Pokiaľ chceme vytvoriť asociatívne pole pre prevod anglických názvov nebeských telies na slovenské je možná nasledujúca konštrukcia: $teleso = Array( Sun => Slniečko, Moon => Mesiačik, Star => Hviezdička ); potom príkaz, ktorý vypíše slovenský názov slniečka vyzerá nasledovne: echo $teleso[ Sun ]; Funkcie pre prácu s poľom PHP disponuje pre prácu s poľom množstvom funkcií. Pre každé pole v PHP existuje ukazovateľ, ktorý ukazuje na niektorý prvok poľa, nezávisle na tom či používame asociatívne alebo neasociatívne pole resp. index nezačínajúci od 0. Teraz si v krátkosti uvedieme len asi najčastejšie používané z nich. Count(<<pole>>) - zistenie počtu prvkov poľa. Reset(<<pole>>) - presunutie ukazovateľa na prvý prvok poľa. 79

80 Informačné technológie Current(<<pole>>) - vracia hodnotu prvku poľa, na ktorý ukazuje ukazovateľ. Next(<<pole>>) podobne ako Current ale najprv sa ukazovateľ presunie na ďalší prvok poľa a až potom sa vráti hodnota prvku poľa. Key(<<pole>>) - vracia index prvku poľa, na ktorý ukazuje ukazovateľ. list(<<zoznam_premennych>>) - slúži k načítaniu prvkov poľa do premenných. Funkcia môže mať ľubovoľný počet parametrov. Majme napr. pole $x, ktoré má tri prvky. Tieto prvky chceme uložiť do premenných $p1, $p2, $p3, potom použijeme: list($p1, $p2, $p3) = $x; Pokiaľ nás zaujímajú len určité prvky, môžeme niektoré parametre, ktoré predstavujú nezaujímavé prvky, vynechať. Nakoniec si uvedieme príklad, ktorý vypíše obsah názvov celého poľa nebeských telies teleso(). Reset($teleso); while(current($teleso)): echo č..key($teleso).. názov:.current($teleso). \n ; Next($teleso); endwhile; Viacrozmerné polia Ako už bolo uvedené v kapitole môžeme v PHP používať aj viacrozmerné polia. Pre každý rozmer stačí do hranatých zátvoriek pridať ďalší index. Napr. dvojrozmerné polia sa často používajú pre uchovanie rôznych tabuliek a matíc. Dvojrozmerné pole sa pritom správa ako jednorozmerné pole, ktorého prvky sú pole. Tieto polia môžu mať dokonca rôzny počet prvkov. Zápis $Tabulka[2] teda vracia pole, ktoré obsahuje všetky prvky druhého riadku tejto tabuľky. Pri inicializácii viacrozmerného poľa je možné opäť inicializovať každý prvok zvlášť alebo použiť konštrukciu s vnorenými príkazmi Array. Napr. pre maticu 3x3 to môže byť nasledovné: $matica = Array(Array(11, 12, 13); Array(21, 22, 23); Array(31, 32, 33)); 80

81 Úvod do jazyka PHP Výrazy v jazyku PHP V princípe je možné povedať, že výraz je v podstate čokoľvek, čo má určitú hodnotu. Najjednoduchším výrazom je teda konštanta či premenná. Výrazom je aj volanie funkcie. Je však nutné povedať, že v PHP nemusia byť hodnotou výrazu len čísla. Výraz môže mať ľubovoľný typ, ktorý podporuje PHP. Predpokladajme nasledujúce priradenie $x = 5.Výrazom je v tomto prípade číslo 5. Výraz je však aj $x, ktorého hodnota je po priradení takisto 5. V ľavej časti priradenia môže byť len premenná. Priradenie má teda obyčajne nasledujúci všeobecný tvar: <premenná> = <výraz> V PHP je celé priradenie chápané ako výraz. Jeho hodnota je zhodná s hodnotou výrazu v prvej časti priradenia. Priradenia sú vyhodnocované sprava doľava. Dá sa to využiť v mnohých prípadoch. Pokiaľ chceme vynulovať premenné $x a $y, môžeme použiť nasledujúce ekvivalentné konštrukcie: $x = 0; $y = 0; alebo $x = 0; $y = $x; alebo $b = ($a = 0); alebo $b = $a = 0; Okrem uvedených elementárnych výrazov je v PHP možnosť samozrejme pracovať aj so zložitejšími výrazmi. V takom prípade sa používajú operátory Operátory v jazyku PHP Operátory v PHP rozdeľujeme počtu operandov na: unárne viažu sa s jedným operandom binárne viažu sa s dvoma operandami ternárne viažu sa s troma oprandami Operátory ďalej delíme podľa druhu operácie, ktorú definujú, na: priraďovacie, aritmetické, relačné, logické, bitové, operátor spájania reťazcov a operátor podmieneného výrazu. Z pohľadu výrazu, v ktorom sa príslušné operátory použijú, sa druh výrazu určuje podľa toho, ktorá operácia sa pri vyhodnocovaní výrazu vykoná ako posledná. Okrem toho sa u operátorov definuje ich vzájomná priorita a asociatívnosť t.j. spôsob združovania operandov viažúcich sa k operátoru Priraďovacie a aritmetické operátory Priraďovacie a aritmetické operátory sú základnými operátormi, ktoré jazyk PHP poskytuje. Z hľadiska predchádzajúcej kapitoly máme k dispozícií základný priraďovací operátor = (= sa tiež nazýva aj priraďovací príkaz). U aritmetických operátorov sú štandardne k dispozícii operátory pre sčítanie (`+`), odčítanie (`-`), násobenie (` `) a delenie (`/`). Pritom operátory pre násobenie a delenie majú väčšiu prioritu než sčítanie a odčítanie. Prioritu je možné meniť použitím zátvoriek: 81

82 Informačné technológie echo 5+6 7; // výsledok 47 echo (5+6) 7; // výsledok 77 V nasledujúcej tabuľke sú uvedené aritmetické operátory, ktoré PHP podporuje. Asociativita všetkých okrem unárneho mínus je zľava doprava. Operátor Použitie Popis + $x = 10+2 sčítanie (príklad výsledok 12) - $x = -10 unárne mínus (príklad výsledok -10) - $x = 10-2 odčítanie (príklad výsledok 8) * $x = 10*2 násobenie (príklad výsledok 20) / $x = 10/2 delenie (príklad výsledok 5) % $x = 10%3 zvyšok po delení (príklad výsledok 1) += $x += <výraz> ekvivalent $x = $x + <výraz> -= $x += <výraz> ekvivalent $x = $x - <výraz> *= $x += <výraz> ekvivalent $x = $x * <výraz> /= $x += <výraz> ekvivalent $x = $x / <výraz> %= $x %= <výraz> ekvivalent $x = $x % <výraz> ++ $x++ alebo ++$x inkrementácia o 1 -- $x-- alebo --$x dekrementácia o 1 Tab. 7 Aritmetické operátory Operátory inkrementácie a dekrementácie môžeme písať, ako je vidno v tabuľke pred i za premennú. Ich správanie je však do istej miery odlišné všetko súvisí s tým, že i zápisy ++$x a $x++ sú výrazy. Prvý výraz pracuje tak, že zvýši obsah premennej $x o jedna a takto získanú hodnotu vráti ako svoj výsledok. Naproti tomu hodnota výrazu $x++ je zhodná s hodnotou premennej $x. Po vrátení tejto hodnoty sa premenná $x zvýši o jeden. Výrazu ++$x sa hovorí preinkrementácia, pretože je pred vrátením hodnoty výrazu vykonaná inkrementácia premennej. Výrazu $x++ sa hovorí postinkrementácia, pretože je najprv vrátená hodnota a až potom je zvýšený obsah premennej. Podobne všetko funguje aj pre dekrementáciu Relačné a logické operátory Jedným z najviac používaných výrazov sú logické výrazy, ktorých výsledok je pravdivý (pravda, true) alebo nepravdivý (nepravda, false). Takéto výrazy sa používajú ako podmienka v cykloch či podmienených príkazoch. Pokiaľ je hodnota nejakého výrazu nenulová, považuje sa tento výraz za pravdivý (hodnota true). Pokiaľ je hodnota výrazu nulová, považuje sa výraz za nepravdivý (hodnota false). Na tomto mieste je potrebné upozorniť, že na rozdiel od iných jazykov sú záporné čísla v PHP považované za pravdivé výrazy. Pokiaľ v roli logického výrazu 82

83 83 Úvod do jazyka PHP použijeme reťazec, považuje sa za nepravdivý, pokiaľ je prázdny alebo ide o reťazec 0. Ostatné reťazce sú považované za pravdivé výrazy. Pokiaľ použijeme nejaký zložitejší typ pole alebo objekt, bude chápaný ako true v prípade, že nie je prázdny. Pre ľahšiu prácu máme v PHP definované dve konštanty true a false. true zodpovedá pravdivej hodnote a je reprezentované ako celé číslo 1. Na rozdiel od toho false zodpovedá nepravde a ide o prázdny reťazec. Typickými operátormi, ktoré sa používajú pre získanie logického výsledku, sú relačné operátory. Relačné operátory slúžia na porovnávanie hodnôt dvoch výrazov (aj premenných). Asociativita všetkých okrem negácie je zľava do prava. Operátor Použitie Popis == $x==$y rovnosť : $x sa rovná $y?!= alebo <> $x!=$y nerovnosť: $x sa nerovná $y? < $x<$y je menší : $x je menšie ako $y? > $x>$y je väčší : $x je väčšie $y? <= $x<=$y menší rovný : $x je menšie alebo rovné $y? >= $x>=$y väčší rovný : $x je väčšie alebo rovné $y? && alebo AND $x&&$y logický súčin: platí $x a zároveň $y? alebo OR $x $y logický súčet: platí $x alebo $y? XOR $x XOR $y exkluzívny OR, pravdivý ak práve jedno $x alebo $y je pravdivé!!$x unárny operátor negácie Tab. 8 Relačné a logické operátory Bitové operátory Vnútorná reprezentácia objektov v počítači je kódovaná binárnym (dvojkovým) kódom. Pre prácu s jednotlivými bitmi (dvojkovými číslami) PHP ponúka niekoľko operátorov. PHP pracuje s číslami veľkosti 32 bitov. Základné bitové operátory vychádzajú s funkcií Boolovej algebry a vyjadrujú nasledujúce funkcie: AND (logický súčin), OR (logický súčet), XOR (exkluzívny log. súčet - ekvivalencia) a NOT (negácia). V tabuľke Tab. 9 sa nachádzajú pravdivostné tabuľky týchto funkcií s dvomi premennými. V rámci PHP sú k dispozícii operátory, ktoré vykonávajú logické funkcie (okrem ekvivalencie, kde je k dispozícii nonekvivalencia výsledok je opačný ako XOR). Ďalšie operátory, ktoré manipulujú priamo s jednotlivými bitmi čísla, sú operácie pre bitový posun. Tieto operátory umožňujú posunúť bity v čísle o zadaný počet miest vľavo alebo vpravo. Pre posun doľava slúži operátor `<<` a pre posun doprava `>>`. Pri posune sa automaticky na okraj čísla doplňujú nuly, podľa toho na akú stranu s číslom posúvame. Počet miest k posunutiu môže byť ľubovoľný výraz, ktorý sa dá konvertovať na celé číslo. Vzhľadom k tomu, že celé čísla sú

84 Informačné technológie v PHP 32-bitové, nemá cenu vykonávať posun o viac než 31 miest. Navyše PHP pracuje s celými číslami v rozsahu od do a tak najvyšší bit čísla nesie informáciu o znamienku (je nastavený na jedničku, pokiaľ je číslo záporné). Všetky, okrem negácie, sú binárne operátory. Negácia je unárny operátor. AND OR A B Y=A. B A B Y=A + B XOR NOT A B Y=A B A Y=Ā Tab. 9 Pravdivostné tabuľky logických funkcií AND, OR, XOR a NOT dvoch premenných Operátor Použitie Popis & $z = $x & $y logický súčin (AND) $x a $y $z = $x $y logický súčet (OR) $x a $y ^ $z = $x ^ $y nonekvivalencia $x a $y ~ $z = ~$x logická negácia (NOT) $x &= $x &= $y analógia zápisu $x=$x&$y = $x = $y analógia zápisu $x=$x $y ^= $x ^= $y analógia zápisu $x=$x^$y << $x << $y posun $x o $y bitov doľava >> $x >> $y posun $x o $y bitov doprava <<= $x <<= $y analógia zápisu $x=$x<<$y >>= $x >>= $y analógia zápisu $x=$x>>$y Tab. 10 Logické operátory V PHP máme k dispozícii funkcie BinDec() a DecBin(), ktoré konvertujú čísla medzi dvojkovou (binárnou) a desiatkovou sústavou. Na záver malý príklad: echo DecBin(BinDec( ) & BinDec( )); 84

85 Úvod do jazyka PHP Operátor spájania reťazcov PHP obsahuje špeciálny operátor na spájanie reťazcov a to `.`. Funguje tak, že svoje operandy prevedie najprv na znakové reťazce a potom ich spojí do jedného reťazca. Na sprehľadnenie zápisu skriptu je možné okolo opertora zapísať ľubovoľný počet medzier. Pokiaľ potrebujeme k nejakej premennej pripojiť reťazec, je možné použiť operátor `.=`. Na nasledujúcich riadkoch je niekoľko príkladov: $c = 3; $x = Výsledok ; $x.= operácie je ; // ekvivalent zápisu $x = $x. operácie je ; echo $x. ($c+2). hodnôt ; // vypíše: Výsledok operácie je 5 hodnôt Podmienený operátor Tento operátor výrazne skracuje jazykové konštrukcie typu IF-ELSE. Tento operátor je jediným ternárnym operátorom v jazyku PHP. Jeho syntax je nasledovná: <výraz1>? <výraz2> : <výraz3> Platí, že ak je <výraz1> pravdivý, potom je výsledkom <výraz2> inak <výraz3>. Nasledujúci príklad, kde do premennej $y sa vlastne uloží absolútna hodnota $x, ukazuje použitie tohto operátora: $y = $x<0? -$x : $x; Priorita operátorov Ako už bolo uvedené v kapitole 4.6.9, sa u operátorov definuje aj ich vzájomná priorita napr. násobenie má prednosť pred sčítaním a teda operátor sčítania `+` má nižšiu prioritu než násobenia `*`. V PHP má každý operátor definovanú svoju prioritu, takže je vždy jednoznačne určené, ktorá operácia sa vykoná skôr. Pokiaľ sa zídu operátory s rovnakou prioritou, vykonávajú sa postupne zľava doprava. Pokiaľ sa jedná o unárne operátory a operátor indexu poľa je u nich vyhodnocovanie sprava doľava. Pokiaľ nám z nejakého dôvodu priority nevyhovujú, môžeme ich zmeniť pomocou zátvoriek. Zátvorky môžeme použiť i v prípadoch, kedy si nie sme istí, ktorí operátor má vyššiu prioritu. Prehľad priorít jednotlivých operátorov ukazuje nasledujúci obrázok. 85

86 Informačné technológie nárast priority operátory ` OR XOR AND = += -= = /=.= %= &= = ^= >>= <<=?: && ^ & ==!= <> < <= >= > << >> + -. / %! [index poľa] Obr. 21 Priority operátorov Vidíme, že napr. index poľa má najvyššiu prioritu. Pokiaľ teda napíšeme ++$a[0], PHP vie, že chceme zvýšiť prvý prvok poľa $a, a nie zvýšiť premennú $a a potom sa pozerať do nejakého poľa Základné príkazy jazyka PHP Tak ako každý moderný jazyk aj PHP obsahuje dva typy príkazov: neštruktúrované a štruktúrované. V nasledujúcich kapitolách v krátkosti pohovoríme o problematike príkazov v PHP a potom sa budeme najzákladnejším venovať podrobnejšie Neštruktúrované príkazy Výrazový príkaz. Ľubovoľný výraz jazyka PHP môže byť použitý vo forme príkazu, ak zaň dodáme bodkočiarku. Takémuto príkazu hovoríme výrazový príkaz. <ľubovoľný výraz jazyka PHP>; Z pohľadu sémantického vykonanie príkazu spočíva vo vyčíslení výrazu. Vyčíslený výraz nadobudne vyčíslenú hodnotu a táto následne zanikne (tzv. zánik hodnoty). I keď hodnota, ktorú nadobudne výraz ako celok zaniká, je 86

87 Úvod do jazyka PHP potrebné si uvedomiť, že v priraďovacích výrazoch a výrazoch autoinkrementačných a autodekrementačných sa vyčíslená hodnota uchováva v zodpovedajúcich premenných, ako dôsledok vyčíslenia výrazu (alebo jeho časti). Zložený príkaz (nazývaný aj blok) pozostáva z postupností definícií premenných (objektov) a príkazov, uzatvorených v zložených zátvorkách '{' a '}'. V zloženom príkaze ani definície ani príkazy nie sú povinné. { [<definícia lokálnych premenných>] [<ľubovoľné prikazy jazyka PHP>] } Po sémantickej stránke pokiaľ sú uvedené nejaké definície premenných, tieto premenné budú existovať len do okamihu ukončenia zloženého príkazu. Pokiaľ sa ich mená budú zhodovať s menami iných lokálnych alebo globálnych premenných (objektov), až do ukončenia zloženého príkazu "vonkajšie" premenné nebudú viditeľné. Na mieste príkazov sa môžu vyskytnúť ľubovoľné príkazy jazyka PHP, vrátane ďalších zložených príkazov. Zložený príkaz je považovaný za jeden príkaz a preto sa často používa v štruktúrovaných príkazoch. Príkaz continue slúži na okamžité ukončenie aktuálnej iterácie tela cyklu (o cykle je hovorené v nasledujúcej kapitole). Príkazy uvedené za príkazom continue sa už nevykonajú. V logických cykloch sa pokračuje testom podmienky, v cykle aritmetickom sa pokračuje výrazom vyraz3 (aktualizácia, pozri Aritmetické cykly v nasledujúcej kapitole). Príkaz continue teda okamžite preskočí príkazy v ostávajúcej časti tela cyklu, začne vykonávať ďalšiu iteráciu a pred vykonávaním iterácie sú testované podmienky pre vykonávanie cyklu. Použitie si ukážeme na jednoduchom príklade. Dajme tomu, že v poli $telesa máme uložený zoznam nebeských telies. Každý prvok poľa obsahuje asociatívne pole s údajmi, ako je meno, svietivosť a veľkosť. Našou úlohou bude vypísať mená tých nebeských telies, ktoré majú strednú veľkosť a svietivosť=500. for ($i=0; $i<count($telesa); $i++): if ($telesa[$i][ veľkosť ]!= stredná ) continue; if ($telesa[$i][ svietivosť ]!= 500) continue; echo $telesa[$i][ meno ]; endfor; Podobne ako pri nasledujúcom príkaze break aj pri continue môžeme zadať počet cyklov, ktorých telá sa majú preskočiť. 87

88 Informačné technológie Príkaz break slúži na okamžité ukončenie príkazu ľubovoľného cyklu alebo vetvy v prepínači switch. Príkazy uvedené za príkazom break sa už nevykonajú a nevykonajú sa ani ďalšie iterácie príkazu cyklu. V nasledujúcom príklade sa kopírujú znaky z reťazca $vstup do reťazca $výstup. Zo vstupného reťazca však znaky kopírujeme len do tej doby, ako narazíme na znak pre koniec riadku (\n). for ($i=0;$i<strlen($vstup);$i++) { $výstup.= $vstup[$i]; if ($vstup[$i]== \n ) break; } V spojení s cyklom do-while môžeme break výhodne používať pre písanie skriptov, ktoré určitú činnosť môžu vykonať len pri splnení väčšieho počtu vstupných podmienok. Všetko si ukážeme na malej ukážke. Dajme tomu, že chceme vypísať údaje z nejakej tabuľky uloženej v databáze (ako základ sa použije skript z kapitoly 4.5). Najprv sa musíme pripojiť k databáze, potom vyvolať otázku. Pri všetkých týchto činnostiach môže dôjsť k chybe, ktorú by sme mali ošetriť. Pomerne elegantne to môžeme vyriešiť nasledujúcim skriptom: do { $spojenie = mysql_connect("localhost"); if (!$spojenie) break; $otazka = "SELECT * FROM telesa WHERE svietivost > ".$Svietivost; $vysledok = mysql_db_query("nebesa", $otazka, $spojenie); if (!$vysledok) break;... spracovanie získaných údajov... } while (false); mysql_close($spojenie); Za príkazom break môžeme uviesť číslo, ktoré udáva počet cyklov, ktoré budú ukončené. To využijeme v prípadoch, kedy máme do seba vnorených viac cyklov. Nasledujúci skript hľadá dve čísla z intervalu (0, 20>, ktorých vynásobením získame číslo 234. for ($i=0;$i<20;$i++) for ($j=0;$j<20;$j++) if ($i $j == 234) break 2; echo $i, $j ; 88

89 Úvod do jazyka PHP Pomocou príkazu break 2 sme ukončili obidva cykly naraz ihneď po nájdení prvých dvoch čísel, ktoré vyhovujú zadanej podmienke. Na záver ešte poznamenajme, že nemá zmysel, aby sa príkazy break a continue vyskytovali v texte programu samostatne. Vždy by sa mali vyskytovať v tele príkazu cyklu. V opačnom prípade je text programu za týmito príkazmi nedosiahnuteľný. Príkaz return podobne ako break a continue slúži na odovzdanie riadenia z práve vykonávanej časti programu. Avšak tento príkaz je však spojený s riadením nie jednotlivých štruktúr v programoch, ale celých podprogramov resp. funkcií. Tento príkaz slúži na vrátenie riadenia z podprogramu resp. funkcie do volajúceho programu Štruktúrované príkazy Štruktúrované príkazy definujú tok riadenia skriptu (programu. Z hľadiska algoritmizácie sa štruktúrované príkazy sa delia do dvoch základných kategórií: vetvenia cykly Vetvenia Jednoduché vetvenie je základným typom vetvenia a obsahuje jednoduchú podmienku. if (logicky_vyraz) prikaz Sémanticky ak je logický výraz logicky_vyraz pravdivý, vykoná sa príkaz prikaz. Ak je logický výraz logicky_vyraz nepravdivý, príkaz prikaz sa preskočí. Na mieste výrazu logicky_vyraz môže byť uvedený ľubovoľný výraz jazyka PHP. Hodnota tohto výrazu bude interpretovaná ako logická hodnota (false -hodnota rovná nule, true - hodnota rôzna od nuly). Na mieste príkazu prikaz sa môže vyskytnúť ľubovoľný príkaz jazyka PHP, včítane zloženého alebo niektorého štruktúrovaného príkazu, nevynímajúc príkaz vetvenia a prázdny príkaz. Nasledujúci jednoduchý príklad uloží do premennej $podiel podiel premenných $x a $y. Podiel sa však uloží len v prípade, že $y nie je nulové. Delenie nulou by inak vyvolalo chybu: if ($y!=0) $podiel = $x/$y; Pokiaľ potrebujeme podmienečne vložiť dlhší HTML-kód je to možné pomocou PHP jednoducho urobiť: 89

90 Informačné technológie <? if ($vyhra = = 0) {?> <H1>Prehral si</h1> Skús hrať <A HREF= hra.php >znovu</a> <? }?> Ako vidíme, zápis nie je veľmi prehľadný a v zložitejších konštrukciách ľahko stratíme prehľad o tom, k čomu ktorá zložená zátvorka patrí. V týchto prípadoch sa hodí druhý možný syntax príkazu if: if (logicky_vyraz): príkaz1; príkaz2;... endif; Pri používaní if...endif nesmieme zabudnúť na dvojbodku, ktorá sa uvádza za podmienkou. Dvojcestné vetvenie je rozšírením jednoduchého vetvenia. if (logicky_vyraz) príkazl else príkaz2 Sémanticky ak je logický výraz logicky_vyraz pravdivý, vykoná sa príkazl. Ak je logický výraz logicky_vyraz nepravdivý, vykoná sa príkaz2. Tak ako pri jednoduchom vetvení na mieste príkazov prikazl a prikaz2 sa môže vyskytnúť ľubovoľný príkaz jazyka PHP, vrátane zloženého alebo niektorého štruktúrovaného príkazu, nevynímajúc príkaz vetvenia a prázdny príkaz. Tu je potrebné upozorniť na to, že osobitnú pozornosť je potrebné venovať vnáraniu príkazov vetvenia do iných príkazov vetvenia, kvôli jednoznačnosti vykonávania programu. Uveďme si jednoduchý príklad, ako rozšírenie príkladu pri príkaze if: if ($y!=0) { $podiel = $x/$y; echo $x/$y = $podiel ; } else { echo Nemožno deliť nulou. ; } Opäť máme k dispozícii alternatívnu syntax: 90

91 if (logicky_vyraz): prikaz11; prikaz12;... else: prikaz21; prikaz22;... endif; Úvod do jazyka PHP Dvojbodku v tomto prípade musíme uviesť aj za kľúčovým slovom else. Prepínač je možné v jazyku PHP realizovať dvoma spôsobmi : špeciálnou jazykovou konštrukciou (príkaz switch) switch(výraz) { case KonštVyraz_l: prikaz_11 [...prikaz_ln [break;]] case KonštVyraz_2: prikaz_22 [...prikaz_2n [break;]]... case KonštVyraz_m: prikaz_m1 [..._prikaz_mn [break;]] [default: prikaz_l [...prikaz_r] } Po sémantickej stránke sa vyčísli výraz uvedený v zátvorkách za kľúčovým slovom switch. Postupne sa vyčíslená hodnota výrazu porovnáva s konštantami (resp. vyčíslenými konštantnými výrazmi) uvedenými za kľúčovými slovami case. Ak sa hodnota výrazu rovná niektorej konštante, začnú sa vykonávať príkazy uvedené za touto konštantou až po prvý výskyt príkazu break. Príkaz break nemusí byť uvedený pre každý výskyt case. Ak sa hodnota výrazu nerovná žiadnej z uvedených konštánt, vykonajú sa príkazy uvedené v časti za kľúčovým slovom default. Ak táto časť nie je uvedená, príkaz switch je ukončený bez akejkoľvek činnosti. Nevýhodou uvedeného príkazu je skutočnosť, že umožňuje špecifikovať len konštantné hodnoty, pre ktoré sa majú vykonať príkazy. Pokiaľ potrebujeme, aby sa určité činnosti vykonali napr. pre určité intervaly hodnôt, je spravidla potrebné použiť konštrukciu pozostávajúcu z vnorených príkazov vetvenia tak, ako to bolo uvedené u dvojcestného vetvenia. switch ($svietivost) { case 100: case 50: echo Svietivosť 50 alebo 100 je malá. ; break; case 1000: echo Svietivosť 1000 je veľká. ; break; default: echo Takú svietivosť nepoznám. ; } 91

92 Informačné technológie K príkazu switch samozrejme existuje alternatívna syntax: switch (logicky_vyraz): case hodnota1: príkaz11; príkaz12;... break; case hodnota2: príkaz21; príkaz22;... break;... default: príkazm1; príkazm2;... endswitch; využitím príkazu vetvenia if-else if (interval1) prikaz1; elseif(interva12) prikaz2; elseif(interva13) prikaz3; else prikaz; //ekvivalent pre default Pokiaľ namiesto logických podmienok pre špecifikáciu intervalov uvedieme logické výrazy pre rovnosť, dostávame riešenie, ktoré je sémanticky (významovo) ekvivalentné príkazu switch. V určitom ohľade je dokonca univerzálnejšie, pretože v týchto výrazoch nie sme viazaní na uvádzanie konštánt, ale môžeme použiť aj premenné. Výhodou príkazu switch je optimálnejšia implementácia a tým rýchlejší skript. Na záver ešte veľmi jednoduchý príklad: if ($x<$y) echo x je menšie ako y ; elseif ($x==$y) echo x je rovné y ; else echo x je väčšie ako y ; Pokiaľ v jednej vetve potrebujeme previesť viac príkazov, opäť ich môžeme združovať pomocou zložených zátvoriek. 92

93 Cykly Z hľadiska algoritmizácie delíme cykly na: logické cykly prefixné logické cykly while(logicky_vyraz) prikaz; 93 Úvod do jazyka PHP Sémanticky sa vyhodnotí logicky_vyraz t.j. určí sa, či je pravdivý (true) alebo nepravdivý (false). Ak je vyhodnotený logicky_vyraz pravdivý, vykoná sa telo cyklu (príkaz) a cyklus sa vracia znovu na vyhodnotenie logického_vyrazu. Ak je vyhodnotený logicky_vyraz nepravdivý, vykonávanie logického prefixného cyklu bude ukončené. Na mieste príkazu môže byť uvedený ľubovoľný príkaz jazyka PHP, vrátane príkazov vetvenia, cyklov, zložený príkaz a taktiež aj prázdny príkaz. Charakteristickou vlastnosťou logického prefixného cyklu je to, že telo cyklu sa nemusí vykonať! V nasledujúcom si uvedieme jednoduchý príklad, ktorý vypočíta faktoriál zadaného čísla v premennej $x (premenné $i, $j sú pomocné, neošetrený 0!): $i = 1; $j = $x; while ($j>0) { $i *= $j--; } echo Faktoriál čísla $x je $i ; K dispozícii je aj alternatívna syntax: while logicky_vyraz): príkaz1; príkaz2;... endwhile; postfixné logické cykly do prikaz while(logicky_vyraz); Po významovej stránke na najprv vykoná telo cyklu (prikaz). Potom sa vyhodnotí logicky_vyraz, t.j. určí sa, či je pravdivý, alebo nepravdivý. Ak je vyhodnotený logicky_vyraz pravdivý, cyklus sa vracia znovu na vykonanie tela cyklu. Ak je vyhodnotený

94 Informačné technológie logicky_vyraz nepravdivý, vykonávanie logického postfixného cyklu bude ukončené. Tomuto typu cyklu sa hovorí aj cyklus s koncovou vetou. Obdobne ako pri logickom prefixnom cykle na mieste príkazu môže byť uvedený ľubovoľný prikaz jazyka PHP, vrátane príkazov vetvenia, cyklov, zložených prikazov a taktiež aj prázdny prikaz. Naproti prefixnému cyklu charakteristickou vlastnosťou logického postfixného cyklu je to, že telo cyklu sa musí vykonať aspoň raz. V nasledujúcom si uvedieme ten istý jednoduchý príklad výpočtu faktoriálu avšak s použitím do-while. $i = 1; $j = $x; do { $i *= $j--; } while ($j>0); echo Faktoriál čísla $x je $i ; K príkazu do-while neexistuje jeho ekvivalent s alternatívnou syntaxou. aritmetické cykly slúžia na vytváranie cyklov so známym počtom opakovaní for([vyrazl]; [vyraz2]; [vyraz3]) prikaz; Sémantiku aritmetického cyklu je vhodné vyjadriť pomocou logického prefixného cyklu: vyrazl; while(vyraz2) {prikaz vyraz3;} Z uvedeného teda vyplýva, že raz (a len raz) sa vykoná vyrazl (krok inicializácie). Pokiaľ je vyraz2 pravdivý, vykonáva sa telo cyklu (prikaz). Po ukončení každej iterácie cyklu sa vykoná vyraz3 (vyraz3 sa stáva súčasťou tela cyklu.). A opäť príklad s faktoriálom, ale tentoraz pomocou aritmetického cyklu: $i = 1; for ($j = $x; $j>0; $j--) $i *= $j; echo Faktoriál čísla $x je $i ; K dispozícii máme aj príkaz for s alternatívnou syntaxou: 94

95 Úvod do jazyka PHP for (výraz1;výraz2;výraz3): príkaz1; príkaz2;... endfor; Špecialitou príkazu for v jazyku PHP je možnosť vynechania ľubovoľného z výrazov, ktoré riadia jeho činnosť. Keď pritom vynecháme druhý výraz podmienku pre ukončenie cyklu, považuje sa výraz za pravdivý a získame nekonečnú slučku. Na prvý pohľad táto vlastnosť vyzerá nezmyselne avšak v niektorých prípadoch sa to môže zísť. Konieckoncov vykonávanie cyklu sa dá prerušiť príkazom break. Výrazy v príkaze for v jazyku PHP majú ešte jednu neštandardnú vlastnosť. Vo výrazoch môžeme používať čiarku. Tá slúži na oddelenie výrazov, ktorých môžeme použiť i viac. Pokiaľ teda chceme na začiatku vykonávania cyklu zinicializovať dve premenné, potom predchádzajúci príklad môžeme napísať aj: for ($i=1, $j=$x; $j>0; $j--) $i *= $j; echo Faktoriál čísla $x je $i ; Pokiaľ použijeme čiarku v druhom výraze pre ukončenie tela cyklu, ako podmienka pre ukončenie cyklu sa použije posledný výraz Definovanie funkcií v jazyku PHP Pri analýze programov (skriptov) zistíme, že v niektorých miestach toho istého programu je viackrát použitá tá istá postupnosť operácií (príkazov). Zvyčajne sú tieto operácie aplikované na rôzne údajové objekty, v ojedinelých prípadoch dokonca pracujú nad tými istými objektmi. Ak zapisujeme tie isté operácie v programe viackrát, je väčšia pravdepodobnosť vzniku chýb, spôsobených napr. nepozornosťou. Lokalizácia a oprava takýchto chýb nie je vždy triviálnou záležitosťou. Riešením uvedeného problému je špecifikácia postupnosti operácií na samostatnom mieste. Ak potom chceme niekde túto postupnosť použiť, len sa na ňu odvoláme. Takéto riešenie spravidla znižuje pamäťové nároky programu. Nevýhodou je však zvýšenie réžie programu (skriptu) na realizáciu "odvolávania sa" na miesto, kde je pôvodná postupnosť operácií uvedená. Ak analyzujeme väčšie množstvo programov, zistíme, že sú činnosti, ktoré sa vyskytujú takmer v každom z nich (napr. vstup údajov). Aj tu platí to, čo bolo uvedené v predošlom odstavci (opakovaný zápis spojený s chybami, chyby v postupnosti operácií, zvýšené pamäťové nároky). Riešenie je podobné, s tým rozdielom, že v predchádzajúcom prípade bolo potrebné opakujúci sa algoritmus špecifikovať niekde v programe. V tomto prípade algoritmus musi byť 95

96 Informačné technológie špecifikovaný mimo vytváraného programu (skriptu) tak, aby bol dostupný všetkým programom (skriptom), ktoré ho potrebujú použiť. Uvedené problémy sa riešia v PHP najmä pomocou funkcií. Funkcia je vlastne uzavretý podprogram, ktorý transformuje vstupné hodnoty na výstupné hodnoty. Tieto hodnoty môžu byť okamžite použité pre výpočet iných hodnôt. Definícia funkcie na úrovni zdrojového textu skriptu (programu) je tá časť zdrojového textu skriptu, ktorá popisuje funkciu z hľadiska jej vstupov a výstupov, t.j. rozhrania - interfejsu (hlavička funkcie), aj z hľadiska algoritmov a použitých údajových štruktúr (blok - telo funkcie). Každá funkcia použitá (volaná) v skripte musí mať v tomto programe práve jednu definíciu (vo forme zdrojového textu, relatívneho modulu alebo knižničného modulu). Definícia funkcie má nasledujúcu syntax: function meno (parameter1, parameter2,... ) // hlavička funkcie { príkazy; // telo funkcie } return hodnota; Pomocou parametrov funkcii odovzdávame hodnoty, ktoré má spracovať. Príkazom return funkcia vracia svoj výsledok. Pri jednoduchých funkciách môžeme parametre úplne vynechať, rovnako tak ako navracanie hodnoty napr.: function Logo() { echo * * * Technická univerzita Kosice * * * ; } Po definícii funkcie ju môžeme kedykoľvek vyvolať pomocou Logo(). Zátvorky za názvom funkcie musíme používať, i keď funkcia nepracuje so žiadnymi parametrami. Hlavná výhoda funkcií však spočíva práve v možnosti odovzdávať im parametre. Môžeme si tak definovať rôzne užitočné funkcie, ktoré nám PHP štandardne neponúka k dispozícii. V nasledujúcom príklade si nadefinujeme náš známy výpočet faktoriálu ako funkciu: function Faktorial($x) { if($x>0) for ($i=1; $x>0; $x--) $i *= $x; else $i = 1; return $i; } V definícii funkcie hovoríme, že funkcia Faktorial má jeden parameter. Jeho obsah je v tele funkcie prístupný pomocou premennej $x. Hodnota faktoriálu sa vráti pomocou príkazu return. Funkcia môže mať parametrov samozrejme 96

97 Úvod do jazyka PHP viac. Ako parameter môžeme funkcii odovzdávať všetky údajové typy, ktoré PHP podporuje čísla, reťazce ale i pole a objekty. Rovnaké údajové typy môže funkcia aj vracať. Okrem klasických funkcií umožňuje PHP aj rekurzívne volanie funkcie t.j. vo vnútri tela funkcie použije sa volanie jej samej. Pomocou rekurzie je možné pomerne stručne vyjadriť niektoré programy. Rekurzia však prináša i mnohé riziká. Pri prílišnej hĺbke volania funkcie môže dôjsť k pretečeniu zásobníka. Ako príklad si opäť uvedieme našu funkciu na výpočet faktoriálu: function Faktorial($x) { return $x==0? 1 : $x * Faktorial($x-1); } Zvláštnym typom volania funkcií v PHP je tzv. parametrické volanie. Toto je možné dosiahnuť pomocou príkazu eval. Ako parameter tomuto príkazu môžeme odovzdať ľubovoľný reťazec, kde obsah tohto reťazca je vykonaný tak, akoby sa jednalo o príkazy PHP. $MenoFunkcie = `Faktorial($x`; $Telo = `$x==0? 1 : $x * `; eval ( function $MenoFunkcie) { return $Telo $MenoFunkcie-1); } ); //definícia funkcie Faktorial echo Faktorial(6); Tento spôsob môže nájsť uplatnenie v prípadoch, kde je potrebné napr. do databázy uložiť kód, ktorý sa má vykonať neskôr. Neustále musíme mať na pamäti, že ako parameter príkazu eval je potrebné zadať syntakticky správny kód Rozsah platnosti premenných V bežných skriptoch je premenná s rovnakým názvom stále tá istá premenná a reprezentuje jednu hodnotu. Pokiaľ však používame funkciu, situácia sa mení. Premenné, ktoré použijeme vo vnútri funkcie nemajú s ostatnými premennými nič spoločné dokonca i keď sa rovnako volajú. Dôvod pre toto správanie PHP je celkom zrejmý programátor nemôže omylom vo funkcii zmeniť obsah nejakej globálnej premennej. V PHP nie sú na rozdiel od iných jazykov, ako C a Pascal, automaticky k dispozícii globálne premenné vo vnútri funkcií. Občas však potrebujeme vo funkcii pracovať s hodnotou globálnej premennej. V týchto prípadoch môžeme na začiatku funkcie určiť, ktoré globálne premenné môže funkcia používať. Globálne premenné sa funkcii sprístupnia pomocou príkazu global, za ktorý napíšeme čiarkami oddelený zoznam premenných. Okrem použitia príkazu global máme ešte jednu možnosť. Je možné použiť asociatívne pole $GLOBALS, v ktorom sú prístupné všetky globálne premenné. Ako index poľa použijeme názov premennej (bez znaku dolár ($)). Vo vnútri funkcie môžeme 97

98 Informačné technológie definovať i ďalšie funkcie. Neexistuje však spôsob, ako z týchto vnorených funkcií pristupovať k premenným funkcie, ktorá je o úroveň vyššie. Prístup si môžeme zaistiť iba ku globálnym premenným. V nasledujúcom príklade vidíme jednotlivé možnosti prístupu a platnosti premenných v jazyku PHP. V prvom stĺpci je použitie len interných premenných, v druhom použitie príkazu global a v treťom použitie asociatívneho poľa $GLOBALS. použitie interných premenných function Funkcia() { $x = 5; } $x = 7; Funkcia(); echo $x; použitie príkazu global function Funkcia() { global $x; $x = 5; } $x = 7; Funkcia(); echo $x; použitie poľa $GLOBALS function Funkcia() { $GLOBALS[ x ] = 5; } Poznámka: Tento skript vypíše číslo 7. Hodnota 5 je do premennej $x priraďovaná vo vnútri funkcie. Zmena premennej $x vo vnútri funkcie nijako neovplyvní hodnotu premennej $x použitej na vyššej úrovni programu. Poznámka: Upravená ukážka teraz vytlačí číslo 5. V tomto prípade je premenná $x vo vnútri funkcie totožná s globálnou premennou $x, a môže teda meniť hodnotu. Poznámka: ekvivalent predchádzajúceho príkladu $x = 7; Funkcia(); echo $x; Podobná záležitosť platí ak sú dve rovnaké premenné v rôznych súboroch resp. rôznych stránkach. Rozsah platnosti premenných je obmedzený len na daný súbor resp. stránku. Po odkliku a prechodu na novú stránku resp. na iný skript premnná zaniká. V prípade potreby prenosu údajov pri tejto príležitosti je potrebné použiť buď využiť preposlanie použitím URL (napr. príklad 9.4), vytvorením umelého formulára s prvkami hidden, použitím cookies, globálnych či session premenných alebo databázy. 98

99 99 Úvod do jazyka PHP Odovzdávanie parametrov Poslednou otázkou, ktorou sa budeme zaoberať u funkcií v PHP je spôsob, akým je možné odovzdať informácie do volanej funkcie. Rozlišujeme tri spôsoby: pomocou formálnych a skutočných parametrov pomocou globálnych premenných kombinácia oboch spôsobov Odovzdávanie informácii pomocou formálnych a skutočných parametrov spočíva vo využití preddefinovaného rozhrania. Vo funkcii sa formálne špecifikujú objekty, s ktorými sa v nej manipuluje. Pri aktivácii funkcie sa jej odovzdajú skutočné údajové objekty (resp. ich hodnoty), ktoré majú byť spracované. Na základe toho, či sa vo funkcii sprístupňuje objekt, alebo len jeho hodnota, hovoríme o odovzdávaní parametrov: hodnotou - sprístupňuje sa iba hodnota objektu, umiestnenie v pamäti nie je známe, z čoho vyplýva, že hodnotu objektu zmeniť nemôžeme. Platí to pre príklady, ktoré boli v značnej miere uvádzané doteraz. odkazom - sprístupňuje sa objekt, je známe jeho umiestnenie v pamäti, je možné zmeniť jeho hodnotu. V PHP môžeme písať funkcie, ktoré menia obsah premennej, ktorá je použitá ako parameter. Pri tomto spôsobe odovzdávania parametrov sa funkcii nepredáva hodnota premennej ako už bolo uvedené, ale priamo odkaz na ňu funkcia potom môže priamo meniť jej hodnotu, preto sa volá odovzdávanie odkazom. Funkcia, ktorej sa majú parametre odovzdávať odkazom, má rovnaký syntax ako ostatné funkcie. Iba v definícii parametrov použijeme znak `&` (unárny operátor adresy) pred tými parametrami, ktoré sa majú odovzdávať odkazom. Mierne upravíme funkciu Funkcia z predchádzajúceho príkladu. function Funkcia(&$x,$y) { $x = 15; $y = 17; } $x = 1; $y = 3; Funkcia($x,$y); echo $x, $y; Pre uvedenie funkcie Funkcia() bude v premennej $x uložená hodnota 15, pretože prvý parameter funkcie je odovzdávaný odkazom. Premennej $y ostane jej pôvodný obsah 3, pretože je do funkcie odovzdaná ako parameter odovzdávaný hodnotou. Parametre môžeme odovzdávať odkazom aj do funkcií, ktoré očakávajú iba parametre

100 Informačné technológie odovzdávané hodnotou. Pokiaľ pri volaní funkcie použijeme ako parameter premennú a pred jej meno umiestnime spomínaný unárny operátor `&`, bude premenná odovzdaná odkazom. Pokiaľ by sme v našej poslednej ukážke použili volanie funkcie Funkcia($x,&$y), bude obsah premennej $y po vykonaní funkcie 17, pretože v tomto prípade bolo $y odovzdané odkazom. Odovzdávanie informácii prostredníctvom globálnych premenných súvisi s už spomenutým faktom, že zapisovať do a čítať z globálnych premenných môže každá funkcia, ktorej boli sprístupnené (pozri predchádzajúci príklad). Iným problémom je odovzdávanie hodnoty premenných medzi viacerými stránkami resp. súbormi. Možnosti boli popísané v predchádzajúcej kapitole. Vhodnou voľbou riešenia tohto problému je použitie session premenných, ktorých podpora bola dodaná do PHP pre riešenie týchto problémov. Ak je potrebné nastaviť nejakú session premennú je potrebné na začiatku skriptu použiť funkciu session_start(); čím sa aktivuje asociatívne pole $_SESSION[]. Potom je možné session premennú nastaviť jednoduchým priraďovacím príkazom $_SESSION[ nazov_session_premennej ] = hodnota alebo výraz Čiže napríklad session premennej login priradíme reťazec admin $_SESSION[ login ] = admin ; V skripte v inom súbore potom postačí už len aktivovať session premenné danou funkciou a používať premennú $_SESSION[ login ]. Zrušenie a deaktivácia poľa $_SESSION[] je možné vykonať pomocou funkcie session_destroy(). Pole $_SESSION[] môže byť podľa potreby aj viacrozmerné. Kombinovaný spôsob prenáša časť parametrov pomocou mechanizmu formálnych a skutočných parametrov a zvyšné informácie sú vo funkcii sprístupnené prostredníctvom globálnych premenných Štandardné hodnoty parametrov Častokrát sa vyskytne v skriptoch, že sa funkcie vo väčšine prípadov volajú s rovnakými parametrami. Potom sa zdá zbytočné, aby sa do volania funkcie stále opisovali rovnaké parametre iba kvôli tomu, že občas je potrebné funkciu zavolať s inými parametrami. PHP tento problém elegantne rieši. V definícii funkcie môžeme určiť pre každý parameter štandardnú hodnotu, ktorá sa použije, pokiaľ pri volaní funkcie tento parameter nepoužijeme. Parametre, ktoré majú štandardnú hodnotu, musia byť v zozname parametrov funkcie uvedené vždy posledné. 100

101 Úvod do jazyka PHP V opačnom prípade by PHP nemohlo dosadiť štandardné hodnoty parametrov. Pokiaľ máme definovanú funkciu s n parametrami a pri volaní jej odovzdáma iba k parametrov, musí byť pre posledných n-k parametrov funkcie definovaná štandardná hodnota. Ako štandardnú hodnotu parametra funkcie môžeme použiť iba neštrukturované (skalárne) typy: integer, double a string. V nasledujúcom príklade uvedieme funkciu, ktorá vypočítava n-tú mocninu základu. function Umocni($zaklad, $exponent = 2) { $pom = $zaklad; for($i=1; $i<$exponent; $i++) $pom *= $zaklad; return $pom; } echo Umocni(10); //to isté ako Umocni(10,2) echo Umocni(10,3); Funkcia Umocni() slúži k počítaniu mocnín. Pretože najčastejšie potrebujeme spočítať druhú mocninu, je definícia funkcie napísaná tak, aby volanie funkcie s jedným parametrom automaticky spôsobilo výpočet druhej mocniny Statické premenné Statickej premennej sa hodnota priradí pri definícii funkcie a pri ďalších volaniach funkcie už nie je znovu inicializovaná. Statické premenné sa deklarujú pomocou príkazu static. V nasledujúcom príklade si ukážeme funkciu pracujúcu ako čítač. Pri každom zavolaní vráti hodnotu o jedno vyššiu ako pri minulom volaní. Počítanie začne od jedničky. Prvotný návrh funkcie môže vyzerať tak, ako je uvedené v príklade vľavo. Táto funkcia však pri každom svojom zavolaní vráti 1, pretože pri každom volaní funkcie je premenná $n, ktorá slúži ako čítač, vynulovaná. Pre úpravu tejto funkcie pre naše potreby s výhodou využijeme možnosť definovania statických premenných. Výsledok vidíme v príklade vpravo. function Citac() { $n = 0; $n++; return $n; } function Citac() { static $n = 0; $n++; return $n; } 101

102 Informačné technológie Niekoľko slov záverom Týmto sme ukončili cestu základmi jazyka PHP. Jeho možnosti sú omnoho väčšie, avšak pre naše potreby uvedený rozsah by mal postačovať. V nasledujúcej kapitole sa v krátkosti povenujeme problematike databázových systémov a jazyka SQL. V nasledujúcich kapitolách si potom ešte v krátkosti niečo povieme o procese tvorby softvérových aplikácií pre Internet a nakoniec bude uvedených niekoľko príkladov, samozrejme na báze PHP. 102

103 Databázové systémy 5 Databázové systémy Táto krátka kapitola by mala pomôcť v krátkosti si zopakovať základy databázových systémov a najmä jazyka SQL, ktorý budeme pri tvorbe aplikácií potrebovať. Nie je učebnicou tohto jazyka a preto obsahuje len veľmi skrátené popisy najzákladnejších príkazov. 5.1 Základná charakteristika databázových systémov Pod pojmom databáza rozumieme množinu dát, ktoré nejakým spôsobom vzájomne súvisia. Dáta uložené v databáze sú stále v zmysle ich štruktúry a zachytávajú stav modelovaného systému. Preto sa niekedy databáza definuje ako súbor stavových dát používaných v aplikačných úlohách v danom systéme riadenia. Na definovanie štruktúry databázy a manipuláciu s ňou slúži množina programov nazývaná Systém riadenia bázy dát (ďalej SRBD). Databáza spolu s SRBD a aplikáciami umožňujúcimi prístup k uloženým informáciám tvorí databázový systém. 5.2 Charakteristiky databázových prístupov Databázové prístupy je možné charakterizovať následovne: 1. Používateľ sa nestará o správu súborov, t.j. kde sú fyzicky uložené dáta, s ktorými pracuje. 2. Údaje sú definované len raz, a majú k nim prístup rôzny používatelia. 3. Databázový systém obsahuje aj popis databázy, uložený v systémovom katalógu. 4. Programy a údaje sú navzájom nezávislé. 5. Zdieľanie dát - v danom časovom okamihu má prístup k údajom viacero používateľov. 6. Spracovanie transakcií - pri viacnásobných súčasných požiadavkách o zmeny, majú tieto byť prevedené korektne. Databázový systém môže ale nemusí byť transakčný. 7. Implementácia riadenia redundancie (viacnásobnému výskytu tých istých informácií). 8. Obmedzenie neautorizovaného prístupu SRBD riadi, kto môže pristúpiť na databázu a aké činnosti na nej vykonávať. 9. Podmienky integrity SRBD obsahuje prostriedky pre zabezpečenie integritných podmienok. 10. Obnova a zotavenie databázy po chybách SRBD poskytuje možnosť, dostať databázu, pri výskyte nejakej chyby, do pôvodného stavu. 103

104 Informačné technológie 5.3 Kategórie ľudí pracujúcich s databázovým systémom 1. Databázový administrator správca databázy, autorizuje prístup ku databázam, disponuje prostriedkami pre koordináciu a monitorovanie použitia databázy. 2. Návrhári databázy poskytujú návrh dátového modelu 3. Koncoví používatelia pristupujú na informácie uložené v databáze : - naivní, - príležitostní, - znalí problematiky, - standing-alone vlastniaci vlastnú databázu 4. Aplikační programátori tvoria aplikácie umožňujúce prístup k uloženým informáciám 5.4 Relačný databázový model Relačná databáza je taká databáza, ktorú používateľ vníma ako sústavu v čase sa meniacich normalizovaných tabuliek s usporiadanými stĺpcami. Každá tabuľka reprezentuje určitý typ entity a každý riadok v tejto tabuľke (záznam), jeden výskyt daného typu entity. Stĺpce predstavujú jednotlivé modelované vlastnosti (atribúty) daného typu entity. Relačný databázový model (ďalej RDM) je tvorený sústavou tabuliek s následovnými vlastnosťami : 1. Každá tabuľka má v RDM svoj jednoznačný názov, ktorý ju v tejto databáze identifikuje. 2. Každá tabuľka obsahuje iba záznamy rovnakej štruktúry. 3. Každý stĺpec tabuľky má svoj názov meno atribútu, ktorým je identifikovaný vrdm. 4. Na poradí stĺpcov v tabuľke nezáleží. 5. Každý stĺpec obsahuje hodnoty toho istého atribútu. 6. Každý záznam v tabuľke odpovedá jednému výskytu entity daného typu. 7. Každý záznam je jednoznačne indentifikovateľný primárnym kľúčom. 8. Na poradí záznamov nezáleží. 9. Všetky hodnoty v danom zázname sú jednoznačne a plne závislé na primárnom kľúči (požiadavka pre normalizáciu). 10. Všetky hodnoty v danom zázname môžu byť iba atomickými hodnotami z domény príslušného atribútu. Hodnoty kľúčových atribútov nesmú byť nedefinované (NULL). 104

105 Databázové systémy 5.5 Kľúče a integrita RDM Primárne kľúče Primárny kľúč slúži k jednoznačnej identifikácii záznamu tabuľky. Podľa situácie môže byť primárny kľúč tvorený jedným, alebo viacerými atribútmi. Hovoríme o jednoduchom, alebo zloženom kľúči. Kľúč musí spĺňať následovné požiadavky : 1. jedinečnosť, t.j. nesmú sa v tabuľke vyskytovať dve, alebo viac rovnakých hodnôt kľúča, 2. minimalizácia, t.j. v prípade, že kľúč je vytvorený zložením viacerých atribútov, žiaden z týchto atribútov nesmie byť vypustený, ak by tým došlo k porušeniu zásady o jedinečnosti kľúča. Pri rozhodovaní o voľbe primárneho kľúča zvažujeme niekedy rôzne atribúty, ktoré by mohli plniť túto funkciu. Hovoríme o tzv. možných kľúčoch (candidate keys). Je to v situácii, keď existuje viac identifikačných hľadísk. Záleží potom na sémantike kľúča vo vzťahu k aplikačným úlohám riešeným nad RDM. Keď sa pre jeden z možných kľúčov rozhodneme, zostávajú ďalšie ako alternatívne kľúče Cudzie kľúče Cudzie kľúče sú atribúty entity importované z inej entity. Ich hlavnou funkciou je zabezpečenie referenčnej integrity. V pôvodnej entite plní tento atribút funkciu primárneho kľúča. 5.6 Doménová a referenčná integrita Pre zachovanie konzistencie dát počas používania databázy v nej musia byť implementované pravidlá referenčnej a doménovej integrity.. Doménová integrita (DI) je taká vlastnosť bázy dát informačného systému, ktorá zaručuje, že počas používania informačného systému budú nadobúdať všetky nekľúčové atribúty len prípustné hodnoty. T.j. doménová integrita sa týka prípustných hodnôt nekľúčových atribútov. Pre definovanie pravidiel doménovej integrity je v popise atribútov entít (stĺpcov tabuliek) okrem fyzického typu uvedená aj prípadná podmienka, ktorú hodnota musí spĺňať alebo sú uvedené všetky prípustné hodnoty atribútu. Ak môže byť atribút aj nedefinovaný, je to indikované príznakom null. Ak musí byť atribút vždy definovaný, je to indikované príznakom not null alebo uvedením prípustných hodnôt. Referenčná integrita (RI) je taká vlastnosť bázy dát, ktorá zaručuje, že pri používaní systému budú cudzie kľúče vždy referovať iba na existujúce riadky tabuliek alebo nebudú referovať nikam (budú mať hodnotu null), ak je to prípustné. RI sa týka kľúčových atribútov (primárnych a cudzích kľúčov). Táto integrita sa dá 105

106 Informačné technológie zabezpečiť implementáciou systému pravidiel referenčnej integrity - pravidiel pre vykonávanie operácií vloženie riadku (I - insert), aktualizácia riadku (U - update), zrušenie riadku (D - delete) v tabuľkách bázy dát. Základné spôsoby (pravidlá) zabezpečenia RI pre operácie I, U, D sú nasledovné: R - reštrikčný N - nulitný K - kaskádny Pri operácii DELETE (vymazanie): reštrikčný spôsob: Riadok v A tabuľke nemôže byť zrušený, pokiaľ existuje aspoň 1 riadok v B tabuľke, ktorý na neho referuje. nulitný spôsob: Riadok v A tabuľke môže byť zrušený, ale s jeho zrušením sa v tabuľke B vo všetkých riadkoch nastaví príslušný cudzí kľúč na hodnotu null. kaskádny spôsob: Riadok v A tabuľke môže byť zrušený, ale s jeho zrušením sa zrušia aj všetky tie riadky v tabuľke B, ktoré referovali na zrušený riadok v A. Pri operácii UPDATE (aktualizácii): reštrikčný spôsob: Primárny kľúč v riadku tabuľky A nemôže byť zmenený, ak existuje aspoň jeden riadok v B tabuľke, ktorý naňho referuje. nulitný spôsob: Primárny kľúč v A tabuľke môže byť zmenený, ale so zmenou sa vo všetkých riadkoch B tabuľky ( ktoré referovali na riadok so zmeneným kľúčom) nastaví zodpovedajúci cudzí kľúč na hodnotu null. kaskádny spôsob: Primárny kľúč v A tabuľke môže byť zmenený, ale so zmenou sa vo všetkých riadkoch B tabuľky ( ktoré referovali na riadok so zmeneným kľúčom) nastaví zodpovedajúci cudzí kľúč na novú hodnotu. Pri operácii INSERT (vloženie): reštrikčný spôsob: Do B tabuľky nie je možné zaradiť riadok s hodnotou príslušného cudzieho kľúča takou, ktorá ešte neexistuje v tabuľke A ako primárny kľúč. nulitný spôsob: Do B tabuľky je možné zaradiť riadok s hodnotou príslušného cudzieho kľúča null. kaskádny spôsob: Do B tabuľky je možné zaradiť riadok s hodnotou príslušného cudzieho kľúča takou, ktorá ešte neexistuje v tabuľke A ako primárny kľúč. Súčasne sa ale vytvorí aj riadok v tabuľke A tak, aby naňho novozaradený riadok v tabuľke B referoval. 5.7 Charakteristka SQL SQL (Structured Query Language štruktúrovaný dotazovací jazyk) bol vytvorený firmou IBM v roku 1974 a postupom času sa stal svetovým štandardom pre relačné databázové systémy. Môžeme ho rozdeliť na tri časti : 106

107 107 Databázové systémy DDL (Data Definition Language) jazyk na definíciu štruktúry databázy, DML (Data Manipulation Language) jazyk na manipuláciu s údajmi DCL (Data Control Language) jazyk pre riadenie prístupu k údajom Základné príkazy jazyka SQL CREATE Príkaz pre vytvorenie tabuľky. CREATE TABLE <meno_tabuľky> ( <meno_položky_1> <typ_položky_1>, <meno_položky_2> <typ_položky_2>,... <meno_položky_n> <typ_položky_n> ) Základné možné datové typy položiek (čiastočne závislé od konkrétnej databázy) sú uvedené v nasledujúcej tabuľke. Datový typ Popis int celé číslo v rozsahu do smallint celé číslo v rozsahu do tinyint celé číslo v rozsahu od O do 255 float číslo s pohyblivou rádovou čiarkou char(n) textový reťazec dĺžky n (max. 255 znakov) varchar(n) textový reťazec max. dĺžky n (max. 255 znakov) decimal(p) desatinné číslo s p platnými číslicami decimal (p,d) desatinné číslo s p platnými číslicami a s d desatinnými miestami money peňažná suma datetime údaj o čase a dátume vo formáte RRRR-MM-DD HH:MM:SS time údaj o čase v tvare HH:MM:SS date údaj o dátume v tvare RRRR-MM-DD blob špeciálny typ na ukladanie dlhých binárnych dát Tab. 11 Základné datové typy SQL Príklad (ak vychádzame z príkladu v kapitole 4.5) CREATE TABLE telesa ( meno varchar(64) NOT NULL PRIMARY KEY, svietivost int, velkost varchar(10) )

108 Informačné technológie Pomocou direktívy NOT NULL môžeme špecifikovať, že daná položka nesmie byť nulová. Pomocou direktívy PRIMARY KEY sa definuje, ktorá položka je primárnym kľúčom, ak ho definujeme DROP Príkaz na zrušenie tabuľky DROP TABLE <meno_tabuľky> INSERT Príkaz na pridanie nového záznamu do tabuľky. INSERT INTO <meno_tabuľky> [( <meno_položky_1>, <meno_položky_2>,..., <meno_položky_n>)] VALUES ( <hodnota_položky_1>, <hodnota_položky_2>,..., <hodnota_položky_n> ) Príklad, v ktorom vložíme nebeské teleso do databázy INSERT INTO telesa ( meno, svietivost, velkost) VALUES ( Slniečko, 9988, veľká ) Textové reťazce uzatvárame do apostrofov. Ako vidíme zo syntaxe, mená položiek nemusíme písať, ak chceme naplniť pri pridávaní všetky položky, ale potom hodnoty musia byť zadané v poradí, ako sú položky definované v tabuľke (nie vo všetkých verziách SQL). Potom náš zápis môže vyzerať aj nasledovne: INSERT INTO telesa VALUES ( Slniečko, 9988, veľká ) DELETE Vymazanie položiek z tabuľky. Je tu možnosť vymazať všetky záznamy alebo len záznamy vyhovujúce podmienke. Tabuľka sa však neruší, to by sa vykonalo príkazom DROP. DELETE FROM <meno_tabuľky> [ WHERE <podmienka>] Príklady, v ktorých najprv vymažeme všetky záznamy o nebeských telesách a potom len tie záznamy, kde svietivosť príslušného nebeského telesa je menšia ako 500. V podmienke použijeme meno položky(žiek) definovaných v tabuľke. DELETE FROM telesa DELETE FROM telesa WHERE svietivost <

109 UPDATE Aktualizácia položiek v tabuľke. UPDATE <meno_tabuľky> SET ( <meno_položky_1> <meno_položky_2>... <meno_položky_n> ) WHERE <podmienka> = <hodnota_položky_1>, = <hodnota_položky_2>, = <hodnota_položky_n> Databázové systémy Príklady, v ktorých najprv zmeníme svietivosť toho záznamu, ktorého meno = Slniečko a v druhom príklade zvýšime svietivosť o 100 u nebeských telies, ktorých veľkosť je malá. UPDATE telesa SET ( svietivost = 4455) WHERE meno = Slniečko UPDATE telesa SET ( svietivost = svietivost + 100) WHERE velkost = malá SELECT Príkaz určený na výber a prezeranie záznamov v tabuľke databázy. Tento príkaz je veľmi rozmanitý a má mimoriadne široké požitie, z tohto dôvodu uvedieme naozaj len najzákladnejšie konštrukcie. SELECT <zoznam_výstupných_položiek> FROM <zoznam_tabuliek> [ WHERE <podmienka> ] [ GROUP BY <zoznam_položiek> ] [ ORDER BY <kritériá_triedenia> ] [ HAVING <skupinová_podmienka> ] Najjednoduchší SELECT je, ak potrebujeme vypísať všetky záznamy danej tabuľky. SELECT * FROM <meno_tabuľky> Ak by sme napr. chceli získať len mená a svietivosť nebeských telies z tabuľky telesá, potom stačí napísať SELECT meno, svietivost FROM telesa Podobný príklad, ale je potreba vypísať všetky položky, ktorých svietivosť je väčšia ako 500 a zároveň menšia ako Ak máme za WHERE viac podmienok, je možné ich kombinovať pomocou AND, OR a NOT. Údaje získame pomocou nasledujúceho príkazu SELECT * FROM telesa WHERE svietivost > 500 AND svietivost < 1000 Okrem operátorov < a > v podmienke, môžeme použiť napríklad aj operátory: =, <=, >=, <> alebo LIKE príp. ďalšie. Pojem operátora LIKE by bolo možné 109

110 Informačné technológie voľne preložiť taký-ako. V porovnávanej hodnote môžeme potom použiť dva špeciálne znaky a to % (nahradzuje ľubovoľný reťazec) a _ (nahradzuje jeden znak). Ak napríklad potrebujeme vypísať všetky záznamy, ktorých položka meno začína na Sl stači uviesť: SELECT * FROM telesa WHERE meno LIKE Sl% Takisto je možné získať utriedený výstup podľa ľubovoľnej položky tabuľky. Slúži na to atribút ORDER BY s uvedeným kriteriálnych položiek triedenia. V nasledujúcom príklade získame všetky položky, ktorých svietivosť je väčšia ako 500 a zároveň menšia ako 1000 utriedené podľa mena. SELECT * FROM telesa WHERE svietivost > 500 AND svietivost < 1000 ORDER BY meno Poslednou črtou, ktorú tu uvedie je zistenie počtu vrátených záznamov vyhovujúcich otázke. Vykoná sa to použitím funkcie Count() na pozícii zoznamu výstupných položiek. Ak chceme teda zistiť počet záznamov, ktorých meno začína na Sl stačí napísať: SELECT Count(*) FROM telesa WHERE meno LIKE Sl% Komunikácia PHP s databázou V tejto kapitole si niečo povieme o spolupráci PHP s SQL databázami, ktorá robí z PHP naozaj mocný nástroj na tvorbu dynamických WWW. Nevyhnutnosťou skriptov na tvorbu dynamických WWW stránok je možnosť ukladať dáta na vzdialenom serveri a takisto ich poskytovať používateľom. Jednou možnosťou je uložiť dáta do súborov pomocou súborového systému, Je to však pomerne zložitá a pritom nie príliš bezpečná ani rýchla záležitosť. A práve tento problém riešia databázy SQL, ktorých podpora je v PHP výborne implementovaná. PHP môže pristupovať k databáze v princípe dvomi cestami: pomocou ovládačov ODBC, alebo priamo cez natívne ovládače danej databázy SQL. Výhodou používania SQL databáz v PHP je predovšetkým to, že programátor sa nemusí starať o zápis súborov na disk a čítanie, ako by to musel pri súborovom systéme. Databáza SQL urobí všetko za neho, pričom je aj zabezpečená ochrana pred cudzím zápisom na disk, čo v prípade súborového systému je asi najväčším nebezpečenstvom. Takisto použitie databázy SQL značne ovplyvňuje rýchlosť vykonávania skriptu v pozitívnom smere a zároveň nie je potrebné sa starať o zdieľanie súborov ako pri súborovom systéme, pretože aj o to sa postará databáza. Najpoužívanejšou databázou medzi bežnými používateľmi v spolupráci s PHP na nekomerčných serveroch je MySQL. V nasledujúcom si uvedieme základy použitia v prostredí systému PHP. 110

111 111 Databázové systémy Pripojenie a odpojenie databázy Základnými funkciami MySQL v PHP sú funkcie, ktoré slúžia na pripojenie a odpojenie databázy. Databázu je možné používať až po tom, čo sa k nej pripojíme, na čo nám slúži funkcia MySQL_Connect(). Táto funkcia má tri nepovinné parametre. Prvým parametrom je hostname servera, na ktorom beží databáza. Druhý parameter je používatelské meno a tretí heslo na pripojenie k databáze. V prípade, že nepoužijeme parametre, sú implicitnými hodnotami pre hostname "Iocalhost", pre používateľské meno meno používatela vlastniaceho proces a prázdne heslo. Funkcia vracia tzv. "link identifier", čo je vlastne identifikačné číslo otvoreného pripojenia k databáze. V prípade, že sa používa naraz iba jedno pripojenie, nie je potrebné túto hodnotu uchovávať v nejakej premennej. Uloženie hodnoty identifikátora pripojenia sa využije iba vtedy, keď sa využíva pripojenie k viacerým databázovým serverom naraz, teda sa otvára viac pripojení. Keď sú potom používané ostatné funkcie MySQL v súvislosti s databázou, každá má nepovinný parameter predstavujúci identifikátor pripojenia. V prípade, že je otvorených viac pripojení, je potrebné špecifikovať, ktorému pripojeniu, resp. ktorej databáze je funkcia určená. Ak skript volá viackrát funkciu MySQL_Connect() s rovnakými parametrami počas jedného procesu, neotvára sa nové pripojenie, ale funkcia vráti identifikátor už existujúceho pripojenia. Príklad pripojenia databázy môžeme vidieť napr. v kapitole 4.5. Druhou funkciou z kategórie základných, o ktorej si povieme, je MySQL_Close(). Táto funkcia slúži na zatvorenie pripojenia otvoreného funkciou MySQL_Connect(). Funkcia má jeden nepovinný parameter, ktorým je identifikátor pripojenia. V prípade, že je použitý, je zatvorené práve dané pripojenie. Ak sa nepoužije tento nepovinný parameter, je zatvorené pripojenie, ktoré bolo otvorené ako posledné. Z toho vyplýva, že používanie tohto nepovinného parametra je zbytočné v prípade, ak sa používa súčasne iba jedno pripojenie. Príklad opäť nájdeme v kapitole Operácie nad databázou Teraz si povieme niečo o funkciách, ktoré slúžia na manipuláciu s databázami. Prvou z nich bude funkcia MySQL_Create_DB(). Tá slúži na vytvorenie databázy s menom, ktoré sa jej zadá ako parameter. Je možné definovať aj druhý parameter, ktorým je identifikátor pripojenia, ktorý nemusíme uvádzať, ak používame len jedno pripojenie. Ak teda chceme vytvoriť databázu s názvom "nebesa" použijeme nasledujúcu konštrukciu: MySQL_Create_DB("nebesa"); Na zrušenie databázy slúži funkcia MySQL_Drop_DB(). Povinným parametrom je opäť meno databázy, tentoraz tej, ktorú chceme zmazať, a nepovinným identifikátor pripojenia. Funkcia vracia hodnotu true, ak sa databázu

112 Informačné technológie podarilo zmazať, v opačnom prípade false. Databázu vytvorenú v predchádzajúcom príklade by sme teda zmazali takto: MySQL_Drop_DB("nebesa"); Použitím tejto funkcie zmažete celú databázu aj s jej štruktúrou a údajmi, ktoré sa už nedajú obnoviť! Operácie manipulácie s údami Základom práce s databázou sú operácie umožňujúce vyberať, vkladať, mazať či modifikovať riadky tabuliek, prípadne samotné operácie s tabuľkami, ako vytváranie, mazanie alebo modifikovanie. Aby ste mohli všetky tieto operácie vykonávať je vhodné si aspoň prejsť kapitolu 5.7 a teda jazyk SQL. Prvou možnosťou je použiť funkciu MySQL_DB_Query(). Táto funkcia má dva povinné parametre. Prvým je meno databázy, na ktorú sa bude požiadavka vzťahovať. Druhým parametrom je samotná požiadavka, teda reťazec obsahujúci SQL príkaz pre databázu MySQL, ktorý jej chcete odoslať. Tretím a nepovinným parametrom je opäť identifikátor pripojenia. V prípade, že ho nezadáte, použije sa posledne otvorené pripojenie. V prípade, že nastala chyba, vráti funkcia hodnotu false, v opačnom prípade vracia identifikátor výsledku, pre ktorého spracovanie je potrebné túto návratovú hodnotu uložiť do premennej. Ukladať hodnotu nie je potrebné vtedy, ak nás výsledok operácie nezaujíma, napr. pri použiti príkazov DELETE, INSERT, UPDATE a pod. Pri použití príkazu SELECT je nevyhnutné ukladať návratovú hodnotu vždy, inak by nebolo možné spracovať výsledky získané z databázy. Takže na vybranie celého obsahu tabuľky telesa z databázy nebesa bude kód nasledujúci (pozri tiež príklad v kapitole 4.5): $result = MySQL_DB_Query("nebesa","select * from telesa"); Druhou možnosťou, ako odoslať požiadavku na databázu, je použiť funkciu MySQL_Query(). Táto funkcia sa líši od predchádzajúcej tým, že má iba jeden povinný parameter, a to požiadavku na databázu. Nemá teda prvý parameter požadujúci meno databázy, na ktorú sa požiadavka vzťahuje. Požiadavka je automaticky smerovaná na aktívnu databázu daného pripojenia, ktorého identifikátor môžeme špecifikovať ako druhý a nepovinný parameter. V prípade, že tak neurobíme, funkcia sa správa podobne ako MySQL_DB_Query(). Výsledok funkcie je rovnaký, ako to bolo pri MySQL_DB_Query(), teda identifikátor výsledku operácie, pričom ho môžeme priradiť premennej, čo má však význam iba pri použití príkazu SELECT. Preto, aby malo využitie databáz nejaký význam, potrebujeme hodnoty vrátené funkciami posielajúcimi požiadavky na databázu nejakým spôsobom spracovať. Na to nám slúži niekoľko funkcií. Najjednoduchším spôsobom, ako výsledok funkcie MySQL_Query(), príp. MySQL_DB_Query() spracovať, je použiť funkciu 112

113 113 Databázové systémy MySQL_Result(). Táto funkcia má dva povinné parametre a jeden nepovinný parameter. Prvým parametrom je premenná, ktorej obsah chceme spracovať z požiadavky na databázu. Druhým parametrom je index riadku, ktorý chceme spracovať. Posledným parametrom je offset stĺpca, ktorého hodnotu chceme získať. Takisto je možné použiť meno stĺpca, namiesto jeho číselného offsetu. V prípade, že tento parameter nezadáte, sa implicitne nastaví na prvý stĺpec. Možno to teoreticky vyzeralo trochu zložito, ale v skutočnosti ide o veľmi jednoduchú záležitosť. Azda to osvetlí nasledujúci príklad: $result = MySQL_Query("select * from telesa"); echo MYSQL_Result($result,0,'meno'); V drvivej väčšine prípadov potrebujeme spracúvať výsledky po použiti príkazu SELECT, ktorý môže vrátiť rozličný počet riadkov. Preto je rozumné v požiadavkách na databázu používať klauzulu ORDER BY, ktorou získame riadky už usporiadané. Využijeme to vtedy, keď chceme získať nejaký konkrétny riadok z výsledku. Riadky sú číslované od nuly. Skript z predchádzajúceho príkladu vypíše na obrazovku hodnotu stĺpca meno, z prvého riadka z tých, ktoré boli špecifikované ako návratová hodnota premennej $result, teda výber (netriedený) z tabuľky telesa z databázy nebesa. Druhou možnosťou, ako spracovať dáta z návratovej hodnoty, je použiť funkciu MySQL_Fetch_Row(). Táto funkcia slúži na uloženie jedného riadka z návratovej hodnoty funkcie MySQL_Query() alebo MySQL_DB_Query() do poľa so zodpovedajúcimi offsetovými indexmi, pričom sa indexuje od nuly. Hodnoty daného riadku tak máme k dispozícii v poli obsiahnutom v premennej, ktorej bol výsledok funkcie MySQL_Fetch_Row() priradený. Preto jediným a povinným parametrom tejto funkcie je identifikátor výsledku. Použitím tejto funkcie bude predchádzajúci príklad vyzerať takto (Predpokladáme, že bola vybratá databáza, nad ktorou sa pracuje. Buď je len jedno spojenie alebo to bolo špecifikované napr. funkciou MySQL Select_DB()): $result = MySQL_Query("Select * from telesa ); $pole=mysql_fetch_row($result); echo $pole[0]; Opakované volanie funkcie MySQL_Fetch_Row() má za následok to, že funkcia vracia vždy ďalší riadok v poradí, pričom v prípade, že už nijaký riadok nenasleduje, vracia funkcia false. Rozšíreným variantom funkcie MySQL_Fetch_Row() je MySQL_Fetch_Array() (pozri príklad v kapitole 4.5). Táto funkcia má obdobné vlastnosti ako predchádzajúca s tým rozdielom, že nevracia skalárne, ale asociatívne pole. Kľúčmi tohto poľa sú názvy jednotlivých stĺpcov, hodnotami sú príslušné hodnoty stĺpcov daného riadka. Funkcia však uchováva aj skalárne

114 Informačné technológie indexy, takže k jednotlivým prvkom poľa môžete pristupovať aj spôsobom, ako to bolo v prípade MySQL_Fetch_Rows(). Teraz si uvedieme príklad ekvivaletný predchádzajúcemu príkladu ale s použitím MySQL_Fetch_Array(): $pole=mysql_fetch_array($result); echo $pole ["meno"]; Funkcia sa správa pri opakovanom volaní rovnako ako predchádzajúca, teda vždy vráti nasledujúci riadok v poradí. V prípade, že nijaký nenasleduje, vracia false. Veľmi dôležitou a často využívanou funkciou je MySQL_Num_Rows () (pozri opäť kapitolu 4.5). Tá slúži na zistenie počtu riadkov, ktoré boli vybrané predchádzajúcim použitím niektorej funkcie posielajúcej požiadavku na databázu a ktoré sú identifikované identifikátorom výsledku. Tento identifikátor je povinným a jediným parametrom funkcie MySQL_Num_Rows(). Funkcia teda vracia počet riadkov vo výsledku špecifikovanom identifikátorom výsledku a túto hodnotu môžete využiť na kontrolu riadiacej premennej v cykle. V záujme rýchlosti je, samozrejme, rozumnejšie uložiť si hodnotu do nejakej premennej než volať túto funkciu pri každej iterácii Obsluha chýb a manažment pamäte Je možné, že nastane prípad, keď kód (otázka) odoslaný na databázu je nekorektný, a preto funkcia MySQL_Query(), resp. MySQL_DB_Query() nevracia nijakú hodnotu a pri použití takéhoto výsledku v ďalších funkciách nastane chyba. Keďže chyba v kóde pre MySQL nie je chybou PHP, nedá sa hneď odhadnúť, kde táto chyba v kóde nastala. Preto je vhodné použiť funkciu MySQL_Error(), ktorá vracia chybovú správu (ak nejaká je) poslednej operácie na databáze. Preto je možným spôsobom, ako túto chybu odhaliť, vypísať si návratovú hodnotu tejto funkcie na obrazovku. Poslednou funkciou, ktorá bude uvedená, je MySQL_Free_Result(). Jej parametrom je identifikátor výsledku. Táto funkcia sa stará o uvoľnenie pamäte asociovanej s daným výsledkom. Po jej použití daný výsledok nebude k dispozícii. V prípade, že ju nepoužijete, sú všetky výsledky uvoľnené z pamäte po skončení behu skriptu. 114

115 Projektovanie a tvorba internetových aplikácií 6 Projektovanie a tvorba internetových aplikácií Hneď v úvode je potrebné povedať, že technológie Internetu už dospeli do takého štádia, kedy od jednoduchých aplikácií je potrebné, najmä u profesionálnych rozsiahlych aplikácií, v plnej miere využívať všetky prostriedky súčasného softvérového inžinierstva. Navyše, tvorba z pohľadu WWW aplikácií nie je len úloha programátora a tak táto otázka dostáva interdisciplinárny charakter. Pre každý podnik či organizáciu je dnes stále dôležitejšia nielen prezentácia, ale vlastne ozajstná prítomnosť vo webe. Čím väčšia organizácia, tým aj jej sprítomnenie sa vo www bude typicky "väčšie" a vyžaduje vo väčšej miere profesionálny prístup. Podniky a organizácie sa musia prispôsobiť. Je potrebné si uvedomiť že tieto aplikácie: sa tvoria na určitú objednávku, platí sa za ne, následkom čoho: musia mať určitý požadovaný rozsah (typicky pomerne veľký), plniť určité funkcie mať určité vlastnosti (rôzne jazykové verzie, viacero pohľadov na tie isté informácie, pravidelná aktualizácia), musia byť hotové v danom termíne musia byť vyhotovené kvalitne. Tvorbe takýchto stránok sa úplne alebo čiastočne venuje viac a rôznych ľudí. Plán fungovania týchto stránok má dlhodobejší horizont a obsahuje prvky stratégie. Možno tu si čitateľ položí otázku, prečo sa venovať týmto záležitostiam v publikácii ako je táto. Prečo hovoriť o rozsiahlych aplikáciách? Z jednoduchého dôvodu. Či už budete riešiť veľký alebo malý problém, etapy, prvky a personálne zabezpečenie spomínané v nasledujúcom asi neobídete, napriek tomu, že mnoho častí sa spojí, ich účinok sa zminimalizuje alebo niektoré funkcie sa spersonalizujú do jednej osoby. 6.1 Základné etapy riešenia úloh Teraz si ešte v skratke zopakujme základné etapy riešenia úloh. Vývoj systému pozostáva z nasledujúcich etáp: špecifikácia problému - na základe požiadaviek vzniká zadanie na vypracovanie systému; analýza problematiky - analyzuje sa súčasný stav, doterajšie postupy práce, hľadajú sa spôsoby riešenia aktuálnych problémov návrh riešenia - na základe výsledkov analýzy sa špecifikujú postupy určené na riešenie problémov z predchádzajúcej etapy. Výstupom sú špecifikácie vo forme algoritmov alebo datových modelov 115

116 Informačné technológie implementácie systému - na základe špecifikácií algoritmov z predchádzajúcej etapy sa systém implementuje v konkrétnom programovom prostredí (programovací jazyk, databázový systém a pod.). Súčasťou implementácie je ladenie a testovanie programov nasadenie a použitie - systém sa zavádza do prevádzky a rutinne používa. Okrem toho proces práce na profesionálnych internetových aplikáciách (podobne ako na iných rozsiahlych projektoch) nemožno vykonávať chaoticky, ale musí mať určitý rámec, ktorý sa často definuje ako projekt. Projekt musí mať určený dátum začiatku a konca, dobre definované ciele a ohraničenia, stanovené zodpovednosti, rozpočet a časový rozvrh. Pri plánovaní sa od vytýčenia želaných cieľov posúvame k otázke, ako tieto ciele dosiahnuť a aké na to použijeme zdroje. Plánovanie je veľmi zložitá činnosť: ktorá sa prakticky nikdy nedá urobiť naraz. Pomáhame si pri ňom tým, že projekt rozdeľujeme na menšie a jednoduchšie časti -činnosti (tzv. subprojekty) a snažíme sa najprv plánovať jednotlivé časti osobitne. Projekt internetovej aplikácie môžeme typicky rozdeliť podľa činností (špecifikácia, funkčný návrh, grafický návrh, detailný technický návrh, implementácia, uvedenie a pod.) alebo podľa typu obsahu (napr. statické stránky, dynamické informačné stránky, nákupné stránky, stránky spätnej väzby a pod.) alebo podľa oboch vyššie uvedených aspektov. Proces plánovania sa zvyčajne viackrát opakuje a jeho výsledky sa zjemňujú a spresňujú. Pre plánovanie sú veľmi dôležité dobré odhady. Pre každú projektovú činnosť potrebujeme odhadnúť aspoň čas jej trvania a zdroje, ktoré bude vyžadovať: ľudské sily, počítače, sieť a iný materiál, produkty a služby, ktoré treba nakúpiť. Odhady komplikujú mnohé vzájomné závislosti medzi jednotlivými plánovanými časťami projektu (napr. technický návrh určitej časti nemôže začať skôr, ako má táto časť špecifikované požiadavky). Čiastkové odhady a plány musíme zlúčiť do plánu projektu, v ktorom potrebné zdroje sumarizujeme do podoby rozpočtu a časový priebeh do podoby rozvrhu. Okrem času a zdrojov môžeme plánovať aj ďalšie veličiny podľa potrieb konkrétneho projektu. Z hľadiska projektu až po inicializácii a plánovaní prichádza do úvahy vykonávanie. Súbežne s ním by však mal prebiehať proces riadenia a sledovanie aktuálneho stavu projektu, porovnávanie s plánom a reagovanie na odchýlky korekciou plánov, aby sa buď ciele projektu napriek tomu splnili, alebo v prípade nutnosti sa korigujú ciele projektu (uvedené alfa a beta testy). Proces ukončenia projektu tiež netreba zanedbávať. Najmä aby objednávateľ aplikácie (stránky) aj naozaj zaplatil, treba spravidla ešte vykonať určitú administratívnu prácu, preukázanie splnenia cieľov atď. Súčasne sa vypláca zhrnúť poznatky z projektu na použitie v ďalších projektoch a vytvoriť kvalitný archív projektu. 116

117 6.2 Personálne zabezpečenie prác Projektovanie a tvorba internetových aplikácií Ako už bolo uvedené má tvorba súčasných internetových aplikácií interdisciplinárny charakter. Jednotlivec sa môže pokúsiť o vytvorenie úspešnej aplikácie iba vtedy (vychádzajúc z Obr. 4), ak dokáže pracovať ako: publicista - pripraví prehľadný a pútavý obsah stránky resp. aplikácie, výtvarník - navrhne príslušný vzhľad stránky, programátor - vdýchne stránke život, manažér vedie projekt a zabezpečí odovzdanie aplikácie príp. zabezpečí, aby sa stránka dostala do povedomia verejnosti. Prvé dve profesie môžu stavať na solídnych teoretických základoch overovaných už v predpočitačovej dobe. Zostaviť text pre klasické nosiče informácií - papierové knihy a časopisy je predsa len odlišné, než pre WWW. Výtvarníci majú namiesto plátna obrazovku počítača, namiesto štetca grafické editory, digitálne fotoaparáty, skenery. Neustále sa meniacim podmienkam sú vystavení aj programátori a manažéri. Hoci v uvedenom zozname je manažér na poslednom mieste, spravidla je pôvodcom myšlienky. V etape tvorby stránky určuje čo je potrebné urobiť. Publicista, výtvarník a programátor riešia ako to bude urobené. Od programátora sa v poslednej dobe vyžaduje zabezpečiť aby stránka bola dynamická. Jej obsah sa dá meniť na strane servera. Podľa reakcie používateľa a na základe ním zadaných údajov server dynamicky vygeneruje obsah stránky, ktorý sa odošle cez sieť na počítač používateľa. Ukazuje sa však, že počítač používateľa je rozumné použiť nielen na zobrazenie stránok - dokumentov, ale aj na zmenu obsahu dokumentu, formy jeho zobrazenia, či na kontrolu zadaných údajov. Zredukuje sa tým množstvo prenášaných dát a zrýchli sa ohlas systému na podnety používateľa. Je teda prirodzené, že od programátorov internetových aplikácií sa žiada, aby zvládli techniku tvorby dokumentov schopných dynamickej zmeny na strane servera aj na strane klienta. Toto kladie pomerne vysoké nároky na znalosti a erudovasť programátora. V istom zmysle dobrý programátor internetových aplikácií musí znalosťami diverzifikovať aj do oblasti publicistu a výtvarníka. Manažér projektu výkonnú prácu (prácu prvých troch menovaných) obohacuje o ďalšie dôležité procesy: inicializáciu a ukončenie projektu, plánovanie a riadenie. Inicializácia zahŕňa dôležité rozhodovanie, napríklad či má vôbec zmysel púšťať sa do projektu a stanovenie základných cieľov projektu. Manažér sa musí rozhodnúť: či chce naozaj internetovú aplikáciu (najčastejšie www-prezentáciu), prípadne či chce zásadne zmeniť existujúcu aplikáciu, čiže či a za akých základných podmienok sa do projektu vôbec púšťať. Na základe strategických cieľov a marketingového plánu je potrebné určiť: aké vlastnosti aplikácia (wwwprezentácia) musí mať. Projekt treba zaistiť príslušnými objednávkami, dohodami, pridelením zodpovednosti a právomoci atď. Je veľmi dôležitá pre kvalitný projekt a tým aj pre kvalitu aplikácie zainteresovanosť manažmentu samotnej organizácie (firmy). Pretože ak je manažment presvedčený, že chce mať kvalitnú wwwprezentáciu, musí vytvoriť podmienky a motivovať pracovníkov. 117

118 Informačné technológie 6.3 Životný cyklu aplikácie U každého takého projektu definujeme životný cyklus aplikácie. Ten má podobné etapy ako celý systém: formulácia úlohy (špecifikácia toho, čo má aplikácia robiť) analýza úlohy (pochopenie problematiky) syntéza aplikácie návrh údajových štruktúr (spôsob reprezentácie objektov reálneho sveta) návrh algoritmu (spôsob práce s navrhnutými údajovými štruktúrami) kódovanie (implementácia) aplikácie ladenie, overovanie a testovanie zavedenie aplikácie do prevádzky (nasadenie aplikácie) prevádzka a údržba aplikácie vyradenie z prevádzky V životnom cykle každá etapa ovplyvňuje etapy nasledujúce. Pritom v každej z uvedených etáp môže vzniknúť požiadavka vrátiť sa k ľubovoľnej z etáp predchádzajúcich v dôsledku odhalených chýb alebo zapracovať nové požiadavky používateľa. Z uvedeného vyplýva, že kvalita spracovania každej etapy sa prejavuje aj v etapách ostatných. Veľmi často analýza problému (úlohy) priamo vplýva na zmenu špecifikácii aplikácie. Odhalenie chýb v programe počas etapy testovania (alfa (vnútrofiremné) a beta testy (verejné)) si vyžaduje návrat do niektorej z predchádzajúcich etáp. V najhoršom prípade si môže vyžiadať zmenu formulácie úlohy. Takéto zmeny však neúmerne predražujú vývoj aplikácie, pretože v tomto prípade sa vlastne celý postup musí zopakovať od začiatku Formulácia (špecifikácia) úloh Prvou zo základných činností softvérového inžinierstva (prvá fáza životného cyklu) je formulácia úloh. Jednou z najväčších chýb, ktorej sa však mnohí a často dopúšťajú, je vrhnúť sa do vytvárania niečoho bez toho, aby sme mali jasno v tom, čo to vlastne má byť. V neskorých štádiách vývoja, keď vysvitne, že predstava zadávateľa je iná ako vytvorený produkt, je často veľmi ťažké a drahé urobiť potrebné korekcie. Preto komunikácia medzi tvorcami aplikácie a zadávateľmi musí byť veľmi intenzívna, najmä pri začiatku. Keď si organizácia objednáva tvorbu internetovej aplikácie (www-stránok) v externej firme, musí uvážiť či je reálne, aby v plánovanom časovom horizonte mohli prebehnúť všetky potrebné diskusie medzi tvorcami stránok a všetkými ľuďmi v organizácii, ktorých sa tieto stránky týkajú a mali by k ich špecifikácii niečo povedať Práca na špecifikácii začína už v inicializácii projektu. V internetových projektoch je spravidla rozhodujúce: 118

119 Projektovanie a tvorba internetových aplikácií vymedzenie údajov, ktoré má aplikácia obsahovať miery dynamickosti jednotlivých prvkov požadovaná úroveň grafiky a multimédií z akých zdrojov sa majú získavať potrebné údaje a v akej forme (napr. text členený na odseky, s tučným písmom, s obrázkami, rôzne tabuľky, cenníky, telefónne zoznamy a pod.). Problém niektorých údajov je v tom, že ich štruktúra nie je dopredu jasná (napr. import textu z MS Wordu), čo môže spôsobovať problémy s jednotným, prehľadným a estetickým zobrazením na stránkach. Často je potrebné údaje aspoň sčasti ručne predspracovať (mnohokrát v tejto podobe sú skyté nepredvídané náklady). V špecifikácii nesmú chýbať aj požiadavky na bezpečnosť, bezporuchovosť, schopnosť zvládať veľké zaťaženie v špičkách, možnosť prevádzkovania na viacerých serveroch distribuovaných v internete, platforma operačného systému, www-servera, aplikačného servera, podporované prehiiadače atď Analýza, syntéza a návrh Postupnou analýzou, návrhom a spätne syntézou sa vyjasňujú budúce črty aplikácie. V prípade www-prezentácie je pomerne obtiažnou a zdĺhavou činnosťou analýza predstavy zákazníka, syntetizovanie budúceho výsledku na báze možných technológií a nakoniec celkový návrh. V ňom je potrebné najskôr rozdeliť celú prezentačnú štruktúru na jednotlivé stránky. Stránky budú, samozrejme, medzi sebou prepojené, čo sa zvyčajne znázorňuje mapou stránok. Prechody medzi stránkami zabezpečujú odkazy v hlavnom obsahu stránky a odkazy v navigačných prvkoch (navigačné lišty, rámce atď.), bez ktorých si kvalitné stránky nemožno predstaviť. Návrh navigačných prvkov preto úzko súvisí s návrhom mapy stránok. Proces návrhu samotnej stránky pozostáva z nasledujúcich činností: scenár, ktorý predstavuje postupnosť akcií používateľa a reakcií stránok alebo prípadov použitie t.j. prípady a stavy, ktoré môžu nastať, vrátane napr., ošetrenia chýb mimo stránky (napr. výpadok siete) popis jednotlivých dynamických prvkov stránky schéma stránky, ktorá predstavuje približný náčrt stránky s jej hlavnými prvkami a podrobným popisom ich správania (čo a ako sa má zobraziť a za akých podmienok). grafický návrh stránok. Mal by vychádzať z určitej spoločnej koncepcie (štandardu), aby grafické návrhy stránok boli navzájom konzistentné, a aby boli aj v súlade s imidžom organizácie, ktorú stránky majú reprezentovať. O vyššie uvedené prvky sa starajú najmä uvedený publicista a výtvarník (grafik) pod vedením manažéra. Tieto prvky dokopy tvoria prezentačnú vrstvu aplikácie. Pod touto vrstvou sa u rozsiahlych aplikácií zvyčajne skrýva vrstva implementačná (Obr. 4). 119

120 Informačné technológie Kódovanie, implementácia Implementačná vrstva rieši realizáciu požadovanej logiky resp. algoritmov, spracovanie a uloženie údajov. Práve táto vrstva je domémou programátora. Programátor takisto rieši ďalšiu nižšiu vrstvu t.j. vrstvu operačného systému a nakoniec technického vybavenia. Pri tvorbe internetových aplikácií a najmä rozsiahlych aplikácií sa typicky prejavuje snaha prezentačnú vrstvu od implementačnej. K najobľúbenejším technológiám umožňujúcim toto oddelenie patria ASP, JSP, Java, C++, PHP a pod. Pri návrhu a následnej implementácii systému www-stránok treba venovať zvláštnu pozornosť správe a uloženiu údajov. Údaje sa v moderných internetových aplikáciách zvyčajne ukladajú v relačných alebo objektovo-orientovaných databázach pomocou rôznych formátov (otázka veľkosti, kvality, dostupnosti a rýchlosti prenosu, bezpečnosti a univerzálnosti). Ďalším problémom je ako do databáz kvalitné (pravdivé, aktuálne, informačne hodnotné) údaje dostať a ako ich tam udržiavať? Toto je vážny problém, ktorý treba riešiť od začiatku súbežne s vývojom každej internetovej aplikácie. Ľudia, ktorí reprezentujú zdroje najcennejších údajov, sú obyčajne nie práve technicky orientovaní. V tomto štádiu opäť zasahuje najmä publicista a manažér. Vecou programátora je aj vytvorenie programového vybavenia s kvalitným používateľským rozhraním (formuláre, menu, sprievodcovia), ktoré umožňuje pohodlne a bez zbytočných chýb vkladať a udržiavať údaje. Nakoniec na spodnej vrstve ešte ostáva vyriešiť otázku platforiem, operačných systémov, nastaviť prístupy prípadne nakonfigurovať podporné programové prostriedky (napr. www-server). Na tejto úrovni je vhodné mať a používať aj z hľadiska programátora kvalitné vývojové nástroje Ladenie, overovanie a testovanie Súčasné rozsiahle programové aplikácie sú veľmi zložité, preto treba u nich vždy predpokladať prítomnosť chýb. V každom štádiu práce treba venovať určité úsilie objavovaniu a odhaľovaniu chýb. Najmä v skorších fázach (pri návrhu) sa používajú prehliadky dokumentov príp. skriptov. Tieto sa odovzdajú viacerým osobám, ktoré rozumejú problematike a ich pripomienky sa zhrnú, zhodnotia a podľa uznaných pripomienok sa aplikácia opraví. Pre internetové aplikácie je dôležitý aspekt použiteľnosti a bezpečnosti. Na tejto úrovni sa používajú často neverejné (vnútrofiremné) ale aj verejné testy príp. tzv. predbežný audit aplikácie, ktorý sa objednáva u špeciálnej testovacej organizácie resp. firmy. 120

121 Projektovanie a tvorba internetových aplikácií Nasadenie a údržba aplikácie Z pohľadu internetových aplikácií nasadenie je vlastne zverejnenie stránok. Najväčším problémom prevádzkovania je zabezpečenie spoľahlivosti a bezpečnosti. Po stránke spoľahlivosti je dôležitá kvalitná technická a sieťová infraštruktúra, ktorá by mala postačovať záťaži a v prípade potreby je dobré aby mala plynule rozšíriteľný výkon. Údržba (ak opomenieme vyradenie z prevádzky, ktoré v prípade www-stránok je pomerne jednoduché) je poslednou fázou. Je potrebné však na ňu myslieť už od začiatku, inak nás môže prísť veľmi draho. Údržba sú akékoľvek zmeny systému, ktoré sa vykonávajú po jeho odovzdaní (uvedení do prevádzky) a prekračujú pôvodnú špecifikáciu. Aktualizácia údajov, pokiaľ je v špecifikácii uvedená, nie je údržbou ale bežnou prevádzkou. Údržba je oprava chýb, zlepšovanie alebo zmeny funkcií systému. Sem môže patriť aj postupná modifikácia na základe ďalších požiadaviek klienta. Pri údržbe je aj veľkou pomocou kvalitná dokumentácia. Tá má byť primerane (nie zbytočne) podrobná a má popisovať hlavne netypické črty systému a rozhodnutia, ktoré sme pri jeho tvorbe prijali, spolu s odôvodnením. Má odzrkadľovať skutočný stav systému (pri plánovaní zmien treba počítať aj so zmenami dokumentácie!) Tieto zásady platia aj pre zmeny, ktoré vykoná dodávateľ internetovej aplikácie po jej dodávke. 121

122 Informačné technológie 7 Bezpečnosť informačných systémov Bezpečnosť informácií podobne ako informačné systémy a technológie prešla a prechádza v posledných rokoch prudkým vývojom. Tento vývoj sa odrazil a odráža aj v oblasti noriem. V súčasnej dobe existuje celý rad štandardov, noriem, technických správ a doporučení, v ktorých sa jednoznačne prejavuje snaha riešiť problematiku ochrany informácií komplexne, čiže nielen z pohľadu vlastných bezpečnostných technológií a informačných technológií. Vo svete dominujú najmä bezpečnostné štandardy TCSEC, ITSEC a Common Criteria, na ktoré reflektujú aj niektoré zákony a vyhlášky platiace v Slovenskej republike. Štandardy ochrany sú uceleným súborom kritérií, ktoré sa používajú na hodnotenie bezpečnosti informačných technológií, informačných systémov alebo bezpečnostných produktov. Na základe tohto hodnotenia je určená bezpečnostná trieda hodnoteného predmetu, ktorá hovorí o jeho bezpečnostnej kvalite. Vývoj týchto štandardov bol určitý čas nekoordinovaný, čo viedlo k paradoxnej situácii, kde celosvetovo používané informačné technológie boli hodnotené podľa miestnych štandardov a legislatívy. V súčasnosti vývoj štandardov vedie k vytvoreniu spoločných celosvetových kritérií. Medzi najviac používané štandardy patria: TCSEC - Trusted Computer Systems Evaluation Criteria (Oranžová kniha Orange book) v USA z roku Posledná verzia pochádza z roku US Federal Criteria nikdy neboli formálne prijaté. ITSEC - Information Technology Security Evaluation Criteria v Európe. Štandard, ktorý počas osemdesiatych rokov vydali Spojené kráľovstvo, Francúzsko, Nemecko a Holandsko. Posledná verzia bola publikovaná v júni CC - Common Criteria predstavujú výsledok medzinárodnej snahy zlúčiť existujúce Európske a Severoamerické kritéria. Tento projekt zlučuje Európske kritériá (ITSEC), Kanadské kritériá (CTCPEC) a federálne kritériá Spojených štátov (FC) pre použitie pri hodnotení produktov a systémov štandardnou cestou. Uznaním Medzinárodnou štandardizačnou organizáciou (ISO15408), Common Criteria celosvetovo nahradzujú národné a regionálne kritériá. V ďalšom budú popísané len kritériá podľa TCSEC, kritériá ITSEC a CC uvedené nebudú. 7.1 Kritériá podľa TCSEC (Oranžová kniha) TCSEC chápe bezpečnosť systému predovšetkým ako jeho schopnosť zabrániť úniku údajov (zachovanie dôvernosti údajov). TCSEC hodnotí ucelené počítačové systémy, nie jednotlivé komponenty. Podľa TCSEC sú počítačové systémy z hľadiska ich bezpečnosti rozdelené do 4 základných tried A, B, C, D ktoré sú ešte vnútorne členené. Celkovo teda TCSEC zaraďujú počítačový systém do jednej 122

123 123 Bezpečnosť informačných systémov z tried A, B3, B2, B1, C2, C1 a D, pričom uvedené poradie reprezentuje klesajúce požiadavky na bezpečnosť A1 zodpovedá najvyšším nárokom na bezpečnosť a C1 minimálnym. Filozofia bezpečnosti podľa TCSEC vychádza z predpokladu, že na bezpečnosti sa podieľajú rôzne bezpečnostné funkcie, ktorými je počítačový systém vybavený, ako aj kvalita realizácie systému, resp. jeho bezpečnostne relevantných častí. Pre zaradenie počítačového systému do jednej z uvedených tried je rozhodujúce, či spĺňa požiadavky kladené na túto triedu. V rámci každej triedy sa sledujú štyri aspekty hodnotenia: bezpečnostné smernice, stratégia (politika) bezpečnosti. K daným identifikovaným subjektom a objektom musí existovať skupina pravidiel, ktoré systém potrebuje na rozhodnutie, či daným subjektom môže byť umožnené získať prístup do špecifikovaných objektov. zodpovednosť - každý prístup k informácii musí byť založený na zistení, kto resp. aký subjekt pristupuje k informácii resp. objektu a s akými triedami informácií je oprávnený pracovať. Systém musí byť schopný realizovať bilanciu prístupov resp. zmien k danému objektu za účelom vysledovania zmeny subjektom. zabezpečenie - počítačový systém musí obsahovať technické a programové vybavenie, ktoré poskytne dostatok istoty, že systém uplatňuje všetky uvedené aspekty hodnotenia. dokumentácia - typ písomnej evidencie vo forme návodu, používateľskej príručky, skúšobnej a konštrukčnej dokumentácie požadovanej pre každú triedu. Spomenuté triedy tvoria hierarchiu, teda systém patriaci do vyššej triedy spĺňa aj požiadavky kladené na hierarchicky nižšie triedy. Praktické použitie v súčasnosti predstavujú triedy B a C. Rozdelenie D: Minimálna ochrana - toto rozdelenie obsahuje iba jednu triedu. Tá je rezervovaná pre systémy s minimálnou ochranou, ktorá nevyžaduje požiadavky vyššie hodnotených tried. Rozdelenie C: Diskrétna ochrana - riedy v tomto rozdelení poskytujú ochranu prostredníctvom zahrnutia schopnosti revízie účtovania činností subjektov nimi spustených. o Trieda C1 : Diskrétna ochrana - trieda C1 vyžaduje oddelenie používateľov a dát, a to včlenením niektorých foriem spoľahlivých kontrolných prvkov schopných vynútiť si obmedzenie prístupu na individuálnom základe a tiež poskytnúť používateľovi možnosť chrániť svoje dáta a nepovoliť ostatným používateľom tieto dáta náhodne prečítať alebo zničiť, teda poskytnúť im len dáta zodpovedajúce ich právam.

124 Informačné technológie o Trieda C2 : Ochrana riadeným prístupom - používateľom sa spracujú ich samostatné účty pre ich činnosti prostredníctvom prihlásenia sa a zaznamenávajú sa bezpečnostne dôležité prípady tzv. auditom. Táto trieda naviac obsahuje riadenie a kontrolu prístupu a možnosť znovu použitia objektov. Ovládacie prvky prístupu by mali byť schopné povoliť alebo vylúčiť prístup jednotlivým používateľom. Rozdelenie B: Direktívna ochrana - hlavná požiadavka v tomto rozdelení je, aby bezpečnostný systém uchovával integritu prístupových tried (návestí), ktoré sú pridelené objektom aj subjektom a používal ich na uplatnenie direktívnych pravidiel kontroly prístupu. Systémy v tomto rozdelení musia prenášať s hlavnou štruktúrou dát aj prístupové triedy. o Trieda B1 : Návesťová bezpečnostná ochrana - produkty s touto triedou bezpečnosti by mali poskytovať správu modelu stratégie, prístupových tried dát a direktívnej kontroly prístupu nad menovanými subjektami a objektmi. Dokumentácia hodnoteného produktu musí obsahovať neformálny popis modelu bezpečnostnej politiky, ktorú realizujú prostriedky bezpečnosti systému. o Trieda B2 : Štruktúrovaná ochrana - v systéme triedy B2 je systém bezpečnosti založený na jasne definovanom a zdokumentovanom modeli stratégie bezpečnosti, ktorý požaduje uplatňovanie direktívnej kontroly prístupu ako v systéme triedy B1, a táto kontrola je rozšírená na všetky subjekty a objekty v systéme. Systém musí byť analyzovaný na výskyt tzv. skrytých kanálov. Skrytý kanál (cover channel) je komunikačný kanál alebo iný mechanizmus, ktorý umožňuje tok informácií spôsobom, ktorý porušuje bezpečnostnú stratégiu daného informačného kanálu. Jedná sa teda o možnosť toku o informácií inými než explicitne určenými smermi a spôsobmi. Trieda B3 : Oblasti bezpečnosti - systém bezpečnosti triedy B3 musí uspokojiť požiadavky referenčného monitora tak, že sprostredkuje všetky prístupy subjektov k objektom a zároveň musí byť odolný voči nedovoleným zásahom. V štruktúre systému sa vylúčili moduly nepodstatné pre vynútenie stratégie bezpečnosti. V takýchto systémoch sú oddelené funkcie operátora, správcu systému a správcu bezpečnosti. Mechanizmus auditu je rozšírený o signalizáciu bezpečnostne dôležitých udalostí a sú požadované procedúry obnovy systému. Rozdelenie A: Verifikovaná ochrana - toto rozdelenie je charakteristické používaním formálnych metód verifikácií bezpečnosti na uistenie sa, že direktívne bezpečnostné ovládacie prvky použité v systéme môžu efektívne chrániť dôležité informácie uložené alebo spracovávané systémom. Požaduje sa rozsiahla dokumentácia na demonštráciu správnosti bezpečnostných požiadaviek vo všetkých aspektoch projektovania, vývoja a realizácie systému bezpečnosti. 124

125 7.2 Bezpečnosť internetových aplikácií Bezpečnosť informačných systémov Potreba bezpečnosti aplikácií za posledné roky rapídne narastá. Súvisí to s veľmi rýchlym rozvojom internetu do všetkých oblastí života. Milióny ľudí denne využívajú internetové služby, pri ktorých dochádza k výmene súkromných informácií. Ide napr. o posielanie ov, elektronický obchod, či internet banking. Aplikácie, ktoré pracujú so súkromnými dátami musia zaručiť bezpečnosť týchto dát. V posledných rokoch sa na internetových fórach objavujú výstrahy upozorňujúce na nedostatočnú bezpečnosť PHP aplikácií. Nie je to však spôsobené chybou PHP, ale chybami PHP programátorov. Hlavnú príčinu možno hľadať v tom, že existuje len málo materiálov, ktoré by sa ucelene venovali problematike bezpečnosti PHP aplikácií. Jednotlivé stupne bezpečnosti je možné zaistiť na nasledujúcich úrovniach: Kontrola dát Zabezpečenie na úrovni formulárov a URL Zabezpečenie na úrovni databázy Autentifikácia a autorizácia Zabezpečenie na úrovni zdrojového kódu a premenných, vrátane premenných prostredia Problematika bezpečnosti je v súčasnosti veľmi rozsiahla. Vzhľadom na povahu, rozsah a predpokladaný ročník štúdia, pre ktorý je tento učebný text určený, tu budú uvedené len niektoré základné techniky Kontrola dát Kontrola dát je základným kameňom bezpečnosti webových aplikácií, a to nezávisle od použitého programovacieho jazyka pre danú platformu. Zahŕňa mechanizmy, pomocou ktorých je aplikácia schopná overiť správnosť dát do nej prichádzajúcich a zabezpečiť aj správnosť z nej odchádzajúcich dát. V princípe sa jedná o filtrovanie (overovanie) vstupných dát a o prekódovanie (upravovanie) výstupných dát. Okrem samotného procesu kontroly (overovania a upravovania) dát, je dôležité zabrániť obídeniu takejto kontroly. Účinná kontrola dát je totiž taká, ktorá spoľahlivo kontroluje dáta a zároveň sa nedá obísť. V dvoch nasledujúcich podkapitolách budú popísané najbežnejšie spôsoby, ako zabrániť obídeniu filtrovania dát Dispatch metóda Prvou metóda, ktorou je možné zabrániť obídeniu dátovej kontroly, je dispatch metóda. Je založená na jedinom verejnom PHP skripte dosiahnuteľnom priamo z webu. V tomto skripte prebieha kontrola vstupných dát, až po jej úspešnom 125

126 Informačné technológie ukončení, sú s príkazmi include alebo s require (podľa potreby) pripájané include súbory, ktoré pracujú už s overenými dátami. To, že spomínaný PHP skript je jediný súbor v koreňovom adresári, dovoľuje programátorovi implementovať globálne bezpečnostné opatrenia na vrchole takéhoto súboru s vedomím, že tieto opatrenia nemôžu byť obídené a jednoduchú kontrolu filtrovania dát nahliadnutím na konkrétnu úlohu. Dispatch metóda obyčajne vyžaduje zadanie GET premennej, identifikujúcej úlohu, v každej URL. Táto premenná môže byť považovaná za náhradu mena skriptu, pretože podľa nej sa rozhodne, aký súbor sa pripojí. Ak je toto jediný verejný PHP skript, potom je jasne, že návrh tejto aplikácie zabezpečuje to, že žiadne globálne bezpečnostné opatrenia na začiatku skriptu nemôžu byť obídené. Taktiež umožňuje tvorcovi ľahký náhľad na priebeh kontroly u jednotlivých úloh Include metóda Druhá metóda, ako už naznačuje jej názov, je založená na pripájaní súboru s bezpečnostnými opatreniami. Ide o PHP súbor, ktorý obsahuje mechanizmus kontroly všetkých vstupných dát. Tento súbor musí byť pripojený na začiatku (alebo veľmi blízko začiatku) všetkých PHP skriptov, ktoré sú verejné. Po pripojení takéhoto skriptu k verejnému PHP súboru, je každý formulár očakávaný s premennou form, ktorá ho jednoznačne identifikuje. Na základe tejto premennej sa uskutočňuje filtrovanie potrebné pre daný formulár. Potom je nutné vytvoriť pole s názvami premenných, ktoré boli poslané a tieto sa porovnajú s premennými v prostredí premenných _POST. Poradie premenných v poli, ktoré boli poslané musí byť totožné s poradím premenných vo formulári Filtrovanie (overovanie) vstupných dát Filtrovanie vstupných dát predstavuje proces, pri ktorom sa zaručí, že dáta ktoré prejdú kontrolou sú správne. Eliminuje sa tým výskyt nekorektných (chybných) dát v aplikácii, a tým aj ich spracovanie, ktoré môže viesť k rozsiahlym problémom v bezpečnosti aplikácie. Ako bude spomenuté v ďalších kapitolách, spoľahlivé filtrovanie dát účinne zabraňuje viacerým útokom na aplikácie, a preto netreba jeho význam podceňovať. Proces filtrovania (overovania) vstupných dát pozostáva z troch krokov: 1. Identifikovanie vstupných dát 2. Filtrovanie (overovanie) vstupných dát 3. Rozlíšenie medzi overenými a chybnými dátami Identifikovanie vstupných dát Prvým krokom v procese filtrovania vstupných dát je ich identifikácia. Identifikácia znamená určiť, ktoré dáta musia pred spracovaním v aplikácii prejsť 126

127 Bezpečnosť informačných systémov procesom overovania. Vstupnými dátami sú všetky dáta, ktoré prichádzajú zo vzdialených zdrojov. Najčastejším typom takýchto dát sú dáta od klienta. Identifikácia klientskych dát je jednoduchá, pretože PHP ich poskytuje v globálnych poliach ako sú $_GET a $_POST. Okrem nich to však môžu byť aj iné dáta. V niektorých prípadoch obsahuje pole $_SERVER prvky, s ktorými môžu pracovať aj klienti. Takéto dáta sú taktiež vstupnými dátami od klientov a je potrebne ich overovať. Medzi sporný typ patria dáta v session dátových skladoch a dáta z databáz. Kvôli vyššej bezpečnosti je dobré overovať všetky dáta prijímané z databáz a pri webových aplikáciách náročných na bezpečnosť, aj dáta zo session dátových skladov Filtrovanie (overovanie) vstupných dát Existuje viacero spôsobov filtrovania vstupných dát. Za najpoužívanejšie a najbezpečnejšie je považované overovanie dát, pri ktorom vstupné dáta prechádzajú kontrolou. Ak nespĺňajú podmienky kontroly, sú považované za chybné a ďalej sa v aplikácii nespracúvajú. Veľmi nesprávnym prístupom je snaha opraviť chybné dáta v procese filtrovania. Môže to viesť k zníženiu bezpečnosti aplikácie. Pre filtrovanie vstupných dát existujú dva prístupy. Ide o prístup whitelist a blacklist. Whitelist je taký prístup, pri ktorom sa všetky dáta považujú za nesprávne, až do chvíle, pokiaľ neprejdú nejakým kontrolným mechanizmom. Blacklist je naopak taký prístup, pri ktorom považujeme dáta za správne ešte pred samotnou kontrolou. Keďže v bezpečnosti sa dôvera nevypláca, je vždy lepšie riadiť sa prístupom whitelist a nikdy nespracovávať vstupné dáta, ktoré neprešli kontrolou. Pri filtrovaní dát je tiež dôležité používanie vhodných algoritmov pre overovanie dát. Ak si aplikácia nevyžaduje špecifické overovanie dát, je lepšie použiť pri filtrovaní už existujúce PHP funkcie, ako vytvárať nové. Štandardné PHP funkcie sú totiž robustnejšie, spoľahlivejšie a boli aj starostlivo testované. Jedným z najpoužívanejších spôsobov filtrovania dát je overovanie pomocou regulárnych výrazov. V PHP sa na takéto overovanie používa funkcia preg_match(). Pri overovaní reťazcov, ktoré majú obsahovať len čísla, alebo len písmená (prípadne ich kombináciu), je možné použiť funkcie ctype_digit(), ctype_alpha() alebo ctype_alnum() Rozlíšenie medzi overenými a chybnými dátami Posledným krokom pri overovaní vstupných dát je, uložiť tieto dáta do premenných s vhodnými menami, aby bolo možné jednoducho ich odlíšiť od iných dát. Veľmi jednoduchým a elegantným riešením je ukladať už overené dáta do zvlástneho poľa. Pri používaní takéhoto poľa je potrebné dbať na dve veci: 127

128 Informačné technológie Pole je potrebné vždy pred použitím inicializovať na prázdne pole. Logicky je potrebné sa vyhýbať použitiu názvu tohto poľa pre iné premenné, ktoré môžu obsahovať chybné dáta. Ak si programátor osvojí používanie takéhoto poľa, pre uchovávanie overených vstupných dát, zvýši tým prehľadnosť svojho kódu a vyhne sa náhodnému spracovaniu neoverených dát Prekódovanie (upravovanie) výstupných dát Pri procese kontroly dát, netreba zabúdať ani na výstupné dáta. Aplikácia beží správne len vtedy, keď poskytuje správne výstupy. Preto je potrebné, aby si výstupy zachovali svoje hodnoty aj po tom, čo budú uložené do databázy, alebo odovzdané pre ďalšie spracovanie. Napríklad meno O Clobetter je potrebné pred výstupom pre MySQL databázu prekódovať na tvar O\ Clobetter. Vloženie \ pred apostrof, zabezpečí to, že apostrof nebude interpretovaný databázou. Podobne ako tomu bolo pri filtrovaní vstupných dát, aj upravovanie výstupných dát pozostáva z troch krokov: 1. Identifikovanie výstupných dát 2. Prekódovanie (upravovanie) výstupných dát 3. Rozlíšenie medzi upravenými a chybnými dátami Identifikovanie výstupných dát Aby bolo možné overiť výstupné dáta, je ich najskôr potrebné identifikovať. Vo všeobecnosti je proces identifikácie výstupných dát jednoduchší ako identifikácia vstupných dát. Výstupné dáta sú produktom aplikácie a programátor ich preto vie presne identifikovať. Ak napríklad treba identifikovať dáta posielané klientovi, stačí hľadať reťazce: echo, print, printf a <?= Prekódovanie (upravovanie) výstupných dát Tak ako filtrovanie vstupných dát, aj úprava výstupných dát je špecifická pre každú situáciu. Na úpravu výstupných dát pre bežných prijímateľov, akými sú klienti, databázy a URL, je možné použiť už existujúce PHP funkcie. V prípade, že tieto funkcie nepokrývajú potreby úpravy výstupných dát pre danú aplikáciu, musí si programátor vytvoriť vlastné. Najčastejšie sú údaje z aplikácie smerované ku klientom. Ďalším častým cieľom dát, ktoré produkujú aplikácie, sú databázy. Aj pre úpravu týchto dát existujú štandardné PHP funkcie Rozlíšenie medzi upravenými a chybnými dátami Podobne, ako tomu bolo pri vstupných dátach, aj pri výstupných je potrebné odlíšiť upravené dáta od neupravených. Najlepším spôsobom je vytvoriť pole s nejakým názvom (najlepšie takým, aby hovoril o cieli dát) napr. $htlm, $url a do neho ukladať dáta, ktoré už prešli výstupnou úpravou. 128

129 Bezpečnosť informačných systémov Autentifikácia a autorizácia Pri mnohých aplikáciách je kladená veľká zodpovednosť ochrany dát na autentifikáciu a autorizáciu. Aj napriek tomu, nie je mnoho z nich tak bezpečných, ako to o nich tvrdia ich tvorcovia. Autentifikácia - je to proces, pri ktorom je potvrdená identita používateľa. Používateľ, ktorý úspešne prejde procesom autentifikácie sa nazýva autentifikovaný používateľ. Najčastejším spôsobom autentifikácie je kontrola prihlasovacieho mena a hesla. Autorizácia - je často nazývaná prístupová kontrola. Úlohou procesu autorizácie je rozhodnúť, či je používateľ oprávnený na prezeranie určitých dát alebo nie. Úlohou tohto procesu je aj strážiť prístup k chráneným dátam. Proces autentifikácie a autorizácie by mal vždy prebiehať už od začiatku návrhu aplikácie. Ak je autentifikácia alebo autorizácia len prilepená k už hotovej aplikácii, vzniká mnoho bezpečnostných zraniteľností Brute Force útoky Pri tomto útoku útočník, bez akéhokoľvek premýšľania, alebo zvažovania nejakých skutočností, skúša všetky možnosti. Tento útok sa preto vyznačuje veľkým množstvom pokusov o zadanie správnej hodnoty požadovanej aplikáciou. Najčastejším brute force útokom, je útok pri ktorom útočník pozná prihlasovacie meno a háda len heslo. Ochrana proti brute force útokom je založená na limitovaní množstva prístupov, alebo znemožnení prihlásenia (nejaký čas), po chybnom prihlásení. Blokovanie prihlásenia treba nastaviť tak, aby v čase blokovania nebolo prihlásenie povolené ani v prípade, že bude zadané správne heslo. Vytvorenie mechanizmu na ochranu aplikácie pred brute force útokmi je jednoduché, treba pritom dbať na to, aby obmedzenia nevplývali výrazne na legitímnych používateľov Password Sniffing Password sniffing je útok založený na sledovaní komunikácie medzi serverom a klientmi. V prípade odhalenia komunikácie, by sa mnohé, pre bezpečnosť kľúčové dáta (prístupové dáta, alebo session identifikátor), mohli dostať do rúk útočníka. Ochranou pred týmto útokom je používanie SSL pri vzájomnej komunikácii klientov so serverom. Odporúča sa preto použiť HTTPS pre URL v ACTION atribúte formulára Opakované útoky Pri tomto type útokov sa útočník snaží opakovaným posielaním dát, ktoré predtým odoslal legitímny používateľ, získať práva iného používateľa. Tento útok 129

130 Informačné technológie je podobne ako Password Sniffing založený na sledovaní komunikácie legitímneho používateľa so serverom, a na zmocnení sa dát, ktoré môžu byť použité pre získanie prístupu ku chráneným zdrojom. Pre eliminovanie týchto útokov je dobré vyhýbať sa: Používaniu dát, ktoré zabezpečujú stály prístup ku chráneným zdrojom. Odhaleniu dát, ktoré zabezpečujú prístup ku chráneným zdrojom (aj keď tieto dáta zabezpečujú len dočasný prístup) Použitie LDAP servera pre autentifikáciu Súčasný trend vo vývoji aplikácií smeruje k postupnému oddeľovanie procesu autentifikácie a autorizácie od ostatných častí aplikácie. Jedným zo spôsobov, ako to urobiť, je použiť na autentifikáciu LDAP server. LDAP (Lightweight Directory Access Protocol) je distribuovaný hierarchický protokol klient/server, k adresárovej službe, využívajúci sieťový model TCP/IP, s voliteľnou podporov kryptovania. Slúži na prístup k údajovým skladom používateľov a ďalších sieťovo-orientovaných entít. Bol navrhnutý v roku 1995 na univerzite v Michigane. Mal pôvodne plniť funkciu sprostredkovania medzi servermi X500 a klientmi IP, jeho neskoršie implementácie však umožnili informácie o objektoch ukladať a nahradiť funkcionalitu serverov X500. LDAP definuje spôsob komunikácie medzi klientom a serverom. Klient pošle žiadosť, ktorá obsahuje požiadavku na vykonanie jednej z definovaných operácií a server vráti odpoveď s odkazom, kde klient smie získať dodatočnú informáciu. Výhodou použitia LDAP servera pre autentifikáciu je oddelenie dát potrebných pre autentifikáciu používateľov (prístupové meno a heslo) od aplikácie. Tým sa zjednodušuje správa dát aj celého systému, pretože správca aplikácie je zbavený povinností súvisiacich s používateľmi systému (ich pridávanie a mazanie, prípadne zmena prístupových práv). Implementovanie autentifikácie prostredníctvom LDAP servera vo webovej aplikácii nie je náročné. PHP obsahuje balík funkcií pre komunikáciu s LDAP serverom, ktoré poskytujú programátorovi široké možnosti Include súbory Táto kapitola rozoberá bezpečnostné riziká, ktoré súvisia s tzv. include súbormi. Sú to súbory, ktoré je možné pripájať pomocou include() a require(), čo umožňuje členenie zdrojového kódu do logických častí. Rozdiel medzi spomínanými funkciami je taký, že funkcia require() vracia pri neúspechu fatálnu chybu, ktorá ukončí beh skripru, zatiaľ čo include() vráti len varovanie a skript beží ďalej. Pokiaľ je súbor pre beh skriptu potrebný, zásadne treba na jeho pripojenie použiť funkciu require(). 130

131 Bezpečnosť informačných systémov Nechránený zdrojový kód Pri používaní include súborov treba dbať na to, aby nedošlo k odhalenia zdrojového kódu potenciálnym útočníkom. Include súbory (a ich obsah) sú totiž prístupné priamo prostredníctvom URL. Vyplýva to z týchto skutočností: Include súbory používajú príponu.inc Include súbory sú uložené v root (document root) adresári Apache nevie aké informácie sú uchované v súbore.inc Apache má nastavené DefaultType text/plain Existuje viacero spôsobov, ako je možné zabezpečiť ochranu zdrojových kódov. Jednou cestou je umiestňovať include súbory vždy mimo koreňového adresára, čo znižuje riziko ich zneužitia. Ďalšou ochranou dát v include súboroch je používanie inej prípony napr..inc.php. Spojením koncoviek sa potlačia nevýhody.inc spomínané vyššie a hlavne koncovka.php zabezpečí len prípadné spustenie súboru, čo je vo väčšine prípadov menej nebezpečné, ako odhalenie jeho obsahu. Okrem toho je na prvý pohľad jasné, že ide o include súbor a zároveň editory vedia že, obsahuje PHP kód. Okrem toho je možné ešte použiť aj iné spôsoby ochrany, ktoré súvisia s konfiguráciou web-servera Manipulácia s menami súborov Niekedy je vo webovej aplikácii potrebné používať dynamické pripájanie, pri ktorom je názov súboru, alebo cesta k nemu, uložená v premennej. Napríklad pre dynamický výber osobnej stránky zamestnancov môže byť použitý takýto include: <?php include "/zamestnanci/{$_get['name']}.html";?> Vďaka dynamickému pripájaniu použitému v tomto príklade, môže potenciálny útočník prezerať všetky súbory uložené na serveri. Ak napríklad zadá v url name=../admin/users potom je výsledok nasledovný: <?php include "/zamestnanci/../admin/users.html";?> čo je vlastne to isté ako: <?php include "/admin/users.html";?> Najúčinnejšou ochranou voči útokom takéhoto druhu je efektívne filtrovanie dát. Ďalším spôsobom ochrany je použitie funkcie basename(), ktorá dáva istotu, že meno súboru bude len menom súboru a nebude obsahovať žiadnu cestu. Extrémne problémy môžu nastať, ak sa nefiltrované dáta použijú ako začiatočná časť dynamického pripájania: <?php include "{$_GET['cesta']}/dobry.inc";?> Na rozdiel od manipulácie s menami súborov, teraz má útočník možnosť manipulovať s charakterom pripájaných súborov. Umožňuje to PHP, ktoré 131

132 Informačné technológie povoľuje pripájanie aj iných zdrojov ako sú lokálne súbory. Nebezpečenstvo takéhoto útoku sa rovná priamemu editovaniu PHP kódov útočníkom. Ochranou pred útokmi tohto druhu je efektívne filtrovanie dát Súbory a príkazy V tejto kapitole sa budú rozoberať riziká súvisiace s používaním súborov v aplikáciách a poukáže sa aj na najčastejšie chyby, ktorých sa tvorcovia aplikácií dopúšťajú pri práci so súbormi Prehľadávanie systému súborov Pri práci so súbormi je najskôr potrebné súbor otvoriť. Pre otvorenie je potrebné zadať meno súboru ako argument funkcie fopen(). Problém v bezpečnosti nastáva vtedy, keď je meno súboru zadávané z nejakej premennej. Potom zadanie mena súboru s reťazcom obsiahnutým v premennej umožní útočníkovi prehľadávať systém súborov na serveri. Zabrániť prehľadávaniu súborového systému je možné filtrovaním dát. V tomto prípade je vhodné realizovať overovanie dát kombináciou dvoch funkcií. Ide o už uvádzanú funkciu basename(), ktorá overí či je zadané meno súboru len menom a neobsahuje žiadnu cestu. Druhou funkciou je ctype_alpha(), ktorá kontroluje, či meno pozostáva len z alfa numerických znakov. Okrem tohto má PHP konfiguračnú direktívu allow_url_fopen (v php.ini), ktorá je štandardne nastavená na On. Táto direktíva dovoľuje odkazovať sa na vzdialený zdroj tak, ako keby išlo o zdroj lokálny. Toto môže viesť k viacerým zraniteľnostiam, keď budú v include() a require() použité chybné údaje (pozri kap ). Tento konkrétny typ zraniteľnosti je jedným z najnebezpečnejších zraniteľností v PHP aplikáciách vôbec, pretože umožňuje útočníkovi spustenie ľubovoľného kódu Command Injection Používanie systémových príkazov je nebezpečnou operáciou, obzvlášť, keď sa na ich tvorbu používajú informácie zo vzdialených zdrojov. Funkcia exec() je najpoužívanejšou funkciou pre spustenie shell príkazov. Mnohokrát je spúšťanie shell príkazov v aplikáciách veľmi vítanou operáciou, je však potrebné mať na pamäti, že používanie funkcie exec(), ako aj ďalších funkcií používaných pre spustenie shell príkazov (passthru(), popen(), shell_exec() a system()) ohrozuje bezpečnosť aplikácie. Preto je lepšie vyhýbať sa používaniu týchto funkcií. Ak je ich použitie nevyhnutné, je potrebné dbať na filtrovanie vstupných, ako aj na úpravu výstupných dát. 132

133 7.2.5 Databázy a SQL 133 Bezpečnosť informačných systémov PHP veľmi často spolupracuje s databázami. Prostredníctvom svojich funkcií je schopné komunikovať s veľkým množstvom databáz. Ako všetky vzdialené dátové sklady, aj databázy nesú so sebou svoje riziká. Táto kapitola sa nezaoberá bezpečnosťou databáz, no treba ju mať na pamäti, pri tvorbe aplikácií. Ako už bolo povedané, dáta z databáz je potrebné overovať pred použitím v aplikácii. Považovať tieto dáta za správne len na základe toho, že boli nejakou aplikáciou do databázy uložené ako správne dáta, nie je dobrým prístupom. Dáta môžu byť do databázy vložené aj manuálne, a preto nemusia byť vždy správne. Všetky dáta vstupujúce do databázy, ako aj dáta z nej vystupujúce, musia prechádzať kontrolou. Treba pritom upozorniť na to, že aj SELECT dotaz je vlastne výstupom aplikácie a dáta v ňom tiež musia prejsť úpravou, tak ako všetky výstupné dáta Nechránené prístupové dáta Väčšina PHP aplikácií spolupracuje s databázami. V týchto databázach sa často nachádzajú údaje, ktoré sú prístupné iba vybraným užívateľom a ukladaním do databázy sú chránené pred potenciálnymi útočníkmi. Práca s databázou si vyžaduje pripájanie na databázový server a používanie prístupových premenných pre autentifikáciu. Ak by došlo k odhaleniu prístupových premenných, útočník by získal prístup ku všetkým dátam uloženým v databáze. Prístupové dáta je preto potrebné uložiť tak, aby sa k nim nemohol útočník dostať. Prístupové premenné programátori často uchovávajú v súbore napr. database.inc, connect.inc a pod., ktorý je pripojený vždy, keď je potrebné spojenie s databázou a jeho obsah môže vyzerať takto: <?php $host = "localhost"; $db_name = "database"; $username = "user"; $password = "heslo";?> Tento spôsob je pohodlný a uchováva prístupové premenné v jednom súbore. Problém je, že programátori tento súbor umiestňujú do koreňového adresára, čo síce uľahčuje používanie include() a require(), ale zároveň vedie k odhaleniu prístupových dát potenciálnym útočníkom. Všetko v koreňovom adresári má podobnú URL. Vďaka tomu je možné veľmi ľahko pristúpiť k súborom v koreňovom adresári. Keďže väčšina webových serverov zobrazuje.inc súbory ako čistý text, sú tieto premenné priamo prístupné. Kvôli ochrane prístupových dát je dobré umiestniť takéto súbory mimo koreňového adresára, čo by malo byť dobrým zvykom. Pre posilnenie bezpečnosti

134 Informačné technológie je vhodné pre takéto súbory používať spojenú koncovku.inc.php. Ak by útočník aj poznal priamu cestu k súboru s takouto príponou, môže ho len spustiť, čo je vo väčšine prípadov menej nebezpečné ako zobrazenie jeho obsahu (hlavne, ak obsahuje len prístupové premenné a jeho spustením prakticky k ničomu nedôjde). Ak má programátor možnosť meniť konfiguráciu web servera, má aj ďalšie možnosti ochrany prístupových premenných. Môže web server nakonfigurovať, tak aby odmietal požiadavky na zobrazovanie obsahu súborov s príponou.inc SQL Injection Tento útok patrí k najčastejším útokom pri PHP aplikáciách. Jeho zvláštnosťou je, že je dôsledkom hneď dvoch chýb vývojára aplikácie. Ide o nedostatočné (alebo úplne absentujúce) overovanie vstupných dát a upravovanie výstupných dát. Nasledujúci príklad približuje priebeh SQL Injection. Prístup do aplikácie je možný len na základe správneho loginu a hesla: <form action="/login.php" method="post"> <p>login: <input type="text" name="login" /></p> <p>heslo: <input type="password" name="heslo" /></p> <p><input type="submit" value="log In" /></p> </form> Po zadaní loginu a hesla, musí prebehnúť kontrola, pri ktorej sa vytvára dotaz na databázu. Táto kontrola je často realizovaná nasledovne: <?php $heslo_hash = md5($_post['heslo']); $sql = "SELECT * FROM pouzivatelia WHERE login = '{$_POST['login']}' AND heslo = '$heslo_hash'";?> V súčasnosti je už známe, že existujú nedostatky v MD5, preto je pre posilnenie bezpečnosti dobré pri hashovaní používať ešte nejaký reťazec, jedinečný pre danú aplikáciu. Hashovanie potom môže vyzerať takto: <?php $retazec = 'KUNSTAR'; $heslo_hash = md5($retazec. md5($_post['heslo']. $retazec));?> Ak chce útočník prelomiť autentifikáciu pomocou útoku SQL Injection, musí zistiť názvy formulárových premenných, prípadne ich poradie. Často mu v tom pomôže samotný vývojár aplikácie a to použitím funkcií ako je mysql_error(), ktorých výpisy poskytujú bežnému používateľovi (teda aj útočníkovi) pre neho nepotrebné informácie. 134

135 135 Bezpečnosť informačných systémov Ak do vyššie uvedeného formulára, zadá útočník ako meno napr. úvodzovku a ako heslo napr. heslo, do aplikácie sa síce neprihlási, no nasledujúci chybový výpis mu poskytne veľa informácií: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE username = ''' AND password = 'a029d0df84eb55 Vďaka tomuto výpisu zistil útočník názvy formulárových premenných, ich poradie, taktiež zistil, že neprebehlo overovanie dát (nebolo vypísané chybové hlásenie týkajúce sa zle zadaného mena) a neprebehlo ani upravenie výstupu (bola vypísaná chyba databázy). Okrem toho mu výpis odhalil aj presnú formu WHERE klauzuly a môže jednoducho realizovať SQL Injection. Stačí ako login zadať: pouzivatel or ok = ok (to, čo zadá ako heslo, potom nie je podstatné) a dotaz bude vyzerať nasledovne: <?php $sql = "SELECT * FROM users WHERE username = 'myuser' or 'foo' = 'foo' -- AND password = 'a029d0df84eb5549c641e04a9ef389e5'";?> Vďaka SQL komentáru je dotaz efektívne rozdelený, čo umožnilo útočníkovi úspešne sa prihlásiť, aj keď nepoznal ani login ani heslo. Preto je pre zvýšenie bezpečnosti lepšie, ak je pri autentifikácii realizovaná kontrola hesla mimo databázy, a to nasledovaným spôsobom: <?php $heslo_hash = md5($_post['heslo']); $sql = "SELECT heslo FROM pouzivatelia WHERE login = '{$_POST['login']}' "; $result = mysql_query($sql, $link); $row = mysql_fetch_array($result); if($row['heslo'] == $heslo_hash){ /*autentifikacia uspesna*/ } else { /*autentifikacia neuspesna*/ }?> Ochrana proti SQL Injection: Filtrovať vstupné dáta - Filtrovanie vstupných dát výrazne pomáha chrániť aplikácie pred rôznymi útokmi, aj pred SQL Injection. Dáta pre prácu s databázou dávať do úvodzoviek - Ak to databáza dovoľuje, všetky hodnoty SQL dotazov bez rozdielu ich typu, je potrebné dávať do úvodzoviek. Upravovať výstupné dáta - Niekedy aj korektné dáta môžu kolidovať s formátom SQL dotazov, a preto je potrebné upravovať všetky výstupné dáta pre databázu. Pre túto úpravu sa odporúča používať existujúce PHP funkcie (pozri kap ). Používať filtrovanie vstupných dát spolu s upravovaním výstupných dát iba pri kontrole vstupných a aj výstupných dát je bezpečnosť spoľahlivá.

136 Informačné technológie 8 Elektronické obchodovanie Dôležitou súčasťou dnešných informačných systémov podnikov sa pomaly ale isto stávajú technológie elektronického obchodovania. Táto oblasť v plnej miere využíva najmä moderné informačné technológie na báze internetu. Snáď práve pre svoju mladosť sa zatiaľ označuje rôznymi názvami. Môžeme sa stretnúť s označením elektronický obchod, elektronické obchodovanie, e-commerce alebo e- bussiness. Pod pojem elektronický obchod je možné zaradiť pomerne široké spektrum činností, ktoré sa vyznačujú najmä plne elektronickou komunikáciou pri zabezpečovaní obchodných a platobných transakcií. Takýto spôsob pomáha skvalitňovať a urýchľovať obchodné procesy, ale taktiež vytvára priestor pre "odbúranie papiera", na ktorom bola v minulosti postavená obchodná kultúra spoločnosti. Hlavnou motiváciou je zníženie nákladov, automatizácia a zrýchlenie procesov a možnosť vytvorenia nových produktov a služieb s vyššou kvalitou. Elektronický obchod môžeme chápať buď ako elektronické nástroje pre podporu a realizáciu obchodných vzťahov - napr. reklamu, marketing, predaj, dodávku, platbu, poskytovanie ďalších služieb zákazníkom (e-commerce) alebo ako elektronické nástroje zahŕňajúce (okrem spomenutých) aj vlastnú činnosť podnikateľa - výskum, vývoj, výrobu, zásobovanie materiálom a die!y, logistiku, administratívu, vedenie účtovníctva, finančné služby - platobný styk, úvery, leasing, bankové produkty, poistenie apod. (e-bussiness) E-commerce je v tom kontexte možné chápať ako časť elektronického obchodu smerujúcu k zákazníkovi, a e-bussiness ako časť elektronického obchodu smerujúcu k vnútorným službám a k obslužným činnostiam. Vo všeobecnosti je však pravdou, že elektronické obchodovanie na úrovni podnikov existuje vo svete už viac ako 20 rokov. Začalo sa zavádzaním formalizovanej výmeny dát (electronic data interchange, EDI) medzi firmami a to posielaním a prijímaním objednávok, informáciami o dodávkach a platbách atď. Najväčší podiel na tovaroch, ktoré sú predmetom elektronického obchodovania, majú tzv. nehmotné produkty a služby alebo tovary. Medzi typické produkty patria knihy, hudba na CD, SW, elektronika a domáce spotrebiče. Rozsah služieb je veľmi pestrý. Patria sem služby finančných inštitúcií, ako sú banky a poisťovne, služby cestovných, ale aj realitných kancelárií, právne služby, ďalej služby systémov na rezerváciu a predaj lístkov na dopravu alebo kultúru a iné. V najjednoduchšej podobe si zákazník objedná jednotlivé druhy tovaru a určuje nakupované množstvo. Vyspelejšie technológie disponujú tzv. virtuálnym nákupným košíkom, do ktorého zákazník ukladá vybraný tovar, môže meniť jeho množstvo alebo ho vyradiť a objednáva celý nákupný košík. Platbu zákazník realizuje buď v okamihu dodania tovaru alebo prevodom zo svojho konta. 136

137 Elektronické obchodovanie Vyspelejší predajci sú priamo napojení na niektorú banku, ktorá zabezpečuje bezpečné finančné transakcie prostredníctvom Internetu. Celkovo povedané význam elektronického podnikania rastie veľmi rýchlym tempom. V rámci podnikov však existujú aj určité bariéry nasadenia resp. využívania elektronického obchodovania. K vnútorným bariéram patrí napr. orientácia na industriálnu ekonomiku, nízka podnikateľská etika, nízka podnikateľská vynaliezavosť, podceňovanie trendov ako globalizácia, virtualizácia obchodných vzťahov a deregulácia, obmedzená pripravenosť interných informačných systémov na externú komunikáciu, nedostatok finančných prostriedkov alebo ich nevhodné využitie, podceňovanie urgentnosti a pripravenosti zmeniť spôsob komunikácie s obchodnými partnermi, malá pripravenosť na zmenu a pod. Využitie princípov elektronického obchodu nachádza uplatnenie vo viacerých sférach spoločnosti a je spojené s fenoménom informatizácie spoločnosti. Je preto zrejmé, že jeho princípy nachádzajú uplatnenie aj mimo komerčnej sféry. Vytvára sa pojem elektronická verejná správa (e-government), ktorá vlastne predstavuje uplatnenie princípov elektronického obchodu pri správe a riadení celej spoločnosti. Informatizácia verejnej správy je jednou z foriem elektronického obchodu zameraná na zefektívnenie a skvalitnenie služieb verejnej správy smerom k občanom. Nasadením technológií elektronického obchodu v oblasti verejnej správy je možné dosiahnuť: zníženie nákladov na činnosť verejnej správy, skvalitnenie a zefektívnenie vnútorných procesov verejnej správy, zabezpečenie trvalej dostupností služieb verejnej správy občanom. Elektronický obchod je v súčasnosti predmetom pozornosti všetkých významných regionálnych a svetových organizácií, akými sú Svetová obchodná organizácia - WTO, Konferencia OSN pre obchod a rozvoj - UNCTAD, Európska hospodárska komisia OSNEHK OSN, Organizácia pre hospodársku spoluprácu a rozvoj - OECD, Komisia Európskej únie a Medzinárodná telekomunikačná únialtd. Tieto organizácie (ale aj vlády jednotlivých štátov) skúmajú širšie aspekty elektronického obchodu, ako sú ekonomické a sociálne dôsledky používania nových technológií a dosahy na špecifické oblasti ako obchodná politika, zdaňovanie, elektronická autenticita, ochrana spotrebiteľa, súkromie a bezpečnosť. 8.1 Modely elektronického obchodovania V princípe existujú štyri základné typovo odlišné modely elektronického obchodovania, ktoré zo sebou nesú odlišné problémy a tiež iné riešenia. Rôznosť modelov spočíva v zdrojovej skupine predajcov (resp. pokytovateľov služieb) a cieľovej skupine zákazníkov (používateľov služieb). Niektoré modely elektronického obchodu je v mnohých ohľadoch možné považovať predovšetkým za rozšírenia prvých štyroch základných modelov. Nejedná sa zakaždým o 137

138 Informačné technológie elektronické obchodovanie v zmysle vzťahu predaj-nákup, avšak v dnešnej dobe je nutné chápať pojem elektronického obchodovania aj v širšom kontexte. Do obchodovania a ekonomiky je nutné zahrnúť aj štátnu správu a samosprávu, moderné spôsoby komunikácie firiem a občanov s verejnými inštitúciami. Pre pochopenie tokov tovaru, služieb a peňazí v systéme elektronického obchoduje potrebné definovať subjekty obchodného reťazca. Každý článok reťazca môže zohrávať dôležitú, resp. rozhodujúcu funkciu v špecifickom reťazci: Z dôvodu terminologického sa v popise obchodných reťazcov používajú pôvodné výrazy a synonymá v anglickom jazyku: dodávateľ, obchodník = bussiness [B], poskytovateľ služby = provider [P], zákazník, používateľ = customer (resp. consumer) [C], verejná správa, vláda = government [G] Do obchodovania a ekonomiky je však nutné zahrnúť aj štátnu správu a samosprávu, moderné spôsoby komunikácie firiem a občanov s verejnými inštitúciami. Otázka zahrnutia štátnej správy a samosprávy do modelov elektronického obchodovania je otázkou mimoriadne zložitou, preto nie je možné venovať sa jej v dispozičnom rozsahu tohoto materiálu. Účasť štátnej správy a samosprávy ako subjektov e-bussiness modelov sú vecou skôr politologickou, než technologickou. V kontexte pojmu elektronický obchod nie sú zúčastnené subjekty klasickými subjektami ekonomických vzťahov, a napriek tomu sú neoddeliteľnou súčasťou moderného trhového hospodárstva a demokracie. Preto sa pre takýto model elektronickej komunikácie je oveľa vhodnejší výraz virtuálna ekonomika, než elektronický obchod. Cieľom účasti štátnej správy a samosprávy v modeloch elektronického obchodu by malo byť priblíženie výkonu štátnej správy k občanovi. V zmysle vyššie uvedeného obchodného reťazca je teda možné rozdeliť predajcov a spotrebiteľov služby resp. tovaru podľa odberateľa a poskytovateľa do skupín a definovať ich v nasledujúcej tabuľke. Predajca, poskytovateľ Dodávateľ, obchodník (Bussiness) Zákazník, používateľ (Customer) Štátna správa, samospráva (Government) Dodávateľ, obchodník (Bussiness) Zákazník, používateľ Zákazník, používateľ (Customer) Štátna správa, samospráva (Government) B2B B2C B2G C2B C2C C2G G2B G2C G2G Tab. 12 Tabuľka modelov EO 138

139 139 Elektronické obchodovanie B2B (Bussiness to Bussiness) - predstavuje obchod medzi podnikmi, technologicky prepracované rešenia komunikácie medzi informačnými systémami partnerských podnikov, štandardizáciu výmeny dát, prepojenie nákupných a predejných systémov oboch strán. Obchodný model B2B predstavuje elektronické vykonávanie obchodných procesov medzi komerčnými subjektami. Vo väčšine prípadov ide o sajedná o uzavreté systémy, ktoré nie sú dostupné konečnému spotrebiteľovi. Komunikácia je vždy adresná, v priebehu komunikácie sa obe strany autorizujú po celú dobu transakcie, jedná sa väčšinou o zmluvne definovaný vzťah. Typickým príkladom sú komoditné burzy, zásobovacie a fakturačné systémy. B2C (Bussiness to Customer) - je obchodný model zameraný predovšetkým na koncového zákazníka, na jeho akvizíciu a získanie jeho objednávky. Predstavuje jednu z najstarších foriem elektronického obchodu, kde sú produkty a služby sú ponúkané priamo konečnému spotrebiteľovi. Obchodný model B2C sa charakterizuje formou virtuálneho obchodného domu (katalógu internetového predaja) s užívateľsky maximálne prispôsobeným rozhraním, možnosťami elektronických platieb - platobné karty, mobil, existencia reklamy, s využívaním CRM aplikácií - Customer Relationship Management. Typickým príkladom obchodného modelu B2C sú Internetové obchody, ktoré môžu proces elektronického predaja previazať s elektronickou platbou napr. prostredníctvom platobných portálov. Takýto typ elektronického predaja je pripravený na velmi vysoký a kolísajúci počet zákazníkov. Z pohľadu identifikáce zákazníka ide/môže ísť väčšinou o anonymnú komunikáciu až do okamihu platby. C2B (Customer to Bussiness) - v súčasnosti tento model nie je možné klasifikovať ako signifikantný, z toho dôvodu, že individuálne subjekty sa nevyskytujú bežne v obchodnom vzťahu s podnikateľskými subjektami v rozsahu, ktorý by predurčoval použitie internetu pre pravidelné obchodovanie. C2C (Customer to Customer) je v uvedenom kontexte forma elektronického obchodu medzi koncovými zákazníkmi. Jedná sa napríklad o rôzne druhy sprostredkovateľských činností, obstarávania a výmien tovaru. B2G (Bussiness to Government), resp. G2B (Government to Bussiness) - sú modely elektronického obchodu zamerané na vzťahy medzi podnikateľskými subjektami a štátnou správou, resp. samosprávou. Štátna správa v tomto prípade vytvára podmienky pre efektívnu integráciu do obchodných procesov, napr. v súvislosti s dovozom a vývozom tovaru, alebo komunikáciu s daňovou alebo colnou správou. Najznámejším z používaných a diskutovaných riešení sú napríklad elektronické podateľne, napríklad pre účely daňových priznaní, registrácia a prideľovanie súdnych podaní, alebo projekt elektronického colného konania, v rámci ktorého je realizovaná obojstranná elektronická komunikácia colnej správy s deklarantmi a bankami o úhrade colného dlhu.

140 Informačné technológie G2C (Government to Customer) resp. C2G (Customer to Government) - tiež označované Government To Citisen, predstavujú prostriedky elektrononickej komunikácie zamerané na vzťahy medzi občanom a štátnou správou, resp. samosprávou. Jedná sa napríklad o podávanie žiadostí a získavanie úradných rozhodnutí. Občan však na internetových stránkach príslušných inštitúcií môže aspoň získať základné informácie, ako aj elektronické verzie základných formulárov. Vo svojej podstate decentralizovaná internetová technológia umožňuje všetkým ľuďom získavať rovnaké informácie bez ohľadu na to, aké je ich postavenie v tradičnej hierarchii spoločnosti a obchádzať všetky tradičné zdroje informácií, alebo prinajmenšom spochybniť ich informačný monopol. Prostredníctvom internetu bude vďaka digitálnej identifikácii občanov (spojenej s overením ich oprávnení konať v mene firiem a inštitúcií) možné vybaviť väčšinu úkonov, kvôli ktorým je dnes nutné osobne navštíviť úrady. Po náraste počtu používateľov nových technológií nad kritickú hranicu, ktorý by malo stimulovať aj rozvíjanie e-informovania a e-služieb, bude možný prechod ku skutočnej e-demokracii. Jej prejavom nemá byť len možnosť organizovania elektronických hlasovaní o problémoch na lokálnej aj národnej úrovni (vznik tejto možnosti si zrejme vyžiada diskusiu o možnom rozšírení uplatnenia inštitútu referenda) a dokonalé prepojenie všetkých existujúcich inštitúcií s občanmi elektronickou formou, ale najmä vznik elektronických diskusných fór občanov a elektronických komunít ako nástrojov, ktoré budú obnovovať sociálne väzby medzi občanmi a zároveň im umožnia priamo ovplyvňovať rozhodovanie štátnych orgánov, ale zapojiť sa napríklad aj do tvorby zákonov. Obr. 22 Ukážka portálu verejnej správy G2G (Government to Government) - je model elektronického obchodu resp. elektrononickej komunikácie zameraný na vzťahy medzi jednotlivými inštitúciami štátnej správy, resp. samosprávy. Všetky modely elektronického obchodu sú vzhľadom na ich rôzne určenie realizované mierne odlišne, v princípoch však zdieľajú jednotnú technológiu komunikácie a prezentácie, a tou sú pochopiteľne komunikačné a informačné technológie. 140

141 8.2 Niektoré služby elektronického obchodovania Elektronické obchodovanie Za najjednoduchšiu formu e-commerce sa pokladá sprístupnenie informácií o ponúkanom produkte na www. Zložitejší spôsob hovorí o možnosti vyplnenia online formulárov a komunikácie prostredníctvom u. Tam kde sa dá vykonať transakcia bez opustenia internetu je najvyspelejšia forma, ktorá môže prerásť až do integrovaného systému virtuálnej obchodnej siete E-shop - virtuálna maloobchodná predajňa Základnou myšlienkou elektronickej predajne je presunutie podniku z fyzického sveta do virtuálneho sveta na Internete. Spoločnosť sprístupní svoj katalóg výrobkov alebo služieb na internetovej stránke. Štandardným modelom virtuálnej predajne je B2C. E-shop riešenia pri vhodnom skíbeni s klasickými princípmi,,kamenného obchodu" môžu znamenať viac nových zákazníkov, väčší obrat a viac ziskov. Virtuálne predajne umožňujú pohodlnú správu a evidenciu údajov o zákazníkoch, produktoch a objednávkach, samozrejmosťou sú aj štatistiky, nákupný košík, expedícia, export dát do rôznych formátov, vyhľadávanie, zľavy a iné. Obchodníkovi nie je problémom pridávať popisy k tovarom, zaraďovať tovary do správnych kategórií, priradí k tovaru cenu a v tom momente sa k tovaru môžu dostať zákazníci z akejkoľvek časti sveta. Ak si zákazník tovar objedná, pracovník špedičnej firmy alebo dodávateľ sa prihlási do systému, vytlačí si štítky na balíky a tovar odošle. Implementáciou elektronického obchodu si tak obchodník výrazne rozširuje pôvodné obchodné možnosti. Obr. 23 Ukážka e-shopu 141

142 Informačné technológie E-mall- virtuálny obchodný dom Virtuálny obchodný dom je sústredením viacerých virtuálnych predajní na jednom mieste z ktorého je možné priamo nakupovať. Motiváciou vstupu na elektronické trhovisko je získanie nových odberateľov, lacnejších alebo kvalitnejších dodávateľov. Agregácia dopytu je lákadlom najmä pre odberateľov. Ak sa spojí viac malých odberateľov, majú väčšiu nákupnú silu a môžu dostať výhodnejšie nákupné podmienky. Dôležitým prínosom je aj elektronické zabezpečenie realizácie obchodu od požiadavky cez objednávku, fakturáciu až po platby. Medzi doplnkové služby elektronických trhovísk patrí možnosť dopravy, platobné brány, právne poradenstvo, preverenie kvality ponúk, garancia za realizáciu obchodu, atď. Nákupné portály združujú kúpnu silu menších firiem s cieľom dosiahnutia lepších nákupných podmienok. Obchoduje s komoditami, ktoré sú spoločné pre väčší počet firiem (kancelárske potreby a vybavenie, hotely, letenky, atď.). Prevádzkové náklady elektronických trhovísk nie sú nulové (softvér, hardvér, vývoj, administratíva, marketing, atď.) a musia byť preto minimálne kryté výnosmi zväčša vo forme členských a transakčných poplatkov pre účastníkov. Medzi nepriame prínosy patrí napr. získanie kontroly nad trhom, optimalizácia dodávateľsko-odberateľského reťazca, vytvorenie nového odbytového kanálu, zníženie nákupných cien, atď. Na zabezpečenie likvidity je potrebné získať a udržať aspoň kritické množstvo aktívne obchodujúcich účastníkov E-banking Klasické formy bankovníctva - platba v hotovosti, či klient obslúžený pracovníkom banky pri priehradke postupne zastarávajú. Sú totiž pomalé a nákladné tak pre klienta, ako i pre banku. Tieto formy sú postupne nahradzované novými službami bankovníctva, v ktorých prioritnú rolu zohrávajú prostriedky informačných a komunikačných technológií. Charakteristickou črtou týchto služieb je nepretržitý, celodenný prístup klienta k svojmu účtu, teda nezávislosť od otváracích hodín banky, pohodlné vykonávanie domáceho a zahraničného platobného styku priamo z domu či pracoviska. Postupné zavádzanie elektronických bankových služieb medzi bežné bankové služby zohráva v konkurenčnom prostredí bánk významnú úlohu E-procurement - elektronické verejné obstarávanie Jedná sa o obchodný model B2B, v ktorom prevláda nákupca. Implementuje sa napríklad v prípade verejných inštitúcií vyhlasujúcich verejné súťaže. Typické verejné súťaže sú z oblasti služieb v stavebníctve, v investíciách, vo vypracovávaní štúdií a v dodávkach väčšieho množstva materiálov. Do verejného obstarávania môže patriť elektronické vyjednávanie, uzatváranie dohôd, alebo napríklad soločná účasť firiem vo verejných súťažiach. 142

143 Elektronické obchodovanie E-auction - elektronické dražby Princíp klasickej dražby je v tom, že tovar získa ten, kto v určenom časovom období ponúkne za tovar najvyššiu sumu. Elektronická dražba sa od klasickej dražby svojim princípom nelíši, avšak internetové aukcie ponúkajú niekoľko výhod oproti klasickým aukciám. Najdôležitejšou zmenou je asynchrónne draženie. To znamená, že sa dražitelia nemusia zísť na určenom mieste v stanovený čas na aukcii, ktorá trvá len niekoľko minút. On-line aukcie odbúravajú tieto časové a geografické prekážky. Aukcia trvá niekoľko dní alebo týždňov a dražitelia môžu vychutnávať pohodlie svojich kancelárii alebo domovov. Odbúraním týchto prekážok sa aukcií môže zúčastniť väčší počet dražiteľov a aj tlak na cenotvorbu je teda väčší. Dražiteľ má väčšiu flexibilitu v podávaní ponúk a môže sa lepšie rozhodnúť. Ďalšou nespornou výhodou on-line aukcií je využívanie technológií inteligentných (softwarových) agentových systémov, ktorí pomáhajú dražiteľom orientovať sa v spleti mnohokrát až miliónov položiek na aukčnej stránke. Týmto spôsobom odpadáva potreba propagácie dražených predmetov/tovarov, čím sa znižujú náklady vypisovateľa aukcie. Relatívnou nevýhodou on-line aukcií v porovnaní s klasickým aukčným domom môže byť fyzická neprítomnosť tovarov, o ktoré sa dražitelia uchádzajú. Táto otázka sa dá vyriešiť napr. zasielaním elektronických obrázkov s podrobným popisom draženej veci. Systém aukcií na webe sa osvedčil ako veľmi úspešný podnikateľský model. Môže byť použitý pri type transakcií B2B ale aj B2C. On-line aukcie sú bezpochyby jednou z najrýchlejšie sa rozvíjajúcich časťí elektronického obchodu. Niektorí experti veria, že nasledujúcemu obdobiu elektronického obchodu v oblasti B2B budú dominovať práve aukcie. Obr. 24 Ukážka portálu elektronickej dražby 143

144 Informačné technológie Virtual Community Prudký nárast využívania internetu vytvára podmienky pre veľký počet informačných portálov. Poskytovaním špecifických informácií, sa každý z nich chce stať domovskou stránkou pre milióny Web užívateľov. Posledný vývoj "vertikálnych" informačných portálov sa zameriava na vytváranie obchodne orientovaných komunít pre špecifické odvetvia. Tieto stránky ponúkajú novinky v danom odvetví, informácie o produktoch, články od odvetvových špecialistov, zoznamy spoločností, ich triedenie a iné špeciálne časti. Odvetvovo špecifické portály sú schopné vytvárať virtuálne komunity a pomáhajú spájať predávajúcich a nakupujúcich. Neposkytujú však programové vybavenie pre skutočné prebehnutie bussiness-to-bussiness transakcií. To znamená, že predávajúci a nakupujúci sa skontaktujú prostredníctvom internetového portálu a následne pomocou tradičných metód ( , telefón, fax) uskutočnia obchod. Tieto nástroje sú zvyčajne poskytované bezplatne s cieľom zvýšiť návštevnosť stránok a dodať stránkam osobnejší, interaktívny nádych. Následná obchodne zameraná komunikácia už môže byt' ponúkaná aj ako platená služba E-service providing Každý subjekt v hodnotovom reťazci môže poskytovať elektronické služby a stať sa hybnou silou na danom trhu. Poskytovateľ elektronických služieb sa napríklad môže zameriavať na získanie čo najväčšieho počtu aktérov z danej oblasti a vytvoriť tak úspešnú platformu na podnikanie typu B2B alebo B2C. Virtuálne obchodné domy teda môžu byt' prevádzkované napríklad na serveroch výrobcov, alebo bežných off-line predajcov pôsobiacich mimo internetu, poskytovateľmi pripojenia, návrhármi web stránok, mediálnymi a marketingovými firmami, certifikačnými centrami atd' Information brokerage - sprostredkovanie informácií Informácie od kvalifikovaných odborníkov sú potrebné pre každý subjekt hodnotového reťazca. Vyhľadávanie takýchto odborných informácií nemusí byť vždy úspešné pomocou katalógových a vyhľadávacích serverov. Preto vznikli profesionálne databázy ponúkajúce indexované archívy s informáciami z novín (o patentoch, o trhu, o aktualitách), ako aj z vedeckej literatúry. Niektoré sú prístupné za poplatok bežným spôsobom na základe predplatenia a objednania správ, ale už aj prostredníctvom platieb elektronickými peniazmi. 144

145 Príklady aplikácií 9 Príklady aplikácií V tejto kapitole budú uvedené príklady, ktoré by mali čitateľovi ďalej priblížiť uvádzanú problematiku. Kvôli zjednodušeniu nie sú používané bezpečnejšie premenné _POST[ ]. 9.1 Anketný formulár s Javascriptom Obsahom tohto príkladu je použitie Javascriptu na úrovni popisovanej v kapitole V tejto kapitole uvedieme len zdrojový text nakoľko prakticky kompletný komentár bol v uvedenej kapitole. Takisto príklady výstupu sú na obrázkoch Obr. 12 a Obr. 13. Niektoré z čŕt uvedených v tomto príklade je možné využiť pri iných tu uvádzaných príkladoch napríklad v aplikácii Zoznam študentov na vypisovanie správ o pridaní študenta do databázy a pod. <html> <head> <title>javascript priklad</title> <meta http-equiv="content-type" content="text/html; charset=windows-1250" /> </head> <script language="javascript"> function ZobrazAnketu() { displaywindow = window.open("","noveokno") displaywindow.document.write("<html>") displaywindow.document.write("<head><title>anketa</title></head>") displaywindow.document.write("<body background=\"pozadie.gif\">") displaywindow.document.write("<h1>anketa z rodičovkého okna "+window.parent.document.title+"</h1>") displaywindow.document.write("<form action=\"\" method=\"post\" onsubmit=\"alert('ďakujeme za vyplnenie ankety!'); return true\">") displaywindow.document.write("<table>") displaywindow.document.write("<tr><td>váš vek:<td><input TYPE = \"text\" NAME = \"vek\" SIZE=10 MAXLENGTH=20> rokov") displaywindow.document.write("<tr><td>pohlavie:<td><input TYPE=\"radio\" NAME=\"pohlavie\" VALUE=\"muz\">Muž <input TYPE=\"radio\" NAME=\"pohlavie\" VALUE=\"zena\" CHECKED>Žena") displaywindow.document.write("<tr><td>priemerný príjem:<td><input TYPE = \"prijem\" NAME = \"tovar\" SIZE=10 MAXLENGTH=20 VALUE=\"0\"> Sk / mesiac") displaywindow.document.write("<tr><td>priemerný výdaj za tovar:<td><input TYPE = \"text\" NAME = \"vydaj\" SIZE=10 MAXLENGTH=20 VALUE=\"0\"> Sk / mesiac") displaywindow.document.write("<tr><td>priemerný počet nákupov:<td><select name=\"nakupy\" size=1><option value=\"1\">jeden<option value=\"2\">dva<option value=\"3\">tri<option value=\"4\">štyri a viac</select> za mesiac") displaywindow.document.write("<tr><td>uvítal(a) by som:<td><input TYPE=\"checkbox\" NAME=\"balenie\" CHECKED>Darčekové balenie<input TYPE=\"checkbox\" NAME=\"odvoz\">Odvoz tovaru") displaywindow.document.write("<tr><td>vaše návrhy<td><textarea name=\"navrhy\" rows=3 cols=40></textarea>") displaywindow.document.write("<tr><td colspan=2><input TYPE=\"reset\" VALUE=\"Zmaž\"><input TYPE=\"submit\" VALUE=\"Odoslať\">") 145

146 Informačné technológie displaywindow.document.write("</table>") displaywindow.document.write("<form>") displaywindow.document.write("</body>") displaywindow.document.write("</html>") displaywindow.document.close() } </script> <body> <h1>anketa</h1> <form onsubmit="zobrazanketu()"> <input type="submit" value="zobraziť formulár ankety"> </form> <hr> </body> </html> 9.2 Grafika a PHP Nasledujúca aplikácia ukazuje jednoduché použitie grafických možností jazyka PHP. Ak chceme použiť grafickú knižnicu systému PHP je potrebné v súbore PHP.INI povoliť (odkomentovať) extension=php_gd.dll resp. extension=php_gd2.dll podľa verzie PHP. <?php header ("Content-type: image/png"); // generovanie jednoduchej hlavicky obsah obrazok formatu PNG $im (300, 300) // vytvorenie imaginarneho obrazku s velkostou 300x300 pixelov or die ("Nemozem inicializovat grafiku"); $background_color = ImageColorAllocate ($im, 255, 255, 0); // nastavenie farby pozadia (zlta) $line_color = ImageColorAllocate ($im, 233, 14, 91); // nastavenie farbz ciary (cervena) $text_color = ImageColorAllocate ($im, 0, 0, 0); // nastavenie farby textu (cierna) ImageLine ($im, 0,0,299,299,$line_color); ImageLine ($im, 0,299,299,0,$line_color); for($i=0; $i<300; $i +=100) { ImageLine ($im, 0,$i,299,$i,$line_color); ImageLine ($im, $i, 0, $i,299,$line_color); } IMageRectangle ($im, 0,0,299,299,$line_color); ImagePNG ($im);?> A takýto je výsledok // vykreslenie dvoch ciar po uhlopriecke // cyklus pre vykreslenie mriezky // vzkreslenie pravouholnika // generovanie obrazku a jeho vystup 146

147 Príklady aplikácií Obr. 25 Ukážka výsledku použitia grafických možností PHP Keďže výsledkom skriptu je vlastne obrázok vo formáte PNG, jednoduchý HTML kód môže vyzerať aj takto (za predpokladu, ze PHP kód je v súbore graf.php): <HTML> <HEAD> </HEAD> <BODY> <IMG SRC="graf.php" ALT="Obrazok z PHP"> </BODY> </HTML> 9.3 Kontrola a formátovanie rodného čísla Ďalšia ukážka je už pomerne rozsiahlejší skript, ktorého úlohou je skontrolovať vstúpené rodné číslo a vrátiť ho v požadovanom formáte alebo zistiť, či osoba s daným rodným číslom je ženského alebo mužského pohlavia. Zdrojový text je solídne okomentovaný, takže snáď nebude potrebný ďalší komentár (kvôli prehľadnosti je zdrojový text tučne a komentáre normálne). <?php // Rodne cisla define ("Separator1", '.'); define ("Separator2", '-'); define ("Separator3", '/'); define ("Pocet_Sluzieb", 2); define ("Pocet_Formatov", 7); define ("Pocet_Separatorov",3); define ("MUZ","Muz"); // definovanie navratovej hodnoty pohlavia Muz define ("ZENA", "Zena"); // definovanie navratovej hodnoty pohlavia Zena define ("Rok_Zmeny", 54); // mysli sa 19xx define ("Rok_Zavedenia", 11); // predpokladany rok zavedenia rc, mysli sa

148 Informačné technológie // funkcia formatovania rod. cisla. Ocakava na vstupe v premennej rc len 9 alebo 10 ciferne cislo // Vrati sformatovany retazec podla nasledujucich typov. Ak sa neuvedie format vrati to iste // Mozne formaty: 0 = XX.XX.XX/XXXX alebo XX.XX.XX/XXX // 1 = XX-XX-XX/XXXX alebo XX-XX-XX/XXX // 2 = XX.XX.XX.XXXX alebo XX.XX.XX.XXX // 3 = XX-XX-XX-XXXX alebo XX-XX-XX-XXX // 4 = XXXXXX/XXXX alebo XXXXXX/XXX // 5 = XXXXXX-XXXX alebo XXXXXX-XXX // 6 = XXXXXXXXXX alebo XXXXXXXXX function formatuj_rc($rc, $format=6) { $nastav_separatory=false; // pomocna log. premenna, ak true, pouzi separatory nastavene switch($format) { case 6: { return $rc; break; } // ak sa ziada len cislo neurobi nic a vrati len cislo case 0: { $separ1=separator1; $separ2=separator3; // nastavenie separatorov pre typ 0 $nastav_separatory=true; // nastavenie pomocne log. premennej, info o nastaveni separatorov } // nastavenie separatorov pre typ 1 case 1: { if(!$nastav_separatory) { $separ1=separator2; $separ2=separator3; $nastav_separatory=true; } // nastav log. premennu, info o nastaveni separatorov } // nastavenie separatorov pre typ 2 case 2: { if(!$nastav_separatory) { $separ1=separator1; $separ2=separator1; $nastav_separatory=true; } // nastav log. premennu, info o nastaveni separatorov } // nastavenie separatorov pre typ 3 case 3: { if(!$nastav_separatory) { $separ1=separator2; $separ2=separator2; $nastav_separatory=true; } // nastav log. premennu, info o nastaveni separatorov $rcislo = rc[0].$rc[1].$separ1.$rc[2].$rc[3].$separ1.$rc[4].$rc[5].$separ2.$rc[6].$rc[7].$rc[8]; if(strlen($rc)>9) $rcislo=$rcislo.$rc[9]; return $rcislo; break; } // nastavenie separatora pre typ 4 case 4: { $separ1=separator3; $nastav_separatory=true; // nastavenie log. premennej, info o nastaveni separatorov } // nastavenie separatorov pre typ 5 case 5: { if(!$nastav_separatory) { $separ1=separator2; $nastav_separatory=true; } // nastav pomocne log. premennej, info o nastaveni separatorov rcislo = $rc[0].$rc[1].$rc[2].$rc[3].$rc[4].$rc[5].$separ1.$rc[6].$rc[7].$rc[8]; if(strlen($rc)>9) $rcislo=$rcislo.$rc[9]; return $rcislo; break; } default: return $rc; // ak bol zly format vrati to iste } } 148

149 Príklady aplikácií // Funkcia konvertuje lubovolny format rodneho cisla na cislo len cislo z cifier (format 6) function cislo_z_rc($rc) { if(!(is_numeric($rc[2]))) // konverzia prvych styroch typov na cislo } { $rcislo = $rc[0].$rc[1].$rc[3].$rc[4].$rc[6].$rc[7].$rc[9].$rc[10].$rc[11]; if(strlen($rc)>12) $rcislo=$rcislo.$rc[12]; return $rcislo; break; } elseif(!(is_numeric($rc[6]))) // konverzia typov 4 a 5 { $rcislo = $rc[0].$rc[1].$rc[2].$rc[3].$rc[4].$rc[5].$rc[7].$rc[8].$rc[9]; if(strlen($rc)>10) $rcislo=$rcislo.$rc[10]; return $rcislo; break; } else return $rc; // ak vstupil typ 6 vrat to iste // Funkcia testuje v pripade, ze rc obsahuje len cisla alebo povolene separatory // ci je rc v niektorom z podporovanych formatov. Vracia: True - format OK inak False function test_format_rc($rc) { $dlzka=strlen($rc); // zisti dlzku vstupeneho rc $pocet=0; // premenna poctu separatorov $separ_position[0]=0; // zoznam, kde su separatory for($i=0; $i<$dlzka; $i++) // cyklus na zistenie poctu a umiestnenia separatorov //test na pripustne separatory if(($rc[$i]==separator1) ($rc[$i]==separator2) ($rc[$i]==separator3)) $separ_position[$pocet++]=$i; // ak bol separator, uloz jeho poziciu $i a zvys pocet separatorov $pocet if ($pocet>pocet_separatorov) { return false; break;} // ak je pocet separ. vacsi ako pripustny vrati False switch($pocet) { case 1: if($separ_position[0]==6) { return true; break; } // ak je jeden separator, musi byt na 6. pozicii else { return false; break; } case 2: { return false; break; } // ak su dva, je to nepripustne // ak su tri, tak na 2,5,8 pozicii case 3: if(($separ_position[0]==2) && ($separ_position[1]==5) && ($separ_position[2]==8)) { return true; break; } else { return false; break;} default: return true; // ak je nula, vrati true } } 149

150 Informačné technológie // Funkcia testuje delitelnost prveho argumentu druhym. Vracia True ak je delitelne, inak False // Ak je zly pocet argumentov, iny ako 2, vrati False function test_delitelnosti ( $a, $b) { if (!(func_num_args()==2)) { return false; break; } $c = $a / $b; if($c-floor($c)) return false; else return true; } // Funkcia testu, formatovania prip. inych sluzieb nad rodnym cislom. Mozne formaty // pozri funkciu formatuj_rc(). // Podporovane sluzby: 0 = test rc a jeho formatovanie // 1 = test rc a zistenie pohlavia ( 0=zena, 1=muz) // Vrati sformatovane rodne cislo ako retazec. Inak vrati chybu ako retazec // Chyby: 0: -1 = nulovy pocet argumentov fcie // 1: -2 = neznama pozadovana sluzba // 2: -3 = neznamy pozadovany format // 3: -4 = nespravna dlzka vstupeneho rc // 4: -5 = nespravne rc - iny ako povolene znaky // 5: -6 = nespravne rc - trojcislie za lomitkom po roku zmeny // 6: -7 = nespravne rc - nepripustny den // 7: -8 = nespravne rc - nepripustny mesiac // 8: -9 = nespravne rc - separatory na nepripustnych miestach alebo ich nespravny pocet // 9: -10= nespravne rc - rc nedelitelne 11 function rodne_cislo ($rc=0, $sluzba=0, $format=0) { $chyba = array ("Nula arg","nezn sluzba","nezn format","zla dlzka RC","Ine znaky","3 cisla po zmene","zly den","zly mesiac","separatory inde","nedeli 11"); $dnimes = array (1=>31,28,31,30,31,30,31,31,30,31,30,31); if (!(func_num_args())) { return $chyba[0]; break; } // test nuloveho poctu arg // test na maximalne cislo sluzby if ($sluzba>(pocet_sluzieb-1)) { return $chyba[1]; break;} // test na maximalny pocet formatov pri sluzbe 0 if (!$sluzba && ($format>(pocet_formatov-1))) { return $chyba[2]; break;} settype ($rc,"string"); // pretypovanie vstupu ak treba $dlzka = strlen($rc); if ($dlzka<9) { return $chyba[3]; break; } // test na minimalnu dlzku rc $len_cisla=false; // log. premenna ak v retazci su len cisla $cisla_separatory=true; // log. premenna ak su len cisla a predpokladane separatory if(is_numeric($rc)) $len_cisla=true; // test na to ci vstup je len cislo 150

151 151 Príklady aplikácií else { for ($i=0; $i<$dlzka; $i++) switch ($rc[$i]) { case Separator1: // testy na povolene separatory case Separator2: case Separator3: break; default: if(is_numeric($rc[$i])) break; // testy na cislicu // ak ine ako povol. separ. alebo cislica nastavi premennu na false else $cisla_separatory=false; } } // test na len cisla alebo cisla a povolene separ, inak vrati chybu if(!($len_cisla $cisla_separatory)) { return $chyba[4]; break; } // ak je len cislo, test ci nema dlzku > 10 if($len_cisla && $dlzka>10) { return $chyba[3]; break; } // test korektneho formatu ak su len povolene separatory, ich pocet a umiestnenie if(!(test_format_rc($rc))) { return $chyba[8]; break; } $inter_rc = cislo_z_rc($rc); // konverzia pre vnutorne potreby len na ciselny format $cislorc = (double) $inter_rc; // konverzia rc na cislo if(!(test_delitelnosti($cislorc,11))) { return $chyba [9]; break; } //delitelne 11? $dlzka=strlen($inter_rc); // zistenie dlzky overeneho ciselneho retazca rc $rok=(int)($inter_rc[0].$inter_rc[1]); // selekcia roku z rc $mes=(int)($inter_rc[2].$inter_rc[3]); // selekcia mesiaca z rc $den=(int)($inter_rc[4].$inter_rc[5]); // selekcia dna z rc // test na korektnost porad. cisla na stvorcislie po Roku Zmeny if(($rok >= Rok_Zmeny) && ($dlzka<10)) {return $chyba[5]; break;} // test mesiaca if((($mes>12) && ($mes<51)) $mes>62 $mes==0) { return $chyba[7]; break;} $pohlavie=muz; // nastavi pohlavie na muza // ak je mesiac 51 a vyssie, pohlavie na zenu a upravi ciselnu hodnotu mesiaca if($mes>12) { $pohlavie = ZENA; $mes -=50;} if($rok<rok_zavedenia) $rok += 2000; // ak je rok < ako rok zavedenia, potom prirata 2000 else $rok +=1900; // ak je dvocislie roku vacsie alebo rovne roku zavedenia prirata 1900 if(!($rok % 4 )) $dnimes[2]=29; // test na priestupny rok, ak ano, upravi pocet dni na 29 if($den==0 ($den>$dnimes[$mes])) { return $chyba[6]; break;} // test na den switch($sluzba) // prepinac sluzieb { case 1: { return $pohlavie; break;} // ak bola vybrata sluzba 1, vrati pohlavie // sluzba nula resp. implicitne formatuje na pozadovany format default: return formatuj_rc($inter_rc,$format); } } // cast sluziaca na kontrolu volania funkcie echo "Rodne cislo\n"; // tu je mozne zmodifikovat vstupny retazec $rodne=" "; $rod = rodne_cislo($rodne); // $rod = rodne_cislo($rodne,1); mozne aj toto s definovanim vystupneho formatu echo "r.c.> ".$rodne."\nchyba> ".$rod."\n";?>

152 Informačné technológie 9.4 Trochu zábavy s PHP Nasledujúca aplikácia prináša zábavnú aplikáciu na výpočet zhody partnerov a výpočet ich životnej aktivity. Program očakáva vstup údajov o osobách. Na tomto príklade bude ukázaná samotná práca s formulármi a aj niektoré grafické možnosti jazyka PHP. Táto aplikácia ešte nepracuje s databázou. 1. V prvom rade si navrhneme štruktúru aplikácie. in d e x _ zh o d a.h tm l V s tu p n ý f o r m ulá r pr e z a d a n ie ú d a jo v o s ô b L I N K A ( o d k a z, p r e n o s p a r a m etr o v ) Z O B R A Z E N I E V y p o citat v y p o c e t_ z h o d y.p h p m u ž o b ra z o k _ a k tiv ity.p h p ž e n a o b ra z o k _ z h o d y.p h p z h o d a Obr. 26 Štruktúra aplikácie Výpočet zhody partnerov 2. Pomocou jazyka HTML zadefinuje základnú vizuálnu stránku formulára pre vstup údajov o osobách. Túto zadefinujeme v súbore index_zhoda.html. Na odoslanie údajov z tohto formulára použijeme metódu GET. V nasledovnom si uvedieme obsah uvedeného súboru a jeho vizuálnu podobu. Dobre si zapamätajte mená jednotlivých prvkov formulára (atribúty name) Obr. 27 Vstupný formulár INDEX_ZHODA.HTML aplikácie 152

153 súbor INDEX_ZHODA.HTML (obrázok pozadia heartback.jpg) <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>výpočet zhody partnerov</title> </head> <body bgcolor="#ccccff" background="heartback.jpg"> <p align="center"><b><font size="6">výpočet zhody partnerov</font></b> <br> <font size="1">demo aplikácia</font></p> <form action="vypocet_zhody.php" method="get"> <p align="left"><b>muž:</b></p><p align="left"><b><font size="1"> Meno: </font></b><input type="text" name="mmeno" size="30"></p> <p align="left"><font size="2">dátum narodenia: Deň </font><input type="text" name="mden" size="4"> <font size="1">mesiac: </font><input type="text" name="mmesiac" size="4"> <font size="1">rok: </font><input type="text" name="mrok" size="6"></p> <hr> <p align="left"><b>žena:</b></p><p align="left"><b><font size="1"> Meno: </font></b><input type="text" name="zmeno" size="30"></p> <p align="left"><font size="2">dátum narodenia: Deň </font><input type="text" name="zden" size="4"> <font size="1">mesiac: </font><input type="text" name="zmesiac" size="4"> <font size="1">rok: </font><input type="text" name="zrok" size="6"></p> <hr> <p align="left"><input type="submit" value="vypočítať" name="vypocet"> <input type="reset" value="vynulovat" name="reset"></p> </form> </body> </html> 153 Príklady aplikácií 3. Po vyplnení údajov sú hodnoty preposlané na spracovanie do skriptu vypocet_zhody.php. V tomto jednoduchom príklade nie je vykonaná kontrola vstupných hodnôt Tento program postupne vypočíta aktivitu muža a ženy a následne ich koeficient zhody. Nakoľko sa jedná len zábavnú formu, nehľadajte za výpočtom žiadne zložité astrologické ani iné teórie. Pre zábavu to však postačí a výsledky vyzerajú vedecky. Výpočet aktivity je obyčajným súčinom dňa, mesiaca a roku narodenia následne znormalizovaný vždy na 9 cifier. aktivita = dennarodenia mesiacnarodenia roknarodenia Pre výpočet obrázkov grafov sú volané skripty obrazok_zhody.php a obrazok_aktivity.php.

154 Informačné technológie <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title>výpočet zhody partnerov</title> </head> <body bgcolor="#ccccff" background="heartback.jpg"> <p align="center"><b><font size="6">výpočet zhody partnerov</font></b><br><font size="1">demo aplikácia</font></p> <?php // Vypocet zivotnej aktivity dvoch osob a partnerskej zhody // nacitanie udajov o osobach // vypocet aktivit muza a zeny $aktivm=$mden*$mmesiac*$mrok; $aktivz=$zden*$zmesiac*$zrok; // vypocet koeficientu zhody a jeho prevod na percenta $koeficient=$aktivm/$aktivz; // koeficient je pomerom aktivit if($koeficient>1) $koeficient=1/$koeficient; // normalizacia na <1 $koeficient *=10000; // aj dve desatinne miesta $koeficient=(int)$koeficient; // orezanie pretypovanim na cele cislo $koeficient /=100; // prevod na percenta s 2 des. miestami // normalizacia na 9 pozicii, aby každa osoba mala 9 ciferne cislo // pre muza settype($aktivm,"string"); // prevod cisla aktivity na reťazec $pom=9-strlen($aktivm); // zistenie kolko pozicii chyba do 9 for($i=0; $i<$pom; $i++) $aktivm=$aktivm."0"; // dodanie 0 na predne pozicie // pre zenu settype($aktivz,"string"); // prevod cisla aktivity na reťazec $pom=9-strlen($aktivz); // zistenie kolko pozicii chyba do 9 for($i=0; $i<$pom; $i++) $aktivz=$aktivz."0"; // dodanie 0 na predne pozicie echo "<table align=\"left\">\n"; // tabulka pre vypis udajov a grafov // vypis udajov o muzovi do prvej bunky tabulky v 1. riadku a grafu do druhej echo "<tr>\n<td><font size=\"2\"> <b>muž:</b> ".$mmeno." ".$mden.".".$mmesiac.".".$mrok."</font></td>\n"; echo "<td><img SRC=\"obrazok_aktivity.php?aktivita=".$aktivm."\" ALT=\"Obrazok aktivity muza\"></td>\n</tr>"; // vypis udajov o zene do prvej bunky tabulky v 2. riadku a grafu do druhej echo "<tr>\n<td><font size=\"2\"> <b>žena:</b> ".$zmeno." ".$zden.".".$zmesiac.".".$zrok."</font></td>\n"; echo "<td><img SRC=\"obrazok_aktivity.php?aktivita=".$aktivz."\" ALT=\"Obrazok aktivity zeny\"></td>\n</tr>"; // vypis koeficientu do 1. bunky tabulky v 3. riadku a porovnavacieho grafu do 2. echo "<tr>\n<td><font size=\"2\"><b>zhoda:</b> ".$koeficient."%</font></td>\n"; echo "<td><img SRC=\"obrazok_zhody.php?aktivitam=".$aktivm."&aktivitaz=".$aktivz."\" ALT=\"Obrazok zhody\"></td>\n</tr>"; echo "</table>\n";?> </body> </html> 154 // ukoncenie definicie tabulky

155 Príklady aplikácií V predchádzajúcom výpise je obsah súboru vypocet_zhody.php. Hlavne si pozrite odovzdanie parametrov. V PHP je to tak jednoduché. Použijú sa tie isté mená ako v vstupnom formulári len sa definujú ako premenné (vo výpise tučná kurzíva) t.j. napíšeme pred ne znak $. Takisto je vhodné si pozrieť vypočet grafov. Tieto sú vkladané ako obrázky (predchádzajúci výpis kurzíva), ale obrázok je návratovou hodnotou skriptov obrazok_zhody.php a obrazok_aktivity.php. Parametre sú preposlané v rámci URL t.j. vlastne obdoba metódy GET. Vo výsledku vlastne dostaneme napríklad (XXXX bude konkrétne číslo): <td><img SRC="obrazok_aktivity.php?aktivita=XXXX" ALT="Obrazok aktivity muza"></td> Toto si zapamatajte, na tejto úrovni 1 to bude pre čitateľa častokrát jediná možnosť ako preposlať údaje do ďalšieho skriptu. Pre výpočet obrázku sa preposiela hodnota aktivity v premennej aktivita. 4. Hodnota aktivity je následne teda prekreslená do grafu. Skripty obrazok_zhody.php a obrazok_aktivity.php sú v princípe podobné. Na ozrejmenie si bližšie uvedieme len obrazok_zhody.php. (pozrite si aj základy grafiky v kapitole 9.2) <?php header ("Content-type: image/png"); formatu PNG // generovanie jednoduchej hlavicky obsah obrazok // definovanie zakladnych konstant $maxx=410; $maxy=150; $posunrokov=50; $krokrokov=35; $posunaktivity=10; $krokaktivity=15; $im ($maxx, $maxy) or die ("Nemozem inicializovat grafiku"); // max. rozmer obrazku vodorovne (v bodoch) // max rozmer obrazku zvislo (v bodoch) // posun 0 od okraja v smere osi rokov( v bodoch) // krok kreslenia v smere osi rokov (v bodoch) // posun od okraja v smere osi percent (v bodoch) // krok kreslenia v smere osi percent (v bodoch) // vytvorenie imaginarneho obrazku $background_color = ImageColorAllocate ($im, 255, 255, 255); $line_color_zena = ImageColorAllocate ($im, 240, 14, 14); $text_color = ImageColorAllocate ($im, 0, 0, 0); // nastavenie farby pozadia (zlta) // nastavenie farby ciary (cervena) // nastavenie farby textu (cierna) $maxx--; $maxy--; IMageRectangle ($im, 0,0,$maxx,$maxy,$text_color); ImageDashedLine ($im, 20,0,20,$maxy-$posunaktivity,$text_color); // vykreslenie osi ImageDashedLine ($im, 20,$maxy-$posunaktivity,$maxx,$maxy-$posunaktivity,$text_color); // 0,0 lavy horny roh 1 existujú aj iné možnosti, ale tie priamo tu nebudú popísané napr. použitie cookies, globálnych či session premenných alebo databázy a pod. 155

156 Informačné technológie for($i=0; $i<10; $i++) // cyklus pre vykreslenie percent aktivity { ImageString($im,1,3,(($maxy-$posunaktivity)-$i*$krokaktivity),((10*$i)."%"),$text_color); } for($i=0; $i<10; $i++) // cyklus pre vykreslenie rokov { ImageString($im,1,($posunrokov+$i*$krokrokov),$maxy-$posunaktivity+1,(15+5*$i),$text_color); } ImageString($im,1,$maxx-30,$maxy-$posunaktivity+1,"rokov",$text_color); $posunrokov += $krokrokov; // posun, lebo vyznamova hodnota ide od 20-teho roku for($i=0; $i<10; $i++) //cyklus kreslenia grafu { if($i>0) // ak je $i ine ako nula { ImageLine ($im,($posunrokov+($i-1)*$krokrokov),(($maxy-$posunaktivity)-$aktivita[$i-1]*$krokaktivity), ($posunrokov+$i*$krokrokov),(($maxy-$posunaktivity)- $aktivita[$i]*$krokaktivity),$line_color); } else // vypocet prveho bodu { ImageLine ($im,($posunrokov-$krokrokov),(($maxy-$posunaktivity)-0*$krokaktivity), $posunrokov+$i*$krokrokov), (($maxy-$posunaktivity)- aktivita[$i]*$krokaktivity),$line_color); } } ImagePNG ($im);?> // generovanie obrazku a jeho vystup V predchádzajúcom výpise si všimnite, že vykresľovanie hodnoty sa deje podľa poslaného obsahu premennej $aktivita (tučná kurzíva). Ďalšou záležitosťou je prístup na hodnotu tejto premennej. Táto je preposlaná ako reťazec. K jednotlivým cifrám potom pristupujeme tak, že vlastne s premennou $aktivita pracujeme ako s jednorozmerným poľom. 5. Keď máme teda uvedené skripty k dispozícii, môžeme túto aplikáciu začať používať. Na nasledujúcom obrázku vidíme ukážku vloženia vstupných údajov a následne získaný výstup v podobe grafov (v riadku Adresa na obrázku vpravo si všimnite, že posielané údaje sú viditeľné, čo je dôsledok použitia metódy GET). Obr. 28 Ukážka aplikácie Výpočet zhody partnerov 156

157 Príklady aplikácií Iným druhom zábavných aplikácií sú interaktívne hry. Na nasledujúcom obrázku vidíme ukážku hry Hanojské veže ako aplikáciu PHP aj keď v takejto podobe použitie PHP nie je bežné. Obr. 29 Ukážka hry Hanojské veže 9.5 Zoznam študentov Následne si uvedieme komplexnejší príklad jednoduchej aplikácie na báze popisovaných technológií. Našou úlohou bude vytvoriť jednoduchý systém na evidenciu študentov. U každého študenta sa má evidovať meno, priezvisko, rodné číslo a ročník štúdia. Aplikácia má byť schopná vypísať zoznam študentov so schopnosťou triediť výpis tohto zoznamu podľa uvedených položiek. Ďalej má byť schopná zaradiť nového študenta, upraviť údaje o konkrétnom študentovi príp. zmazať záznam o konkrétnom študentovi. V aplikácii budú použité metódy GET aj POST posielania údajov z formulára. V tomto jednoduchom príklade nie je nutné robiť kontroly vstupných hodnôt. 1. V prvom rade je nutné si definovať dátový model spracovaných údajov. Podľa zadania sa u každého študenta má evidovať meno, priezvisko, rodné číslo a ročník štúdia. Použijeme relačnú databázu, napr. MySQL. Vytvoríme databázu SKOLA. V rámci tejto databázy si zadefinujeme tabuľku STUDENT tak, ako ukazuje nasledujúci príklad (použijeme jazyk SQL). DROP DATABASE IF EXISTS skola; CREATE DATABASE skola; USE skola; CREATE TABLE student ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, meno VARCHAR(64), priezv VARCHAR(64) NOT NULL, rc VARCHAR(11), rocnik INT UNSIGNED ); 157

158 Informačné technológie Ako vidíme položka id je typu int a je definovaná ako primárny kľúč t.j. každý študent bude mať svoje jedinečné identifikačné číslo. Toto id bude použité na jednoznačný výber študenta v prípade úpravy alebo mazania údajov. Položky meno, priezv a rc (rodné číslo) sú jednoduché znakové položky s definovaným maximálnym počtom znakov (64,64,11). Položka rocnik je celočíselného typu. 2. Následne si navrhneme štruktúru aplikácie ako po stránke funkčnej, tak po stránke vizuálnej. Štruktúra môže vyzerať nasledovne: in d e x.h tm l L I N K A ( o d k a z ) ľ a v ý r á m e c p r a v ý r á m ec ( n á z o v P O P I S ) Z O B R A Z E N I E V š e t k y s t r á n k y a s k ri p t y p o u ží v a j ú j e d n o t n ý št ý l d ef i n o v a n ý v s ú b or e : s ty le.c s s m e n u.h tm l Ú v o d z o b r a z e n i e p ri p r v om s p u s t e n í u v o d.h tm l P r i d ať n o v y s tu d e n t.h tm l fo r m ul á r ( p os l a n i e P O S T ) T rie d e n i e p o dľ a ( m e n a, p r i e z v is k a, r o d.č í sl a a roč n í k a ) Z o z n a m P rid ať s tu d e n ti.p h p f o rm ul á r (p os l a n i e G E T ) Z m e n iť Z m a z ať p rid a j.p h p z m a z.p h p s ta ry s tu d e n t.p h p f o r m u l á r ( p o s l a ni e P O S T ) Z m e n iť z m e n.p h p Obr. 30 Štruktúra aplikácie Zoznam študentov Pre dosiahnutie jednotného vzhľadu použijeme technológiu kaskádnych štýlov. Definíciu kaskádneho štýlu uložíme do súboru style.css, ktorý potom využijeme v jednotlivých stránkach resp. skriptoch. Obsah tohto súboru je nasledujúci (kvôli miestu dvojstĺpcovo): 158

159 Príklady aplikácií A { } text-decoration : none; font-style : normal; font-weight : normal; color : Blue; A:Visited { color : Blue; } A:Active { color : Blue; } A:Hover { color : Red; } BODY { background-color : White; }.navmenu { font-family : sans-serif; color : Blue; font-style : normal; font-weight : normal; text-decoration : none; font-size : medium; } 159.nadpis { font-family : sans-serif; font-weight : bold; color : Black; font-size : medium; }.malynadpis { font-family : sans-serif; font-weight : bold; color : Black; font-size : small; }.text { font-family : serif; font-weight : normal; color : Black; font-size : small; } 3. Pomocou jazyka HTML zadefinuje základnú vizuálnu stránku a základné neinteligentné formuláre. Kvôli prehľadnému ovládaniu pomocou menu použijeme technológiu rámcov. Tieto zadefinujeme v súbore index.html. Hlavné menu aplikácie, ktoré sa bude nachádzať v ľavom rámci, bude definované v súbore menu.html. Hlavnú informačnú resp. úvodnú stránku predstavuje súbor uvod.html. Poslednou stránkou definovanou výhradne použitím jazyka HTML je formulár pre pridanie nového študenta do databázy. Túto časť predstavuje súbor novystudent.html. Na odoslanie údajov z tohto formulára, nakoľko sú dôvernejšie a rozsiahlejšie, použijeme metódu POST. V nasledovnom si uvedieme obsahy uvedených súborov s ich vizuálnou podobou. súbor INDEX.HTML <HTML> <HEAD> </HEAD> <FRAMESET COLS="180,*" border=0 frameborder="no"> <FRAME SRC="menu.html"> <FRAME SRC="uvod.html" name="popis"> </FRAMESET> <NOFRAMES> Váš prehliadač nezobrazuje rámce. </NOFRAMES> </HTML> LAVE 180px PRAVE zvyšok

160 Informačné technológie súbor MENU.HTML (obrázok pozadia menuback.gif) <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="menuback.gif"> <p align="center"> <font class="nadpis">systém<br>"študent"</font> <p> <font class="navmenu"><a href="uvod.html" target="popis">úvod</a> <p> <font class="nadpis">študenti:</font><br> <font class="navmenu"><a href="studenti.php" target="popis">zoznam</a></font><br> <font class="navmenu"><a href="novystudent.html" target="popis">pridať</a></font><br> </body> </html> súbor UVOD.HTML (obrázok pozadia infoback.gif) <html> <head> <meta http-equiv=content-type content="text/html; charset=windows-1250"> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <p class="nadpis">aplikácia "ŠTUDENT" <p> Táto aplikácia je kompletnou prezentáciou cvičení. Sú v nej použité všetky oblasti preberané na cvičeniach: <b>html, DB systémy, jazyk PHP</b>. <p> <b>pred testovaním treba vykonať nasledovné:</b> <ol> <li>nainštalovať PHP, napr. v rámci integrovaného balíka <li>spustiť databázový server MySQL. Skontrolovať či DB server beží. <li>vytvoriť databázu SKOLA použitím <code>skript.sql</code> napr. spustiť c:\... \mysql\bin\mysql.exe, napíšte<br><code>\. cestuksuboruskript.sql </code> <li>spustiť web server Apache (<code>c:\... \apache.exe</code>) ak sa nespustil pri štarte OS. <li>skopírovať obsah zip (php, html súbory,...) do adresára s dokumentami web servera. <li>otvoriť web-prehliadač a napísať <code>localhost</code> </body> </html> 160

161 Príklady aplikácií Obr. 31 Menu aplikácie MENU.HTML a úvodná stránka UVOD.HTML aplikácie súbor NOVYSTUDENT.HTML <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <p class="nadpis">pridanie nového študenta</h2> <p> <form action="pridaj.php" method="post"> <table> <tr> <td>meno: <td><input type="text" name="meno" size=15 MAXLENGTH=64> <tr> <td>priezvisko: <td><input type="text" name="priezv" size=15 MAXLENGTH=64> <tr> <td>rodné číslo: <td><input type="text" name="rc" size=11 MAXLENGTH=11> <tr> <td>ročník: <td><select name="rocnik" size=1> <option value="1">1 <option value="2">2 <option value="3"selected>3 </select> <tr> <td><input type="reset" value="obnoviť"> <td><input type="submit" value="pridať"> </table> </form> </body> </html> 161

162 Informačné technológie Obr. 32 Formulár pridania nového študenta NOVYSTUDENT.HTML Aplikácia po spustení bude vyzerať nasledovne: Obr. 33 Ukážka aplikácie po spustení 4. Pomocou skriptovacieho jazyka doplníme inteligenciu aplikácie. Predstavuje to najmä dve záležitosti: schopnosť pracovať s databázou a schopnosť triediť. Základným jadrom aplikácie je možnosť vypísania zoznamu študentov. Pomocou PHP napíšeme nasledujúci skript (uložený v súbore studenti.php. Text kurzívou je HTML časť, text normálne je PHP skript, text tučnou kurzívou resp. tučne je oblasť podpory triedenia): 162

163 Príklady aplikácií <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <p class="nadpis">zoznam študentov <p> <table border=1 cellpadding=4 cellspacing=0 class="malynadpis"> <tr> <th><a href="studenti.php?tried=0">meno</a> <th><a href="studenti.php?tried=1">priezvisko</a> <th><a href="studenti.php?tried=2">rodné číslo</a> <th><a href="studenti.php?tried=3">ročník</a> <th> <th> <?php mysql_connect(); //Vytvorenie spojenia so DB mysql_select_db("skola"); //Vyber databazy $query="select id,meno,priezv,rc,rocnik FROM student"; //Vytvorenie podmienky na pozadovane zotriedenie $triedpodla="priezv"; switch($tried){ case 0: $triedpodla="meno"; break; case 2: $triedpodla="rc"; break; case 3: $triedpodla="rocnik"; break; } //Vyber vsetkych studentov a zotriedenie $result=mysql_query($query." ORDER BY ".$triedpodla); //Cyklus pre spracovanie vysledkov - vypis do tabulky for($i=0; $i < mysql_num_rows ($result); $i++ ) { echo "<tr class=\"text\">\n"; $pole = mysql_fetch_array($result); echo "<td width=200>".$pole["meno"]."\n"; echo "<td width=250>".$pole["priezv"]."\n"; echo "<td width=100>".$pole["rc"]."\n"; echo "<td width=50>".$pole["rocnik"]."\n"; echo "<td width=50><a href=starystudent.php?id=".$pole["id"].">zmeniť</a>"."\n"; echo "<td width=50><a href=zmaz.php?id=".$pole["id"].">zmazať</a>"."\n"; } mysql_close(); //Uzatvorenie spojenia s DB?> </table> </body> </html> 163

164 Informačné technológie Tento program vypíše zoznam študentov v databáze. Navyše jednotlivé hlavičky stĺpcov tabuľky sú definované ako linky (predchádzajúci skript tučná kurzíva) na vlastný súbor. V prípade kliknutia na hlavicku príslušného stĺpca (zmenu farby spôsobí položka definovaná v štýle), dôjde k utriedeniu podľa danej položky. Samotné utriedenie vlastne spraví len nové načítanie z databázy s direktívou ORDER BY, kde atribút je daný obsahom premennej $triedpodla. Premenná $triedpodla sa nastaví podľa parametra $tried (testovanie v oblasti predchádzajúceho skriptu tučne), ktorý je fakticky preposlaný formou súčasti URL v časti tučnej kurzívy, keď skript volá seba samého. Implicitná hodnota je nastavená na $triedpodla="priezv". Takisto pripraví volanie skriptov starystudent.php a zmaz.php pre akcie Zmeniť resp. Zmazať metódou GET. Výzor aplikácie potom môže byť nasledovný: Obr. 34 Ukážka zobrazenia Zoznamu študentov (utriedenépodľa ročníka) Na predchádzajúcom obrázku si všimnite spodný stavový riadok. Vidíme efekt volania skriptu samého sebou metódou GET pre utriedenie podľa ročníka (zvýraznený v hlavičke tabuľky). Je viditeľný parameter tried a jeho hodnota. V prípade, že chceme zmeniť údaje príslušného študenta, postačuje kliknúť na položku Zmeniť v príslušnom riadku. Vyvolá sa skript starystudent.php, ktorému sa ako parameter pošle id (vlastne primárny kľúč, ktorý sme získali v predchádzajúcom SELECTe) študenta. Obsah tohto skriptu je nasledovný: 164

165 Príklady aplikácií <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <p class="nadpis">zmena osobných údajov študenta</h2> <p> <?php mysql_connect(); //Vytvorenie spojenia so DB mysql_select_db("skola"); //Vyber databazy //Nacitanie informacii o existujucom studentovi $result=mysql_query("select id,meno,priezv,rc,rocnik FROM student WHERE id=".$id); //Ulozenie informacie o ziskanom studentovi do premennej pole student $student = mysql_fetch_array($result); mysql_close(); //Uzatvorenie spojenia so DB?> <form action="zmen.php?id=<? echo $id?>" method="post"> <table> <tr> <td>meno: <td><input type="text" name="meno" size=15 maxlength=64 value=<? echo $student["meno"]?>> <tr> <td>priezvisko: <td><input type="text" name="priezv" size=15 maxlength=64 value=<? echo $student["priezv"]?>> <tr> <td>rodné číslo: <td><input type="text" name="rc" size=11 maxlength=11 value=<? echo $student["rc"]?>> <tr> <td>ročník: <td><select name="rocnik" size=1> <?php //Naplnenie rocnikov a predvolenie rocnika, ktory student navstevuje for($i=1;$i<=3;$i++){ if($i==$student["rocnik"]) //Zvolim tuto polozku echo "<option value=".$i." selected>".$i."\n"; else echo "<option value=".$i.">".$i."\n"; }?> </select> <tr> <td><input type="reset" value="obnoviť"> <td><input type="submit" value="zmeniť"> </table> </form> </body> </html> 165

166 Informačné technológie Vypíše údaje o príslušnom študentovi do formulára a umožní ich zmeniť. Aplikácia potom môže vyzerať nasledovne: Obr. 35 Ukážka zmeny osobných údajov študenta Môžeme zmeniť požadované údaje študenta a potom kliknúť na tlačidlo Zmeniť. Vyvolá sa skript zmen.php, ktorému sú údaje odoslané metódou POST. Tento skript v princípe vykoná len UPDATE údajov databáze a vypíše, že údaje boli zmenené. Obsah skriptu zmen.php je uvedený v nasledovnom. <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <?php mysql_connect(); //Vytvorenie spojenia so DB mysql_select_db("skola"); //Vyber databazy //Zlozenie UPDATE do databazy $query="update student SET meno='".$meno."',priezv='".$priezv."',rc='".$rc."',rocnik=".$rocnik." WHERE id=".$id; mysql_query($query); mysql_close();?> //Vykonanie SQL prikazu //Uzatvorenie spojenia so DB <p class="nadpis">údaje o študentovi boli zmenené. <p> 166

167 <table> </table> </body> </html> <tr> <tr> <tr> <tr> <td><b>meno:</b> <td><? echo $meno?> <td><b>priezvisko:</b> <td><? echo $priezv?> <td><b>rodné číslo:</b> <td><? echo $rc?> <td><b>ročník:</b> <td><? echo $rocnik?> Príklady aplikácií V prípade, že chceme zmazať príslušného študenta, postačuje kliknúť na položku Zmazať v príslušnom riadku v zozname študentov. Vyvolá sa skript zmaz.php, ktorému sa ako parameter pošle (metódou GET) id študenta. Tento skript v princípe vykoná DELETE údajov z databázy a vypíše, že študent (záznam o študentovi) bol zmazaný. Obsah tohto skriptu je nasledovný: <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> <body background="infoback.gif"> <?php mysql_connect(); //Vytvorenie spojenia so DB mysql_select_db("skola"); //Vyber databazy?> //Zlozenie DELETE z databazy $query="delete FROM student WHERE id=".$id; mysql_query($query); //Vykonanie SQL prikazu mysql_close(); //Uzatvorenie spojenia s DB <p class="nadpis">študent bol zmazaný z DB. </body> </html> Posledným skriptom aplikácie je skript pridaj.php, ktorý je naviazaný na súbor formulára novystudent.html. Tento skript metódou POST prevzal údaje o novom vkladanom študentovi a teda vytvorí nový záznam v databáze. Obsah skriptu je nasledovný: <html> <head> <link rel=stylesheet type="text/css" href="style.css" title="style"> <title>php aplikácia</title> </head> 167

168 Informačné technológie <body background="infoback.gif"> <?php mysql_connect(); //Vytvorenie spojenia so DB mysql_select_db("skola"); //Vyber databazy //Zlozim si INSERT do DB $query="insert INTO student (meno,priezv,rc,rocnik) VALUES ('".$meno."','".$priezv."','".$rc."',".$rocnik.")"; mysql_query($query); mysql_close();?> //Vykonanie SQL prikazu //Uzatvorenie spojenia so DB <p class="nadpis">študent bol pridaný do DB. <p> <table> <tr> <td><b>meno:</b> <td><? echo $meno?> <tr> <td><b>priezvisko:</b> <td><? echo $priezv?> <tr> <td><b>rodné číslo:</b> <td><? echo $rc?> <tr> <td><b>ročník:</b> <td><? echo $rocnik?> </table> </body> </html> Vypíše vkladané údaje o študentovi zároveň s oznamom, že študent bol pridaný do databázy. Príklad možného výzoru je na nasledujúcom obrázku. Obr. 36 Ukážka hlásenia o pridaní študenta do databázy 168

Aplikačný dizajn manuál

Aplikačný dizajn manuál Aplikačný dizajn manuál Úvod Aplikačný dizajn manuál je súbor pravidiel vizuálnej komunikácie. Dodržiavaním jednotných štandardov, aplikácií loga, písma a farieb pri prezentácii sa vytvára jednotný dizajn,

More information

Copyright 2016 by Martin Krug. All rights reserved.

Copyright 2016 by Martin Krug. All rights reserved. MS Managed Service Copyright 2016 by Martin Krug. All rights reserved. Reproduction, or translation of materials without the author's written permission is prohibited. No content may be reproduced without

More information

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Spájanie tabuliek. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Spájanie tabuliek Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Úvod pri normalizácii rozdeľujeme databázu na viacero tabuliek prepojených cudzími kľúčmi SQL umožňuje tabuľky opäť spojiť

More information

Riešenia a technológie pre jednotnú správu používateľov

Riešenia a technológie pre jednotnú správu používateľov Riešenia a technológie pre jednotnú správu používateľov Radovan Semančík Agenda Úvod: Identity Crisis Technológie správy používateľov Postup nasadenia Záver Súčasný stav IT Security Nekonzistentné bezpečnostné

More information

Obsah. SOA REST REST princípy REST výhody prest. Otázky

Obsah. SOA REST REST princípy REST výhody prest. Otázky REST Peter Rybár Obsah SOA REST REST princípy REST výhody prest Otázky SOA implementácie WEB (1990) CORBA (1991) XML-RPC (1998) WS-* (1998) SOAP RPC/literal SOAP Document/literal (2001) REST (2000) SOA

More information

Registrácia účtu Hik-Connect

Registrácia účtu Hik-Connect Registrácia účtu Hik-Connect Tento návod popisuje postup registrácie účtu služby Hik-Connect prostredníctvom mobilnej aplikácie a webového rozhrania na stránke www.hik-connect.comg contents in this document

More information

Manuál k programu FileZilla

Manuál k programu FileZilla Manuál k programu FileZilla EXO TECHNOLOGIES spol. s.r.o. Garbiarska 3 Stará Ľubovňa 064 01 IČO: 36 485 161 IČ DPH: SK2020004503 support@exohosting.sk www.exohosting.sk 1 Úvod EXO HOSTING tím pre Vás pripravil

More information

Databázové systémy. SQL Window functions

Databázové systémy. SQL Window functions Databázové systémy SQL Window functions Scores Tabuľka s bodmi pre jednotlivých študentov id, name, score Chceme ku každému doplniť rozdiel voči priemeru 2 Demo data SELECT * FROM scores ORDER BY score

More information

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator

Anycast. Ľubor Jurena CEO Michal Kolárik System Administrator Anycast Ľubor Jurena CEO jurena@skhosting.eu Michal Kolárik System Administrator kolarik@skhosting.eu O nás Registrátor Webhosting Serverové riešenia Správa infraštruktúry Všetko sa dá :-) Index Čo je

More information

Vzory, rámce a webové aplikácie

Vzory, rámce a webové aplikácie Vzory, rámce a webové aplikácie Jakub Šimko jakub.simko@stuba.sk Návrhové vzory (načo slúžia?) 1. Dobré zvyky v programovaní 2. Riešia často sa opakujúce problémy praxou overeným spôsobom 3. Pomôžu nám

More information

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca

TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca TP-LINK 150Mbps Wireless AP/Client Router Model TL-WR743ND Rýchly inštalačný sprievodca Obsah balenia TL-WR743ND Rýchly inštalačný sprievodca PoE injektor Napájací adaptér CD Ethernet kábel Systémové požiadavky

More information

kucharka exportu pro 9FFFIMU

kucharka exportu pro 9FFFIMU požiadavky na export kodek : Xvid 1.2.1 stable (MPEG-4 ASP) // výnimočne MPEG-2 bitrate : max. 10 Mbps pixely : štvorcové (Square pixels) rozlíšenie : 1920x1080, 768x432 pre 16:9 // výnimočne 1440x1080,

More information

Ochrana koncových staníc pomocou Cisco Security Agent 6.0. Ľubomír Varga.

Ochrana koncových staníc pomocou Cisco Security Agent 6.0. Ľubomír Varga. Ochrana koncových staníc pomocou Cisco Security Agent 6.0 Ľubomír Varga lubomir.varga@lynx.sk Agenda CSA 6.0 refresh Vybrané vlastnosti CSA 6.0 Application Trust levels Notify User Rule Actions User Justifications

More information

Kategória školenia Školenia Cisco obsahuje kurzy:

Kategória školenia Školenia Cisco obsahuje kurzy: Kategória školenia Školenia Cisco obsahuje kurzy: Cisco CCNA I - Úvod do počítačových sietí Školenie Cisco CCNA I - Úvod do počítačových sietí je určený záujemcom o počítačové siete a ich budúcim administrátorom.

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia mar.18 feb.18 jan.18 dec.17 nov.17 okt.17 sep.17 aug.17 júl.17 jún.17 máj.17 apr.17 mar.17 Internetová populácia SR 12+ 3 904 509 3 802 048 3 870 654 3 830

More information

INTERNET. História internetu

INTERNET. História internetu INTERNET 1 Úvod Internet je celosvetová počítačová sieť. Je všade okolo, ale nepatrí nikomu, nikto ho neriadi. Internet predstavuje najväčšie množstvo informácií dostupných z jedného miesta. Internet tvoria

More information

Podporované grantom z Islandu, Lichtenštajnska a Nórska prostredníctvom Finančného mechanizmu EHP a Nórskeho finančného mechanizmu

Podporované grantom z Islandu, Lichtenštajnska a Nórska prostredníctvom Finančného mechanizmu EHP a Nórskeho finančného mechanizmu Podporované grantom z Islandu, Lichtenštajnska a Nórska prostredníctvom Finančného mechanizmu EHP a Nórskeho finančného mechanizmu Závereč ný workshop projektu INEDU-GOV Inovatívne vzdelávanie pracovníkov

More information

VYLEPŠOVANIE KONCEPTU TRIEDY

VYLEPŠOVANIE KONCEPTU TRIEDY VYLEPŠOVANIE KONCEPTU TRIEDY Typy tried class - definuje premenné a metódy (funkcie). Ak nie je špecifikovaná inak, viditeľnosť členov je private. struct - definuje premenné a metódy (funkcie). Ak nie

More information

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15

Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 Základná(umelecká(škola(Jána(Albrechta Topoľčianska(15 851(01(Bra@slava Titl.: Ján(Hrčka Bohrova(11 851(01(Bra@slava V(Bra@slave(21.11.2013 Vec:(Odpoveď(na(informácie(ohľadom(mandátnej(zmluvy(na(základe(Zákona(č.(211/2000(Zb.

More information

1 Komplexný príklad využitia OOP

1 Komplexný príklad využitia OOP 1 Komplexný príklad využitia OOP Najčastejším využitím webových aplikácií je komunikácia s databázovým systémom. Komplexný príklad je preto orientovaný práve do tejto oblasti. Od verzie PHP 5 je jeho domovskou

More information

LL LED svietidlá na osvetlenie športovísk. MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám.

LL LED svietidlá na osvetlenie športovísk. MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám. LL LED svietidlá na osvetlenie športovísk MMXIII-X LEADER LIGHT s.r.o. Všetky práva vyhradené. Uvedené dáta podliehajú zmenám. LL SPORT LL SPORT je sofistikované vysoko výkonné LED svietidlo špeciálne

More information

Spôsoby zistenia ID KEP

Spôsoby zistenia ID KEP Spôsoby zistenia ID KEP ID KEP (kvalifikovaný elektronický podpis) je možné zistiť pomocou napr. ovládacieho panela, prostredíctvom prehliadača Internet Expolrer, Google Chrome alebo Mozilla Firefox. Popstup

More information

Mesačná kontrolná správa

Mesačná kontrolná správa Mesačná kontrolná správa Štrukturálna štúdia dec.16 nov.16 okt.16 sep.16 aug.16 júl.16 jún.16 máj.16 apr.16 mar.16 feb.16 jan.16 Internetová populácia SR 12+ 3 728 988 3 718 495 3 718 802 3 711 581 3 700

More information

MERANIE SOFTVÉRU. Jakub Šimko MSI

MERANIE SOFTVÉRU. Jakub Šimko MSI Slovenská Technická Univerzita v Bratislave Fakulta Informatiky a Informačných Technológií Jakub Šimko jsimko@fiit.stuba.sk MERANIE SOFTVÉRU 9.10.2012 MSI Meranie a metriky Kto by mal dávať pozor? Predsa

More information

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Jazyk SQL. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Jazyk SQL Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Jazyk SQL - Structured Query Language SQL je počítačový jazyk určený na komunikáciu s relačným SRBD neprocedurálny (deklaratívny) jazyk

More information

SIP v malých telekomunikačných systémoch. Convergence. A matter of lifestyle.

SIP v malých telekomunikačných systémoch. Convergence. A matter of lifestyle. SIP v malých telekomunikačných systémoch Convergence. A matter of lifestyle. Obsah Prehľad portfólia malých komunikačných systémov Aastra BusinessPhone - Úvod - Prehľad koncových telefónnych aparátov -

More information

Košice. Riešenia pre malé a stredné podniky

Košice. Riešenia pre malé a stredné podniky 28.09.2016 Košice Riešenia pre malé a stredné podniky Partnerský program Hewlett Packard Enterprise Partner Ready Výhody - Špeciálne ceny - Partner ready portál - Bezplatné školenia - Registrácia obchodného

More information

Distribuovaný riadiaci systém architektúra Klient server. Časť server (jadro, kernel)

Distribuovaný riadiaci systém architektúra Klient server. Časť server (jadro, kernel) Distribuovaný riadiaci systém architektúra Klient server. Časť server (jadro, kernel) Modulárna štruktúra distribuovaného riadiaceho systému Tvorba reportov Konfigurácia systému Vzdialená konzola SQL server

More information

JAVA. Sieťové programovanie

JAVA. Sieťové programovanie JAVA Sieťové programovanie Sieťové programovanie Sieťová knižnica jazyka JAVA bola vytvorená podľa súborovej knižnice Zapúzdrovanie pripojení do streamov Multithreading Identifikácia počítača Každý počítač

More information

BGP - duálne prepojenie AS. (primary + backup spoj), s IBGP, cez virtuální L2 linky

BGP - duálne prepojenie AS. (primary + backup spoj), s IBGP, cez virtuální L2 linky BGP - duálne prepojenie AS (primary + backup spoj), s IBGP, cez virtuální L2 linky Peter Jašica Abstrakt: Cieľom tohto projektu je zhotoviť a otestovať funkčnosť BGP s dvojitým prepojením Autonómnych systémov.

More information

Ceny kurzov a školení

Ceny kurzov a školení Ceny kurzov a školení Základy práce s PC Základy práce s PC, Internet,Word Cena: 133.00 Základy práce s počítačom a internetom Cena: 63.00 Windows v dennej praxi Cena: 69.00 Word + Excel základy Cena:

More information

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová

Ochrana proti DDoS za použitia open-source software. Katarína Ďurechová Ochrana proti DDoS za použitia open-source software Katarína Ďurechová katarina.durechova@nic.cz 30.11.2013 Distributed Denial of Service odopretie služby dosiahnutím limitu pripojenia sieťovej karty CPU

More information

Problém Big Data a ako ho riešiť pomocou NoSQL. Ján Zázrivec Softec

Problém Big Data a ako ho riešiť pomocou NoSQL. Ján Zázrivec Softec Problém Big Data a ako ho riešiť pomocou NoSQL Ján Zázrivec Softec Dáta dnešného sveta Oblasti kde sa spracováva veľké množstvo dát: Internet Web vyhľadávače, Sociálne siete Veda Large Hadron Collider,

More information

Crestron Mercury. Univerzálny Videokonferenčný a Kolaboračný systém

Crestron Mercury. Univerzálny Videokonferenčný a Kolaboračný systém Crestron Mercury Univerzálny Videokonferenčný a Kolaboračný systém Tradičná malá zasadacia miestnosť CRESTRON Mercury Videokonferenčná miestnosť Možnosť rezervácie miestnosti: Prostredníctvom MS Outlook

More information

Počítačové siete Bezpečnosť

Počítačové siete Bezpečnosť Počítačové siete Bezpečnosť Bezpečnostné problémy v sieťach dôvernosť integrita a autentickosť dostupnosť autentifikácia používateľov systémov riadenie prístupu 2 Bezpečnostné mechanizmy fyzická ochrana

More information

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP

Recipient Configuration. Štefan Pataky MCP, MCTS, MCITP Recipient Configuration Štefan Pataky MCP, MCTS, MCITP Agenda Mailbox Mail Contact Distribution Groups Disconnected Mailbox Mailbox (vytvorenie nového účtu) Exchange Management Console New User Exchange

More information

Databázy (1) Prednáška 11. Alexander Šimko

Databázy (1) Prednáška 11. Alexander Šimko Databázy (1) Prednáška 11 Alexander Šimko simko@fmph.uniba.sk Contents I Aktualizovanie štruktúry databázy Section 1 Aktualizovanie štruktúry databázy Aktualizácia štruktúry databázy Štruktúra databázy

More information

Microsoft Azure platforma pre Cloud Computing. Juraj Šitina, Microsoft Slovakia

Microsoft Azure platforma pre Cloud Computing. Juraj Šitina, Microsoft Slovakia Microsoft Azure platforma pre Cloud Computing Juraj Šitina, Microsoft Slovakia m Agenda Cloud Computing Pohľad Microsoftu Predstavujeme platformu Microsoft Azure Benefity Cloud Computingu Microsoft je

More information

Tvorba informačných systémov. 4. prednáška: Návrh IS

Tvorba informačných systémov. 4. prednáška: Návrh IS Tvorba informačných systémov 4. prednáška: Návrh IS Návrh informačného systému: témy Ciele návrhu ERD DFD Princípy OOP Objektová normalizácia SDD Architektonické pohľady UML diagramy Architektonické štýly

More information

Government Cloud. Stratégia využitia Cloud Computing-u vo Verejnej správe SR. Peter Kišša

Government Cloud. Stratégia využitia Cloud Computing-u vo Verejnej správe SR. Peter Kišša Government Cloud Stratégia využitia Cloud Computing-u vo Verejnej správe SR Peter Kišša Prečo? Aug, 2011 - Amazon launches US government cloud designed to meet the regulatory requirements of U.S. government

More information

VIRTUALIZÁCIA DÁTOVÝCH ÚLOŽÍSK. Karol Schütz, S&T Slovakia

VIRTUALIZÁCIA DÁTOVÝCH ÚLOŽÍSK. Karol Schütz, S&T Slovakia VIRTUALIZÁCIA DÁTOVÝCH ÚLOŽÍSK Karol Schütz, S&T Slovakia Agenda Časť Časť Časť Časť Časť Časť Časť 1 Aký je súčasný stav v oblasti ukladania dát 2 Aké sú požiadavky na súčasný storage 3 Aké sú technologické

More information

Nové komunikačné trendy v dátových centrách

Nové komunikačné trendy v dátových centrách Nové komunikačné trendy v dátových centrách Martin Vozár Roman Benko 25. november 2009 Cisco Expo, Bratislava Agenda 1. Konvergovaná architektúra 2. Komponenty architektúry 3. AVNET demo LAB 2 / 17 Konvergovaná

More information

Doručovanie multimedialného obsahu (Nástroje, metódy a riešenia) František Jakab November 2008

Doručovanie multimedialného obsahu (Nástroje, metódy a riešenia) František Jakab November 2008 Doručovanie multimedialného obsahu (Nástroje, metódy a riešenia) František Jakab November 2008 LPS - CNL Laboratórium Počítačových ových Sietí Computer Networks Laboratory» CNL!= Cisco Network Laboratory

More information

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona

Textový formát na zasielanie údajov podľa 27 ods. 2 písm. f) zákona Popis textového formátu a xsd schémy na zasielanie údajov podľa 27 ods. 2 písm. f) zákona (formu na zaslanie údajov si zvolí odosielateľ údajov) Textový formát na zasielanie údajov podľa 27 ods. 2 písm.

More information

Harmonogram. Portálové riešenia. Portálové riešenia. Portálové riešenia. Riešenia prístupu mobilných zariadení k web aplikáciám

Harmonogram. Portálové riešenia. Portálové riešenia. Portálové riešenia. Riešenia prístupu mobilných zariadení k web aplikáciám Software Group Software Group FIIT STU, 14.11.2006 Bohuš Pollák Slovensko Harmonogram Portálové technológie - JSR 168, WSRP Správa webového obsahu (Web Content Management) Týmová spolupráca SyncML Transcoding

More information

NÁKLADY ŽIVOTNÉHO CYKLU LIFE CYCLE COSTS

NÁKLADY ŽIVOTNÉHO CYKLU LIFE CYCLE COSTS NÁKLADY ŽIVOTNÉHO CYKLU LIFE CYCLE COSTS Jaroslav Lexa Apuen SK Kritériá ekonomicky najvýhodnejšej ponuky Most economically advantageous tender criteria Najlepší pomer ceny a kvality Best price-quality

More information

PODPORNÉ PROSTRIEDKY PRE VERZIOVANIE: VHODNÝ VÝBER PRE NÁŠ TÍM?

PODPORNÉ PROSTRIEDKY PRE VERZIOVANIE: VHODNÝ VÝBER PRE NÁŠ TÍM? PODPORNÉ PROSTRIEDKY PRE VERZIOVANIE: VHODNÝ VÝBER PRE NÁŠ TÍM? Budúcnosť je jasná, budúcnosť sú distribuované verziovacie systémy... alebo centralizované??? Balázs Nagy Slovenská technická univerzita

More information

Informačný portál Národnej rady Slovenskej republiky

Informačný portál Národnej rady Slovenskej republiky Informačný portál Národnej rady Slovenskej republiky Realizačný koncept, softvérová platforma, množina dostupných údajov, možnosti komunikácie s verejnosťou RNDr. Stanislav Dzurjanin, exe IT, spol. s r.

More information

DICOM Štandard pre vytváranie, ukladanie, tlač a prenos obrazových informácií v zdravotníctve

DICOM Štandard pre vytváranie, ukladanie, tlač a prenos obrazových informácií v zdravotníctve DICOM Štandard pre vytváranie, ukladanie, tlač a prenos obrazových informácií v zdravotníctve (Angl. DICOM - Digital Imaging and Communications in Medicine) Štandard DICOM je informačný technologický štandard,

More information

Transactions of the VŠB Technical University of Ostrava, Mechanical Series No. 2, 2008, vol. LIV, article No. 1632

Transactions of the VŠB Technical University of Ostrava, Mechanical Series No. 2, 2008, vol. LIV, article No. 1632 Transactions of the VŠB Technical University of Ostrava, Mechanical Series No. 2, 2008, vol. LIV, article No. 1632 Sylvia ROVŇÁKOVÁ *, Ondrej LÍŠKA ** LASER CUTTING MACHINE AND OPTIMISATION OF INPUT PARAMETERS

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS IMPLEMENTACE

More information

Poradové a agregačné window funkcie. ROLLUP a CUBE

Poradové a agregačné window funkcie. ROLLUP a CUBE Poradové a agregačné window funkcie. ROLLUP a CUBE 1) Poradové a agregačné window funkcie 2) Extrémy pomocou DENSE_RANK(), TOP() - Príklady 3) Spriemernené poradia 4) Kumulatívne súčty 5) Group By a Datepart,

More information

Hodnotenie kvality produktu

Hodnotenie kvality produktu Hodnotenie kvality produktu (2012/2013) Obsah 1. Úvod... 3 2. ISO 9126: Meranie kvality softvérového produktu... 3 2.1 ISO 9126-1: Model kvality... 4 2.2 ISO TR 9126-2: Externé metriky... 6 2.3 ISO TR

More information

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov

Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov Štruktúra údajov pre kontajner XML údajov 1. Dátové prvky pre kontajner XML údajov D.4 Kontajner XML údajov (XMLDataContainer) Príloha č. 11 k výnosu č. 55/2014 Z. z. [pridaná novelou č. 275/2014 Z. z.,

More information

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka

D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu. Inštalačná príručka D.Signer prostriedok pre vytváranie zaručeného elektronického podpisu Inštalačná príručka Obsah 1 Predpoklady pre inštaláciu D.Signer... 3 1.1 Inštalácia.NET Framework... 3 1.1.1 Windows 8, 8.1... 4 1.1.2

More information

Použitie MS Exchange 2010 v prostredí malej a strednej firmy

Použitie MS Exchange 2010 v prostredí malej a strednej firmy Bankovní institut vysoká škola Praha zahraničná vysoká škola Banská Bystrica Katedra kvantitatívnych metód a informatiky Použitie MS Exchange 2010 v prostredí malej a strednej firmy Using MS Exchange 2010

More information

BAKALÁRSKA PRÁCA. Cloud computing, jeho využitie a dopad na korporačné prostredie

BAKALÁRSKA PRÁCA. Cloud computing, jeho využitie a dopad na korporačné prostredie BAKALÁRSKA PRÁCA Cloud computing, jeho využitie a dopad na korporačné prostredie Cloud Computing, Its Utilization and Impact on the Corporation Sphere Vladimír Bálint Unicorn College 2011 Unicorn College,

More information

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami)

Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) I2AI: Lecture 04 Constraint satisfaction problems (problémy s obmedzujúcimi podmienkami) Lubica Benuskova Reading: AIMA 3 rd ed. chap. 6 ending with 6.3.2 1 Constraint satisfaction problems (CSP) We w

More information

UNIVERZITA KONŠTANTÍNA FILOZOFA V NITRE

UNIVERZITA KONŠTANTÍNA FILOZOFA V NITRE UNIVERZITA KONŠTANTÍNA FILOZOFA V NITRE FAKULTA PRÍRODNÝCH VIED BEZPEČNOSŤ MOBILNÝCH ZARIADENÍ DIPLOMOVÁ PRÁCA 2017 Bc. JAN FRANCISTI UNIVERZITA KONŠTANTÍNA FILOZOFA V NITRE FAKULTA PRÍRODNÝCH VIED BEZPEČNOSŤ

More information

Technická univerzita v Košiciach Strojnícka fakulta Ústav špeciálnych inžinierskych procesológií Katedra bezpečnosti a kvality produkcie

Technická univerzita v Košiciach Strojnícka fakulta Ústav špeciálnych inžinierskych procesológií Katedra bezpečnosti a kvality produkcie Technická univerzita v Košiciach Strojnícka fakulta Ústav špeciálnych inžinierskych procesológií Katedra bezpečnosti a kvality produkcie Katedra bezpečnosti a kvality produkcie KBaKP Kvalita Bezpečnosť

More information

Databázové systémy. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c)

Databázové systémy. Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) Databázové systémy Jaroslav Porubän, Miroslav Biňas, Milan Nosáľ (c) 2011-2016 Zdroje Ramez Elmasri, Shamkant B. Navathe: Fundamentals of Database Systems, Addison Wesley, 5 edition, 2006, 1168 p. ISBN

More information

SYSTÉM NA EVIDENCIU A KATEGORIZÁCIU

SYSTÉM NA EVIDENCIU A KATEGORIZÁCIU FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY UNIVERZITA KOMENSKÉHO BRATISLAVA Bakalárska práca SYSTÉM NA EVIDENCIU A KATEGORIZÁCIU ŠTANDARDIZAČNÝCH MATERIÁLOV Eva Porvazníková vedúci bakalárskej práce: Doc.

More information

Komunikácia medzi rôznymi Java (i nejava) aplikáciami

Komunikácia medzi rôznymi Java (i nejava) aplikáciami Komunikácia medzi rôznymi Java (i nejava) aplikáciami Už vieme: čítať z, zapisovať do textového alebo binárneho súboru (streams), komunikovať medzi výpočtovými vláknami cez zdieľanú pamäť = premenné, synchronizovať

More information

Úvod do hospodárskej informatiky (prednáška 7) František Babič

Úvod do hospodárskej informatiky (prednáška 7) František Babič Úvod do hospodárskej informatiky (prednáška 7) František Babič 2 Osnova Proces a podnikové procesy Procesná analýza BPMN Procesné riadenie Optimalizácia procesov Reinžiniering 3 Proces (1) Súhrn činností,

More information

Využitie Big Data technológií pre skvalitnenie výskumu a vzdelávania

Využitie Big Data technológií pre skvalitnenie výskumu a vzdelávania Využitie Big Data technológií pre skvalitnenie výskumu a vzdelávania Eugen Molnár Copyright 2012 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without

More information

Centralized lubrication systems Metering technology Mixing technology LubTec 1K dávkovacie zariadenie

Centralized lubrication systems Metering technology Mixing technology LubTec 1K dávkovacie zariadenie LubTec 1K dávkovacie zariadenie Doprava a dávkovanie jednokomponentových materiálov s vysokou presnosťou Firma LubTec s.r.o. Už viac ako 10 rokov navrhuje, plánuje a stavia 1K dávkovacie zariadenia podľa

More information

Návod na odstránenie certifikátov so zrušenou platnosťou

Návod na odstránenie certifikátov so zrušenou platnosťou Návod na odstránenie certifikátov so zrušenou platnosťou Dátum zverejnenia: 7. 11. 2017 Verzia: 1 Dátum aktualizácie: Popis: Tento dokument je určený používateľom, ktorí elektronicky podpisujú dokumenty

More information

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1

VLSM a CIDR. CCNA2 Kapitola Cisco Systems, Inc. All rights reserved. Cisco Public 1 VLSM a CIDR CCNA2 Kapitola 6 1 Trošku histórie Pred rokom 1981 IP adresy používali na špecifikáciu siete len prvých 8 bitov Rok1981, RFC 791 Zaviedol adresný priestor s tromi triedami adries Polovica 90

More information

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals...

Desatinné čísla #1a. Decimal numbers #1b. How much larger is 21,8 than 1,8? Desatinné čísla #2a. Decimal numbers #2b. 14 divided by 0,5 equals... Desatinné čísla #1a Mravec išiel 5,5 cm presne na sever, potom 3,4 cm na východ, 1,8 cm na juh, 14,3 cm na západ, 1,3 cm na sever a 10,9 cm na východ. Najmenej koľko cm musí teraz prejsť, aby sa dostal

More information

NIKY a NIKY S. JEDNOFÁZOVÉ UPS od 600 do 3000 VA SVETOVÝ ŠPECIALISTA PRE ELEKTRICKÉ INŠTALÁCIE A DIGITÁLNE SYSTÉMY BUDOV

NIKY a NIKY S. JEDNOFÁZOVÉ UPS od 600 do 3000 VA SVETOVÝ ŠPECIALISTA PRE ELEKTRICKÉ INŠTALÁCIE A DIGITÁLNE SYSTÉMY BUDOV NIKY a NIKY S JEDNOFÁZOVÉ UPS od 600 do 3000 VA SVETOVÝ ŠPECIALISTA PRE ELEKTRICKÉ ŠTALÁCIE A DIGITÁLNE SYSTÉMY BUDOV Ideálna ochrana pre malé kancelárie a domáce kancelárske aplikácie. Tento rad ponúka

More information

Zavedenie produktu do portfólia IT spoločnosti

Zavedenie produktu do portfólia IT spoločnosti Masarykova univerzita Fakulta informatiky Zavedenie produktu do portfólia IT spoločnosti Diplomová práca Bc. Pavol Katrenčík Brno, jar 2017 Prehlásenie Prehlasujem, že táto diplomová práca je mojím pôvodným

More information

E-LEARNING PRE PREDMET AOS

E-LEARNING PRE PREDMET AOS Žilinská univerzita v Žiline Elektrotechnická fakulta Katedra experimentálnej elektrotechniky E-LEARNING PRE PREDMET AOS Lukáš PACULÍK 2008 E-learning pre predmet AOS BAKALÁRSKA PRÁCA LUKÁŠ PACULÍK ŽILINSKÁ

More information

INFORMAČNÉ SYSTÉMY V MARKETINGU

INFORMAČNÉ SYSTÉMY V MARKETINGU SLOVENSKÁ POĽNOHOSPODÁRSKA UNIVERZITA V NITRE FAKULTA EKONOMIKY A MANAŽMENTU Ing. Peter Stuchlý, PhD. INFORMAČNÉ SYSTÉMY V MARKETINGU (INTERNÝ UČEBNÝ TEXT) NITRA, 2016 Interný učebný text k predmetu: Informačné

More information

Microsoft SQL Server 2000 Reportovacie služby

Microsoft SQL Server 2000 Reportovacie služby Ľuboslav Lacko Microsoft SQL Server 2000 Reportovacie služby Čo je managed reporting? Architektúra a filozofia produktu Reportovacie služby z pohľadu vývojára Reportovacie služby z pohľadu administrátora

More information

REPREZENTACE OBSAHU SÍŤOVÉHO PROVOZU V XML

REPREZENTACE OBSAHU SÍŤOVÉHO PROVOZU V XML VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS REPREZENTACE

More information

Novinky vo Windows Azure & Scenáre. Ľubomír Goryl Solution Professional Microsoft Slovakia, s.r.o

Novinky vo Windows Azure & Scenáre. Ľubomír Goryl Solution Professional Microsoft Slovakia, s.r.o Novinky vo Windows Azure & Scenáre Ľubomír Goryl (lgoryl@microsoft.com) Solution Professional Microsoft Slovakia, s.r.o Obsah Scenáre Virtual machines BackUp Web, Aplikácie Virtual Machines Produkčné prostredie

More information

Grid Computing Implementácia služby v Globus Toolkite (Diplomová práca)

Grid Computing Implementácia služby v Globus Toolkite (Diplomová práca) Katedra Informatiky Fakulta Matematiky, Fyziky a Informatiky Univerzita Komenského, Bratislava Grid Computing Implementácia služby v Globus Toolkite (Diplomová práca) Bc. Peter Bajči Školiteľ: RNDr. Andrej

More information

Využitie System Center Configuration Manager v univerzitnom prostredí

Využitie System Center Configuration Manager v univerzitnom prostredí Bankovní institut vysoká škola Praha zahraničná vysoká škola Banská Bystrica Katedra kvantitatívnych metód a informatiky Využitie System Center Configuration Manager v univerzitnom prostredí Utilization

More information

Metody optimalizace činností firemních struktur. Filip Stránsky

Metody optimalizace činností firemních struktur. Filip Stránsky Metody optimalizace činností firemních struktur Filip Stránsky Bakalářská práce 2015 ABSTRAKT Hlavnou témou tejto práce sú metódy a nástroje zlepšovania podnikových činností. V teoretickej časti sú

More information

Prídavný modul pre BACnet cez Ethernet / IP a grafické WEB funkcie

Prídavný modul pre BACnet cez Ethernet / IP a grafické WEB funkcie s 9 265 9263p01 DESIGO PX Prídavný modul pre BACnet cez Ethernet / IP a grafické WEB funkcie Modul určený pre PXC-U PXA30-W2 Umožňuje staniciam PXC -U v systéme DESIGO komunikovať pomocou BACnet cez Ethernet

More information

Internet. Princípy Internetu

Internet. Princípy Internetu Internet Najväčšia počítačová sieť sieť sietí Verejne dostupná počítačová sieť, spájajúca veľa menších sietí po celom svete Internet : počítače a zariadenia, ktoré zabezpečujú komunikáciu medzi nimi služby,

More information

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY INFORMAČNÍ STRATEGIE PODNIKU FAKULTA PODNIKATELSKÁ ÚSTAV INFORMATIKY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY INFORMAČNÍ STRATEGIE PODNIKU FAKULTA PODNIKATELSKÁ ÚSTAV INFORMATIKY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA PODNIKATELSKÁ ÚSTAV INFORMATIKY FACULTY OF BUSINESS AND MANAGEMENT INSTITUTE OF INFORMATICS INFORMAČNÍ STRATEGIE PODNIKU CORPORATE INFORMATION

More information

Programovanie v jazyku Python. Michal Kvasnica

Programovanie v jazyku Python. Michal Kvasnica Programovanie v jazyku Python Michal Kvasnica Organizačné detaily Prednášky aj cvičenia v 638 Povinná účasť na cvičeniach Hodnotenie: priebežné odovzdávanie zadaní (40% známky) záverečný projekt na skúške

More information

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára

REPORT DESIGNER 1 VYTVORENIE A ÚPRAVA FORMULÁRA. úprava formulárov v Money S4 / Money S Vytvorenie formulára REPORT DESIGNER úprava formulárov v Money S4 / Money S5 Informačný systém Money S4/S5 umožňuje upraviť tlačové zostavy tak, aby plne vyhovovali potrebám používateľa. Na úpravu tlačových zostáv slúži doplnkový

More information

Nový Office. Pre stredné a veľké podniky. Služba. Ovládanie dotykom. zariadenie

Nový Office. Pre stredné a veľké podniky. Služba. Ovládanie dotykom. zariadenie Nový Office Pre stredné a veľké podniky. Na každé zariadenie Roaming Ovládanie dotykom Služba Hlavné zásady Porovnanie balíkov Office 365 a Office 2013 Office 365 Multilicencia Office 2013 Nový Office

More information

REALIZÁCIA VIRTUÁLNEHO LABORATÓRIA S VYUŽITÍM XPC TARGET-u

REALIZÁCIA VIRTUÁLNEHO LABORATÓRIA S VYUŽITÍM XPC TARGET-u REALIZÁCIA VIRTUÁLNEHO LABORATÓRIA S VYUŽITÍM XPC TARGET-u I. Masár Department of Electrical Engineering Control Systems Engineering Group, University of Hagen Universitätsstr. 27, 580 97 Hagen, Germany

More information

SMARTPHONE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS

SMARTPHONE FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÝCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS ZABEZPEČENÁ KOMUNIKACE

More information

Aké sú dostupné verzie opračných systémov v rámci katalógu služieb

Aké sú dostupné verzie opračných systémov v rámci katalógu služieb FAQ technické Aké sú časti vládneho cloudu? Máme dve dátové centra DC Tajov a DC Kopčianska. Aké IaaS služby sú v aktuálnom katalógu služieb? Podrobný zoznam aktuálne poskytovaných služieb je možné nájsť

More information

Počítače a zariadenia

Počítače a zariadenia Modul 2: Základy práce s počítačom Počítače a zariadenia www.itakademia.sk ITMS2014+: 312011F057 1 Počítače a zariadenia 1.1 IKT 1.1.1 Vedieť vymedziť pojem informačné a komunikačné technológie (IKT) Skratka

More information

AR6181-MX, AR6182-MX Čítačky MIFARE kariet

AR6181-MX, AR6182-MX Čítačky MIFARE kariet AR6181-MX, AR6182-MX Čítačky MIFARE kariet ISO14443-A, ISO14443-B a ISO15693 Systém kontroly vstupu 13,56 MHz proximity technológia Jednoduchá konfigurácia čítačky použitím konfiguračnej karty Možnosť

More information

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit.

Rýchlosť Mbit/s (download/upload) 15 Mbit / 1 Mbit. 50 Mbit / 8 Mbit. 80 Mbit / 10 Mbit. 10 Mbit / 1 Mbit. 12 Mbit / 2 Mbit. Fiber 5 Mbit ** 5 Mbit / Mbit 5,90 Fiber 50 Mbit * 50 Mbit / 8 Mbit 9,90 Fiber 80 Mbit * 80 Mbit / Mbit 5,90 Mini Mbit* Mbit / Mbit 9,90 Klasik 2 Mbit* 2 Mbit / 2 Mbit Standard 8 Mbit* 8 Mbit / 3Mbit Expert

More information

Windows NT, Windows 2000, Windows 2003 Základné vlastnosti

Windows NT, Windows 2000, Windows 2003 Základné vlastnosti Gymnázium Ľudovíta Štúra Hronská 1467/3 Zvolen Windows NT, Windows 2000, Windows 2003 Základné vlastnosti Školský rok 2016/2017 Ľuboslav Halama III.A Obsah Windows NT... 2 Windows 2000... 3 Windows 2003...

More information

Cvičenie z PTS

Cvičenie z PTS Cvičenie z PTS 23.3.2010 riadenie + QM + CM +... Návrh systému požiadavky návrh implementácia validácia Návrh hlavným cieľom je určiť, ako bude daný SW produkt realizovaný hlavný vstup: špecifikácia požiadaviek

More information

IT služby. Manažment IT služieb ITSM. IT služby ITSM. Manažment IT služieb. IT služby sú služby, ktoré poskytuje IT oddelenie

IT služby. Manažment IT služieb ITSM. IT služby ITSM. Manažment IT služieb. IT služby sú služby, ktoré poskytuje IT oddelenie IT služby IT služby IT = Information Technology IT služby sú služby, ktoré poskytuje IT oddelenie užívateľom a oddeleniam mimo IT. Užívateľmi IT služieb môžu byť zamestnanci, alebo celé oddelenia firmy

More information

WEBOVÝ MODUL NA SPRÁVU DOVOLENKY

WEBOVÝ MODUL NA SPRÁVU DOVOLENKY WEBOVÝ MODUL NA SPRÁVU DOVOLENKY Róbert Lanák Ústav informatizácie, automatizácie a matematiky Oddelenie informatizácie a riadenia procesov Fakulta chemickej a potravinárskej technológie Slovenská Technická

More information

ZMLUVA O ADMINISTRÁCII POČÍTAČOVEJ SIETE

ZMLUVA O ADMINISTRÁCII POČÍTAČOVEJ SIETE - 1 - ZMLUVA O ADMINISTRÁCII POČÍTAČOVEJ SIETE Objednávateľ: Sídlo: Zastúpený: IČO: DIČ: IČ DPH: /ďalej ako užívateľ/ a Zhotoviteľ: Jozef Tóth T SOFT Sídlo: Peder č. 107, 044 05 Peder IČO: 41 941 161 DIČ:

More information

Ekonomický pilier TUR

Ekonomický pilier TUR Názov indikátora: HDP na obyvateľa Zaradenie indikátora v DPSIR štruktúre: Základné informácie: SR Definícia Hrubý domáci produkt vyjadrovaný ako celková peňažná hodnota statkov a služieb vytvorených za

More information

Databázové systémy. 10. prednáška. NoSQL databázy Viktor Škultéty, ESTEN s.r.o.

Databázové systémy. 10. prednáška. NoSQL databázy Viktor Škultéty, ESTEN s.r.o. Databázové systémy 10. prednáška NoSQL databázy 26.4.2016 Viktor Škultéty, ESTEN s.r.o. 1 Prečo doteraz SQL a zrazu NoSQL? NoSQL - Not Only SQL znamená, že relačné systémy sú síce osvedčená technológia

More information

NOVÉ NORMY PRE SYSTÉMY MANAŽÉRSTVA

NOVÉ NORMY PRE SYSTÉMY MANAŽÉRSTVA NOVÉ NORMY PRE SYSTÉMY MANAŽÉRSTVA New Standards for Management Systems Abstrakt Ľubomír BELAN FBI UNIZA, Katedra bezpečnostného manažmentu, Ul.1.mája 32, 010 26, Žilina, SR Lubomir.Belan@fbi.uniza.sk

More information

Servisne orientované architektúry (SOA)

Servisne orientované architektúry (SOA) Bankovní institut vysoká škola Praha zahraničná vysoká škola Banská Bystrica Katedra kvantitatívnych metód a informatiky Servisne orientované architektúry (SOA) Service oriented architectures (SOA) Bakalárska

More information