23
hyv¨ aksymisp¨ aiv¨ a arvosana arvostelija Tietokantasovelluksen toteutusdokumentti Tuomas Husu <[email protected].fi> Helsinki 21.4.2008 582203 Tietokantasovellus, kev¨ at 2008 HELSINGIN YLIOPISTO Tietojenk¨ asittelytieteen laitos

Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

hyvaksymispaiva arvosana

arvostelija

Tietokantasovelluksen toteutusdokumentti

Tuomas Husu <[email protected]>

Helsinki 21.4.2008

582203 Tietokantasovellus, kevat 2008

HELSINGIN YLIOPISTOTietojenkasittelytieteen laitos

Page 2: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

i

Sisalto

1 Johdanto 1

1.1 Jarjestelman tarkoitus . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Toimintaymparisto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.3 Rajaukset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.4 Optiot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.5 Toteutusymparisto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Ohjelmiston yleisrakenne 3

2.1 Toimintaperiaate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Kayttoliittyma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.3 Tietoturva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 Jarjestelman komponentit 7

3.1 Dynaamiset HTML-paasivut . . . . . . . . . . . . . . . . . . . . . . . 7

3.1.1 Etusivu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.1.2 Yllapitosivu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1.3 Sisaankirjautumissivu . . . . . . . . . . . . . . . . . . . . . . . 9

3.1.4 Uloskirjautumissivu . . . . . . . . . . . . . . . . . . . . . . . . 10

3.2 Dynamiset normaalikayttajan HTML-sisaltosivut . . . . . . . . . . . 11

3.2.1 Selaa kysymyksia ja vastauksia . . . . . . . . . . . . . . . . . 11

3.2.2 Uusimmat kysymykset . . . . . . . . . . . . . . . . . . . . . . 11

3.2.3 Haku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.2.4 Jata kysymys . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2.5 Yhteystiedot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.2.6 Virhe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3 Dynamiset yllapitajan HTML-sisaltosivut . . . . . . . . . . . . . . . . 12

3.3.1 Uudet kysymykset . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3.2 Kaikki kysymykset . . . . . . . . . . . . . . . . . . . . . . . . 13

Page 3: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

ii

3.3.3 Aihepiirit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.4 Syota uusi kysymys . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.5 Omat tiedot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.3.6 Kayttajatunnukset . . . . . . . . . . . . . . . . . . . . . . . . 15

3.4 Asetustiedostot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.5 Kuvatiedostot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.6 Tyylitiedostot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.7 JavaScript-tiedostot . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Asennustiedot 16

5 Kayttoohje 19

6 Post Mortem -analyysi 19

Liitteet

1 Tehtavananto

Page 4: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

1

1 Johdanto

Harjoitustyon tarkoituksena on perehtya tietokantaohjelmointiin ja yksinkertaisten

verkkosovellusten rakenteisiin seka tietokantapohjaisen verkkosovelluksen suunnit-

teluun, toteutukseen ja dokumentointiin.

1.1 Jarjestelman tarkoitus

Opintoneuvonnan UKK (usein kysytyt kysymykset, engl. FAQ, frequently asked

questions) -verkkopalvelun avulla opiskelijat voivat etsia vastauksia usein esitettyi-

hin opiskeluasioita koskeviin kysymyksiin. Usein kysyttyjen kysymysten listat saivat

alkunsa internetin uutisryhmista, jossa niilla pyrittiin vahentamaan ryhmaan saapu-

vien samankaltaisten kysymysten kasittelya. Opintoneuvonnan UKK -verkkopalvelun

avulla opiskelijat voivat loytaa nopeasti ratkaisun ongelmiinsa tarvitsematta henki-

lokohtaista neuvontaa.

Halutessaan opiskelija voi jattaa jarjestelmaan oman kysymyksensa yhteystietoi-

neen. Opintoneuvojat voivat kirjautua tunnuksillaan jarjestelmaan ja vastata esitet-

tyihin kysymyksiin joko yksityisesti (esimerkiksi sahkopostitse) tai julkaisten kysymys–

vastaus -parin UKK-listalla. Julkaistavat kysymykset opintoneuvojat jakavat luo-

miinsa aihepiireihin, jolloin kysymysten etsiminen helpottuu.

1.2 Toimintaymparisto

Tietokantasovellus toteutettiin vapaan lahdekoodin LAMP -alustalle (Linux-Apache-

MySQL-PHP) ja se vaatii siis toimiakseen Apache HTTP Server -WWW-palvelimen,

PHP-ohjelmointikielen seka MySQL-tietokantapalvelimen.

WWW-palvelimena kaytetaan Apachea, koska se on suorituskykyinen ja luotettava

sen lisaksi, etta se on kaytetyin WWW-palvelinohjelma maailmassa. Tietokantana

on MySQL, joka on ilmainen ja suorituskykyinen relaatiotietokanta. PHP on help-

pokayttoinen ja suosittu dynaamisten verkkopalveluiden tuottamiseen tarkoitettu

ohjelmointikieli. Seka Apache, PHP etta MySQL ovat niin sanottuja cross platform

-ohjelmistoja, eli ne toimivat laajasti seka Windows- etta Unix-pohjaisissa kaytto-

jarjestelmissa.

Verkkopalvelun kayttaja tarvitsee jarjestelmaa kayttaakseen Javascriptia tukevalla

WWW-selaimella varustetun laitteen, jolla on muodostettavissa verkkoyhteys jarjes-

Page 5: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

2

telman palvelimeen. Sisaankirjautuminen (ja siten yllapito-ominaisuudet) vaativat

selaimelta evasteiden (engl. cookie) hyvaksymisen.

Jarjestelmaa testattiin yleisimmilla kayttojarjestelmilla (Windows, Linux, Mac OS

X) ja yleisimmilla WWW-selaimilla (MSIE, Firefox, Safari). Mobiililaitteita tai mui-

ta erikoistapauksia ei huomioitu suunnittelussa eika toteutuksessa.

1.3 Rajaukset

Alkuperaisessa tehtavanannossa (liitteena) mainittu kysymysten osoittaminen jolle-

kin tietylle opintoneuvojalle jatettiin toteuttamatta, koska opiskelijat eivat oletet-

tavasti tieda kuka osaa ja ehtii parhaiten heidan kysymyksiinsa vastata.

Tehtavanannosta poiketen aihepiireja ei jarjesteta minkaan erillisen indeksin mu-

kaan, vaan ne naytetaan aina aakkosjarjestyksessa.

1.4 Optiot

Tehtavanannossa mainittujen toimintojen lisaksi toteutettiin yllapitajalle mahdolli-

suus muokata omia tietojaan, hallinnoida kayttajatunnuksia, arkistoida kysymyksia

myohempaa julkaisua varten seka mahdollisuus muokata kysymyksia ja vastauksia

myohemminkin.

Opiskelijoiden on tehtavanannossa mainittujen toimintojen lisaksi mahdollista hakea

kysymyksia ja vastauksia haluamillaan hakuehdoilla.

1.5 Toteutusymparisto

Toteutusymparistona on Tietojenkasittelytieteen laitoksen Alkokrunni-palvelin (url

http://db.cs.helsinki.fi/).

Palvelinpaan toteutusympariston kayttojarjestelma on Linux (Fedora 7), HTTP-

palvelin Apache (versio 2.2.6) ja toteutuksen osalta www-ohjelmointikielena on PHP

(Hypertext Preprocessor, versio 5.2.5) ja tietokantapalvelimena MySQL (versio 5.0.27).

Page 6: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

3

2 Ohjelmiston yleisrakenne

Ohjelmisto koostuu yhdeksastatoista (19) dynaamisesta, PHP-koodia sisaltavasta

HTML-sivusta, kolmestatoista (13) kuvatiedostosta, kahdesta (2) CSS-tyylitiedostosta,

yhdesta (1) JavaScript-tiedostosta ja WWW-palvelimen asetustiedostosta.

Kuva 1: Jarjestelman rakennekaavio.

Selaimella suoraan kutsuttavia sivuja on nelja (4): etusivu index.php, yllapitosivu

admin.php, sisaankirjautumissivu login.php ja uloskirjautumissivu logout.php.

Etusivuun ja yllapitosivuun sisallytetaan sisaltosivuja kayttajan tekemien valintojen

perusteella. Sisaltosivujen(kin) kayttajalle tulostettava sisalto vaihtelee kayttajan

valintojen perusteella, joten kaikkien mahdollisten nakymien esittaminen yhdessa

Page 7: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

4

kaaviossa on hyvin hankalaa.

Kuvassa 1 on esitetty jarjestelman rakenne. Tietokantayhteyden avaamiseen ja sul-

kemiseen liittyvat tiedostot (asetukset.php, avaa_db.php ja sulje_db.php) on si-

sallytetty sivuihin index.php, login.php ja admin.php. Kayttaja voi kutsua myos

sivua logout.php, mutta se ohjaa kayttajan sivulle login.php tulostamatta mi-

taan. Etusivuun sisallytetaan viisi (5) erilaista sivua riippuen kayttajan valinnoista.

Yllapitosivuun sisallytettavia sivuja on kuusi (6).

2.1 Toimintaperiaate

Kayttajan nakokulmasta tietokantasovellus koostuu vain kolmesta tiedostosta, joita

han voi selaimellaan ladata. Tiedostossa index.php on kaikki opiskelija-kayttajaryhman

eli ilman kirjautumista suoritettavat kayttotapaukset. Sisaankirjautumiselle on oma

sivunsa login.php ja onnistuneen kirjautumisen jalkeen kayttaja ohjataan kaikki

yllapitoon liittyvat kayttotapaukset sisaltavalle sivulle admin.php.

Kuva 2: Sivujen toimintaperiaate (index.php).

Paasivu (index.php) tulostaa sivun perusrakenteen, avaa (ja lopuksi sulkee) tieto-

kantayhteyden ja sisallyttaa kayttajan kutsuman sisaltosivun sille varattuun tilaan

Page 8: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

5

(kts. kuva 2). Yllapitosivu (admin.php) edella mainittujen lisaksi tarkistaa kirjau-

tumisen.

2.2 Kayttoliittyma

Kuvassa 3 on esitetty kayttajan navigointimahdollisuudet jarjestelmassa.

Kuva 3: Kayttoliittymakaavio.

Page 9: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

6

2.3 Tietoturva

Tietokantasovelluksen turvallisuuteen pyrittiin kiinnittamaan huomiota, vaikka se ei

kurssin arviointiperusteissa tai oppimistavoitteissa etusijalla ollutkaan.

Kayttajien salasanat tallennetaan tietokantaan salasanan ja ”tikas”-merkkijonon yh-

disteen 40-merkkisena SHA-1 -tiivisteena, jolloin tietokannan tietoihin kasiksi paa-

seminen (esim. varmuuskopio) ei viela tarkoita, etta jarjestelmaan voisi kirjautua

kannasta suoraan luetulla kayttajatunnuksella ja salasanalla.

Kaikki tietokantaan meneva kayttajan syottama tieto sanitoidaan SQL-injektioiden

varalta PHP:n mysql real escape string- ja kayttajan HTML-syotteiden varalta

htmlspecialchars -funktioilla, joista ensin mainittu siistii syotteista tietokannan kan-

nalta kriittiset merkit ja jalkimmainen korvaa HTML-merkit (mm. hakasulut) vas-

taavilla entiteeteilla. Ohjausrakenteiden (ts. if-else -ehtolauseiden) avulla rajataan

tietokantahakuihin menevat urlin mukana (GET) tulevat parametrit vain kelvolli-

siin, eli tietokantahaku suoritetaan vain, jos parametri tayttaa sille asetetut ehdot.

Verkkopalvelun kayttoon luodulle tietokantakayttajatunnukselle on annettu vain

tarvittavat oikeudet (insert, select, update ja delete) tietokannan tauluihin, jol-

loin esimerkiksi taulujen poistaminen (drop) ei onnistu vaikka hyokkaaja keksisi ta-

van syottaa omaa koodiaan tietokantahakuihin. Kirjautuminen tunnukselle sallitaan

vain paikallisesti (localhost). Tietokantakayttajatunnus salasanoineen tallennetaan

omaan tiedostoonsa, jonne ulkopuolisilla ei ole lukuoikeutta eivatka tunnukset si-

ten paady ulkopuolisten kasiin, vaikka palvelin virhetilanteen seurauksena nayttaisi

PHP-tiedoston lahdekoodin normaalitilanteessa generoitavan sivun sijasta.

Page 10: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

7

3 Jarjestelman komponentit

3.1 Dynaamiset HTML-paasivut

3.1.1 Etusivu

• Tietokantasovelluksen etusivu, PHP- ja JavaScript-koodia sisaltava dynaami-

nen HTML-sivu

• Tiedosto ./index.php

• Tulostaa opiskelija-kayttoliittyman raamit CSS-muotoiltuna (tyylitiedosto tyy-

li.css)

• Sisaltaa linkit kaikkiin opiskelijan toimintoihin (sisallytettavat sisaltosivut)

seka sisaankirjautumissivulle (login.php)

• Avaa tietokantayhteyden, hakee ja tulostaa julkaistujen kysymysten lukumaa-

ran, sulkee tietokantayhteyden ja vapauttaa kyselyn tuloksen varaaman muis-

titilan

• Sivuun sisallytetaan kayttajan valintojen perusteella GET-parametrina ”s”va-

litetty sisaltosivu (ukk, uudet, haku, kysy, yhteystiedot tai virhe); jos

parametrilla ei ole arvoa tai se poikkeaa sallituista, sisallytetaan oletussivu

ukk.

• Avattu tietokantayhteys on myos sisaltosivujen kaytettavissa

• Sisallytetaan kuvitukseksi sisaltosivua vastaava .jpg -paatteinen kuvatiedosto

Page 11: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

8

Kuva 4: Kuva sivusta index.php. Ymparisto Mac OS X 10.5/Safari 3.1.

3.1.2 Yllapitosivu

• Tietokantasovelluksen yllapitosivu, PHP- ja JavaScript-koodia sisaltava dy-

naaminen HTML-sivu

• Tiedosto ./admin.php

• Tarkistaa kirjautumisen ja ohjaa sivulle login.php, jos kirjautuminen ei ole

voimassa

• Tulostaa yllapitaja-kayttoliittyman raamit CSS-muotoiltuna (tyylitiedosto tyy-

li_mv.css)

• Sisaltaa linkit kaikkiin yllapitajan toimintoihin (sisallytettavat sisaltosivut) se-

ka uloskirjautumissivulle (logout.php) — kayttajatunnuksien hallintasivulle

vieva linkki naytetaan vain ATK-yllapitajalle

Page 12: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

9

• Avaa tietokantayhteyden sisaltosivujen kayttoon ja lopuksi sulkee yhteyden

• Sivuun sisallytetaan kayttajan valintojen perusteella GET-parametrina ”s”va-

litetty sisaltosivu (etusivu, kaikki, aihepiirit, uusi, tiedot tai tun-

nukset); jos parametrilla ei ole arvoa tai se poikkeaa sallituista, sisallytetaan

oletussivu etusivu.

Kuva 5: Kuva sivusta admin.php. Ymparisto Windows XP/Firefox 2.

3.1.3 Sisaankirjautumissivu

• Tietokantasovelluksen sisaankirjautumissivu, PHP-koodia sisaltava dynaami-

nen HTML-sivu

• Tiedosto ./login.php

• Tulostaa CSS-muotoillun (tyylitiedosto tyyli.css) sisaankirjautumissivun

HTML-lomakkeineen

• Kasittelee lahetetyn lomakkeen

Page 13: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

10

• Avaa tietokantayhteyden, tarkistaa lahetetyn tunnuksen ja salasanan

• Onnistuneen kirjautumisen yhteydessa asettaa istuntoon tiedon kayttajatun-

nuksesta ja IP-osoitteesta ja ohjaa yllapitosivulle admin.php

• Epaonnistuneen kirjautumisen yhteydessa tulostaa virheilmoituksen sivulle

Kuva 6: Kuva sivusta login.php. Ymparisto Windows XP/Firefox 2.

3.1.4 Uloskirjautumissivu

• Tietokantasovelluksen sisaankirjautumissivu, PHP-sivu

• Tiedosto ./logout.php

• Lopettaa istunnon ja ohjaa sisaankirjautumissivulle (login.php)

Page 14: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

11

3.2 Dynamiset normaalikayttajan HTML-sisaltosivut

3.2.1 Selaa kysymyksia ja vastauksia

• Tiedosto ukk, osoite index.php?s=ukk

• Etusivun oletussisalto

• Hakee tietokannasta aihepiirien nimet, joihin kuuluu julkaistuja kysymyksia

seka kysymysten maaran aihepiireittain

• Tulostaa aihepiirien nimet (ja kysymysten maarat) hyperlinkkeina valikon lis-

tarakenteeseen

• Hakee tietokannasta aihepiiriin kuuluvat julkaistut kysymykset vastauksineen

valitettaessa aihepiiri-parametrin arvona aihepiirin tunnus

• Vastaukset piilotetaan JavaScriptin avulla ja naytetaan kysymysta klikattaessa

3.2.2 Uusimmat kysymykset

• Tiedosto uudet, osoite index.php?s=uudet

• Tulostaa valikon

• Hakee tietokannasta joko 10 uusinta tai viikon, kahden viikon tai kuukauden

ajalta uudet kysymykset

• Valittaa kayttajan valinnan GET-parametrina ”id”

• Tulostaa loytyneet kysymykset listarakenteeseen aihepiirin kanssa

3.2.3 Haku

• Tiedosto haku, osoite index.php?s=haku

• Tulostaa hakulomakkeen

• Kasittelee lahetetyn (POST) lomakkeen, hakee kannasta hakuehtoja vastaavat

kysymykset ja tulostaa ne aihepiireineen

Page 15: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

12

3.2.4 Jata kysymys

• Tiedosto kysy, osoite index.php?s=kysy

• Tulostaa kysymyslomakkeen

• JavaScript-funktio laskee kysymys-kenttaan syotettavia merkkeja ja nayttaa

jaljella olevien merkkien maaran (256 - n).

• Kasittelee lahetetyn (POST) lomakkeen, ja lisaa kysymyksen tietokannan

kysymykset-tauluun odottamaan vastausta

• Tarkistaa, etta lahetetty kysymys ei ole alle yhden merkin tai yli 256 merkin

mittainen, muuntaa HTML-merkit entiteeteiksi

• Ilmoittaa kayttajalle lahetyksen onnistuneen

3.2.5 Yhteystiedot

• Tiedosto yhteystiedot, osoite index.php?s=yhteystiedot

• Hakee tietokannan kayttajat-taulusta opintoneuvojien (joilla on 40-merkkinen

salasana) nimet ja tulostaa ne listarakenteeseen

3.2.6 Virhe

• Tiedosto virhe, osoite index.php?s=virhe

• WWW-palvelimen palauttaessa HTTP-virheen 403 (Forbidden), 404 (Not found)

tai 500 (Internal server error), nayttaa virhetta vastaavan virheilmoituksen;

virhekoodi valitetaan parametrin ”syy” arvona

3.3 Dynamiset yllapitajan HTML-sisaltosivut

3.3.1 Uudet kysymykset

• Tiedosto etusivu, osoite admin.php?s=etusivu

• Yllapitosivun oletussisalto

Page 16: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

13

• Nayttaa valikon listarakenteessa joko uudet (vastausta odottavat) kysymykset

jattopaivamaarineen tai ilmoituksen, etta uusia kysymyksia ei ole

• Valittaessa vastattava kysymys (valitetaan GET-parametrina ”id”), tulostaa

lomakkeen kysymys-, aihepiiri-, vastaus- ja hyperlinkki-kenttineen

• Kasittelee lahetetyn (POST) lomakkeen ja joko julkaisee, arkistoi tai poistaa

kysymyksen mahdollisine vastauksineen

• Tarkistaa, etta kysymys ja vastaus ovat pituudeltaan kelvollisia ja etta jos

hyperlinkki on annettu, se on yli 10 merkkia pitka, ja tulostaa virheilmoituksen

tarvittaessa; muuntaa HTML-merkit entiteeteiksi

• Ilmoittaa kayttajalle lomakkeen lahettamisen jalkeen toimenpiteen onnistumi-

sesta

3.3.2 Kaikki kysymykset

• Tiedosto kaikki, osoite admin.php?s=kaikki

• Tulostaa listarakenteeseen aihepiirit (ja kysymysten lukumaarat), joihin kuu-

luvia kysymyksia loytyy tietokannasta

• Aihepiiria klikattaessa valittaa aihepiirin tunnuksen GET-parametrina ”aihe-

piiri”, ja tulostaa listan aihepiiriin kuuluvista kysymyksista

• Kysymysten paivaykset naytetaan joko keltaisella tai vihrealla korostettuna

riippuen siita, onko kysymys arkistoitu vai julkaistu

• Kysymysta klikattaessa tulostaa lomakkeen muokattavine kysymys-, aihepiiri-

, vastaus- ja hyperlinkki-kenttineen seka nayttaa kysymyksen jattajan nimen,

jattopaivamaaran, vastaajan nimen ja vastauspaivamaaran seka mahdollisuu-

den (radio button) valita julkaisu tai arkistointi, seka tulostaa lomakkeen la-

hetyspainikkeet, joilla voi tallentaa muutokset tai poistaa kysymyksen

• Tarkistaa syotteiden pituudet ja tulostaa virheilmoituksen tarvittaessa

• Kasittelee lahetetyn (POST) lomakkeen ja suorittaa taulujen paivityksen seka

ilmoittaa kayttajalle toimenpiteen onnistumisesta

Page 17: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

14

3.3.3 Aihepiirit

• Tiedosto aihepiirit, osoite admin.php?s=aihepiirit

• Tulostaa listarakenteeseen kaikki tietokannasta loytyvat aihepiirien nimet seka

mahdollisuuden lisata uusi

• Haluttaessa lisata uusi aihepiiri, tulostaa lomakkeen, johon voi syottaa uuden

aihepiirin nimen ja lahetyspainikkeen

• Tarkistaa, etta saman nimista aihepiiria ei jo ole kannassa tai etta lahetetty

aihepiirin nimi ei ole alle yhden merkin pituinen

• Kasittelee lahetetyn (POST) lomakkeen ja lisaa uuden aihepiirin tietokantaan

3.3.4 Syota uusi kysymys

• Tiedosto uusi, osoite admin.php?s=uusi

• Tulostaa lomakkeen kysymys-, aihepiiri-, vastaus- ja hyperlinkki-kenttineen

• Lahetettaessa lomake tarkistaa, etta kysymys ja vastaus ovat pituudeltaan

vaaditun mittaisia

• Lisaa lahetetyn (POST) kysymyksen ja vastauksen tietokantaan

3.3.5 Omat tiedot

• Tiedosto tiedot, osoite admin.php?s=tiedot

• Tulostaa kirjautuneen kayttajan kayttajatunnuksen, nimen ja statuksen seka

hyperlinkit, joista paasee muokkaamaan nimeaan tai salasanaansa

• Tulostaa kayttajan valinnasta joko salasanan vaihto- tai nimen vaihto-lomakkeen

• Kasittelee lahetetyt (POST) tiedot ja tarkistaa joko salasanan tai nimen pi-

tuuden

• Tallentaa muuttuneet tiedot tietokantaan

Page 18: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

15

3.3.6 Kayttajatunnukset

• Tiedosto tunnukset, osoite admin.php?s=tunnukset

• Tarkistaa, etta kirjautunut kayttaja on statukseltaan yllapitaja; muuten tu-

lostaa virheilmoituksen

• Tulostaa jarjestelman kayttajatunnukset (joiden salasana tietokannassa on 40-

merkkinen), lukuunottamatta kayttajan omaa tunnusta

• Kayttajatunnusta klikkaamalla tulostaa ko. kayttajan tiedot ja mahdollistaa

nimen ja statuksen muokkaamisen seka salasanan resetoinnin (arvotaan uusi 8-

merkkinen salasana) ja tunnuksen poistamisen (salasana-kenttaan arvo ”pois-

tettu”)

• Lisattaessa uusi kayttaja syotetaan 8-merkkinen kayttajatunnus, nimi ja vali-

taan tunnuksen tyyppi (status)

• Lahetettaessa (POST) lomake tarkistaa syotettyjen salasanojen samanlaisuu-

den ja pituuden (vahintaan 6 merkkia)

3.4 Asetustiedostot

Tietokantayhteys muodostetaan sisallyttamalla PHP-tiedostoihin tiedostot asetuk-

set.php ja avaa_db.php. Tietokantayhteys suljetaan sisallyttamalla tiedosto sul-

je_db.php.

Tiedosto asetukset.php sisaltaa tietokannan nimen, verkko-osoitteen (localhost), kayt-

tajatunnuksen ja salasanan.

WWW-palvelimen asetustiedostossa .htaccess maaritellaan mm.

HTTP-virhedokumenttien 403 (Forbidden), 404 (Not found) ja 500 (Internal server

error) osoitteet.

3.5 Kuvatiedostot

Opiskelijakayttoliittyman sivuihin sisallytetaan kuvitukseksi saman niminen kuva-

tiedosto kuin sisaltosivukin. Symbolit indikoivat omalta osaltaan, mika sivu on avat-

tuna, mutta toiminnallisia ominaisuuksia kuvilla ei jarjestelmassa ole.

Page 19: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

16

Kuva 7: Sivujen kuvakkeet

3.6 Tyylitiedostot

HTML-sivujen muotoilut on toteutettu CSS-tyylimaaritysten avulla. Tiedostossa

tyyli.css on maaritelty punasavyiset muotoiluasetukset opiskelijakayttoliittymal-

le ja tiedostossa tyyli_mv.css harmaahkot muotoiluasetukset yllapitokayttoliitty-

malle. Nakyman varimaailma muuttuu kirjauduttaessa sisaan tai ulos.

3.7 JavaScript-tiedostot

JavaScript-funktiot vastauksien nayttamiselle ja piilottamiselle seka lomakkeen merk-

kien laskemiselle on tallennettu tiedostoon javascript.js.

4 Asennustiedot

Yllapidon helpottamiseksi tiedostot on jaettu eri hakemistoihin niiden kayttotar-

koituksen mukaan. Kuvat loytyvat hakemistosta ./kuvat/, JavaScript-tiedosto(t)

hakemistosta ./js/, tietokantayhteyden luomiseen liittyvat asetustiedostot hake-

mistosta ./kirjasto/, index- ja admin-sivujen kutsumat sisaltosivut loytyvat ha-

kemistosta ./sivut/, CSS-tyylitiedostot loytyvat hakemistosta ./tyyli/.

Page 20: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

17

Jarjestelman tiedostojen oikeudet, niiden viema tila ja jakautuminen eri hakemistoi-

hin selvinnee parhaiten oheisesta hakemistolistauksesta. Asennettaessa tietokanta-

sovellusta toiselle palvelimelle, vastaavan listauksen saa esimerkiksi komennolla ls

-ahlR.

Tiedostot vievat levytilaa yhteensa noin 130 kilotavua. Tietokannan koko muutaman

kymmenen kysymyksen testiaineistolla noin 60 kilotavua.

.:

total 19K

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 9 thusu tkol 1.0K Apr 19 12:00 ..

-rw-r--r-- 1 thusu tkol 322 Apr 19 12:00 .htaccess

-rwx--x--x 1 thusu tkol 2.5K Apr 19 12:00 admin.php

-rwx--x--x 1 thusu tkol 2.1K Apr 19 12:00 index.php

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 js

drwx--x--x 2 thusu tkol 1.0K Apr 19 12:00 kirjasto

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 kuvat

-rwx--x--x 1 thusu tkol 3.6K Apr 19 12:00 login.php

-rwx--x--x 1 thusu tkol 165 Apr 19 12:00 logout.php

drwx--x--x 2 thusu tkol 1.0K Apr 19 12:00 sivut

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 tyyli

./js:

total 3.0K

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 ..

-rw-r--r-- 1 thusu tkol 416 Apr 19 12:00 javascript.js

./kirjasto:

total 5.0K

drwx--x--x 2 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 ..

-rwx--x--x 1 thusu tkol 130 Apr 19 12:00 asetukset.php

-rwx--x--x 1 thusu tkol 146 Apr 19 12:00 avaa_db.php

-rwx--x--x 1 thusu tkol 32 Apr 19 12:00 sulje_db.php

Page 21: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

18

./kuvat:

total 28K

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 ..

-rw-r--r-- 1 thusu tkol 2.5K Apr 19 12:00 admin.jpg

-rw-r--r-- 1 thusu tkol 1.9K Apr 19 12:00 haku.jpg

-rw-r--r-- 1 thusu tkol 2.8K Apr 19 12:00 kysy.jpg

-rw-r--r-- 1 thusu tkol 1.4K Apr 19 12:00 login.jpg

-rw-r--r-- 1 thusu tkol 51 Apr 19 12:00 luettelo.gif

-rw-r--r-- 1 thusu tkol 823 Apr 19 12:00 luettelo_mv.gif

-rw-r--r-- 1 thusu tkol 945 Apr 19 12:00 nappula.gif

-rw-r--r-- 1 thusu tkol 99 Apr 19 12:00 tausta.gif

-rw-r--r-- 1 thusu tkol 2.9K Apr 19 12:00 ukk.jpg

-rw-r--r-- 1 thusu tkol 2.1K Apr 19 12:00 uudet.jpg

-rw-r--r-- 1 thusu tkol 702 Apr 19 12:00 varjo.jpg

-rw-r--r-- 1 thusu tkol 2.2K Apr 19 12:00 virhe.jpg

-rw-r--r-- 1 thusu tkol 1.6K Apr 19 12:00 yhteystiedot.jpg

./sivut:

total 69K

drwx--x--x 2 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 ..

-rwx--x--x 1 thusu tkol 3.0K Apr 19 12:00 aihepiirit

-rwx--x--x 1 thusu tkol 12K Apr 19 12:00 etusivu

-rwx--x--x 1 thusu tkol 2.4K Apr 19 12:00 haku

-rwx--x--x 1 thusu tkol 12K Apr 19 12:00 kaikki

-rwx--x--x 1 thusu tkol 3.4K Apr 19 12:00 kysy

-rwx--x--x 1 thusu tkol 4.5K Apr 19 12:00 tiedot

-rwx--x--x 1 thusu tkol 9.6K Apr 19 12:00 tunnukset

-rwx--x--x 1 thusu tkol 3.8K Apr 19 12:00 ukk

-rwx--x--x 1 thusu tkol 6.0K Apr 19 12:00 uudet

-rwx--x--x 1 thusu tkol 4.2K Apr 19 12:00 uusi

-rwx--x--x 1 thusu tkol 914 Apr 19 12:00 virhe

-rwx--x--x 1 thusu tkol 1.1K Apr 19 12:00 yhteystiedot

Page 22: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

19

./tyyli:

total 10K

drwxr-xr-x 2 thusu tkol 1.0K Apr 19 12:00 .

drwxr-xr-x 7 thusu tkol 1.0K Apr 19 12:00 ..

-rw-r--r-- 1 thusu tkol 3.2K Apr 19 12:00 tyyli.css

-rw-r--r-- 1 thusu tkol 3.5K Apr 19 12:00 tyyli_mv.css

5 Kayttoohje

Tietokantasovellus on hyvin helppokayttoinen, intuitiivinen ja vuorovaikutteinen,

joten erillista kayttoohjetta sille ei ole tuotettu.

Tietokantasovellus loytyy osoitteesta http://db.cs.helsinki.fi/u/thusu/tsoha/.

6 Post Mortem -analyysi

Projektia jalkikateen arvoitaessa on todettava sen vieneen verrattain paljon aikaa

neljan opintopisteen kurssiksi. Tietokantasovelluksista sen enempaa kuin PHP:kaan

ei ollut kokemusta etukateen, joten kaikenlaiseen ihmettelyyn kului aikaa.

Tietokantasovellus oli opintojaksona poikkeuksellinen siten, etta sen suorittaminen

oli mielekasta. Lopputulokseen olen ihan tyytyvainen ja oppimistavoitteet tulivat

uskoakseni paapiirteittain saavutettua.

Page 23: Tietokantasovelluksen toteutusdokumentti...Tietokantasovellus toteutettiin vapaan l¨ahdekoodin LAMP-alustalle (Linux-Apache-MySQL-PHP) jase vaatiisiis toimiakseen Apache HTTP Server

Liite 1. Tehtavananto

Opintoneuvonnan UKK (FAQ = Frequenty Asked Questions)

IS97HL16

Opintoneuvonnasta kysytaan kaikenlaisia asioita. WWW-pohjaisessa neuvontapal-

veluun voitaisiin koota yleisimmin esiintyvat kysymykset ja vastaukset. Vastaukseen

voisi sisaltya tietokantaan kirjattu lyhyt viesti ja taman lisaksi linkkeja joihinkin tie-

dostoihin, tai paikkoihin, joista saa lisatietoa tai paremman vastauksen. Kysymykset

voisi luokitella aihepiirin perusteella. Jarjestelmaa kayttaisivat seka opiskelijat et-

ta opintoneuvojat etsiessaan vastauksia ongelmiin. Jos opiskelija ei loyda vastausta

han voi valittaa kysymyksen opintoneuvojalle neuvontapalvelun kautta. Neuvoja voi

sitten sen lisaksi, etta vastaa yksityisesti, myos laittaa vastauksen jarjestelmaan.

Toimintoja:

1. kysymysten ja vastausten katselu

2. vastausten ajankohdat vanhentuneiden loytamiseksi

3. uusien kysymysten selailu

4. vastauksen vienti jarjestelmaan

5. Kysymyksen teko jarjestelman kautta (kenelle tahansa opintoneuvojalle, jolle-

kin tietylle).

6. Aihepiirien ja niiden jarjestyksen maarittely