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

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

Ylläpitodokumentti Labra

Ohjelmoin*kielet ja - paradigmat 5op. Markus Norrena

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

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 K2009

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

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

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

Lohdutus - tietokantadokumentti

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

Tietokannat II -kurssin harjoitustyö

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Microsoft Visual Studio 2005

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

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

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

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

Java ja tietokannan käsittely (JDBC)

SQL - STRUCTURED QUERY LANGUAGE

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

SQL Buddy JAMK Labranet Wiki

PHP:n alkeita ja taustaa. Markus Norrena

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

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

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

Unix. Markus Norrena

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

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

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

LINUX-HARJOITUS, MYSQL

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

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

Apple Mail. Käynnistäkää Apple Mail-ohjelma. Valitkaa Aloitusvalikosta sähköpostitilin tarjoajaksi Lisää muu sähköpostitili (Other Mail Account..

Tietokantasovelluksen määrittelydokumentti

Olio-ohjelmointi Javalla

HELIA 1 (11) Outi Virkki Tiedonhallinta

OPPITUNTI 12 MySQL-tietokannan käyttö

Luokan sisällä on lista

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

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

1. Olio-ohjelmointi 1.1

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

CSE-A1200 Tietokannat

MYSQL-TIETOKANNAN JA OBJEKTIEN LUOMINEN JA HALLINTA ERI MYSQL- TYÖKALUILLA JOUNI HUOTARI

Ylläpitodokumentti. Oppimistavoitteiden hallintajärjestelmä harri

Ohjelmoinnin jatkokurssi, kurssikoe

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

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

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

Wordpress-julkaisualusta. Mediatekniikan seminaari Harri Viitala

Tietokannat II -kurssin harjoitustyö

812336A C++ -kielen perusteet,

Web Services tietokantaohjelmoinnin perusteet

POISSAOLOJEN SEURANTAJÄRJESTELMÄ

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

Mikä yhteyssuhde on?

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

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

T Testiraportti TR-3. ETL-työkalu

UML ja luokkien väliset suhteet

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

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

server "Ismo" $ uname -a Linux ismo #1 SMP Thu Sep 16 19:35:51 UTC 2010 i686 GNU/Linux $ cat /etc/issue Debian GNU/Linux 5.

Käyttöohje. Labra. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Netikka verkkotila - käyttöohje

Tiina Runtti BLOGI-LISÄOSAN KEHITTÄMINEN RAMSES CMS -JÄRJESTELMÄÄN

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Written by Administrator Saturday, 28 August :51 - Last Updated Tuesday, 22 February :45

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Salasanan vaihto uuteen / How to change password

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

Uutta Remote Support Platform 3.1 -versiossa

1. Omat operaatiot 1.1

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

HELIA 1 (16) Outi Virkki Tietokantasuunnittelu

Webpalvelin muistitikulle - Ohje

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

Ohjelman versio 2.3.0

Periytyminen (inheritance)

Testausdokumentti NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

HELIA 1 (14) Outi Virkki Tiedonhallinta

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

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

Transkriptio:

Ohjelmointikielet ja -paradigmat 5op Markus Norrena

Framework Framework tavoitteet Miten viikko meni?

Photo Gallery Project Public / Admin sides Pagination (next / prev) thumbnails Full size images Comments Log in Upload images Delete images Review/delete somments

Luokkien hahmotelmani User Käyttäjätunnus / kokonimi, salasana, oikeudet, omistamat kuvat ja kommentit, kirjautuminen (log in), Photograph Lisää / poista kuva, kenen lisäämä, milloin, tila (näkyvissä?) Comments Teksti, kenen kirjoittama, milloin, tila (näkyvissä / poistettu) Database Aukaisee yhteyden, suorittaa haut, jne. Pagination Näyttää kuvat: thumbnails / isot, jne.

Kotitehtävä 8 : Photo Gallery - UML Piirtäkää UML-kaavio tarvittavista luokista, attribuuteista ja metodeista Suunnitelkaa samalla miten valokuvagalleriaohjelmanne voisi toimia UML-kaavio tai jokin yhtä selkeä esitystapa Tarkoitus on että joudutte miettimään nyt kokonaisuutta Edellisten kalvojen ohjelmamäärittelyjen mukaan!

Kotitehtävä 8 : Minimi-UML User Photograph Database id username password first_name last_name id filename size state caption upload_dir connection last_query jne. find_all() find_by_id() full_name() save() destroy() find_all() find_by_id() open_connection() close_connection() query() escape_value() fetch_array()

Kotitehtävä 8 : Photo Gallery - UML Oikeasti en tiedä miten tehdä, tehtävän tarkoitus oli saada teidät miettimään tätä itse, ennen kuin esitän joitain ratkaisuja. Itse suunnittelen enemmän omassa päässäni sekä samalla kuin koodaan (mikä ei ole kovinkaan tiimiystävällistä)

Photo Gallery Project Lähdetään toteuttamaan, tänään: 1. Ensin esimerkki database-luokan tekemisestä 2. Sitten valitkaa yksi projektin luokka ja ryhtykää toteuttamaan sitä

Käytännön asiat: hakemistorakenne Projektihakemisto joka on projektin juuri Sen alle public hakemisto, joka sisältää julkisesti jaettavan tiedon Kuten esim. Css, javascriptit, kuvat Publicin ulkopuolelle koodia jota halutaan suojata erityisen tarkkaan Kuten esim. Includes -kansio Esim hakemistorakenteesta:

Käytännön asiat: hakemistorakenne kuvagalleria public images javascripts stylesheets Includes database password Kun "includes" ei ole webbipalvelimen alaisuudessa, niin se luo lisäturvaa meille.

Käytännön asiat: hakemistorakenne kuvagalleria public images javascripts stylesheets Sisältää index.php tiedoston includes Sisältää php oliokoodimme, joka liitetään esim. include käskyllä muuhun koodiimme: include '../includes/users.php';

Käytännön asiat: hakemistorakenne Miten toteuttaa? Esim. symbolinen linkki public_html hakemistosta muualle: cd ~/public_html/ ln -s /home/markus/kuvagalleria/ public./kuvagalleria Jonka jälkeen näkyy: http://195.148.97.131/~markus/ kuvagalleria/

Tehtävä Luokaa itsellenne hakemistorakenne kuvagalleriaanne varten

Database-luokka: karkea suunnitelma Luodaan luokka Database.php Config.php -> tietokanta, tunnukset jne. MySQLDatabase class open_connection() metodi» Select db $connection attribuutti construct() aukaisee yhteyden aina close_connection() new MySQLDatabase Ajatuksena olla tietokantaneutraali, eli tarvittaessa voidaan myös luoda vaikkapa OracleDatabase -luokka myöhemmin.

Database-luokka : tietokanta Luodaan projektille oma tietokanta Tarvitaan testataksemme luokkaamme Terminaalissa: mysql -u okp -p Salasana oli: oli9trr3 Create database mn_kuvagalleria; Käyttäkää etuliitettä jotta jokainen saa oman tietokantansa Tai luokaa tietokanta phpmyadminissa: http://195.148.97.131/phpmyadmin/

Database-luokka : eka tietokantataulu CREATE TABLE users ( id int(11) NOT NULL auto_increment, username varchar(50) NOT NULL, password varchar(40) NOT NULL, first_name varchar(30) NOT NULL, last_name varchar(30) NOT NULL, PRIMARY KEY (id) ); INSERT INTO users VALUES (1,'markus','secretpwd', 'Markus','Norrena');

Tehtävä Luokaa kuvagalleriallenne oma tietokanta ja sinne vähintään yksi taulu ja siihen yksi rivi dataa testausta varten Yleistä olisi myös että projektilla on oma tietokantatunnuksensa, mutta sitä en ottanut tällä kertaa huomioon.

Database-luokka PHP:tä varten luodaan config.php Tämä sisältää tietokannan salasanat jne. määriteltyinä vakiomuuttujiin Sijoitetaan includes kansioon <?php // Database Constants defined('db_server')? null : define("db_server", "localhost"); defined('db_user')? null : define("db_user", "okp"); defined('db_pass')? null : define("db_pass", "oli9trr3"); defined('db_name')? null : define("db_name", "mn_kuvagalleria");?>

database.php Luodaan database.php includeskansioon Tämä tiedosto määrittelee tietokantaluokan

database.php <?php require_once("config.php"); class MySQLDatabase { } $database = new MySQLDatabase();?> Kutsuttaessa luo tietokantaolion Mahdollista luoda omat luokkansa eri tietokannoille Oracle, Microsoft SQL Server, SQLite, jne.

database.php : periaate public function open_connection() { } $connection = mysql_connect(db_server, DB_USER, DB_PASS); if (!connection) { die("database connection failed: ". mysql_error()); } $database = new MySQLDatabase(); $database->open_connection(); Tämä ei vielä toimi, tässä näkyy vain periaate mitä haetaan.

private $connection; database.php : toimii public function open_connection() { } $this->connection = mysql_connect(db_server, DB_USER, DB_PASS); if (!$this->connection) { die("database connection failed: ". mysql_error()); } else { $db_select = mysql_select_db(db_name, $this->connection); if (!$db_select) { die("database selection failed: ". mysql_error()); } } $database = new MySQLDatabase(); $database->open_connection();

Tehtävä Luokaa config.php ja database.php äskeisten kalvojen mukaan, tarkistakaa etteivät ne anna virheilmoituksia. Index.php: <?php require_once("../includes/database.php");?>

database.php : parantelua $database->open_connection(); On turha käsky, siirretään se construct metodiin, jotta yhteys aukaistaan automaattisesti aina kun olio luodaan. function construct() { $this->open_connection(); }

database.php Luodaan vielä metodit public function close_connection() public function query($sql) public function escape_value( $value ) public function fetch_array($result_set) public function num_rows($result_set) public function insert_id() public function affected_rows() confirm_query($result)

database.php : close_connection() public function close_connection() { if(isset($this->connection)) { mysql_close($this->connection); unset($this->connection); } } Nyt voimme halutessamme sulkea yhteyden: $database->close_connection();

database.php : query($sql) public function query($sql) { $result = mysql_query($sql, $this->connection); if (!$result) { die("database query failed: ". mysql_error()); } return $result; } Saa parametrina kyselyn ($sql) Tarkistaa onnistuiko kysely Ellei onnistunut antaa virheilmoituksen ja lopettaa ohjelman, muuten Palauttaa kyselyn tuloksen.

database.php : confirm_query($result) public function query($sql) { $result = mysql_query($sql, $this->connection); $this->confirm_query($result); return $result; } private function confirm_query($result) { if (!$result) { die("database query failed: ". mysql_error()); } } Yleiskäyttöinen confirm_query($result) kertoo aina onnistuiko kysely.

Database-luokka : periaatteista Querying the Database The sql statement is going to change every time But the PHP mysql_query command stays the same Public query() method with $sql parameter

Kokeillaan koodia : index.php <?php require_once("../includes/database.php"); if(isset($database)) {echo "true";} else {echo "false";} echo "<br />"; $sql = "SELECT username FROM users"; $result_set = $database->query($sql); // output first username found echo mysql_result($result_set, 0);?> mysql_result() kannattaisi siirtää luokan sisälle ja luoda tietokantaneutraali metodi.

Muita metodeja Yleisistä tietokantakäskyistä kannattaa tehdä tietokantaneutraalit metodit mysql_fetch_array Tästä tulee: fetch_array() mysql_num_rows mysql_insert_id mysql_affected_rows Tietoturvasyistä kannattaa luoda erikoismerkit poistava metodi: escape_value( $value )

Tehtävä Tutustukaa viimeiseen versioon koodista! Löytyy kurssisivulta database.php index.php Sekä nämä kalvot Kokeilkaa & kyselkää!

Object-oriented programming How OOP is an improvement Grouping code together Database neutrality

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 Palauttakaa luokkanne koodi sähköpostitse ennen ensi kertaa.

Framework Muistakaa työstää myös tätä ensi kerraksi

Kotitehtävistä Aloittakaa myös kotitehtävien työstöä luokassa, haluan nähdä mitä teette seuraavaksi ja ilmeneekö heti ongelmia / kysymyksiä.