PHP osa 1 Verkkotekniikan jatkokurssi Kevt 2003 Ville

  • Slides: 35
Download presentation
PHP osa 1 Verkkotekniikan jatkokurssi Kevät 2003 Ville Seppänen (rissepp@cc. jyu. fi) 1

PHP osa 1 Verkkotekniikan jatkokurssi Kevät 2003 Ville Seppänen (rissepp@cc. jyu. fi) 1

Sisältö 1. 2. 3. 4. 5. 6. 7. 8. Yleistä Skriptien kirjoittaminen Muuttujista Operaattoreista

Sisältö 1. 2. 3. 4. 5. 6. 7. 8. Yleistä Skriptien kirjoittaminen Muuttujista Operaattoreista Funktioiden määrittely ja käyttäminen include ja require Kontrollirakenteista Taulukoista Ville Seppänen (rissepp@cc. jyu. fi) 2

PHP: n käyttötilasto helmikuu 03 Ville Seppänen (rissepp@cc. jyu. fi) 3

PHP: n käyttötilasto helmikuu 03 Ville Seppänen (rissepp@cc. jyu. fi) 3

Yleistä (1) • Alkoi 1994 yhden miehen, Rasmus Lerdorfin, projektina Personal Home Page •

Yleistä (1) • Alkoi 1994 yhden miehen, Rasmus Lerdorfin, projektina Personal Home Page • Nykyisin useita kehittäjiä, vapaa Open Source projekti, nimi muuttunut muotoon PHP Hypertext Preprocessor • Viimeisin versio 4. 3. 1 (www. php. net) • Kehityksessä oleva versio 5 tulee muuttamaan PHP: n enemmän oliokielen suuntaan Ville Seppänen (rissepp@cc. jyu. fi) 4

Yleistä (2) • ‘Serverside HTML-embedded scripting language’ • PHP-skripti kirjoitetaan tavallisesti HTML-koodin sekaan •

Yleistä (2) • ‘Serverside HTML-embedded scripting language’ • PHP-skripti kirjoitetaan tavallisesti HTML-koodin sekaan • Asiakkaan pyytäessä skriptiä sisältävää dokumenttia palvelimelta, palvelin suorittaa dokumenttiin upotetun koodin • ja (tavallisesti) palauttaa vastauksena staattisen HTMLdokumentin • HTTP ja HTML asettavat tiettyjä rajoituksia • Suunniteltu web-käytöön • Paljon valmiita funktioita yleisiin käyttötarkoituksiin; esim. grafiikan ja PDF-dokumenttien generointi, sähköpostin lähettäminen, cookieiden käsittely, yhteydet muihin verkkopalveluihin ja erilaisiin tietokantoihin jne. Ville Seppänen (rissepp@cc. jyu. fi) 5

Yleistä (3) • Syntaksi perustuu muihin ohjelmointikieliin, pääasiassa C: hen ja Perliin. Piirteitä myös

Yleistä (3) • Syntaksi perustuu muihin ohjelmointikieliin, pääasiassa C: hen ja Perliin. Piirteitä myös C++: sta ja Javasta. Mahdollista kirjoittaa oliotyyliin. • Siirrettävää: koodi toimii ilman muutoksia tai pienin muutoksin (hakemistoviittaukset jne. ) erilaisilla alustoilla (vapaat ja kaupalliset Unixit, Windowsit jne. ) sekä lukuisissa WWW-palvelimissa laajennusmodulien avulla, esim. Apache ja MS IIS Ville Seppänen (rissepp@cc. jyu. fi) 6

Yleistä (4) • Verrattaessa ‘kilpailijoihinsa’ (esim. Perl, ASP, JSP, Cold Fusion) PHP: n vahvuuksia

Yleistä (4) • Verrattaessa ‘kilpailijoihinsa’ (esim. Perl, ASP, JSP, Cold Fusion) PHP: n vahvuuksia ovat: • Suorituskyky • Liittymä useille tietokannoille • Sisäänrakennetut kirjastot yleisille web-sovelluksiin liittyville tehtäville • Edullinen ( ilmainen) • Helppo oppia ja käyttää • Siirrettävyys • Lähdekoodin saatavuus (Welling & Thomson, 2001) • Koodin pituus PHP: lla toteutettuna on tyypillisesti vain murto-osan esim. vastaavasta Perl-koodista Ville Seppänen (rissepp@cc. jyu. fi) 7

Skriptin kirjoittaminen (1) • Palvelin tunnistaa PHP-skriptiä sisältävät tiedostonimen päätteen perusteella, yleensä. php, .

Skriptin kirjoittaminen (1) • Palvelin tunnistaa PHP-skriptiä sisältävät tiedostonimen päätteen perusteella, yleensä. php, . php 3, . php 4 tai. phtml (hyväksytyt päätteet riippuvat palvelimen asetuksista) • PHP-skriptit kirjoitetaan <? ? > tai <? php ? > merkkiparien sisälle (suosi jälkimmäistä muotoa) Ville Seppänen (rissepp@cc. jyu. fi) 8

Skriptin kirjoittaminen (2) <html> <head> <title>Päiväys<title> </head> <body> <p> <? php // PHP-koodi alkaa

Skriptin kirjoittaminen (2) <html> <head> <title>Päiväys<title> </head> <body> <p> <? php // PHP-koodi alkaa echo “Tänään on: “; echo time(“d-m-Y”); ? > // PHP-koodi loppuu </p> </body> </html> Ville Seppänen (rissepp@cc. jyu. fi) 9

Skriptin kirjoittaminen (3) <? php $my. String = ‘Hello, world!’; ? > <h 1>

Skriptin kirjoittaminen (3) <? php $my. String = ‘Hello, world!’; ? > <h 1> <? php echo $my. String; ? > </h 1> <? php $my. String = ‘Hello, world!’; echo “<h 1>$my. String</h 1>”; ? > <? php $my. String = ‘Hello, world!’; echo “<h 1>”. $my. String. ”</h 1>”; ? > <? php echo “<h 1 class=”iso”>Iso otsikko</h 1>”; echo “<h 1 class=‘iso’>Toinen iso otsikko</h 1>”; ? > <for method=“get” action=“<? php echo $PHP_SELF ? >”> Ville Seppänen (rissepp@cc. jyu. fi) 10

Skriptien kirjoittaminen (4) • PHP-sovellus voidaan kirjoittaa kokonaisuudessaan yhteen tiedostoon tai se voidaan pilkkoa

Skriptien kirjoittaminen (4) • PHP-sovellus voidaan kirjoittaa kokonaisuudessaan yhteen tiedostoon tai se voidaan pilkkoa loogisesti erillisiin skripteihin if($page==‘kirjoita’) { /* kirjoittamiseen liittyviä juttuja */ } else if($page==‘lue’) { /* lukemiseen liittyviä juttuja */ } else { /* jotain muuta */ } Ville Seppänen (rissepp@cc. jyu. fi) index. php kirjoita. php lue. php 11

Muuttujista (1) • PHP: ssa muuttujia ei tarvitse julistaa. Muuttuja luodaan, kun sille asetetaan

Muuttujista (1) • PHP: ssa muuttujia ei tarvitse julistaa. Muuttuja luodaan, kun sille asetetaan arvo, ja muuttujan tyyppi määräytyy automaattisesti arvon tyypin mukaan $my. Interger = 1; $my. String = “Hello, world!”; $my. Array = array(“Hello”, “world!”); echo Ville Seppänen (rissepp@cc. jyu. fi) gettype($my. Integer); // integer gettype($my. String); // string gettype($my. Array); // string 12

Muuttujista (3) • Muuttujien arvoja voidaan välittää skripteille GET tai POST-kutsujen mukana • Muuttujien

Muuttujista (3) • Muuttujien arvoja voidaan välittää skripteille GET tai POST-kutsujen mukana • Muuttujien siirtäminen URLissa (GET-metodi) http: //www. palvelin. net? sivu=etusivu&kieli=suomi muuttuja arvo • POST lähettää datan HTTP-kutsun mukana, mutta sitä ei siirretä osana URLia Ei GETin fyysistä pituusrajoitusta ja mahdollistaa multipart/form-data enkoodauksen. Ville Seppänen (rissepp@cc. jyu. fi) 13

Muuttujista (2) • PHP: n tietotyypit • • • Boolean (PHP 4), kaksiarvoinen Integer,

Muuttujista (2) • PHP: n tietotyypit • • • Boolean (PHP 4), kaksiarvoinen Integer, kokonaisluku Float, liukuluku String, merkkijono Array, taulukko Object • Luokan ilmentymä oliokoodissa • Resource (PHP 4) • Sisältää viittauksen ulkoiseen resurssiin. Resurssit luodaan ja niitä käsitellään määrätyillä funktioilla (esim. tietokantakyselyn suorittava funktio ja sen palauttama resurssimuuttuja) Ville Seppänen (rissepp@cc. jyu. fi) 14

Vertailu- ja loogiset operaattorit • PHP: n vertailuoperaattorit: • • == equals (sama arvo)

Vertailu- ja loogiset operaattorit • PHP: n vertailuoperaattorit: • • == equals (sama arvo) === identical (sama arvo ja sama tietotyyppi) != not equal <> not equal < less than > greater than <= less than or equal to >= greater than or equal to • PHP: n loogiset operaattorit: • • • ! NOT && AND | | OR Ville Seppänen (rissepp@cc. jyu. fi) 15

Muita operaattoreita • Ternary operaattori Yleinen muoto: condition ? value if true : value

Muita operaattoreita • Ternary operaattori Yleinen muoto: condition ? value if true : value if false Esim: $answer = ($color == “red” ? “Color is red” : “Color is not red”); • Error suppression operaattori $a = @(57/0); • Execution operaattori $out = ‘ls -la’; echo “<pre>”. $out. ”</pre>”; Ville Seppänen (rissepp@cc. jyu. fi) 16

Funktiot (1) • Funktioiden nimeäminen ja määrittely • • Nimissä sallitaan kirjain- ja numeromerkit,

Funktiot (1) • Funktioiden nimeäminen ja määrittely • • Nimissä sallitaan kirjain- ja numeromerkit, sekä alaviiva Nimi ei saa alkaa numerolla Nimi ei saa olla varattu sana Nimi ei saa olla valmiin funktion nimi // funktion määrittely function oma. Funktio() { echo “Moro!”; } // funktion kutsu oma. Funktio(); Ville Seppänen (rissepp@cc. jyu. fi) 17

Funktiot (2) • Esimerkkejä funktion kutsumisesta: oma. Funktio(); // kutsutaan ilman parametreja oma. Funktio(“iso”);

Funktiot (2) • Esimerkkejä funktion kutsumisesta: oma. Funktio(); // kutsutaan ilman parametreja oma. Funktio(“iso”); // string-parametrilla oma. Funktio(15. 23); // float-parametrilla oma. Funktio($muuttuja); // muuttujaparametrilla oma. Funktio($muuttuja, “iso”); // muuuttuja- ja string-param. // funktio vaatii parametrin: function oma. Funktio($koko) { echo “Koko on $koko. ”; } oma. Funktio(“iso”); // tulostaa: Koko on iso. Ville Seppänen (rissepp@cc. jyu. fi) 18

Funktiot (3) • Parametreille voidaan antaa arvo funktion määrittelyssä. Tällöin niille ei funktiota kutsuttaessa

Funktiot (3) • Parametreille voidaan antaa arvo funktion määrittelyssä. Tällöin niille ei funktiota kutsuttaessa vaadita arvoa. pakollinen optionaalinen function oma. Funktio($muoto, $koko = “iso”) { echo “Muoto on $muoto ja koko on $koko. ”; } oma. Funktio(); // warning: missing oma. Funktio(“soikea”); // Muoto on oma. Funktio(“soikea”, “pieni”); // Ville Seppänen (rissepp@cc. jyu. fi) argument soikea ja koko on iso. Muoto on soikea ja koko on pieni. 19

Funktiot (4) • Muuttujien vaikutusalue (scope) • Funktion sisällä määritellyt muuttujat ovat voimassa vain

Funktiot (4) • Muuttujien vaikutusalue (scope) • Funktion sisällä määritellyt muuttujat ovat voimassa vain ko. funktion sisällä (local variables) • Funktion ulkopuolella määritellyt muuttujat eivät ole voimassa funktioiden sisällä (global variables) • Avainsana global pakottaa muuttujan globaaliksi, vaikka se määriteltäisiin funktion sisällä • include() ja require() eivät vaikuta muuttujan vaikutusalueeseen Ville Seppänen (rissepp@cc. jyu. fi) 20

Funktiot (5), esim. vaikutusalueista function oma. Funktio() { $muuttuja = “foo”; } echo $muuttuja;

Funktiot (5), esim. vaikutusalueista function oma. Funktio() { $muuttuja = “foo”; } echo $muuttuja; // ei tulostetta function oma. Funktio() { echo “Funktion sisällä, $muuttuja = “bar”; echo “Funktion sisällä, $muuttuja = } $muuttuja = “foo”; oma. Funktio(); Echo “Funktion ulkopuolella, $muuttuja “. $muuttuja. ” ”; = “. $muuttuja. ” ”; Tuloste: Funktion sisällä, $muuttuja = bar Funktion ulkopuolella, $muuttuja = foo Ville Seppänen (rissepp@cc. jyu. fi) 21

Funktiot (6) • Esimerkki globalin käytöstä: function oma. Funktio() { global $muuttuja; $muuttuja =

Funktiot (6) • Esimerkki globalin käytöstä: function oma. Funktio() { global $muuttuja; $muuttuja = “foo”; echo “Funktion sisällä, $muuttuja = “. $muuttuja. ” ”; } oma. Funktio(); echo “Funktion ulkopuolella, $muuttuja = “. $muuttuja. ” ”; Tuloste: Funktion sisällä, $muuttuja = foo Funktion ulkopuolella, $muuttuja = foo Ville Seppänen (rissepp@cc. jyu. fi) 22

Funktiot (7) • Muuttuja voidaan välittää • Pass by referencen käyttö funktiolle käyttämällä sen

Funktiot (7) • Muuttuja voidaan välittää • Pass by referencen käyttö funktiolle käyttämällä sen määritellään kirjoittamalla arvoa (pass by value) tai parametrin eteen &-merkki: viittausta alkuperäiseen muuttujaan (pass by reference) function kertaa 10(&$luku) • Pass by value: ta käytettäessä { $luku = ($luku * 10); muuttujan globaali arvo ei } $luku = 10; muutu: function kertaa 10($luku) { $luku = ($luku * 10); } $luku = 10; kertaa 10($luku); echo $luku; // tulostaa 10 Ville Seppänen (rissepp@cc. jyu. fi) kertaa 10($luku); echo $luku; // tuloste 100 23

Funktiot (8) • Arvojen palauttaminen • Avainsana return lopettaa funktion suorittamisen ja ohjelman suorittamista

Funktiot (8) • Arvojen palauttaminen • Avainsana return lopettaa funktion suorittamisen ja ohjelman suorittamista jatketaan funktion kutsua seuraavasta lauseesta • returnia voidaan käyttää myös arvojen palauttamiseen funktiosta. • Ehdollinen arvon palauttaminen: Ville Seppänen (rissepp@cc. jyu. fi) function random($min = 1, $max = 100) { $random = rand($min, $max); return($random); } $satunnainen = random(); $iso_satunnainen = random(1000, 10000); function tausta. Vari($rivinumero) { if(($rivinumero % 2) == 0) return(“silver”); else return(“gray”); } 24

include ja require (1) • includen käyttö helpottaa koodin hallintaa, jäsentämistä ja vähentää redundanssia

include ja require (1) • includen käyttö helpottaa koodin hallintaa, jäsentämistä ja vähentää redundanssia • Usein tarvittavat koodinpätkät (esim. tietokantayhteyden muodostaminen) • Kirjastot • Teksti ja HTML-koodi (esim. heading, footer, layout, …) • require toimii includen tavoin, mutta liitettävän tiedoston puuttuminen keskeyttää koodin suorituksen, kun taas include ainoastaan tulostaa varoituksen Ville Seppänen (rissepp@cc. jyu. fi) 25

include ja require (2) • require_once toimii requiren tavoin, mutta liittäminen tehdään ainoastaan mikäli

include ja require (2) • require_once toimii requiren tavoin, mutta liittäminen tehdään ainoastaan mikäli sitä ei ole aiemmin tehty. <? php // avaataan tietokantayhteys - db. inc $db = mysql_connect(“localhost”, “sqluser”, “sqlpassword”); if(!$db) echo “Cannot connect to database”; else mysql_select_db(“mydb”); ? > <? php include(“. /includes/db. inc”); ? > Ville Seppänen (rissepp@cc. jyu. fi) 26

include ja require (3) • Jos liitettävä tiedosto sisältää PHP-koodia, koodi tulee kirjoittaa PHP-tagien

include ja require (3) • Jos liitettävä tiedosto sisältää PHP-koodia, koodi tulee kirjoittaa PHP-tagien sisälle. Muutoin koodia ei suoritetaan vaan se liitetään mukaan tekstinä. • Liitettäviä tiedostoja nimettäessä tulee käyttää ainoastaan loppupäätteitä, jotka WWW-palvelin käsittelee PHP-skripteinä. Muutoin tiedoston sisältö esitetään selaimessa tekstinä. Ville Seppänen (rissepp@cc. jyu. fi) 27

Kontrollirakenteista (1) • if, else if ja else • Jos if-ehto on tosi, sitä

Kontrollirakenteista (1) • if, else if ja else • Jos if-ehto on tosi, sitä seuraava koodi(blokki) suoritetaan • Muussa tapauksessa, jos else if-ehto on tosi, sitä seuraava koodi(blokki) suoritetaan • Muussa tapauksessa, else: ä seuraava koodi(blokki) suoritetaan if($i == 10) { echo “$i on 10”; } else if($i == 5) { echo “$i on 5”; } else { echo “i$ on jotain muuta kuin 5 tai 10”; } Ville Seppänen (rissepp@cc. jyu. fi) 28

Kontrollirakenteista (2) • Ehtovertailuesimerkkejä: if($i < 10 || $i > 20) // OR if($a

Kontrollirakenteista (2) • Ehtovertailuesimerkkejä: if($i < 10 || $i > 20) // OR if($a == TRUE && $b == FALSE) // AND if(!$login) // NOT if(!isset($login)) // NOT • switch ja case: switch($i) { case “ 10” : echo “$i on 10”; break; case “ 5” : echo “$i on 5”; break; } Ville Seppänen (rissepp@cc. jyu. fi) 29

Kontrollirakenteista (3) • while ja do while ($i <= 10) { echo “$i ”;

Kontrollirakenteista (3) • while ja do while ($i <= 10) { echo “$i ”; $i++; } /* -------------- */ $i = 11; do { echo “$i ”; $i+ } while ($i <= 10); • do while-rakenteessa ehto tarkistetaan lopussa, joten silmukka suoritetaan aina vähintään kerran Ville Seppänen (rissepp@cc. jyu. fi) 30

Kontrollirakenteista (4) • for // testataan ehtoa $i <= 10. Kun epätosi, suorittaminen loppuu

Kontrollirakenteista (4) • for // testataan ehtoa $i <= 10. Kun epätosi, suorittaminen loppuu for($i = 1; $i <= 10; $i++) { echo “$i ”; } • Kontrollirakenteiden suorittaminen voidaan lopettaa milloin vain exit: llä • Lisää: http: //www. php. net/manual/en/control-structures. php Ville Seppänen (rissepp@cc. jyu. fi) 31

Taulukot [array] (1) • Yksi tai useampi ulotteinen joukko tunniste (index tai key) –

Taulukot [array] (1) • Yksi tai useampi ulotteinen joukko tunniste (index tai key) – arvo (value) -pareja • Tunniste voi olla joko kokonaisluku tai merkkijono • Arvo voi olla mikä tahansa, myös toinen array (moniuloitteiset taulukot) • Demojen puitteissa taulukoihin törmätään ainakin lomakkeita ja tietokantakyselyn tuloksia käsiteltäessä Ville Seppänen (rissepp@cc. jyu. fi) 32

Taulukot (2) <form action="kasittelija. php" method="get"> Nimi: <input type="text" name="nimi" size="30” /> Email: <input

Taulukot (2) <form action="kasittelija. php" method="get"> Nimi: <input type="text" name="nimi" size="30” /> Email: <input type="text" name="email" size="30” /> Viesti: <textarea name="viesti" rows="3" cols="25”/></textarea> <input type="submit" name="submit" value="Lä hetä ” /> </form> print_r($_GET); // kasittelija. php Tuloste: $_GET-muuttujan (array) sisältö Viittaaminen yksittäiseen elementtiin: $_GET[nimi]; Array( [nimi] => Santa Claus [email] => joulupukki@korvatunturi. fi [viesti] => Hyvää joulua! [submit] => Lähetä ) Ville Seppänen (rissepp@cc. jyu. fi) 33

Taulukot (3) • Taulukon muodostaminen: $my. Array = array(“Santa”, “Ho ho ho!”); // tunnisteet

Taulukot (3) • Taulukon muodostaminen: $my. Array = array(“Santa”, “Ho ho ho!”); // tunnisteet asetetaan automaattisesti kokonaislukuina nollasta alkaen $my. Array = array(nimi => “Santa”, viesti => “Ho ho ho!”); // tunnisteet $my. Array[nimi] ja $my. Array[viesti] • Suoraan arvot asettamalla: $my. Array[0] = “Santa”; $my. Array[1] = “Ho ho ho!”; $my. Array[nimi] = “Santa”; $my. Array[viesti] = “Ho ho ho!”; Ville Seppänen (rissepp@cc. jyu. fi) 34

Taulukot (4) • Taulukoiden käsitteleminen • Numeeriset tunnisteet mahdollistavat taulukon käsittelemisen esim. for-silmukassa for($i

Taulukot (4) • Taulukoiden käsitteleminen • Numeeriset tunnisteet mahdollistavat taulukon käsittelemisen esim. for-silmukassa for($i = 0; $i < count($my. Array)-1; $i++) echo “$my. Array[$i] ”; • list ja each while (list($tunniste, $arvo) = each($my. Array)) echo “$tunniste - $arvo ”; • foreach($my. Array as $tunniste => $arvo) echo “$tunniste - $arvo ”; • Lue lisää: http: //www. php. net/manual/en/ref. array. php Ville Seppänen (rissepp@cc. jyu. fi) 35