29
PHP PHP: Hypertext Preprocessor 2008/2009 Zoltan SEP, univ. dipl. inž rač. in inf. Šolski center Ptuj Elektro in računalniška šola Volkmerjeva cesta 19 2250 Ptuj Slovenija (+386 (0)2 7871 800 2 +386 (0)2 7871 711 www.scptuj.si [email protected]

Kratki uvod u PHP na slovenskom

Embed Size (px)

DESCRIPTION

Kratki uvod u jezik PHP na slovenskom jeziku.

Citation preview

Page 1: Kratki uvod u PHP na slovenskom

P H PPHP: Hypertext Preprocessor

2008/2009

Zoltan SEP, univ. dipl. inž rač. in inf.

Šolski center PtujElektro in računalniška šolaVolkmerjeva cesta 192250 PtujSlovenija

(+386 (0)2 7871 8002 +386 (0)2 7871 [email protected]

Page 2: Kratki uvod u PHP na slovenskom

KAZALO

1 PHP...................................................................................................................................................................31.1 Uvod.........................................................................................................................................................3

1.1.1 Ubežne kode....................................................................................................................................31.1.2 Izpisi na standardni izhod................................................................................................................4

1.2 Podatkovni tipi.........................................................................................................................................51.2.1 Skalarni podatkovni tipi..................................................................................................................5

1.2.1.1 Logični tip...............................................................................................................................51.2.1.2 Cela števila..............................................................................................................................61.2.1.3 Števila s plavajoče vejico........................................................................................................61.2.1.4 Nizi.........................................................................................................................................6

1.2.2 Sestavljeni podatkovni tipi..............................................................................................................61.2.2.1 Polja........................................................................................................................................61.2.2.2 Objekti....................................................................................................................................7

1.2.3 Posebni podatkovni tipi...................................................................................................................71.2.3.1 Null.........................................................................................................................................71.2.3.2 Sredstva...................................................................................................................................7

1.3 Identifikatorji...........................................................................................................................................71.3.1 Spremenljivke..................................................................................................................................8

1.3.1.1 Domena dosega spremenljivk.................................................................................................81.3.1.2 Superglobalne spremenljivke v PHP......................................................................................9

1.3.2 Konstante.......................................................................................................................................101.4 Izrazi.......................................................................................................................................................10

1.4.1 Operatorji.......................................................................................................................................101.5 Kontrolni stavki......................................................................................................................................11

1.5.1 Pogojni stavki................................................................................................................................111.5.2 Zanke.............................................................................................................................................131.5.3 Stavki za vključevanje datotek......................................................................................................151.5.4 Funkcije.........................................................................................................................................15

1.6 Objektno orientirano programieranje v PHP.........................................................................................161.6.1 Razredne spremenljivke................................................................................................................171.6.2 Konstante.......................................................................................................................................181.6.3 Metode...........................................................................................................................................191.6.4 Konstruktorji in destruktorji..........................................................................................................191.6.5 Kloniranje objektov.......................................................................................................................201.6.6 Dedovanje......................................................................................................................................21

1.7 PHP in PostgreSQL................................................................................................................................221.7.1 Vzpostavitev povezave z bazo......................................................................................................221.7.2 Povpraševanja................................................................................................................................231.7.3 Pridobivanje statusnih informacij in informacij o napakah...........................................................241.7.4 Zajemanje in prikaz podatkov.......................................................................................................25

2 OBRAZCI.......................................................................................................................................................27

LITERATURA...................................................................................................................................................29

II

Page 3: Kratki uvod u PHP na slovenskom

1 PHP

1.1 Uvod

Začetki PHP segajo v leto 1995, ko je Rasmus Lerdorf napisal Perl/CGI skripto s katero je spremljal obiskanost svoje spletne strani. Kratica PHP je pomenila Personal Home Page, od leta 1997 pa je rekurzivna kratica za PHP: Hypertext Preprocessor. PHP je najbolj pogosto uporabljen odprtokodni splošnonamenski skriptni jezik, posebej pri razvoju spletnih aplikacij, saj je vključitev v HTML preprosta. Sintaksa je razvita iz C-ja, jave in Perl-a.

Uporaba: • spletne aplikacije,• konzolne skripte,• aplikacije z grafičnim uporabniškim vmesnikom z vključitvijo PHP-GTK (ni del PHP).

Prednosti:• podpira vse najbolj razširjene operacijske sisteme (Windows, Linux, raznu Unix, MacOS, ...),• podpira večino spletnih strežnikov (Apache, MS Microsoft Internet Information Server, Personal

Web Server, Netscape, ...),• delo z bazami podatkov je preprosta, podpira široko množico relacijskih baz podatkov (dBase,

InterBase, MySQL, PostgreSQL, Oracle, DB2, Informix, Ingres, Sybase, ...).• mogoča komunikacijo z drugimi servisi preko protokolov kot LDAP, IMAP, SNMP, NNTP, POP3,

HTTP, COM in drugih,• podpira delo XML datotekami,• podpira delo z Macromedai Flash datotekami, pdf dokumenti, in raznimi formati slik.

1.1.1Ubežne kode

Ena od prednosti PHP je direktna vključitev kode v statične HTML strani. PHP kodo v HTML odpremo z <?php, zaključimo pa z ?>, npr.:

<HTML> <HEAD> <TITLE>Primer</TITLE> </HEAD> <BODY> <H3>DOBRODOŠLI</H3> <?php echo "To je PHP primer.";

3

Page 4: Kratki uvod u PHP na slovenskom

?> </BODY></HTML>

Lahko uporabimo tudi skrajšane oznake, vendar je priporčljivo, da uporabljamo privzete, saj se skrajšana trkne z XML in XHTM sintakso.

<?php echo "Tudi to je PHP primer.";?>

Nekateri HTML urejevalniki (MS Front Page) so imeli probleme z ubežnimi kodami, zato so v PHP vkljčili tudi oznako script:

<script language="php"> echo "Še en PHP primer.";</script>

PHP podpira tudi ubežne kode v ASP slogu:

<% echo "Tudi to je PHP primer.";%>

1.1.2 Izpisi na standardni izhod

Za izpis na zaslon ponuja PHP funkcije echo(), print(), printf() in sprintf().

echo()

void echo(string argument1 [, ...string argumentN])

Funkcija echo() programerju ne daje povratne informacije o stanju izpisa, saj vrača void. Zaradi tega ga tudi ne moremo uporabiti v kompleksnih izrazih. Lahko pa izpiše hkrati več nizov. V tem primeru moramo oklepaje za argumente izpustiti.Primer:

<?php $starost = 18; echo "Micka je stara ", $starost, " let.";?>

print()

boolean print(argument)

Funkcija print() je podobna zgoraj opisani, le da vrača logično vrednost in lahko izpiše le en argument. V primeru., če želimo hkrati izpisati več podatkov, si lahko pmaga z operatorjem za spajanje nizov . (pika).

Primer:<?php $starost = 18; $ok = print("Micka je stara ". $starost. " let.\n"); echo $ok . "\n"; ?>

printf(), sprintf()

boolean printf(string format [, mixed args])

4

Page 5: Kratki uvod u PHP na slovenskom

Funkcija pritf() omogoča formatiran izpis, sicer pa je funkcionalno enaka pritf(). sprrintf() pa rezultat zapiše v niz namesto na standardni izhod. Argument je sestavljen iz petih komponent:

zapolnitvenega znaka – zapi[emo za apostrofom (npr. '_), privyeti znak je presledek, poravnave – privzeta je desna, levo označimo z zankom – (minus), širino – najmanjše število znakov, ki se uporabi za izpis, natančnost – število decimalnih mest (samo pri decimalnih številih), tip – določa, kako se bo argument obravnaval (tabela 1).

Tabela 1: Oznake za podprte tipe

Tip Opis

%b celo število v dvojiškem sistemu

%c celo število, izpiše se pripadajoči ASCII znak

%d decimalno število se obravnava kot predznačeno celo število

%f decimalno število (floating point)

%o celo število v osmiškem sistemu

%s niz

%u decimalno število se obravnava kot nepredznačeno celo število

%x celo število v šestnajstičkem sistemu (male cifre a..f)

%X celo število v šestnajstičkem sistemu (velike cifre A..F)

Primer:

<?php $n = 5; $pi = 3.14; printf("%b", $n); // 101 - izpis v dvojiskem sistemu echo "\n"; printf("%1.5f", $pi); // 3.14000 - dec. st. na 4 decimalk in 1 cifro za celi del echo "\n"; printf("%'_10s", "besedilo"); // besedilo poravnano desno na 10 znakov, echo "\n"; // zapolnitveni znak je _ ?>

1.2 Podatkovni tipi

PHP ponuja široko množico podatkovnih tipov. Ti se delijo v tri kategorije, skalarni (scalar), sestavljeni (compound) in posebni (special).

1.2.1Skalarni podatkovni tipi

Skalarni podatkovni tipi lahko sprejmejo le en podatek.

1.2.1.1 Logični tip

Spremenljivka logičnega tipa (Boolean) ima lahko le dve vrednosti true ali false (PHP ni občitljiv na velike/male črke). True lahko predstavimo tudi z od nič različno vrednostjo, false pa z nič npr.:

$zdrav = false; # $zdrav je false$zdrav = 1; # $zdrav je true

5

Page 6: Kratki uvod u PHP na slovenskom

$zdrav = -1; # $zdrav je true$zdrav = 5; # $zdrav je true$zdrav = 0; # $zdrav je false

1.2.1.2 Cela števila

Cela števila (Integer) imajo lahko osnovo 10, 8 ali 16:

42 # desetiško število-137 # desetiško število0755 # osmiško število0x4AB # šestnajstiško število

Obseg celoštivlskega tipa je odvisen od platforme, tipipčno pa lahko zavzema vrednosti med -231 in +231. Če se obseg prekorači, PHP pretvori celoštevilski tip v decimalni.

1.2.1.3 Števila s plavajoče vejico

PHP lahko števila s plavajačo vejico (Float) zapišemo na več načinov:

3.145.08.7e42.34E+11

1.2.1.4 Nizi

Niz (String) je končno zaporedje znakov. PHP pozna 3 skupine nizov:• niz obdan z dvojnim narekovajem "to je niz",• niz obdan z enojnim narekovajem 'tudi to je niz\n' in • dolge nize (heredoc).

V nizih obdanimi z dvojnimi narekovaji lahko uporabljamo ubežne kode (\n – nova vrsta, \$ dollar znak, ...), nizi v enojnih narekovajih pa se obravnavajo kot so zapisani (ubežne kod se ignorirajo). Dolge nize obdamo z oznakama z enakima imenoma (ime je poljubno), pred začetno oznako je znak <<<, končna oznaka pa se mora začeti takoj na začetku vrstice, primer:

echo <<<AAAA To je dooooooolgooooo besediiiloooooo, ki se lahko vleeeeeeeeeče preko več vrstic.AAAA;

1.2.2Sestavljeni podatkovni tipi

1.2.2.1 Polja

PHP pozna dve vrsti polj (Arrays), klasična indeksna in asocoativna. Pri indkesnih poljih je kluč zaporedna številka elementa v polju (kot npr. v C/C++):

$gl_mesto[0] = "Ljubljana";$gl_mesto[1] = "Rim";$gl_mesto[2] = "Pariz";...

6

Page 7: Kratki uvod u PHP na slovenskom

Pri asiciatvnih poljih pa je ključ lahko niz, ki asociira na vrednost elementa:

$gl_mesto["Slovenija"] = "Ljubljana";$gl_mesto["Italija"] = "Rim";$gl_mesto["Francija"] = "Pariz";...

Polja so lahko enodimenzionalna ali več dimenzionalna.

1.2.2.2 Objekti

Objekti (Objects) so osnova za objektno orientirano programiranje. Za razliko od drugih podatkovnih tipov v PHP, moramo objekte eskplicitno deklarirati. To storimo z rezervirano besedo class:

class dijaki{ private $ime; function Poimenuj($i) { $this->ime = $i; }}...$dijak = new dijaki;...$dijak->Poimenuj("Janko");

1.2.3Posebni podatkovni tipi

Nekatere podatkovne tipe ne moremo uvrstiti v zgoraj opisane skupine, saj služijo posebnim namenom.

1.2.3.1 Null

Spremneljivka, ki ima vrednost Null, je brez vrednosti, kar ni enako nič številsko ali pa prazen prostor. V PHP-ju ima spremenljivka vrednost Null, če:

• ni postavljena na nobeno od določenih vrednosti,

• če smo ji priredili vrednost Null, ali

• smo vrednost zbriali s funkcijo unset().

1.2.3.2 Sredstva

V PHP-ju pogosto pridobivamo podatke iz raznih podatkvnih virov kot so datoteke, baze podatkov in mrežni tokovi (network streams). S temo podatkovnimi viri uporavljamo ponavadi preko ročic (handles). Spremenljivka sredstvenega tipa (Resource) nima vrednosti, ampak je kazalec na odprto povezavo podatkovni vir, primer;

$fh = fopen("home/micka/beseedilo.txt", "r");

1.3 Identifikatorji

Indentifikator (Identifiers) je skupno ime za spremenljivke, konstante, funkcije in uporabniško definirane

7

Page 8: Kratki uvod u PHP na slovenskom

objekte. Dolžina imena indentifikatorja je lahko poljuba, začne se na črko angleške abesede ali podčrtajem, sledijo pa lahko alfanumerični znaki, podčrtaj in ASCII znaki v območju med 127 in 255. Primer pravilnih in nepravilnih imen:

Tabela 2: Primeri praaavilnih in nepravilni identifikatorjev

Pravilno Nepravilno

m o j a_ f u n k c i j a t o& o n o

s t eve c števec

p e t i c a 5 i c a

1.3.1Spremenljivke

Spremenljivka je poimenovan prostor v pomnilniku, ki vsebuje nek podatek. Spremenljivk ni potrebno vnaprej deklarirati (kot npr. v C/C++), ampak jih lahko sproti. Vendar dobra programerska praksa priporoča deklaracijo spremenljivk pred uporabo. Spremenljivke v PHP-ju se začenjo z znakom $, kateremu sledi ime spremenljivke. Ime se lahko začne na črko angleške abecede ali podčrtaj, sledijo pa lahko alfanumericni znaki, podčrtaj in ASCII znaki v območju med 127-255. PHP loči med malimi in velikimi črkami.

Vrednosti lahko spremenljivkam prirejamo preko vrednosti (value assignment) ali pa preko reference (refenrence assignment), primer:

<?php $val1 = "Hello!"; /* po vrednosti */ $val2 = & $val1; /* po ref., vrednost $val1 je enaka $val2, "Hello!" */ $val2 = "Bye!"; /* vrednost $val1 je enaka $val2, "Bye!" */?>

1.3.1.1 Domena dosega spremenljivk

Spremnljivke lahko deklariramo kjerkoli v PHP skriptu. Položaj deklaracije določa domeno dosega (scope), tj. od kje lahko do spremnljivke dostopamo. Po domeni dosega ločimo:

• lokalne spremenljivke,• parametri funkcij,• globalne spremenljivke in • statične spremenljivke.

Lokalne spremenljivkeSpremenljivka deklarirana znotraj funkcije se obravnava kot lokalna. Ob izhodu iz funkcije, se znotraj nje deklarirane spremenljivke in njihove vrednosti uničijo. Primer:

$x = 1;function izpisix(){ $x = 33; print "Vrednost \ $x znotraj funkcije je $x. <br>;}izpisix();print "Vrednost \ $x zunaj funkciji je $x. <br>;

Rezultat izvajanja tega skripta vrne rezultat:

Vrednost $x znotraj funkcije je 33.Vrednost $x zunaj funkciji je 1.

8

Page 9: Kratki uvod u PHP na slovenskom

Paramatri funckijArgumente, podobno kot v mnogih drugih programskih jezikih, deklariramo v glavi funkcije. Argumente v funckijo lahko podamo preko vrednosti al preko reference. Če argument podamo preko vrednosti, se sprememba po izhodu iz funkcije ne odraža. Pri podajanju argumenta preko reference pa se spremeba odraža tudi po izhodu iz funkcije:

funkction abc(&$a, $b){ // $a smo podali preko referneci // $b pa preko vrednosti $a = $a + 3; $b = $b + 3;}$a = $b = 100;abc($a, $b);print "\$a = $a <br>"; // a = 103print "\$b = $b <br>"; // b = 100

Globalne spremenljivkeV nasprotju z lokalnimi spremenljivkami, so globalne dosegljive kjerkoli v programu. Če želimo globalno spremenljivko spremeniti v funkciji, jo moramo v tej funckiji eksplicitno deklearirati kot globalno z rezervirano besedo GLOBAL. Primer:

$glob_spr = 10;function povecaj(){ GLOBAL $glob_spr; $glob_spr++;}povecaj();print "\$glob_spr $glob_spr"; // $glob_spr = 11

Podobno lahko storimo z uporabo PHP-jevega globalnega polja:glob_spr = 10;function povecaj(){ $GLOBALS["glob_spr"]++;}povecaj();print "\$glob_spr $glob_spr"; // $glob_spr = 11

Statične spremenljivkeVrednost lokalnih spremneljivk se ob izhodu iz funkcije izgubijo. Če bi vrednost spremenljivke radi ohranili, jo deklariramo z rezervirano besedo STATIC. V naslednjem primeru se vreednost spremenljivke $stevec postavi na nič ob prvem klicu funckije. Ob naslednjih pa je njena vrednost enaka kot je bil ob spremembi pri prejšnjem klicu.

function povecaj(){ STATIC $stevec = 0; $stevec++; print "\$stevec $stevec";}povecaj(); // $stevec = 1povecaj(); // $stevec = 2povecaj(); // $stevec = 3

1.3.1.2 Superglobalne spremenljivke v PHP

PHP ponuja množico vnaprej definiranih spremenljivk, ki vsebujejo podatke o okolju, kjer s PHP skript izvaja. Superglobalne spremenljivke (superglobal variables) so dosegljive kjerkoli v skriptu. Primer vrednosti spremenljivke $_SERVER, ki jo generira spletni stežnik, po izvedbi stavka:

9

Page 10: Kratki uvod u PHP na slovenskom

foreach ($_SERVER as $var => $value){ echo "$var => $value <br>";}

dobimo informacije o spletnem strežniku in odjemalcu:

HTTP_HOST => localhost HTTP_USER_AGENT => Mozilla/5.0(X11;U;Linux i686 (x86_64);en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6 HTTP_ACCEPT => text/xml, application/xml,a pplication/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png,*/*;q=0.5 HTTP_ACCEPT_LANGUAGE => en-us,en;q=0.5HTTP_ACCEPT_ENCODING => gzip,deflateHTTP_ACCEPT_CHARSET => ISO-8859-1,utf-8;q=0.7,*;q=0.7 HTTP_KEEP_ALIVE => 300 HTTP_CONNECTION => keep-alive HTTP_CACHE_CONTROL => max-age=0 PATH => /sbin:/usr/sbin:/bin:/usr/bin SERVER_SIGNATURE => Apache/2.2.0 (Fedora) Server at localhost Port 80SERVER_SOFTWARE => Apache/2.2.0 (Fedora) SERVER_NAME => localhost SERVER_ADDR => 127.0.0.1 SERVER_PORT => 80 REMOTE_ADDR => 127.0.0.1 DOCUMENT_ROOT => /var/www/html SERVER_ADMIN => root@localhost SCRIPT_FILENAME => /var/www/html/index.php REMOTE_PORT => 39906 GATEWAY_INTERFACE => CGI/1.1 SERVER_PROTOCOL => HTTP/1.1 REQUEST_METHOD => GET QUERY_STRING => REQUEST_URI => / SCRIPT_NAME => /index.phpPHP_SELF => /index.php REQUEST_TIME => 1167309266

Posamezne element spremenljivke, npr. IP številko uporabnikovega računalnika dobimo:

print "Tvoja IP številka je: $_SERVER['REMOTE_ADDR'];

1.3.2Konstante

Konstante (constnats) so identifikatorji, katerih vrednosti ne moremo spreminjati med izvajanjem programa. Konstante definiramo s funkcijo define(), primer:

define("PI", 3.141592);

1.4 Izrazi

Izraz (expression) je fraza, ki predstavlja neko akcijo v programu. Izraz sestavlja vsaj po en operand in operator. Izraz se zaključi s podpočjem.

1.4.1Operatorji

Operator je simbol, ki določa akcijo v izrazu. Za razliko od klasičnih programskih jezikov (C/C++,

10

Page 11: Kratki uvod u PHP na slovenskom

Pascal, ...), PHP avtomatskao izvede pretvorbo med podatkovnimi tipi, glede na operator, med dvema operandoma. PHP pozna naslednje skupine operatorjev:

• artimetične (+ - * / %),• operatorje prirejanja (= += -= *= /= .=),• operatorje primerjanja (== != === < > <= >= ?:),• logične (&& AND || OR ! NOT XOR),• operator nad nizi (.),• inkrement in dekrement (++ --),• bitne (bitwise) operatorje (& | ^ ~ << >>) in• druge (new () []).

Pri operatorjih moramo bit pozorni na dve lastnosti, asociativnost in prioriteto. Asociativnost pove, iz keter smeri (leve ali desne) se ovrednoti rezultat operatorja v izrazu. Primer desne asociativnosti je operator [] (element polja), leve pa aritmetični operatorji (npr. +). Nekateri operatoji pa nimajo asocoativnosti, npr. ==. Prioriteta pa določa vrstni red ovrednotenja operatorjev v izrazu. Zaradi

Tabela 3: Seznam operatorjv po prioriteti

Operator Associativnost Opis

new n/a1 kreiranje objekta

() n/a združevanje dela izraza

[] desna element polja

! ~ ++ -- n/a logični NE, bitni NE, inkrement, dekrement

* / % leva množenje, deljenje, deljenje po modulu

+ - . leva seštevanje, odštevanje, konkatenacija nizov

<< >> leva pomik bitov (shift) levo in desno

< <= > >= n/a primerjanje

== != === !== n/a primerjanje na enakost, identičnost tipov

& ^ | leva bitni IN, XOR, ALI

&& leva IN

|| leva ALI

? : leva ternary (uporabna namesto if then else)

= += -= *= /= .= %= &= |= ^= <<= >>=

desna prirejanje

AND XOR OR leva logični IN. XOR, ALI

Razlog za dva logična operatorja IN in ALI je v različni prioriteti vrednotenja.

1.5 Kontrolni stavki

S kontrolnimi stavnki nadziramo potek izvajanja programa.

1.5.1Pogojni stavki

if

1 ni asociativnosti

11

Page 12: Kratki uvod u PHP na slovenskom

Eden najbolj pogostih pogojnih stavkov v večini programskih jezikov je if. Izraz v telesu se izvede, če je izpolnjen pogoj. Sintaksa v PHP je naslednja:

if (pogoj) { izraz;}

else

Stavku if lahko dodamo alternativo s stavkom else. Če je pogoj v glavi if izpolnjen se izvede izraz v telesu if, sicer izraz v telesu else.

if (pogoj) { izraz1;} else{ izraz2;}

elseif

Kombinacija if-else deluje lepo v primerih, ko sta možni dve odločitvi, če pa so možne tri, pa si pomagamo z elsif:

if (pogoj1) { izraz1;} elseif (pogoj2){ izraz2;}else{ izraz3;}

switch

Če pa vrednost sprememnljivke preverjamo na več vrednosti pa si pomagamo s stavkom switch:

switch($spremenljivka){ case vred1: izraz1; break; case vred2: izraz2; break: case vred3: izraz3; break: default: privzeti_izraz;}

12

Page 13: Kratki uvod u PHP na slovenskom

1.5.2Zanke

while

Pogoj se v stavku while preveri ob vstopu v zanko. Izrazi v telesu stavka se izvejajao, dokler je pogoj izpolnjen.

while (pogoj){ izrazi;}

Primer zanke while, ki izpiše števila in njhove kvadrate od 1 do 5:

<?php $stevec = 1; while ($stevec <= 5) { echo "kvadrat stevila $stevec je ".pow($stevec, 2). "<br>"; $stevec++; }?>

do .. while

Zanka do .. while je varianta while zanke. Pogoj se pri tem stavku preverja na koncu zanke., tako se stavki v telesu stavka vedno izvedejo vsaj enkrat.

do{ izrazi;} while (pogoj);

V naslsdnjem primeru se bo stavek izvedel, čeprav pogoj ni izpolnjen:

<?php $stevec = 10; do { echo "kvadrat stevila $stevec je ".pow($stevec, 2). "<br>"; } while ($stevec <= 5);?>

for

Stavek for ponuja bolj kompleksen mehanizem iteracij kot while. Sintaksa je naslednja:

for (iraz1; izraz2; izraz3){ irazi;}

Pravila izvajanja stavka for v PHP-ju so naslednja:• izraz1 v glavi stavka se ovrednoti ob prvi iteraciji,• izraz2 se ovrednoti na začetku vsake iteracije, za izraz določa, če se bo iteracija nadaljevala ali ne,• izraz3 se ovrednoti ob zaključku vsake iteracije,• vsakega od treh izrazov v glavi lahko izpustimo, vendar njihovo funkcijo moramo v telesu stavka

nadomestiti.

Primer:

13

Page 14: Kratki uvod u PHP na slovenskom

// 1. primer for ($kilometri = 1; $kilometri <=5; $kilometri++){ echo "$kilometri kilometrov je ".$kilometri*0.62140. " milj. <br>";}

// 2. primer for ($kilometri = 1; ; $kilometri++){ if ($kilometri > 5) break; echo "$kilometri kilometrov je ".$kilometri*0.62140. " milj. <br>";}

// 2. primer $kilometri = 1;for (; ;){ if ($kilometri > 5) break; echo "$kilometri km je ".$kilometri*0.62140. " milj. <br>"; $kilometri++;}

V vseh treh primerih dobimo enak rezultat:

1 km je 0.6214 milj2 km je 1.248 milj3 km je 1.8642 milj4 km je 2.4856 milj5 km je 3.107 milj

foreach

Stavek foreach je namenjen za uporabo nad polji. Z njegovo pomočjo potegnemo vse pare kluč/vrednost iz polja. Sintaksi za stavek sta dve. V prvem primeru vzame foreach element za elementom iz polja:

foreach ($polje as $vrednost){ izraz;}

V drugem primeru pa dobimo iz polja tako ključ kot vrednost:

foreach ($polje as $kljuc => $vrednost){ izraz;}

Primer: Prvi stavek foreach izpiše glavna mesta drzav iz polja $mesta, drug stavek pa tudi države:

<?php $mesta = array("Slovenija" => "Ljubljana", "Italija" => "Rim", "Anglija" => "London"); foreach ($mesta as $mesto) { echo "$mesto <br>"; }

echo "<br>";

foreach ($mesta as $drzava => $mesto) { echo "$drzava: $mesto <br>"; }?>

14

Page 15: Kratki uvod u PHP na slovenskom

Izpis je naslednji:

Ljubljana Rim London

Slovenija: Ljubljana Italija: Rim Anglija: London

break in continue

Stavek break se uporablja za prekinitev izvajanj iteracijskih stavkov while, do .. while, for, switch in foreach stavkov ne glede na stanje pogojnih izrazov. Stavek continue pa povzroči skok na konec zanke in posledično se izvajanje nadaljuje s prvim izrazom v zanki.

1.5.3Stavki za vključevanje datotek

Modularnost in ponovna uporaba programske kode sta področji, na katere moramo misliti pri izdelavi večjih programskih projektov. Ključne funkcije in spremenljivke definiramo v ločenih datotekah, ki jih nato po potrebi vključimo v skript. Vključevanje datotek deluje v PHP enako kot če bi jo fizično skopirali v skript. Za vključevanje datotek ima PHP na voljo 4 funkcije:

• include(/pot/do/datoteke.php)Datoteka se vključi na mesto, kjer se funkcija nahaja.

• include_once(/pot/do/datoteke.php)Ta funkcija deluje podobno kot zgornja, le da preveri, če je bila datoteka že vključena v skript. Če je že bila, se ne izvede, sicer pa navedeno datoteko vključi.

• require(/pot/do/datoteke.php)Deluje podobno kot include, s to razliko, da če datoteke ne najde (npr. napačno ime ali pot), se izvajanje skripta prekine (pri include ne) in datoteko vključi tudi v primeru pgojnega vključevanja (npr. znotraj if), ko se pgojo ovrednoti kot false.

• require_once(/pot/do/datoteke.php)Ta funcija preveri, če je bila datoteka že vključena, sicer pa deluje enako kot require.

1.5.4Funkcije

Pdobno kot poynamo že iz C/C++, funckija lahko vrača vrednost. Vrednost vrnemo s stavkom return. Splošna oblika za kreiranje funkcij je naslednja:

function ime_funkcije(parametri){ izrazi; return vred;}

Argumente lahko funkciji podamo po vrednosti in po referenci. Če argument podamo po vrednosti se spremeba le te po izhodi iz funkcije ne odrazi, če pa podamo po referneci, pa se sprememba ohrani.Primer:

<?php $a = $b = 1; function povecaj($a, &$b) { $a++; $b++; echo "V funkciji: \$a = $a\n"; // $a = 2 echo "V funkciji: \$b = $b\n"; // ba = 2 } povecaj($a, $b);

15

Page 16: Kratki uvod u PHP na slovenskom

echo "Zunaj funkcije: \$a = $a\n"; // $a = 1 echo "Zunaj funkcije: \$b = $b\n"; // $b = 2 ?>

Argumentom lahko določimo privzeto vrednost:<?php function mpc($pc, $ddv=0.20) { return $pc * (1 + $ddv); }

$c_kava = 1.0; $c_rogljicek = 1.0; echo "kava stane " . mpc($c_kava) . " EUR\n"; echo "rogljicek stane " . mpc($c_rogljicek, 0.085) . " EUR\n"; ?>

PHP omogoča vgnezdenje funkcij. Do vgnezdenih funkcij lahko dostopamo od koderkoli v skriptu:

<?php function mpc($pc, $st_ddv) { function ddv($pc, $st_ddv) { return $pc * $st_ddv; } return $pc + ddv($pc,$st_ddv); }

$c_kava = 1.0; echo "kava stane " . mpc($c_kava, 0.20) . " EUR\n"; echo "ddv na kavo je " . ddv($c_kava, 0.20) . " EUR\n"; ?>

Rekurzivne funkcije so funkcije, ki kličejo same sebe. Rekurzija omogoča elegantno rešitev problemov, ki so po naravi rekurzivne. Pri njeni uporabi moramo biti pazljivi, da se zaključi v predvidenem številu korakov. Vsak klic funckije povzroči shranjevanje podatkov na sklad. Ker je velikost sklada omejen, lahko pri velikem številu klicev sklad zapolnimo (stack overflow) kar povzroči prekinitev programa s sporočilom Segmentation fault. Rekurzijo lahko rešimo tudi iterativno. Iteracija se izvaja hitreje in ni nevarnosti prekoračitve sklada.

Primer izračuna zaporedja s splošnim členom an = an-1(1 – r):

<?php function an($a0, $n, $r) { if ($n == 0) return $a0; else return (1 + $r) * an($a0, $n - 1, $r); }

echo an(500, 10, 0.025); ?>

1.6 Objektno orientirano programieranje v PHP

Osnova OOP je objekt. Z objekti predstavimo entitete (bistvo) realnega življenja. Objekti imajo tri temeljne lastnosti:

• dedovanje (inheritance) – objekt lahko deduje lastnosti drugega (starševskega) objekta,• enkapsulacija (encapsulation) – ločitev (skrivanje) notranje notranje strukture od uporabniškega

vmesnika in • polimorfizem (polymorphism) – objekt se lahko v različnih kontekstih uporabe različno obnaša.

16

Page 17: Kratki uvod u PHP na slovenskom

Objekt določajo razredne spremenljivke oz. polja (fields) in metode (methods), ki se lahko nad njimi izhajajo. V PHP se objekt imanuje razred (class), splošna oblika deklaracije je:

class ime_razreda{ // deklaracija polj // dekalracija metod}

Primer:

class Oseba{ public $ime; private $naziv; protected $placa; protected function vstop() { echo "Zaposleni $this->ime je prisel v sluzbo ob " . date("h:i:s"); } protected function vstop() { echo "Zaposleni $this->ime je odsel iz sluzbe ob " . date("h:i:s"); } }

Objekt kreiramo z rezervirano besedo new:

$zaposleni = new Oseba;

1.6.1Razredne spremenljivke

Razredne spremenljivke se obnašajo podobno kot druge običajne spremenljivke. Do razrednih sprmenljivk lahko dostopamo na različne načine, odvisno od domene dosega (scope). Ta je lahko v PHP public, private, protected, ali static.

Če razredno spremenljivko deklariramo kot public, lahko do njega dostopamo direktno:

$zaposleni->ime = "Micka";

Razredne spremenljivke, ki so deklariran kot private, so dosegljiva le znotraj objekta. Do njih lahko dostopamo preko javnih metod (public methods), setter-ji in getter-ji, s katerimi nastavljamo oz. pridobivamo lastnosti (properties) razrednih spremenljivk. Te metode so lahko vgrajene __set() in __get() ali pa uporabniške:

class Oseba{ private $ime; public function setName($ime) { $this->ime = $ime; }}

$zaposleni = new Oseba;$zaposleni->setName("Micka");

Razredna spremenljivka deklarirana kot protected se uporabljajo za interno uporabo v objektih in za dedovanje. S static pa deklariramo reazredne spremenljivke, ki si jih deli več objektov istega razreda.

17

Page 18: Kratki uvod u PHP na slovenskom

__set()

Metodo __set() lahko uporabimo tako za skritje implementacije dostopa do razrednih spremenljivk, za validacijo podatkov, ali pa za dodajanje novih lastnosti razreda:

class Oseba{ public $ime; function __set($propName, $propValue) { echo "Spremenljivka \$$propName ne obstaja! \n"; }}

$o = new Oseba;$o->ime = "Vida";$o->priimek = "Lepa";

Rezultat zgornjega skripta je:

Spremenljivka $priimek ne obstaja!

Pri uporabi metode __set():class Oseba{ public $ime; function __set($propName, $propValue) { $this->$propName = $propValue; }}$o = new Oseba;$o->ime = "Vida";$o->priimek = "Lepa";echo "Ime: $o->ime \n";echo "Priimek: $o->priimek \n";

Pa dobimo izhod:

Ime: VidaPriimek: Lepa

__get()

Metoda __get() vrne vrednost razredne spremenljivke. Kot argument podamo ime spremennljivke.

1.6.2Konstante

Konstante lahko definiramo znotraj razreda. Te vrednosti ostanejo nespremenjene skozi celotni življenjski cikel objekta. Primer;

class mat_funk{ const PI = '3.14159265'; const E = '2.7182818284'; // druge konstante, razredne sprem. in metode}

Do konstant dostopamo:

18

Page 19: Kratki uvod u PHP na slovenskom

echo mat_funk::PI;

1.6.3Metode

Metode se podobne funkcijam, s to razliko, da določajo obnašanje določenega objekta. Zato pri klicu metode moramo najprej navesti ime objekta. Tudi metode lahko sprejemajo argumente in vračajo vrednosti.

Po domeni dosega imajo lahko metode šest oblik, public, private, protected, abstract, final in static. Metode deklarirane kot public so dosegljive kjerkoli ob vsakem času, private so dosegljive le znotraj objekta, protected tudi znotraj objekta, vendar pa so te dosegljive tudi v vseh podrazredih originalnega razreda. Abstraktne metode so deklarirane v starpševsekm razredu, implementirane pa v nasledniku. S final preprečimo, da se metoda spremeni v podrazredih. Pogosto je uporabno, če si več objektov istega razreda deli isto razredno spremenljivko oz. metodo. Oglejmo si primer za štetje obiskolvacev spletne strani:

class Obiskovalci{ private static $vred = 0; public function __construct() { self::$vred++; } static function getVred() { return self::$vred; } }

$o = new Obiskovalci();echo Obiskovalci::getVred() ."\n";$o1 = new Obiskovalci();echo Obiskovalci::getVred() ."\n";

Rezultat zgornjega skripta je:12

1.6.4Konstruktorji in destruktorji

Pogosto naletimo na primere, ko moramo po kreiranju novega objekta inicializirati določene razredne spremenljivke. Sicer lahko to storimo takoj po kreiranju objekta, lažje pa je, če ta postopek avtomatiziramo. Temu mehanizmu v OOP pravimo konstruktor (constructor). Konsturktor je blok programske kode, ki se izvede v času kreiranja objekta. Prednosti konstruktorjev v OOP:

sprejemajo lahko parametre, ki se lahko naanašajo na določena polja objekta, lahko kličejo metode razreda ali druge funkcije, lahko kličejo druge konstruktorje vključno konstruktorje starševskega razreda.

Konstruktor je v PHP metoda z imenom __construct(). Objekt se v PHP avtomatsko uniči po izvedbi skripta. Vendar tega postopka si uporabnik v PHP 4 ni mogel prilagoditi svojim potrebam, to so omogčili v PHP 5 z metodo __destruct(). Primer uporabe konstruktorja in destruktorja.

class Knjiga{ private $naslov;

19

Page 20: Kratki uvod u PHP na slovenskom

private $avtor; function __construct($naslov, $avtor) { $this->naslov = $naslov; $this->avtor = $avtor; } function __destruct() { echo "The code is broken. \n"; } public function getTitle() { return $this->naslov; } public function getAutor() { return $this->avtor; }}

$k = new Knjiga("Da Vinchi code", "Dan Brown");echo $k->getTitle() ."\n";echo $k->getAutor() ."\n";

Rezultat zgornjega skripta je:

Da Vinchi codeDan BrownThe code is broken.

1.6.5Kloniranje objektov

Od PHP 5 dalje se objekti v celoti obravnavajo kot reference, zaradi tega je kopiranje objekta težje. Za rešitev tega probelma ponuja PHP kloniranje (object cloning).

class Avto{ private $moc; private $barva; public function setPower($moc) { $this->moc = $moc; } public function setColor($barva) { $this->barva = $barva; } public function getPower() { return $this->moc; } public function getColor() { return $this->barva; }}

$ferrari = new Avto;$ferrari->setPower(400);$ferrari->setColor("rdec");

$yugo = clone $ferrari;$yugo->setPower(45);

20

Page 21: Kratki uvod u PHP na slovenskom

echo $ferrari->getPower() ."\n";echo $ferrari->getColor() ."\n";echo $yugo->getPower() ."\n";echo $yugo->getColor() ."\n";

Zgornji skript izpiše:

400rdeca45rdeca

Z metodo __clone() (napišemo v deklariciji razreda) lahko kloniranim objektom vnaprej določimo lastnosti. Npr. če bi v zgornjem skriptu v razred Avto dodali metodo:

__clone(){ $this->barva = "bela";}

bi bili vsi klonirani objekti objekta $ferrari bele barve.

1.6.6Dedovanje

Svet okoli nas je povečini hierarhično organiziran (živalski in rastlinski svet, državne ustanove, ...). Takšne organizacije je v OOP enostavno predstaviti, pri tem nam pomaga lastnost dedovanja.

// osnovni razredclass Plovilo{ private $dolzina; private $moc; public function setLength($dolzina) { $this->dolzina = $dolzina; } public function setPower($moc) { $this->moc = $moc; } public function getLength() { return $this->dolzina; } public function getPower() { return $this->moc; }}

// nov razred jadrnica deduje od polja in metode od razreda Plovilo +// lastna polja in metode

class Jadrnica extends Plovilo{ private $povr_jader; public function setSail($povr_jader) { $this->povr_jader = $povr_jader; }

21

Page 22: Kratki uvod u PHP na slovenskom

public function getSail() { return $this->povr_jader; }}

$barka = new Jadrnica;$barka->setPower(225); // klic metode razreda Plovilo$barka->setLength(62); // klic metode razreda Plovilo$barka->setSail(217); // klic metode razreda Jadrnicaecho "Moc motorja: " .$barka->getPower() ." KM\n";echo "Dolzina: " .$barka->getLength() ." cevljev\n";echo "Povrsina jader: " .$barka->getSail() ." km2\n";

1.7 PH P in Po st greSQL

PHP vsebuje vse mehaniyme za delo s PostgreSQL stre\nikom, tako ne potrebujemo nobenih dodatnih gonilnikov (npr. ODBC). Na Linux operacijskih sistemih omogočamo PHP PostgreSQL razšititve tako, da ob namestitvi PHP konfiguriramo (./configure) s stikalom --with-pgsql. Če PostgreSQL nio nameščne na privziti direktorij /usr/local/pgsql, moramo navesti pot do PostgreSQL, npr.

--with-pgsql=/var/lib/pgsql

Na Windwos operacijskih sistemih pa v datoteki php.ini odkomentiramo vrstico;extensions=php_pgsql.dll

in ponovno zaženemo Apache strežnik.

Pravilno delovanje PostgreSQL s PHP in Apache strežnikom lahko preverimo s funkcijo:

<?php phpinfo();?>

V brskalniku odpremo datoteko z zgornjo kodo in če vse pravilno deluje, prikaže brskalnik med drugim naslednjo tabelo:

Slika 1: Del izpisa funckije phpinfo() v brskalniku

1.7.1Vzpostavitev povezave z bazo

Povezavo zvpostavimo s funkcijo pg_connect(). PostgreSQL zahteva, da vse parametre potrebne za

22

Page 23: Kratki uvod u PHP na slovenskom

povezavo podamo v enem nizu:pg_connect(string connection_string, [, int connect_type])

Posamezni parametri v connection_string so lahko: connect_timeout – časa čakanja v sekundah do vzpostavitve povezave, vrednost 0 ali nenavajanje

parametra povzroči nedefinirano dolgo čakanje, dbname – ime baze, host – ime strežnika, npr. pdcscp.scptuj.si ali localhost, hostaddr – IP naslov strežnika, npr. 194.249.252.119, port – vrata skozi katero PostgreSQL komunicira, privzeta vrata so 5432, user – uporabniško ime, password – geslo, sslmode – PostgreSQL podpira kriptirane povezave, vrednost tega parametra je lahko allow,

disable, require ali prefer (ptivzeto).

PostgreSQL zaradi varčevanja s sistemskimi sredstvi pri večkratni vzpostavitvi povezave uporabi že obstoječo povezavo. Temu se lahko izognemo, če kot parameter connect_type podamo vrednost PGSQL_CONNECT_FORCE_NEW.Povezavo prekinemo s funklcijo pg_close().

Primer:<?php $pg = pg_connect("host=localhost user=micka dbname=pba") or die("Napaka, ne morem vzpostaviti povezave"); pg_close($pg); ?>

1.7.2Povpraševanja

pg_query()

Vso delo z bazo poteka preko SQL stavkov. Povraševalni stavke pošljemo stržniku funkcijo pg_query().

recource pg_query([recource connection,] string query)

Funkcija pg_query() pošlje povpraševalni stavek BP, ob uspešni izvedbi vrne sredstvo z rezultati povpraševanja, sicer pa FALSE. Resultate povpraševanj pa lahko prečitamo s funkcijo pg_fetch_array() (več v nadaljevanju). Primer:

<?php $pg = pg_connect("host=localhost user=zoly dbname=pba") or die("Napaka, ne morem vzpostaviti povezave"); $query = "SELECT * FROM artikli;"; $result = pg_query($query); while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)) { $ime = $row['ime']; $cena = $row['mpc']; echo "$ime: $cena\n"; } pg_close($pg); ?>

Če imamo odrptih več povezav, s connection parametrom določimo, katero naj uporabi. V povpraševalni niz lahko združimo več SQL stavkov, vendar moramo biti pozorni, saj ne moremo preveriti, če so se vsi tako izvedli kot smo pričakovali:

$query = "INSERT INTO natakar(ime) VALUES('Micka');";$query .= "INSERT INTO natakar(ime) VALUES('Francka');";$query .= "INSERT INTO natakar(ime) VALUES('Miha');";

23

Page 24: Kratki uvod u PHP na slovenskom

$result = pg_query($query);

pg_send_query()

recource pg_send_query([recource connection,] string query)

Funkcija pg_send_query deluje podobno kot pg_query, s to razliko,: de se SQL povpraševalni stavek pošlje BP asinhrono, kar pomeni, da se skript izvaja naprej, čeprav

se SQL stavek še ni ivedel v celoti in če smo v enem povpraševanju združili več SQL stavkov, lahko po potrebi rezultat vsakega stavka

zajamemo posebej.

Če PostgreSQL strežnik že izvaja kakšen povpraševalni stavek, ne smomo s funkcijo pg_send_query posredovati novo. Če je strežnik zaposlen, preverimo s funkcijo pg_connection_busy().Primer:

<?php $pg = pg_connect("host=localhost user=zoly dbname=pba") or die("Napaka, ne morem vzpostaviti povezave"); $query = "SELECT * FROM artikli;"; $query .= " SELECT * FROM natakar;";

if (!pg_connection_busy($pg)) pg_send_query($pg, $query);

$result1 = pg_get_result($pg); $result2 = pg_get_result($pg); echo "Vseh pijac na ceniku: " . pg_num_rows($result1) . "\n"; echo "Stevilo zaposlenih: " . pg_num_rows($result2) . "\n";

pg_close($pg); ?>

1.7.3Pridobivanje statusnih informacij in informacij o napakah

pg_connection_status()

int pg_connection_status(resource connection)

Funckija pg_cennection_status() vrne eno od dveh možnih vrednosti in sicer PG_CONNECTION_OK ali PG_CONNECTION_BAD:

$pg = pg_conncect("host=localhost user=micka password=njenpassword dbname=pba");if (pg_cennection_status() == "PG_CONNECTION_BAD") { die ("Tezave s povezavo z bazo!"); }

Ker funkcija vrne FALSE ob neuspešni povezavi, lahko povezavo preverimo tudi:

$pg = pg_conncect("host=localhost user=micka password=njenpassword dbname=pba");if (!$pg) { die ("Tezave s povezavo z bazo!"); }

24

Page 25: Kratki uvod u PHP na slovenskom

pg_result_status()

int pg_result_status(resource result [, int type])

Funkcija pg_result_status vrne informacije o rezultatu povpraševanja. Tip (type) informacije ima lahko dve vrednosti:

PGSQL_STATUS_LONG – (privzeto) vrne numerično vrednost rezultata, PGSQL_STATUS_STRING – vrne tip povpraševanje, ki je bil izveden, npr. če smo izvajali stavek

SELECT, vrne besedo SELECT.

Primeri vrednosti spremenljivke PGSQL_STATUS_LONG, ki jo lahko zavzema: 0 – PGSQL_EMPTY_QUERY: povpraševalni niz je prazen, 1 – PGSQL_COMMAND_OK: povpraševnje, ki ne vrača podatke, se je pravilno izvršilo, 2 – PGSQL_TUPLES_OK: povpraševnje, ki vrača podatke, se je pravilno izvršilo, 5 – PGSQL_BAD_RESPONSE: strežnik se ni pravilno odvzval, 6 – PGSQL_NONFATAL_ERROR: opozorila, npr. poskus brisanja neobstoječe tabele, 7 – PGSQL_FATAL_ERROR: usodna napaka, npr. nezmožnost vzpostavitve povezave s strežnikom.

1.7.4Zajemanje in prikaz podatkov

pg_fetch_array()

mixed pg_fetch_array(resource result [, int row [, int resulttype]])

Funckija pg_fetch_array() zajame podatke, ki jih vrne pg_query() od row vrstice naprej. Če želimo zajeti vse vrstice, parameter row nastavimo na NULL. Parameter resulttype ima lahko naslednje vrednosti:

PGSQL_ASSOC – vrne vrstico kot asociativno polje PGSQL_NUM – vrne vrstico kot indeksno polje PGSQL_BOTH – vrne vrstico kot asociativno in indeksno polje

Glej primer za funkcijo pg_query().

pg_fetch_row()

mixed pg_fetch_row(resource result [, int row])

Funkcija pg_fetch_row() zajame vrstico iz resultata funkcije pg_query() in jo shrani v indeksno polje. V pomoč nam je lahko funkcija list(), ki kreira seznam podatkov.

Spodnji primer deluje enako kot primer pri funkciji pg_query(), kjer smo uporabili pg_fetch_array():<?php $pg = pg_connect("host=localhost user=zoly dbname=pba") or die("Napaka, ne morem vzpostaviti povezave"); $query = "SELECT ime, mpc FROM artikli;"; $result = pg_query($query); while (list($ime, $mpc) = pg_fetch_row($result)) { echo "$ime: $mpc\n"; } pg_close($pg); ?>

25

Page 26: Kratki uvod u PHP na slovenskom

2 Obrazci

Pri spletnih aplikacijah moramo podobno, kakor pri klasičnim prgoramih omogočati interakcijo med uporabnikom in aplikacijo (vnos podatkov, potrditev, ...). To nam v HTML-ju omogčajo obrazci (webforms). Do podatkov v obrazcih lahko dostopamo z metodama GET in POST. Čeprav je privzeta metoda GET, je priročnejša uporaba POST, saj omogoča obravnavo večjega obsega podatkov (npr. blokov besedila).

Uporaba je preprosta. Na spletno stran dajmo vnosno polje (text box) z imenom email:<input type="text" name="email" size=30 value=""/>

Do polja dostopamo preko globalne spremenljivke $_POST, kateri kot asciativni indeks podamo ime obrazca:$enaslov = $_POST['email'];

Primer: Izdelajmo prepresto spletno stran, na kateri uporabnik vnese svoje ime in priimek, izbira med (več) priljubljenimi programskimi jeziki in izbere (le en) priljubljen operacijski sistem. Po potrditvi (klik na gumb) se naj izpišejo podatki, ki jih je uporabnik vnesel/izbral. Stran bi po vnosu podatkov izgledala takole:

26

Page 27: Kratki uvod u PHP na slovenskom

Po potrditvi se vnešeni in izbvrani podatki izpišejo v spodnjem delu strani in izbrišejo na obrazcih:

Uporabili smo štiri vrste obrazcev – vnosno polje (text), potrditveni gumb (submit), izbirnike z možnostjo večkratnega izbora (checkbox) in izbirnike z možnostjo enojnega izbora (radio). Izvorna koda strani je naslednja:

<HTML> <HEAD> <TITLE>Primer</TITLE> </HEAD> <BODY> <form action="webforms.php" method="post"> <input type="text" name="ime" size=30 value="ime in priimek"/> <!-- vnosno okno --> <input type="submit" name="ok1" value="OK"/> <!-- gumb --> <br><br> Izberi svoje priljubljene programske jezike: <br> <input type="checkbox" name="jezik[]" value="C/C++"/> C/C++ <br> <input type="checkbox" name="jezik[]" value="Java"/> Java <br> <input type="checkbox" name="jezik[]" value="PHP"/> PHP <br> <input type="checkbox" name="jezik[]" value="C#"/> C# <br> <br><br> Izberi svoj priljubljen operacijski sistem: <br> <input type="radio" name="os[]" value="Linux"/> Linux <br> <input type="radio" name="os[]" value="MacOS"/> MacOS <br> <input type="radio" name="os[]" value="Windows"/> Windows <br> <input type="radio" name="os[]" value="Solaris"/> Solaris <br><br> <hr size="1" width="500" align="left"> </form>

<?php if (isset($_POST['ok1'])) { echo "V <I>TextBox</I> si vpisal svoje ime in priimek: <B>" . $_POST['ime'] . "</B><BR><BR>"; echo "Odkljukal si jezike: "; foreach($_POST['jezik'] AS $prog_jezik) echo $prog_jezik . " "; echo "<BR><BR>"; echo "Izbral si operacijski sistem: ";

27

Page 28: Kratki uvod u PHP na slovenskom

foreach($_POST['os'] AS $osistem) echo $osistem . " "; } ?> </BODY> </HTML>

28

Page 29: Kratki uvod u PHP na slovenskom

LITERATURA

[1] PostgreSQL 8.2.0 Documentation, The PostgreSQL Global Development Group, University of California, 1996-2006.

[2] W. Jason Gilmore and Robert H. Treat, Beginning PHP and PostgreSQL 8 From Novice To Professional, Apress, Berkeley, CA, 2006.

[3] Jeff Perkins, PostgreSQL, Premier Press Inc., Indianapolis, Indiana 46204, 2001.

[4] PHP Manual, The PHP Documentation Group, 1997-2009.

29