4 4 web tietokantaohjelmointi
This presentation is the property of its rightful owner.
Sponsored Links
1 / 35

4.4. Web-tietokantaohjelmointi PowerPoint PPT Presentation


  • 70 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

4.4. Web-tietokantaohjelmointi

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


  • Login