VGTU internetinio portalo tobulinimui, panaudojant duomenų bazių ir dinaminių internetinių puslapių privalumus – baigiamasis darbas

2    Įvadas

Šis darbas skirtas VGTU internetinio portalo tobulinimui, panaudojant duomenų bazių ir dinaminių internetinių puslapių privalumus.
Pačioje Internetinio voratinklio vystymosi pradžioje visų tinklalapių turiniai buvo pilnai statiniai HTML arba tekstiniai failai. Statinis dokumentas yra paprasčiausiai bet kuris tinklalapis, kuris yra išsaugomas diske ir gražinamas į naršyklę be pakeitimų.  Net gi dabar, tikriausiai daugelis internetinių tiklalapių yra statiniai puslapiai, nors pusiausvyra tikrai kinta. Jeigu pamėgintume suskaičiuoti puslapių, kurie peržiūrimi tokiame pavidale kaip jie buvo sukurti kiekį, su puslapių, kurie „guli“ milijonuose tinklalapių, laukdami kol bus peržiūrėti kiekiu, tai tikėtina, kad didesnė dauguma jų šiandien bus dinaminiai.
Dinaminis tinklalapis – tai bet kuris tinklalapis, kurio turinį keičia programa arba scenarijus tuo momentu, kai jis yra iškviečiamas peržiūrai. Paprasti pavyzdžiai tokių trivialių dinaminių puslapių būtų, tokie puslapiai, kurie rodo lankytojų skaitliuką arba dabartinę datą ir laiką.
Naudingesni yra rezultatų puslapiai, kurie grąžinami, kai vartotojas nusiunčia tinklo anketą. Anketa, pati savaime gali būti statinė arba dinaminė, tačiau rezultatų puslapis visada turi būti dinaminis, nebent anketa yra fiktyvi. Logiška, kad kai vartotojas įveda kintamus duomenis į anketą ir anketa yra apdirbama, rezultatai turi būti kintami.
Galiausiai kai kurie tinklalapiai yra visiškai dinaminiai, kadangi visas turinys yra saugomas duomenų bazėje ir perduodamas į tinklalapį tuoj pat kai tinklalapis iškviečiamas peržiūrai.   Taip daroma dažniausiai siekiant sumažinti tinklalapio išlaikymo kaštus. Kadangi šiuo atveju vartotojas nežinantis HTML gali įvesti turinį į duomenų bazę naudodamas paprastą, lengvai suprantamą sąsają. Kai turinys yra paimamas iš duomenų bazės jis sujungiamas su šablonu, kuris suteikia komponentus, bendrus visam tinklalapiui arba tam tikrai tinklalapio daliai.
Dinaminių tinklalapių sukūrimo kaina yra didesnė už statinių, tačiau palaikymas – žymiai pigesnis. Taip yra dėl kelių priežasčių. Paprasčiausiai, kaip jau buvo minėta, statiniai tinklalapiai yra atskirų HTML puslapių, kurie buvo sukurti atskirai ir pakrauti į internetinį voratinklį rinkinys. Jeigu jūs norite pakeisti puslapį statiniame tinklalapyje, jūs turėsite redaguoti konkretų puslapį, o tai dažniausiai daro tinklalapio dizaineris (web designer).
Dinaminių tinklalapių atveju, HTML puslapiai (šablonai) yra sukuriami tik informacijos pateikimui, tačiau visas jų turinys saugomas duomenų bazėje. Dinaminis tinklalapis dažniausia turi slaptažodžiu apsaugotą administravimo sritį, kur bet kuris kompanijos – tinklalapio savininkės narys, turintis tam teisę, gali redaguoti tinklalapio puslapius.
Taigi kaip matome, dinaminiai tinklalapiai žymiai geriau pritaikyti didelių, greitai kintančių tinklalapių savininkams. Tokius tinklalapius dažniausia turi :
a.    įvairios kompanijos, savo reikmėms
b.    interneto portalai
c.    švietimo įstaigos
Šiuo atveju dėmesys bus skiriamas  švietimo įstaigos, universiteto internetiniu portalui.
Didelė universitetinių portalų pateikiamos informacijos dalis, kinta pakankamai greitai (naujienos, priėmimo taisyklės, personalas, studijų sistema ir pan.) . Taigi dinaminio portalo sukūrimas žymiai palengvintų universitetinio portalo valdymą. Panaudojus naujausias technologijas toks portalas, galėtų ne tik tapti lengvai atnaujinamu bei administruojamu, bet ir įgytų naujų galimybių. Pvz. Kiekvienas fakultetas galėtų savarankiškai tvarkyti savo informaciją portale.
VGTU internetinis portalas nėra dinaminio tipo, čia dinaminės technologijos naudojamos tik paieškos organizavimui, bet ne paties turinio keitimui. Statinio portalo laipsniškas keitimas į dinaminį leistų lengviau administruoti portalą (minėta aukščiau), bei padarytų jį novatoriškesnį, labiau atitinkantį šiuolaikines tendencijas.
Dinaminiam tinklalapiui kurti skirtų technologijų pasirinkimas yra pakankamai platus.  Galimi įvairūs jų tarpusavio sąveikos variantai. Plačiausiai naudojamos šios technologijos: ASP (Active Server Pages), PHP, Perl, Python programavimo kalbos kartu su MySQL, PostgreSQL, Oracle, Access duomenų bazėmis. Kiekviena šių technologijų turi savo  privalumus ir trūkumus, kurie bus aptarti vėliau.  Vykdant ši projektą buvo pasirinktas PHP ir MySQL derinys.  Naudojant šias technologijas sukurtas saugaus prisijungimo prie administravimo sistemos,daugiavartotojiškumo, teksto bei grafikos keitimo moduliai.

3    Problemos aktualumas, keliami tikslai
Lietuvoje sparčiai besivystant internetinei visuomenei, vis daugiau įmonių, organizacijų kuria savo internetinius tinklalapius, portalus, kurie padėtų jiems reklamuotis, prisistatyti visuomenei. Daugelis tokių tinklalapių talpina bendrą informaciją apie organizaciją, kuri dažnai nesikeičia bei naujienas, pristatomas pasaugas, prekes, kurios kinta laikui bėgant. Taigi, kuriant internetinį portalą iškyla problema, kaip išspręsti informacijos atnaujinimo klausimą.  Galimi keli sprendimo variantai:
•    kurti visiškai statinio turinio tinklalapį ir informacijos atnaujinimą atlikti web tinklalapio administratoriams
•    kurti dinaminį puslapį, kur informaciją keisti galėtų bet koks darbuotojas
Statiniai tinklalapiai dažniausia, kuriami kai:
•    tinklalapis yra mažas
•    Informacija dažnai nekinta
•    Kaina yra lemiamas veiksnys
Dinaminiai puslapiai, kuriami kai:
•     Tam tikros tinklalapio dalys linkusios dažnai keistis (naujienos, paslaugos ir pan.)
•    tinklalapis reikalauja papildomų galimybių (vartotojų registracijos, paieškos galimybių)
•    Interneto svetainėje reikia sutalpinti daug arba labai daug informacijos
•    Galimybės ir funkcionalumas yra lemiamas veiksnys.
Atlikus Lietuvos aukštųjų mokyklų internetinių svetainių analizę buvo nustatyta, jog didesnė jų dalis yra visiškai arba iš dalies dinaminės. (7.1 1 Lent.) Išsiskiria Vilniaus Pedagoginio universiteto svetainė, kuri  atlikta naudojat PHP technologija ir atrodo kaip profesionali, taip pat neblogas Klaipėdos universiteto variantas.
Aukštoji mokykla    Portalo tipas    Technologija
VU (Vilniaus)    Statinis    HTML
VPU (Vilniaus Pedagoginis)    Dinaminis    PHP
VGTU (Vilniaus Gedimino technikos)    Statinis    HTML
KTU (Kauno technologijos)    Dinaminis    ASP
VDU (Vytauto Didžiojo)    Statinis    HTML
ŠA (Šiaulių)    Dalinai dinaminis    PHP
KU (Klaipėdos)    Dinaminis    PHP
7.1 1 Lent. Lietuvos aukštųjų mokyklų svetainių technologijos
Taigi daugelis aukštųjų mokyklų stengiasi supaprastinti savo svetainių administravimą. Kadangi VGTU svetainėje pateikiama informacija taip pat yra kintanti, nuspręsta  ją pertvarkyti į dinaminę. Nuspręsta sukurti teksto manipuliavimo, grafikos keitimo bei vartotojų administravimo modulius.
Šiems uždaviniams spęsti egzistuoja daug technologijų, todėl padaryta detali esamų sprendimų analizė ir pasirinkta viena iš technologijų.
4    Duomenų bazės
4.1    Kas yra duomenų bazė
Mūsų laikais dažnai girdimas terminas duomenų bazės. Kompiuteriai sudaro neatskiriamą šiuolaikinės visuomenės dalį, todėl neretai galima išgirsti tokias frazes kaip : „ aš paieškosiu  tavo įrašo duomenų bazėje.“ Ir kalba eina ne apie dideles dėžes, kur saugoma krūva aplankų, o apie kompiuterines sistemas, skirtas pagreitintai informacijos paieškai. Duomenų bazės – tai viena svarbiausių šiuolaikinių kompiuterinių technologijų. Duomenų baze (DB) galima vadinti rinkinį tarpusavyje susijusiu duomenų, kurie apdorojami programomis. (R. Baronas. duomenų bazių sistemos [1]). Tokia duomenų bazė, loginiu požiūriu, yra panaši į elektroninę kartoteką. Studentų kartotekos pavyzdys lentele pateiktas (7.1 1 Lent.)
7.1 1 Lent. Studentų duomenų bazė

Panašios duomenų bazės (kartotekos) vartotojai atlieka tokias operacijas:
• naujo įrašo (naujos kortelės) įtraukimas;
• esamo įrašo (kortelės duomenų) keitimas;
• esamo įrašo (kortelės) šalinimas;
• duomenų paieška duomenų bazėje (kartotekoje).

4.2    Duomenų bazių privalumai
4.2.1    Priėjimo priemonių unifikavimas
Pirmasis duomenų bazių privalumas – tai unifikuota sąsaja. Nereikia iš naujo „kurti dviračio“  ir pastoviai kurti naujus duomenų manipuliavimo modulius. Visi kreipimaisi į duomenų bazę centralizuojami DBVS (Duomenų bazės valdymo sistemos) lygyje.
Duomenų bazėje informacija pateikiama vienodu būdu. Informacija apie tai, kaip struktūrizuoti duomenys ir kaip jie surišti vienas su kitu, saugoma pačioje duomenų bazėje metaduomenų pavidalu. Tai leidžia DBVS turėti savo žinioje universalias paprogrames.
Darbas su paprastomis („plokščiomis“)  bylomis, kuris atliekamas naudojant trečiojo (3GL) lygio kalbas, reikalauja profesionalių programavimo įgūdžių. Kiekviena paprogramė traktuoja bylą  savaip, priklausomai nuo bylos atributų. Tokio adaptavimo rezultatas – bet koks pakeitimas duomenų struktūroje įtakos kaskadinius programų, priklausomų nuo tų struktūrų, pakeitimus. Įsivaizduokime, kad laukas, talpinęs penkiaženklį pašto indeksą, dabar turi talpinti devynženklį kodą. Pirma, egzistuojančius duomenis reiks perkonvertuoti į naują formatą specialių programų pagalba. Antra, teks perrašyti bet kurią programą, dirbančią su tokio formato byla. Tokio sprendimo ypatumas yra tai, jog programose daromos žymūs duomenų struktūros pakeitimai.
Duomenų bazės naudojant yra lankstesnės. Jos leidžia programoms dirbti su duomenimis loginiame lygyje,  ignoruojant fizinę struktūrą. Duomenų formato pakeitimas gali neiššaukti jokių sąsajos, tai gi ir pačių programų pakeitimų.
Galiausia šiuolaikinės duomenų bazės palaiko specialią užklausų kalbą, leidžiančią kurti atsitiktinį duomenų išrinkimą.  Tokios užklausų kalbos egzistavimas palengvina  eilinių vartotojų užduotį, formuluojant ataskaitų sudarymo instrukcijas.

4.2.2    Našumo padidėjimas
Duomenų bazės padidina informacijos apdorojimo našumą,  koncertuojant duomenų manipuliavimo funkcijas viename modulyje, kurį galima optimizuoti. Jos prisiima atsakomybę už efektyviausią  informacijos valdymą. Visa, kas ir kaip vyksta fiziniame lygyje, yra paslėpta nuo vartotojo, kuris mato tik loginį duomenų modelį.
Dėka to, jog duomenų apdirbimo funkcijos sukoncentruotos viename modulyje, šį modulį galima naudoti prieinant prie visų duomenų bazių. O tai, savo ruožtu, reiškia, jog tokio modulio darbo pagerėjimas, įtakoja visų programų, besikreipiančių per šį modulį į duomenų bazes, pagreitėjimą.
Kitas našumo didinimo šaltinis – tai daugiavartotojiško darbo galimybė. Duomenų bazės kontroliuoja visus kreipimus į saugomą informaciją ir gali vykdyti kelias užklausas vienu metu. Palyginus su paprastomis bylomis, kurias konkrečiu metu gali  atidaryti  įrašymui (o dažnai ir skaitymui) tik vienas procesas.

4.2.3    Vientisumo sustiprinimas
Duomenų bazės supaprastina duomenų struktūrizavimo užduotį, leisdamos išvengti nereikalingo dubliavimosi. Pavyzdžiui, lentelių sujungimo operacijų dėka, atsiranda galimybė sutelkti vienarūšę informaciją vienoje lentelėje, nurodant į ją kitose lentelėse unikalaus rakto pagalba. Tai leidžia pašalinti konfliktus, atsirandančius nepilnų atnaujinimų atveju. Pavyzdžiui, jeigu kliento adresas būtų saugomas dvejose skirtingose vietose, jį būtų galima pakeisti vienoje vietoje ir pamiršti pakeisti kitoj. Reliacinėje duomenų bazėje galima saugoti visus adresus vienoje lentelėje, nurodant į ją kitose lentelėse esant reikalui.
DBVS kontroliuoja duomenų vientisumą, remiantis formaliais apibrėžimais, saugomais duomenų bazėje. Pavyzdžiui, jeigu kuriant lentelę buvo nurodyta, kad toks tai laukas saugo datas, tai DBVS neleis įvesti į datos lauką kito tipo reikšmes. Žiūrint iš fizinio lygmens pusės datos lauke galima įrašyti ir sveikaskaitmeninę reikšmę, bet DBVS vadovausis loginėmis taisyklėmis, kurios buvo nurodytos vartotojo.
DBVS sugeba taip pat kontroliuoti santykius tarp lentelių. Galima, pavyzdžiui, nustatyti taisyklę,  pagal kurią dviejų lentelių laukai taps surištais. DBVS garantuoja, kad pavaldaus lauko reikšmė visada pateks į pagrindinio lauko reikšmių diapazoną.

4.3    Duomenų bazių trūkumai
Nežiūrint į daugybę privalumų, duomenų bazės neišsprendžia visų problemų, susijusių su duomenų valdymu. Tam kad duomenų bazės atneštų realią naudą, reikia  jas teisingai naudoti. Iš tikrųjų niekas netrukdo vartotojui  sudubliuoti duomenis keliose vietose – niekas, išskyrus  kruopščiai atliktas projektavimo.
Tam tikrą sunkumą sudaro skirtumai, susiję su konkrečių DBVS realizavimu.  Egzistuoja tarptautiniai SQL kalbos standartai, bet mažai kuris DBVS gamintojas atsispiria pagundai papildyti standartą savais praplėtimais.
4.4    DBVS
Darbui su duomenų baze būtina DBVS (duomenų bazės valdymo sistema), t.y. programa, kuri atlieka visas užduotis, susijusias su priėjimu prie duomenų. Ji turi komandas, leidžiančias kurti lenteles, įterpti į jas duomenis, ieškoti ir trinti įrašus.
Tokių DBVS pasirinkimas yra gana platus, jos skirias kaip savo galimybėmis, taip ir kaina bei resursų poreikiu.  DBVS pasirūpina, kad įrašai ir lentelės kietame diske būtų saugomi efektyviai.  Daugelis DBVS funkcionuoja pagal modelį „klientas/serveris“. Tai suprantama kaip tinklo architektūra, kurioje kompiuteriai vaidina klientų ir serverių vaidmenis. Serveriai paprastai turi galingesnius resursus ir skirti tiekti paslaugas klientų grupėms. Būtent serveriuose koncentruojasi duomenys ir skaičiuojamoji galia, tuo tarpu kai klientuose būna sąsajos su serveriu programos, kurių pagalba vartotojai gauna priėjimą prie serverio resursų. 7.2.3 1 Pav. pavaizduota informacijos perdavimo schema tarp kliento kompiuterio ir kieto disko serveryje.

Juozas dirba su DBVS kliento programa, kuri prisijungia prie serverio per tinklą. Komandos, kurias vykdo serveris dažniausia susijusios su duomenų rašymu ir skaitymu kietajame diske.
DBVS valdo vieną ar kelias duomenų bazes.
Programuotojas, dirbantis su duomenų baze, nesirūpina tuo kaip duomenys saugomi ir taikomosios programos sąveikaujančios su  DBVS nežino apie duomenų įrašymo būdą diske. „Išorėje“ matomas tik loginis duomenų vaizdas, ir tai leidžia keisti DBVS kodą, nepaliečiant pačių taikomųjų programų kodo.  Toks duomenų apdorojimas realizuojamas  naudojant ketvirto lygio (4GL)  kalbą , kuri palaiko įrašomas ir nedelsiant atliekamas užklausas. Duomenys greitai praranda savo aktualumą, todėl jų pasiekimo greitis yra svarbus. Bet to, programuotojas turi turėti galimybę formuluoti naujas užklausas. Jos vadinamos nereglamentuotomis  (ad hoc), kadangi nėra saugomos pačioje duomenų bazėje.
Ketvirto lygio kalba leidžia sudarinėti schemas – tikslius duomenų bei sąryšių tarp jų nustatymus. Schema saugoma kaip duomenų bazės dalis ir gali būti pakeista nesugadinus duomenims.
Schema skirta duomenų vientisumo kontrolei. Jeigu pavyzdžiui paskelbta, kad laukas talpina sveikaskaitmenines reikšmes, tai DBVS atsisakys įrašyti į jį skaičius su slankiuoju kalbeliu arba eilutes. Sąryšiai tarp įrašų taip pat griežtai kontroliuojami ir nesuderinti duomenys nepriimami. Operacijas galima grupuoti į transakcijas, vykdomas pagal principą „viskas arba nieko“.
DBVS atsako už duomenų saugumą. Vartotojams suteikiamos nustatytos priėjimo prie informacijos teisės. Kai kuriems vartotojams leidžiama tik peržiūrėti duomenis, tuo tarpu kai kiti vartotojai gali keisit lentelių turinį ar kurti pačias lenteles.
DBVS palaiko lygiagretų priėjimą prie duomenų bazės. Taikomosios programos gali kreiptis į duomenų bazę vienu laiku, kas padidina bendrą sistemos našumą. Be to, atskiros operacijos gali būti „paskirstomos“ tam, kad dar labiau padidinti našumą.
Pagaliau  DBVS padeda atstatyti informaciją nenumatyto sutrikimo atveju, nematant vartotojams, sudarydama rezervines duomenų kopijas. Visi pakeitimai, daromi duomenų bazėje, registruojami , todėl operacijas galima atšaukti ir įvykdyti iš naujo.

4.5    Duomenų bazių tipai
Viena iš pagrindiniu DBVS funkcijų yra sąsaja tarp vartotojo ir DB. DBVS suteikia vartotojui galimybę kreiptis i duomenų bazę ne fizinėmis (aparatūros ar operacijų sistemos) sąvokomis, bet loginėmis. Sąvokų rinkinys ir jų vartojimo taisykles sudaro modelį.
4.5.1    Rinkmenų valdymo sistemos
Paprasčiausia duomenų bazė organizuota kaip paprastų bylų rinkinys. Šis modelis primena kartotekinį dokumentų organizavimą, kuriame aplankai saugomi  stalčiuose, o kiekviename aplanke yra tam tikras lapų skaičius.
Rinkmenų valdymo sistemų negalima klasifikuoti kaip DBVS, kadangi dažniausiai jos  yra operacinės sistemos dalys ir nieko nežino apie vidinį rinkmenų turinį. Šios žinios integruotos taikomosiose programose, dirbančiose su rinkmenomis. Kaip pavyzdį galima būtų pateikti UNIX vartotojų lentelę, saugomą rinkmenoje /etc/passwd. Programos, besikreipiančios į ją, žino, kad jos pirmame lauke yra vartoto vardas, pasibaigiantis dvitaškiu. Jeigu programai reikia paredaguoti šia informaciją, ji turi betarpiškai atidaryti rinkmeną ir pasirūpinti teisingu laukų formatavimu.
Toks duomenų bazių modelis labai nepatogus, kadangi reikalauja naudoti trečio lygio  (3GL) kalbas. To pasėkoje, užklausų programavimo laikas padidėja, o programuotojas turi turėti aukštesnę kvalifikaciją, kadangi jam reikia pagalvoti ne tik apie loginį, bet ir apie fizinį duomenų saugojimą. Todėl tarp programų ir rinkmenos susidaro glaudus ryšys. Visa informacija apie lentelių laukus užkoduota programoje. Kita programa, besikreipianti į tą pačią rinkmeną, privesta dubliuoti kodą.
Didėjant programų skaičiui auga duomenų bazės valdymo sudėtingumas. Duomenų schemos pakeitimai įtakoja būtinumą keisti  kiekvieną programą, kuriai tai aktualu. Naujų užklausų formavimas kartais užima tiek laiko, kad nebetenka prasmės.
Rinkmenų valdymo sistemos negali užkirsti kelio informacijos dubliavimui. Dar blogiau, mechanizmų, neleidžiančių duomenų nesuderinamumo neegzistuoja. Įsivaizduokime rinkmeną, kurioje saugomi duomenys apie visus kompanijos tarnautojus. Kiekvienoje eilutėje yra laukas, kur įrašytas viršininko vardas. Vienam viršininkui pavaldžių tarnautojų yra daug, todėl jo vardas neišvengiamai kartosis. Jeigu kur nors šis vardas bus įrašytas neteisingai, formaliai gausis, kad tarnautojas turi kitą viršininką. Jeigu viršininkas bus pakeistas, tai jo vardą reiks „išgaudyti“ visoje duomenų bazėje.
Paprastų rinkmenų saugumą kontroliuoja operacinė sistema. Atskira rinkmena gali būti užblokuota peržiūrai arba modifikavimui iš vieno ar kito vartotojo pusės, bet tai įvykdoma tik operacinės sistemos lygmenyje. Konkrečiu laiko momentu tik viena programa gali vykdyti įrašymą į rinkmeną, o tai mažina našumą. (Леон Аткинсон “MySQL библиотека профессионала” [3])
4.5.2    Hierarchinės duomenų bazės
Hierarchinės duomenų bazės palaiko informacijos organizavimą medžio pavidalu. Ryšiai tarp  įrašų  išreiškiami pavidalu vaikas/tėvas, o kiekvienas įrašas turi lygiai vieną „tėvišką“ įrašą. Tai padeda palaikyti nuorodinį vientisumą. Kai įrašas ištrinamas iš medžio, visi jo „vaikai“ taip pat turi būti ištrinti .  7.5.2 1 Pav. pavaizduota paprasčiausia hierarchinė duomenų bazė, kurioje fiksuojama nepriklausomo darbuotojo veikla. Šio medžio šaknis yra įrašas apie klientą. Jos „vaikai“ – du įrašai apie sąskaitas faktūras ir trys įrašai apie sąskaitų apmokėjimą. Struktūra sąskaita 17 patikslinama trimis „vaikų“ įrašais, sąskaita 23 turi vieną tokį įrašą.

7.5.2 1 Pav. Hierarchinės duomenų bazės pavyzdys

Hierarchinės duomenų bazės turi centralizuotą struktūrą, t.y. duomenų saugumą lengva kontroliuoti. Deja, tam tikri duomenys apie fizinę įrašų saugojimo tvarką vis dėlto būtini, kadangi santykiai tėvas/vaikas realizuojami fizinių nuorodų iš vieno įrašo į kita forma. Tai reiškia, kad įrašo paieška vykdoma tiesioginio medžio perėjimo metodu. Įrašai, esantys vienoje medžio pusėje gali būti ieškomi greičiau už esančius kitoje pusėje.
Iš čia išryškėja būtinybė teisingai sutvarkyti įrašus, kad jų paieškos laikas būtų minimalus. Tai – sunku, kadangi ne visus santykius, egzistuojančius realiame pasaulyje galima išreikšti hierarchiniame pavidale. Sąryšis „vienas su daug“ yra suprantamas, bet praktiškai negalima aprašyti sąryšio „daug su daug“ arba situacijos, kai įrašas turi kelis „tėvus“.
4.5.3    Reliacinės duomenų bazės
Šiuo metu plačiausia taikomos yra reliacinės duomenų bazės. Reliacinį modelį 1970 m. pasiūlė  E.F. Kodas (E.F. Codd), tuomet dirbęs IBM tyrimų laboratorijoje.
Palyginus su anksčiau aprašytais duomenų bazių modeliais, šis modelis reikalauja iš DBVS žymiai aukštesnio sudėtingumo lygio. Čia bandoma išlaisvinti programuotoją nuo rutininių duomenų valdymo operacijų , charakteringų hierarchiniam modeliui.
Duomenų bazė – tai  informacijos, organizuotos aibių pavidale, sąsaja. Kiekviena aibė talpina unifikuoto tipo įrašus. Patys įrašai susideda iš laukų. Paprastai aibės vadinamos lentelėmis, o įrašai – lentelių eilutėmis.
Toks yra loginis duomenų modelis. Kietame diske visa duomenų bazė gali būti viename faile.
Reliaciniame duomenų bazės modelyje duomenų bazė yra centralizuota lentelių saugykla, garantuojanti saugų vienalaikį priėjimą  prie informacijos daugeliui vartotojų. Lentelių eilutėse dalis laukų talpina duomenis,  susijusius tiesiogiai su įrašu, o dalis – nuorodas į įrašus kitose lentelėse. Tokiu būdų, ryšiai tarp įrašų yra neatskiriama reliacinio modelio savybė.
Kiekvienas lentelės įrašas turi vienodą struktūrą. Pavyzdžiui, lentelėje, kurioje yra automobilių aprašymai, kiekvienas įrašas turės vieną ir tą patį laukų rinkinį: gamintojas, modelis, pagaminimo data, rida ir pan. Tokias lenteles  lengva vaizduoti grafine forma.
Reliaciniame modelyje pasiekiama informacinė ir struktūrinė nepriklausomybė. Įrašai nesurišti tarp savęs  tiek, kad vieno iš jų pakeitimas įtakotų kitą. O duomenų bazės struktūros pakeitimas nebūtinai įtakoja su ja dirbančių programų perkompiliavimą.
Reliacinėse DBVS naudojama SQL (Structured Query Language – struktūrinių užklausų kalba) kalba, leidžianti formuluoti nepriklausomas, nereglamentuotas užklausas. Be to, egzistuoja daugybė taikomųjų; programų, leidžiančių kurti logines užklausų schemas grafiniu pavidalu. Visa tai vyksta kompiuterių našumo reikalavimų sugriežtinimo sąskaita. Reliacinės duomenų bazės kenčia nuo SQL kalbos realizavimo skirtumų, nors tai ir nėra reliacinio modelio problema.  Kiekviena reliacinė DBVS realizuoja kažkokį SQL standarto poaibį plius unikalių komandų rinkinį, kas pasunkina programuotojų, besistengiančių pereit nuo vienos DBVS prie kitos, užduotį. Galima būtų paminėti tokias reliacines DBVS MySQL, PostgreSQl, Oracle.  Tačiau duomenų bazių teorija nestovi vietoje . Atsiranda naujos technologijos, kurios išplečia reliacinį modelį.  Vienas iš tokių modelių  objektinės duomenų bazės. Egzistuoja ir objektinės- reliacinės duomenų bazės.

4.6    Reliacinis modelis
Reliacinės duomenų bazės remiasi reliacine algebra.  Šis modelis slepia fizinio duomenų saugojimo detales. Visas darbas vyksta loginiame lygyje. Reliacinė duomenų bazė susideda iš lentelių. Lentelė susideda iš eilučių ir stulpelių. Stulpelyje saugomos atitinkamos  kiekvienos eilutės reikšmės. Įrašas yra atskira esybė, o laukai – tos esybės atributai.
Kiekvienas stulpelis turi savo pavadinimą ir tipą. Atributo apibūdinimas yra griežtas. Visos atributo reikšmės turi turėti tą patį tipą. Eilučių eiliškumas bazėje nesvarbus.
Lentelių eilutės gali būti surištos viena su kita vienu iš trijų būdų. Paprasčiausias sąryšis – „vienas su vienu“. Šiuo atveju pirmos lentelės eilutė atitinka vieną-vienintelę kitos lentelės eilutę. Diagramose toks sąryšis žymimas 1:1.
Sąryšis „vienas su daug“ reiškia situaciją, kai vienos lentelės eilutė atitinka kelioms kitos lentelės eilutėms. Tai labiausiai paplitęs sąryšių tipas. Jo žymėjimas diagramose yra  1:N.
Galiausiai, esant sąryšiui „daug su daug“ vienos lentelės eilutės gali būti surištos su daug kitos lentelės eilučių. Toks sąryšis žymimas N:M
Lentelės netalpina dublikatų. Kiekvienas įrašas unikaliai identifikuoja savo laukų reikšmes. Praktikoje daugelis DBVS leidžia lentelių be raktinių stulpelių sukūrimą.
Ryšiai tarp įrašų realizuojami raktų pavidalu. Raktas- tai  tam tikru būtų patalpintas lentelės stulpelis. Tam kad jo reikšmės būtų surištos su kitos lentelės stulpeliu, būtina nustatyti tarp tų stulpelių  virtualų ryšį. Tai daroma ne lentelių lygmenyje: informacija apie ryšius saugoma atskirai nuo duomenų.  Raktai gali būti pirminiai ir antriniai. Pirminio rakto reikšmės unikaliu būdų identifikuoja kiekvieną eilutę. Antrinio rakto reikšmės yra nuorodos į kitos lentelės pirminį raktą.  (7.5.3 1 Pav.)

4.7    Duomenų bazės ir internetas
Duomenų bazių  panaudojimas įgauna vis didesnę apimtį.  Ne išimtis ir internetiniai tinklalapiai. Čia duomenų bazės naudojamos gana įvairiai. Jų pagrindu kuriamos elektroninės parduotuvės, forumai, arba tiesiog tinklalapio turinio valdymas. tinklalapio turinio valdymas yra aktualus daugeliui didesnių tinklalapių savininkų.  Ypač jeigu jų tinklalapyje pateikiama informacija linkusi dažnai keistis. Keičiant  informaciją iškyla kvalifikacijos problema, t.y. norint pakeisti tinklalapio turinį žmogus turi išmanyti tam naudojamą HTML kalbą, bei gebėti dirbti su tinklalapių kūrimo programomis (Microsoft FrontPage, Macromedia Dreamveaver, Aldaire HomeSite ir pan.). Paprasta įmonės tarnautojas nelabai sugebės pakeisti tinklalapio turinį. Tačiau sukūrus tinklalapio turinio valdymą, net ir nieko apie programavimą neišmanantis žmogus sugebės pakeisti tinklalapyje pateikiamą tekstinę ar grafinę  informaciją. Tokių sistemų pagrindą sudaro duomenų bazė, kurioje ir saugomas visas tinklalapio turinys. Tokių tinklalapių principas yra, tai kad jie nėra statiniai, iš anksto sukurti HTML dokumentai. Tai programos, kurių darbo rezultatų išvedimas yra HTML dokumentas. Norint sukurti tokio tipo sistemas reikalinga duomenų bazių bei kitų internetinių technologijų integracija. Dažniausia taikomos yra PHP, Perl, ASP,Python programavimo kalbos , kartu su  MySQL, Oracle, MS SQL, PostgreSQL duomenų bazių valdymo sistemomis.
5    Duomenų bazių valdymo sistemos naudotinos Interneto technologijose
Egzistuoja daugybė DBVS, kurios puikia tinka daugeliui duomenų operacijų atlikti. Tačiau žvelgiant į  duomenų bazių panaudojimą internete, ne visos jos tinka tokio tipo užduotims.  Tai nulemia keletas veiksnių. Pirma, tai greitis, kuris internete  priklauso ne tik nuo  kompiuterio, bet ir nuo ryšio linijos ar pan.  Antras, daugeliui įmonių svarbus veiksnys, tai pasirinktos technologijos kaina. Trečia, DBVS orientacija į Internetines technologijas. Visas DBVS galima butų suskirstyti į tris tipus: korporatyvinį (skirtos didelėms įmonėms), vidutinių įmonių, bei smulkių įmonių. Kadangi šio darbo tikslas sukurti sistemą, kuri atliktų tik paprastas duomenų manipuliacijas, bei būtų orientuota į vartojimo paprastumą bei greitį, tai  naudoti korparatyvinio tipo DBVS, tokias kaip Oracle ar DB/2 nebūtų tikslinga. Todėl šiame skyriuje apžvelgiamos DBVS, autoriaus manymu, labiausiai tinkančios  Internetinio pobūdžio užduotims.

5.1    MySQL

MySQL- labai greita, patikima DBVS. Duomenų bazė leidžia efektyviai saugoti, ieškoti, rūšiuoti ir gauti duomenis. MySQL serveris valdo priėjimą prie duomenų, leisdamas dirbti su jais lygiagrečia keliems vartotojams; garantuoja greitą duomenų pasiekimą ir leidžia jais naudotis tik vartotojams, turintiems tam teisę. Taigi MySQL yra daugiavartotojiškas, daugiasrautis serveris. Jis naudoja SQL, visame pasaulyje naudojamą, standartinę užklausų kalbą. MySQL rinkoje pasirodė 1996 metais, bet jo kūrimas prasidėjo 1979 m. Šiuo metu ši sistema iškovojo Linux Journal žurnalo skaitytojų  simpatijų prizą. MySQl prieinamas kaip atviro kodo produktas, tačiau esant reikalui galima gauti ir komercines licenzijas.

5.2    PostgreSQL
PostgreSQl yra viena pagrindinių MySQL konkurenčių. Jos privalumai, kaip ir MySQL yra tai jog, tai nemokamas, atviro kodo produktas. PostgreSQl yra sudėtingesnė DBVS  nei MySQL, turinti daugiau galimybių, transakcijų palaikymą, todėl dažniau naudojama sudėtingesnėms sistemoms (pvz. Bankinėms) kurti.
5.3    Ms SQL Server
Tai  Microsoft kompanijos produktas, turintis daugybę galimybių. Didžiausias jo minusas tai didelis atminties naudojimas bei tai jog jis yra mokamas.
6    Duomenų bazių valdymo sistemų palyginimas
Kadangi populiariausios DBVS naudojamos Web-aplikacijos yra  MySQL ir PostgreSQL, kurios nenusileidžia savo galimybėmis tokios DBVS kaip MS SQL Server, Oracle, be to yra nemokamos, atviro kodo programos, tai apsistosime ties šių  dviejų DBVS palyginimu.

6.1    MySQL prieš PostgreSQL
Daugeliui MySQL ir PostgreSQl atrodo kaip identiškos, alternatyvios DBVS. Abi greitai įgauna populiarumą. Anksčiau vyko daugybe debatų dėl PostgreSQL spartos ir MySQL pastovumo.  Tačiau dabar abu produktai smarkiai progresavo. Ir dabar abi bazės labai panašios visais požiūriais, taigi kai sprendžiama kurią naudoti Web-aplikacijoje, ne visada yra aiškus lyderis.
MySql teisė į šlovę yra tai, jog jis teikia protingą savybių, tokių kaip įtaisytos SQL funkcijos, rinkinį, tenkinantį taisyklę 80/20: Jis turi 20 procentų SQL galimybių, kurie yra reikalingi 80 procentų duomenų bazių aplikacijų. Paprastų aplikacijų kūrėjai gali išsiversti be likusių galimybių, tokių kaip saugomos procedūros arba subužklausos, arba gali jas apeiti naudojant kūrybingą kliento-pusės (client-sided) programavimą.
PostgreSQL, iš kitos pusės, siūlo daugiau galimybių nei MySQL. Tai yra daugiau SQL funkcijų, serverio pusės procedūrinės kalbos, ir sudėtingi metodai duomenų manipuliavimui. PostgreSQL taip pat siūlo objektinio santykiavimo galimybes ir geometrinius duomenų tipus. Jeigu kuriama aplikacija, kuri turi labai sudėtingas verslo taisykles. PostgreSQL leidžia valdyti verslo logiką duomenų bazių serveryje.
6.1.1    ACID testas
Geras būdas diferencijuoti duomenų bazes ir testuoti bendrą kokybę yra ACID testas. ACID yra santrumpa, kuri apibūdina keturias aukštos kokybės duomenų bazių sistemos savybes: Atomariškumas ( Atomicity), nuoseklumas (Consistency), Izoliacija (Isolation), ilgalaikiškumas (Durablility). Šios savybės skiriamos transakcijoms – darbo vienetui, kuri programuotojas gali apibrėžti. Transakciją gali sudaryti  viena ar kelios duomenų bazių operacijos, pavyzdžiui:
1.    Atomarškumas yra „viskas arba nieko“ tvirtinimas. Tarkime, apibrėžiama transakcija, kuri talpina UPDATE, INSERT ir DELETE sakinius. Su atomariškumu, šie sakiniai yra traktuojami kaip vienas vienetas, ir nuoseklumo dėka (C raidė ACID santrumpoje) yra tik dvi galimos išeigos: arba jie visi keičia duomenų bazę arba nei vienas iš jų.
2.    Nuoseklumas garantuoja, kad transakcija niekada nepalieka duomenų bazės pusiau užbaigtoje būsenoje. Jeigu vienos iš transakcijos dalių  nepavyksta įvykdyti, visi iki tol buvę pakeitimai yra atšaukiami, paliekant duomenų bazę tokia, kokia ji buvo iki transakcijos inicijavimo.
3.    Izoliavimas laiko transakcijas atskirtas viena nuo kitos kol jos neįvykdomos. transakcijų izoliavimas yra  praktiškai konfiguruojamas įvairiuose režimuose. Pavyzdžiui vienam režime, transakcija blokuojama, kol kita pasibaigia. Kitame režime transakcija mato pasenusius duomenis (iš būsenos, kokia duomenų bazė buvo iki prieš tai buvusi transakcija startavo). Tarkime vartotojas ištrina klientą ir kol kliento sąskaitos faktūros bus ištrintos, kitas vartotojas atnaujina jas.  Blokuojamos transakcijos režime, antras vartotojas turėtu palaukti kol pirmas vartotojas užbaigs trynimą,  prieš įvykdydamas atnaujinimą. Antras vartotas tada sužinotų, jog klientas buvo ištrintas, kas yra žymiai geriau nei prarasti pakeitimus nežinant apie tai.
4.    Ilgalaikiškumas garantuoja, kad duomenų bazė saugos padarytų pakeitimų pėdsakus tokiu būdų, jog serveris  galės atsistatyti po nekorektiško darbo užbaigimo.  Taigi, netgi jeigu duomenų bazės serveris bus išjungtas viduryje transakcijos, jis sugrįš į pastovią būseną kai bus paleistas iš naujo. Duomenų bazė sprendžia tai saugodama neįvykdytas transakcijas transakcijų žurnale. Nuoseklumo dėka (aprašyta aukščiau), dalinai baigta transakcija nebus įrašyta į duomenų bazę nekorektiškai užbaigus darbą. Tačiau, kai duomenų bazė bus paleista iš naujo po tokio užbaigimo, ji tikrina transakcijų žurnalą  ieškodama transakcijų, kurios buvo užbaigtos, bet neįvykdytos ir panaudoja jas.
PostgreSQL  yra ACID suderinama. Standartinis MySQL lentelių  tvarkytojas nėra ACID suderinamas, nes  jis nepalaiko nuoseklumo, izoliavimo ir ilgalaikiškumo.  Nors, jis palaiko atomarikšuma naudodamas lentelių užraktus. Ir laimei, yra MySQL lentelių tvarkytojų, kurie palaiko įvairius suderinamumo lygius. Pavyzdžiui NuSphere Gemini lentelių tvarkytojas yra pilnai suderinamas.
Dėl savo ribotų galimybių rinkinio MySQL yra labai greita. Galima padaryti ja žaibiškai greitą jeigu aplikacija galima adaptuoti tokiems dalykams kaip lentelės atmintyje (in-memory tables). Kadangi ilgalaikiškumas nėra garantuojamas, galima prarasti kai kuriuos duomenis, jeigu kabelis bus ištrauktas viduryje transakcijos. PostgreSQL turi daug galimybių ir galima būti tikram, jog duomenys bus saugūs. Tačiau, jeigu naudoti visas galimybes iš karto, aplikacijos našumas nukentės.  (Brian Jebson „PostgreSQL  vs MySQL.  Building better databases“ [5])
6.1.2    SQL dialektai
Viena didžiausių sričių, kur MySQL ir PostgreSQL skiriasi tai funkcijos, kurias galima naudoti SQL sakiniuose. Kadangi SQL yra standartinė duomenų užklausų kalba, tikimasi jog bus galima naudoti ją vienodai skirtingose DBVS. Deja, prisirišimas prie standarto yra viena iš vietų,  kur SQL duomenų bazės reikalauja patobulinimų.  Jos visos sutampa fundamentaliuose dalykuose, tokiuose kaip atrodo paprasto SELECT, INSERT, UPDATE ar DELETE sakinio sintaksė. Tačiau, kai peržengiamas paprastumas, taikymai pradeda skirtis tiek sintakse, tiek galimybėmis, kurios yra palaikomos.
Paprastai, galima padaryti tuos pačius uždavinius su bet kokia duomenų baze – tai tik  reikalauja truputi darbo.  Pavyzdžiui,  gali būti painūs duomenų formatai.  Daugelis duomenų bazių sistemų yra šiek tiek lanksčios duomenų formatuose, kuriuos jos naudoja, tačiau ne visos sistemos priima tuos pačius formatus. Kaip buvo minėta anksčiau PostgreSQL palaiko turtingesnį SQL dialektą negu  MySQL. Viena, kuo jos skiriasi, tai jog PostgreSQL palaiko SQL subužklausas. Kūrėjai dažnai naudoja subužklausas atlikti sudėtingoms manipuliacijoms. Tuo tarpu kai SELECT sakinys leidžia generuoti dinaminių duomenų rinkinius pagrįstus sudėtiniais kriterijais, subužklausos pakelia ši veiksmą laiptelius aukščiau, leisdamos dinaminių duomenų rinkiniams bendrauti tarpusavyje sudėtingesniais būdais.  Pavyzdžiui, yra dvi lentelės darbuotojai ir atlyginimai, susietos raktu  darbuotojo_id. Reikia vienodo rakto abejose lentelėse tam, kad visada galima būtų surasti darbuotojo atlyginimą sujungiant  (join) abi lenteles per ši raktą.  Tarkime reikia sumažinti  geriausiai apmokamo darbuotojo algą 35 procentais. Tam, reiks surasti maksimalią algą, išsaugoti kažkur jos reikšmę ir panaudoti ją kai bus daromas pakeitimas.
Toks sprendimas nėra geriausias, nes dvi operacijos  (ištraukimas ir trynimas) nėra sujungtos į atominį vienetą. Teoriškai, įmanoma padidinti algą, laiko momentu tarp aukščiausios algos radimo ir jos sumažinimo. Naudojat subužklausas galima sujungti operaciją į vieną sakinį.
Nors MySQL negali atlikti subužklausų, jos laikinos lentelės gali padėti pamėgdžioti subužklausas SELECT sakiniuose, nes SELECT sakinys gali sujungti „prieš“ (join against) daug lentelių (be subužklausų negalima pridėti papildomų lentelių UPDATE ir DELETE sakiniuose). Išrenkama subužklausa, kuri pašalinama į laikiną lentelę. Tada vykdoma išorinė užklausa, kaip sujungimas prieš laikiną lentelę. Kai kuriais atvejais galima naudoti vietinius kintamuosius emaliuojant subužklausų elgseną.
MySQL laikinos lentelės yra saugios daugiavartotojiškose situacijose, nes jos yra privačios kiekvienam susijungimui. (connection). Taigi, jeigu du vartotojai sukurs lentelę max_alga, jos nesusidurs tarpusavyje.  (Brian Jebson „PostgreSQL  vs MySQL.  Building better databases“[5])
6.1.3    Kurią rinktis?
Abi duomenų bazių sistemos, turi daug panašumų. Tai kaip gi išsirinkti?  Jeigu reikia duomenų bazės organizuoti  internetinę svetainę, tai dauguma tokių remiasi MySQL. Būtų galima jas kurti ir PostgreSQL pagrindu, tačiau tai užimtų žymiai daugiau laiko.
Jeigu yra migruojama iš Oracle, Sybase ar MS SQL Server, geriau tiktų PostgreSQL. Kaip ir minėtos DBVS, PostgreSQL turi trigerius, saugomas procedūras, ir didelį rinkinį paruoštų funkcijų ( įskaitant daug, skirtų duomenų manipuliavimui). Taip pat PostgreSQL procedūrinė kalba yra lengvai išmokstama, jeigu yra susipažinta su Oracle‘o PL/SQL ir SQL Server‘io Transact-SQL.
MySQL yra sufokusuota ties Web kūrėjų reikmėmis, o PostgreSQL atrodo skirta pačiam aplikacijų kūrėjų ratui. (Brian Jebson „PostgreSQL  vs MySQL.  Building better databases“[5])
Pagrindinis PostgreSQL trūkumas yra didelis kritinių klaidų kiekis programoje. Labiausiai pavojingos klaidos duomenų bazės branduolyje, kurios reguliariai trikdo bazės DBVS darbą jos gedimus.
6.1.4    MySQL privalumai
•    Našumas
•    Žema kaina.  MySQL paketas prieinamas nemokamai pagal atviro kodo licenziją arba jeigu to reikia aplikacijai už nedidelę kaina galima gauti komercinę licenziją.
•    Naudojimo paprastumas.
•    Mobilumas. MySQL galima naudoti daugelyje įvairių UNIX sistemų, taip pat Microsoft Windows.
•    Išeities tekstai.  Vartotojas gali prieiti prie MySQL išeities tekstų. Skirtingai nuo komercinių uždarų produktų, jeigu reikia kažką pakeisti ar pridėti, tai visada galima padaryti. Nereikia laukti, kol firma-gamintoja išleis pataisymus.
(„Разработка Web-приложений на PHP и MySQL”,23 psl. [2])
7    Web-aplikacijų kūrimo technologijos

7.1    ASP (Active Server Pages)
ASP (Active Server Pages – Aktyvūs serverio tinklalapiai) technologija buvo sukurta Microsoft kompanijos. Ji  yra naudojama IIS (Internet Information Server) serveryje Web-aplikacijų aptarnavimui. ASP scenarijai – tai HTML dokumentai su specialiais tagais (tag – etiketė, frazė),  kurie interpretuojami serverio kaip vykdomasis kodas. ASP puslapiai gali iškviesti kitas programas tam tikrų užduočių (pvz. prieiti pire duomenų bazės) atlikimui. Kaip sako  Microsoft :“ ASP yra atvira, laisvai kompiliuojamų aplikacijų aplinka, kurioje jūs galite kombinuoti HTML, scenarijus ir daugkartinio naudojimo ActiveX serverio komponentus, kuriant dinaminius ir galingus Voratinkliui (Web) skirtus verslo sprendimus. ASP leidžia serverio-pusės scenarijus (server-side scripting) IIS serveriui, su vietiniu VBScript ir Jscript palaikimu.“ ASP taip pat naudoja COM ir DCOM (Component Object Model ir Distributed Component Object Model) objektus. ASP technologija palaiko daug scenarijų rašymo kalbų, tačiau labiausiai naudojama yra VBScript. Šiuo metu Microsoft išleido naujos kartos ASP patobulinamą, kuris įeina į .NET produktų šeimą.  (www.Microsoft.com). ASP kalbos sintaksė pateikiama pavyzdyje (10.1 1 Pvz.):

<%@ Language=VBScript %>

<HTML>

<HEAD>

<TITLE>Pavyzdys 1</TITLE>

</HEAD>

<BODY bgcolor=Lime aLink=DarkTurquoise>

<P> </P>

<%  Response.Write(“Sveikas, pasauli!”)  %>

</BODY>

</HTML>

Rezultatas:

Sveikas pasauli!
10.1 1 Pvz. ASP kalbos pavyzdys
7.2    Perl
Sunku įsivaizduoti UNIX operacinę sistemą be PERL kalbos. Tai viena iš pagrindinių  scenarijų kalbų užkariavusių Internetą. Ji taikoma kaip sistemos administravime, moksliniuose skaičiavimuose, taip ir kuriant Web-aplikacijas. Perl scenarijai puikia dirba kaip Windows taip ir kitose operacinėse sistemose.  Perl pačioje pradžioje buvo kuriama kaip kalba teksto manipuliavimui. Ji suteikia galimybių, kurios leidžia vartotojui lengvai atlikti kai kurias operacijas, kurios yra labai sudėtingos C,  tačiau taip pat komplikuoja  kai kuriuos dalykus, kurie yra lengvi C.  Perl gali būti įskiepytas į HTML kodą, veikti kaip serverio pusės įskiepas (Server-Side Include) arba kaip savarankiška aplikacija (CGI).  Perl kalbos sintaksė, kaip ir PHP turi panašumų su C kalbos (10.2 1 Pvz.):
#!/home3/iashome/Apache/perl/bin
print <<END_OF_PRINT
<HTML>
<TITLE>Perl pavyzdys – Sveikas pasauli</TITLE>
<BODY bgcolor=”#FFFFFF”>
<CENTER>
<BR>
<BR>
<P><strong><FONT size= 6 color = #ff0000>
Sveikas Pasauli !
</FONT></STRONG></P>
</CENTER>
</BODY>
</HTML>
END_OF_PRINT
Rezultatas:
Sveikas pasauli !
10.2 1 Pvz. Perl kalbos pavyzdys
7.3    Python
Gvido van Rossum‘as (Guido van Rossum) pavadino savo objektiškai-orientuotą  scenarijų kūrimo kalbą Pyhton, garsaus britų komedijinio serialo „Monty Python‘s Flying circus“ garbei. Python kalbos scenarijai vykdomi UNIX, Windows ir daugelyje kitų operacinių sistemų. Ši technologija yra gana nauja ir jos didžiausias minusas mažas ją palaikančių serverių pasirinkimas. Python kalbos pavyzdys (10.3 1 Pvz.):
>>> from types import *
>>>
>>> def what (x):
…     if type(x) == IntType:
…             print “Tai skaicius”
…     else:
…             print “Tai kazkas kita.”

>>> what(4)
Rezultatas:
Tai skaicius
>>>
>>> what(“4”)
Rezultatas:

Tai kazkas kita.
10.3 1 Pvz. Python kalbos pavyzdys

7.4    ColdFusion
ColdFusion – tai Allaire kompanijos sukurtas įrankis, kuris veikia vienodai su daugeliu Windows ar Solaris  Web serveriais. ColdFusion leidžia kreiptis į bazes per šablonus, kurie yra labai panašūs į paprastus HTML puslapius. Šios technologijos minusas kaip ir Python tai, jog ji nėra pakankamai populiari ir  mažai interneto puslapių talpinimą siūlančių kompanijų serverių ją palaiko. Šios kalbos pavyzdys demonstruojamas pavyzdyje (10.4 1 Pvz. Cold Fusion kablos pavyzdys):
Šablonas:
<CFQUERY NAME= “new_links” DATASOURCE= “links_to_bad_sites”>
SELECT * FROM links WHERE date IS LIKE “December%” ORDER BY name ASC
</CFQUERY>
HTML byla:
<HTML>
<H3>Really Bad Sites Found in December</H3>
<CFOUTPUT QUERY= “new_links”>
Site Name: #Name# <BR>
URL: <A HREF=”#URL#”>#URL#</A> <BR>
Description: #Description# <P>
</CFOUTPUT>
10.4 1 Pvz. Cold Fusion kablos pavyzdys

7.5    PHP
PHP – tai serverinė (arba serverio pusės (server-sided)) scenarijų kūrimo kalba, sukurta specialiai voratinkliui. Į HTML puslapį galima įterpti PHP kodą, kuris bus vykdomas kiekvieną kartą aplankant tą puslapį. PHP kodas interpretuojamas  Web-serverio ir generuoja HTML arba kitokį išvedimą (output) matomą puslapio vartotojui.
PHP kūrimas prasidėjo 1994 metais ir pradžioje buvo vykdomas vieno žmogaus – Rasmus‘o Lerdorf‘o. Šią kalbą pripažino eilė talentingų žmonių ir iškentė tris pagrindines redakcijas kol tapo plačiai naudojamu ir brandžiu produktu . 2001 metų sausį, ši technologija buvo naudojama beveik penkiuose milijonuose domenų visame pasaulyje ir jų kiekis toliau sparčiai auga. PHP skirtingai nuo ASP yra atviro kodo (Open Source) produktas. Jį galima laisvai keisti, naudoti ir platinti kitoms organizacijoms ar vartotojams. Pradžioje PHP reiškė Personal Home Page (asmeninis namų tinklalapis) santrumpą, tačiau vėliau pavadinimas buvo pakeistas atitinkamai su rekursiniais GNU  pavadinimų susitarimais. Ir dabar PHP reiškia PHP Hypertext Preprocessor (PHP hiperteksto preprocesorius). Dabartiniu metu naujausia PHP versija yra 4.  („Разработка Web-приложений на PHP и MySQL”,20,22 psl [2]). PHP kalba kaip Perl daug ką paveldėjo iš C kalbos, tai gi ir jos sintaksė turi panašumų (10.5 1 Pvz.):
<? PHP>
function Spausdink ($param) {
if ($param = = 555) {
print (“<center><B>JUS LAIMEJOTE!!!</B></center>”);
}
else
{
print (“<center><i>Jums nepasiseke!</i></center>”);
}
}
Spausdink (5);
Spausdink (4);
?>
Rezultatas:
JUS LAIMEJOTE!!!
Jums nepasiseke!
10.5 1 Pvz. PHP kalbos pavyzdys

8    Web-aplikacijų kūrimo technologijų palyginimas
Kadangi web-aplikacijoms kurti naudojama daugybė technologijų, svarbu išsiaiškinti kuri iš jų geriausiai atitinka poreikius ir geriausiai tinka projektui. Šiame skyriuje mėginama palyginti aukščiau minėtų technologijų panašumus, skirtumus, privalumus bei trūkumus.  Pradedant kurti internetinį tinklalapį reiks išsirinkti aparatūrinę įrangą Web-serveriui, operacinę sistemą, programinę Web-serverio įrangą,DBVS ir programavimo arba scenarijų kūrimo kalbą. ((„Разработка Web-приложений на PHP и MySQL”,21 psl. [2])
Kai kurių šių komponentų pasirinkimas priklausys jau nuo padarytų pasirinkimų. Pavyzdžiui ne visos operacinės sistemos gali dirbti su bet kokia aparatūrine įranga, ne visos scenarijų kalbos gali garantuoti prisijungimą prie visų duomenų bazių ir pan.
8.1    PHP prieš Perl
8.1.1    Panašumai
Interpretavimas
Tiek Perl tiek ir PHP yra interpretuojamos kalbos. Jos nėra kompiliuojamos iš anksto ar vykdomos dvejetainiu pavidalu, tiksliau, jos praleidžiamos per interpretatorių pareikalavus ir kompiliuojamos iš karto (compiled on-the-fly). Dėl šios priežasties Perl ir PHP abi yra labai mobilios. Abi kalbos gali veikti bet kokioje  platformos, kuri turi šių kalbų interpretatorius.
Kitas interpretavimo privalumas yra tai, jog programuotojai gali tobulinti savo aplikacijas ir nedelsiant matyti rezultatus, ir įdiegti naują kodą, nelaukdami kol aplikacija bus perkompiliuota ir iš naujo sujungta. Bloga, tiek PHP, tiek Perl, savybė, tai jog jomis parašytos aplikacijos yra „lėtesnės“ ir reikalaujančios daugiau procesoriaus laiko nei jų analogai, parašyti C ar C++. Tai reiškia, kad jeigu parašyti Perl ar PHP  programą  su C, ji veiks „greičiau“ ir naudos mažiau procesoriau laiko. Žodžiai „lėčiau“ ir „greičiau“ parašyti kabutėse, kadangi internete, ne kaip pačiame kompiuteryje, aplikacijos greitis priklauso nuo daugelio faktorių, nei tik grynas aplikacijos veikimo laikas. ( Straipsnis Web Automation PHP vs. Perl vs. PHP by Matthew Keller [3])

Sintaksė ir branduolio funkcijos
Tiek Perl tiek PHP šaknys yra UNIX ir UNIX-panašiose sistemose (kaip ir C). Dėl šios priežasties jos turi  panašią sintaksę ir pagrindines funkcijas, tokias kaip „chown“ ir „localtime“.
8.1.2    Skirtumai
Kūrimo tikslas
Perl yra sukurtas kaip įvairiapusė, galinga kalba, kuri lengvai išplečiama ir gali tikti įvairiems tikslams. Tiesa, yra didelė dalis Perl bendruomenės, kuri dirba su tokiais projektais kaip mod_perl ir rašo Web modulius, tačiau Perl, kaip kalbos, plėtojimas sufokusuotas  ne ties Voratinkliu ar Internetu.
PHP plėtojama Voratinklio automatizavimui. PHP plėtotojai pridėjo ypatybių, padarančių Voratinklio turinio generavimą trivialiu, taip pat suteikiančių lengvą priėjimą prie plataus palaikomų duomenų bazių pasirinkimo. ( Straipsnis Web Automation PHP vs. Perl vs. PHP by Matthew Keller [3])
8.2    PHP prieš ASP
8.2.1    Greitis
ASP yra COM-pagrindu sukurta architektūra. Kai ASP programuotojas naudoja, tarkime, VBScript, jis paleidžia COM objektą. Kai jis rašo klientui, iškviečiamas Response COM objekto Write metodas. Kai jungiamasi prie duomenų bazės, naudojamas kitas COM objektas. Kreipiantis į failų sistemą dar kitas. Visi šie COM pertekliai sumuojasi ir lėtina darbą.
PHP moduliuose, viskas veikia PHP atminties erdvėje. Tai reiškia, kad PHP kodas veiks greičiau, nes nėra papildomų sąnaudų bendraujant su skirtingais COM objektais skirtinguose procesuose.
Lentelėje  (11.2 1 Lent), parodyti rezultatai gauti įvykdžius Select sakinį 40 kartų ant Microsoft SQL Server 7 naudojant PHP MSSQL7 išplėtimą, PHP ODBC išlėtimą ir COM :

PHP užklausimas MSSQL 7    Sekundės  (mažiau geriau)
Su MSSQL išplėtimu    01.88
Su ODBC išplėtimu    09.54
Su ODBC per COM (ADO)    17.28
Su OLEDB per COM    06.19
11.2 1 Lent. PHP veikimo greitis
Kai kreipiamasi į  duomenų bazę naudojant PHP ODBC išplėtimą, užklausa įvykdoma per 9,54 s. Naudojant COM interfeisą jungiantis prie ODBC prideda 80% papildomo laiko (17,28 s.) (php.weblogs.com;www.sloppycode.net [13])
OLEDB – tai Microsoft greitaveikiška COM technologija kreipimuisi į duomenų bazes. Ji greitesnė nei ODBC, tačiau kai panaudojamas PHP MSSQL išplėtimas gaunamas 200% našumo padidėjimas.
8.2.2    Atminties valdymas
ASP modelyje (ISS 4 serveris), jeigu ASP failas header.asp yra įtraukiamas į 20 tinklalapio puslapių, tai 20 kompiliuotų header.asp failo kopijų išlaikomos atmintyje. ISS 5 serveris realizuoja patobulintą atminties valdymo modelį, tačiau tik programuotojai naudojantys Windows 2000 gali atnaujinti jį, nes jis nesuderinamas su ISS 4 ir Windows NT 4.0 negali dirbti su ISS 5. Tai reiškia, kad  daugelis IIS web serverių vis dar yra įklimpę su žemesniu atminties valdymo moduliu.
Skirtingai, PHP pakrauna įtrauktus  failus tik tada, kai jie reikalingi.
8.2.3     Kaina
PHP yra visiškai nemokamas produktas, be to jis yra atviro kodo tipo. Tai yra jūs patys galite ji tobulinti, platinti.  Tuo tarpu ASP yra mokamas Microsoft produktas.
Tai pat perkant ASP yra dar „paslėptos“ kainos požymių, t.y. jeigu jums reikia papildomų paslaugų jas reikia nusipirkti. Duomenų kodavimui – ASPEncrypt, el.pašto valdymui – ServerObjetct‘s Qmail, bylų pakrovimas – Software Artisans SA-FileUp. Visos šios paslaugos yra integruotos į PHP nemokamai.
8.2.4    Duomenų bazės
PHP integracija su MySQL, bei kitomis DBVS yra labai naudinga. Egzistuoja daugybė PHP įrankių MySQL ar kitoms duomenų bazėms valdyti.
ASP ir PHP abi yra labai geri sprendimai vidutinio-sudėtingumo tinklalapiams. Kas leidžia PHP pirmauti, tai PHP integracija su MySQL. MySQL taip pat  suderinta vidutinio sudėtingumo interneto svetainėmis, tinklalapiams, kur duomenų išrinkimas yra svarbiau už transakcijų palaikymą.  transakcijų palaikymas leidžia programuotojui sinchronizuoti  kelių lentelių atnaujinimą vienu metu; kas nereikalinga daugeliui tinklalapių.
Palyginant duomenų bazes MS Access yra žymiai lėtesnis už MySQL. SQL Server7 ir Oracle yra tokios pat greitos, tačiau per brangios jeigu nereikia transakcijų palaikymo.
8.2.5    Klaidos
Klaidų pataisymai PHP atsiranda žymiai greičiau, kaip ir visų atviro kodo produktų ,kadangi nereikia laukti kol firma-gamintoja išleis pateisimus, juos gali daryti kas tik nori.

8.2.6    Mobilumas
PHP paketą galima naudoti įvairiose operacinėse sistemose. PHP kodą gali kurti tokiose nemokamose operacinėse sistemose kaip Linux ar FreeBSD, komercinėse Unix versijose, tokiose kaip Solaris ar IRIX ar skirtingose Windows versijose. Taip pat PHP gali veikti daugelyje Web-serverių, turinčių PHP palaikymą.
Tuo tarpu ASP veikia tik Windows aplinkoje su IIS serveriu.

8.3    PHP prieš ColdFusion
8.3.1    Palaikomos platformos
ColdFusion platformų palaikymas yra ribotas: Windows, Solaris, Linux arba HP/UX. Tuo tarpu PHP veiks visur, kur tik galima ją interpretuoti.
8.3.2    Kalbų skirtumai
ColdFusion sukurta atvaizduoti kodą. Jos scenarijų kūrimo galimybės yra primityvios ir nepalaiko standartinių operatorių sintaksės ar vartotojų sukurtų funkcijų. Tačiau ji yra tikrai greita ir lengva vaizduoti puslapių ir duomenų bazių sąveikai.
PHP sukurta rašyti aplikacijoms. Ši kalba yra stipri ir labai  lanksti.
8.3.3    DBVS palaikymas
ColdFusion abstrahuoja duomenų bazės susijungimą (connection), todėl juo paprasta naudotis, taip pat labai paprasta pakeisti DBVS be pakeitimų kode. Tačiau integruotas palaikymas apribojamas tik keliomis didelėmis DBVS, bei jis prieinamas tik komercinėje versijoje. Palaikymas pagal nutylėjimą yra ODBC, kas gerai Windows sistemai ,bet tampa rakštimi kitose.
PHP turi labai stiprų integruotą duomenų bazių palaikymą. Minusas tas, kad skirtingų DBVS komandos turi skirtingą sintaksę.
9    Technologijos pasirinkimas
Apžvelgus visas populiariausias web-aplikacijų kūrimo technologijas bei DBVS, buvo apsistota ties PHP + MySQL deriniu. Pasirinkimą įtakojo VGTU jau turimos priemonės (web-serveris, veikiantis UNIX sistemoje), šių technologijų populiarumas, bei funkcionalumas, žema kaina. Išanalizavus technologijų privalumus ir trūkumus galim daryti prielaidą, jog toks derinys yra optimaliausias numatomo uždavinio sprendimui.

10    VGTU dinaminio turinio valdymo sistemos modeliavimas
Šio baigiamojo darbo tikslas buvo sumodeliuoti VGTU svetainės turinio valdymo sistemą, panaudojant duomenų bazes, bei sukurti pavyzdinius modulius. Pradžioje buvo išanalizuoti tokio pobūdžio sistemos vartotojo poreikiai. Buvo nustatyta, kad svarbiausi iš jų yra:
•    Galimybė keisti tekstinę informaciją
•    Galimybė keisti grafinę informaciją
Vėliau buvo nagrinėjama VGTU svetainės struktūra. Išnagrinėjus ją, buvo sudaryta  modulinė valdymo sistemos schema. Vartotojas norėdamas pakeisti interneto svetainės duomenis, turėtų prisijungti prie pagrindinio modulio , surinkęs atitinkama adresą pvz. (www.vtu.lt/admin). Prisijungti galėtų tik privilegijuotas vartotojas su jam skirtu slaptažodžiu bei vartotojo vardu, kurie taip pat būtų saugomi MySQL duomenų bazės lentelėje. Prisijungęs vartotojas galėtų pasirinkti iš pateikto meniu, modulį, kurio informaciją jis nori keisti. Tai padarius atsidarytų atininkamas modulis, kuriame vartotojas galėtų keisti bei pildyti informaciją. Kiekvieno   modulio informacija būtų saugoma MySQL bazės lentelėse. Bendra duomenų bazės schema atrodytų apytiksliai taip (11.3.3 1 Pav):

11.3.3 1 Pav. VGT svetainės turinio valdymo sistemos duomenų bazės schema
Vienam moduliui sukuriama viena lentelė, kurioje saugoma svetainės skyriaus, kurį valdo modulis informacija. Kai kuriems moduliams kuriamos kelios lentelės, surištos ryšiais, taip supaprastinant informacijos saugojimą bei apdorojimą.
10.1    Principinė prisijungimo prie sistemos schema
Norint naudotis svetainės valdymo sistema, reikia prie jos prisijungti naudojant užregistruotą vartotojo vardą bei slaptažodį. Priklausomai nuo įvesto vartotojo vardo, sistema nustato prie kurių modulių vartotojas gali prieiti. Bendras prisijungimo procesas pavaizduotas schema (11.3.3 1 Pav).

11.3.3 1 Pav.  Bendras prisijungimo prie sistemos procesas
10.2     Svetainės valdymo sistemos modulių schema
Kiekvienas svetainės skyrius bei poskyris turi savo administravimo modulį, kurį galima išsikviesti iš valdymo sistemos meniu. Kai kuriems skyriams ar poskyriams buvo nuspręsta nekurti modulių, kadangi juose pateikiama informacija keičiama retai. Visi moduliai turi informacijos pateikimo bei valdymo (trynimo ir t.t.), naujos įvedimo bei keitimo submodulius. Principinė sistemos schema pavaizduota  11.3.3 1 Pav.)

11.3.3 1 Pav. Principinė svetainės modulių struktūra

10.3     Valdymo sistemos veikimas
Principinis sistemos veikimas galėtų būti apibūdinamas tokia veiksmų seka:
Sistemos vartotojo veiksmai:
1.    Vartotojas prisijungia prie sistemos
2.    Vartotojas pasirenka reikiamą modulį
3.    Pakeičiama, įterpiama nauja arba ištrinama informacija
4.    Vartotojas atsijungia nuo sistemos
Informacijos vaizdavimas svetainėje:
1.    Jungiamasi prie duomenų bazės
2.    Išrenkama informacija iš reikiamo modulio lentelės
3.    Informacija atvaizduojama vartojo naršyklėje.
Detalesnis sistemos veikimas pavaizduotas schemoje (11.3.3 1 Pav.)

11.3.3 1 Pav. Svetainės veikimo diagrama
11    Sistemos saugumas
11.1     Pagrindiniai pavojai
Naudojant tokio tipo sistemas iškyla  informacijos saugumo problema. Gali  atsirasti žmonių, norinčių piktybiškai įsilaužti į sistemą, pakeisti duomenis ar sugadinti duomenų bazę. Pagrindiniai pavojai gali būti šie:
•    duomenų bazės lentelių sugadinimas ar ištrynimas
•    duomenų bazėje saugomos informacijos pakeitimas
•    serveryje esančių rinkmenų ištrynimas
11.2    Saugumo priemonės
11.2.1    Apachie serveris
Šis serveris yra pakankamai gerai apsaugotas nuo įsilaužėlių. Pradžioje šis serveris buvo sukurtas Unix šeimos operacinėms sistemoms, tačiau jis puikia veikia ir Windows sistemose.
11.2.2    Slaptažodžių kodavimas
Šioje sistemoje slaptažodžiai koduojami naudojant standartinę MySQL funkciją PASSWORD(), tačiau galimi ir kiti variantai. MySQL eilutės kodavimui siūlo net kelias funkcijas:
•    PASSWORD(str)
•    ENCRYPT(str, salt) – kuri koduoja naudodama UNIX crypt() funkcija, tačiau jeigu šios funkcijos nėra sistemoje ji visada grąžins 0. Čia salt yra balastas iš dviejų simbolių
•    ENCODE (str, pass_str) – ši funkcija koduoja str eilutę naudodama pass_str eilutę. Norint ją atkoduoti naudojama DECODE() funkcija. ENCODE () grąžina eilutę tokio paties ilgio kaip str. Tačiau norint išsaugoti šios funkcijos rezultatą į lentelės lauką reikią naudoti BLOB lauko tipą.
•    MD5(str) – skaičiuoja str eilutės 128 bitų  kontrolinę sumą. Ši reikšmė grąžinama kaip 32 skaitmenų šešioliktainis skaičius, kuris gali būti naudojamas kaip hash-raktas.
Pvz. mysql> SELECT MD5(“testing”); ->’ae2b1fca515949e5d54fb22b8ed95575′
•    SHA (str) – skaičiuoja str eilutės SHA1 160 bitų kontrolinę sumą, apibūdintą RFC 3174  (Saugus Hash algoritmas) standarte. Reikšmė gražinama kaip 40 skaitmenų šešioliktainis skaičius. Ją taip pat galima naudoti generuojant hash-raktą ar slaptažodžių saugojimui. Ši funkcija saugesnė už MD5().
•    AES_ENCRYPT(string,key_string) – ši funkcija koduoja duomenis pagal oficialų  AES (Advanced Encyption Standard) algoritmą, anksčiau žinoma kaip Rijndael. Naudojamas kodavimas 128 bitų ilgio raktu,  nurodomu key_string, tačiau galim jį pailginti iki 256 bitų. Dažniausia pakanka 128 bitų, kadangi tai greičiau ir pakankamai saugu. Pradinė eilutė gali  būti bet kokio ilgio. Kadangi AES yra blokų lygmens algoritmas, tai naudojami “pailginimai” nelyginio ilgio eilutėms, taigi rezultato eilutės ilgis gali būti suskaičiuotas kaip 16*(trunk( eilutės_ilgis/16)+1).  Atkoduojama naudojant AES_DECRYPT(string,key_string)
•    DES_ENCRYPT(str [, (key_number | key_string) ] ) – koduoja  str eilutę, užduotu raktu. Tačiau  funkcija veikai tik sukonfiguravus MySQL  SSL palaikymą. Raktas, kuriuo koduojama pasirenkamas pagal sekančius kriterijus:
Argumentų skaičius    Apibūdinimas
Tik str argumentas    Naudojamas pirmas raktas iš des-raktų rinkmenos
Nurodytas key_number    Naudojamas nurodytas raktas nuo 0 iki 9 iš des-raktų bylos
Nurodytas key_string    Naudojamas key_string koduojant

Gražinamas rezultatas – dvejetainė eilutė, kur pirmas simbolis yra CHAR (128 | key_number). 128 prideda, kad galima būrų lengviau atpažinti užkoduotą raktą. Jeigu naudojamas key_string tai bus 127. Gražinamos eilutės ilgis bus naujas_ilgis= senas_ilgis + (8- senas_ilgis % 8)+1. Tačiau naudojant šią funkciją būtina des-raktų rinkmena, kurios formatas yra:
Rakto_numeris   Raktas
Rakto_numeris   Raktas
PHP suteikia dar didesnes kodavimo galimybes. Naudojat PHP MCrypt kodavimo funkcijas galima koduoti, tokiais algoritmais kaip Trigubas DES, BLOWFISH, CAST_128, CAST_256, ENIGMA, GOST,  SAFER128 ir daugeliu kitų.
Taigi galima koduoti slaptažodį net gi ne vienu o keliais kodavimo algoritmais, kas dar labiau padidintų saugumą, tačiau tai smarkiai sumažintų sistemos veikimo greitį.

11.2.3    Saugus prisijungimas prie duomenų bazės
Norint  užtikrinti saugumą jungiantis prie duomenų bazės, vertėtų jungtis kitu MySql vartotoju negu pagrindinis, t.y. tokiu, kuris turi mažiau teisių. Pavyzdžiui, naudojantis turinio valdymo sistemos moduliais, vartotojams pakaktų tokių teisių kaip SQL sakinų INSERT, DELETE, UPDATE, SELECT vykdymas.  O vaizduojant duomenis pačioje VGTU svetainėje tik SELECT sakinio vykdymo.

12    VGTU svetainės turinio valdymo sistemos sukūrimas
Svetainės galimybių demonstravimui buvo sukurti ne visi, o tik keli moduliai (Istorija, Senato nariai,Vartotojai), kuriuose realizuoti tekstinės informacijos, grafinės informacijos, vartotojų valdymo bei prisijungimo submoduliai. Sistema buvo kuriama naudojat  MySQL 3.23.49 DBVS ir PHP 4 scenarijų kalbą.
12.1     Duomenų bazės struktūra
Moduliai Istorija, Senato nariai, Vartotojai turi po vieną lentelę duomenų bazėje: Istorija, Senatas, Admins atitinkamai.  Lentelių struktūra pateikiama toliau. Kuriant lenteles buvo sukurti ir indeksai, kurie paspartina paiešką. Tai padaryta numatant ateityje galimą paieškos organizavimą. Tokia galimybė ypač aktuali ieškant darbuotojų ar naujienų įrašų.
12.1.1    Lentelė „istorija“
Lentelė saugo VGTU Istorijos skyriaus informaciją

Laukas    Tipas    Atributai    Null    Nutylint    Papildomai
id     int(11)         Ne          auto_increment
istorija     text         Ne

Indeksai :
Raktinis žodis    Tipas    Elementų skaičius    Laukas
PRIMARY     PRIMARY     2     id

Laukas istorija saugo VGTU istorijos skyriaus įrašus, kadangi vienas įrašas gali būti pakankamai ilgas, šis laukas turi TEXT tipą.

12.1.2    Lentelė „senatas“
Šioje lentelėje saugoma VGTU svetainės skyriaus APIE, Valdymo poskyrio  Senato narių sąrašas. Čia saugoma senato nario pavardė bei pareigos.

Laukas    Tipas    Atributai    Null    Nutylint    Papildomai
id     int(4)         Ne          auto_increment
pavarde     varchar(100)         Ne
pareigos     varchar(100)         Ne

Indeksai :
Raktinis žodis    Tipas    Elementų skaičius    Laukas
PRIMARY     PRIMARY     7     id
pavarde     INDEX     7     pavarde
pareigos     INDEX     7     pareigos

12.1.3    Lentelė „admins“
Šioje lentelėje saugomi visi sistemos vartotojai.
Laukas    Tipas    Atributai    Null    Nutylint    Papildomai
admin_id     int(11)         Ne          auto_increment
username     varchar(16)         Ne
password     varchar(16)         Ne
lygis     varchar(200)         Ne
pask_lank     date         Ne     0000-00-00
kartai_men     int(3)         Ne     0
vardas     varchar(50)         Ne
tel     int(20)         Ne     0
email     varchar(50)         Ne

Indeksai :
Raktinis žodis    Tipas    Elementų skaičius    Laukas
PRIMARY     PRIMARY     2     admin_id
username     INDEX     2     username

Laukas password yra koduojamas naudojant MySQL funkciją PASSWORD().
Lauke lygis saugoma informacija prie kurių modulių vartotojas gali prieiti. Ji saugoma eilutės pavidalu modulių pavadinimus atskiriant kableliu. Pvz. Istorija,senatas.
Laukas pask_lank saugom paskutinio prisijungimo datą, tokiu formatu Metai-Mėnuo-Diena (pvz. 2003-05-29), o lauke kartai_men saugomas bendras prisijungimų prie sistemos skaičius per mėnesį.
12.2     Moduliai
Bendra modulių struktūra yra tokia:
1.    Kiekvienas modulis turi PHP scenarijų generuojantį visų egzistuojančių  to modulio duomenų vaizdavimo formą, kurioje galima pasirinkti, įvesti naujus duomenis, trinti ar koreguoti senus.
2.    Pasirinkimą apdoroja action.php scenarijus, kuris priklausomai nuo veiksmo (veiksmo pasirinkimas perduodamas action.php scenarijui per action_type kintamąjį), perduoda valdymą  atitinkamam  scenarijui.
3.    Naujos informacijos įvedimui bei senos koregavimui naudojami scenarijai kurie generuoja įvedimo arba koregavimo formas, bei scenarijai kurie jas apdirba.
4.    Keičiant grafinę informaciją  valdymas perduodamas upload.php arba upload2.php scenarijams, priklausomai nuo to ar duomenys įvedami pirmą kartą ar koreguojami.
5.    Kiekvienas modulis turi informacijos vaizdavimo  VGTU svetainėje scenarijus, kurie talpinami atskirai nuo valdymo sistemos, svetainės kataloge. Tačiau jie kreipiasi į tą pačią duomenų bazę, iš kurios ima duomenis, kurie turi būti pateikti svetainėje.
12.2.1    Modulis „Istorija“

Šis  modulis skirtas valdyti VGTU svetainės skyriaus APIE poskyrį ISTORIJA. Jo pagalba vartotojai gali  redaguoti  bei papildyti informaciją pateikimą šiame skyriuje. Modulis susideda iš  3 formų : pagrindinės (15.2.1 1 Pav.), kurioje parodoma jau įvesta informacija bei pateikiamas galimų veiksmų (įvesti nauja, redaguoti, trinti) pasirinkimas; naujo įrašo įvedimo; įrašo koregavimo. Šiame modulyje naudojamas tik TIK submodulis. Norint ištrinti įrašus reikia pažymėti varneles ties įrašais kurie bus trinami. Galimas ir kitoks sprendimo variantas – viena forma duomenų koregavimui bei trynimui. Šiuo atveju norint ištrinti įrašą reiks ištrinti visą tekstinę informaciją  rodomą koregavimo formoje. Tačiau pasirinkus tokį sprendimą būtų gaunamas nevisiškai norimas rezultatas, kadangi įrašas iš tikro nebūtų pilnai ištrinamas – jis vis tiek liktų duomenų bazėje, nes nebūtų ištrinti „sisteminiai“ laukai, tokie kaip identifikatorius ID. Taigi toks sprendimas netinkamas, todėl buvo realizuotas būtent variantas, kaip visiškas įrašo trynimas yra atskirtas nuo redagavimo, tuo pačiu paliekant redagavimo režime dalinio trynimo galimybę (pvz. Ištrinti žodį, sakinį ar raidę), kadangi dalinis trynimas gali būti traktuojamas kaip redagavimas. Jis tik pakeičia rodomą informaciją, bet nepanaikina jos iš duomenų bazės. Visa informacija priklausanti šiam moduliui saugoma lentelėje Istorija, kur talpinamas kiekvienas Istorijos poskyrio įrašas.
Vartotojui atidarius VGTU svetainės Istorijos skirsnį, iškviečiamas scenarijus vgtu_istorija.php, kuris sugeneruoja informaciją vaizduojantį tinklalapį. Jis  SQL SELECT išrenka visus įrašus iš tos pačios Istorija lentelės, kurie ir pateikiami vartotojui.  Įrašai išvedami naudojant tokį patį dizainą kaip ir VGTU svetainė, tai pasiekiama sujungiant dalį  VGTU svetainės HTML kodo su PHP kalbos elementais. Tokiu būdu vartotojui sudaromas įspūdis, jog jis mato statinę informaciją.
Modulio Istorija veikimo schema pavaizduota 15.2.1 2 Pav.

12.2.2    Modulis „Senatas“
Šis modulis valdo informaciją pateikiama VGTU svetainės skirsnyje Senato nariai. Modulio struktūra analogiška Istorijos moduliui (15.2.2 1 Pav.), tačiau čia apart TIK submodulio naudojamas ir GIK submodulis, taigi kiekvienam Senato nariui, galima gretai ir lengvai įdėti nuotrauką. Leidžiamų pakrauti į serverį,grafinių failų formatas ribojamas, paliekant GIF, JPEG formatus, kadangi šie formatai dažniausia naudojami internete. Nuotraukos dydis taip pat ribojamas iki 100 Kb, taip apsisaugoma nuo per didelių rinkmenų. Pakrovus nuotrauką į serverį, vaizdas automatiškai  atnaujinamas ir vartotojas turi galimybę iškart pamatyti, grafiką tokiame pavidale, kaip ji atrodys, vaizduojant svetainėje. Modulio Senatas veikimo schema panaši į Istorijos modulio, tačiau čia apart teksto keitimo submodulio, kaip buvo minėta naudojamas ir GIK submodulis (15.2.2 2. Pav.Modulio Senatas veikimo diagrama)

15.2.2 2. Pav.Modulio Senatas veikimo diagrama

12.2.3    Prisijungimo kontrolės (PK) modulis
Šis modulis naudoja duomenų bazės lentelę admins, kurioje saugomi sistemos vartotojai. Patekus į sistemos prisijungimo langą (15.2.3 1 Pav.) turi įvesti savo prisijungimo vardą  bei slaptažodį. Slaptažodis yra slepiamas po ● ženklais. Paspaudus mygtuką Prisijungti, šie duomenys siunčiami php scenarijui login.php, kuris sutikrina juos su lentelėje admins saugomais duomenimis.
Vartotojo „teisingumo“ patikrinimą galimą išreikšti tokia veiksmų seka :
1.    Įvykdomas SQL SELECT sakinys, kuriuo bandoma išrinkti įrašus iš Admins lentelės apie tokį vartotoją, kurio duomenys buvo įvesti prisijungimo formoje.
2.    Jeigu išrinktų įrašų skaičius >0, tai vartotojas „teisingas“.
3.    Prisiregistravusio vartotojo ID bei VARDAS registruojamas, naudojant PHP sesijų kintamuosius (admin_id bei vartot), kurie saugomi visą darbo su sistema laiką; taip įmanoma kontroliuoti kitų sistemos puslapių, esančių giliau prisijungimo formos, neteisėtą iškvietimą. VARDAS registruojamas informatyvumo tikslais- jis išvedamas naudojantis sistema, taip informuojant vartotoją, kas prisijungęs prie sistemos.
4.    Jeigu duomenys teisingi:
•    Į duomenų bazės lentelę Admins, įrašoma naujo vartotojo apsilankymo data,  bei apsilankymų skaičius padidinamas vienetu jeigu paskutinį kartą buvo apsilankyta tą patį mėnesį. Jeigu jungiamasi kitą mėnesį, apsilankymų skaičius nustatomas 1.
•    vartotojas nukreipiamas į pagrindinį sistemos tinklalapį (15.2.3 3 Pav), kitu atveju išvedamas pranešimas: „BLOGAS slaptažodis arba vartotojas!”.
Vaizdžiai PK modulio veikimas pavaizduotas 15.2.3 2 Pav. Modulio PK veikimo diagrama

15.2.3 2 Pav. Modulio PK veikimo diagrama

15.2.3 3 Pav. VGTU svetainės turinio valdymo sistemos pagrindinė forma
Visi giliau esantys tinklalapiai, naudoja check.php scenarijų, kuris tikrina ar buvo nustatytas kintamasis admin_id, jeigu ne kreipimasis į tinklalapį traktuojamas kaip nesankcionuotas. Atsijungus nuo sistemos ar tiesiog uždarius naršyklę sesijos kintamieji išvalomi, taigi neprisijungus prie sistemos neįmanoma suteikti reikšmę admin_id.
12.2.4    Modulis „Vartotojai“
Šis modulis prieinamas tik visos sistemos administratoriui. Jo pagalba jis gali administruoti vartotojų teise, keisti slaptažodžius bei prisijungimo vardus.  Kaip ir kiti moduliai, šis turi pagrindinę (15.2.4 1 Pav.), naujo vartotojo sukūrimo, bei koregavimo forma. Taip pat administratorius turi galimybę sekti vartotojų naudojimosi sistema statistiką. Pagrindinėje vartotojų modulio formoje be vartotojų prisijungimo vardų bei slaptažodžių, pateikiama, kada vartotojas paskutinį kartą prisijungė prie sistemos, kiek kartų jis iš viso jungėsi prie sistemos per paskutinį mėnesį. Statistiką galima buvo organizuoti ir kitu būdu: sukuriant papildomą lentelę bazėje, kurioje butų talpinama visa reikalinga prisijungimo informacija, pvz. Vartotojo identifikatorius (id), prisijungimo laikas, naudojimosi laikas, padarytu pakeitimų skaičius ir pan. Tai leistų sistemos administratoriui susidaryti detalesnį vaizdą apie  sistemos vartojimą. Tačiau šių funkcijų buvo atsisakyta, numatant  patobulinimo  galimybes.
Formose, skirtose naujam vartotojui kurti bei senam koreguoti (15.2.4 2 Pav.), esamų modulių sąrašas pateikiamas su laukeliais, kuriuos pažymėjus, vartotojui leidžiamas priėjimas prie to modulio. Pažymėjus varnele ties „Viskas“ leidžiamas priėjimas prie visų modulių.

12.3     Submoduliai
Visuose moduliuose naudojami du pagrindiniai programiniai submoduliai – tekstinės informacijos keitimo (toliau TIK), bei  grafinės informacijos keitimo (toliau GIK),  be jų realizuoti vartotojų administravimo (VA modulis), prisijungimo kontrolės (PK) submoduliai.
12.3.1    Vartotojų administravimo (VA) submodulis
VA submodulis atsakingas už naujų vartotojų kūrimą, senų koregavimą bei trynimą. Šio submodulio darbas susideda iš tokių etapų:
Naujo vartotojo sukūrimas
1.    Duomenys paimti iš naujo vartotojo sukūrimo formos, įrašomi į duomenų bazės lentelę admins, naudojant INSERT sakinį.
2.    Įvestas slaptažodis prieš įrašant į duomenų bazę koduojamas PASSWORD() funkcija.
3.    Priskirti lygiai vartotojui gražinami masyve, todėl prieš įrašant juos į lentelę, masyvo reikšmės sujungiamos į eilutę,  atskiriant jas kableliu. Tokiu  pavidalu įrašomos į duomenų bazę. Pvz. (reikšmė 1 : istorija; reikšmė 2: senatas, tai duomenų bazėje bus lygis: istorija, senatas)
Vartotojo duomenų koregavimas:
1.    admins lentelėje surandamas įrašas apie norimą koreguoti vartotoją, pagal jo ID lauką.
2.    Duomenys perduodami į koregavimo formą.
3.    Duomenys  gauti iš koregavimo formos, įrašomi į lentelę admins, naudojat UPDATE sakinį, prieš tai patikrinus jų teisingumą  (pvz. Tikrinama  ar abu įvesti nauji slaptažodžiai sutampa; jeigu neįvestas naujas vartotojo vardas ar slaptažodis, paliekamas senas).
Vartotojo trynimas:
1.    Duomenys gauti iš pagrindinės formos yra masyve,  todėl jie sujungiami į eilutę, sujungiant kableliu.
2.    Duomenys trinami naudojant DELETE sakinį, kuriame nurodomos visų norimų trinti įrašų ID laukai. Pvz. DELETE from Istorija WHERE id IN (1,2,3);
12.3.2    TIK submodulis
TIK submodulis skirtas keisti tekstinei VGTU svetainės turinio informacijai, jis naudojamas visuose sistemos moduliuose. TIK įgalina vartotoją lengvai keisti jau esančią,  įvesti naują, bei trinti seną tekstinę informaciją. Truputi apmokius vartotojus HTML formatavimo komandų (pvz. <B></B>, <I></I>), galima dar labiau praplėsti TIK galimybes, leidžiant formatuoti tekstą pagal savo norus. Submodulis automatiškai  atpažįsta naujos eilutės pradžia ir pakeičia ją į HTML naujos eilutės indikatorių <BR>. Pasirinkus naujos informacijos įvedimą,  duomenys įvedami naudojant įvedimo formą, kuri siunčia juos atitinkamam php scenarijui. Šis įrašo gautus duomenis į atitinkamo modulio lentelės (pvz. Istorija) pabaigą, naudojant SQL INSERT komandą. Trynimas vykdomas naudojat SQL DELETE komandą, kuri ištrina įrašus, kurių ID sutampa su gautais iš trynimo formos, analogiškai kaip VA submodulyje. Galima trinti kaip viena taip ir grupę įrašų. Duomenų koregavimo procedūra truputį sudėtingesnė:
1.    Atitinkamo modulio lentelėje surandamas norimas koreguoti įrašas, pagal gauta ID.
2.    Jo informacija parodoma koregavimo  formoje, kurioje ir vykdomas duomenų keitimas
3.     Pakeisti duomenys įrašomi atgal į lentelę naudojat SQL UPDATE sakinį.
Kiekvienas modulis, turi savo duomenų atvaizdavimo, keitimo, įvedimo formas, kurios kreipiasi į jas apdirbančius PHP scenarijus.

12.3.3    GIK submodulis
GIK submodulis naudojamas keisti VGTU svetainės skyrių grafinę informaciją. Kiekvienas modulis turi savo katalogą, kuriame saugomos grafinės rinkmenos.  Kuriant naują įrašą modulyje ir norint prie to įrašo įterpti grafinę informaciją, tereikia pasirinkti norimą rinkmeną ir paspaudus pakrovimo mygtuką pakrauti ją į modulio grafinės informacijos katalogą.
Galimas kitas sprendimo variantas – visa grafinę informaciją taip pat saugoti duomenų bazėje, naudojat MySQL duomenų bazių valdymo sistemos duomenų tipą BLOB, tačiau tai labai padidintų duomenų bazės apimtį, todėl pasirinktas pirmasis variantas. GIK submodulis, patikrina ar rinkmena tikrai yra grafinio tipo, ar ji neviršija nustatyto maksimalaus dydžio. Jeigu tenkinami visi reikalavimai rinkmena nukopijuojama iš vartotojo kompiuterio į atitinkamo modulio katalogą serveryje. Keičiant grafinę informaciją, nurodyta kita grafinė rinkmena nukopijuojama vietoj senos.

13     Duomenų vaizdavimas svetainėje
Tokio tipo sistemos panaudojimas nekeičia VGTU svetainės vaizdinio išpildymo ar skyrių išsidėstymo. Jos pagalba tik keičiamas turinys, kuris „sulipdomas“ su jau sukurta išdėstymo struktūra bei dizainu. Svetainės lankytojui kreipiantis į viena ar kitą skyrių, PHP scenarijus išrenka duomenis iš atitinkamos lentelės ir pavaizduoja juos lankytojo naršyklėje panaudodamas esamą dizainą.

15.3.3 1 Pav. VGTU svetainės turinio valdymo sistemos sugeneruotas  Istorijos skyriaus vaizdas

14    Išvados ir pasiūlymai
Šiame darbe buvo pabandyta sukurti VGTU internetinės svetainės turinio valdymo sistemos prototipą. Sukurti keli sistemos galimybių  demonstraciniai moduliai, apimantys visų likusių modulių pagrindinius darbo principus. Pilnai veikiančios tokio pobūdžio sistemos realizavimas žymiai palengvintų VGTU svetainės administravimą, leistų prie patrauklaus turinio svetainės kūrimo prisidėti ir žmonėms mažiau išmanantiems internetines technologijas. Sukurtoji sistema yra tik didelio darbo pradžia, ji nėra tobula. Keletas minėtinų dalykų, kuriuos galima būtų tobulinti:
1.    Prisijungimo kontrolės bei vartotojų administravimo moduliai:
•    Padidinti slaptažodžių kodavimo sudėtingumą naudojant ne standartinę MySQL funkciją  PASSWORD(), o, pavyzdžiui, modifikuotą MD5 algoritmą;
•    Praplėsti sistemos administratoriaus galimybes tvarkant informaciją apie vartotojus (detalesnė informacija, pvz. Katedros ir pan. saugojimas; išsamesnės statistikos galimybės).
2.    TIK (tekstinės informacijos keitimo) modulis:
•    Suteikti galimybę pakrauti tekstą iš jau esančios tekstinės rinkmenos.
3.    Bendro saugumo didinimas:
•    Norint pasiekti didesnį saugumą vertėtų jungtis skirtingais MySQL duomenų bazės vartotojais skirtingoms užduotims vykdyti. Pavyzdžiui, pateikiant informaciją svetainėje pilnai pakaktų vartotojo, turinčio teisę atlikti tik SELECT sakinius.
Šios sistemos teikiami privalumai turėtų pateisinti didesnes pradines sąnaudas: tokią sistemą sukurti kainuoja brangiau nei statinio tipo svetainės; sistemos branduolio sukūrimas yra žymiai imlesnis laiko atžvilgiu ir pan.
Resursų ekonomijos ir greitaveikiškumo atžvilgiu sukurtoji sistema taip pat yra tobulintina. Tarkime, tikslinga būtų dažnai naudojamas konstantas (pvz., Failu katalogas, modulių sąrašas) iškelti į vieną atskirą bylą, taip sutaupant laiko jas keičiant. Taip pat būtų galima naudoti pastovųjį (permament) prisijungimą prie MySQL serverio, o ne atnaujinti jį kiekviename scenarijuje, tačiau toks sprendimas diskutuotinas dėl jo saugumo.

15    Literatūra

Knygos:

1.    R. Baronas. „Duomenų bazių sistemos“
2.    „Разработка Web-приложений на PHP и MySQL”, Томсон Лаура и Веллиг Люк, DiaSoft, Москва,2001
3.    Леон Аткинсон “MySQL библиотека профессионала”, Вильямс, Москва, 2002
4.    “Web-дизайн”, Томас А. Пауелл,BHV, Санкт-Петербург, 2002

Internetiniai :
5.    Brian Jebson „PostgreSQL  vs MySQL.  Building better databases“
6.    Web Automation: PHP vs. Perl vs. PHP July 7, 2000
7.    Dynamic vs Static Content Ashley T. Howes PhD, Turton CMS
8.    GeodSoft  Website Consulting
9.    http://php.weblogs.com/php_asp_7_reasons
10.    Introduction to Active Server Pages by Kevin Cooke
11.    ColdFusion Tutorial by Charles Mohnike
12.    Intro to Perl for CGI by Colin Ferm
13.    PHP and PostgreSQL By Vikram Vaswani
14.    php.weblogs.com;www.sloppycode.net

16    Priedai
PRIEDAS 1
Pavyzdiniai PHP scenarijų išeities tekstai

Scenarijus istor.php

<?
/* Istorijos modulio pagrindine forma
Kintamieji:
VIDINIAI:
$query- uzklausos kintamasis
$result- uzklausos rezultato kintamasis
$kiek- grazintu irasu skaicius
$id- iraso identifikatorius
$istorija- iraso tekstas
$del-line – trynimo zymeklio sudarymo kintamasis
$mod_line -koregavijmo zymeklio sudarymo kintamasisi
OUT:
istor_delete[$id]- trinamu irasu identifikatoriu masyvas
action_type- veiksmo tipas (naujas irasa, koreguoti, trinti)

*/
require_once (“../../check.php”); // prijungiamas teiseto prisijungimo tikrinimas
require (“../../connect.php”); //Jungiamasi prie bazes
require (“lygis_tikr.php”); // Tikrinamas prisjungusio vartotojo lygis
?>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1257″>
<form name=”istorija” method=”post” action=”action.php”>
<pre><input type=”hidden” name=”action_type” value=”trinti”>
<table width=”75%” border=”0″ cellspacing=”1″ cellpadding=”0″>
<tr bgcolor=”#99CCFF”>
<td>
<div align=”center”><b>Istorija</b></div>
</td>
<td>
<div align=”center”><b>Trinti</b></div>
</td>
<td>
<div align=”center”><b>Koreguoti</b></div>
</td>
</tr>
<?
$query = “select ID,Istorija from istorija”; //duomenu isrinkimo uzklausa
$result=MySQL_Query($query); //Isrenkami visi duomeys is Istorijos lenteles
$kiekis=MYSQL_NUMROWS($result); //Irasu skaicius
$i=0;?>
<?
//——-Duomenu isvedimas———–
while ($i<$kiekis) { //Pereinami visi isrinkti irasai
list($id, $istorija)  = mysql_fetch_row($result); //Kiekvieno iraso laukai priskiriami kintamiesiems
?>
<tr>
<td height=”18″>
<?echo $istorija  //Spausdinamas kintamasis
?>
<div align=”center”></div>
</td>
<td height=”18″>
<div align=”center”>
<?
//spausdinamas trynimo pasirinkimo zymeklis, su einamojo iraso id  irasytu i masyva
$del_line = “<input type=\”checkbox\” name=\”istor_delete[$id]\” value=\”$id\”>”;
echo $del_line?>
</a> </div>
<td height=”18″>
<div align=”center”>
<?
//spausdinamas koregavimo pasirinkimo zymeklis su einamojo iraso id
$mod_line = “<a href=\”action.php?ist_id=$id&action_type=koreg\”>Taip</a>”;
echo $mod_line;?> </div>
</td>
</tr>
<?

$i++;}
?>
</table>
<p>
<input type=”submit” name=”Trinti” value=”Trinti”>

<input type=”submit” name=”Naujas” value=”Naujas” OnClick=”document.istorija.action_type.value=’naujas’;”>
</p>

</form>
<p>&nbsp;</p>
<p>&nbsp;</p>

Scenarijus action.php

<?
/* Veiksmu vykdymas
Kintamieji:
IN: $action_type – veiksmo tipas
$istor_delete – trinamu irasu masyvas
$ist_id – iraso id
VIDINIAI:
$istr_ids – trinamu irasu identifikatoriu eilute
$query – uzklausa
$result – uzklausos rezultato kintamasis
OUT:
%istor- naujo iraso turinys
*/
ob_start(); //Ijungiamas isvedimo buferizavimas
require(“../../check.php”); //Tikrinmas teisetumas
require (“../../connect.php”); //Jungiamasi prie bazes
require (“lygis_tikr.php”); //Tikrinamas vartotojo lygis

switch ($action_type) {
case naujas: //Jeigu naujas irasas
?>
<form name=”naujas” method=”post” action=”naujas.php” enctype=”multipart/form-data”>
Tekstas
<textarea name=”istor” rows=”10″ cols=”50″></textarea>
<p>&nbsp; </p>
<p>
<input type=”submit” name=”Irasyti” value=”Irasyti”>
<input type=”reset” name=”Isvalyti” value=”Isvalyti”>
</p>
</form>
<?break;
case trinti: //Jeigu irasu trynimas
$istr_ids = implode (“,”, $istor_delete); //Masyvas surasomas i eulte, id atskiriant kableliais
$query=”DELETE FROM istorija WHERE id IN ($istr_ids)”; //Trynimo uzklausa
$result=MySQL_Query($query); //Trynimas
if ($result!=0)
{
Header (“Location:istor.php”);         //Jeigu pavyko grazinama i pagrindine modulio forma
}
else                        //jeigu nepavyko
{
print (“Nepavyko istrinti”);
}
break;
case koreg: //Jeigu iraso koregavimas
Require (“change_form.php”);         //Koregavimo formos iskvietimas
break;
ob_end_flush(); //Buferizavimo pabaigair buferio isvedimas
}
?>
Scenarijus naujas.php

<?
/* Naujo iraso irasymas
Kintamieji:
IN:
$istor- naujo raso turinys

*/
ob_start();
require(“../../check.php”);  //Teisetumo tikrinimas
require (“../../connect.php”); //Jungiamasi prie bazes
require (“lygis_tikr.php”); //Lygiko tikrinimas
$istor=nl2br($istor); //Visi naujos eilutes pradzios simboliai keiciami i <BR> koda
$query=”INSERT INTO istorija (ID, Istorija) VALUES (”,’$istor’)”; //Naujo iraso irasymo uzklausa
$result=MySQL_Query($query);  //Irasomas irasas
if ($result!=0)
{
Header(“Location:istor.php”); //Jeigu sekmingai grazinama i pagrindine modulio forma
}
else
{
Print (“Nepavyko sukurti!”);
}
ob_end_flush();
?>

Scenarijus lygis_tikr.php

<?
/* Vartotojo lygio tikrinimas
Kintamieji:
IN:
$admin_id -sesijinis vartojo id
VIDINIAI:
%id -vartojo id
$query- uzklausa
$result- uzklausos rezultatas
$kiek- irasu kiekis
*/
?>
<meta http-equiv=”Content-Type” content=”text/html; charset=windows-1257″>
<?
session_start(); //Atnaujima sesija
$id=$HTTP_SESSION_VARS[“admin_id”];
$query=”select lygis from admins where admin_id=$id
and (lygis like ‘%istorija%’ or lygis like ‘%viskas%’)”; //Vartojo lygio isrinkimo uzklausa
$result=mysql_query($query);
$kiek=mysql_num_rows($result);
if ($kiek==0) { //Jeigu kiekis =0
echo “Jûs neturinte teisës nauodotis ðiuo moduliu”;
exit;
}
?>