You are on page 1of 120

PHP i MySQL

Kako da napravim Web aplikaciju?

Draen Drakovi

Internet programiranje 2

Uvod u PHP

Draen Drakovi

Osnovni pojmovi - PHP

ta je PHP?
Jezik za pisanje skriptova koji rade na serveru, namenski projektovan za upotrebu na Webu Poetna verzija PHP-a napravljena 1994.godine Trenutno PHP verzije 5 PHP je proizvod otvorenog koda Personal Home Page, PHP Hypertext Preprocessor http://www.php.net

Uvod u PHP

Osnovni pojmovi - MySQL

ta je MySQL?
Brz i robustan sistem za upravljanje relacionim bazama podataka. MySQL je viekorisniki i vienitni sistem

SQL (Structed Query Language) je standardni jezik za upite u bazi podataka Zato koristimo PHP i MySQL?
Mogu da rade pod svakim poznatijim operativnim sistemom, ak i kod onih manje popularnih

Uvod u PHP

Prednosti PHP-a

Visoke performanse Povezivanje s velikim brojem sistema za upravljanje bazama podataka Ugraene biblioteke za obavljanje velikog broja poslova Niska cena Lako se ui i upotrebljava Dobra podrka za objektno orijentisano programiranje Prenosivost Izvorni kod dostupan svima Dobra podrka u sluaju problema
Uvod u PHP

Prednosti MySQL

Visoke performanse
http://web.mysql.com/benchmark.html

Niska cena Lako se konfigurie i ui Prenosivost Izvorni kod je javno dostupan iroko dostupna podrka u sluaju problema

Uvod u PHP

Aritmetiki operatori jezika PHP


Operator + * / %

Ime sabiranje oduzimanje mnoenje deljenje modulo

Primer $a + $b $a - $b $a * $b $a / $b $a % $b

Primer
$a = 16; $b = 10; $rezultat = $a + $b; // rezultat je 26 $rezultat = $a % $b; // rezultat je 6
Uvod u PHP

Operatori za znakovne vrednosti

Operator nadovezivanja znakovnih vrednosti moe se koristiti za spajanje dve znakovne vrednosti (slino kao sabiranje 2 broja) Primer $a = Drazen ; $b = drzi casove; $rezultat = $a.$b;

Promenljiva rezultat e u ovom sluaju sadrati znakovnu vrednost: Drazen drzi casove.

Uvod u PHP

Operatori dodele

Osnovni operator dodele (=) ita se kao dobija vrednost Na primer: $ukupno = 3; //ukupno dobija vrednost 3 Za sve operatore dodele vai sledee pravilo: vrednost celog iskaza dodele je vrednost koja je dodeljena operandu na levoj strani. Na primer: $b = 6 + ($a = 5); //b dobija vrednost 11 Zagrade se upotrebljavaju da se povea prioritet izrauvanja podizraza. Princip je isti kao u matematici!!!

Uvod u PHP

Kombinovani operatori dodele

Kombinovani operatori dodele postoje za svaki aritmetiki operator i za operator nadovezivanja znakovnih vrednosti
Upotreba $a += $b $a -= $b $a *= $b $a /= $b $a %= $b $a .= $b Ekvivalentan izrazu $a = $a + $b $a = $a - $b $a = $a * $b $a = $a / $b $a = $a % $b $a = $a . $b

Operator += -= *= /= %= .=

10

Uvod u PHP

Operatori ++ i -

prefiksno uveanje ++ i umanjenje -primer (prefiksno uveanje) $a = 4; echo ++$a; // rezultat je 5, a=5 sufiksno uveanje ++ i umanjenje -primer (sufiksno uveanje) $a = 4; echo $a++; // rezultat je 4, a=5 slino se ponaaju i operatori umanjenja

11

Uvod u PHP

Reference

Operator referenca (&, ampersend) se moe koristiti u kombinaciji sa operatorima dodele Primer:
$a = 5; $b = $a; $a = 7; // b je i dalje 5 -------------------$a = 5; $b = &$a; $a = 7; // i a i b su sada 7

Ponitavanje definicije jedne od promenljivih unset($b);

12

Uvod u PHP

Operatori poreenja
Operator == === != !== <> < > <= >= Ime jednako identino razliito nije identino razliito manje od vee od manje od ili jednako vee od ili jednako
Uvod u PHP

Upotreba $a == $b $a === $b $a != $b $a !== $b $a <> $b $a < $b $a > $b $a <= $b $a >= $b

13

Logiki operatori
Operator Ime ! && || and or

Upotreba Rezultat !$b $a && $b $a || $b $a or $b Vraa true ako je $b false i obrnuto Vraa true ako su $a i $b true Vraa true ako su $a i $b ili oba true Isto kao ||, ali nieg prioriteta

negacija konjunkcija disjunkcija konjunkcija disjunkcija

$a and $b Isto kao &&, ali nieg prioriteta

Na primer koristimo pri utvrivanju da li je vrednost promenljive $a izmeu 0 i 100. To omoguava operator logike konjunkcije (AND) :
$a >= 0 && $a <= 100

14

Uvod u PHP

Operatori nad bitovima


Operator Ime & | ~ ^ << >> konjunkcija disjunkcija negacija iskljuiva disj. pomeranje ulevo pomeranje udesno Upotreba $a & $b $a | $b ~$a $a ^ $b $a << $b $a >> $b Rezultat Bitovi koji su aktivni u $a i $b Bitovi koji su aktivni u $a ili $b Bitovi koji su aktivni u $a nisu u $b i obrnuto Bitovi aktivni ili u $a ili u $b, ali ne u oba Pomera bitove $a ulevo za $b mesta Pomera bitove $a udesno za $b mesta

15

Uvod u PHP

Jo neki operatori
Uslovni

operator (slino kao if-else) uslov ? uslov_true : uslov_false ($ocena > 5 ? polozio : pao); Operator zanemarivanja greke $a = @(27/0) Bez operatora @, izvrno okruenje bi generisalo upozorenje delite nulom
16
Uvod u PHP

Operatori za rad s nizovima


Operator Ime + == === != <> !==

Upotreba $a + $b $a == $b $a === $b $a != $b $a <> $b $a !== $b

Rezultat niz od svih elemenata $a i $b true, ako imaju jednake elemente true, ako imaju jednake elemente u jednakom redosledu true, ako je $a razliit od $b true, ako je $a razliit od $b true, ako $a nije identian $b

unija jednako identino razliito razliito nije identino

Operator instanceof
class nekaKlasa { }; nekiObjekat = new nekaKlasa(); if (nekiObjekat instanceof nekaKlasa) echo nekiObjekat je primerak klase nekaKlasa
Uvod u PHP

17

String
niz karaktera deklaracije apostrofi Primer1 navodnici Primer2 pomonih dokumenata <<< When_Will_It_End Bilo koja promenljiva se unutar stringa sa navodnicima se pretvara u string i izvrava, dok se kod apostrofa nita ne deava $a=17; echo Presli smo $a slajdova // tampa se 17 echo Presli smo $a slajdova // tampa se $a

18

Uvod u PHP

tampanje - echo, print


Mogu

se koristiti: echo zdravo; echo zdravo, pozdrav; echo (zdravo); print zdravo; print (zdravo);

19

Uvod u PHP

Funkcije za rad s promenljivama


string gettype(promenljiva) -utvruje tip promenljive int settype(promenljiva,tip) -menja tip promenljive boolean isset(promenljiva) - true ako je promenljiva definisana void unset(promenljiva) - ponitava def.promenljive boolean empty(var) -ispituje da li postoji promenljiva i da li ima vrednost koja nije nula is_array is_double, is_float, is_real is_long, is_int, is_integer is_string is_object is_null() is_scalar() is_numeric()

20

Uslovne strukture - iskaz if


Ako

je uslov ispunjen, izvrava se blok koda koji sledi iza if, u suprotnom se preskae
uslov

if(ocena == 5) echo Pali ste ispit!<br/>; //ako je uslov true bie izvren //iskaz echo
21
Uvod u PHP

Blok naredbi
esto

unutar jednog uslovnog iskaza, npr if, treba da se izvri vie iskaza:

if(ocena > 5) { echo <font color=red>; blok echo Polozili ste ispit!<br/>; echo </font>; }

22

Uvod u PHP

07.10.2006.

Iskazi else, elseif

if ($uslov == 0) { } else { } if ($kolicina < 10) $popust = 0; elseif ($kolicina >=10 && $kolicina<=99) $popust = 10; elseif ($kolicina >100) $popust = 20;
Uvod u PHP

23

Iskaz switch
uslov

moe imati vie razliitih vrednosti, koje moraju biti skalarnog tipa (integer, string, float)
switch ($navijac) { case c: echo <p>Crvena Zvezda</p>; break; case p: echo <p>Partizan</p>; break; default: echo <p>ne navija za klub</p>; break; }

24

Uvod u PHP

Petlje
ponavljanje WHILE FOR,

nekih akcija (0 ili vie puta)

FOREACH DO WHILE

25

Uvod u PHP

Petlja while

slino kao if, samo se blok ne izvrava kad je uslov ispunjen, nego dokle god je uslov ispunjen $brojac=0; while ($brojac<=5) { echo $brojac.<br/>; $brojac++; }

26

Uvod u PHP

Petlje for i foreach


for (izraz1, uslov, izraz2) izraz3; for ($i=1; $i<=$br_ljudi; $i++) { $temp=ime$i; } foreach se koristi za rad sa nizovima

27

Uvod u PHP

Petlja dowhile

do izraz;

while (uslov); uvek se izvri najmanje jednom (nezavisno od uslova)

$brojac=100; do { echo $brojac.<br/>; }

while ($brojac < 1);

28

Uvod u PHP

Zadatak 1
Napraviti

narudbenicu lekova u online apoteci, slino kao na slici:

29

Uvod u PHP

Zadatak 1
Kada

kupac odredi koliine i narui lekove, kao potvrda treba da mu se odtampa fiskalni raun sa sledeim podacima:
a) b) c) d) e)

datum i vreme kada su lekovi narueni ukupna koliina naruenih lekova koliina po stavkama ukupna cena rauna bez poreza i sa porezom; stopa poreza je 8%; Hvala! Doite nam ponovo! ako nije redovni kupac
Uvod u PHP

30

Rezultat

31

Uvod u PHP

Reenje (1)
<?php // kreiranje kracih imena varijabli $kolicina1 = $_POST['kolicina1']; $kolicina2 = $_POST['kolicina2']; $kolicina3 = $_POST['kolicina3']; $nadji = $_POST['nadji']; ?> <html> <head> <title>Online apoteka</title> </head> <body>

32

Uvod u PHP

Reenje (2)
<h1>Apoteka - narudzbina</h1> <h2>Fiskalni racun</h2> <?php echo echo echo echo '<p>Roba narucena u '; date('H:i, jS F'); '</p>'; '<p>Porucili ste: </p>';

$ukupno = 0; $ukupno = $kolicina1 + $kolicina2 + $kolicina3; //sabiranje echo 'Ukupna kolicina: '.$ukupno.'<br />';

33

Uvod u PHP

Reenje (3)
if( $ukupno == 0) { echo 'Niste kupili nista!<br />'; } else { if ( $kolicina1>0 ) echo $kolicina1.' andol<br />'; if ( $kolicina2>0 ) echo $kolicina2.' aspirin<br />'; if ( $kolicina3>0 ) echo $kolicina3.' vitamin C<br />'; echo '<br />'; } $ukupna_cena = 0.00;

34

Uvod u PHP

Reenje (4)
define('ANDOLCENA', 10); define('ASPIRINCENA', 100); define('VITCCENA', 25); $ukupna_cena = $kolicina1 * ANDOLCENA + $kolicina2 * ASPIRINCENA + $kolicina3 * VITCCENA;

//mnozenje

echo 'Ukupno bez poreza: '.number_format($ukupna_cena,2).' dinara<br/>'; $porez = 0.08; // porez je 8% $ukupna_cena = $ukupna_cena * (1 + $porez); //mnozenje echo 'Ukupno sa porezom: '.number_format($ukupna_cena,2).' dinara<br/>';

35

Reenje (5)
if($nadji == 'a') echo '<p>HVALA!</p>'; else echo '<p>Hvala! Dodjite nam ponovo!</p>';

?> </body> </html>

36

Uvod u PHP

Internet programiranje 2

Rad sa datotekama

Draen Drakovi

Snimanje i uitavanje podataka

Podatke moemo da skladitimo na 2 naina:


u obinu datoteku (flat file) u bazu podataka (database) Postupak upisivanja podataka u datoteku: Otvaranje datoteke. Ako ne postoji, treba je napraviti. Upisivanje podataka u datoteku. Zatvaranje datoteke. Postupak itanja podataka datoteke: Otvaranje datoteke. itanje podataka iz datoteke. Zatvaranje datoteke.

1. 2. 3. 1. 2. 3.

38

Rad sa datotekama

Otvaranje datoteke
funkcija

fopen

$fp = fopen("$DOCUMENT_ROOT/../www/02/naruciti.txt", w');

na poetku skripta mora da postoji:


$DOCUMENT_ROOT = $_SERVER[DOCUMENT_ROOT];

prvi parametar: lokacija datoteke .. oznaava roditeljki direktorijum osnovnog direktorijuma za dokumente (iz bezbednosnih razloga) drugi parametar: reim u kome se datoteka otvara

39

Rad sa datotekama

Otvaranje datoteke

Reimi za otvaranje:

r (otvara datoteku za itanje, od poetka) r+ (otvara datoteku za itanje i upisivanje, od poetka) w (otvara datoteku za upisivanje, od poetka; ako datoteka postoji, postojei sadraj se brie, ako ne postoji, sistem pokua da je napravi) w+ (otvara datoteku za upisivanje i itanje) x (otvara datoteku za upisivanje; kada datoteka postoji sistem je ne otvara, funkcija vraa false, a PHP generie upozorenje) x+ (otvara datoteku za upisivanje i itanje; ukoliko datoteka postoji, sistem je ne otvara, funkcija vraa false, a PHP generie upozorenje) a (otvara datoteku samo za dodavanje od kraja postojeeg sadraja) a+ (otvara datoteku za dodavanje i itanje od kraja postojeeg sadraja ako ga ima; ako datoteka ne postoji, sistem pokuava da je napravi) b (Binary - koristi se u kombinaciji sa nekim od ostalih reima) t (Text - koristi se u kombinaciji sa nekim od ostalih reima)

40

Upisivanje u datoteku

Koristimo sledee 2 funkcije: fwrite() =file write ili fputs() =file put string Poziv funkcije fwrite: fwrite ($fp, $tekst); upisuje znakovnu vrednost iz promenljiv $tekst u datoteku na koju upuuje promenljiva $fp trei parametar int duzina nije obavezan, a predstavlja maksimalan broj bajtova koje treba upisati Kada pravite datoteku s podacima, sami odreujete format u kojem e podaci biti snimljeni

41

Rad sa datotekama

Zatvaranje datoteke
funkcija

fclose:

fclose($fp);

vraa true ako je datoteka uspeno zatvorena, odnosno false ako nije

42

Rad sa datotekama

Jo neke funkcije

feof() -da li se dolo do kraja datoteke


while (!feof($fp))

itanje red po red:

fgets($fp, 999) -itanje teksta red po red dok ne naie na kraj reda, datoteke ili dok ne proita 998 bajtova fgetss($fp, int duz, string [dozvoljene_oznake]) fgetcsv($fp, int duz [,string granicnik]) readfile($DOCUMENT_ROOT/../prodaja/racun.txt) -otvara datoteku i prosleuje njen sadraj direktno na standardni izlaz

itanje cele datoteke:

43

Rad sa datotekama

Jo neke funkcije (2)


$filearray=file($DOCUMENT_ROOT/../prodaja/racun.txt) -uitava datoteku u niz i svaki red datoteke smeta u zaseban element niza fpassthru($fp); -vraa true ako uspeno proe fopen Datoteka moe da se ita i znak po znak: $char = fgetc($fp) //fp je pokaziva na datoteku itanje niza proizvoljne duine fread($fp, int duzina) uitava iz datoteke zadati broj bajtova ili koliko ih je preostalo do kraja datoteke Provera da li datoteka postoji: file_exists($DOCUMENT_ROOT/../prodaja/racun.txt);

44

Jo neke funkcije (3)

Utvrivanje veliine datoteke: filesize($DOCUMENT_ROOT/../prodaja/racun.txt); Brisanje datoteke: unlink($DOCUMENT_ROOT/../prodaja/racun.txt); vraa false ako ne uspe da izbrie datoteku Kretanje po datoteci:

rewind() - pomera pokaziva na poetak datoteke ftell() - daje tekui poloaj pokazivaa u datoteci fseek() - pomera pokaziva za zadati broj bajtova u odnosu na referentni poloaj

45

Rad sa datotekama

Zakljuavanje fajla

bool flock (resurs fp, int operacija); Vrednosti operacije f-je flock() LOCK_SH (zakljuavanje za itanje) LOCK_EX (zakljuavanje za upisivanje) LOCK_UN (otkljuava zakljuanu datoteku) LOCK_NB (spreava blokiranje prilikom zakljuavanja)

46

Rad sa datotekama

Zadatak 2
Napraviti

narudbenicu kao na slici:

47

Zadatak 2
Kupcu

treba da se odtampa fiskalni raun, slino kao u prethodnom zadatku. Svi rauni moraju biti sauvani u jednoj tekstualnoj datoteci (ne treba da bude vidljiva na Internetu).

48

Zadatak 3
Uitati

porudbinu lekova iz txt fajla (iz zadatka 2) i prikazati pomou PHP skripta.

49

Internet programiranje 2

Upotreba nizova

Draen Drakovi

ta je niz?

Niz (engl. array) je promenljiva odreenog imena koja sadri skup vrednosti u nekom redosledu Vrednosti smetene u nizu nazivaju se elementi jedan niz moe imati vie elemenata, a svaki element po jednu vrednost (tekst, broj, drugi niz) Svakom elementu niza pridruuje se indeks (klju) Viedimenzionalni niz je niz nizova PHP podrava numeriki indeksirane i asocijativne nizove
Aspirin Brufen Vitamin C

Lista u primeru apoteke >


51

Upotreba nizova

Nizovi s numerikim indeksima


PHP: indeksi uvek poinju sa nulom Inicijalizovanje: niz se pravi jezikom konstukcijom array
$lekovi=array(Andol, Brufen, VitaminC);

kopiranje jednog niza u drugi pomou operatora = funkcija range() automatski pravi niz rastuih brojeva $brojevi = range(1,10); $neparni = range(1,10,2); //2 je korak za koji se poveava $slova = range (a, z);

52

Pristupanje sadraju niza (1)

sadraju niza se pristupa pomou imena promenljive i indeksa (kljua), koji se navodi u uglastim zagradama primer: $lekovi[0], $lekovi[1], $lekovi[2] isti sistem numerisanja kao u programskim jezicima C, C++, Java, (indeks prvog u nizu je nula!) sadraj elementa niza menja se pomou operatora = $lekovi[0]=Ampicilin; moe se dodati i novi element $lekovi[3]=Sirup;

53

Upotreba nizova

Pristupanje sadraju niza (2)


nizovi se automatski prave prvi put kada ih upotrebljavate veliina se dinamiki poveava kad god mu dodate nov element prikazivanje sadraja niza: for ($i = 0; $i<3; $i++) echo $lekovi[$i] ; za nizove se koristi i petlja foreach: foreach ($lekovi as $current) echo $current. ;

54

Upotreba nizova

Nizovi s drugaijim indeksima

PHP podrava i nizove u kojima svakoj vrednosti moete da pridruite indeks koji elite Inicijalizovanje niza:
$lekovi=array (aspirin=>90, brufen=>100, vitaminc=>25 );

Imena artikla su kljuevi, a cene su vrednosti. Pristupanje elementima: $lekovi[aspirin] Moe da se pravi i niz element po element:
$lekovi=array (aspirin=>90); //pravi se niz $lekovi[brufen]=100; $lekovi[vitaminc]=25;

55

Funkcija each()

kada indeksi niza nisu brojevi, umesto for petlje koristi se petlja foreach i funkcije list() i each() funkcija each() ita tekui element niza i pomera interni pokaziva na naredni element funkcija each() redom vraa svaki element u nizu i zaustavlja se kada doe do kraja niza
Primer: while ( $element = each ( $lekovi )) { echo $element [ key ]; echo - ; echo $element [ value ]; echo <br />; }

56

Funkcija list()

funkcija list() se upotrebljava da biste niz razdvojili na pojedinane vrednosti list($artikal, $cena)=each($stanje); funkcija each() iz niza $stanje izdvaja tekui element i interni pokaziva pomera na naredni element funkcija list() pretvara elemente 0 i 1 iz niza koji je vratila funkcija each() u 2 nove promenljive - $artikal i $cena
Ceo niz $stanje se moe obraditi u petlji: reset($stanje); while (list($artikal, $cena) = each($stanje)) echo $artikal - $cena <br/>;

57

Operatori za rad sa nizovima


Operator + == === != <> !==

Ime Unija Jednako Identino Razliito Razliito Nije identino

Primer $a + $b $a == $b $a === $b $a != $b $a <> $b $a !== $b

Operator unija pokuava da doda elemente niza $b na kraj niza $a. Ako u nizu $b postoje elementi koji imaju iste kljueve kao neki elementi iz niza $a, ti kljuevi se izostavljaju iz novog niza.
Upotreba nizova

58

Viedimenzionalni nizovi

svaki element niza moe da bude neki drugi niz dvodimenzionalni nizovi = matrice

$matrica = array ( array (sifra1, aspirin, 90), array (sifra2, brufen, 100), array (sifra3, vitaminc, 25) );

59

Upotreba nizova

Sortiranje nizova - funkcija sort()


funkcija sort() daje niz sortiran po abecednom redosledu Primer:


$lekovi = array ( brufen, sirup, aspirin); sort($lekovi);

sortiranje moe da se vri i po numerikom redosledu drugi parametar funkcije sort je opcioni:
SORT_REGULAR (default), SORT_NUMERIC, SORT_STRING

60

Upotreba nizova

Sortiranje nizova

funkcija asort() sortira niz prema vrednosti svakog elementa funkcija ksort() sortira niz po kljuu Primer:
$lekovi=array (aspirin=>90, brufen=>100, vitaminc=>25 ); asort($lekovi); //po cenama: 25,90,100 ksort($lekovi); //po kljucu tj abecedno

Funkcije koje sortiraju niz po opadajuem redosledu: rsort(), arsort(), krsort()

61

Upotreba nizova

Promena redosleda elemenata niza

funkcija shuffle() nasumino menja redosled elemenata u nizu funkcija array_reverse() pravi kopiju niza sa elementima u obrnutom redosledu funkcija array_push() dodaje po jedan novi element na kraj niza funkcija array_pop() uklanja poslednji element niza i vraa ga pozivajuem kodu

62

Upotreba nizova

Pokazni primeri
$brojevi = array (); for ($i=10; $i>0; $i--) array_push ($brojevi, $i);

$brojevi = range(1,10); $brojevi = array_reverse($brojevi);

63

Upotreba nizova

Navigacija unutar nizova


kada napravimo novi niz, pokaziva upuuje na prvi element niza rezultat current($niz) je prvi element funkcije each i next pomeraju pokaziva rezultat each($niz) je tekui element pre nego to se pokaziva pomeri funkcija next($niz) prvo pomera pokaziva unapred, a zatim vraa nov tekui element funkcija reset($niz) vraa pokaziva na prvi element u nizu funkcija end($niz) pomera pokaziva na kraj niza funkcija prev($niz) pomera pokaziva unatrag za jedno mesto, a zatim vraa nov tekui element

64

Upotreba nizova

Prebrojavanje elemenata u nizu

funkcija count() vraa ukupan broj elemenata u nizu koji joj je prosleen funkcija sizeof() vraa ukupan broj elemenata u nizu koji joj je prosleen funkcija array_count_values($niz) broji koliko jedinstvenih vrednosti ima u nizu; funkcija vraa asocijativni niz koji sadri tabelu uestanosti (klju je element niza, vrednost je broj ponavljanja)

65

Upotreba nizova

Zadatak 3 (sa count)


<?php //pravi kratko ime promenljive $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $naruceno= file("$DOCUMENT_ROOT/../naruciti.txt"); $brojac = count($naruceno); //funkcija count daje ukupan broj elemenata u nizu if ($brojac == 0) { echo '<p><strong>Nema narucenih stvari. Molimo pokusajte kasnije.</strong></p>'; } for ($i=0; $i<$brojac; $i++) { echo $naruceno[$i].'<br />'; } ?>

66

Zadatak 4
Direktan

plasman u finale takmienja Eurosong 2008 u Beogradu pored polufinalista obezbedie jo 3 nasumino izabrane zemlje. Njihove zastave treba prikazati na ekranu.

67

Upotreba nizova

Reenje (1)
<?php $slike = array('serbia.jpg', 'italy.jpg', 'france.jpg', 'germany.jpg'); shuffle($slike); ?> <html> <head> <title>Eurosong</title> </head> <body> <center> <h1>Eurosong</h1> <table width = 100%> <tr>

68

Reenje (2)
<?php for ( $i = 0; $i < 3; $i++ ) { echo '<td align="center"><img src="'; echo $slike[$i]; echo '"width="100" height="100"></td>'; } ?> </tr> </table> </center> </body> </html>

69

Zadatak 5
Napraviti

niz od 7 boja. Potrebno je da se u zavisnosti koji je dan u nedelji menja boja pozadine.

70

Upotreba nizova

Reenje
<html> <head> <title>Pozadinska boja</title> </head> <?php $today = date("w"); $bgcolor = array( "#BA55D3", "#0000FF", "#00FFFF", "#228B22", "#FFA500", "#FFFF00", "#FF0000" ); ?> <body bgcolor="<?php print("$bgcolor[$today]");?>"> <br>Ovo je boja za danasnji dan. </body> </html>

71

Internet programiranje 2

Rad sa znakovnim nizovima

Draen Drakovi

Skraivanje znakovnih vrednosti

Funkcija trim() brie beline s poetka i kraja znakovnog podatka. Po definiciji brie znakove za povratak na poetak reda (\r) i za prelazak u novi red (\n), horizontalne i vertikalne tabulatore (\t, \x0B), znakove za kraj znakovne vrednosti (\0) i razmake. Ovoj funkciji moete da prosledite i parametar koji sadri eksplicitno zadat spisak znakova koje treba ukloniti umesto ovih navedenih

73

Rad sa znakovnim nizovima

Formatiranje znakovnih vrednosti u oblik pogodan za prikazivanje

Funkcija n12br() prihvata znakovnu vrednost kao ulazni parametar i sve znake za prelazak u novi red u njoj zamenjuje XHTML oznakama <br/> ili HTML oznakom <br> (ovo se koristi za formatiranje teksta) Funkcija printf() prosleuje formatiranu znakovnu vrednost itau Weba, a funkcija sprintf() vraa formatiranu znakovnu vrednost
printf (Ukupno prodato: %.2f dinara, $ukupno);

74

Rad sa znakovnim nizovima

Pretvaranje malih i velikih slova


Funkcije za menjanje malih i velikih slova u znakovnim podacima Upotreba Opis Vrednost $ime strtoupper($ime) sva slova menja u velika strtolower($ime) ucfirst($ime) sva slova menja u mala menja u veliko slovo prvi znak ulaznog argumenta, ako je alfabetski menja u veliko slovo prvi znak svake rei koja poinje alfabetskim znakom Idete li na Eurosong? IDETE LI NA EUROSONG? idete li na eurosong? Idete li na Eurosong?

ucwords($ime)

Idete Li Na Eurosong?

75

Spajanje i razdvajanje znakovnih vr.

Funkcija explode(string granicnik, string text) deli znakovnu vrednost text na mestima gde naie na znakovnu vrednost granicnik. Funkcija vraa niz.
$email_array = explode (@, $email); $email_array[0]=nbosko $email_array[1]=etf.bg.ac.yu

Suprotne ovoj funkciji su implode() i join()

76

Poreenje znakovnih vrednosti

int strcmp(string str1, string str2) Funkcija poredi dve znakovne vrednosti str1 i str2 i ako su jednake funkcija vraa 0. Ukoliko po abecednom redosledu vrednost str1 dolazi iza str2, funkcija vraa broj vei od nule, u suprotnom vraa broj manji od nule. int strcasecmp(string str1, string str2) Ista kao prethodna, samo ne pravi razliku izmeu malih i velikih slova. Duina znakovne vrednosti (ukupan broj znakova) moete utvrditi pomou funkcije strlen() strlen(hello) je 5

77

Rad sa znakovnim nizovima

Zadatak 6
Napraviti formular za registrovanje korisnika na studentskom forumu koji e sadrati polja za ime, telefon, e-mail adresu i potvrdu e-mail adrese. Kada korisnik unese mail koji nije u formatu: ime@domen treba da se ispie poruka da je pogrean unos maila. Ako korisnik ne unese potvrdu maila treba da se ispie da je pogreno potvren mail. Kada korisnik potvrdi mail, ispisuje se poruka da e ifra korisniku ime na mail ime@domen.

78

Rad sa znakovnim nizovima

Reenje (1)
<?php // pravljenje kratkih imena $ime = $_POST['ime']; $mob = $_POST['mob']; $email1 = $_POST['email1']; $email2 = $_POST['email2']; $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; //ovo mora da postoji $uporedi = strcmp($email1, $email2); $email_niz = explode ('@', $email1); $brojac = count($email_niz);

79

Rad sa znakovnim nizovima

Reenje (2)
if (strlen($email_niz[1])==0) echo 'Niste lepo uneli e-mail adresu!!! Pokusajte ponovo.'; else if ($uporedi!=0) echo 'Niste potvrdili mail adresu, pokusajte ponovo registraciju.'; else echo 'Uspesna registracija naloga: '.$email_niz[0].'<br/> Sifra za forum ce uskoro stici na vas mail: '.$email2; ?>

80

Rad sa znakovnim nizovima

Zadatak 7
Napravite formu sa checkbox-ovima gde korisnik moe da izmeu 4 muzike grupe ili anra odabere one koje slua. Ono to slua treba beleiti u niz, nepoznate veliine, a kada korisnik odabere i pritisne dugme potvrde potrebno je da se prikae njegov izbor tj da se isita iz niza. U sluaju da korisnik nita ne odabere, treba da se ispie da nita nije izabrano.

81

Rad sa znakovnim nizovima

Reenje (1)
<html> <body> <h1>Izaberite muziku koju slusate</h1> <?php if (!isset($_POST['submit'])) { ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>"method="POST"> <input type="checkbox" name="muzika[]" value="Bon Jovi">Bon Jovi <input type="checkbox" name="muzika[]" value="Police">Police <input type="checkbox" name="muzika[]" value="Madonna">Madonna <input type="checkbox" name="muzika[]" value="RHCP">RHCP <input type="submit" name="submit" value="Izaberi"> </form> Rad sa znakovnim nizovima

82

Reenje (2)
<?php } else { if (is_array($_POST['muzika'])) { echo 'Izabrali ste: <br />'; foreach ($_POST['muzika'] as $nesto) { echo "<i>$nesto</i><br />"; } } else { echo 'Nista nije izabrano'; } } ?> </body> </html>

83

Internet programiranje 2

Viekratna upotreba koda

Draen Drakovi

Upotreba require() i include()

Pomou iskaza require(), odnosno include() u PHP skript se moe uitati datoteka. Ta datoteka moe da sadri iskaze PHP-a, tekst, HTML oznake, PHP-ove funkcije ili klase

85

Primer
Datoteka dodatak.php ima sledei sadraj: <?php echo 'Ovo ce biti ubaceno.<br />'; ?> Datoteka main.php ima sledei sadraj: <?php echo 'Ovo je glavni fajl.<br />'; require(dodatak.php); echo Ovde je kraj!<br/> ?>

86

ta je rezultat?

Izraz require() umee u skript sadraj datoteke dodatak.php koju smo zadali. Kada pokrenemo skript, prvo se iskaz require(dodatak.php); zamenjuje sadrajem navedene datoteke, pa se tek onda skript izvri.

87

Primer ablona za Web strane

88

Korisno je da ovu Web stranicu podelimo na delove: deo pre sadraja - zaglavlje i meni (header.inc) dinamiki deo sa sadrajem (home.php) deo iza sadraja (footer.inc) Datoteke header.inc i footer.inc sadre kod koji emo upotrebljavati i na drugim stranicama.

Primer ablona za Web strane


//home.php <?php require('header.inc'); ?> <p>Dobrodosli! Najjeftinije telefoniranje u Srbiji!!!</p> <?php require('footer.inc'); ?>

Pravilo je da nastavak imena datoteka iji se sadraj umee u druge datoteke bude .inc (skraeno od include). Takoe se preporuuje da se datoteke za umetanje postave izvan stabla Web dokumenata kako bi se spreilo neovlaeno itanje vaeg izvornog koda

89

Internet programiranje 2

Pisanje funkcija

Draen Drakovi

Funkcije

Funkcija je samostalan modul koji propisuje nain pozivanja funkcije, obavlja zadatak i eventualno vraa rezultat. Pozivanje funkcija moja_funkcija(); Pozivanje nedefinisanih funkcija => greka! Nema razlike izmeu malih i velikih slova kod funkcija u PHP (Funk, FUNK, funk... je ista funkcija)

91

Osnovna struktura funkcije

Deklaracija poinje sa function, iza koje slede ime funkcije i parametri, a zatim i kod koji se izvrava kada je funkcija pozvana Imena funkcija:

Nova funkcija ne sme da ima isto ime kao neka postojea Ime funkcije moe da bude sastavljeno od slova, cifara i donje crte _ Ime funkcije ne moe poinjati cifrom PHP ne dozvoljava preklapanje ugraenih funkcija!!

Moe da postoji jedan ili vie parametara, ali ne moraju svi biti obavezni

92

Primer - tabela
function napravi_tabelu($nesto) { echo '<table border = 1>'; reset($nesto); // Pokazivac na pocetak niza $vrednost = current($nesto); while ($vrednost) { echo "<tr><td>$vrednost</td></tr>\n"; $vrednost = next($nesto); } echo '</table>'; } $moj_niz = array('Prvo polje.','Drugo polje.','Trece polje.'); napravi_tabelu($moj_niz);

93

Opseg vaenja

Opseg vaenja promenljive odreuje gde je promenljiva vidljiva i upotrebljiva Promenljive deklarisane unutar funkcije iji je opseg od mesta deklarisanja do kraja funkcije (lokalne promenljive - funkcijski opseg vaenja) Promenljive deklarisane izvan funkcije iji je opseg od mesta deklarisanja do kraja datoteke (globalne promenljive - globalni opseg vaenja) Pomou rei global moe se runo zadati globalni opseg vaenja za promenljivu definisanu unutar funkcije

94

Prenos parametara po vrednosti


engl. pass by value kada funkciji prosledite vrednost parametra, unutar funkcije se pravi nova promenljiva koja sadri prosleenu vrednost - kopija originala moe slobodno da se menja, dok izvorna promenljiva ostaje nepromenjena

95

Prenos parametara po referenci


engl. pass by reference kada se parametar prosledi funkciji, ona ne pravi novu promenljivu ve preuzima referencu na originalnu promenljivu referenca se ponaa kao promenljiva, upuuje na original i nema sopstvenu vrednost (svaka izmena reference se odnosi i na original)
$a = 10; echo $a.<br/>; inkrement($a); echo $a. <br/>;

96

function inkrement(&$vr, $ink=1) { $vr = $vr + $ink; }

Povratak iz funkcije

Izvrenje funkcije se prekida sa return


isset() utvruje da li je promenljiva napravljena i da li ima vrednost

97

function veci( $x, $y ) { if(!isset($x)||!isset($y)) { echo Prosledite dva broja; return; } $a = 1; if($x>=$y) $b = 2.5; $c = 1.9; echo $x; veci($a, $b); else veci($c, $a); echo $y; veci($d,$a); }

Rekurzija

Rekurzivne funkcije - one koje pozivaju samu sebe Prednosti: krai kod, elegantnije reenje Nedostaci: optereenje memorije

function obrnuto_r($str) { if (strlen($str)>0) obrnuto_r(substr($str, 1)); echo substr($str, 0, 1); return; }

obrnuto_r(Zdravo); obrnuto_r(dravo); obrnuto_r(ravo); obrnuto_r(avo); obrnuto_r(vo); obrnuto_r(o); obrnuto_r();

98

Internet programiranje 2

Objektno orijentisano programiranje na PHP-u

Draen Drakovi

Klase i objekti

Klasa je osnovna jedinica programiranja na OO jezicima Klase sadre:


atribute (svojstva ili promenljive koje opisuju objekat) operacije (metode, radnje ili funkcije koje objekat moe da izvrava) mehanizme za stvaranje objekata na osnovu definicije (konstruktore) pristup podacima unutar datog objekta mogu samo pomou operacija tog objekta jedan primerak (instanca, pojava) klase

Kapsuliranje (skrivanje podataka)

ta je objekat?

100

Polimorfizam, nasleivanje

OO jezici podravaju polimorfizam: svaki objekat izvedene klase izvrava operaciju onako kako je to definisano u njegovoj (izvedenoj) klasi Nasleivanje: klasa + jedna ili vie potklasa Potklasa (izvedena klasa, dete) nasleuje atribute i operacije od svoje natklase (roditeljske klase) Nasleivanje omoguava nadgradnju i proirenje postojeih klasa
class Vozilo class Auto extends Vozilo class Kamion extends Vozilo

101

Struktura klase, konstruktori


class ime { var $atribut1; var $atribut2; function operacija1() {} function operacija2($par1, $par2) {} } Konstruktor se poziva prilikom pravljenja objekata date klase Konstruktor se deklarie kao druge operacije, ali ima specijalno ime construct() class ime { function __construct($par) { echo pozvan je konstruktor sa parametrom $par; }}

102

Pravljenje objekata

Nov objekat se pravi pomou rezervisane rei new Primer: $a = new ime(Prvi); $b = new ime(Drugi); $c = new ime(); Rezultat:
pozvan je konstruktor s parametrom Prvi pozvan je konstruktor s parametrom Drugi pozvan je konstruktor s parametrom

103

Upotreba atributa klase


Pokaziva $this upuuje na tekui objekat Ako tekui objekat ima atribut $atr, moete da mu pristupite pomou imena $this->atr Primer:
class ime { var $atr; function operacija($par) { $this->atr = $par; echo $this->atr; } }

104

Pristupne funkcije

Primer:
class ime { var $atr; function __get($imeatributa) { return $this->$imeatributa; } function __set($imeatributa, $nova_vred) { $this->$imeatributa=$nova_vred; } } Ove 2 funkcije se pozivaju implicitno $a = new ime(); $a->atr = 5; // poziva se funkcija __set

105

Modifikatori pristupa

public (javni) - elementima koji se deklariu kao javni moe se pristupati i unutar i izvan klase; private (privatni) - elementima koji se deklariu kao privatni moe se pristupati samo unutar klase; ne mogu da se nasleuju; protected (zatien) - oznaava da elementu klase moe da se pristupi samo unutar klase, ali se taj element nasleuje u svim potklasama; class ime { public $atribut; }

106

Pozivanje operacije klase


$a = new ime();
//pristup kao atributu tog objekta

$a->operacija1(); $a->operacija2(11,proba);
//ako operacija vraca neku vrednost

$x = $a->operacija1(); $y = $a->operacija2(11,proba);

107

Nasleivanje - primer
class B extends A { var $atribut2; function operacija2() {} } class A { var $atribut1; function operacija1() {} }

Ispravni iskazi: $b = new B(); $b->operacija1(); $b->atribut1 = 10; $b->operacija2(); $b->atribut2 = 20; $a = new A(); $a->operacija1(); $a->atribut1 = 10;

Klasa A nema funkciju operacija2() i atribut $atribut2 !!!

108

Redefinisanje (eng. overriding)

Promena postojee funkcionalnosti natklase u nasleenoj klasi class A { var $atribut = staravrednost; function operacija() { echo nesto<br/>; echo vrednost je $this->atribut; } } class B extends A { var $atribut = novavrednost; function operacija() { echo nesto drugo<br/>; echo vrednost je $this->atribut; } }

109

Redefinisanje (eng. overriding)


$a = new A(); $a->operacija(); Izlaz: nesto vrednost je staravrednost $b = new B(); Poziv u potklasi B: $b->operacija(); parent::operacija(); Izlaz: nesto drugo //nesto vrednost je novavrednost //vrednost je novavrednost

110

final

Slui za spreavanje nasleivanja Kada se postavi ispred deklaracije funkcije, ta se funkcija ne moe zameniti istoimenom ni u jednoj potklasi final function operacija() { } Upotrebom final se moe spreiti i nasleivanje odreene klase final class A() { }

111

Interfejsi

B
C

PHP ne podrava viestruko nasleivanje Interfejs deklarie odreen broj funkcija koje moraju biti realizovane u svim klasama koje realizuje taj interfejs interface Prikazuje { function prikazi (); } Interfejs se koristi kao zaobilazni nain da se realizuje viestruko nasleivanje

112

Naprednije OO funkcionalnosti

const - konstanta klase, koja se koristi bez obaveze da se napravi objekat


class Matematika { const pi = 3.14159; } echo Pi je Matematika::pi;

static - kada je zadata ispred deklaracije metode, omoguava da se poziva metoda bez pravljenja instance klase
static function kvadrat($broj) { return $broj*$broj; } echo Kvadrat od 8 = Matematika::kvadrat(8);

113

Internet programiranje 2

Izuzeci

Draen Drakovi

Obrada izuzetaka

Kod se izvrava unutar try bloka: try { //kod } Unutar try bloka izuzetak se izaziva: throw new Exception(poruka, broj_greske); Svakom bloku try mora da sledi barem jedan blok catch: catch (Exception $e) { //obrada izuzetka } Objekat koji se prosleuje bloku catch (da bi ga blok presreo) jeste objekat prosleen iskazu throw koji je generisao izuzetak

115

Primer
<?php try { throw new Exception(Greska!!!', 42); } catch (Exception $e) { echo 'Exception '.$e->getCode().': '.$e-> getMessage().'<br />'.' u fajlu '. $e->getFile(). 'na liniji '. $e->getLine(). '<br />'; } ?>

116

Klasa Exception

Konstruktor te klase prihvata 2 parametra: tekst poruke o greci i broj greke

117

getCode() - vraa broj greke koji je bio prosleen konstruktoru getMessage() - vraa tekst poruke koja je bila prosleena konstruktoru getFile() - pozivajuem kodu vraa punu putanju datoteke u kojoj je generisan izuzetak getLine() - vraa broj reda koda u kome je generisan izuzetak getTrace() - vraa niz s podacima o stablu pozivanja koji omoguavaju utvrivanje mesta na kome je generisan izuzetak getTraceAsString () - vraa iste podatke kao getTrace(), formatirane kao znakovni podaci __toString() - omoguava da se iskazu echo direktno prosledi ceo sadraj objekta Exception, sa svim podacima koje daju navedene metode

Dodatni zadatak
Napraviti

stranicu koja e prikazivati broja posetilaca odreenog sajta.

118

Reenje
<?php if(file_exists("brojac_korisnika.dat")) { $tekuci_fajl = fopen("brojac_korisnika.dat", "r"); $brojac = fgets($tekuci_fajl, 255); $brojac++; fclose($tekuci_fajl); print("$brojac korisnika je posetilo ovu stranicu"); $tekuci_brojac = fopen("brojac_korisnika.dat", "w"); fputs($tekuci_brojac, $brojac); fclose($tekuci_brojac); } else { //ako se stranica prvi put posecuje $novi_fajl = fopen("brojac_korisnika.dat", "w"); fputs($novi_fajl, "1"); print("Vi ste prvi posetilac ovog sajta!"); fclose($novi_fajl); } ?>

119

You might also like