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


2

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

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

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 e-
mail-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.
5

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>
<td width=150>Stavka </td> Olovka
<td width=15>Kolicina </td> Sveska
</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>
6

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> Rezultati rada skripta e se dobiti u
<head> Web browser-u nakon toga to
<title>Knjizara - Rezultati</title>
</head>
korisnik unese podatke u formu i
<body> pritisne dugme Poslati narudzbenicu.
<h1>Knjizara</h1>
<h2>Rezultati narudzbe</h2>
<?php
echo <p>Narudzbenica je obradjena.</p>;
Knjizara
?> Rezultati narudzbe
</body> Narudzbenica je obradjena.
</html>
7

Upotreba PHP-a (3)


PHP skript na serveru PHP skript kako ga vidi Web browser
<html> <html>
<head> <head>
<title>Knjizara - Rezultati</title> <title>Knjizara - Rezultati</title>
</head> </head>
<body> <body>
<h1>Knjizara</h1> <h1>Knjizara</h1>
<h2>Rezultati narudzbe</h2> <h2>Rezultati narudzbe</h2>
<?php <p>Narudzbenica je obradjena.</p>
echo <p>Narudzbenica je obradjena.</p>; </body>
?> </html>
</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).
8

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>; %>
9

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; i echo hello; echo world;


echo world;

su identini, ali se prvi kod lake ita.


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 Izgled na stranici


<?php
echo <p>Narudzbenica je obradjena u ; Knjizara
echo date(H:i); Rezultati narudzbe
echo .</p>; 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 Izgled na stranici
// formira promenljive sa kratkim imenima
$olovkakol = $_POST[olovkakol]; Knjizara
$sveskakol = $_POST[sveskakol]; Rezultati narudzbe
echo <p>Narucili ste sledece: </p>; Narudzbenica je obradjena u 12:42.
echo $olovkakol. olovke<br />; Narucili ste sledece:
echo $sveskakol. sveske<br />;
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 Aritmetiki operatori se
obino primenjuju na
+ sabiranje $a + $b brojeve. Ako se primene
- oduzimanje $a - $b na string, pokuae se
njegovo pretvaranje u
* mnoenje $a * $b
broj. Ako string sadri e
/ deljenje $a / $b ili E, pretvorie se u
% moduo $a % $b float, inae u ceo broj.

Operatori poreenja Ime Primer Izrazi u kojima se


koriste operatori
== jednako $a == $b poreenja vraaju
!= razliito $a != $b logiku vrednost true ili
false.
< manje od $a < $b
> vee od $a > $b Operator == se esto
mea sa operatorom
>= vee ili jednako $a >= $b dodele =, to ne vodi
<= manje ili jednako $a <= $b 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 Primeri

Upotrebljava se za donoenje odluke u if($totalkol == 0) {


zavisnosti od odreenog uslova. Ako je uslov echo Niste nista uneli!<br />;
ispunjen (vraa true), izvrava se blok koda }
koji sledi iza iskaza if; u suprotnom e blok else {
biti preskoen. Uslovi se navode izmeu echo $olovkakol. olovke<br />;
zagrada. echo $sveskakol. sveske<br />;
}
Iskaz else
Definie alternativnu akciju koju treba if($totalkol < 0)
preduzeti ako uslov u if iskazu nije ispunjen. $popust = 0;
elseif ($olovkakol >=10 && $olovkakol <=49)
Iskaz elseif ili else if $popust = 5;
elseif ($olovkakol >=50 && $olovkakol <=99)
Odreuje redosled obrade vie opcija. $popust = 10;
Zadaje se vie uslova u datom redosledu, a elseif ($olovkakol >=100)
program izvrava blok koda koji odgovara $popust = 15;
samo prvom ispunjenom uslovu.
23

Uslovne strukture sa grananjem (2)


Iskaz switch Primer: ispitivanje koja reklama je privukla kupca

Omoguava da uslov ima vie od dve HTML kod


vrednosti (u iskazu if, uslov moe imati <select name=find>
samo dve vrednosti true ili false). <option value = a>Ja sam obican potrosac.</option>
<option value = b>Cuo sam na televiziji.</option>
U iskazu switch, uslov moe imati vie </select>
razliitih vrednosti, koje moraju biti
PHP kod podrazumeva se da je uitana iz niza POST
skalarnog tipa (integer, string ili float).
switch($find)
Za svaku vrednost koja se eli obraditi, {
case a :
potrebno je napisati iskaz case, i
echo <p>Obican potrosac.</p>;
eventualno podrazumevani iskaz case za break;
sve ostale vrednosti. case b :
echo <p>TV reklame.</p>;
PHP izvrava iskaze od odgovarajue break;
oznake case do iskaza break. Bez iskaza default :
break, izvravaju se svi iskazi iza iskaza echo <p>Ne zna se.</p>;
case. Kada se doe do break, izvravanje break;
se nastavlja iza iskaza switch. }
24

Strukture sa ponavljanjem (1)


Petlja while Petlja for
Izvrava blok koda dok god je zadati Koristi se kada se zna koliko je iteracija potrebno.
uslov ispunjen. Ova petlja se obino
Osnovna struktura petlje je:
koristi kada ne znamo unapred koliko e
iteracija biti potrebno. for (izraz1; uslov; izraz2) izraz3;

izraz1 se izvrava jednom na poetku i zadaje


Osnovna struktura petlje je: poetnu vrednost brojaa
uslov se ispituje pre svake iteracije; ako nije
while (uslov) izraz; ispunjen, petlja prestaje; uslov obino ispituje da li
je broja doao do neke granice
Primer: prikaz brojeva od 1 do 5 izraz2 se izvrava na kraju svake iteracije;
obino menja vrednost brojaa
izraz3 se izvrava jednom u svakoj iteraciji; to je
$num = 1;
obino blok koda
while ($num <= 5)
{ Primer: prikaz brojeva od 1 do 5
echo $num.<br />;
$num++; 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. Izlazak iz upravljake strukture

Osnovna struktura petlje je: Postoje tri naina da se prekine


izvravanje bloka koda:
do
izraz;  iskaz break izvravanje skripta e se
while (uslov); nastaviti od prvog reda iza petlje
Primer: prikaz brojeva od 1 do 5
 iskaz continue zapoinje novu
$num = 1; iteraciju petlje
do
{  iskaz exit prekida izvravanje celog
echo $num.<br />; PHP skripta; koristi se kada se utvrdi
$num++; neka greka
}
while ($num <= 5);
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.

1 2 3
Izvrno okruenje Server baze
Web browser Web server
6 5
za PHP 4
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

Pretraivanje baze podataka (1)


<html> Primer: pretraivanje baze podataka koja sadri
<head> katalog knjiga
Stranica za pretraivanje baze podataka: search.html

<title>Book-O-Rama Catalog Search</title>


</head> Najpre treba omoguiti korisniku da unese
<body> podatke po kojima e se pretraivati, tj. treba
<h1>Book-O-Rama Catalog Search</h1> generisati HTML stranicu sa formom za unos
podataka. Kada korisnik unese kriterijum pretrage
<form action=results.php method=post> (u ovom primeru to moe biti autor, ime knjige ili
Choose Search Type:<br /> isbn kod knjige) i kljunu re, pritiskom na dugme
<select name=searchtype> Search poziva se skript results.php koji se nalazi
<option value=author>Author</option> na Web serveru.
<option value=title>Title</option> Izgled stranice za pretraivanje
<option value=isbn>ISBN</option>
</select> Book-O-Rama Catalog Search
<br />
Enter Search Term:<br /> Choose Search Type:
<input name=searchterm type=text> Author
<br />
<input type=submit value=Search> Enter Search Term:
</form>
</body>
Search
</html>
34

Pretraivanje baze podataka (2)


<html> 1
<head>
<title>Book-O-Rama Search Results</title> $query = select * from books where 2
</head> .$searchtype. like%.$searchterm.%;
<body> $result = $db->query($query);
<h1>Book-O-Rama Search Results</h1> $num_results = $result->num_rows;
<?php echo <p>Number of books found: $num_results.</p>;
for ($i=0; $i < $num_results; $i++) {
PHP skript: results.php

// napravi promenljive s kratkim imenima


$searchtype=$_POST[serachtype]; $row = $result->fetch_assoc();
$searchterm=$_POST[serachterm]; echo <p><strong>.($i+1).. Title: ;
$searchterm=trim($serachterm); echo htmlspecialchars(stripslashes($row[title]));
if (!$searchtype || !$searchterm) { echo </strong><br />Author: ;
echo You have not entered search details.. echo stripslashes($row[author]);
Please go back and try again.; echo <br /> ISBN: ;
exit; echo stripslashes($row[isbn]);
} echo <br /> Price: ;
if (!get_magic_quotes_gpc()) { echo stripslashes($row[price]);
$searchtype=addslashes($searchtype); echo </p>;
$searchterm=addslashes($searchterm); }
} $result->free();
@ $db = new mysqli(localhost, bookorama, $db->close ();
bookorama123, books); ?>
if (mysqli_connect_errno()) { </body>
echo Error: Could not connect to database.. </html>
Please try again later.;
exit; }
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> 1 <tr> 2
<head> <td>Title</td>
<title>Book-O-Rama New Book Entry</title> <td><input type=text name=title></td>
</head> </tr>
<body> <tr>
<h1>Book-O-Rama New Book Entry</h1> <td>Price</td>
<td><input type=text name=price></td>
<form action=insert_book.php method=post> </tr>
<table border=0>
<tr> <tr>
<td>ISBN</td> <td colspan=2><input type=submit
<td><input type=text name=isbn></td> value=Register></td>
</tr> </tr>
<tr> </form>
<td>Author</td> </body>
<td><input type=text name=author></td> </html>
</tr>
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)


if (!get_magic_quotes_gpc()) { 2
$isbn=addslashes($isbn);
PHP skript: insert_book.php $author=addslashes($author);
$title=addslashes($title);
$price=doubleval($price);
}
@ $db = new mysqli(localhost, bookorama,
<html> 1 bookorama123, books);
<head> if (mysqli_connect_errno()) {
<title>Book-O-Rama Book Entry Results</title> echo Error: Could not connect to database..
</head> Please try again later.;
<body> exit;
<h1>Book-O-Rama Book Entry Results</h1> }
<?php $query = insert into books values
$isbn=$_POST[isbn]; ( .$isbn. , .$author. , .$title. , .$price. );
$author=$_POST[author]; $result = $db->query($query);
$title=$_POST[title]; if ($result)
$price=$_POST[price]; echo $db->affected_rows. book inserted into database.;
if (!$isbn || !$author || !$title || !$price) { $db->close ();
echo You have not entered all the required details.. ?>
Please go back and try again.; </body>
exit; </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() .

Book-O-Rama New Book Entry


Izgled stranice nakon izvrenja
skripta insert_book.php
1 book inserted into database.

You might also like