OSA IV Yhteenveto. Oppitunti. 23. Esimerkki (Osa 1) 24. Esimerkki (Osa 2)

Koko: px
Aloita esitys sivulta:

Download "OSA IV Yhteenveto. Oppitunti. 23. Esimerkki (Osa 1) 24. Esimerkki (Osa 2)"

Transkriptio

1 OSA IV Yhteenveto Oppitunti 23. Esimerkki (Osa 1) 24. Esimerkki (Osa 2)

2

3 23. Esimerkki (Osa 1) 395 OPPITUNTI 23 Esimerkki (Osa 1) Jos olet ollut mukana alusta alkaen, sinulla pitäisi nyt olla hyvät perustyökalut PHP-ohjelmien tekemiseen. Tällä ja seuraavalla tunnilla luomme kokonaisen toimivan esimerkin, jossa käytetään useita aiemmissa luvuissa esitettyjä tekniikoita. Tämän tunnin aiheita ovat seuraavat: Kuinka luodaan projektisuunnitelma Kuinka käytetään include()-funktiota funktiokirjastojen ja joustavien navigointialkioiden luomiseen Kuinka ylläpidetään tilaa kyselymerkkijonoilla, tietokannoilla ja istuntofunktioilla Kuinka erotetaan HTML PHP:stä, jotta tekniikasta tietämättömät kehittäjät osaisivat työskennellä dynaamisten ympäristöjen kanssa Kuinka käytetään header()-funktiota johdattamaan käyttäjä toisaalle Kuinka muodostetaan tilien suojaamisen strategia

4 Esimerkki (Osa 1) Lyhyesti Olettakaamme, että yhteisön portaali on pyytänyt meitä rakentamaan pienen vuorovaikutteisen tapahtumapäiväkirjan pienille kaupungeille, joita se palvelee. Kerhot ja yhtyeet voisivat rekisteröityä sisälle ja julkistaa tapahtumansa. Käyttäjät voisivat sitten tarkistaa tapahtumatietokannan nähdäkseen, mitä on meneillään. Käyttäjät voisivat kaventaa etsintäänsä kerhotyyppeihin ja erilaisiin tapahtumiin; he voisivat myös valita alueen, jolla tapahtumien tulisi olla. Tällä ja seuraavalla tunnilla työskentelemme tämän sovelluksen alustavalla versiolla. Rakenne Ennen kuin alamme kirjoittaa koodia, meidän tulee päättää tarkasti, kuinka skripti toimii. Kuinka käyttäjä voisi navigoida ympäristössä? Mitä näyttöjä tulisi ottaa mukaan? Projekti jakautuu luonnollisesti kahteen ympäristöön. Ensiksikin on jäsenten alue, jota käytetään kerhoinformaation ylläpitoon ja uusien tapahtumien lisäämiseksi päiväkirjaan. Toiseksi on käyttäjien alue, jolla he selaavat tietokantaa. Kuva 23.1 näyttää sovelluksen rakenteen. KUVA 23.1 Sovelluksen rakenne Ohjelmiston osatekijät (valikot ja tietojoukot) ovat siis: Members (Jäsenet) Menu (Valikko) Home (Koti) Join Login (Liity) Update (Päivitä) Club (Kerho) Review (Katsele) Events (Tapahtumat) Update (Päivitä) Event (Tapahtuma) View (Näytä)

5 23. Esimerkki (Osa 1) 397 Events (Tapahtumat) View (Näytä) Members Public (Jäsenet) Uudet jäsenet liittyvät kerhoon sivun join.php kautta; sivulla he voivat asettaa nimi- ja salasanatietonsa. Olettaen, että heidän valitsemansa nimi ei ole jo varattu, heidät johdatetaan lomakkeelle updateclub.php, jossa he voivat antaa kerhotietonsa. Kun tämä lomake on täytetty, voivat jäsenet lisätä tapahtumia. Kun kerhot on lisätty, jäsen lähetetään jäsenten valikkosivulle (membersmenu.php), josta löytyvät kaikki jäsenten tarvitsemat toiminnot. Olemassa oleva jäsen voi aloittaa liittymissivulta (login.php). Kun nimi ja salasana on tarkistettu, jäsen voidaan ohjata suoraan sivulle membersmenu.php. Valikkosivulta jäsenet voivat lisätä uusia tapahtumia (updateevent.php) ja katsella listaa asetetuista tapahtumista (reviewevents.php). He voivat myös muuttaa kerhotietojaan milloin tahansa (updateclub.php). Kaikki käyttäjät voivat katsella tapahtumalistaa, joko kuukausitasolla tai vuositasolla tai hakea tapahtumia tyypin tai alueen mukaan; hakeminen tapahtuu sivulta viewevents.php. He voivat myös tutkia sijainnin tai tyypin mukaan generoitua kerholuetteloa; toiminto löytyy sivulta viewclubs.php. Käyttäjät voivat myös klikata kerhoa tai tapahtumaa ja saada tarkempaa tietoa sivulta viewevent.php tai viewclub.php. Tietokannan suunnittelu Luomme nyt tietokannan nimeltä organizer ja laitamme siihen neljä taulua: clubs, events, areas ja types. Meidän on selvästikin tallennettava tietoa kerhoista ja tapahtumista erillisiin tauluihin, koska yhdestä kerhosta on linkkejä useisiin tapahtumiin. Rakennamme erilliset taulukot määrittämään tapahtumatyypit ja alueet, koska silloin meidän on helpompi rakentaa alasvetovalikoita tiedon etsintää ja lisäämistä varten. Luomme taulukot käsin; ensiksi clubs-taulu: create table clubs ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY( id ), name VARCHAR(50), type CHAR(3), area CHAR(3), mail VARCHAR( 50 ), description BLOB, login VARCHAR(8), password VARCHAR(8) ); Jäsen lisää tietoa kenttiin name, mail, description, login ja password. Kenttä nimeltä type tallentaa tyypin ja area taas alueen ja noiden kenttien kautta saadaan tästä taulusta yhteys types- ja areas-tauluihin.

6 Esimerkki (Osa 1) The events-taulu tallentaa tietoa kerhojen tapahtumista: create table events( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY( id ), type CHAR(3), area CHAR(3), edate INT, ename VARCHAR(100), evenue VARCHAR(100), eaddress VARCHAR( 255 ), ezip VARCHAR(20), edescription BLOB, eclub INT NOT NULL ); Huomaa, että myös tässä taulussa on type- ja area-kenttä. Kerho saattaa sijaita kaupungin pohjoispuolella, mutta tapahtuma pidetään etelässä. Jokin yhdistys voi pitää koulutustilaisuuden tai poliittisen tilaisuuden. Kenttä nimeltä eclub tallentaa sen kerhon ID-tunnisteen, jolle tapahtuma kuuluu. Voimme käyttää sitä luettelemaan kaikki tapahtumat, jotka kuuluvat tietylle kerholle, tai ottamaan esille kerhotietoa tapahtumalistasta käsin. Alueita ja tyyppejä varten toteutetut taulut, types ja areas, ovat yksinkertaisia: create table areas( id CHAR(3), area VARCHAR( 30 ) ); create table types( id CHAR(3), type VARCHAR( 30 ) ); Jäsen ei voi muuttaa näiden taulukoiden tietoja. Sen sijaan me voimme lisätä tauluihin omaa luokittelutietoamme käyttämällä SQL-kielen INSERT-lauseita. Jäsenelle esitetään nuo arvot vaihtoehtoina: INSERT INTO types ( id, type ) VALUES("COM", "Community"); Taulukot 23.1 ja 23.2 sisältävät lisättävät tiedot.

7 23. Esimerkki (Osa 1) 399 TAULUKKO 23.1 Tieto, joka lisätään types-tauluun ID MUS FAM SOC COM Types Music Family Social Community TAULUKKO 23.2 Tieto, joka lisätään areas-tauluun ID NOR SOU EAS WES Areas North South East West Suunnitteluvaihtoehdot Olet jo nähnyt vaihtoehdot ja valinnat, joita olemme tehneet rakennetta pohtiessamme. Aiomme kehittää erillisen sivun jokaista näyttöä kohti sen sijaan, että yksittäinen sovellus palvelisi useita eri sivuja aina olosuhteiden mukaan. Valitsemallamme lähestymistavalla on hyvät ja huonot puolensa. Dynaamisen ympäristön muodostaminen, joka käyttää useita sivuja, voi johtaa toistuviin koodirakenteisiin ja tehdä projektista vaikeammin ylläpidettävän, varsinkin, jos projekti laajenee. Toisaalta voimme antaa täydellisen prototyypin suunnittelijoille ja sivujen kehittäjille ja he voivat kehittää sivut melkein kuin ne olisivat standardeja HTML-sivuja. Jäsenten ympäristö Nyt on aika aloittaa koodaaminen! Tämän luvun loppuosassa kehitetään jäsenille tarkoitettu sovelluksen osio. On hyvä aloittaa tämä jakso laittamalla tauluihin ensin testitietoa. Muttaa ennen kuin voimme tehdä niin, meidän tulee kuitenkin luoda tili itsellemme. join.php ja dblib.inc Tiedosto join.php tallentaa lomakkeen, jonka kautta uusi jäsen voi lähettää käyttäjänimensä ja salasanansa. Tarkistaaksemme, ovatko tunnisteet jo käytössä, ja lisätäksemme sitten uutta tietoa meidän tulee ensin avata tietokanta. Tätä toimintoa tarvitsemme usein, joten lienee parasta tehdä toimintoa varten funktio ja tallentaa se erilliseen asiakirjaan. Kyseinen tiedosto voidaan sitten sisällyttää kaikille sivuille include()- lauseella. Itse asiassa käytämme tuota asiakirjaa, jolle annamme nimen dblib.inc, kaikkien tietokantaa käsittelevien funktioiden majapaikkana. Näin PHP-sivumme pysyvät puhtaina SQL-lauseista. Tietokantafunktioiden erottaminen pääkoodista helpottaa myös skriptien muuttamista sellaisiksi, että ne toimivat erilaisten tietokantasovellusten kanssa. Joskus funktioita saatetaan joutua kirjoittamaan uusiksi, mutta kutsuvan koodin tulisi toimia odotetusti sellaisenaan. Luokaamme nyt funktio, joka kytkeytyy tietokantaan.

8 Esimerkki (Osa 1) LISTAUS 23.1 Ote tiedostosta dblib.inc 1: $link; 2: connecttodb(); 3: function connecttodb() 4: { 5: global $link; 6: $link = mysql_connect( "localhost", "harry", "elbomonkey" ); 7: if (! $link ) 8: die( "Couldn't connect to MySQL" ); 9: mysql_select_db( "organizer", $link ) 10: or die ( "Couldn't open organizer: ".mysql_error() ); 11: } Edellä oleva connecttodb()-funktio esittelee globaalin muuttujan $link, joka tallentaa tietokantatunnisteen, jonka mysql_connect() palauttaa. Olemme määritelleet $link-muuttujan globaaliksi, jotta toiset tietokantakyselyitä tekevät funktiot voisivat käyttää sitä. Emme pelkästään kytkeydy mysql-demoniin connecttodb()-funktiolla; yritämme myös valita organizer-tietokannan. Koska näiden operaatioiden menestyminen on olennaista koko ympäristön toiminnalle, lopetamme suorituksen, jos joko mysql_connect() tai mysql_select_db() epäonnistuu. Luomme edelleen kirjaston, jonka kaikki sivut jakavat. Sen nimi on nyt clublib.inc ja se sisältää funktioita, jotka auttavat istunnon hallinnassa ja todentamistoiminnoissa. Käytämme istuntofunktioita tallentamaan assosiatiivisen taulukon nimeltä $session. Käynnistämme sitten clublib.inc-tiedostossa funktion session_start() aloittamaan tai eväämään istunnon ja funktion session_register() yhdistämään muuttujan siihen: Listaus 23.2 Ote tiedostosta clublib.inc 1: session_start(); 2: session_register( "session" ); Muista, että sisällytettävissä tiedostoissa oleva PHP-koodi tulee laittaa tagien (<?php) ja (?>) sisälle. Saattaa näyttää melkoisen hämäävältä tallentaa toiminnallisuutta erillisiin tiedostoihin, mutta se vähentää meiltä runsaasti toistuvia koodiosia. Olemme nyt valmiita luomaan sivun join.php. Koodi on listauksessa 23.3.

9 23. Esimerkki (Osa 1) 401 Listaus 23.3 join.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc"); 4: $message=""; 5: if ( isset( $actionflag ) && $actionflag=="join") 6: { 7: if ( empty( $form[login] ) 8: empty( $form[password] ) 9: empty( $form[password] ) ) 10: $message.= "you must fill in all fields<br>\n"; 11: if ( $form[password]!= $form[password2] ) 12: $message.= "Your passwords did not match<br>\n"; 13: if ( strlen( $form[password] ) > 8 ) 14: $message.= "Your password must be less than 15: 8 characters<br>\n"; 16: if ( strlen( $form[login] ) > 8 ) 17: $message.= "Your login must be less than 18: 8 characters<br>\n"; 19: if ( getrow( "clubs", "login", $form[login] ) ) 20: $message.= "Login \"$form[login]\" already exists. 21: Try another<br>\n"; 22: if ( $message == "" ) // löysimme virheitä 23: { 24: $id = newuser( $form[login], $form[password] ); 25: cleanmembersession( $id, $form[login], $form[password] ); 26: header( "Location: updateclub.php?".sid ); 27: exit; 28: } 29: } 30:?> 31: <html> 32: <head>

10 Esimerkki (Osa 1) 33: <title>join!</title> 34: </head> 35: 36: <body> 37: <?php 38: include("publicnav.inc"); 39:?> 40: <p> 41: <h1>join</h1> 42: <?php 43: if ( $message!= "" ) 44: { 45: print "<b>$message</b><p>"; 46: } 47:?> 48: <p> 49: <form action="<?php print $PHP_SELF;?>"> 50: <input type="hidden" name="actionflag" value="join"> 51: <input type="hidden" name="<?php print session_name()?>" 52: value="<?php print session_id()?>"> 53: Login: <br> 54: <input type="text" name="form[login]" 55: value="<?php print $form[login]?>" maxlength=8> 56: </p> 57: <p> 58: Password: <br> 59: <input type="password" name="form[password]" value="" maxlength=8> 60: </p> 61: <p> 62: Confirm password: <br> 63: <input type="password" name="form[password2]" value="" maxlength=8> 64: </p> 65: <p>

11 23. Esimerkki (Osa 1) : <input type="submit" value="update"> 67: </p> 68: </form> 69: 70: </body> 71: </html> Ensiksi laitamme sivulle kirjastotiedostomme lauseella include(), joten sivulta saadaan heti tietokantayhteys ja aktiivinen istunto. Alustamme muuttujan nimeltä $message. Muuttuja löytyy useilta projektimme sivuilta. Sillä on tuplamerkitys. Täytämme sen virhetiedolla, kun testaamme lähetettyä tietoa. Virhetieto voidaan sitten tulostaa selaimelle. Voimme käyttää muuttujaa myös lippuna, kertomaan meille, onko ongelmia syntynyt. Jos muuttujassa on edelleen tyhjä merkkijono, voimme olettaa, että kaikki suorittamamme testit ovat antaneet hyväksyttävän tuloksen. Testaamme sitten muuttujan $actionflag esiintymistä ja sisältöä. Se on toinen toistuva kuvio. Asetamme piilokentän nimeltä actionflag jokaiselle lomakkeelle, jonka luomme, ja annamme sille sopivan arvon. Jos vastaava muuttuja $actionflag on olemassa ja täytetty odotetulla arvolla, voimme olla varmoja siitä, että lomake on lähetetty ja voimme jatkaa syötön tarkistamista. Jos muuttujaa ei ole olemassa, tiedämme, että jäsen on tullut linkin tai kirjanmerkin kautta eikä ole lähettänyt vielä tietoa. Ohittakaamme nyt HTML-jakso. Sivun BODY-elementissä laitetaan sivulle vielä toinen tiedosto. Siinä on globaalia navigointitietoa. On hyvä laittaa navigaatiotieto jo varhaisessa vaiheessa. Se helpottaa ympäristön testaamista, kun menemme eteenpäin. Lisäämme navigaatioelementtejä sisällytettävään tiedostoon nimeltä publicnav.inc. Toistaiseksi siinä on navigointitietoa vain julkisesti käytettäville sivuille. Listaus 23.4 Ote tiedostosta publicnav.inc 1: <a href="viewclubs.php?<?php print SID?>">Browse clubs</a> 2: <a href="viewevents.php?<?php print SID?>">Browse events</a> 3: <a href="join.php?<?php print SID?>">Join</a> 4: <a href="login.php?<?php print SID?>">Login</a> 5: <a href="index.php?<?php print SID?>">Home</a> Laittamalla navigointialkiot erilliseen tiedostoon voimme kerralla päivittää koko sivuston navigointiin liittyvän ulkoasun. Kun sivun otsikko on kirjoitettu, koodi testaa $message-muuttujan. Jos siinä ei ole tyhjää merkkijonoa, kirjoitamme sen sisällön selaimelle. Kyseessä on mekanismi, jolla voimme lähettää palautetietoa jäsenelle, jos hänen syöttämiään tietoja ei voida hyväksyä. HTML-lomake määrittelee kolme näkyvää kenttää: form[login], form[password] ja form[password2]. Käytämme tällaista outoa nimeämistapaa, koska PHP muuntaa nämä nimet ja niiden vastaavat arvot yksittäiseen assosiatiiviseen taulukkoon nimeltä $form. Tämä auttaa meitä suojautumaan nimiavaruuden hajanaisuudelta. Pidämme kaikki istuntomuuttujat taulukossa nimeltä $session ja kaikki lomakemuuttujat taulukossa nimeltä $form. Näin voimme suojautua virheitä vastaan. On hyvä pitää globaalien muuttujien määrä mahdollisimman vähäisenä, jotta vältyttäisiin sekaannuksilta; tämä projekti on jo niin laaja, että globaaleja muuttujia kannattaa seurata. Käytämme $form-taulukkoa jokaisessa skriptissä, joka sisältää lomakkeen. Luomme myös yhden piilokentän nimeltä actionflag ja toisen, joka tallentaa istunnon nimen ja istuntomuuttujan. Kaikkialla tässä projektissa viemme aina istuntoa koskevan ID:n sivulta toiselle, joten emme kadota asiakkaita, jotka eivät halua tai voi käyttää evästeitä.

12 Esimerkki (Osa 1) Jos testaat istuntoja ylläpitäviä skriptejä, on hyvä laittaa evästeet pois päältä ensin. Siten tiedät, oletko kyennyt viemään istunnon ID:n sivulta toiselle. Nyt kun olemme katselleet HTML-lomaketta, voimme tarkistaa koodin, jota käytämme syöttötiedon testaamiseen. Tarkistamme, että jäsen on täyttänyt kaikki kentät ja että mikään niistä ei sisällä enempää kuin kahdeksan merkkiä. Sitten kutsumme uutta funktiota nimeltä getrow(); se sisältyy tiedostoon dblib.inc. Funktio ottaa argumenteikseen taulukon nimen, kentän nimen ja kentän arvon. Sitten se käyttää niitä koettaessaan löytää vastaavan rivin tietokannasta ja palauttaa rivin taulukossa. Listaus 23.5 Ote tiedostosta dblib.inc 1: function getrow( $table, $fnm, $fval ) 2: { 3: global $link; 4: $result = mysql_query( "SELECT * FROM $table WHERE $fnm='$fval'", $link ); 5: if (! $result ) 6: die ( "getrow fatal error: ".mysql_error() ); 7: return mysql_fetch_array( $result ); 8: } Viemme funktiolle taulukon nimen, clubs, kentän nimen, login, ja arvon, jonka jäsen on antanut kohtaan $form[login]. Jos mysql_fetch_array() palauttaa täytetyn taulukon, tiedämme, että tuollaista tunnusta käyttävä jäsen on jo olemassa, joten annamme virheilmoituksen. Jos muuttuja $message sisältää edelleenkin tyhjän merkkijonon, voimme mennä eteenpäin ja luoda uuden jäsenen. Se tehdään kahdessa vaiheessa. Ensiksikin meidän tulee päivittää tietokanta. Luomme uuden dblib.inc-funktion nimeltä newuser() käsittelemään tätä: LISTAUS 23.6 Ote tiedostosta dblib.inc 1: function newuser( $login, $pass ) 2: { 3: global $link; 4: $result = mysql_query( "INSERT INTO clubs (login, password) 5: VALUES('$login', '$pass')", $link); 6: return mysql_insert_id( $link ); 7: }

13 23. Esimerkki (Osa 1) 405 Tämä funktio ottaa arvoikseen käyttäjätunnuksen ja salasanan. Se käyttää niitä uuden rivin lisäämiseksi clubs-taulukkoon. Se käyttää mysql_insert_id()-funktiota palauttamaan automaattisesti kasvatetun idkentän. Nyt kun meillä on arvo jäsenen ID:lle, voimme kutsua toista kirjastofunktiota; cleanmembersession() on tiedostossa clublib.inc. Se ottaa argumenteikseen ID:n, käyttäjätunnuksen ja salasanan ja tallentaa ne $session-taulukkoon. Nämä arvot ovat nyt jokaisen istunnossa käytettävän sivun saatavilla. Voimme käyttää niitä todentamaan jäsenen jokaisella näytöllä. LISTAUS 23.7 Ote tiedostosta clublib.inc 1: function cleanmembersession( $id, $login, $pass ) 2: { 3: global $session; 4: $session[id] = $id; 5: $session[login] = $login; 6: $session[password] = $pass; 7: $session[logged_in] = true; 8: } Edellä mainittujen id-, login- ja salasana-arvojen lisäksi asetamme myös lippukomponentin nimeltä logged_in. Kun olemme lopuksi päivittäneet istunnon ja tietokannan, voimme lähettää jäsenen eteenpäin join.php:ssa. Kutsumme header()-funktiota, joka johtaa selaimen sivulle updateclub.php, jossa hän antaa lisätietoa rekisteröimästään kerhosta. Tulostus on esitetty kuvassa KUVA 23.2 Tulostus tiedostosta join.php. Tällä näytöllä on kaksi eri tarkoitusta: siinä sallitaan uuden jäsenen lisätä kerhotietoa ja lisäksi muuttaa omia tietojaan. Listaus 23.8 esittää tiedoston updateclub.php sisällön.

14 Esimerkki (Osa 1) Listaus 23.8 updateclub.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc"); 4: $club_row = checkuser(); 5: $message = ""; 6: if ( isset( $actionflag ) && $actionflag=="update" ) 7: { 8: if ( empty( $form[name] ) ) 9: $message.="your club must have a name<br>\n"; 10: if (! getrow( "areas", "id", $form[area] ) ) 11: $message.= "PANIC: That area code can't be found<br>"; 12: if (! getrow( "types", "id", $form[type] ) ) 13: $message.= "PANIC: That type code can't be found<br>"; 14: if ( $message == "" ) 15: { 16: updateorg( $session[id], $form[name], $form[area], 17: $form[type], $form[mail], $form[description] ); 18: header("location: membersmenu.php?".sid); 19: exit; 20: } 21: } 22: else 23: { 24: $form = $club_row; 25: } 26:?> 27: <html> 28: <head> 29: <title>update your club listing</title> 30: </head> 31: 32: <body>

15 23. Esimerkki (Osa 1) : <?php 34: include("publicnav.inc"); 35:?> 36: <h1>amend club information</h1> 37: <?php 38: if ( $message!= "" ) 39: { 40: print "<b>$message</b><p>"; 41: } 42:?> 43: <form action="<?php print $PHP_SELF;?>"> 44: <input type="hidden" name="actionflag" value="update"> 45: <input type="hidden" name="<?php print session_name()?>" 46: value="<?php print session_id()?>"> 47: <p> 48: Club name: <br> 49: <input type="text" name="form[name]" 50: value="<?php print stripslashes($form[name])?>"> 51: </p> 52: <p> 53: Club area: <br> 54: <select name="form[area]"> 55: <?php writeoptionlist( "areas", $form[area] )?> 56: </select> 57: </p> 58: <p> 59: Club type: <br> 60: <select name="form[type]"> 61: <?php writeoptionlist( "types", $form[type] )?> 62: </select> 63: </p> 64: <p> 65: Contact <br>

16 Esimerkki (Osa 1) 66: <input type="text" name="form[mail]" 67: value="<?php print stripslashes($form[mail])?>"> 68: </p> 69: <p> 70: Club description: <br> 71: <textarea name="form[description]" rows=5 cols=30 wrap="virtual"> 72: <?php print stripslashes($form[description])?> 73: </textarea> 74: </p> 75: <p> 76: <input type="submit" value="update"> 77: </p> 78: </form> 79: </body> 80: </html> Jälleen kerran lisäämme tiedostot dblib.inc ja clublib.inc ja säästymme näin kirjoittamasta koodia, jolla avataan tietokanta ja palautetaan istunto. Kutsumme uutta funktiota nimeltä checkuser(), joka on kirjastossa clublib.inc. Funktio tarkistaa jäsenen istuntotiedot suhteessa tietokantaan. LISTAUS 23.9 Ote tiedostosta clublib.inc 1: function checkuser( ) 2: { 3: global $session, $logged_in; 4: $session[logged_in] = false; 5: $club_row = getrow( "clubs", "id", $session[id] ); 6: if (! $club_row 7: $club_row[login]!= $session[login] 8: $club_row[password]!= $session[password] ) 9: { 10: header( "Location: login.php" ); 11: exit; 12: } 13: $session[logged_in] = true;

17 23. Esimerkki (Osa 1) : return $club_row; 15: } Funktio checkuser() on suhteellisen tarkka. Se käyttää $session[id]-alkiota yhdessä getrow()-funktion kanssa vastaavan rivin erottamiseen tietokannasta. Se tallentaa rivin assosiatiiviseen taulukkoon, joka on muuttujassa $club_row ja testaa sen käyttäjätunnus- ja salasanaelementit suhteessa niihin, jotka on tallennettu $session-muuttujaan. Jos ne eivät vastaa toisiaan, se lähettää käyttäjän takaisin kirjautumissivulle login.php. Miksi käytämme tietokantaa todentamiseen? Eikö riittäisi, että tarkistamme $session-muuttujan logged_inalkion? Siinä olisi vaaroja, koska epärehellinen käyttäjä voisi yksinkertaisesti lisätä jotain sellaista kuin session%5blogged_in%5d=1&session%5bid%5d=1 kyselymerkkijonoon. PHP muuntaisi tämän $sessiontaulukkoon, joka koostuu GET-parametreistä, jolloin testi menettäisi merkityksensä. Käyttäjä voisi tehdä samalla lailla myös checkuser()-funktion testissä. Koska testaamme kuitenkin käyttäjätunnuksen ja salasanan tietokannan tietojen suhteen, muunnetunkin $session-muuttujan tulisi sisältää oikeaa tietoa, jotta sen arvot hyväksyttäisiin. Lisätuotteena funktion checkuser() testissä on se, että funktio palauttaa kaiken tiedon, joka on yhdistetty kysymyksessä olevaan kerhoon. Sivut, joiden tulee todentaa käyttäjä, voivat käsitellä tätä tietoa. Kun kutsumme checkuser()-funktiota (sijaitsee tiedostossa updateclub.php), palautusarvo tallennetaan muuttujaan $club_row. Kun ohitamme jälleen kerran HTML-rungon, alamme taas kerran sisällyttää navigointitiedostoa publicnav.inc. Olemme edistyneet kuitenkin hieman ja voimme laajentaa tätä asiakirjaa sisällyttämään myös jäsenten navigointialkiot: Listaus Ote tiedostosta publicnav.inc 1: <p> 2: <a href="viewclubs.php?<?php print SID?>">Browse clubs</a> 3: <a href="viewevents.php?<?php print SID?>">Browse events</a> 4: <a href="join.php?<?php print SID?>">Join</a> 5: <a href="login.php?<?php print SID?>">Login</a> 6: <a href="index.php?<?php print SID?>">Home</a> 7: </p> 8: <?php 9: if ( $session[logged_in] ) 10: { 11:?> 12: <p> 13: <A HREF="updateclub.php?<?php print SID?>">Your details</a> 14: <A HREF="reviewevents.php?<?php print SID?>">Your events</a> 15: <A HREF="updateevent.php?<?php print SID?>">New event</a> 16: <A HREF="membersmenu.php?<?php print SID?>">Members home</a> 17: </p> 18: <?

18 Esimerkki (Osa 1) 19: } 20:?> 21: <hr> Jos $session[logged_in]-lippu on asetettu arvoon tosi, niin myös jäsenten käytettävissä olevat sivut tulostetaan. Huomaa, että laitoimme SID-vakion kaikkiin linkkeihimme. Se varmistaa, että istunnon ID viedään sivulta sivulle, vaikka evästetoiminto olisi poissa päältä. Tiedostossa updateclub.php oleva lomake on huomaamaton. Lisäämme sekä toimintolipun että istunnon ID:n piilotettuihin alkioihin. Varustamme tekstikentät kerhon nimellä, kuvauksella ja -osoitteella. Saadaksemme aikaan alasvetovalikot kerhon alueelle ja tyypille kutsumme kuitenkin uutta funktiota nimeltä writeoptionlist(). Funktio tallennetaan tietokantakirjastoomme dblib.inc. Se ottaa vastaan taulukon nimen (joko alueina tai tyyppeinä) ja merkkijonon. Listaus Ote tiedostosta dblib.inc 1: function writeoptionlist( $table, $id ) 2: { 3: global $link; 4: $result = mysql_query( "SELECT * FROM $table", $link ); 5: if (! $result ) 6: { 7: print "failed to open $table<p>"; 8: return false; 9: } 10: while ( $a_row = mysql_fetch_row( $result ) ){ 11: print "<option value=\"$a_row[0]\""; 12: if ( $id == $a_row[0] ) 13: print "SELECTED"; 14: print ">$a_row[1]\n"; 15: } 16: } Funktio käyttää $table-parametrimuuttujaa valitsemaan jokaisen rivin joko alue- tai tyyppitaulukosta. Sitten se käy silmukassa läpi jokaisen tulosjoukon rivin ja kirjoittaa OPTION-alkion selaimelle. Jos mysql_fetch_row()-funktion palauttaman taulukon toinen alkio vastaa toisena parametrina annettua $idarvoa, lisätään merkkijono "SELECTED" alkioon. Tämä menettely varmistaa, että alasvetovalikon oikea alkio on valittuna, kun lomake esitetään. PHP-koodi tarkistaa, että form[name]-kenttä on täytetty; koodi tarkistaa myös, että form[area]- ja form[type]- kentissä on hyväksyttävät arvot. Jos $message-muuttuja sisältää tyhjän merkkijonon, tiedämme, että kriteerimme, jotka koskevat käyttäjän lähettämää tietoa, on täytetty. Viemme käyttäjän lähettämät tiedot

19 23. Esimerkki (Osa 1) 411 funktiolle nimeltä updateorg(), joka täyttää vastaavan rivin kerhotaulusta. Funktio ottaa arvoikseen kerhon ID:n sekä nimen, alueen, sähköpostiosoitteen ja kuvaustiedot. Listaus Ote tiedostosta dblib.inc 1: function updateorg( $id, $name, $area, $type, $mail, $description ) 2: { 3: global $link; 4: $query = "UPDATE clubs set name='$name', area='$area', 5: type='$type', mail='$mail', description='$description' 6: WHERE id='$id'"; 7: $result = mysql_query( $query, $link ); 8: if (! $result ) 9: die ( "updateorg update error: ".mysql_error() ); 10: } Kun rivi on päivitetty, jäsen voidaan lähettää jäsenen valikkosivulle, membersmenu.php. Jos jäsen pääsi updateclub.php-sivulle linkin tai kirjanmerkin kautta, ei $actionflag-lippua aseteta ja testaus- ja päivityskoodi ohitetaan. Silti on vielä tehtävää. Assosiatiivinen $club_row-taulukko täytettiin, kun funktiota checkuser() kutsuttiin. Taulukko sisältää kenttien tietokannan nykyisen kerhon rivin nimet ja arvot. Sijoitamme tuon taulukon $form-muuttujaan, jolloin voimme varmistaa, että päivityslomake täytetään kerhon nykyisillä tiedoilla. Kuva 23.3 esittää listauksen 23.8 tulostuksen. KUVA 23.3 Listauksen 23.8 tulostus.

20 Esimerkki (Osa 1) membersmenu.php Tiedosto membersmenu.php on jäsenten alueen ydin. Siinä on pääosin linkkiluettelo, johon voidaan lisätä uutisia ja tarjouksia, jotka voivat kiinnostaa jäseniä. Tämän sivun koodi on listauksessa Listaus membersmenu.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc"); 4: 5: $club_row = checkuser(); 6: checkclubdata( $club_row ); 7:?> 8: 9: <html> 10: <head> 11: <title>welcome</title> 12: </head> 13: 14: <body> 15: <?php 16: include("publicnav.inc"); 17:?>>Members menu</h1> 18: 19: <a href="updateclub.php?<?php print SID?>">Review your club details</a><br> 20: <a href="reviewevents.php?<?php print SID?>">Review your events</a><br> 21: <a href="updateevent.php?<?php print SID?>">New event</a><br> 22: 23: </body> 24: </html> Tällä sivulla on yksi uusi piirre. Kun olemme kutsuneet funktiota checkuser() varmistaaksemme, että käyttäjä on jäsen, viemme funktion palauttaman taulukon toiselle funktiolla, jota pidämme tiedostossa clublib.php. Funktio checkclubdata() varmistaa, että jäsen on jo luonut kerhoprofiilin. Me emme halua luoda tapahtumia, elleivät ne ole täysin määrittäneet kerhoaan. Minimitietona on kerhon nimi.

21 23. Esimerkki (Osa 1) 413 Listaus Ote tiedostosta clublib.inc 1: function checkclubdata( $clubarray ) 2: { 3: if (! isset( $clubarray[name] ) ) 4: { 5: header( "Location: updateclub.php?".sid ); 6: exit; 7: } 8: } login.php Ennen kuin siirrymme sivuille, joiden avulla käyttäjät ylläpitävät tapahtumiaan, voimme katsella tiedostoa login.php. Tämä skriptin avulla rekisteröity jäsen saa esille ympäristönsä. Koodi on esitetty listauksessa Listaus login.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc"); 4: $message=""; 5: if ( isset( $actionflag ) && $actionflag == "login" ) 6: { 7: if ( empty( $form[login] ) empty( $form[password] ) ) 8: $message.= "you must fill in all fields<br>\n"; 9: if (! ( $row_array = 10: checkpass( $form[login], $form[password] ) ) ) 11: $message.= "Incorrect password try again<br>\n"; 12: if ( $message == "" ) // löysimme virheitä 13: { 14: cleanmembersession( $row_array[id], $row_array[login], 15: $row_array[password] );

22 Esimerkki (Osa 1) 16: header( "Location: membersmenu.php?".sid ); 17: } 18: } 19:?> 20: <html> 21: <head> 22: <title>login</title> 23: </head> 24: <body> 25: <?php 26: include("publicnav.inc"); 27:?> 28: <h1>login</h1> 29: <?php 30: if ( $message!= "" ) 31: { 32: print "<p><b>$message</b></p>"; 33: } 34:?> 35: <p> 36: <form action="<?php print $PHP_SELF;?>"> 37: <input type="hidden" name="actionflag" value="login"> 38: <input type="hidden" name="<?php print session_name()?>" 39: value="<?php print session_id()?>"> 40: </p><p> 41: Login: <br> 42: <input type="text" name="form[login]" 43: value="<?php print $form[login]?>"> 44: </p><p> 45: Password: <br> 46: <input type="password" name="form[password]" value=""> 47: </p><p> 48: <input type="submit" value="update">

23 23. Esimerkki (Osa 1) : </form> 50: </body> 51: </html> Tämän sivun rakenteen tulisi olla sinulle tuttu. Käytämme tiedostoja dblib.inc ja clublib.inc alustamaan tietokantayhteyden ja palauttamaan istunnon. Jos $actionflag-muuttuja on asetettu, testaamme lomakkeen kentät. Käytämme uutta dblib.inc-funktiota tarkistamaan alkiot $form[login] ja $form[password]. Listaus Ote tiedostosta dblib.inc 1: function checkpass( $login, $password ) 2: { 3: global $link; 4: $result = mysql_query( "SELECT id, login, password FROM clubs 5: WHERE login='$login' and password='$password'", 6: $link ); 7: if (! $result ) 8: die ( "checkpass fatal error: ".mysql_error() ); 9: if ( mysql_num_rows( $result ) ) 10: return mysql_fetch_array( $result ); 11: return false; 12: } Funktio checkpass() ottaa argumenteikseen käyttäjätunnuksen ja salasanan ja lähettää yksinkertaisen SELECT-kyselyn kerhotauluihin. Jos mitään virheitä ei löydy, kutsumme cleanmembersession()-funktiota, joka alustaa $session-muuttujan käyttäjätunnuksen, salasanan ja id:n. Sitten ohjaamme jäsenen sivulle membersmenu.php. updateevent.php Kun jäsenet voivat nyt liittyä tai kirjautua palveluumme ja muuttaa kerhotietojaan, meidän tulee antaa heidän luoda ja muokata tapahtumia. Koko updateevent.php-tiedosto on listauksessa Listaus updateevent.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc");

24 Esimerkki (Osa 1) 4: include("date.inc"); 5: $club_row = checkuser(); 6: checkclubdata( $club_row ); 7: $date = time(); 8: $message = ""; 9: if (! empty( $event_id ) ) 10: $event_row = getrow( "events", "id", $event_id ); 11: else 12: $event_id = false; 13: if ( isset( $actionflag ) && $actionflag=="update_event" ) 14: { 15: if ( empty( $form[ename] ) ) 16: $message.="the venue must have a name<br>\n"; 17: if (! getrow( "areas", "id", $form[area] ) ) 18: $message.= "PANIC: That area code can't be found<br>"; 19: if (! getrow( "types", "id", $form[type] ) ) 20: $message.= "PANIC: That type code can't be found<br>"; 21: foreach ( array( "months", "years", "days", "minutes" ) 22: as $date_unit ) 23: { 24: if (! isset( $form[$date_unit] ) ) 25: { 26: $message.= "PANIC: Can't make sense of that date"; 27: break; 28: } 29: } 30: $date = mktime( $form[hours], $form[minutes], 0, $form[months], 31: $form[days], $form[years] ); 32: if ( $date < time() ) 33: $message.= "You've chosen a date in the past!"; 34: if ( $message == "" ) 35: { 36: insertevent( $form[ename], $form[evenue], $form[area],

25 23. Esimerkki (Osa 1) : $form[type], $form[eaddress], $form[ezip], 38: $form[edescription], $session[id], $date, 39: $event_id ); 40: header( "Location: reviewevents.php?".sid ); 41: } 42: } 43: elseif ( $event_id ) 44: { 45: //foreach( $event_row as $key=>$value ) 46: // $form[$key] = $value; 47: $form = $event_row; 48: $date = $event_row[edate]; 49: } 50: else 51: { 52: $form[area] = $club_row[area]; 53: $form[type] = $club_row[type]; 54: } 55:?> 56: <html> 57: <head> 58: <title>add/amend event</title> 59: </head> 60: <body> 61: <?php 62: include("publicnav.inc"); 63:?> 64: <h1>amend event</h1> 65: <?php 66: if ( $message!= "" ) 67: { 68: print "<b>$message</b>"; 69: }

26 Esimerkki (Osa 1) 70:?> 71: <p> 72: <form action="<?php print $PHP_SELF;?>"> 73: <input type="hidden" name="actionflag" value="update_event"> 74: <input type="hidden" name="<?php print session_name()?>" 75: value="<?php print session_id()?>"> 76: <input type="hidden" name="event_id" 77: value="<?php print $event_id?>"> 78: Event Name: <br> 79: <input type="text" name="form[ename]" 80: value="<?php print stripslashes($form[ename])?>"> 81: </p> 82: <p> 83: Date and time: <br> 84: <select name="form[months]"> 85: <?php writemonthoptions( $date )?> 86: </select> 87: <select name="form[days]"> 88: <?php writedayoptions( $date )?> 89: </select> 90: <select name="form[years]"> 91: <?php writeyearoptions( $date )?> 92: </select> 93: <SELECT NAME="form[hours]"> 94: <? writehouroptions( $date )?> 95: </SELECT> 96: <SELECT NAME="form[minutes]"> 97: <? writeminuteoptions( $date )?> 98: </SELECT> 99: </p> 100: <p> 101: Event area: <br> 102: <select name="form[area]">

27 23. Esimerkki (Osa 1) : <?php writeoptionlist( "areas", $form[area] )?> 104: </select> 105: </p> 106: <p> 107: Event type: <br> 108: <select name="form[type]"> 109: <?php writeoptionlist( "types", $form[type] )?> 110: </select> 111: </p> 112: <p> 113: Describe the event: <br> 114: <textarea name="form[edescription]" wrap="virtual" rows=5 cols=30> 115: <?php print stripslashes($form[edescription])?> 116: </textarea> 117: </p> 118: <p> 119: Venue name: <br> 120: <input type="text" name="form[evenue]" 121: value="<?php print stripslashes($form[evenue])?>"> 122: </p> 123: <p> 124: Venue address: <br> 125: <textarea name="form[eaddress]" wrap="virtual" rows=5 cols=30> 126: <?php print stripslashes($form[eaddress])?> 127: </textarea> 128: </p> 129: <p> 130: Venue zip code: <br> 131: <input type="text" name="form[ezip]" 132: value="<?php print stripslashes($form[ezip])?>"> 133: </p> 134: <p> 135: <input type="submit" value="update">

28 Esimerkki (Osa 1) 136: </p> 137: </form> 138: </body> 139: </html> Tämä sivu luo lomakkeen, joka vastaa events-taulukon kenttien nimiä. Kuten tavallista, meidän tulee testata nuo arvot ja päivittää tietokanta. Meidän tulee kuitenkin myös palauttaa listaus, jos lomakkeen kautta muutetaan tapahtumaa uuden lisäämisen sijaan. Muuttuja $event_id viedään tälle sivulle kyselymerkkijonossa, jos aiomme työskennellä olemassa olevan listan kanssa. Jos $event_id-muuttuja ei ole tyhjä, käytämme getrow()-funktiota täyttämään muuttuja nimeltä $event_row tapahtuman tiedoilla. Jos $event_id-muuttujaa ei ole olemassa tai se on tyhjä, voimme alustaa sen arvolla epätosi. Jos lomake on lähetetty, testaamme, että kaikki olennainen tieto on annettu. Voimme myös testata, että valittuja päivämäärä- ja aikatietoja ei ole vielä viety. Toteutamme testauksen asettamalla globaaliin muuttujaan nimeltä $date aikaleiman, joka perustuu edelliseen syöttöön. Jos lähetetyt tiedot ovat oikein, voimme kutsua dblib.inc-tiedoston funktiota nimeltä insertevent(). Kuten voit nähdä, se ottaa argumenteikseen kaikki tapahtumataulukon kentät. Viimeinen vaadittava kenttä on tapahtuman ID. Sitä käytetään insertevent()- funktion toimesta määrittämään, tuleeko sen päivittää vai lisätä tietoa. Huomaa, että kerhon ID tallennetaan $session[id]-muuttujaan. Se sijoitetaan tapahtumataulukon eclub-kenttään. Käytämme aikaleimaa päivämäärätiedon tallentamiseksi tietokantaan. Listaus Ote tiedostosta dblib.inc 1: function insertevent( $name, $venue, $area, $type, $address, 2: $zip, $desc, $club_id, $timestamp, $event_id ) 3: { 4: global $link; 5: if (! $event_id ) 6: { 7: $query = "INSERT INTO events (ename, evenue, area, type, 8: eaddress, ezip, edescription, eclub, edate ) 9: VALUES( '$name', '$venue', '$area', '$type', '$address', 10: '$zip', '$desc', '$club_id', '$timestamp')"; 11: } 12: else 13: { 14: $query = "UPDATE events SET ename='$name', evenue='$venue', 15: area='$area', type='$type', eaddress='$address', 16: ezip='$zip', edescription='$desc', eclub='$club_id', 17: edate='$timestamp' WHERE id='$event_id'";

29 23. Esimerkki (Osa 1) : } 19: $result = mysql_query( $query, $link ); 20: if (! $result ) 21: die ( "insertevent error: ".mysql_error() ); 22: } Kuten näet, insertevent()-funktio testaa $event_id-argumentin. Jos testin tulos on epätosi, muodostetaan INSERT-lause. Muutoin muodostetaan UPDATE-lause. Kun tietokanta on päivitetty, johdatamme jäsenen reviewevents.php-sivulle, jossa hän voi katsella koko aikataulua. Jos jäsen ei ole vielä lähettänyt tietoa, olemme ohittaneet tiedon tarkistuksen ja tietokannan muuttamiskoodin. Jos meillä kuitenkin on $event_id-muuttuja, olemme laittaneet tapahtumatiedot tietokannasta välimuistiin. Teemme sen sijoittamalla $event_row-arvon muuttujaan $form. Asetamme myös globaalin muuttujan $date sieppaamaan $event_row-muuttujan edate-alkion. Jos lomaketta ei ole lähetetty eikä $event_id-muuttujaa ole olemassa, asetamme alkioihin $form[area] ja $form[type] $club_row-muuttujassa olevat kerhotietoja vastaavat arvot. Muista, että $club_row sisältää kerhotaulun rivin. Näin vastaavat alasvetovalikot vastaavat oletuksena jäsenen asettamia kerhon alue- ja tyyppiarvoja. HTML-lomakkeen sisällä kannattaa huomio kiinnittää koodiin, joka kirjoittaa alasvetovalikot tapahtuman päivämäärälle ja ajalle. Nämä valikot olisivat tarpeeksi helppoja koodata suoraan, mutta me tarvitsemme koodeja valitsemaan automaattisesti joko nykyinen aika, viimeksi valittu aika tai tapahtumataulukkoon tallennettu aika. Olemme jo tallentaneet sen $date-muuttujaan. Se alustetaan nykyisellä aikaleimalla skriptin alussa. Jos käyttäjän syöttötieto havaitaan, muodostamme uuden aikaleiman, joka perustuu näihin valintoihin, ja sijoitamme sen muuttujaan $date. Muutoin, jos muokkaamme olemassaolevaa tapahtumaa, täytämme $date-muuttujan events-taulukon edate-kentän arvolla. Jokainen alasvetovalikko vie $datemuuttujassa olevan aikaleiman vastaavalle funktiolle, joka on vielä toisessa kirjastotiedostossa nimeltä date.inc. Koodit on esitetty listauksessa Listaus date.inc 1: <?php 2: function writemonthoptions( $d ) 3: { 4: $d_array = getdate( $d ); 5: $months = array( "Jan","Feb","Mar","Apr","May","Jun", 6: "Jul","Aug","Sep","Oct","Nov","Dec" ); 7: foreach ( $months as $key=>$value ) 8: { 9: print "<OPTION VALUE=\"".($key+1)."\""; 10: print ( ( $d_array[mon] == ($key+1) )?"SELECTED":"" ); 11: print ">$value\n";

30 Esimerkki (Osa 1) 12: } 13: } 14: function writedayoptions( $d ) 15: { 16: $d_array = getdate( $d ); 17: for ( $x = 1; $x<=31; $x++ ) 18: { 19: print "<OPTION VALUE=\"$x\""; 20: print ( ( $d_array[mday] == $x )?"SELECTED":"" ); 21: print ">$x\n"; 22: } 23: } 24: function writeyearoptions( $d ) 25: { 26: $d_array = getdate( $d ); 27: $now_array = getdate(time()); 28: for ( $x = $now_array[year]; $x <= ($now_array[year]+5); $x++ ) 29: { 30: print "<OPTION VALUE=\"$x\""; 31: print ( ( $d_array[year] == $x )?"SELECTED":"" ); 32: print ">$x\n"; 33: } 34: } 35: function writehouroptions( $d ) 36: { 37: $d_array = getdate( $d ); 38: for ( $x = 0; $x< 24; $x++ ) 39: { 40: print "<OPTION VALUE=\"$x\""; 41: print ( ( $d_array[hours] == $x )?"SELECTED":"" ); 42: print ">".sprintf("%'02d",$x)."\n"; 43: } 44: }

31 23. Esimerkki (Osa 1) : function writeminuteoptions( $d ) 46: { 47: $d_array = getdate( $d ); 48: for ( $x = 0; $x<= 59; $x++ ) 49: { 50: print "<OPTION VALUE=\"$x\""; 51: print ( ( $d_array[minutes] == $x )?"SELECTED":"" ); 52: print ">".sprintf("%'02d",$x)."\n"; 53: } 54: } 55:?> Kaikki nämä funktiot hyväksyvät aikaleiman ja kirjoittavat joukon OPTION-tageja. Ne käyttävät getdate()- funktiota indeksin sieppaamiseksi aikaleiman tiettyyn osaan (vuosi, kuukausi, kuukaudenpäivä, tunti, minuutti). Ne voivat tarkistaa lukuarvon suhteessa sopivaan arvoalueeseen (esimerkiksi kuukauden päivän tulee olla väliltä 1-31). Jos luku on sopiva, lisätään merkkijono SELECTED selaimelle kirjoitettavaan OPTION-elementtiin. Kuva 23.4 esittää listauksen tulostuksen. KUVA 23.4 Listauksen tulostus. reviewevents.php Lopuksi tarjoamme käyttäjille keinon ottaa esille kaikki asettamansa tapahtumat. Heidän tulisi nähdä luettelo kaikista tapahtumista ja kyetä muokkaamaan mitä tahansa niistä tai tuhoamaan niitä. Listauksen reviewevents.php koodi on suhteellisen helppoa. Koodi on listauksessa

32 Esimerkki (Osa 1) Listaus reviewevents.php 1: <?php 2: include("dblib.inc"); 3: include("clublib.inc"); 4: $club_row = checkuser(); 5: checkclubdata( $club_row ); 6: function writeevents() 7: { 8: global $club_row; 9: $events = getevents( $club_row[id] ); 10: if (! $events ) 11: { 12: print "You have no events in your schedule<p>"; 13: return; 14: } 15: print "<table border=1>\n"; 16: print "<td><b>date</b></td>\n<td><b>name</b></td>\n 17: <td><b> </b></td>\n"; 18: foreach ( $events as $row ) 19: { 20: print "<tr>\n"; 21: print "<td>".date("j M Y H.i", $row[edate])."</td>\n"; 22: print "<td><a href=\"updateevent.php?event_id=$row[id]&".sid."\">". 23: html($row[ename])."</a></td>\n"; 24: print "<td><a href=\"$globals[php_self]?event_id=$row[id]"; 25: print "&actionflag=deleteevent&".sid."\""; 26: print "onclick=\"return window.confirm('are you sure you 27: want to delete this item')\">"; 28: print "delete</a><br></td>\n"; 29: print "</tr>\n"; 30: } 31: print "</table>\n"; 32: }

33 23. Esimerkki (Osa 1) : $message=""; 34: if ( isset( $actionflag ) && 35: $actionflag == "deleteevent" && isset( $event_id ) ) 36: { 37: deleteevent( $event_id ); 38: $message.= "That event is now history!<br>"; 39: } 40:?> 41: <html> 42: <head> 43: <title>review events</title> 44: </head> 45: <body> 46: <?php 47: include("publicnav.inc"); 48:?> 49: <h1>review event schedule</h1> 50: <?php 51: if ( $message!= "" ) 52: { 53: print "<b>$message</b>"; 54: } 55:?> 56: 57: <?php 58: writeevents(); 59:?> 60: </body> 61: </html> Olemme käyttäneet tiedostoa dblib.inc tietokantayhteyden käynnistämiseksi ja tiedostoa clublib.inc aloittamaan istunnon ja estämään pääsy rekisteröimättömiltä käyttäjiltä. Sen jälkeen luomme funktion nimeltä writeevents(). Sitä voidaan kutsua kaikkialta HTML-rungosta ja se tulostaa tapahtumatietoa suoraan selaimelle. Olemme jo tallentaneet kerhotiedot $club_row-muuttujaan, joka sisältää funktion checkuser() palauttamaa tietoa. Voimme käyttää $club_row[id]:ssä olevaa kerhon ID:tä avaimena avaamaan kaikki

34 Esimerkki (Osa 1) jäsenen kerhoon liittyvät tapahtumat. Toteutamme sen kutsumalla dblib.inc-tiedoston funktiota getevents(). Käsittelemme tätä funktiota tarkemmin seuraavalla tunnilla. Se hyväksyy kuitenkin kerhon ID:n ja palauttaa moniulotteisen taulukon, joka sisältää kerhoon liittyvät rivit. Tallennamme getevents()-funktion palauttaman arvon muuttujaan nimeltä $events. Saamme itse asiassa enemmän tietoa kuin tarvitsemme, mutta getevents()-funktio on joustava, joten meidän tulee käyttää sitä mikäli skriptiin ei liity suorituskykyongelmia. Jos $events-muuttujan arvo on epätosi, tulostamme viestin selaimelle ja päätämme funktion. Muutoin muodostamme HTML-taulukon. Käymme silmukassa läpi $events-taulukon ja tulostamme joitakin alkioita sen alitaulukoista. Tulostamme muotoillun päivämäärän viemällä jokaisen alitaulukon edate-alkion date()-funktiolle. Luomme myös HTML-linkin käyttämällä jokaista havaittua tapahtuman id-ja ename-kenttää. Tuota id-kenttää käytetään SID-vakion kanssa luomaan kyselymerkkijono, joka voidaan viedä updateevent.php-tiedostolle ja jonka avulla voidaan sitten palauttaa tapahtuma muokkaamista varten.lopuksi luomme silmukassa linkin jokaiselle alkiolle, joka osoittaa takaisin nykyiselle sivulle. Sitä varten rakennamme kyselymerkkijonon, joka yhdistää tapahtuman ID:n ja tapahtumalipun deleteevent-arvoon. Sitä käytetään annetun tapahtuman tuhoamiseen, joten muodostamme JavaScript-tapahtumakäsittelijän, joka estää linkkiä aktivoitumasta, jos jäsen muuttaa mieltään. Kun olemme luoneet writeevents()-funktion, meidän tulee käsitellä sekin mahdollisuus, että jäsen on valinnut tapahtuman tuhoamistoiminnon. Voimme tehdä sen testaamalla muuttujat $actionflag ja $event_id. Jos tilanne vaatii, kutsumme sitten dblib.inc-tiedoston funktiota nimeltä deleteevent(), jolle viemme $event_id-muuttujan. Listaus Ote tiedostosta dblib.inc 1: function deleteevent( $id ) 2: { 3: global $link; 4: $query = "DELETE FROM events WHERE id='$id'"; 5: $result = mysql_query( $query, $link ); 6: if (! $result ) 7: die ( "deleteevent fatal error: ".mysql_error() ); 8: return ( mysql_affected_rows($link) ); 9: } Voit nähdä näytteen tiedoston reviewevents.php tulostuksesta kuvassa KUVA 23.5 Tiedoston reviewevents.php tulostus.

35 23. Esimerkki (Osa 1) 427 Yhteenveto Olemme nyt työstäneet kokonaisen jäsenten ympäristön tapahtumaskripteillemme. Laittamalla mahdollisimman paljon tietoa kirjastoihin olemme mahdollistaneet sen, että Web-kehittäjät voivat työstää koodia tehokkaasti. Olemme käyttäneet header()-funktiota käyttäjän siirtämiseksi uusille sivuille, kun syöttö on hyväksyttävää. Olemme käyttäneet istuntofunktioita tallentamaan kirjautumistieto ja tietokantakyselyt, joilla todennetaan jäsen jokaisen pyynnön yhteydessä. Seuraavassa luvussa käytämme samanlaisia tekniikoita muodostaaksemme julkisen näkymän ympäristöstämme. K&V K Olen huomannut, että usealle sivulle sijoitettavia projekteja on vaikea visualisoida ja hallita. Mitä hyviä puolia tällaisissa projekteissa sitten on? V Olemme käyttäneet useimmissa tämän kirjan esimerkeissämme mallia, joka perustuu yksittäiseen skriptiin. Kun projekti laajenee, on ajateltava koko ympäristöä yksittäisenä sovelluksena. Yksittäiset sivut ovat vain vuorovaikutuksen osatoimintoja. Sijoita useamman kuin yhden sivun käyttämä koodi kirjastotiedoston funktioon. Jos mieluummin luot keskitetympiä skriptejä, voisit luoda yksittäisen sivun, joka sisältää vain HTMLperuskoodin mallit. Kaikki muut elementit voidaan sitten luoda dynaamisesti skriptisi kautta. Sinun on vietävä toimintolippu skriptille jokaisen pyynnön yhteydessä, jotta oikea tulostus generoitaisiin. Koodisi voisi näyttää siistimmältä eikä tarvittaisi muuta kuin otsikko-osan ratkaisut. Toisaalta sinun tulee tällöin sisällyttää paljon enemmän HTML-koodia PHP-koodiisi. Työpaja Työpaja tarjoaa joukon kertauskysymyksiä, joiden avulla voit tarkistaa, oletko ymmärtänyt materiaalin sisältöä. Yritä ymmärtää vastaukset ennen kuin jatkat seuraaviin lukuihin. Vastaukset ovat liitteessä A. Kysymyksiä 1. Millä PHP-funktiolla voit kytkeytyä MySQL-tietokantapalvelimelle? 2. Millä PHP-funktiolla voit alustaa tai lopettaa istunnon? 3. Millä funktiolla sisällytetään kirjastotiedostoja projektin sivuille? 4. Millä PHP-funktiolla lähetämme SQL-kyselyjä MySQL-tietokannalle? 5. Milla vakiolla lisäämme istunnon ID :nhtml-linkkiin? 6. Kuinka siirrämme käyttäjän uudelle sivulle? 7. Mitä funktiota käytämme päivämäärätiedon muotoilemiseen?

36 Esimerkki (Osa 1) Toiminta 1. Tutki tämän luvun koodia. Sopisivatko jotkin ratkaisut omiin projekteihisi?

OPPITUNTI 24 Esimerkki (Osa 2)

OPPITUNTI 24 Esimerkki (Osa 2) 24. Esimerkki (Osa 2) 429 OPPITUNTI 24 Esimerkki (Osa 2) Luvussa 23, "Esimerkki (Osa 1)" rakensimme ympäristön, joka sallii käyttäjien kirjoittautua palveluun ja lisätä kerho- ja tapahtumatiedot järjestelmään.

Lisätiedot

OPPITUNTI 12 MySQL-tietokannan käyttö

OPPITUNTI 12 MySQL-tietokannan käyttö 12. MySQL-tietokannankäyttö 211 OPPITUNTI 12 MySQL-tietokannan käyttö PHP-kieleen kuuluu olennaisesti tietokantojen käyttämisen helppous. Tällä tunnilla keskitymme MySQLtietokantaan, mutta samanlaisia

Lisätiedot

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja.

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja. laskutus_index http://media.stadia.fi/~0700527/laskutus/laskutus_index.html Sivu 1/1 13.12.2007 Laskutus -tietokanta Henkilöiden tiedot: Lisää uuden henkilön tiedot Muuta tai poista henkilön tiedot Selaa

Lisätiedot

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: Linux-harjoitus 6 Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

OPPITUNTI15 Päivämäärien käsittely

OPPITUNTI15 Päivämäärien käsittely 15. Päivämäärien käsittely 269 OPPITUNTI15 Päivämäärien käsittely Päivämäärät kuuluvat niin usein jokapäiväiseen elämään, että niiden käsittely on rutiininomaista. Kalenterin käsittely ei aina ole kuitenkaan

Lisätiedot

LINUX-HARJOITUS, MYSQL

LINUX-HARJOITUS, MYSQL LINUX-HARJOITUS, MYSQL Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä: http://www.mysql.com/, MySQL-tietokantaohjelman kotisivu. http://www.mysql.com/doc/en/index.html,

Lisätiedot

OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla

OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla 20. Tilan tallentaminen istuntofunktiolla 353 OPPITUNTI 20 Tilan tallentaminen istuntofunktioilla Edellisellä tunnilla tutkimme tilan tallentamista evästeiden ja kyselymerkkijonojen avulla. PHP4 on kuitenkin

Lisätiedot

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot) SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos 1 Insert lauseella on kaksi muotoa: insert

Lisätiedot

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008 Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT Jouni Huotari S2008 2 Proseduurit Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

Written by Administrator Monday, 05 September 2011 15:14 - Last Updated Thursday, 23 February 2012 13:36

Written by Administrator Monday, 05 September 2011 15:14 - Last Updated Thursday, 23 February 2012 13:36 !!!!! Relaatiotietokannat ovat vallanneet markkinat tietokantojen osalta. Flat file on jäänyt siinä kehityksessä jalkoihin. Mutta sillä on kuitenkin tiettyjä etuja, joten ei se ole täysin kuollut. Flat

Lisätiedot

OPPITUNTI 19 Tilan tallentaminen evästeiden ja kyselymerkkijonojen avulla

OPPITUNTI 19 Tilan tallentaminen evästeiden ja kyselymerkkijonojen avulla 19. Tilan tallentaminen evästeiden ja kyselymerkkijonojen avulla 337 OPPITUNTI 19 Tilan tallentaminen evästeiden ja kyselymerkkijonojen avulla HTTP on tilaton protokolla. Se merkitsee sitä, että jokainen

Lisätiedot

ICT1TN004. Lomakkeet. Heikki Hietala

ICT1TN004. Lomakkeet. Heikki Hietala Lomakkeet Heikki Hietala Lomakkeet Lomakkeita käytetään keräämään tietoa käyttäjältä ja siirtämään se palvelimelle Lomakkeen luominen ei yksin riitä, vaan pitää luoda myös lomakkeenkäsittelijä Lomakkeen

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Verkkokaupan ohje. Alkutieto. Scanlase verkkokauppa. Sisäänkirjautuminen

Verkkokaupan ohje. Alkutieto. Scanlase verkkokauppa. Sisäänkirjautuminen Verkkokaupan ohje Alkutieto Verkkokaupan tarkoitus on helpottaa Scanlase asiakkaiden tilaamisprosessia kun asiakkaat tarvitsevat tuotteita. Verkkokaupan ollessa pois toiminnasta tilaukset tulee tehdä puhelimitse

Lisätiedot

OPPITUNTI 11 DBM-funktioiden käyttö

OPPITUNTI 11 DBM-funktioiden käyttö 11. DBM-funktioiden käyttö 193 OPPITUNTI 11 DBM-funktioiden käyttö Jos sinulla ei ole pääsyä SQL-tietokantaan, esimerkiksi MySQL- tai Oracle-tietokantaan, sinulla on varmaankin mahdollisuus käyttää DBM-tyylistä

Lisätiedot

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina Kirjasto Kevät 2001 Auvinen Annemari Niemi Anu Harjoitustyö 7.4.2001 Sisällysluettelo 1. Yleiskuvaus... 3 2. Vaatimukset... 3 2.1. Toiminnalliset... 3 2.1.1. Sisäänkirjautuminen... 3 2.1.2. Nimikkeiden

Lisätiedot

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta Tiedonhallinnan perusteet H11 Ovien ja kulun valvontajärjestelmän tietokanta Nimi: Mikko Haapanen Opiskelijanumero: 0900568 Ryhmä: T09L Työ tehty: 15.3.2010 Mikko Haapanen 15.3.2010 1(7) 1. Asiakasvaatimukset

Lisätiedot

SQL Buddy JAMK Labranet Wiki

SQL Buddy JAMK Labranet Wiki Page 1 of 9 SQL Buddy JAMK Labranet Wiki Sisällysluettelo Yleistä SQL Buddy:sta kotisivu :http://sqlbuddy.com/ SQL Buddy on kevyt hallintatyökalu MySQL-tietokannalle. Järjestelmävaatimukset Serverin vaatimukset

Lisätiedot

TIETOKANTOJEN PERUSTEET MARKKU SUNI

TIETOKANTOJEN PERUSTEET MARKKU SUNI TIETOKANTOJEN PERUSTEET MARKKU SUNI SQL - KIELI TIETOJEN MUOKKAUS MARKKU SUNI Tarkastellaan tauluissa olevien tietojen muokkausta muokkauskäskyjä: INSERT UPDATE DELETE Kysymys kuuluu: Voiko tietoja muokata

Lisätiedot

Sähköpostitilin käyttöönotto

Sähköpostitilin käyttöönotto Sähköpostitilin käyttöönotto Versio 1.0 Jarno Parkkinen jarno@atflow.fi Sivu 1 / 16 1 Johdanto... 2 2 Thunderbird ohjelman lataus ja asennus... 3 3 Sähköpostitilin lisääminen ja käyttöönotto... 4 3.2 Tietojen

Lisätiedot

OHJE 1 (14) Peruskoulun ensimmäiselle luokalle ilmoittautuminen Wilmassa

OHJE 1 (14) Peruskoulun ensimmäiselle luokalle ilmoittautuminen Wilmassa OHJE 1 (14) Peruskoulun ensimmäiselle luokalle ilmoittautuminen Wilmassa Wilman hakemukset ja muut lomakkeet EIVÄT NÄY mobiililaitteisiin asennettavissa Wilma-sovelluksissa. Huoltajan tulee siis käyttää

Lisätiedot

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje

Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje Sonera Viestintäpalvelu VIP VIP Laajennettu raportointi Ohje Sisällysluettelo VIP Laajennettu raportointi... 3 Luo raportti Laajennetun raportoinnin työkaluilla... 4 Avaa Laajennettu raportointi... 4 Valitse

Lisätiedot

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

Pika-aloitusopas. Sisältö: Projektin luominen Projektin muokkaaminen ja hallinnointi Projektin/arvioinnin tulosten tarkastelu

Pika-aloitusopas. Sisältö: Projektin luominen Projektin muokkaaminen ja hallinnointi Projektin/arvioinnin tulosten tarkastelu Pika-aloitusopas Sisältö: Projektin luominen Projektin muokkaaminen ja hallinnointi Projektin/arvioinnin tulosten tarkastelu Tämä asiakirja on laadittu auttamaan sinua hallinnoimaan nopeasti CEB TalentCentral

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

ProTieto Oy. Verottajan ilmoitus. Käyttöohje alihankkijoille

ProTieto Oy. Verottajan ilmoitus. Käyttöohje alihankkijoille ProTieto Oy Verottajan ilmoitus Käyttöohje alihankkijoille Sisällys 1. Yleistä... 2 2. Rekisteröityminen... 2 3. Kirjautuminen... 2 4. Web-liittymä... 3 4.1 Yrityksen tiedot... 3 4.2 Omat suomalaiset työntekijät...

Lisätiedot

Sähköpostitilin luonti 07.06.2011

Sähköpostitilin luonti 07.06.2011 Sähköpostitilin luonti 07.06.2011 SÄHKÖPOSTITILIN LUONTI Tilin luonti pääkäyttäjän hallintaportaalissa 3 Sähköpostitilin luonti Outlook 2010 ohjelmaan 8 Tämä ohje on lyhennetty versio sähköpostilin Hallintaportaalin

Lisätiedot

OSA III PHP:n käyttö. Oppitunti

OSA III PHP:n käyttö. Oppitunti OSA III PHP:n käyttö Oppitunti 9. Lomakkeiden käsittely 10. Tiedostojen käsittely 11. DBM-funktioiden käyttö 12. MySQL-tietokantojen integrointi 13. Pintaa syvemmältä 14. Dynaamisten kuvien käsittely 15.

Lisätiedot

Copyright 1999-2012 Basware Corporation. All rights reserved. Pikaopas toimittajille Supplier Portal (Toukokuu 2013)

Copyright 1999-2012 Basware Corporation. All rights reserved. Pikaopas toimittajille Supplier Portal (Toukokuu 2013) Copyright 1999-2012 Basware Corporation. All rights reserved. Pikaopas toimittajille Supplier Portal (Toukokuu 2013) 1 Rekisteröityminen ja sisäänkirjautuminen Sinun täytyy kirjautua Supplier Portal -sovellukseen,

Lisätiedot

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja 8. Oliot 123 OPPITUNTI 8 Oliot Oliopohjainen ohjelmointi on vaarallista. Se muuttaa koodaamista koskevia ajatuksiasi ja kun uudet käsitteet ovat saaneet jalansijaa, ne eivät katoa mitenkään. PHP on Perlin

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

1. Valitse käyttäjänimi 2. Kirjoita salasana 3. Anna sähköpostiosoitteesi 4. Keksi wikillesi nimi

1. Valitse käyttäjänimi 2. Kirjoita salasana 3. Anna sähköpostiosoitteesi 4. Keksi wikillesi nimi WIKISPACES-WIKIN LUOMINEN Kirjoita selaimeesi osoite http://www.wikispaces.com 1. Valitse käyttäjänimi 2. Kirjoita salasana 3. Anna sähköpostiosoitteesi 4. Keksi wikillesi nimi Paina Join-painiketta Onneksi

Lisätiedot

SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA. Jarkko Kähkönen

SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA. Jarkko Kähkönen SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA Sisällysluettelo Luku 1 - Oman LABRA-sivutilan asennus ja käyttöönotto... 2 1.1 - LABRA-osoitteesi... 2 1.2 LABRA-tilan käyttö (verkko-asemana

Lisätiedot

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö Tekijät: Eemeli Honkonen Joni Metsälä Työ palautettu: SISÄLLYSLUETTELO: 1 SEMINAARITYÖN KUVAUS... 3 2 TIETOKANTA... 3 2.1 MITÄ TIETOKANNAT SITTEN OVAT?... 3

Lisätiedot

Open Badge -osaamismerkit

Open Badge -osaamismerkit Open Badge -osaamismerkit Merkin vastaanottaminen 2 "#$%&'()$*+,''-.,-$/0.1 "#$%&&'$ =>;+?.@@'A$/,+%'*1B%%B0,$%@B+-.%$% C 2>D./E'B1B-.%$%;+?.@@'&'()$&'F0#'F0..% G C>"#$%&'()$H'F1+/I,1'-IJ%%$1I%"#$%&'()$*+,''-.,-$/0.%

Lisätiedot

DriveGate -ohjeet. DriveGate-käyttöohjeet: Rekisteröityminen palveluun. Rekisteröitymisohjeet ja rekisteröitymisprosessin kuvaus

DriveGate -ohjeet. DriveGate-käyttöohjeet: Rekisteröityminen palveluun. Rekisteröitymisohjeet ja rekisteröitymisprosessin kuvaus DriveGate-käyttöohjeet: Rekisteröityminen palveluun Rekisteröitymisohjeet ja rekisteröitymisprosessin kuvaus Johdanto Jotta voit käyttää DriveGaten palveluja ja sovelluksia, sinun tulee kirjautua DriveGate-palveluun.

Lisätiedot

Geni - pikaopas. Kuvalliset pikaohjeet, jotta pääset aloittamaan Geni -sukupuusi rakentamisen.

Geni - pikaopas. Kuvalliset pikaohjeet, jotta pääset aloittamaan Geni -sukupuusi rakentamisen. Geni - pikaopas Kuvalliset pikaohjeet, jotta pääset aloittamaan Geni -sukupuusi rakentamisen. Tarkemmat ohjeet ja käytänteet löytyvät opuksesta GENIOHJE_PÄIVITYS_HEINÄKUU_2016.pdf! Sisällysluettelo Rekisteröityminen

Lisätiedot

Joomla pikaopas. Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta.

Joomla pikaopas. Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta. Joomla pikaopas Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta. Paavo Räisänen www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa

Lisätiedot

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia)

JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) JavaScript alkeet Esimerkkikoodeja moniste 2 (05.10.11 Metropolia) Esim 5.1 laskujärjestys operaattorit var tulos = 5 + 4 * 12 / 4; document.write("5 + 4 * 12 / 4 laskutoimituksen tulos

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Mainonnanhallinta Käyttöopastus. Tekniikka. Olli Erjanti. 8.4.2008 Mediareaktori

Mainonnanhallinta Käyttöopastus. Tekniikka. Olli Erjanti. 8.4.2008 Mediareaktori Mainonnanhallinta Käyttöopastus Tekniikka EmediateAd 3.7 Olli Erjanti Oppaassa käydään läpi seuraavaa: Mainospaikkojen luonti html-sivupohjaan Mainoskampanjan keskeytys teknisten tai muiden ongelmien vuoksi

Lisätiedot

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas Tiedonhallinnan perusteet Viikko 1 Jukka Lähetkangas Kurssilla käytävät asiat Tietokantojen toimintafilosofian ja -tekniikan perusteet Tiedonsäilönnän vaihtoehdot Tietokantojen suunnitteleminen internetiä

Lisätiedot

Sisällys Clerica Web-sovellusten käytön aloittaminen 2

Sisällys Clerica Web-sovellusten käytön aloittaminen 2 Sisällys Clerica Web-sovellusten käytön aloittaminen 2 Kirjautuminen järjestelmään 2 Myyntilaskut 2 Ostolaskujen käsittely 4 Uuden laskun syöttö 6 Palkkailmoituslomake 8 Palkkailmoituksesta kopio 9 Henkilötietojen

Lisätiedot

OPAS KULTA2 -JÄRJESTELMÄN KÄYTTÖÖN

OPAS KULTA2 -JÄRJESTELMÄN KÄYTTÖÖN OPAS KULTA2 -JÄRJESTELMÄN KÄYTTÖÖN 1. Kulta2 -järjestelmän käyttäminen ensimmäistä kertaa s. 1-3 2. Järjestelmään kirjautuminen olemassa olevalla käyttäjätunnuksella ja salasanalla s. 4-5 3. Hakemuksen

Lisätiedot

Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden

Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden 1 Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden asiakkaan lisääminen Laskujen haku Salasanan vaihto

Lisätiedot

Mikä on Twitter? Rekisteröityminen

Mikä on Twitter? Rekisteröityminen Mikä on Twitter? Twitter on suosittu yhteisö ja mikroblogipalvelu, jonka välityksellä yritykset, ystävät ja perheenjäsenet voivat kommunikoida keskenään. Twitterin käyttö vastaa kysymykseen mitä teet tällä

Lisätiedot

Toimittajaportaalin pikaohje

Toimittajaportaalin pikaohje 1 Toimittajaportaalin pikaohje Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden asiakkaan lisääminen Laskujen

Lisätiedot

SMT / SUOMEN MATKATOIMISTO OY Y-TUNNUS / FO-NUMMER / BUSINESS ID

SMT / SUOMEN MATKATOIMISTO OY Y-TUNNUS / FO-NUMMER / BUSINESS ID Matkustajatietokanta perustuu asiakkaan ja Matkatoimisto SMT:n väliseen asiakasnumero- ja laskutushierarkiaan (yhteisöhierarkia). Matkustajatiedot (profiilit) hallinnoidaan Online -palvelussa, johon kirjaudutaan

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

1. ASIAKKAAN OHJEET... 2. 1.1 Varauksen tekeminen... 2. 1.2 Käyttäjätunnuksen luominen... 4. 1.3 Varauksen peruminen... 4

1. ASIAKKAAN OHJEET... 2. 1.1 Varauksen tekeminen... 2. 1.2 Käyttäjätunnuksen luominen... 4. 1.3 Varauksen peruminen... 4 1. ASIAKKAAN OHJEET... 2 1.1 Varauksen tekeminen... 2 1.2 Käyttäjätunnuksen luominen... 4 1.3 Varauksen peruminen... 4 1.4 Omien tietojen muokkaaminen... 5 1.5 Salasanan muuttaminen... 5 2. TYÖNTEKIJÄN

Lisätiedot

Informaatiotekniikan kehitysyksikkö

Informaatiotekniikan kehitysyksikkö SAVONIA Savonia RPM Käyttöopas Informaatiotekniikan kehitysyksikkö 18.8.2011 Sisällysluettelo 1. Perusnäkymä... 3 2. Kirjautuminen... 4 3. Rekisteröinti... 5 4. Idean jättäminen... 6 4. Arviointi... 8

Lisätiedot

Webinaari -koulutukset

Webinaari -koulutukset 2013-03-05 1 (22) Webinaari -koulutukset Webinaariin kirjautumisohje 2013-03-05 2 (22) Sisällysluettelo 1 Liittyminen Webinaariin... 3 1.1 Sisäänkirjautuminen... 3 1.2 Internet Explorer... 5 1.3 Firefox

Lisätiedot

Toimittajaportaalin pikaohje

Toimittajaportaalin pikaohje 1 Toimittajaportaalin pikaohje Toimittajaportaalin rekisteröityminen Toimittajaportaalin sisäänkirjautuminen Laskun luonti Liitteen lisääminen laskulle Asiakkaiden hallinta Uuden asiakkaan lisääminen Laskujen

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Yliopistohaku.fi -palvelun Oma haku -palvelu

Yliopistohaku.fi -palvelun Oma haku -palvelu Hakijan ohje Opetushallitus syksy 2013 Yliopistohaku.fi -palvelun Oma haku -palvelu Sisältö Yliopistohaku.fi palvelun Oma haku -palvelu... 2 Aloitusnäyttö... 4 Kirjaudu Oma haku -palveluun... 5 Entä jos

Lisätiedot

OHJEET WORDPRESS-BLOGIN LUOMISEEN JA TAVALLISIMPIIN BLOGITOIMINTOIHIN

OHJEET WORDPRESS-BLOGIN LUOMISEEN JA TAVALLISIMPIIN BLOGITOIMINTOIHIN OHJEET WORDPRESS-BLOGIN LUOMISEEN JA TAVALLISIMPIIN BLOGITOIMINTOIHIN Koulutusteknologian perusopinnot Digitaalinen portfolio oppimisen tukena 2010 Essi Vuopala 1. BLOGIN LUOMINEN Mene osoitteeseen http://www.wordpress.com

Lisätiedot

6. Funktiot 85. Kuinka funktioita määritellään ja kutsutaan. Kuinka funktioille viedään arvoja ja niistä palautetaan arvoja

6. Funktiot 85. Kuinka funktioita määritellään ja kutsutaan. Kuinka funktioille viedään arvoja ja niistä palautetaan arvoja 6. Funktiot 85 OPPITUNTI 6 Funktiot Funktiot ovat hyvin laaditun skriptin perusta. Ne tekevät koodista helppolukuista ja uudelleen käytettävää. Laajoja projekteja on mahdotonta hallita ilman funktioiden

Lisätiedot

Toteutusdokumentti. Aija. Helsinki 1.9.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos

Toteutusdokumentti. Aija. Helsinki 1.9.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos Toteutusdokumentti Aija Helsinki 1.9.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos Sisältö 1. Johdanto...3 2. SQL -lauseet...3 3. Ajastettutoiminta - backrun.php...3

Lisätiedot

EU Login. EU Login kirjautuminen. EU Login tilin luominen

EU Login. EU Login kirjautuminen. EU Login tilin luominen EU Login EU Login kirjautuminen EU Login järjestelmä mahdollistaa keskitetyn pääsyn useisiin eri Euroopan Komission verkkosovelluksiin yhdellä käyttäjätunnuksella ja salasanalla. EU login varmistaa identiteettisi

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

OPPITUNTI 5 Ohjelman kulku

OPPITUNTI 5 Ohjelman kulku 5. Ohjelman kulku 67 OPPITUNTI 5 Ohjelman kulku Viime tunnilla luomamme skriptit olivat suoraviivaisia. Ohjelmalauseet suoritettiin aina samassa järjestyksessä, joten ohjelmissamme ei ollut lainkaan joustavuutta.

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Järjestelmän syötteet ja tulosteet Kohahdus Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Järjestelmän syötteet ja tulosteet Kohahdus Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Järjestelmän syötteet ja tulosteet Kohahdus Helsinki 5.11.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä

Lisätiedot

OSAAMISENHALLINTA OMAT TIEDOT. Peruskäyttäjän pikaohje

OSAAMISENHALLINTA OMAT TIEDOT. Peruskäyttäjän pikaohje OSAAMISENHALLINTA OMAT TIEDOT Peruskäyttäjän pikaohje Omat tiedot Omien tietojen etusivulla näkyy kirjautuneen käyttäjän nimi sekä käytössä olevat osiot Osaamisenhallinnan käyttöönotossa määritellään eri

Lisätiedot

WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY

WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY 1 WWW-PALVELUN KÄYTTÖÖNOTTO LOUNEA OY 10.4.2015 Lounea Oy Tehdaskatu 6, 24100 Salo Puh. 029 707 00 Y-tunnus 0139471-8 www.lounea.fi Asiakaspalvelu 0800 303 00 Yrityspalvelu 0800 303 01 Myymälät 0800 303

Lisätiedot

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen

Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen 1 (13) Käyttöohje Suomen Pankin DCS2-järjestelmään rekisteröityminen 2 (13) Sisällysluettelo 1 Palveluun rekisteröityminen... 3 1.1 Henkilötiedot...4 1.2 Suomen Pankin tiedonkeruut... 5 1.2.1 Alustava

Lisätiedot

Lomake kannattaa asemoida taulukkoon: table. Silloin selitteet ja kentät saadaan sarakkeisiin. Kenttien ulkoasu voidaan määritellä tyyleillä.

Lomake kannattaa asemoida taulukkoon: table. Silloin selitteet ja kentät saadaan sarakkeisiin. Kenttien ulkoasu voidaan määritellä tyyleillä. Lomakkeet Lomake kannattaa asemoida taulukkoon: table. Silloin selitteet ja kentät saadaan sarakkeisiin. Kenttien ulkoasu voidaan määritellä tyyleillä. Lomakkeen tyylit kannattaa määritellä omaan, eriliseen,

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot

Datahub-tukipalvelu ServiceNow. Käyttöohje

Datahub-tukipalvelu ServiceNow. Käyttöohje Datahub-tukipalvelu ServiceNow Käyttöohje Ota Datahub-tukipalvelu käyttöön Ota datahub-tukipalvelu käyttöön osoitteessa: https://support.datahub.fi/fingrid 1. tai siirry tukipalveluun EDIELfi-portaalin

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

Lisätiedot

SUOMI LIIKKUU KOULULIIKUNTATAPAHTUMIEN ILMOITTAUTUMISJÄRJESTELMÄ

SUOMI LIIKKUU KOULULIIKUNTATAPAHTUMIEN ILMOITTAUTUMISJÄRJESTELMÄ SUOMI LIIKKUU KOULULIIKUNTATAPAHTUMIEN ILMOITTAUTUMISJÄRJESTELMÄ KÄYTTÄJÄN OHJE 2 S i v u SISÄLLYSLUETTELO 1. Kirjautuminen 3 2. Etusivunäkymä 4 3. Tapahtumat 5 3.1. Tapahtumaan ilmoittautuneet 6 3.2.

Lisätiedot

HÄLYRI-SOVELLUKSEN KÄYTTÖOHJEET

HÄLYRI-SOVELLUKSEN KÄYTTÖOHJEET HÄLYRI-SOVELLUKSEN KÄYTTÖOHJEET 1 TILIN LUONTI Aloita Hälyrin käyttö luomalla tili. Mikäli tilasit tuotteen verkkokaupastamme, sinulla on jo tunnukset eikä uutta tiliä tarvitse luoda. Kirjaudu tällöin

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

JYVÄSKYLÄN SEUDUN. 1. Sisältö * * Tähdellä merkityt kohdat ovat pakollisia. Sivun oikeassa yläkulmasta löytyy Lisää oma tapahtumasi.

JYVÄSKYLÄN SEUDUN. 1. Sisältö * * Tähdellä merkityt kohdat ovat pakollisia. Sivun oikeassa yläkulmasta löytyy Lisää oma tapahtumasi. JYVÄSKYLÄN SEUDUN Sivun oikeassa yläkulmasta löytyy Lisää oma tapahtumasi. Lomakkeella voit lisätä tapahtuman tapahtumiin, harrasteisiin tai molempiin. 1. Sisältö * * Tähdellä merkityt kohdat ovat pakollisia.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Oma kartta Google Maps -palveluun

Oma kartta Google Maps -palveluun TAMPERE 1 (6) Oma kartta Google Maps -palveluun Google Maps palveluun on mahdollista luoda karttoja omilla paikkamerkeillä. Tilin luonti Google-palveluihin Tehdäksesi karttoja omilla paikkamerkinnöillä,

Lisätiedot

Verkkojulkaiseminen Minna Väisänen. HTML5-tehtävä

Verkkojulkaiseminen Minna Väisänen. HTML5-tehtävä Verkkojulkaiseminen Minna Väisänen HTML5-tehtävä Kirjoita Dreamweaverissa oheisen nettisivun koodi. Lisää xx-kohtiin omat tietosi. Kuvan nimi on joki.jpg. Ensin tehdään sivusto ja sitten yksittäinen sivu.

Lisätiedot

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not

Lisätiedot

INTINU13A6 Java sovellukset

INTINU13A6 Java sovellukset Johdanto Kurssin tavoitteena oli luoda tietokantaa käyttävä websovellus Java EE ohjelmointikielellä, sekä hyödyntää muun muassa servlettejä sekä JSP sivuja ja muita tekniikoita monipuolisesti. Webserverinä

Lisätiedot

Drupal-sivuston hallintaopas

Drupal-sivuston hallintaopas Drupal-sivuston hallintaopas 11.12.2011 1. Sisäänkirjautuminen... 2 2. Sivun luonti... 2 1 1. Sisäänkirjautuminen Kirjautumissivulle pääset osoitteesta http://www.venajaseura.com/user Käyttäjätunnuksesi

Lisätiedot

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Tehtävä 1: Metodit, listat, alkuluvut (4p) Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ). Alkuluvut ovat lukuja, jotka ovat suurempia kuin yksi ja jotka ovat jaollisia

Lisätiedot

Maventa Connector Käyttöohje

Maventa Connector Käyttöohje Maventa Connector Käyttöohje 17.4.2015 Sisällys 1. Esittely... 2 1.1. Käytön edellytykset... 2 1.2. Tuetut aineistomuodot... 2 2. Asennustiedosto... 3 2.1. Sisäänkirjautuminen... 7 3. Asetuksien määrittäminen...

Lisätiedot

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito Henri Kinnunen, Seppo Tompuri, Tero Malkki, Matti Heiskanen, Tommi Rönkönharju, Tuomas Valkeapää Sisällysluettelo 1. Alkusanat.2 2. Asennusohje..2 3.

Lisätiedot

TIETOJENKÄSITTELY/PIKATAIVAL2 Tehtävä G

TIETOJENKÄSITTELY/PIKATAIVAL2 Tehtävä G TIETOJENKÄSITTELY/PIKATAIVAL2 Tehtävä G 1 Tehtävänäsi on määritellä tietokantaan KisatSVNL.mdb lomake Kilpailut ohessa olevan mallin mukaan. Lomake on tarkoitettu kilpailutietojen lisäykseen, selailuun

Lisätiedot

Ohje Emmi-sovellukseen kirjautumista varten

Ohje Emmi-sovellukseen kirjautumista varten 1 Ohje Emmi-sovellukseen kirjautumista varten Ohjetta päivitetty 2.9.2017. 1. Yleistä Emmi-kirjautumisesta Kirjautuminen Emmi-sovellukseen vaatii voimassa olevan käyttäjätunnuksen sekä hyväksytyn käyttöoikeuden

Lisätiedot

Innocent drinks Cookie Policy

Innocent drinks Cookie Policy Innocent drinks Cookie Policy Tässä evästekäytännössä kuvaillaan erilaisia evästeitä, joita saatetaan käyttää innocentin omistamalla ja kontrolloimalla sivustolla, jolta olet saapunut tähän evästekäytäntöön

Lisätiedot

Basware Portal palvelun ohje toimittajille

Basware Portal palvelun ohje toimittajille Basware Portal palvelun ohje toimittajille Verkkolaskutuspalvelun käyttöönottamiseksi laskun lähettäjän tulee rekisteröityä palveluun. Palvelu on käyttäjälle maksuton. Palvelun osoite: https://portal.basware.com/open/supplier

Lisätiedot

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN -Mene osoitteeseen keskustanuoret.fi/user - Kirjoita saamasi käyttäjätunnus ja salasana - Klikkaa yllä olevaa piirisi logoa niin

Lisätiedot

Ohjelman käyttöön ei sisälly muita kuluja kuin ohjelman lisenssimaksu ja mahdolliset webbipalvelusi käyttömaksut.

Ohjelman käyttöön ei sisälly muita kuluja kuin ohjelman lisenssimaksu ja mahdolliset webbipalvelusi käyttömaksut. Kotisivu ohje Kotisivu - ohjelmisto on webbipohjainen kotisivujen julkaisujärjestelmä jossa käyttäjä ei tarvitse erityistaitoja kyetäkseen julkaisemaan webbisivuja. Jos osaat käyttää Microsoft Word tekstinkäsittelyohjelmaa,

Lisätiedot

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu JÄRJESTELMÄN KÄYTTÖOHJE LiKe Liiketoiminnan kehityksen tukiprojekti Versio: 1.1 Tila: hyväksytty Päivämäärä: 13.2.2001

Lisätiedot

Vianova Systems Finland Oy:n Novapoint käytön tuki

Vianova Systems Finland Oy:n Novapoint käytön tuki Vianova Systems Finland Oy:n Novapoint käytön tuki Yleistä Vianova Systems Finland Oy:n Novapoint ylläpitosopimus sisältää ohjelmiston käytön tukipalvelun. Asiakas on oikeutettu saamaan kohtuullisessa

Lisätiedot

Tonttihakemuksen tekeminen

Tonttihakemuksen tekeminen Tonttihakemuksen tekeminen Tontinluovutuksen periaatteet ja hyväksyttävän hakemuksen ehdot on kuvattu Espoon kaupungin internet-sivuilla osoitteessa. Tärkeitä huomioita tonttihakuun osallistumisessa: 1)

Lisätiedot

Kuva: Ilpo Okkonen

Kuva: Ilpo Okkonen OodiHOPS OHJAAJAN OHJE 14.2.2017 Kuva: Ilpo Okkonen OodiHOPS Oulun yliopistossa Oulun yliopiston koulutusneuvosto on päättänyt, että OodiHOPS-toiminto otetaan käyttöön vähintään aloittavilla opiskelijoilla

Lisätiedot

TYÖNTEKIJÄN KÄYTTÖOHJEET - SOKU

TYÖNTEKIJÄN KÄYTTÖOHJEET - SOKU TYÖNTEKIJÄN KÄYTTÖOHJEET - SOKU ETUSIVU Kun tulet SOKU-järjestelmän (SOKU) etusivulle, näet listan avoimista työpaikoista. Yläpalkissa mustalla ympyröitynä on Kirjaudu-nappi Kun klikkaat sitä, pääset kirjautumissivulle.

Lisätiedot