1 / 49

PHP

Aplikativni softver. Fakultet za poslovnu informatiku Univerzitet Singidunum www.fpi.singidunum.ac.yu. PHP. 2007/2008. Violeta Tomašević Literatura Luke Welling , Laura Thomson , PHP i MySQL: Razvoj aplikacija za Web , prevod Mikro knjiga, 2006. Šta je PHP?.

Download Presentation

PHP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aplikativni softver Fakultet za poslovnu informatiku Univerzitet Singidunum www.fpi.singidunum.ac.yu PHP 2007/2008. Violeta Tomašević Literatura LukeWelling, LauraThomson, PHP i MySQL: Razvoj aplikacija za Web, prevod Mikro knjiga, 2006.

  2. PHP Šta je PHP? PHPpredstavlja jezik za pisanje skriptova koji rade na serveru. PHP je projektovan za upotrebu na Web-u. Njegovu početnu verziju je 1994.godine napravio Rasmus Lerdorf. Kasnije je PHP prošao kroz nekoliko verzija dok nije došao do danas aktuelne verzije PHP 5. PHP je inicijalno bila skraćenica za Personal Home Page, ali je značenje kasnije izmenjeno, pa sada označava PHP Hypertext Preprocessor. PHP je proizvod otvorenog koda, tj. slobodan je pristup njegovom izvornom kodu koji može besplatno da se koristi, menja i dalje distribuira.

  3. PHP Prednosti PHP-a (1) • U odnosu na svoje glavne konkurente (Perl, MSASP.NET, JSP i ColdFusion), PHP ima sledeće prednosti: • Visoke performanse. PHP je vrlo efikasan. Jedan relativno slab server može da obradi više miliona zahteva dnevno. Kapacitet obrade postaje praktično beskonačan ukoliko se koristi veći broj spregnutih servera. • Niska cena. PHP je besplatan. Najnovija verzija se može preuzeti sa adrese http://www.php.net. • Lako se uči i upotrebljava. Sintaksa PHP-a je slična sintaksama drugih programskih jezika kao što su Perl, C, Java. • Prenosivost. PHP je na raspolaganju za mnoge OS. PHP kod se može pisati pod jednim od OS iz porodice Unix, ili pod raznim verzijama Windows-a. Napisani kod najčešće će raditi bez izmena i pod drugim OS u kojima je instaliran PHP.

  4. PHP Prednosti PHP-a (2) • Izvorni kod je dostupan svima. Jeziku PHP se slobodno može nešto dodavati ili menjati, tj. ne mora se brinuti o proizvođaču. • Dobra podrška za objektno-orijentisano programiranje. Verzija PHP 5 donosi objektno-orijentisane mogućnosti, kao što su nasleđivanje, privatni i zaštićeni atributi i metode, apstraktne klase i metode, intefejsi, konstruktori i destruktori. • Ugrađene biblioteke za obavljanje velikog broja poslova uobičajenih u Web aplikacijama. PHP-ove biblioteke omogućavaju veliki broj funkcija kao što su: generisanje slike tokom rada aplikacije, uspostavljanje veze sa Web servisima, korišćenje XML dokumenata, generisanje PDF dokumenata, slanje poruke e-mail-om, itd. • Povezivanje sa brojnim sistemima za upravljanje bazama podataka. PHP standardno omogućava uspostavljanje veza sa više sistema za upravljanje bazama podataka, kao što su: MySQL, Oracle, dbm, Informix, InterBase, mSQL i dr.

  5. PHP Upotreba PHP-a (1) Jedna od najčešćih primena serverskih skript jezika je obrada HTML formi. Primer: forma.html <form action=“obradanar.php” method=“post”> <tableborder=“0”> <tr bgcolor=“#ffff00”> <td width=“150”>Stavka</td> <td width=“15”>Kolicina</td> </tr> <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> Stavka Kolicina Olovka Sveska Poslati narudzbenicu

  6. PHP 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 suštini predstavlja HTML kod u koji je ugrađen PHP kod tako što je definisana sekcija: <?php PHP kod ?> Skript obradanar.php Rezultati rada skripta će se dobiti u Web browser-u nakon toga što korisnik unese podatke u formu i pritisne dugme ‘Poslati narudzbenicu’. <html> <head> <title>Knjizara - Rezultati</title> </head> <body> <h1>Knjizara</h1> <h2>Rezultati narudzbe</h2> <?php echo ‘<p>Narudzbenica jeobradjena.</p>’; ?> </body> </html> Knjizara Rezultati narudzbe Narudzbenica je obradjena.

  7. PHP Upotreba PHP-a (3) PHP skript kako ga vidi Web browser PHP skript na serveru <html> <head> <title>Knjizara - Rezultati</title> </head> <body> <h1>Knjizara</h1> <h2>Rezultati narudzbe</h2> <p>Narudzbenica je obradjena.</p> </body> </html> <html> <head> <title>Knjizara - Rezultati</title> </head> <body> <h1>Knjizara</h1> <h2>Rezultati narudzbe</h2> <?php echo ‘<p>Narudzbenica je obradjena.</p>’; ?> </body> </html> PHP naredbe se ne vide na klijentskoj strani zato što je interpreter PHP koda naredbe zamenio rezultatom. To znači da se iz PHP koda dobija čisti HTML kod koji se može gledati pomoću svakog čitača, odnosno čitači ne moraju da razumeju PHP. PHP kod se interpretira i izvršava na serveru (za razliku od JavaScript koda koji se izvršava unutar čitača na klijentskoj strani).

  8. PHP Sintaksa PHP-a • PHP tag, koji pokazuje serveru gde počinje, a gde se završava PHP kod u okviru HTML koda, može biti napisan na četiri ekvivalentna načina (stila): • XML stil - Ovaj stil se preporučuje. Može se koristiti sa XML dokumentima. Administrator servera ga ne može isključiti. • <?php echo ‘<p>Narudzbenica je obradjena.</p>’; ?> • Skraćeni stil - Da bi se koristio ovaj stil, mora se u konfiguracionoj PHP datoteci setovati opcija short_tags. Stil se ne preporučuje, jer ga administratori ponekad isključuju, što može da dovede do pogrešnog tumačenja XML dokumenata. • <? echo ‘<p>Narudzbenica je obradjena.</p>’; ?> • SCRIPT stil - Ovaj stil je najduži. Može 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 okruženjima ASP i ASP.NET (opcija asp_tags mora biti setovana). Standardno je isključen. • <% echo ‘<p>Narudzbenica je obradjena.</p>’; %>

  9. PHP PHP iskazi i beline PHP iskazi (PHP statements) se nalaze između početnog i završnog PHP taga i određuju š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 čitaču tekst koji joj se zada. Beline (whitespaces), 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 identični, ali se prvi kod lakše čita.

  10. PHP Dodavanje dinamičkog sadržaja Glavni razlog upotrebe PHP skriptova jeste mogućnost lake izrade dinamičkog sadržaja. To je bitna primena, jer sadržaj koji se menja periodično, ili prema potrebama korisnika podstiče posetioce da češće pristupaju Web stranici. PHP kod Izgled na stranici PHP sadrži bogatu biblioteku funkcija koje se mogu koristiti u Web aplikacijama. Većini funkcija ili treba proslediti neke podatke, ili one vraćaju neke podatke. Argument ili parametar funkcije je ulazni podatak koji se prosleđuje kao znakovni niz između zagrada. Knjizara Rezultati narudzbe Narudzbenica je obradjena u 12:42. <?php echo ‘<p>Narudzbenica je obradjena u ‘; echo date(‘H:i’); echo ‘.</p>’; ?>

  11. PHP Pristup promenljivama forme (1) • PHP omogućava lak pristup podacima koje je korisnik uneo u polja forme, ali način preuzimanja podataka zavisi od verzije PHP-a i od parametara u datoteci php.ini. • Iz PHP skripta se svakom polju forme može pristupiti preko istoimene PHP promenljive (variable). Imena promenljivih u PHP-u počinju znakom $. • Postoje tri načina pristupanja podacima u zavisnosti od verzije PHP-a: • Kratki stil –Ovo je vrlo jednostavan način pristupa. Imena promenljivih u skriptu su ista kao imena polja u formama. Važno je da se svim lokalnim promenljivama moraju zadati početne vrednosti. $olovkakol • Srednji stil – Ovaj stil podrazumeva učitavanje 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 omogućava učitavanje vrednosti promenljivih forme preko $HTTP_POST_VARS ili $HTTP_GET_VARS. Pošto je zastareo, ovaj stil će verovatno biti ukinut. • $HTTP_POST_VARS[‘olovkakol’]

  12. PHP Pristup promenljivama forme (2) S obzirom da su srednji i kratki stil malo nezgrapni i zahtevaju rad sa nizovima, obično se prave kopije promenljivih koje se jednostavnije upotrebljavaju. One se obično stavljaju na početak skripta: <?phpIzgled na stranici // 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 />’; ?> Navedeni kod pravi dve nove promenljive $olovkakol i $sveskakol, koje sadrže podatke poslate iz forme metodom POST. U iskazu echo, tačka (.) se koristi za nadovezivanje teksta, tj. konkatenaciju. U PHP-u, ime promenljive se može pisati unutar navodnika zajedno sa drugim tekstom i tada ga PHP zamenjuje odgovarajućom vrednošću. Ovo ne važi ako se za predstavljanje teksta koriste apostrofi. echo “$olovkakololovke<br />”; Knjizara Rezultati narudzbe Narudzbenica je obradjena u 12:42. Narucili ste sledece: 2 olovke 3 sveske

  13. PHP Identifikatori • Identifikatori predstavljaju imena promenljivih,imena funkcija i imena klasa. • Za identifikatore važe sledeća pravila: • Identifikatori mogu biti bilo koje dužine i mogu se sastojati od slova, brojeva i podvlaka. • Identifikatori ne mogu da počinju cifrom. • PHP pravi razliku između malih i velikih slova u identifikatorima. Izuzetak su imena funkcija. • Promenljiva može imati isto ime kao i funkcija, ali bi to zbog moguće zabune trebalo izbegavati.

  14. PHP Korisničke promenljive • Osim promenljivih koje su prosleđene iz forme, u skriptovima se mogu koristiti i promenljive koje korisnik sam deklariše. U PHP-u ne treba deklarisati promenljive pre nego što će biti korišćene. • Primer: Ako želimo da izračunamo ukupan broj naručenih artikala i njihovu ukupnu vrednost, možemo uvesti dve promenljive koje će na početku biti incijalizovane 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. PHP Tipovi promenljivih • PHP podržava sledeće 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 – logički tip, koristi se za predstavljanje podataka tipa tačno i netačno • array – niz, koristi se za čuvanje više 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 izričito dodeljena vrednost NULL. • resurs – predstavljaju spoljne resurse, kao što su veze sa bazama podataka. Neke ugrađene funkcije vraćaju promenljive ovog tipa.

  16. PHP Konstante • Konstanta predstavlja vrednost koja se jednom zadaje i više se ne može menjati. • Da bi se olakšalo razlikovanje promenljivih i konstanti, usvojeno je da se imena konstanti pišu velikim slovima (mada nije obavezno). • Ispred konstante se ne piše $. • Ako se želi upotrebiti vrednost konstante, navodi se samo njeno ime. • Konstante mogu sadržati samo podatke skalarnog tipa, tj. logičkog tipa, celobrojnog, znakovnog i numeričke podatke s pokretnim zarezom. • U izvršnom PHP okruženju definisan je veliki broj konstanti, koje se mogu pregledati pomoću komande phpinfo(). • Primer: Cene artikala se mogu definisati kao konstante. • define(‘OLOVKACENA’, 20); • define(‘SVESKACENA’, 45);

  17. PHP Operatori • Operatori su simboli koji omogućavaju izvršavanje operacija nad vrednostima i promenljivama. • U PHP-u postoje sledeće vrste operatora: • Aritmetički operatori • String operator (operator za konkatenaciju, tj. spajanje stringova) • Operatori dodele (na pr. =, +=, -=, i dr.) • Operatori poređenja • Logički operatori • Operatorinad bitovima • Operatori za rad sa nizovima (na pr. [ ] za pristup elementu niza) • Ostali operatori (na pr. operator zanemarivanja greške, uslovni operator, i dr.)

  18. PHP Aritmetički i operatori poređenja Aritmetički operatori se obično primenjuju na brojeve. Ako se primene na string, pokušaće se njegovo pretvaranje u broj. Ako string sadrži e ili E, pretvoriće se u float, inače u ceo broj. Izrazi u kojima se koriste operatori poređenja vraćaju logičku vrednost true ili false. Operator == se često meša sa operatorom dodele =, što ne vodi željenom rezultatu.

  19. PHP Logički i operatori nad bitovima

  20. PHP Operatori za rad sa nizovima

  21. PHP Upravljačke strukture • Upravljačke strukture omogućavaju upravljanje tokom izvršenja programa ili skripta. • Upravljačke strukture se mogu grupisati u: • Uslovne strukture sa grananjem – konkstrukcije koje programu omogućavaju donošenje odluka • Iskaz if • Iskaz else • Iskazi elseif • Iskaz switch • Strukture sa ponavljanjem ili petlje – konstrukcije za ponavljanje određenog bloka koda u programu • Petlja while • Petlja for • Petlja do... while

  22. PHP Uslovne strukture sa grananjem (1) Iskaz if Upotrebljava se za donošenje odluke u zavisnosti od određenog uslova. Ako je uslov ispunjen(vraća true), izvršava se blok koda koji sledi iza iskaza if; u suprotnom će blok biti preskočen. Uslovi se navode između zagrada. Iskazelse Definiše alternativnu akciju koju treba preduzeti ako uslov u if iskazu nije ispunjen. Iskazelseif ili else if Određuje redosled obrade više opcija. Zadaje se više uslova u datom redosledu, a program izvršava blok koda koji odgovara samo prvom ispunjenom uslovu. Primeri if($totalkol == 0) { echo ‘Niste nista uneli!<br />’; } else { echo $olovkakol.’ olovke<br />’; echo $sveskakol.’ sveske<br />’; } if($totalkol < 0) $popust = 0; elseif ($olovkakol >=10 &&$olovkakol <=49) $popust = 5; elseif ($olovkakol >=50 &&$olovkakol <=99) $popust = 10; elseif ($olovkakol >=100) $popust = 15;

  23. PHP Uslovne strukture sa grananjem (2) Iskazswitch Omogućava da uslov ima više od dve vrednosti (u iskazu if, uslov može imati samo dve vrednosti – true ili false). U iskazu switch, uslov može imati više različitih vrednosti, koje moraju biti skalarnog tipa (integer, string ili float). Za svaku vrednost koja se želi obraditi, potrebno je napisati iskaz case, i eventualno podrazumevani iskaz case za sve ostale vrednosti. PHP izvršava iskaze od odgovarajuće oznake case do iskaza break. Bez iskaza break, izvršavaju se svi iskazi iza iskaza case. Kada se dođe do break, izvršavanje se nastavlja iza iskaza switch. Primer: ispitivanje koja reklama je privukla kupca HTML kod <select name=“find”> <option value = “a”>Ja sam obican potrosac.</option> <option value = “b”>Cuo sam na televiziji.</option> <option value = “c”>Cuo sam od prijatelja.</option> </select> PHP kod podrazumeva se da je učitana iz niza POST switch($find) { case ‘a’ : echo ‘<p>Obican potrosac.</p>’; break; case ‘b’ : echo ‘<p>TV reklame.</p>’; break; case ‘c’ : echo ‘<p>Ziva rec.</p>’; break; default : echo ‘<p>Ne zna se.</p>’; break; }

  24. PHP Strukture sa ponavljanjem (1) Petlja while Izvršava blok koda dok god je zadati uslov ispunjen. Ova petlja se obično koristi kada ne znamo unapred koliko će iteracija biti potrebno. Osnovna struktura petlje je: while (uslov) izraz; Primer: prikaz brojeva od 1 do 5 $num = 1; while ($num <=5) { echo $num.”<br />”; $num++; } • Petljafor • Koristi se kada se zna koliko je iteracija potrebno. • Osnovna struktura petlje je: • for (izraz1; uslov; izraz2) izraz3; • izraz1 se izvršava jednom na početku i zadaje početnu vrednost brojača • uslov se ispituje pre svake iteracije; ako nije ispunjen, petlja prestaje; uslov obično ispituje da li je brojač došao do neke granice • izraz2 se izvršava na kraju svake iteracije; obično menja vrednost brojača • izraz3 se izvršava jednom u svakoj iteraciji; to je obično blok koda • Primer: prikaz brojeva od 1 do 5 • for ($i=1; $i <=5; $i++) • { • echo $i.”<br />”; • }

  25. PHP Strukture sa ponavljanjem (2) • Petlja do...while • Izvršava blok koda bar jednom, jer se uslov za izlazak iz petlje nalazi na njenom kraju. • Osnovna struktura petlje je: • do • izraz; • while (uslov); • Primer: prikaz brojeva od 1 do 5 • $num = 1; • do • { • echo $num.”<br />”; • $num++; • } • while($num <=5); • Izlazak iz upravljačke strukture • Postoje tri načina da se prekine izvršavanje bloka koda: • iskaz break – izvršavanje skripta će se nastaviti od prvog reda iza petlje • iskaz continue – započinje novu iteraciju petlje • iskaz exit – prekida izvršavanje celog PHP skripta; koristi se kada se utvrdi neka greška

  26. PHP Nizovi (1) • Niz (array) je promenljiva koja sadrži skup vrednosti u nekom redosledu. Jedan niz može imati više elemenata, a svaki element sadrži jednu vrednost (na pr. tekst, broj, drugi niz). Svakom elementu niza pridružen je indeks pomoću koga se pristupa elementu. • PHP podržava: • Numerički indeksirane nizove, koji su slični nizovima u drugim programskim jezicima • Asocijativne nizove, kod kojih indeksi mogu biti reči ili druge informacije

  27. PHP Nizovi sa numeričkim indeksima (1) • U PHP-u, numerički indeksi počinju nulom, mada se umesto ove može zadati i neka druga vrednost. • Inicijalizacija niza sa numeričkim indeksima se obavlja primenom jezičke konstrukcije array(). • $proizvodi = array(‘Olovka’, ‘Sveska’, ‘Knjiga’); • Niz se ne mora inicijalizovati ručno: • Ako se podaci već nalaze u drugom nizu, mogu se iskopirati u dati niz primenom operatora =. • Ako se želi niz rastućih brojeva, može se upotrebiti funkcija range(). • $brojevi = range(1, 10); • $neparni = range(1, 10, 2); • $slova = range(‘a’, ’z’);

  28. PHP Nizovi sa numeričkim indeksima (2) • Pistupanje sadržaju niza se obavlja pomoću imena niza i indeksa koji određuje element kome se pristupa. Indeks se zadaje u okviru uglastih zagrada. • $proizvodi[0] • Sadržaj elementa niza menja se pomoću operatora =. • $proizvodi[0] = ‘Lenjir’; • Dodavanje novog elementa na kraj niza se obavlja na sledeći način: • $proizvodi[3] = ‘Bojice’; • Sadržaj niza se može prikazati sledećim kodom: • echo “$proizvodi[0] $proizvodi[1] $proizvodi[2] $proizvodi[3]”; • Sadržaj niza se može prikazati u for petlji: • for ($i = 0; $i < 3; $i++) • echo “$proizvodi[$i]”; • Sadržaj niza se može prikazatii posebnom,foreach petljom za rad sa nizovima (svaki element niza se redom smešta u promenljivu $tekuci čija se vrednost onda ispisuje): • foreach ($proizvodi as $tekuci) • echo “$tekuci.’ ‘;

  29. PHP Asocijativni nizovi (1) • U PHP-u postoje nizovi u kojima se svakom elementu može pridružiti 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 može 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; • Sadržaju navedenog niza se može pristupiti u obliku: • $cene[‘Olovka’], $cene[‘Sveska’], $cene[‘Knjiga’]

  30. PHP Asocijativni nizovi (2) • Rad u petlji sa asocijativnom nizovima zahteva korišćenje foreach petlje, ili funkcija list() i each(). • Struktura foreach petlje u ovom slučaju uključuje i indekse: • foreach ($cene as $indeks => $vrednost); • echo $indeks. ‘=>’ .$vrednost. ‘<br />’; • Sadržaj niza se može nabrajati pomoću funkcije each(): • while ($element = each($cene)) { • echo $element[‘key’]; • echo ‘ - ’; • echo $element[‘value’]; • echo ‘<br />’; • } • Funkcija each() čita tekući element niza i pomera interni pokazivač na naredni element. Pošto se poziva unutar while petlje, ona redom poziva elemente niza i zaustavlja se kad dođe do njegovog kraja. U navedenom kodu, promenljiva $element je niz od dva elementa.

  31. PHP Asocijativni nizovi (3) • Sadržaj niza se može nabrajati i pomoću funkcije list(). Dve vrednosti koje daje funkcija each() mogu se razdvojiti na sledeći način: • 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 može se obraditi u petlji: • while (list($proizvod, $cena) = each( $cene )) • echo “$proizvod - $cena<br />”;

  32. PHP PHP i baze podataka Osnovna arhitektura sistema za pristup bazama podataka iz Web aplikacija sastoji se od Web browser-a, Web servera, mašine za izvršavanje skriptova i servera baze podataka. 2 3 1 Izvršno okruženje za PHP Server baze podataka Web browser Web server 6 4 5 • Tipična transakcija baze podataka na Web-u sastoji se od sledećih koraka: • Korisnikov Web browser šalje HTTP zahtev za određenu Web stranicu (.php) • Web server prima zahtev za prikazivanje stranice, učitava datoteku u kojoj se ona nalazi i sadržaj datoteke prosleđuje izvršnom okruženju na obradu. • PHP-ovo izvršno okruženje počinje sintaksnu analizu skripta. Ako skript sadrži naredbe za uspostavljanje veze sa bazom podataka, PHP otvara vezu sa serverom baze i šalje mu odgovarajući upit. • Server baze prima upit, obrađuje ga i rezultat vraća izvršnom okruženju. • PHP-ovo izvršno okruženje završava odradu skripta, što podrazumeva i formatiranje rezultata upita u HTML kod koji šalje Web serveru. • Dobijeni HTML kod, Web server prosleđuje čitaču koji ga prikazuje.

  33. Book-O-Rama Catalog Search Choose Search Type: Enter Search Term: Author Search PHP Pretraživanje baze podataka (1) Koraci tipične transakcije biće ilustrovani na primeru pretraživanja baze podataka koja sadrži katalog knjiga. Najpre treba omogućiti korisniku da unese podatke po kojima će se pretraživati, tj. treba generisati HTML stranicu sa formom za unos podataka. Kada korisnik unese kriterijum pretrage (u ovom primeru to može biti autor, ime knjige ili isbn kod knjige) i ključnu reč, pritiskom na dugme Search poziva se skript results.php koji se nalazi na Web serveru. Stranica za pretraživanje baze podataka: search.html <html> <head> <title>Book-O-Rama Catalog Search</title> </head> <body> <h1>Book-O-Rama Catalog Search</h1> <form action=“results.php” method=“post”> Choose Search Type:<br /> <select name=“searchtype”> <option value=“author”>Author</option> <option value=“title”>Title</option> <option value=“isbn”>ISBN</option> </select> <br /> Enter Search Term:<br /> <input name=“searchterm” type=“text”> <br /> <input type=“submit” value=“Search”> </form> </body> </html> Izgled stranice za pretraživanje

  34. PHP Pretraživanje baze podataka (2) <html> <head> <title>Book-O-Rama Search Results</title> </head> <body> <h1>Book-O-Rama Search Results</h1> <?php // napravi promenljive s kratkim imenima $searchtype=$_POST[‘serachtype’]; $searchterm=$_POST[‘serachterm’]; $searchterm=trim($serachterm); if (!$searchtype || !$searchterm) { echo ‘You have not entered search details.’. ‘ Please go back and try again.’; exit; } if (!get_magic_quotes_gpc()) { $searchtype=addslashes($searchtype); $searchterm=addslashes($searchterm); } @ $db=new mysqli(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’); if (mysqli_connect_errno()) { echo ‘Error: Could not connect to database.’. ‘ Please try again later.’; exit; } $query = “select * from books where “.$searchtype.”like’%”.$searchterm.”%’”; $result = $db->query($query); $num_results = $result->num_rows; echo ‘<p>Number of books found: ‘ $num_results.’</p>; for ($i=0; $i < $num_results; $i++) { $row = $result->fetch_assoc(); echo ‘<p><strong>.($i+1).’.Title: ‘; echo ‘htmlspecialchars(stripslashes($row[‘title’’])); echo ‘</strong><br />Author: ’; echo ‘stripslashes($row[‘author’]); echo ‘<br /> ISBN: ’; echo ‘stripslashes($row[‘isbn’]); echo ‘<br /> Price: ’; echo ‘stripslashes($row[‘price’]); echo ‘</p>’; } $result->free(); $db->close(); ?> </body> </html> 1 2 PHP skript: results.php

  35. PHP Sadržaj skripta • U svakom skriptu koji pristupa bazi podataka sa Web-a treba da postoji • odgovarajući kod za sledeće osnovne korake: • Provera podataka koje je korisnik uneo. • Filtriranje ulaznih podataka. • 3. Uspostavljanje veze sa odgovarajućom bazom podataka. • 4. Zadavanje upita toj bazi podataka. • 5. Učitavanje rezultata. • 6. Prikaz rezultata korisniku.

  36. PHP Provera ulaznih podataka • Pre nego što se uspostavi veza sa bazom podataka, potrebno je proveriti ispravnost podataka koje je korisnik uneo. • Provera podataka obuhvata sledeće korake: • a) Najpre treba ukloniti beline koje je korisnik možda uneo. To se radi funkcijom trim() koja se primenjuje na ulazne promenljive. • $searchterm=trim($searchterm); • b) Zatim treba proveriti da li je korisnik uneo pojam koji traži i kriterijum pretrage. Ovde se vidi važnost prethodnog koraka, jer pojam koji se sastoji samo od beline funkcija trim() briše. • if (!$searchtype || !$searchterm) { • echo ‘You have not entered search details.’. • ‘ Please go back and try again.’; • exit; • }

  37. PHP Filtriranje ulaznih podataka • Da bi se ispravno obradili podaci koje korisnik šalje, neophodno je filtrirati upravljačke znakove (“, ‘, \i znak NULL) iz tih podataka. PHP podržava više funkcija za formatiranje stringova radi unošenja u bazu podataka. • Pre nego što se proslede bazi podataka, svi podaci koje korisnik šalje moraju se obraditi pomoću sledećih funkcija: • a)addslashes(). Ova funkcija dodaje znak \ ispred svakog upravljačkog 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 može biti podešen tako da automatski dodaje i uklanja \. Provera da li je sistem tako podešen obavlja se pomoću navedene funkcije(tzv. mehanizam “magičnih navodnika”). Sufiks gpc je skraćenica za GET, POST i COOKIES, što znači da se automatski konvertuju promenljive iz tih izvora. • if (!get_magic_quotes_gpc()) { • $searchtype=addslashes($searchtype); • $searchterm=addslashes($searchterm); • }

  38. PHP Filtriranje rezultata Pre prikazivanja korisniku, podatke dobijene iz baze podataka takođe treba filtrirati, kako bi se iz njih izbacio znak \ unet prilikom filtriranja ulaznih podataka, i izbegao pogrešan rad baze zbog specijanih znakova u HTML-u. Pre nego što se prikažu korisniku, podatke treba obraditi pomoću sledećih funkcija: a)stripslashes(). Ova funkcija izbacuje znak \ iz zadatog stringa. Njome se podaci moraju obraditi ukoliko je mehanizam “magičnih navodnika” bio uključen. b)htmlspecialchars(). Ova funkcija se koristi za pretvaranje znakova koji u HTML-u imaju specijalno značenje (&, “, < i >) u HTML entitete. Na primer, znak< pretvara se u &lt;.

  39. PHP 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 podržava upotrebu i objektno-orijentisane i proceduralne sintakse. Objektno-orijentisani oblik sintakse je: @ $db=new mysqli(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’); Na ovaj način je napravljena instanca klase mysqli i uspostavljena veza sa serverom ‘localhost’ pod korisničkim nalogom ‘bookorama’ i lozinkom ‘bookorama123’, i određena je baza podataka ‘books’ sa kojom će se raditi. Ovaj oblik omogućava 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 vraća 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 greške i može se upotrebiti ispred svakog izraza. Ako se ovaj operator upotrebi, upozorenje o greškama se zanemaruje. Tada bi obavezno trebalo napisati kod za obradu grešaka.

  40. PHP Uspostavljanje veze sa bazom (2) • Rezultat pokušaja uspostavljanje veze sa bazom podataka se uvek mora proveriti u kodu, jer ako on nije odgovarajući, preostali deo skripta neće raditi. • Blok koda za proveru uspešnosti konekcije sa bazom je: • if (mysqli_connect_errno()) { • echo ‘Error: Could not connect to database.’. • ‘ Please try again later.’; • exit; • } • Funkcija mysqli_connect_errno vraća broj greške u slučaju neuspešnog povezivanja, odnosno 0 u slučaju uspešnog. • Broj istovremenih veza koje se mogu uspostaviti sa MySQL serverom je ograničen parametrom max_connections koji se podešava se u datoteci my.conf.

  41. PHP Zadavanje upita bazi podataka • Pre izvršavanja upita, preporučuje se njegovo definisanje u vidu stringa: • $query = “select * from books where $searchtype like ’%$searchterm%’”; • U ovom upitu tražimo pojam koji je korisnik zadao ($searchterm) u polju koje je izabrao ($searchtype). • U objektno-orijentisanoj verziji, izvršavanje upita se pokreće pomoću funkcije: • $result = $db->query($query); • Funkcija vraća objekat koji omogućava čitanje rezultata upita. • U proceduralnoj verziji, upit se izvršava komandom: • $result = mysqli_query($db, $query); • Funkcija vraća identifikator tipa resurs. • U oba slučaja, ako se funkcija nije uspešno izvršila, rezultat je logička vrednost false.

  42. PHP Učitavanje rezultata upita (1) • Postoji više funkcija koje omogućavaju da se pomoću objekta ili identifikatora rezultata učitaju 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 smešta se u svojstvonum_rows objekta rezultata ($result), kome se pristupa na sledeći način: • $num_results = $result->num_rows; • Kada se koristi proceduralni oblik, funkcija mysqli_num_rows(), čiji je parametar identifikator rezultata, vraća broj redova: • $num_results = mysqli_num_rows($result); • Broj vraćenih redova je koristan podatak ako treba obraditi ili prikazati rezultate. Ako je on poznat, može se upotrebiti petlja: • for ($i=0; $i < $num_results; $i++) • { • // obrada rezultata • }

  43. PHP Učitavanje rezultata upita (2) • Da bi se pročitao 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 vraćaju podatke u obliku acosijativnog niza, u kome je svaki ključ (indeks) ime jednog atributa, a svaka vrednost u nizu je odgovarajuća vrednost učitana iz baze. • Niz $row omogućava da se svako njegovo polje prikaže u odgovarajućem obliku: • echo ‘</strong><br />Author: ’; • echo ‘stripslashes($row[‘author’]); • echo ‘<br /> ISBN: ’; • echo ‘stripslashes($row[‘isbn’]); • echo ‘<br /> Price: ’; • echo ‘stripslashes($row[‘price’]);

  44. PHP Učitavanje rezultata upita (3) • Red podataka iz skupa rezultata se može vratiti i u vidu niza sa numeričkim indeksima. U tu svrhu se koriste sledeće funkcije: • $row = $result->fetch_row(); • ili • $row = mysqli_fetch_row($result); • U ovom slučaju, vrednosti atributa će se nalaziti u elementima niza $row[0], $row[1], itd. • Red podataka se može učitati i u obliku objekta na sledeći način: • $row = $result->fetch_object(); • ili • $row = mysqli_fetch_object($result); • Svakom atributu se onda pristupa primenom sintakse: $row->title, $row->author, itd.

  45. PHP Prekidanje veze sa bazom Skup rezultata se oslobađa pozivanjem metoda: $result->free(); ili mysqli_free_result($result); Zatim se za zatvaranje baze može koristiti metod: $db->close(); ili funkcija mysqli_close($db); Pozivanje funkcija za zatvaranje baze nije obavezno, jer će se veza ionako prekinuti po izvršenju skripta.

  46. PHP Unos podataka u bazu (1) Unošenje podataka u bazu je vrlo slično č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 unošenje novih knjiga u bazu: newbook.html <html> <head> <title>Book-O-RamaNew Book Entry</title> </head> <body> <h1>Book-O-RamaNew Book Entry</h1> <form action=“insert_book.php” method=“post”> <tableborder=“0”> <tr> <td>ISBN</td> <td><input type=“text” name=“isbn”></td> </tr> <tr> <td>Author</td> <td><input type=“text” name=“author”></td> </tr> <tr> <td>Title</td> <td><input type=“text” name=“title”></td> </tr> <tr> <td>Price</td> <td><input type=“text” name=“price”></td> </tr> <tr> <tdcolspan=“2”><input type=“submit” value=“Register”></td> </tr> </form> </body> </html> 1 2

  47. Book-O-Rama New Book Entry ISBN Author Title Price $ Register PHP Unos podataka u bazu (2) Podaci iz ove forme prosleđuju se skriptu insert_book.php koji čita dobijene podatke, obavlja provere i pokušava da upiše podatke u bazu. Izgled stranice za unos if (!get_magic_quotes_gpc()) { $isbn=addslashes($isbn); $author=addslashes($author); $title=addslashes($title); $price=doubleval($price); } @ $db=new mysqli(‘localhost’, ‘bookorama’, ‘bookorama123’, ‘books’); if (mysqli_connect_errno()) { echo ‘Error: Could not connect to database.’. ‘ Please try again later.’; exit; } $query = “insert into books values (‘ “.$isbn.” ‘,’ “.$author.” ‘,‘“.$title. “ ‘,’ “.$price.” ‘)”; $result = $db->query($query); if ($result) echo $db->affected_rows.’ book inserted into database.’; $db->close(); ?> </body> </html> 2 <html> <head> <title>Book-O-RamaBook Entry Results</title> </head> <body> <h1>Book-O-RamaBook Entry Results</h1> <?php $isbn=$_POST[‘isbn’]; $author=$_POST[‘author’]; $title=$_POST[‘title’]; $price=$_POST[‘price’]; if (!$isbn || !$author || !$title || !$price) { echo ‘You have not entered all the required details.’. ‘ Please go back and try again.’; exit; } 1 PHP skript: insert_book.php

  48. PHP Unos podataka u bazu (3) Kod skripta insert_book.php je sličan kodu skripta za pretraživanje baze podataka. On implementira sledeće 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 numeričkom polju postiže se primenom funkcije dubleval().

  49. PHP Unos podataka u bazu (4) 3. Uspostavlja se konekcija sa bazom podataka. 4. Definiše se upit koji se šalje bazi podataka. $query = “insert into books values(‘ “.$isbn.” ‘,’ “.$author.” ‘,‘“.$title. “ ‘,’ “.$price.”‘)”; $result = $db->query($query); Značajna razlika između upotrebe upita INSERT u odnosu na SELECT je u načinu korišćenja 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 1 book inserted into database. Izgled stranice nakon izvršenja skripta insert_book.php

More Related