Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Samankaltaiset tiedostot
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

Olio-ohjelmointi Javalla

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

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

Tietokannat II -kurssin harjoitustyö

Web Services tietokantaohjelmoinnin perusteet

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

Netikka verkkotila - käyttöohje

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

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

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

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

Ohjelmoin*kielet ja - paradigmat 5op. Markus Norrena

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

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Java ja tietokannan käsittely (JDBC)

Mikä yhteyssuhde on?

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Microsoft Visual Studio 2005

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ylläpito toimittaa sinulla sähköpostiisi käyttäjätunnuksen ja salasanan. Tässä esimerkissä

Tietokannat II -kurssin harjoitustyö

Ylläpitodokumentti Labra

Täysautomatisoitu raportointiympäristö. Joni-Petteri Paavilainen Jani Alatalo

Toteutusdokumentti. Aija. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteenlaitos

CLOUDBACKUP TSM varmistusohjelmiston asennus

Ohjelmointi 2 / 2010 Välikoe / 26.3

HELIA 1 (11) Outi Virkki Tiedonhallinta

Käyttäjienhallintatyökalu

Tietokantojen hallinta

Kylänetti projektin sivustojen käyttöohjeita Dokumentin versio 2.10 Historia : 1.0, 1.2, 1.6 Tero Liljamo / Deserthouse, päivitetty 25.8.

2 3 LIITE 2. Index.php 1 (10) 4 5 <?php 6 7 /*! \mainpage Artikkelihallintaohjelma 8 * 9 * \section intro_sec Introduction 10 * 11 * Tämän on

SQL - STRUCTURED QUERY LANGUAGE

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Palvelinpuolen ohjelmointi

P e d a c o d e ohjelmointikoulutus verkossa

Lohtu-projekti. Ylläpitäjän dokumentti. Versiohistoria: Ensimmäinen versio Andreas Asuja

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

CSE-A1200 Tietokannat

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

SSH Secure Shell & SSH File Transfer

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Ylläpitodokumentti. PLAYOFF Jari Anttila Sanna Fröblom Aarno Sandvik Tommi Paavilainen Miikka Kohijoki. Päivi Pääkkö, ohjaaja

Periytyminen (inheritance)

MY STANDARD -OHJE. mystandard.hansaworld.com. Standard ERP Pilvipalvelu Sivu 1/6

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

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

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Lab A1.FARM_Hyper-V.v3

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

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

9. Periytyminen Javassa 9.1

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

4. Luokan testaus ja käyttö olion kautta 4.1

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

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

ICT1TN004. Lomakkeet. Heikki Hietala

INTINU13A6 Java sovellukset

Makrojen mystinen maailma lyhyt oppimäärä

Metodien tekeminen Javalla

Ohjelmoin*kielet ja - paradigmat 5op. Markus Norrena

SQL Buddy JAMK Labranet Wiki

EASY Tiedostopalvelin - mobiilin käyttöopas

Verkkosivut perinteisesti. Tanja Välisalo

PHP:n alkeita ja taustaa. Markus Norrena

LINUX-HARJOITUS, MYSQL

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Sinkka Projekti Sivu 1 (6) Projektin tiedostokuvaus dokumentti

EASY Tiedostopalvelin - mobiilin käyttöopas

MySQL Maestro. Aleksi Korpela IST4SO Markus Lamminaho IST4SO

A TIETORAKENTEET JA ALGORITMIT

Yksittäisasennus eli perusasennus

TIETORAKENTEET JA ALGORITMIT

KOHDELUOKAN MÄÄRITTELY

Convergence of messaging

UML ja luokkien väliset suhteet

Unix. Markus Norrena

Webpalvelin muistitikulle - Ohje

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Java ja grafiikka. Ville Sundberg

Erittäin nopea tapa saada kehitysympäristö php:lle pystyyn Voidaan asentaa muistitikulle

Ennen kuin aloitat lataamisen tarkista järjestelmävaatimukset:

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

Storage IT EASY Tiedostopalvelimen kustomointi

Visma Nova. Visma Nova ASP käyttö ja ohjeet

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

HARJOITUS 2: Käyttäjien ja käyttäjäryhmien luominen, Active Directory Users and Computers

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Transkriptio:

Ohjelmointikielet ja -paradigmat 5op Markus Norrena

Viimeksi: kotitehtävä 9 Luokaa kuvagallerialle user luokka käyttäjien hallintaan, joka pitää sisällään vähintään: find_all() palauttaa kaikki käyttäjät tietokannasta find_by_id($id) palauttaa tietyn id:n käyttäjätiedot full_name() palauttaa tietyn käyttäjän kokonimen authenticate($username, $password) tarkistaa tunnuksen & salasanan Minimoikaa tietokantahaut toteutuksessanne Kunhan perustelette, niin voitte valita jonkin toisen luokan ja toteuttaa se Miten meni?

User -class Sisältää käyttäjään liittyvää dataa Lähtökohta: siirrä nämä koodirivit index.php:stä user -luokkaan $sql = "SELECT * FROM users WHERE id = 1"; $result_set = $database->query($sql); $found_user = $database-> fetch_array($result_set); user.php Käyttämällä staattisia metodeita voimme milloin tahansa hakea tietoa käyttäjistä

User -class Esimerkkikoodia kurssisivulla index.php user.php Käydään läpi & kokeilkaa!

autoload() Muuta hyödyllistä PHP:n funktio josta saattaisi olla hyötyä. Jos unohtaa liittää jonkin php-tiedoston, niin tämä etsii sitä määritellyistä hakemistoista automaattisesti. http://php.net/manual/en/ language.oop5.autoload.php (tätä ei tarvitse käyttää)

session.php user.php Nyt: Sessions -luokka Hoitaa kirjautumisen admin puolelle Yhdistetään authenticate($username, $password) kirjautumislomakkeeseen ja käynnistetään samalla sessio.

Sessions -luokka Tehdään toimiva kirjautumisjärjestelmä Liittyy user luokan: authenticate($username, $password) metodiin Päätiedosto session.php Mutta käyttää useita muita tiedostoja

session_start() -esimerkki <?php session_start(); // store session data $_SESSION['views']=1;?> <html> <body> <?php //retrieve session data echo "Pageviews=". $_SESSION['views'];?> </body> </html>

Sessions -class Hoitaa sisäänkirjautuminen admin puolelle Php:n session_start() käsky pitää kirjaa siitä onko kirjautunut vai ei class Session { function construct() { session_start(); $this->check_login();...

Sessions -class Luodaan attribuutteja joihin tallennamme tiedon olemmeko kirjautuneina vai emme Metodi check_login() tarkistaa olemmeko kirjautuneina class Session { private $logged_in=false; function construct() { session_start(); $this->check_login(); if($this->logged_in) { // actions to take right away if user is logged in } else { // actions to take right away if user is not logged in } }

Sessions -class Lisätään User luokkaan authenticate() metodi public static function authenticate($username="", $password="") { global $database; $username = $database->escape_value($username); $password = $database->escape_value($password); } $sql = "SELECT * FROM users "; $sql.= "WHERE username = '{$username}' "; $sql.= "AND password = '{$password}' "; $sql.= "LIMIT 1"; $result_array = self::find_by_sql($sql); if (!empty($result_array)) { return array_shift($result_array); } else { return false; }

Sessions -class Luodaan nämä tiedostot jotta voidaan logata admin-puolelle includes/session.php public/admin/index.php public/admin/login.php Tarvitaan myös User-luokan metodi: User::authenticate($username, $password)

public/admin/index.php Ensin tarkistetaan onko kirjaudu8u if (!$session->is_logged_in()) { redirect_to("login.php"); } Sen jälkeen tulee itse html- koodi <html> <head> <title>photo Gallery</title>...

includes/functions.php Luodaan myös func@ons.php joka sisältää yleishyödyllisiä funk@oita kuten redirect_to() function redirect_to( $location = NULL ) { if ($location!= NULL) { header("location: {$location}"); exit; } }

includes/initialize.php Otetaan myös käy8öön yleishyödyllinen initialize.php Yksi tiedosto joka lisää kaikki tarvittavat luokat sun muut tiedostot yhdestä paikkaa, tämä: require_once("../../includes/initialize.php"); Korvaa nämä require_once("../../functions.php"); require_once("../../session.php"); require_once("../../database.php"); require_once("../../user.php"); jne

public/admin/login.php Tarkista onko kirjautunut, jos niin ohjaa pääsivulle, muuten Tarkista onko lähetä nappia lähete8y ja täsmääkö tunnus & salasana @etokannasta Tarvi8aessa anna virheilmoitus (kirjautuminen epäonnistui) Näytä kirjautumislomake <form action="login.php" method="post"> <input type="text" name="username" maxlength="30" value="<?php echo htmlentities($username);?>" />...

Tiedostot ja polut Initialize.php: hoitaa kaikki polut ja kaikki liitettävät tiedostot jne. // DIRECTORY_SEPARATOR is a PHP pre-defined constant // (\ for Windows, / for Unix) defined('ds')? null : define('ds', DIRECTORY_SEPARATOR); // File system path defined('site_root')? null : define('site_root', DS.'home'.DS.'markus'.DS.'kuvagalleria'); // Includes directory defined('lib_path')? null : define('lib_path', SITE_ROOT.DS.'includes'); // load config file first require_once(lib_path.ds.'config.php');

Html -layout Itse saitille luodaan layouts kansio, jonne tulee footer ja header tiedot, jotka ovat samat sivulta toiselle Luodaan myös include_layout_template() funktio joka tuo layoutit oikeasta paikkaa

Tutustukaa koko koodiin Kurssisivulla: sessions_kuvag.zip Näyttää tältä: http://195.148.97.131/~markus/kuvagalleria/ http://195.148.97.131/~markus/kuvagalleria/ admin/

Tehtävä Lisää sivulle toimiva logout -painike Sivuston admin-puolelle

Kotitehtävä 10: Framework esitelmä Valmistelkaa viimeiselle kerralle esitelmä Frameworkistanne Tarkoituksena antaa muille kurssilaisille käsitys Frameworkinne toiminnallisuuksista sekä sen hyvistä ja huonoista puolista Esitelkää myös mitä olette saaneet sillä aikaan Esitelmät 10.4. (Nic) vai 17.4. (muut)

Vielä toteutamme Käyttäjien luominen, päivittäminen ja poistaminen (creating, updating and deleting users): User luokkaan Jos ehditään Tiedostojen latauksen (File Upload): Photograph -luokka Kuvien näyttäminen ja niiden ylläpito

user.php create, update and delete users (CRUD): user.php Käy8äjä = olion ilmentymä Tätä voidaan päivi8ää, poistaa jne., mu8a sillä ei ole vaikutusta ellei nämä muutokset sen jälkeen ajeta myös @etokantaan!

user.php On tärkeää erottaa oliopäivitykset ja tietokantapäivitykset. Olion ilmentymä pitää tiedot sisällään: class User { public $id; public $username; public $password; public $first_name; public $last_name;

user.php Voidaan ensin tehdä muutokset olion ilmentymään, ja sen jälkeen tallettaa muutokset tietokantaan: // muutetaan arvo: $user->password = "uusipasswd"; // viedään muutos tietokantaan: $user->save();

user.php: public func@on save() public func@on save() metodi joka joko luo uuden db- recordin tai talle8aa muutokset jo olemassa olevaan: public function save() { // A new record won't have an id yet. return isset($this->id)? $this->update() : $this->create(); } Seuraavaksi luokaa create() ja update() metodit Onnistuessaan palau8avat true Muuten palau8avat false

user.php Käytän taulun nimeä apumuu8ujassa, jo8a se on tarvi8aessa helppo muu8aa class User {... protected static $table_name="users";

user.php: public func@on create() public function create() { global $database; // - INSERT INTO table (key, key) VALUES ('value', 'value') // - single-quotes around all values // - escape all values to prevent SQL injection $sql = "INSERT INTO ".self::$table_name." ("; $sql.= "username, password, first_name, last_name"; $sql.= ") VALUES ('"; $sql.= $database->escape_value($this->username)."', '"; $sql.= $database->escape_value($this->password)."', '"; $sql.= $database->escape_value($this->first_name)."', '"; $sql.= $database->escape_value($this->last_name)."')"; } if($database->query($sql)) { $this->id = $database->insert_id(); return true; } else { return false; }

admin/test.php Tilapäinen @edosto jolla testata koodimme <?php require_once('../../includes/initialize.php'); if (!$session->is_logged_in()) { redirect_to("login.php"); } include_layout_template('admin_header.php'); $user = new User(); $user->username = "johnsmith"; $user->password = "abcd12345"; $user->first_name = "John"; $user->last_name = "Smith"; $user->create(); echo "User created.<br>"; // you should check if it went ok <?php include_layout_template('admin_footer.php');?>

Ko@tehtävä 11 Toteuta update() ja delete() - metodit User luokkaan, seuraavien kalvojen mukaan:

user.php: public func@on update() Luodaan samalla tapaa, mu8a sql- muoto on: UPDATE table SET key='value', key='value' WHERE condition Toteuta. Voisi toimia esim. näin: $user = User::find_by_id(2); $user->password = "uusisalasana"; $user->update();

user.php: public func@on delete() public func@on delete() SQL- lauseen muoto DELETE FROM table WHERE condition LIMIT 1 Limit - kanna8aa @etoturvasyistä käy8ää delete- lauseissa aina kun mahdollista. Huomatkaa e8ä ilmentymä (olio) on yhä olemassa vaikka poistamme käy8äjän @etokannasta! Tämä mahdollistaisi esim. Tällaisen: echo $user->first_name. " was deleted";

Ensi kerralla valokuvat