Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

4-4-WebTK-Ohj Teuhola 2012305 4.4. Web-tietokantaohjelmointi Www-sivut olivat alunperin staattisia, ts. palvelin ylläpiti HTML-kielisiä dokumentteja ja.

Samankaltaiset esitykset


Esitys aiheesta: "4-4-WebTK-Ohj Teuhola 2012305 4.4. Web-tietokantaohjelmointi Www-sivut olivat alunperin staattisia, ts. palvelin ylläpiti HTML-kielisiä dokumentteja ja."— Esityksen transkriptio:

1 4-4-WebTK-Ohj Teuhola 2012305 4.4. Web-tietokantaohjelmointi Www-sivut olivat alunperin staattisia, ts. palvelin ylläpiti HTML-kielisiä dokumentteja ja toimitti niitä pyynnöstä selaimille, jotka generoivat fyysisen ulkoasun. Hyvin pian havaittiin tarve dynaamisesti muuttu- ville sivuille, joiden sisältö riippuu sekä selaimen käyttäjän antamista syöteparametreista että sovellusjärjestelmän kulloisestakin tietosisällöstä (jota edustaa yksi tai useampia tietokantoja).

2 4-4-WebTK-Ohj Teuhola 2012 Dynaamisten sivujen toteutusvaihtoehdot HTML-koodia voidaan varioida tuottamalla sitä ohjelmallisesti. Ohjelmia kutsutaan skripteiksi. Kaksi päävaihtoehtoa: –Asiakaspään skriptikielet kuten Javascript suoritetaan selaimessa. Näiden rajoituksena on, että ne eivät (ainakaan suoraan) pääse käsiksi palvelimen tietokantoihin. Skriptien päätarkoitus on käyttöliittymän ja interaktiivisuuden toteutus. –Palvelinpään skriptikielet kuten Perl, PHP, VBscript, JSP, JScript, Ruby on Rails, Python,... (perinteinen nimitys: CGI-ohjelmointi; ‘Common Gateway Interface’) 306

3 4-4-WebTK-Ohj Teuhola 2012307 PHP-skriptin idea Selain kutsuu PHP-skriptiä kuten muitakin sivuja (esim. http://kanta.cs.utu.fi/php.php) ja syöttää (tarvittaessa) parametritietoja.http://kanta.cs.utu.fi/php.php Www-palvelimeen liittyvä PHP-tulkki tuottaa parametrien sekä samalla tai eri palvelimella olevien tiedostojen, tietokantojen yms. perusteella HTML-sivun dynaamisesti. ‘Tuottaminen’ tarkoittaa yksinkertaisesti PHP- skriptissä olevia kirjoituskäskyjä, jotka tulostavat laillista HTML-syntaksia (tai selainpään skriptejä)

4 4-4-WebTK-Ohj Teuhola 2012308 PHP:tä käyttävän web-tietokanta- sovelluksen kolmitasoarkkitehtuuri Web-selain Asiakkaan käyttöliittymä (www-lomake) Web-palvelin TKHJ Tietokanta PHP-tulkki+ tietokantafunktiot Sovelluslogiikka (php-skripti) Tietokanta- palvelin HTTP

5 4-4-WebTK-Ohj Teuhola 2012309 Tarkennettu käsittelyn kulku kolmitasoarkkitehtuurissa 1.Web-selain lähettää pyynnön (=php-skriptin kutsu) palvelimelle, yleensä web-lomakkeeseen pohjautuen. 2.Web-palvelin välittää kutsun php-tulkille, joka käynnistää skriptin. 3.Skripti avaa yhteyden tietokantaan (esim. pg_connect()). 4.Suoritetaan SQL-lauseita (esim. pg_query()). 5.Poimitaan tulostaulukon rivit (esim. pg_fetch_array()). 6.Sijoitetaan (esim. echo()-funktiolla) poimitut tietoalkiot tulostettavan HTML-koodin sekaan formatoituina. 7.Suljetaan tietokantayhteys. 8.Sivu lähetetään web-palvelimen toimesta selaimelle.

6 4-4-WebTK-Ohj Teuhola 2012310 HTML-koodiesimerkki Hoi Maailma Hello World! What's cooking?

7 4-4-WebTK-Ohj Teuhola 2012311 HTML-taulukon koodausesimerkki Ano Animi Paikka 111 Aho Turku 222 Elo Salo

8 4-4-WebTK-Ohj Teuhola 2012312 XHTML XML-notaatiota soveltava HTML-versio Tiukempi syntaksi, mm. aloitus- ja lopetustagien vastattava toisiaan. Lisää otsikoita – Nimiavaruus (namespace) standardoitu – http://www.w3.org/1999/xhtml [Lähempi tarkastelu sivuutetaan tässä]

9 4-4-WebTK-Ohj Teuhola 2012313 HTML-lomakkeista Vaiheet: 1.Lomakkeen sisältävän sivun (xxx.html, xxx.htm, xxx.php, tms.) nouto 2.Lomakkeen täyttö 3.Lomakkeella olevan painikkeen painaminen 4.Painikkeeseen liittyvän PHP-sivun kutsu (yyy.php). 5.PHP-skriptin suoritus palvelimessa. 6.Skriptin tuottaman HTML-sivun (= painikkeeseen liittyvän vastauksen) siirto selaimelle 7.Sivun näyttö ruudulla.

10 4-4-WebTK-Ohj Teuhola 2012314 HTML-lomake-esimerkki

11 4-4-WebTK-Ohj Teuhola 2012315 Esimerkkilomakkeen koodi (ml. php-kutsu) Lomake tilauksen lisäystä varten Uuden tilauksen lisäys Asiakasnumero Tuotenumero Kappalemäärä

12 4-4-WebTK-Ohj Teuhola 2012316 Lomakkeen elementtityyppejä text = tekstikenttä textarea = isompi tekstialue password = salasanakenttä, syöte kätketään select = valintalista radio = radionappula; ryhmästä vain yksi valitaan submit = lomakkeen lähetyspainike reset = lomakkeen oletusarvojen palautuspainike

13 4-4-WebTK-Ohj Teuhola 2012317 PHP-kielestä Syntaksi lainattu lähinnä C-kielestä; myös oliopiirteitä Tulkattava, heikosti tyypitetty kieli Muuttujat $-alkuisia Dynaamiset taulukot, indeksointi kokonaisluvuilla tai merkkijonoilla (‘assosiatiivinen’ taulukko) Kontrollirakenteet: muistuttavat C-kielen vastaavia, lisäksi esim. taulukon läpikäynti Funktiot: –Operaattorit: aritmeettiset ym.; merkkijonojen katenointi: ‘.’ –Kirjastofunktiot (suuri joukko), esim. merkkijonoille strlen(), strcmp(), split(), join(), str_replace() –Käyttäjän määrittelemät

14 4-4-WebTK-Ohj Teuhola 2012318 HTML-sivun tuottaminen PHP:llä Skriptin standarditulosvirtaan kirjoittamat merkkijonot siirtyvät tulossivulle. Kirjoituskäskyjä: –echo (muotoilematon merkkijono) –printf (muotoiltu merkkijono, vrt. C) Vaihtoehdot: –Skripti tuottaa koko HTML-sivun. –Skripti on upotettu HTML-koodin sekaan ja tuottaa vain lähinnä dynaamiset osat. Skriptin aloitus- ja lopetussymbolit:

15 4-4-WebTK-Ohj Teuhola 2012319 Lomakkeen input-parametrien välitys PHP-skriptille Kaksi vaihtoehtoista metodia: Get: Parametrit koodataan URL-osoitteen yhteyteen (‘?’-merkillä erotettuna) Post: Parametrit siirretään omana pakettinaan (sopii erityisesti isommille tietomäärille). [Ohjelmoijan riittää valita metodi; välitys hoituu automaattisesti.]

16 4-4-WebTK-Ohj Teuhola 2012320 Lomakkeen input-parametrien välitys PHP-skriptille (jatk.) Lomakkeen kentät siirtyvät välitysmetodista riippuen joko PHP-skriptin $_POST[]- tai $_GET[]-taulukkoon; indeksointi kentän nimellä. Esim. HTML-lomakkeella oleva lausejono … … tuottaa PHP-skriptiin ‘HaeTyontek.php’ taulukkoalkion $_POST[‘osasto’], joka saa arvokseen käyttäjän ao. kenttään kirjoittaman osastonumeron.

17 4-4-WebTK-Ohj Teuhola 2012 Istunnon (session) hallinta Sovellus koostuu usein monesta vaiheesta, joista kukin suoritetaan omalla skriptillään. Olisi toivottavaa, että aikaisempien vaiheiden tiedot säilyisivät edelleen. Ongelma: Webissä käytettävä HTTP-protokolla on muistiton. PHP:n ratkaisu: Kuhunkin sessioon liitetään yksikäsitteinen tunniste, joka kulkee automaattisesti evästeenä (cookie) selaimen ja palvelimen välillä. Varsinaiset sessiomuuttujat PHP säilyttää palvelimella taulukossa $_SESSION[] ja niihin pääsee käsiksi saman session aikana, indeksinä muuttujan nimi. 321

18 4-4-WebTK-Ohj Teuhola 2012322 Session hallintaesimerkki: Session aloitus ja kirjautumistietojen tallennus: <?php session_start(); $_SESSION['tunnus']=$_POST['tunnus']; $_SESSION['salasana']=$_POST['salasana']; echo "Sessio aloitettu, kayttaja = ". $_SESSION['tunnus']; ?> Session lopetus: <?php session_start(); $nimi = $_SESSION['tunnus']; session_destroy(); echo "Kayttajan ". $nimi. " istunto lopetettu."; ?>

19 4-4-WebTK-Ohj Teuhola 2012323 PHP ja tietokannat Suora tuki monelle (n. 20) tietokantajärjestelmälle, kuten PostgreSQL, MySQL, IBM DB2, Sybase, ym. ‘Tuki’ tarkoittaa järjestelmäspesifistä (‘natiivia’) funktio- joukkoa, joka mahdollistaa yhteyden muodostamisen tietokantaan, operaatioiden suorittamisen sekä tulosten poimimisen ja hyödyntämisen dynaamisten www-sivujen generoinnissa. Uudemmissa PHP-versioissa on myös yleistetty rajapinta PDO = PHP Data Objects, jossa funktiot ovat riippu- mattomia tietokannasta. Tarvitaan PDO-ajuri (vrt. JDBC).

20 4-4-WebTK-Ohj Teuhola 2012324 PHP:n suora tuki PostgreSQL:lle Tärkeimpiä PostgreSQL-spesifisiä funktioita: pg_connect(): palauttaa ‘yhteysolion’, talletus muuttujaan pg_query(): SQL-kyselyn suoritus pg_num_rows(): tulosrivien määrä pg_fetch_array(): rivin poiminta kyselytuloksesta pg_fetch_result(): tulosalkion poiminta taulukosta pg_free_result(): tilan vapautus

21 4-4-WebTK-Ohj Teuhola 2012325 Esimerkkilomake: osaston työntekijöiden haku Company-tietokannasta Lomake osaston työntekijöiden hakuun Annetun osaston työntekijöiden haku Osastonumero

22 4-4-WebTK-Ohj Teuhola 2012 Esimerkki PHP-skriptistä: Osaston työntekijöiden haku Osaston työntekijät <?php session_start(); // Tarvitaan session jokaisen skriptin alussa // Otetaan yhteys PostgreSQL-tietokantaan ‘company’ $yhteys = "host=localhost port=5432 dbname=company user=“. $_SESSION['tunnus']. " password=". $_SESSION['salasana']; if (!($conn = pg_connect($yhteys))) die( "Ei saatu yhteytta tietokantaan!" ); // Rakennetaan kyselylauseke $kysely = "SELECT ssn, fname, lname FROM employee"; $kysely.= " WHERE dno=". $_POST['osasto']. ";"; if ( !( $tulos = pg_query($conn, $kysely) ) ) die(“Ei onnistu!“); echo " Osaston “. $_POST[‘osasto’]. “ työntekijät "; ?> 326

23 4-4-WebTK-Ohj Teuhola 2012 Esimerkki PHP-skriptistä (jatk.) Ssn Etunimi Sukunimi <?php // Noudetaan tulosjoukon rivit $riveja = pg_num_rows($tulos); for ($i = 0; $i < $riveja; $i++) { // Tulostetaan yksittäiset rivit echo " "; for ($j=0; $j<3; $j++) { echo " "; echo pg_fetch_result($tulos, $i, $j); echo " "; } echo " \n"; } pg_free_result($tulos); pg_close($yhteys); ?> 327

24 4-4-WebTK-Ohj Teuhola 2012328 Syöttöarvot ja tulos

25 4-4-WebTK-Ohj Teuhola 2012329 PostgreSQL-transaktion hallinta PHP:ssä Transaktion aloitus: pg_query($conn, “BEGIN WORK;”); Transaktion vahvistus: pg_query ($conn, “COMMIT;”); Transaktion peruutus: pg_query ($conn, “ROLLBACK;”);

26 4-4-WebTK-Ohj Teuhola 2012330 Tilauksen lisäys Asiakas-Tuote- Tilauskantaan (ks. lomake s. 333) Lomake tilauksen lisäystä varten Uuden tilauksen lisäys Asiakasnumero Tuotenumero Kappalemäärä

27 4-4-WebTK-Ohj Teuhola 2012331 Tilauksen lisäävä PHP-skripti Tilauksen lisäys <?php session_start(); // Muodostetaan yhteys PostgreSQL-kantaan ‘til’. $yhteys = "host=localhost port=5432 dbname=til user=“. $_SESSION['tunnus']. " password=". $_SESSION['salasana']; if (!($conn = pg_connect($yhteys))) die( "Ei saatu yhteytta tietokantaan!" ); // Aloitetaan transaktio pg_query($conn, "BEGIN WORK;");

28 4-4-WebTK-Ohj Teuhola 2012 Tilauksen lisäävä PHP-skripti (jatk.) // Rakennetaan lisäyslause $asno = $_POST['asno']; $tuno = $_POST['tuno']; $kpl = $_POST['kpl']; $pvm = getdate(); // Nykyinen pvm systeemin kellosta $ymd = $pvm['year']. "-". $pvm['mon']. "-". $pvm['mday']; // formulointi $values = $asno. ",". $tuno. ",". $kpl. ",'". $ymd. "'"; // Lomakearvot $lause = "INSERT INTO Tilaus VALUES (". $values. ");"; if ( !( $tulos = pg_query($conn, $lause) ) ) { echo "Lisäys ei onnistunut! "; pg_query($conn, "ROLLBACK;"); } else { echo "Lisatty ". $asno. ", ". $tuno. ", ". $kpl. ", ". $ymd; pg_query($conn, "COMMIT;"); } ?> 332

29 4-4-WebTK-Ohj Teuhola 2012333 Lisäyslomake ja palvelimen vastaus

30 4-4-WebTK-Ohj Teuhola 2012 PostgreSQL-lauseiden esiprosessointi ja parametrisointi PHP:llä: Esimerkki <?php session_start(); // Yhteys til-tietokantaan $yhteys = … ; if (!($conn = pg_connect($yhteys))) die( "Ei saatu yhteytta tietokantaan!" ); // Esiprosessointi; asiakasnimen parametrisointi $tulos = pg_prepare($conn, “as-haku", “SELECT * FROM Asiakas WHERE Animi = $1”); // Valmistellun kyselyn suoritus parametrilla “Aalto”. $tulos = pg_execute($conn, “as-haku", array(“Aalto")); // Saman valmistellun kyselyn suoritus eri parametrilla $tulos = pg_execute($conn, “as-haku", array(“Laine")); ?> 334

31 4-4-WebTK-Ohj Teuhola 2012335 PHP Data Objects (PDO) PDO on tietokantajärjestelmästä riippumaton luokkakirjasto (vrt. JDBC), mukana PHP5:stä lähtien, ks. http://fi.php.net/pdo.http://fi.php.net/pdo Vaatii ajurin, esim. PDO_PGSQL (PostgreSQL). Yhteyden luonti: new PDO(tietokanta, tunnus, salasana) PDO-funktioita mm. beginTransaction(), query(), exec(), commit(), rollback(). Muita luokkia: PDOStatement, PDOException.

32 4-4-WebTK-Ohj Teuhola 2012336 PDO vs. järjestelmäkohtaiset tietokantafunktiot PostgreSQL: $conn = pg_connect( … ); $result = pg_query($conn, $sql_lause); MySQL: $conn = mysql_connect( … ); $result = mysql_query($sql_lause); PDO – soveltuu molempiin järjestelmiin: $conn = new PDO( … ); $st_handle = $conn->query($sql_lause);

33 4-4-WebTK-Ohj Teuhola 2012337 PHP-editoreista PHP-skriptit voidaan kirjoittaa millä tahansa tekstieditorilla, mutta syntaksintarkistus ja testaus ovat ongelma, koska Web-palvelimen PHP-tulkki ei useinkaan anna mitään selitystä virheen syystä tai sijainnista. PHP-syntaksin tunnistavia editoreita on tarjolla lukuisa joukko, samoin integroituja kehitys- ympäristöjä (IDE). Esim. ilmainen PHP Coder, ks. (http://www.phpide.de/).http://www.phpide.de/

34 4-4-WebTK-Ohj Teuhola 2012338 Yhteenveto Huomattava osa tietokantojen käyttöliittymistä tehdään nykyisin web-selainpohjaisina. Sovelluslogiikka koodataan palvelinpuolen skripteillä, jotka tuottavat dynaamisia HTML- sivuja. PHP:llä on vahva asema skriptikielten joukossa; siitä löytyy sekä yleinen tietokantarajapinta että erityistuki monille tietokantajärjestelmille.

35 4-4-WebTK-Ohj Teuhola 2012339 Loppuyhteenveto kurssista Käytännön tietokantatyöskentelyn kannalta kurssin keskeisiä asioita olivat: –Relaatio-operaatiot ja niiden tehokkuus –Käsitetason suunnittelu ja konversio relaatioiksi –Relaatioiden laaduntarkistus, eli redundanssin minimointi ja päivitysongelmien eliminointi –Tiedosto-organisaatioiden ja hakemistojen merkitys tehokkuutta ajatellen –Tietokantasovellusten kehittäminen ohjelmointikielen tasolla ja siihen liittyvät rajapinnat –Web-tietokantojen sovellusten erityispiirteet Hyvää kesää!


Lataa ppt "4-4-WebTK-Ohj Teuhola 2012305 4.4. Web-tietokantaohjelmointi Www-sivut olivat alunperin staattisia, ts. palvelin ylläpiti HTML-kielisiä dokumentteja ja."

Samankaltaiset esitykset


Iklan oleh Google