4 4 web tietokantaohjelmointi
Download
Skip this Video
Download Presentation
4.4. Web-tietokantaohjelmointi

Loading in 2 Seconds...

play fullscreen
1 / 35

4.4. Web-tietokantaohjelmointi - PowerPoint PPT Presentation


  • 91 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 4.4. Web-tietokantaohjelmointi' - aya


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
4 4 web tietokantaohjelmointi
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).

4-4-WebTK-Ohj Teuhola 2012

dynaamisten sivujen toteutusvaihtoehdot
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’)

4-4-WebTK-Ohj Teuhola 2012

php skriptin idea
PHP-skriptin idea
  • Selain kutsuu PHP-skriptiä kuten muitakin sivuja (esim. http://kanta.cs.utu.fi/php.php) ja syöttää (tarvittaessa) parametritietoja.
  • 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-WebTK-Ohj Teuhola 2012

php t k ytt v n web tietokanta sovelluksen kolmitasoarkkitehtuuri

Asiakkaan

käyttöliittymä(www-lomake)

Web-selain

HTTP

Web-palvelin

Sovelluslogiikka

(php-skripti)

PHP-tulkki+

tietokantafunktiot

TKHJ

Tietokanta-

palvelin

Tietokanta

PHP:tä käyttävän web-tietokanta-sovelluksen kolmitasoarkkitehtuuri

4-4-WebTK-Ohj Teuhola 2012

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

4-4-WebTK-Ohj Teuhola 2012

html koodiesimerkki
<HTML>

<HEAD>

<TITLE> Hoi Maailma </TITLE>

</HEAD>

<BODY>

<H1>Hello World!</H1>

What\'s cooking?

</BODY>

</HTML>

HTML-koodiesimerkki

4-4-WebTK-Ohj Teuhola 2012

html taulukon koodausesimerkki
<TABLE border=1>

<TR>

<TD><B>Ano</B></TD>

<TD><B>Animi</B></TD>

<TD><B>Paikka</B></TD>

</TR>

<TR>

<TD>111</TD>

<TD>Aho</TD>

<TD>Turku</TD>

</TR>

<TR>

<TD>222</TD>

<TD>Elo</TD>

<TD>Salo</TD>

</TR>

</TABLE>

HTML-taulukon koodausesimerkki

4-4-WebTK-Ohj Teuhola 2012

xhtml
XHTML
  • XML-notaatiota soveltava HTML-versio
  • Tiukempi syntaksi, mm. aloitus- ja lopetustagien vastattava toisiaan.
  • Lisää otsikoita
    • <?xml version=“1.0”?>
    • <!DOCTYPE html PUBLIC …>
  • Nimiavaruus (namespace) standardoitu
    • <html xmlns=http://www.w3.org/1999/xhtml>
  • [Lähempi tarkastelu sivuutetaan tässä]

4-4-WebTK-Ohj Teuhola 2012

html lomakkeista
HTML-lomakkeista

Vaiheet:

  • Lomakkeen sisältävän sivun (xxx.html, xxx.htm, xxx.php, tms.) nouto
  • Lomakkeen täyttö
  • Lomakkeella olevan painikkeen painaminen
  • Painikkeeseen liittyvän PHP-sivun kutsu (yyy.php).
  • PHP-skriptin suoritus palvelimessa.
  • Skriptin tuottaman HTML-sivun (= painikkeeseen liittyvän vastauksen) siirto selaimelle
  • Sivun näyttö ruudulla.

4-4-WebTK-Ohj Teuhola 2012

html lomake esimerkki
HTML-lomake-esimerkki

4-4-WebTK-Ohj Teuhola 2012

esimerkkilomakkeen koodi ml php kutsu
Esimerkkilomakkeen koodi (ml. php-kutsu)

<html>

<head>

<title>Lomake tilauksen lisäystä varten</title>

</head>

<body>

<h3>Uuden tilauksen lisäys</h3>

<form method="post" action="LisaaTilaus.php">

<input type="text" size="5" name= "asno"/> Asiakasnumero <br/><br/>

<input type="text" size="5" name= "tuno"/> Tuotenumero <br/><br/>

<input type="text" size="5" name= "kpl"/> Kappalemäärä <br/><br/>

<input type="submit" value="Lisää"/>

</form>

</body>

</html>

4-4-WebTK-Ohj Teuhola 2012

lomakkeen elementtityyppej
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

4-4-WebTK-Ohj Teuhola 2012

php kielest
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

4-4-WebTK-Ohj Teuhola 2012

html sivun tuottaminen php ll
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: <?php … ?>

4-4-WebTK-Ohj Teuhola 2012

lomakkeen input parametrien v litys php skriptille
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.]

4-4-WebTK-Ohj Teuhola 2012

lomakkeen input parametrien v litys php skriptille jatk
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 <form method="post" action="HaeTyontek.php"> … <input type="text" size="5" name="osasto“ /> … </form>tuottaa PHP-skriptiin ‘HaeTyontek.php’ taulukkoalkion $_POST[‘osasto’], joka saa arvokseen käyttäjän ao. kenttään kirjoittaman osastonumeron.

4-4-WebTK-Ohj Teuhola 2012

istunnon session hallinta
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.

4-4-WebTK-Ohj Teuhola 2012

session hallintaesimerkki
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.";

?>

4-4-WebTK-Ohj Teuhola 2012

php ja tietokannat
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).

4-4-WebTK-Ohj Teuhola 2012

php n suora tuki postgresql lle
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

4-4-WebTK-Ohj Teuhola 2012

esimerkkilomake osaston ty ntekij iden haku company tietokannasta
Esimerkkilomake: osaston työntekijöiden haku Company-tietokannasta

<html>

<head>

<title>Lomake osaston työntekijöiden

hakuun</title>

</head>

<body>

<h3>Annetun osaston työntekijöiden haku</h3>

<form method="post“ action="HaeTyontek.php">

<input type="text" size="5“ name="osasto"/>

Osastonumero <br/><br/>

<input type="submit" value="Suorita"/>

</form>

</body>

</html>

4-4-WebTK-Ohj Teuhola 2012

esimerkki php skriptist osaston ty ntekij iden haku
Esimerkki PHP-skriptistä: Osaston työntekijöiden haku

<!-- Lomakkeella annetun osaston työntekijöiden tulostus -->

<html>

<head> <title>Osaston työntekijät</title> </head>

<body>

<?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 "<h3>Osaston “ . $_POST[‘osasto’] . “ työntekijät </h3>";

?>

4-4-WebTK-Ohj Teuhola 2012

esimerkki php skriptist jatk
Esimerkki PHP-skriptistä (jatk.)

<!-- Tulostaulukon muodostus ja otsikointi -->

<table border = "1">

<tr> <td><b>Ssn</b></td> <td><b>Etunimi</b></td> <td><b>Sukunimi<b></td> </tr>

<?php

// Noudetaan tulosjoukon rivit

$riveja = pg_num_rows($tulos);

for ($i = 0; $i < $riveja; $i++) { // Tulostetaan yksittäiset rivit

echo "<tr>";

for ($j=0; $j<3; $j++) {

echo "<td>"; echo pg_fetch_result($tulos, $i, $j); echo "</td>";

}

echo "</tr>\n";

}

pg_free_result($tulos); pg_close($yhteys);

?>

</table>

</body>

</html>

4-4-WebTK-Ohj Teuhola 2012

sy tt arvot ja tulos
Syöttöarvot ja tulos

4-4-WebTK-Ohj Teuhola 2012

postgresql transaktion hallinta php ss
PostgreSQL-transaktion hallinta PHP:ssä
  • Transaktion aloitus:pg_query($conn, “BEGIN WORK;”);
  • Transaktion vahvistus:pg_query ($conn, “COMMIT;”);
  • Transaktion peruutus:pg_query ($conn, “ROLLBACK;”);

4-4-WebTK-Ohj Teuhola 2012

tilauksen lis ys asiakas tuote tilauskantaan ks lomake s 333
Tilauksen lisäys Asiakas-Tuote-Tilauskantaan (ks. lomake s. 333)

<html>

<head> <title>Lomake tilauksen lisäystä varten</title> </head>

<body>

<h3>Uuden tilauksen lisäys</h3>

<form method="post" action="LisaaTilaus.php">

<input type="text" size="5" name= "asno"/> Asiakasnumero <br/><br/>

<input type="text" size="5" name= "tuno"/> Tuotenumero <br/><br/>

<input type="text" size="5" name= "kpl"/> Kappalemäärä <br/><br/>

<input type="submit" value="Lisää"/>

</form>

</body>

</html>

4-4-WebTK-Ohj Teuhola 2012

tilauksen lis v php skripti
Tilauksen lisäävä PHP-skripti

<!-- LisaaTilaus.php -->

<!-- Lomakkeella annetun tilauksen lisäys til-kantaan-->

<html>

<head> <title>Tilauksen lisäys</title> </head>

<body>

<?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;");

4-4-WebTK-Ohj Teuhola 2012

tilauksen lis v php skripti jatk
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! <br />";

pg_query($conn, "ROLLBACK;");

}

else { echo "Lisatty " . $asno . ", " . $tuno . ", " . $kpl . ", " . $ymd;

pg_query($conn, "COMMIT;");

}

?>

</body>

</html>

4-4-WebTK-Ohj Teuhola 2012

lis yslomake ja palvelimen vastaus
Lisäyslomake ja palvelimen vastaus

4-4-WebTK-Ohj Teuhola 2012

postgresql lauseiden esiprosessointi ja parametrisointi php ll esimerkki
PostgreSQL-lauseiden esiprosessointi ja parametrisointi PHP:llä: Esimerkki

<?phpsession_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"));

?>

4-4-WebTK-Ohj Teuhola 2012

php data objects pdo
PHP Data Objects (PDO)
  • PDO on tietokantajärjestelmästä riippumaton luokkakirjasto (vrt. JDBC), mukana PHP5:stä lähtien, ks. 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.

4-4-WebTK-Ohj Teuhola 2012

pdo vs j rjestelm kohtaiset tietokantafunktiot
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);

4-4-WebTK-Ohj Teuhola 2012

php editoreista
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/).

4-4-WebTK-Ohj Teuhola 2012

yhteenveto
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.

4-4-WebTK-Ohj Teuhola 2012

loppuyhteenveto kurssista
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-tietokantojensovellusten erityispiirteet

Hyvää kesää!

4-4-WebTK-Ohj Teuhola 2012

ad