08 - As - PHP

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 50

Predmet: Aplikativni softver

Predava: dr Violeta Tomaevi, vanr.prof.

PHP
Literatura
Luke Welling, Laura Thomson, PHP i MySQL: Razvoj aplikacija za Web, prevod
Mikro knjiga, 2006.

Departman za informatiku i raunarstvo

ta je PHP?
PHP predstavlja jezik za pisanje skriptova koji rade na serveru.
PHP je projektovan za upotrebu na Web-u. Njegovu poetnu verziju je
1994.godine napravio Rasmus Lerdorf. Kasnije je PHP proao kroz
nekoliko verzija dok nije doao do danas aktuelne verzije PHP 5.
PHP je inicijalno bila skraenica za Personal Home Page, ali je znaenje
kasnije izmenjeno, pa sada oznaava PHP Hypertext Preprocessor.
PHP je proizvod otvorenog koda, tj. slobodan je pristup njegovom
izvornom kodu koji moe besplatno da se koristi, menja i dalje distribuira.

Prednosti PHP-a (1)


U odnosu na svoje glavne konkurente (Perl, MS ASP.NET, JSP i ColdFusion),
PHP ima sledee prednosti:
 Visoke performanse. PHP je vrlo efikasan. Jedan relativno slab server moe
da obradi vie miliona zahteva dnevno. Kapacitet obrade postaje praktino
beskonaan ukoliko se koristi vei broj spregnutih servera.
 Niska cena. PHP je besplatan. Najnovija verzija se moe preuzeti sa adrese
http://www.php.net.
 Lako se ui i upotrebljava. Sintaksa PHP-a je slina sintaksama drugih
programskih jezika kao to su Perl, C, Java.
 Prenosivost. PHP je na raspolaganju za mnoge OS. PHP kod se moe pisati
pod jednim od OS iz porodice Unix, ili pod raznim verzijama Windows-a.
Napisani kod najee e raditi bez izmena i pod drugim OS u kojima je instaliran
PHP.

Prednosti PHP-a (2)


 Izvorni kod je dostupan svima. Jeziku PHP se slobodno moe neto dodavati
ili menjati, tj. ne mora se brinuti o proizvoau.
 Dobra podrka za objektno-orijentisano programiranje. Verzija PHP 5 donosi
objektno-orijentisane mogunosti, kao to su nasleivanje, privatni i zatieni
atributi i metode, apstraktne klase i metode, intefejsi, konstruktori i destruktori.
 Ugraene biblioteke za obavljanje velikog broja poslova uobiajenih u Web
aplikacijama. PHP-ove biblioteke omoguavaju veliki broj funkcija kao to su:
generisanje slike tokom rada aplikacije, uspostavljanje veze sa Web servisima,
korienje XML dokumenata, generisanje PDF dokumenata, slanje poruke email-om, itd.
 Povezivanje sa brojnim sistemima za upravljanje bazama podataka. PHP
standardno omoguava uspostavljanje veza sa vie sistema za upravljanje
bazama podataka, kao to su: MySQL, Oracle, dbm, Informix, InterBase, mSQL i
dr.

Upotreba PHP-a (1)


Jedna od najeih primena serverskih skript jezika je obrada HTML formi.
Primer: forma.html
<form action=obradanar.php method=post>
<table border=0>
Stavka
Kolicina
<tr bgcolor=#ffff00>
Olovka
<td width=150>Stavka </td>
Sveska
<td width=15>Kolicina </td>
</tr>
Poslati narudzbenicu
<tr>
<td>Olovka</td>
<td align=center><input type=text name=olovkakol size=3 maxlength=3/></td>
</tr>
<tr>
<td>Sveska</td>
<td align=center><input type=text name=sveskakol size=3 maxlength=3/></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value=Poslati narudzbenicu/></td>
</tr> </table> </form>

Upotreba PHP-a (2)


Da bismo obradili podatke koje je korisnik uneo u polja forme, treba da
napravimo skript zadat u atributu action taga form. Skript u sutini predstavlja
HTML kod u koji je ugraen PHP kod tako to je definisana sekcija:
<?php PHP kod ?>
Skript: obradanar.php
<html>
<head>
<title>Knjizara - Rezultati</title>
</head>
<body>
<h1>Knjizara</h1>
<h2>Rezultati narudzbe</h2>
<?php
echo <p>Narudzbenica je obradjena.</p>;
?>
</body>
</html>

Rezultati rada skripta e se dobiti u


Web browser-u nakon toga to
korisnik unese podatke u formu i
pritisne dugme Poslati narudzbenicu.

Knjizara
Rezultati narudzbe
Narudzbenica je obradjena.

Upotreba PHP-a (3)


PHP skript na serveru
<html>
<head>
<title>Knjizara - Rezultati</title>
</head>
<body>
<h1>Knjizara</h1>
<h2>Rezultati narudzbe</h2>
<?php
echo <p>Narudzbenica je obradjena.</p>;
?>
</body>
</html>

PHP skript kako ga vidi Web browser


<html>
<head>
<title>Knjizara - Rezultati</title>
</head>
<body>
<h1>Knjizara</h1>
<h2>Rezultati narudzbe</h2>
<p>Narudzbenica je obradjena.</p>
</body>
</html>

PHP naredbe se ne vide na klijentskoj strani zato to je interpreter PHP koda naredbe
zamenio rezultatom. To znai da se iz PHP koda dobija isti HTML kod koji se moe gledati
pomou svakog itaa, odnosno itai ne moraju da razumeju PHP.
PHP kod se interpretira i izvrava na serveru (za razliku od JavaScript koda koji se izvrava
unutar itaa na klijentskoj strani).

Sintaksa PHP-a
PHP tag, koji pokazuje serveru gde poinje, a gde se zavrava PHP kod u okviru HTML koda,
moe biti napisan na etiri ekvivalentna naina (stila):
 XML stil - Ovaj stil se preporuuje. Moe se koristiti sa XML dokumentima. Administrator
servera ga ne moe iskljuiti.
<?php echo <p>Narudzbenica je obradjena.</p>; ?>
 Skraeni stil - Da bi se koristio ovaj stil, mora se u konfiguracionoj PHP datoteci setovati
opcija short_tags. Stil se ne preporuuje, jer ga administratori ponekad iskljuuju, to moe da
dovede do pogrenog tumaenja XML dokumenata.
<? echo <p>Narudzbenica je obradjena.</p>; ?>
 SCRIPT stil - Ovaj stil je najdui. Moe se koristiti ako HTML editor pravi probleme sa
drugim stilovima.
<SCRIPT LANGUAGE=php> echo <p>Narudzbenica je obradjena.</p>; /script>
.

 ASP stil - Ovaj stil se koristi u okruenjima ASP i ASP.NET (opcija asp_tags mora biti
setovana). Standardno je iskljuen.
<% echo <p>Narudzbenica je obradjena.</p>; %>

PHP iskazi i beline


PHP iskazi (PHP statements) se nalaze izmeu poetnog i zavrnog PHP taga i
odreuju ta interpreter PHP koda treba da uradi. Na kraju svakog iskaza nalazi
se znak ;.
Primer:

echo <p>Narudzbenica je obradjena.</p>;

Naredba echo tampa, tj. ispisuje u itau tekst koji joj se zada.

Beline (white spaces), kao to su novi red i tabulator, koje su ispisane u PHP
kodu se zanemaruju (kao i u HTML kodu). Ipak, beline treba koristiti da bi kod
stranica bio itljiviji.
Primer: Iskazi
echo hello;
echo world;

su identini, ali se prvi kod lake ita.

echo hello; echo world;

10

Dodavanje dinamikog sadraja


Glavni razlog upotrebe PHP skriptova jeste mogunost lake izrade dinamikog
sadraja. To je bitna primena, jer sadraj koji se menja periodino, ili prema
potrebama korisnika podstie posetioce da ee pristupaju Web stranici.
PHP kod
<?php
echo <p>Narudzbenica je obradjena u ;
echo date(H:i);
echo .</p>;
?>

Izgled na stranici

Knjizara
Rezultati narudzbe
Narudzbenica je obradjena u 12:42.

PHP sadri bogatu biblioteku funkcija koje se mogu koristiti u Web aplikacijama.
Veini funkcija ili treba proslediti neke podatke, ili one vraaju neke podatke.
Argument ili parametar funkcije je ulazni podatak koji se prosleuje kao znakovni
niz izmeu zagrada.

11

Pristup promenljivama forme (1)


PHP omoguava lak pristup podacima koje je korisnik uneo u polja forme, ali nain preuzimanja
podataka zavisi od verzije PHP-a i od parametara u datoteci php.ini.
Iz PHP skripta se svakom polju forme moe pristupiti preko istoimene PHP promenljive
(variable). Imena promenljivih u PHP-u poinju znakom $.
Postoje tri naina pristupanja podacima u zavisnosti od verzije PHP-a:
 Kratki stil Ovo je vrlo jednostavan nain pristupa. Imena promenljivih u skriptu su ista kao
imena polja u formama. Svim lokalnim promenljivama moraju se zadati poetne vrednosti.
$olovkakol

 Srednji stil Ovaj stil podrazumeva uitavanje vrednosti promenljivih forme iz jednog od
nizova: _POST, _GET ili _REQUEST. Vrednosti svih polja forme e se nalaziti u nizu _POST ili
_GET, zavisno od upotrebljene metode za slanje forme. Bez obzira na metodu, sve vrednosti se
nalaze i u nizu _REQUEST.
$_POST[olovkakol]
 Dugi stil Ovaj stil omoguava uitavanje vrednosti promenljivih forme preko
$HTTP_POST_VARS ili $HTTP_GET_VARS. Poto je zastareo, ovaj stil e biti ukinut.
$HTTP_POST_VARS[olovkakol]

12

Pristup promenljivama forme (2)


S obzirom da su srednji i dugi stil malo nezgrapni i zahtevaju rad sa nizovima, obino se
prave kopije promenljivih koje se jednostavnije upotrebljavaju. One se obino stavljaju na
poetak skripta:
<?php
// formira promenljive sa kratkim imenima
$olovkakol = $_POST[olovkakol];
$sveskakol = $_POST[sveskakol];
echo <p>Narucili ste sledece: </p>;
echo $olovkakol. olovke<br />;
echo $sveskakol. sveske<br />;
?>

Izgled na stranici

Knjizara
Rezultati narudzbe
Narudzbenica je obradjena u 12:42.
Narucili ste sledece:
2 olovke
3 sveske

Navedeni kod pravi dve nove promenljive $olovkakol i $sveskakol, koje sadre podatke
poslate iz forme metodom POST. U iskazu echo, taka (.) se koristi za nadovezivanje
teksta, tj. konkatenaciju.
U PHP-u, ime promenljive se moe pisati unutar navodnika zajedno sa drugim tekstom i tada ga PHP
zamenjuje odgovarajuom vrednou. Ovo ne vai ako se za predstavljanje teksta koriste apostrofi.
echo $olovkakol olovke<br />;

13

Identifikatori
Identifikatori predstavljaju imena promenljivih, imena funkcija i imena klasa.
Za identifikatore vae sledea pravila:
 Identifikatori mogu biti bilo koje duine i mogu se sastojati od slova, brojeva i
podvlaka.
 Identifikatori ne mogu da poinju cifrom.
 PHP pravi razliku izmeu malih i velikih slova u identifikatorima. Izuzetak su
imena funkcija.
 Promenljiva moe imati isto ime kao i funkcija, ali bi to zbog mogue zabune
trebalo izbegavati.

14

Korisnike promenljive
Osim promenljivih koje su prosleene iz forme, u skriptovima se mogu koristiti i
promenljive koje korisnik sam deklarie. U PHP-u ne treba deklarisati promenljive
pre nego to e biti koriene.
Primer: Ako elimo da izraunamo ukupan broj naruenih artikala i njihovu
ukupnu vrednost, moemo uvesti dve promenljive koje e na poetku biti
inicijalizovane na vrednost 0.
<?php
// formira promenljive sa kratkim imenima
$olovkakol = $_POST[olovkakol];
$sveskakol = $_POST[sveskakol];
echo <p>Narucili ste sledece: </p>;
echo $olovkakol. olovke<br />;
echo $sveskakol. sveske<br />;
$totalkol = 0;
$totalsuma = 0;
?>

15

Tipovi promenljivih
PHP podrava sledee osnovne tipove podataka:
 integer celobrojni tip, koristi se za predstavljanje celih brojeva
 double ili float pokretni zarez, koristi se za predstavljanje realnih brojeva
 string znakovni tip, koristi se za predstavljanje znakovnih podataka
 boolean logiki tip, koristi se za predstavljanje podataka tipa tano i netano
 array niz, koristi se za uvanje vie podataka istog tipa
 object objekat, koristi se za uvanje instanci klasa
Postoje i dva specijalna tipa podataka:
 NULL ovog tipa su promenljive kojima nije dodeljena vrednost, koje su
nedefinisane ili kojima je izriito dodeljena vrednost NULL.
 resurs predstavljaju spoljne resurse, kao to su veze sa bazama podataka.
Neke ugraene funkcije vraaju promenljive ovog tipa.

16

Konstante
Konstanta predstavlja vrednost koja se jednom zadaje i vie se ne moe
menjati.
 Da bi se olakalo razlikovanje promenljivih i konstanti, usvojeno je da se
imena konstanti piu velikim slovima (mada nije obavezno).
 Ispred konstante se ne pie $.
 Ako se eli upotrebiti vrednost konstante, navodi se samo njeno ime.
 Konstante mogu sadrati samo podatke skalarnog tipa, tj. logikog tipa,
celobrojnog, znakovnog i numerike podatke s pokretnim zarezom.
U izvrnom PHP okruenju definisan je veliki broj konstanti, koje se mogu
pregledati pomou komande phpinfo().
Primer: Cene artikala se mogu definisati kao konstante.
define(OLOVKACENA, 20);
define(SVESKACENA, 45);

17

Operatori
Operatori su simboli koji omoguavaju izvravanje operacija nad vrednostima i
promenljivama.
U PHP-u postoje sledee vrste operatora:
 Aritmetiki operatori
 String operator (operator za konkatenaciju, tj. spajanje stringova)
 Operatori dodele (na pr. =, +=, -=, i dr.)
 Operatori poreenja
 Logiki operatori
 Operatori nad bitovima
 Operatori za rad sa nizovima (na pr. [ ] za pristup elementu niza)
 Ostali operatori (na pr. operator zanemarivanja greke, uslovni operator, i dr.)

18

Aritmetiki i operatori poreenja


Aritmetiki operator

Ime

Primer

sabiranje

$a + $b

oduzimanje

$a - $b

mnoenje

$a * $b

deljenje

$a / $b

moduo

$a % $b

Operatori poreenja

Ime

Primer

==

jednako

$a == $b

!=

razliito

$a != $b

<

manje od

$a < $b

>

vee od

$a > $b

>=

vee ili jednako

$a >= $b

<=

manje ili jednako

$a <= $b

Aritmetiki operatori se
obino primenjuju na
brojeve. Ako se primene
na string, pokuae se
njegovo pretvaranje u
broj. Ako string sadri e
ili E, pretvorie se u
float, inae u ceo broj.
Izrazi u kojima se
koriste operatori
poreenja vraaju
logiku vrednost true ili
false.
Operator == se esto
mea sa operatorom
dodele =, to ne vodi
eljenom rezultatu.

19

Logiki i operatori nad bitovima


Logiki operator

Ime

Primer

Rezultat

negacija

!$a

Vraa true ako je $a false i obrnuto.

&&

konjunkcija

$a && $b

Vraa true samo ako su $a i $b true.

||

disjunkcija

$a || $b

Vraa true ako je bar jedan operand true.

and

konjunkcija

$a and $b

Isto kao &&, ali sa niim prioritetom.

or

disjunkcija

$a or $b

Isto kao ||, ali sa niim prioritetom.

Opr. nad bitovima

Ime

Primer

Rezultat

&

konjunkcija

$a & $b

Bitovi aktivni u $a i $b aktivni su u rezultatu.

disjunkcija

$a | $b

Bitovi aktivni u $a ili $b aktivni su u rezultatu.

negacija

~ $a

Bitovi aktivni u $a nisu aktivni u rezultatu.

iskljuiva dijunkcija

$a ^ $b

Bitovi aktivni ili u $a ili u $b ali ne u oba, aktivni


su u rezultatu.

<<

pomeranje ulevo

$a << $b

Pomera bitove $a u levo za $b mesta.

>>

pomeranje udesno

$a >> $b

Pomera bitove $a u desno za $b mesta.

20

Operatori za rad sa nizovima


Operator

Ime

Primer

Rezultat

unija

$a + $b

Vraa niz koji se sastoji od svih


elemenata $a i $b.

==

jednako

$a == $b

Vraa true ako $a i $b imaju jednake


elemente.

===

identino

$a === $b

Vraa true ako $a i $b imaju jednake


elemente u jednakom redosledu.

!=

razliito

$a != $b

Vraa true ako je $a razliit od $b.

<>

razliito

$a <> $b

Vraa true ako je $a razliit od $b.

!==

nije identino $a !== $b

Vraa true ako $a nije identian $b.

21

Upravljake strukture
Upravljake strukture omoguavaju upravljanje tokom izvrenja programa ili
skripta.
Upravljake strukture se mogu grupisati u:
 Uslovne strukture sa grananjem konkstrukcije koje programu omoguavaju
donoenje odluka
 Iskaz if
 Iskaz else
 Iskazi elseif
 Iskaz switch
 Strukture sa ponavljanjem ili petlje konstrukcije za ponavljanje odreenog
bloka koda u programu
 Petlja while
 Petlja for
 Petlja do... while

22

Uslovne strukture sa grananjem (1)


Iskaz if
Upotrebljava se za donoenje odluke u
zavisnosti od odreenog uslova. Ako je uslov
ispunjen (vraa true), izvrava se blok koda
koji sledi iza iskaza if; u suprotnom e blok
biti preskoen. Uslovi se navode izmeu
zagrada.

Iskaz else
Definie alternativnu akciju koju treba
preduzeti ako uslov u if iskazu nije ispunjen.

Iskaz elseif ili else if


Odreuje redosled obrade vie opcija.
Zadaje se vie uslova u datom redosledu, a
program izvrava blok koda koji odgovara
samo prvom ispunjenom uslovu.

Primeri
if($totalkol == 0) {
echo Niste nista uneli!<br />;
}
else {
echo $olovkakol. olovke<br />;
echo $sveskakol. sveske<br />;
}
if($totalkol < 0)
$popust = 0;
elseif ($olovkakol >=10 && $olovkakol <=49)
$popust = 5;
elseif ($olovkakol >=50 && $olovkakol <=99)
$popust = 10;
elseif ($olovkakol >=100)
$popust = 15;

23

Uslovne strukture sa grananjem (2)


Iskaz switch
Omoguava da uslov ima vie od dve
vrednosti (u iskazu if, uslov moe imati
samo dve vrednosti true ili false).
U iskazu switch, uslov moe imati vie
razliitih vrednosti, koje moraju biti
skalarnog tipa (integer, string ili float).
Za svaku vrednost koja se eli obraditi,
potrebno je napisati iskaz case, i
eventualno podrazumevani iskaz case za
sve ostale vrednosti.
PHP izvrava iskaze od odgovarajue
oznake case do iskaza break. Bez iskaza
break, izvravaju se svi iskazi iza iskaza
case. Kada se doe do break, izvravanje
se nastavlja iza iskaza switch.

Primer: ispitivanje koja reklama je privukla kupca


HTML kod
<select name=find>
<option value = a>Ja sam obican potrosac.</option>
<option value = b>Cuo sam na televiziji.</option>
</select>
PHP kod
podrazumeva se da je uitana iz niza POST
switch($find)
{
case a :
echo <p>Obican potrosac.</p>;
break;
case b :
echo <p>TV reklame.</p>;
break;
default :
echo <p>Ne zna se.</p>;
break;
}

24

Strukture sa ponavljanjem (1)


Petlja while
Izvrava blok koda dok god je zadati
uslov ispunjen. Ova petlja se obino
koristi kada ne znamo unapred koliko e
iteracija biti potrebno.
Osnovna struktura petlje je:
while (uslov) izraz;
Primer: prikaz brojeva od 1 do 5
$num = 1;
while ($num <= 5)
{
echo $num.<br />;
$num++;
}

Petlja for
Koristi se kada se zna koliko je iteracija potrebno.
Osnovna struktura petlje je:
for (izraz1; uslov; izraz2) izraz3;
izraz1 se izvrava jednom na poetku i zadaje
poetnu vrednost brojaa
uslov se ispituje pre svake iteracije; ako nije
ispunjen, petlja prestaje; uslov obino ispituje da li
je broja doao do neke granice
izraz2 se izvrava na kraju svake iteracije;
obino menja vrednost brojaa
izraz3 se izvrava jednom u svakoj iteraciji; to je
obino blok koda
Primer: prikaz brojeva od 1 do 5
for ($i=1; $i <= 5; $i++) {
echo $i.<br />;
}

25

Strukture sa ponavljanjem (2)


Petlja do...while
Izvrava blok koda bar jednom, jer se uslov
za izlazak iz petlje nalazi na njenom kraju.
Osnovna struktura petlje je:
do
izraz;
while (uslov);
Primer: prikaz brojeva od 1 do 5
$num = 1;
do
{
echo $num.<br />;
$num++;
}
while ($num <= 5);

Izlazak iz upravljake strukture


Postoje tri naina da se prekine
izvravanje bloka koda:
 iskaz break izvravanje skripta e se
nastaviti od prvog reda iza petlje
 iskaz continue zapoinje novu
iteraciju petlje
 iskaz exit prekida izvravanje celog
PHP skripta; koristi se kada se utvrdi
neka greka

26

Nizovi
Niz (array) je promenljiva koja sadri skup vrednosti u nekom
redosledu. Jedan niz moe imati vie elemenata, a svaki element
sadri jednu vrednost (na pr. tekst, broj, drugi niz). Svakom elementu
niza pridruen je indeks pomou koga se pristupa elementu.
PHP podrava:
 numeriki indeksirane nizove, koji su slini nizovima u drugim
programskim jezicima
 asocijativne nizove, kod kojih indeksi mogu biti rei ili druge
informacije

27

Nizovi sa numerikim indeksima (1)


U PHP-u, numeriki indeksi poinju nulom, mada se umesto ove moe zadati i
neka druga vrednost.
Inicijalizacija niza sa numerikim indeksima se obavlja primenom jezike
konstrukcije array().
$proizvodi = array(Olovka, Sveska, Knjiga);
Niz se ne mora inicijalizovati runo:
 Ako se podaci ve nalaze u drugom nizu, mogu se iskopirati u dati niz
primenom operatora =.
 Ako se eli niz rastuih brojeva, moe se upotrebiti funkcija range().
$brojevi = range(1, 10);
$neparni = range(1, 10, 2);
$slova = range(a, z);

28

Nizovi sa numerikim indeksima (2)


Pristupanje sadraju niza se obavlja pomou imena niza i indeksa koji odreuje element kome se
pristupa. Indeks se zadaje u okviru uglastih zagrada.

$proizvodi[0]
Sadraj elementa niza menja se pomou operatora =.

$proizvodi[0] = Lenjir;
Dodavanje novog elementa na kraj niza se obavlja na sledei nain:

$proizvodi[3] = Bojice;
Sadraj niza se moe prikazati sledeim kodom

echo $proizvodi[0] $proizvodi[1] $proizvodi[2] $proizvodi[3];

ili u for petlji

for ($i = 0; $i < 3; $i++)


echo $proizvodi[$i] ;
Sadraj niza se moe prikazati i posebnom, foreach petljom za rad sa nizovima (svaki element niza se
redom smeta u promenljivu $tekuci ija se vrednost onda ispisuje):

foreach ($proizvodi as $tekuci)


echo $tekuci. ;

29

Asocijativni nizovi (1)


U PHP-u postoje nizovi u kojima se svakom elementu moe pridruiti indeks koji elimo.
Inicijalizacija niza u kome su imena proizvoda indeksi, a cene vrednosti:
$cene = array(Olovka=>10, Sveska=>30, Knjiga=>150);
Isti niz se moe inicijalizovati i samo jednim elementom, uz dodavanje ostalih
$cene = array(Olovka=>10);
$cene[Sveska] = 30;
$cene[Knjiga] = 150;
ili bez eksplicitnog pravljenja niza
$cene[Olovka] = 10;
$cene[Sveska] = 30;
$cene[Knjiga] = 150;
Sadraju navedenog niza se moe pristupiti u obliku:
$cene[Olovka], $cene[Sveska], $cene[Knjiga]

30

Asocijativni nizovi (2)


Rad u petlji sa asocijativnom nizovima zahteva korienje foreach petlje, ili funkcija list() i
each().
Struktura foreach petlje u ovom sluaju ukljuuje i indekse:
foreach ($cene as $indeks => $vrednost);
echo $indeks. => .$vrednost. <br />;
Sadraj niza se moe nabrajati pomou funkcije each():
while ($element = each($cene)) {
echo $element[key];
echo - ;
echo $element[value];
echo <br />;
}
Funkcija each() ita tekui element niza i pomera interni pokaziva na naredni element.
Poto se poziva unutar while petlje, ona redom poziva elemente niza i zaustavlja se kad
doe do njegovog kraja. U navedenom kodu, promenljiva $element je niz od dva elementa.

31

Asocijativni nizovi (3)


Sadraj niza se moe nabrajati i pomou funkcije list(). Dve vrednosti
koje daje funkcija each() mogu se razdvojiti na sledei nain:
list( $proizvod, $cena ) = each( $cene );
Funkcija list pretvara elemente 0 i 1 iz niza koji je vratila funkcija each u
dve nove promenljive $proizvod i $cena.
Ceo niz $cene moe se obraditi u petlji:
while ( list( $proizvod, $cena ) = each( $cene ))
echo $proizvod - $cena<br />;

32

PHP i baze podataka


Osnovna arhitektura sistema za pristup bazama podataka iz Web aplikacija sastoji se od
Web browser-a, Web servera, maine za izvravanje skriptova i servera baze podataka.
2

Web browser

Web server
6

Izvrno okruenje
za PHP

3
4

Server baze
podataka

Tipina transakcija baze podataka na Web-u sastoji se od sledeih koraka:


1. Korisnikov Web browser alje HTTP zahtev za odreenu Web stranicu (.php)
2. Web server prima zahtev za prikazivanje stranice, uitava datoteku u kojoj se ona
nalazi i sadraj datoteke prosleuje izvrnom okruenju na obradu.
3. PHP-ovo izvrno okruenje poinje sintaksnu analizu skripta. Ako skript sadri naredbe
za uspostavljanje veze sa bazom podataka, PHP otvara vezu sa serverom baze i alje
mu odgovarajui upit.
4. Server baze prima upit, obrauje ga i rezultat vraa izvrnom okruenju.
5. PHP-ovo izvrno okruenje zavrava odradu skripta, to podrazumeva i formatiranje
rezultata upita u HTML kod koji alje Web serveru.
6. Dobijeni HTML kod, Web server prosleuje itau koji ga prikazuje.

33

Stranica za pretraivanje baze podataka: search.html

Pretraivanje baze podataka (1)


<html>
<head>
<title>Book-O-Rama Catalog Search</title>
</head>
<body>
<h1>Book-O-Rama Catalog Search</h1>
<form action=results.php method=post>
Choose Search Type:<br />
<select name=searchtype>
<option value=author>Author</option>
<option value=title>Title</option>
<option value=isbn>ISBN</option>
</select>
<br />
Enter Search Term:<br />
<input name=searchterm type=text>
<br />
<input type=submit value=Search>
</form>
</body>
</html>

Primer: pretraivanje baze podataka koja sadri


katalog knjiga
Najpre treba omoguiti korisniku da unese
podatke po kojima e se pretraivati, tj. treba
generisati HTML stranicu sa formom za unos
podataka. Kada korisnik unese kriterijum pretrage
(u ovom primeru to moe biti autor, ime knjige ili
isbn kod knjige) i kljunu re, pritiskom na dugme
Search poziva se skript results.php koji se nalazi
na Web serveru.
Izgled stranice za pretraivanje

Book-O-Rama Catalog Search


Choose Search Type:
Author
Enter Search Term:
Search

34

PHP skript: results.php

Pretraivanje baze podataka (2)


<html>
1
<head>
<title>Book-O-Rama Search Results</title>
</head>
<body>
<h1>Book-O-Rama Search Results</h1>
<?php
// napravi promenljive s kratkim imenima
$searchtype=$_POST[serachtype];
$searchterm=$_POST[serachterm];
$searchterm=trim($serachterm);
if (!$searchtype || !$searchterm) {
echo You have not entered search details..
Please go back and try again.;
exit;
}
if (!get_magic_quotes_gpc()) {
$searchtype=addslashes($searchtype);
$searchterm=addslashes($searchterm);
}
@ $db = new mysqli(localhost, bookorama,
bookorama123, books);
if (mysqli_connect_errno()) {
echo Error: Could not connect to database..
Please try again later.;
exit; }

$query = select * from books where


2
.$searchtype. like%.$searchterm.%;
$result = $db->query($query);
$num_results = $result->num_rows;
echo <p>Number of books found: $num_results.</p>;
for ($i=0; $i < $num_results; $i++) {
$row = $result->fetch_assoc();
echo <p><strong>.($i+1).. Title: ;
echo htmlspecialchars(stripslashes($row[title]));
echo </strong><br />Author: ;
echo stripslashes($row[author]);
echo <br /> ISBN: ;
echo stripslashes($row[isbn]);
echo <br /> Price: ;
echo stripslashes($row[price]);
echo </p>;
}
$result->free();
$db->close ();
?>
</body>
</html>

35

Sadraj skripta
U svakom skriptu koji pristupa bazi podataka sa Web-a treba da postoji
odgovarajui kod za sledee osnovne korake:
1. Provera podataka koje je korisnik uneo.
2. Filtriranje ulaznih podataka.
3. Uspostavljanje veze sa odgovarajuom bazom podataka.
4. Zadavanje upita toj bazi podataka.
5. Uitavanje rezultata.
6. Prikaz rezultata korisniku.

36

Provera ulaznih podataka


Pre nego to se uspostavi veza sa bazom podataka, potrebno je proveriti
ispravnost podataka koje je korisnik uneo.
Provera podataka obuhvata sledee korake:
a) Najpre treba ukloniti beline koje je korisnik moda uneo. To se radi funkcijom
trim() koja se primenjuje na ulazne promenljive.
$searchterm=trim($serachterm);
b) Zatim treba proveriti da li je korisnik uneo pojam koji trai i kriterijum pretrage.
Ovde se vidi vanost prethodnog koraka, jer pojam koji se sastoji samo od
beline funkcija trim() brie.
if (!$searchtype || !$searchterm) {
echo You have not entered search details..
Please go back and try again.;
exit;
}

37

Filtriranje ulaznih podataka


Da bi se ispravno obradili podaci koje korisnik alje, neophodno je filtrirati upravljake
znakove (, , \ i znak NULL) iz tih podataka. PHP podrava vie funkcija za formatiranje
stringova radi unoenja u bazu podataka.
Pre nego to se proslede bazi podataka, svi podaci koje korisnik alje moraju se obraditi
pomou sledeih funkcija:
a) addslashes(). Ova funkcija dodaje znak \ ispred svakog upravljakog znaka. Na primer,
nakon primene ove funkcije postaje \ , a \ postaje \\. Argument funkcije je string, a
rezultat je formatiran string.
b) get_magic_quotes_gpc(). PHP moe biti podeen tako da automatski dodaje i uklanja \.
Provera da li je sistem tako podeen obavlja se pomou navedene funkcije (tzv.
mehanizam maginih navodnika). Sufiks gpc je skraenica za GET, POST i COOKIES,
to znai da se automatski konvertuju promenljive iz tih izvora.
if (!get_magic_quotes_gpc()) {
$searchtype=addslashes($searchtype);
$searchterm=addslashes($searchterm);
}

38

Filtriranje rezultata
Pre prikazivanja korisniku, podatke dobijene iz baze podataka takoe treba
filtrirati, kako bi se iz njih izbacio znak \ unet prilikom filtriranja ulaznih podataka,
i izbegao pogrean rad baze zbog specijanih znakova u HTML-u.
Pre nego to se prikau korisniku, podatke treba obraditi pomou sledeih
funkcija:
a) stripslashes(). Ova funkcija izbacuje znak \ iz zadatog stringa. Njome se
podaci moraju obraditi ukoliko je mehanizam maginih navodnika bio ukljuen.
b) htmlspecialchars(). Ova funkcija se koristi za pretvaranje znakova koji u
HTML-u imaju specijalno znaenje (&, , < i >) u HTML entitete. Na primer, znak
< pretvara se u &lt;.

39

Uspostavljanje veze sa bazom (1)


PHP5 ima novu biblioteku funkcija za uspostavljanje veza sa bazama podataka, koja se zove
mysqli (i od improved). Ova biblioteka podrava upotrebu i objektno-orijentisane i proceduralne
sintakse.
Objektno-orijentisani oblik sintakse je:
@ $db = new mysqli(localhost, bookorama, bookorama123, books);
Na ovaj nain je napravljena instanca klase mysqli i uspostavljena veza sa serverom localhost
pod korisnikim nalogom bookorama i lozinkom bookorama123, i odreena je baza podataka
books sa kojom e se raditi. Ovaj oblik omoguava da se sa bazom radi tako to se pozivaju
metodi objekta $db.
Proceduralni oblik sintakse je:
@ $db = mysqli_connect(localhost, bookorama, bookorama123, books);
Ova funkcija vraa rezultat tipa resurs, koji predstavlja vezu sa bazom podataka. Ovaj resurs
mora se proslediti svim ostalim funkcijama iz navedene biblioteke koje se pozivaju u kodu.
Napomena: Simbol @ predstavlja operator zanemarivanja greke i moe se upotrebiti ispred svakog izraza.
Ako se ovaj operator upotrebi, upozorenje o grekama se zanemaruje. Tada bi obavezno trebalo napisati kod
za obradu greaka.

40

Uspostavljanje veze sa bazom (2)


Rezultat pokuaja uspostavljanje veze sa bazom podataka se uvek mora proveriti
u kodu, jer ako on nije odgovarajui, preostali deo skripta nee raditi.
Blok koda za proveru uspenosti konekcije sa bazom je:
if (mysqli_connect_errno()) {
echo Error: Could not connect to database..
Please try again later.;
exit;
}
Funkcija mysqli_connect_errno vraa broj greke u sluaju neuspenog
povezivanja, odnosno 0 u sluaju uspenog.
Broj istovremenih veza koje se mogu uspostaviti sa MySQL serverom je ogranien
parametrom max_connections koji se podeava u datoteci my.conf.

41

Zadavanje upita bazi podataka


Pre izvravanja upita, preporuuje se njegovo definisanje u vidu stringa:
$query = select * from books where $searchtype like %$searchterm%;
U ovom upitu traimo pojam koji je korisnik zadao ($searchterm) u polju koje je
izabrao ($searchtype).
U objektno-orijentisanoj verziji, izvravanje upita se pokree pomou funkcije:
$result = $db->query($query);
Funkcija vraa objekat koji omoguava itanje rezultata upita.
U proceduralnoj verziji, upit se izvrava komandom:
$result = mysqli_query($db, $query);
Funkcija vraa identifikator tipa resurs.
U oba sluaja, ako se funkcija nije uspeno izvrila, rezultat je logika vrednost false.

42

Uitavanje rezultata upita (1)


Postoji vie funkcija koje omoguavaju da se pomou objekta ili identifikatora
rezultata uitaju rezultati upita. Objekat, odnosno identifikator rezultata je osnova za
pristupanje redovima koje je upit vratio.
Kada se koristi objektno-orijentisani oblik, broj redova koje je upit vratio smeta se u
svojstvo num_rows objekta rezultata ($result), kome se pristupa na sledei nain:
$num_results = $result->num_rows;
Kada se koristi proceduralni oblik, funkcija mysqli_num_rows(), iji je parametar
identifikator rezultata, vraa broj redova:
$num_results = mysqli_num_rows($result);
Broj vraenih redova je koristan podatak ako treba obraditi ili prikazati rezultate. Ako
je on poznat, moe se upotrebiti petlja:
for ($i = 0; $i < $num_results; $i++)
{ // obrada rezultata
}

43

Uitavanje rezultata upita (2)


Da bi se proitao jedan red iz skupa rezultata, u okviru for petlje se pozivaju
funkcije $result->fetch_assoc() (kod objektno-orijentisanog pristupa) ili
mysqli_fetch_assoc() (kod proceduralnog pristupa):
$row = $result->fetch_assoc(); ili

$row = mysqli_fetch_assoc($result);

Navedene funkcije itaju svaki red iz skupa rezultata i vraaju podatke u obliku
asocijativnog niza, u kome je svaki klju (indeks) ime jednog atributa, a svaka
vrednost u nizu je odgovarajua vrednost uitana iz baze.
Niz $row omoguava da se svako njegovo polje prikae u odgovarajuem obliku:
echo </strong><br />Author: ;
echo stripslashes($row[author]);
echo <br /> ISBN: ;
echo stripslashes($row[isbn]);
echo <br /> Price: ;
echo stripslashes($row[price]);

44

Uitavanje rezultata upita (3)


Red podataka iz skupa rezultata se moe vratiti i u vidu niza sa numerikim
indeksima. U tu svrhu se koriste sledee funkcije:
$row = $result->fetch_row();
ili
$row = mysqli_fetch_row($result);
U ovom sluaju, vrednosti atributa e se nalaziti u elementima niza $row[0], $row[1],
itd.
Red podataka se moe uitati i u obliku objekta na sledei nain:
$row = $result->fetch_object();
ili
$row = mysqli_fetch_object($result);
Svakom atributu se onda pristupa primenom sintakse: $row->title, $row->author, itd.

45

Prekidanje veze sa bazom


Skup rezultata se oslobaa pozivanjem metoda:
$result->free();
ili
mysqli_free_result($result);
Zatim se za zatvaranje baze moe koristiti metod:
$db->close();
ili funkcija
mysqli_close($db);
Pozivanje funkcija za zatvaranje baze nije obavezno, jer e se veza ionako
prekinuti po izvrenju skripta.

46

Unos podataka u bazu (1)


Unoenje podataka u bazu je vrlo slino itanju podataka iz nje. Osnovni koraci su isti, tj.
uspostavlja se veza sa bazom, alje upit i ispituju rezultati. Razlika je u tome to se sada
umesto upita tipa SELECT, alje upit tipa INSERT.
Stranica za unoenje novih knjiga u bazu: newbook.html
<html>
<head>
<title>Book-O-Rama New Book Entry</title>
</head>
<body>
<h1>Book-O-Rama New Book Entry</h1>

<form action=insert_book.php method=post>


<table border=0>
<tr>
<td>ISBN</td>
<td><input type=text name=isbn></td>
</tr>
<tr>
<td>Author</td>
<td><input type=text name=author></td>
</tr>

<tr>
2
<td>Title</td>
<td><input type=text name=title></td>
</tr>
<tr>
<td>Price</td>
<td><input type=text name=price></td>
</tr>
<tr>
<td colspan=2><input type=submit
value=Register></td>
</tr>
</form>
</body>
</html>

47

Unos podataka u bazu (2)


Izgled stranice za unos

Book-O-Rama New Book Entry


ISBN
Author
Title
Price $
Register

Podaci iz ove forme prosleuju se skriptu


insert_book.php koji ita dobijene podatke,
obavlja provere i pokuava da upie
podatke u bazu.

48

Unos podataka u bazu (3)


PHP skript: insert_book.php

<html>
1
<head>
<title>Book-O-Rama Book Entry Results</title>
</head>
<body>
<h1>Book-O-Rama Book Entry Results</h1>
<?php
$isbn=$_POST[isbn];
$author=$_POST[author];
$title=$_POST[title];
$price=$_POST[price];
if (!$isbn || !$author || !$title || !$price) {
echo You have not entered all the required details..
Please go back and try again.;
exit;
}

if (!get_magic_quotes_gpc()) {
2
$isbn=addslashes($isbn);
$author=addslashes($author);
$title=addslashes($title);
$price=doubleval($price);
}
@ $db = new mysqli(localhost, bookorama,
bookorama123, books);
if (mysqli_connect_errno()) {
echo Error: Could not connect to database..
Please try again later.;
exit;
}
$query = insert into books values
( .$isbn. , .$author. , .$title. , .$price. );
$result = $db->query($query);
if ($result)
echo $db->affected_rows. book inserted into database.;
$db->close ();
?>
</body>
</html>

49

Unos podataka u bazu (4)


Kod skripta insert_book.php je slian kodu skripta za pretraivanje baze podataka. On
implementira sledee korake:
1. Najpre se proverava da li je korisnik popunio sva polja u formi.
if (!$isbn || !$author || !$title || !$price) {
echo You have not entered all the required details..
Please go back and try again.;
exit;
}
2. Zatim se uneti podaci formatiraju u oblik pogodan za unos u bazu podataka.
if (!get_magic_quotes_gpc()) {
$isbn=addslashes($isbn);
$author=addslashes($author);
$title=addslashes($title);
$price=doubleval($price);
}
S obzirom da se u bazi cena uva u formatu pokretnog zareza, kose crte nisu potrebne tom podatku.
Filtriranje nepotrebnih znakova u numerikom polju postie se primenom funkcije dubleval().

50

Unos podataka u bazu (5)


3. Uspostavlja se konekcija sa bazom podataka.
4. Definie se upit koji se alje bazi podataka.
$query = insert into books values ( .$isbn. , .$author. , .$title. , .$price. );
$result = $db->query($query);
Znaajna razlika izmeu upotrebe upita INSERT u odnosu na SELECT je u nainu korienja
funkcije mysqli_affected_rows() (u proceduralnoj verziji) ili u objektno-orijentisanoj verziji
echo $db->affected_rows. book inserted into database.;
U prethodnom skriptu smo koristili funkciju mysqli_num_rows() da bismo saznali koliko redova
je vratio upit SELECT. Ako upit menja stanje u bazi (INSERT, DELETE i UPDATE) treba koristiti
funkciju mysqli_affected_rows() .

Izgled stranice nakon izvrenja


skripta insert_book.php

Book-O-Rama New Book Entry


1 book inserted into database.

You might also like