Professional Documents
Culture Documents
Draen Drakovi
Internet programiranje 2
Uvod u PHP
Draen Drakovi
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
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
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
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 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
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
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
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
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
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
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
se koristiti: echo zdravo; echo zdravo, pozdrav; echo (zdravo); print zdravo; print (zdravo);
19
Uvod u PHP
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
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.
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,
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
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;
28
Uvod u PHP
Zadatak 1
Napraviti
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>';
36
Uvod u PHP
Internet programiranje 2
Rad sa datotekama
Draen Drakovi
1. 2. 3. 1. 2. 3.
38
Rad sa datotekama
Otvaranje datoteke
funkcija
fopen
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
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
43
Rad sa datotekama
44
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
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
51
Upotreba nizova
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
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
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
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
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 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
61
Upotreba nizova
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);
63
Upotreba 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
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
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
Draen Drakovi
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
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
ucwords($ime)
Idete Li Na Eurosong?
75
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
76
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
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
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
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
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
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
Draen Drakovi
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
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.
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
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
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
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
Povratak iz funkcije
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
98
Internet programiranje 2
Draen Drakovi
Klase i objekti
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
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
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
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
$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;
108
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
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
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
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
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