42
1 PHP programiranje – Uvod 1. Uvod U ovim vežbanjima biće reči o jednoj vrsti internet programiranja koja ima za cilj da omogući kreiranje dinamičkih web sajtova koji se u ogromnom broju slučajeva oslanjaju na baze podataka. Prednost ovakvih sajtova u odnosu na statične je ogromna. U početku web sajtovi su bili veoma prosti i imali su mali broj strana. Ovi sajtovi su se često nazivali “web prezentacijama”. Vremenom sajtovi su postajali sve složeniji i obimniji. Takođe, javljali su se problemi kod ažuriranja velikog broja strana. Razvojem interneta došlo je do pojave on-line prodavnica, blog sajtova, itd. Vremešni HTML sam, nije mogao da odgovori narastajućim izazovima. Zbog toga se pojavio PHP koji se smatra (između ostalog) nadgradnjom HTML-a. On je udahnuo novi život HTML-u. Mogućnosti PHP-a o kojima će biti reči u ovom radu kao i njegova sposobnost intergracije sa bazama podataka dovela je toga, da se danas sa pravom dinamički sajtovi mogu nazvati “web aplikacijama”. Tema PHP programiranja je veoma obimna, kompleksna i uz to traži poznavanje drugih internet tehnologija, a tu pre svega spadaju HTML/XHTML, CSS, i naravno SQL (zbog rada sa bazama podataka). U ovom radu sva pažnja biće usmerena na osnove PHP programiranja. Te osnove biće prikazane na najprostiji mogući način, skoro uvek po principu “primer-objašnjenje”. (Uz ove vežbe dolazi i CD na kome se nalaze svi primeri korišćeni u ovom radu, kao i potreban software.) Na početku biće bolje objašnjen sam PHP, razlozi zašto koristiti PHP, način kako PHP funkcioniše, zatim potreban software za funkcionisanje PHP-a i njegova instalacija. Dalje biće reči o tipovima podataka i zanimljivom načinu, na koji PHP operiše sa njima. Sledeće poglavlje sadrži sve najvažnije elemente jedne web stranice i način na koji se ti elementi formiraju i koriste. U tom delu prezentovane su osnove MySQL-a kao i njegova intergracija sa PHP-om. Možda će izgledati dase u osmom poglavlju skreće sa teme, ali nije tako. Svoju pravu moć i upotrebljivost PHP iskazuje tek u integraciji sa bazama podataka.

Php Praktikum Za Lv

Embed Size (px)

Citation preview

Page 1: Php Praktikum Za Lv

1

PHP programiranje – Uvod 1. Uvod

U ovim vežbanjima biće reči o jednoj vrsti internet programiranja koja ima za cilj da omogući kreiranje dinamičkih web sajtova koji se u ogromnom broju slučajeva oslanjaju na baze podataka. Prednost ovakvih sajtova u odnosu na statične je ogromna. U početku web sajtovi su bili veoma prosti i imali su mali broj strana. Ovi sajtovi su se često nazivali “web prezentacijama”. Vremenom sajtovi su postajali sve složeniji i obimniji. Takođe, javljali su se problemi kod ažuriranja velikog broja strana. Razvojem interneta došlo je do pojave on-line prodavnica, blog sajtova, itd. Vremešni HTML sam, nije mogao da odgovori narastajućim izazovima. Zbog toga se pojavio PHP koji se smatra (između ostalog) nadgradnjom HTML-a. On je udahnuo novi život HTML-u. Mogućnosti PHP-a o kojima će biti reči u ovom radu kao i njegova sposobnost intergracije sa bazama podataka dovela je toga, da se danas sa pravom dinamički sajtovi mogu nazvati “web aplikacijama”.

Tema PHP programiranja je veoma obimna, kompleksna i uz to traži poznavanje drugih internet tehnologija, a tu pre svega spadaju HTML/XHTML, CSS, i naravno SQL (zbog rada sa bazama podataka). U ovom radu sva pažnja biće usmerena na osnove PHP programiranja. Te osnove biće prikazane na najprostiji mogući način, skoro uvek po principu “primer-objašnjenje”. (Uz ove vežbe dolazi i CD na kome se nalaze svi primeri korišćeni u ovom radu, kao i potreban software.)

Na početku biće bolje objašnjen sam PHP, razlozi zašto koristiti PHP, način kako PHP funkcioniše, zatim potreban software za funkcionisanje PHP-a i njegova instalacija. Dalje biće reči o tipovima podataka i zanimljivom načinu, na koji PHP operiše sa njima. Sledeće poglavlje sadrži sve najvažnije elemente jedne web stranice i način na koji se ti elementi formiraju i koriste. U tom delu prezentovane su osnove MySQL-a kao i njegova intergracija sa PHP-om. Možda će izgledati dase u osmom poglavlju skreće sa teme, ali nije tako. Svoju pravu moć i upotrebljivost PHP iskazuje tek u integraciji sa bazama podataka.

Page 2: Php Praktikum Za Lv

2

2. Početna razmatranja 2.1 Šta je PHP?

PHP je server-side scripting language. Pitanje se samo nameće:

Šta je to “server-side scripting language”?

“Scripting language” nije potpuno isto što i “programming language” iako su ovi pojmovi veoma slični. Osnovna razlika je u tome što “Scripting language” programi reaguju samo na upit, dok “programming language” programi mogu da rade nazavisno od toga da li korisnik daje informacije ili zadaje upite.

“Server-side” znači da se PHP programi izvršavaju na serveru a da se rezultati tj. Izlazni podaci iz PHP programa šalju klijentu. U slučaju PHP-a, klijent je web browser. Većini naprednih korisnika interneta i svim internet programerima (web developer-ima) poznat je Java script. To je takodje “scripting language” ali za razliku od PHP-a koji je “server-side scripting language” Java script je “client-side scripting language”. To znači da se Java script programi izvršavaju na strani klijenta (izvšava ih web browser).

Da bi mogao da se izvrši PHP program ne zahteva kompajliranje kao većina programskih jezika ali mora postojati Server koji će ga izvršiti. PHP je skraćenica (inverzni akronim) od “Hypertext Preprocessor”. PHP je dizajniran i usko specijalizovan za rad sa HTML-om i njega treba posmatrati kao nadgradnju HTML-a. Linije PHP koda mogu biti ugrađene u HTML kod i/ili PHP programi mogu na izlazu davati HTML kod. U suštini PHP funkcioniše tako što korisnik preko web browser-a zada neki upit, Server primi upit, prosledi ga PHP-u koji ga obradi i onda vraća nazad informacije klijentu odnosno web bowseru.

PHP je mnogo fleksibilniji od HTML-a. Web aplikacje pisane samo HTML-om daju “statične” web stranice, što znači da će svi korisnici koji im pristupaju, web stranice videti na isti način. Web aplikacije pisane PHP-om daju “dinamične” web stranice tj. omogućavaju da korisnici vide različite informacije na različite načine u zavisnosti od svojih potreba i želja. Sintaksa PHP je vrlo slična sintaksi C, Java i Perl jezika. Poznavanje jednog od ovih jezika je poželjno ali nije potrebno da bi se savladao PHP. Sa druge strane znanje PHP jezika može biti dobra osnova za učenje gore navedenih jezika.

Page 3: Php Praktikum Za Lv

3

2.2 Zašto koristiti PHP? Ovo pitanje ustvari glasi “Zašto koristiti PHP a ne neku drugu

konkurentsku web tehnologiju?”

1. PHP je Open Source/Free Software. Što znači da svako može menjati source kod kako želi i da je PHP besplatan što je vrlo bitno. 2. PHP je (Cross-Platform) tj. NEZAVISAN od platforme na kojoj se programira i/ili koriste programi. Ovo znači da PHP možemo koristiti na Windows, Mac ili Linux serveru i programi pisani na jednoj platformi radiće na ostalim platformama bez problema. 3. Web Developnemt Specific. To znači da je PHP usko specijalizovan za razvoj web aplikacija. 4. Može da bude “Object-Oriented” (od verzije 5). 5. 20 Miliona sajtova na internetu koriste PHP tehnologiju. PHP se stalno razvija a broj sajtova sa konkurentnim tehnologijama je vrlo mali. 2.3 Potreban Software

Da bi smo mogli da programiramo u PHP-u i koristimo ga, potrobno je nekoliko stvari:

1. Web Server. On će izvršavati PHP programe. (Apache) 2. PHP 3. Database. (MySQL) 4. Text editor. U njemu ćemo pisati PHP kod. (Adobe Dreamweaver CS3 ili neki drugi program. Inače dovoljan je i Notepad.) 5. Web Browser. Za testiranje. (Firefox v2.0 ili bilo koji drugi web browser IE, Opera, Safari, itd.)

U predhodnom poglavlju je rečeno da je PHP “cross-platform” tako da nije bitno da li imamo Windows, Mac, Linux ili bilo koji drugi operativni sistem. Takođe umesto gore navedenih programa možemo koristiti neke druge, a program napisan u PHP-u radiće na svim platformama i na bilo kom hardware-u.

Page 4: Php Praktikum Za Lv

4

2.4 Instalacija U ovom radu biće korišćeni predhodno navedeni programi i

operativni sistem Windows XP. Na Windows platformi potrebno je imati sledeću kombinaciju software-a:

Apache ( httpd.apache.org ) MySQL ( dev.mysql.com ) PHP ( www.php.net )

Pojedinačna instalacija (i inicijalno podešavanje) svakog od ovih programa je veoma komplikovana tako da će biti korišćen kombinovani installer koji sadrži sva tri programa i čini instalaciju lakšom.

WAMP ( www.wampserver.com ). Sa navedenog sajta treba skinuti WAMP5 v1.7.4. Ovo je najnovija verzija Wamp Servera u vreme pisanja ovog rada. Instalacija je ista kao i kod bilo kog drugog programa.

2.5 Prvi koraci

Posle pravilne instalacije, Wamp server će biti instaliran na sledećoj lokaciji:

(C:\wamp\) sem ako se u toku instalacije ne izabere neki drugi direktorijum. Unutar wamp direktorijuma nalaziće se nekoliko poddirektorijuma i među njima:

(C:\wamp\www) Unutar tog direktorijuma ćemo napraviti novi pod-direktorijum u kome ćemo pisati primere koji slede.

(C:\wamp\www\learning_php) PHP programi su obični tekstualni fajlovi koji imaju ekstenziju

“.php” Napravimo fajl proba.php pomoću Notepada i snimimo ga u gore navedeni direktorijum. Unutar ovog fajla treba da stoje sledeće linije koda: <?php phpinfo( ); ?> <?php je opening tag. ?> je closing tag. phpinfo( ); je funkcija.

Startujmo sada web browser (u ovom radu će biti korišćen Firefox) i u liniji za adresu napišimo:

Page 5: Php Praktikum Za Lv

5

http://localhost/learning_php/proba.php po pritisku na taster ENTER u našem BROWSERU dobijamo

Rezultat funkcije phpinfo()

Ova stranica daje sveobuhvatne informacije o PHP-u

instaliranom na našem računaru. Od verzije, konfiguracije, opcija koje su aktivne ili ne, itd. Previše je stvari na ovoj stranici da bi se sve mogle objasniti, za sada treba znati samo šta ova stranica predstavlja i kako smo došli do nje. Drugim rečima, kreiranjem gore nadevenog fajla i korišćenjem built-in funkcije phpinfo(); na izlazu našeg prvog programa dobijamo info stranicu. Iako izgleda da je ovaj program neupotrebljiv, nije tako. Ovaj program smo napisali da bi smo proverili da li su PHP i Server (Apache) dobro instalirani, i da li rade. Napišimo sada novi program, koji sadrži sledeće linije koda:

<html>

<head><title>Zdravo Svete</title></head> <body>

<?php echo "Zdravo Svete!"; ?> <br/>

Page 6: Php Praktikum Za Lv

6

</body>

</html> i fajl nazovimo zdravo1.php. U browseru sada napišimo:

httpp://localhost/learning__php/zdravo1.php i dobićemo sledeće:

Rezultat rada programa zdravo.php

Jasno je šta program koji smo napisali radi, ali pogledajmo šta je rezultat, tj. source kod koji server daje klijentu ( browseru ):

Page 7: Php Praktikum Za Lv

7

Generisani HTML kod

Kao što se vidi sa slike PHP linija koda je izvršena na serveru a

rezultat je poslat klijentu. Ovo je suština rada PHP-a. U gore napisanom kodu jasno se vidi kako je PHP kod “ugrađen” u HTML kod. Delovi HTML koda u ovom radu neće biti objašnjavani jer se podrazumeva da je znanje HTML-a apsolutno neophodno da bi se razumeo PHP.) Ako sada malo izmenimo kod programa zdravo.php i dodamo sledeće linije: (odmah ispod prve linije PHP koda) <?php print "Zdravo Svete!"; ?> <br/> <?php echo "Zdravo"." Svete!"; ?> <br/> i snimimo ga kao zdravo2.php. Startovanjem ovog programa dobićemo:

Page 8: Php Praktikum Za Lv

8

Iz koda se jasno vidi da komanda “print” ima istu funkciju kao i “echo” ali praksa je pokazala da je bolje koristiti “echo”, jer je brža. U trećoj liniji koda, <?php echo "Zdravo"." Svete!"; ?> izvršena je “konkatenacija”” dva stringa tj. izvršeno je nadovezivanjee stringa “ Svete!” na string “Zdravo”. Tačkom između dva stringa ili više stringova) vrši se konkatenacija. Vratimo se sada na primer “zdravo.php”. Od vitallnog je značaja shvatiti kako ustvari radi PHP. Pogledajmo dijagram:

Page 9: Php Praktikum Za Lv

9

Ovaj dijagram predstavlja put koji prelazi jedan zahtev upućen od korisnika. Znači korisnik preko svog web browser-a šalje zahtev za nekom stranicom. U našem primeru to je http://localhost/learning_php/zdravo.php

Server (u našem slučaju Apache) traži stranicu zdravo.php koja

se nalazi u fajl sistemu. Kada je nađe prosleđuje je PHP-u ili tačnije PHP parser-u. Sa desne strane bloka “Process PHP” nalazi se “Database” blok. U našem primeru nismo koristi bazu podataka ali treba naglasiti da moć PHP-a upravo leži u povezivanju internet tehnologija i baza podataka. O ovome će kasnije biti reči. Za sada treba reći samo još to da je ovaj “Database” blok ustvari MySQL.

Po izvršavanju PHP linija koda generiše se HTML kod koji se šalje nazad web browser-u.

3. Elementi Web stranica 3.1 Kreiranje Web stranica

Od ovog poglavlja prelazimo na praktične primere upotrebe PHP jezika. Kao što je u prvom poglavlju rečeno PHP je nadogradnja na HTML i specijalizovan je za kreiranje Web aplikacija tj. Web stranica. Za razliku od HTML-a PHP generiše Web strane koristeći

Page 10: Php Praktikum Za Lv

10

informacije koje dobija od korisnika koji razgleda sajt i u zavisnosti od toga generiše stranice. PHP od korisnika dobija informacije na tri načina:

1. URLs/Links (linkovi na koje kiliknu korisnici) 2. Forms (formulari koje popunjavaju korisnici) 3. Cookies (“kolačići” koje generiše web browser korisnika)

Ovo su tri jedina načina pomoću kojih PHP dobija informacije od korisnika koji razgleda sajt. 3.2 Linkovi (Links)

Prvo da ponovimo nešto iz HTML-a. Ako imamo dve stranice “prvastrana.php” i “drugastrana.php” i na prvoj strani želimo da imamo link koji vodi do druge strane u HTML-u smo to radili na sledeći način: <html>

<head><title>Prva Strana</title></head> <body> <a href="drugastrana.php">Druga Strana</a> </body>

</html>

Na izlazu se dobija samo link Druga Strana kao na slici. Funkcionisanje linkova je svima dobro poznato kao i tag koji se za to koristi. Treba reći da href="drugastrana.php" predstavlja putanju do druge strane. Ukoliko se web strana na koju želimo da pređemo klikom na link, nalazi u drugom direktorijumu onda moramo pisati i putanju a ne samo ime fajla. Npr.

href=”../direktorijum2/drugastrana.php”. Ovde treba naglasiti da putanju uvek treba pisati sa “/” a ne sa

“\”. Link će raditi i u jednom i u drugom slučaju, ali zbog kompatibilnosti sa Unix serverima treba pisati putanju sa “/”.

Page 11: Php Praktikum Za Lv

11

Uz <a href="drugastrana.php"> mogli smo u HTML-u da

dodamo ID linku npr. <aa href="drugastrana.php?id=1"> čime bismo dali ID odredjenoj strani. Takođe mogli smo da dodamo više parametara ne samo ID. Ali poenta je kako pročitati taj ID ili druge parametre na drugoj strani i kako ih koristiti. Tu na scenu stupa PHP. Ako malo izmenimo fajl prvastrana.php tako da izgleda ovako:

A na drugoj strani (drugastrana.php) napišemo sledeći kod:

Page 12: Php Praktikum Za Lv

12

Za prvu stranu na izlazu dobijamo.

Klikom na link dolazimo na drugu stranu kao na slici.

Page 13: Php Praktikum Za Lv

13

Na stranici prvastrana.php smo linku dodali dva parametra

“ime” i “id”. To je tekovina HTML-a i jos uvek nema PHP-a. Na stranici drugastrana.php imamo jednu novinu a to je $_GET. $_GET je Superglobalna promenljiva. PHP u sebi sadrži više Superglobalnih promenljivih. $_GET je samo jedna od njih. (Ostale će biti objašnjene kada dođemo do njih.) $_GET je ustvari niz (array) promenljivih u koje PHP smešta naše parametre iz linkova (ali ne samo to već i druge stvari). Sa print_r($_GET); smo izlistali sadržaj ove promenljive i dobili: Array ( Šime] => Jovana Šid] => 42 ) Jasno je da je ovaj niz asocijativan. (“ime” je key “Jovana” je value, “id” je key “42” je value.) Asocijativne nizove smo već objasnili tako da nije teško uzvući vrednosti iz niza korišćenjm novih promenljivih. <strong> tag ne treba da zbuni, on samo podebljava font na izlazu, da bi vizuelno poboljšao izlaz.

3.3 Encoding U predhodnom primeru smo videli kako se formiraju linkovi i

kako se prosleđuju parametri odnosno informacije sa jedne stranice na drugu. Ali ovde se javlja problem ako informacije koje se šalju sadrže specijalne znake kao & $ “space” (razmak) itd. Da bi smo uspešno preneli i ove znake potrebno je na stranici koja salje

Page 14: Php Praktikum Za Lv

14

informacije izvršiti enkodovanje. Recimo želimo da pošaljemo parametar “ime” koji ima vrednost “Jovana&”. Dobro ovo nije baš dobar primer ali recimo da pravimo aplikaciju za firmu čiji je naziv “Krstić & sin” i želimo da pošaljemo taj string kao vrednost parametra ime. To ćemo uraditi na sledeći način Primer je prvastrana2.php.

Drugi fajl (drugastrana.php) ostaje isti kao i u predhodnom

primeru. Na izlazu web bowsera dobijamo:

Page 15: Php Praktikum Za Lv

15

Kao što vidimo na slici kompletan sring “Krstic && sin” je

dodeljen kao vrednost parametru “ime”. Ako pogledamo polje za adresu u browseru vidimo da je ustvari space (razmak) predstavljen posle url enkodovanja sa “+”” a znak “&” je predstavljen kao”%26”. Nije potrebno da znamo koji znak se pretvara u koji. PHPP sve radi umesto nas. Logično bi bilo pošto smo izvršili enkodovanje na prvoj strani da sad izvršimo dekodovanje na drugoj strani. To se i radi ali mi to ne vidimo jer PHP to radi (automatski) umesto nas pre nego što pošalje vrednosti superglobalnoj promenljivoj GGET. Znači o dekodovanju ne treba brinuti ali čisto da se zna da postoji funkcija urldecode ( ); koja vršii suprotnu funkciju od urlencode ( ); Da nismo koristili urlencode ( ); dobili bi smo grešku. Postoji još jedna rrsta URL enkodovanja a to je rawurlencodde ( );. Raw URL enkodovanje je veoma slično kao i URL enkodovanje i ono predstavlja način na koji server vrši enkodovanje. ^isto daa bi smo vddeli razliku dodajmo sledeći linije koda fajlu drugastrana.php:

Na izlazu ćemo dobiti:

Page 16: Php Praktikum Za Lv

16

Kao što se vidi sa slike razlika je samo u tome koji znak se kako predstavlja. Kod url enkodovanja razmak se predstavlja kao + a kod rawurl enkodovanja sa %20. Naravno, postavlja se pitanje koju vrestu enkodovanja koristiti? Da bi smo odgovorili na ovo pitanje pogledajmo još jednom kako običan link izgleda:

Znak “??” je namerno uvećan i podvučen da bi se lkko uočio. A

sada objašnjenje. Sve ono što ee unutar href i pre podvučenog znaka pitanja treba enkodovati sa rawurlencode ( ); a sve ono što je posle znaka pitaanja treba enkodovati sa urlencode ( );. Verovatno se pitate zašto. Pa ovako, rawurlencode je blizak serveru a s’ obzirom da se php fajlovi nalaze na serveru pri generisanju imena fajlova pomoću PHP-aa treba koristiti rawurl encode. Urlencode je blizak browwser-u tako sve ono što ide posle znaka pitanja treba enkodovati ovom vrstom kodiranja. Ove preporuke su izvednne na osnovu iskustavaa mnogih profesionalnih PHP proogramera i treba ih se držati iakoo postoji velika verovatnoća da će sve raditi i ako se ne pridržavamo gore navedenih preporuka.Postoji još jedna vrsta enkooovanja koju treba pomenuti a to jee HTLM enkodovanje. Poznato jee da HTMML ne dozvoljava koriššćenje određenih znakova i ukoliko ih ne enkodujemo oni mogu biti ignorisani ili mogu da nam pookvare web stranicu. Daa se to nebi dogodilo koristimo PHHP funkcijuu htmlspecialchars( ); Primer prvastrana3.php:

Page 17: Php Praktikum Za Lv

17

Na izlazu dobijamo:

Da nismo kkoristili htmlspecialchars( ); funkciju na izlazu ne bi

smo dobili “<klikni>”” jer znači manje i veće u HTMML-u formrraju tag-ove i ne mogu se direktnno koristiti. Predhodno navedena funkcija je veoma korisna i kod integracije sa bazama podataka ali o tome u daljem radu.

Page 18: Php Praktikum Za Lv

18

3.4 Formulari (Forms) U predhodnim poglavljima su prikazani linkovi kaao osnovni

način komunikacije korisnika i web pplikacije. Sada će bitii prikazan još jedan način, a to su formulari (forms).. Formulari su vrsta upitnka koji popunjaava korisnkk i te informacije se šalju web aplikaciji tj. serveru. U zavisnosti od prirode formulara informacije se obrađuju od strane servera i/ili šalju u bazu podataka. Da ne bi bilo i suviše komlikovano, u ovom poglavlju će biti prikazan najosnovniji formular koji ima gotovo svaki sajt a to je “log-in” formular. Primer se sastoji iz dva fajla forms.php i process.php. U prvom fajlu je smešten sam formular (i čini ga samo HTML kod, nema PHP-a), dok se u drugom fajlu nalazi programski kod za obradu podataka koji se prikupljaju formularom.

o forms.php:

o proces.php:

Page 19: Php Praktikum Za Lv

19

Startovanjem ovog programa na izlazu dobijamo:

Kao što vidimo dobijamo najosnovniji log-in formular. Ako sada u polje Username upišemo Jovana a u polje Password upišemo zdravo11 u kliknemo na Submit, izvršava se program proces.php i na izlazu dobijamo:

Naravno, u praktičnoj primeni log-in formulara nikada nećemo štampati nazad korisniku Username i Password ali ovde je cilj da se prikaže kako se poslate informacije uzimaju iz superglobalne promenljive POST. Informacije koje unesemo u formular se posle pritiska na submit dugme šalju serveru (PHP-u) koji ih smesta u POST superglobalnu promenljivu koja je (kao i GET) asocijativni niz (array). Uzimanje informacija iz POST asocijativnog niza se vrši na već poznati način. Šta ćemo daje uraditi sa informacija zavisi od prirode informacije. U ovom primeru su informacije uzete iz POST niza i odštampane nazad korisniku.

Page 20: Php Praktikum Za Lv

20

3.5 Cookies Ovo je još jedan način dobijanja informacija od strane

korisnika. Za razliku od predhodna dva (Links i Forms) gde se GET i POST superglobalne promenljive automatski formiraju Ovde moramo da definišemo “cookie” pre nego što možemo da ga koristimo. U ovom primeru koristićemo dva fajla cookies.php i cookies_read.php.

o cookies.php

o cookies_read.php

Page 21: Php Praktikum Za Lv

21

Prvi program na izlazu ne daje ništa jer se u njemu samo definiše cookie. setcookie(name, value, expiration); name je naravno ime koje dodeljujemo cookie-ju, value je vrednost i može da sadrži različite informacije, i expiration je vreme posle koga cookie ističe tj. ne važi više. Interesantno je kako zadajemo expiration argument. time()+(60*60*24*7) Ovo znači od trenutka kada se cookie fomira time( ) cookie traje još nedelju dana. Vreme je u sekundama ali je izraženo preko proizvoda. 60 sekundi jedan minut puta 60 minuta, puta 24 sata, puta sedan dana i dobijamo broj sekundi koliko traje cookie. Mogli smo da sami izračunamo i pišemo odmah u sekundama ali zašto kada to može umesto nas da uradi PHP. 3.6 Sessions

Sesija je veoma slična cookie-ju. Osnovna razlika je u tome što se cookie nalazi u kešu browsera a sesija se nalazi na serveru. Sesija je kao i cookie u stvari falj koji sadrži određene informacije. Sesija funkcioniše tako što se prvo inicijalizuje. Ta inicijalizacija se UVEK vrši na početku coda web strane pre bilo čega drugog. Prilikom inicijalizacije se automatski formira cookie na strani browser-a. U tom cookie-ju se nalazi specijalna referenca koja ukazuje na fajl sesije koji je istovremeno formiran na serveru. U tom fajlu možemo upisati različite vrste informacija. Pogledajmo primer

o sessions.php:

Page 22: Php Praktikum Za Lv

22

Na izlazu ćemo dobiti:

Ovde nije bitan izlaz već šta se dogodilo u pozadini procesa sesije. Prvo imamo inicijalizaciju sesije na vrhu programskog koda. Inicijalizacijom sesije stvoren je cookie fajl u brovzeru klijenta i sesion fajl na serveru. Iz brovzera se može lepo videti cookie i njegov sadržaj kao na slici:

Page 23: Php Praktikum Za Lv

23

Sadržaj cookiea koji je napravila sesija “1516005a87e0cb1000716b46487786aa4b”. Ovo je u stvari ime fajla koji je napravila sesija na serveru. Piaanje se nameće zašto je baš ovako generičko ime koje ljudima nije blisko. Zato da bi se povećala sigurnost. Ukoliko bi ime bilo smisleno i blisko č oveku iskusan haker bi mogao da “ukrade” sesiju od drugih korisnika i kasnije koristi informacije sa malicioznim namerama. Naravno bebbednost web aplikacija je veoma široka oblast koja prevazilazi okvire ovog rada tako da neće biti razmatrana. U drugom php bloku smo nizzu sesion (da i ovde je reč o asocijativnom nizu kao kod GET i POST) dodali dva člana sa odgovarajućim vrednostima ime-Jovana, prezime-Simić. U trećem bloku smo isčitali elemente session niza.

Page 24: Php Praktikum Za Lv

24

4. Osnove MySQL-a i integracija PHP-a sa MySQL-om 4.1 Uvod u MySQL

U predhodnim poglavljima su prikazane osnovne funkcije PHP-a. U ovom poglavlju biće prikazane osnove MySQL-a. Iako izgleda kao je to skretanje sa teme, nije tako. PHP svoju pravu moć pokazuje samo u simbiozi sa bazama podataka tj. MySQL-om. Da bi smo uopšte mogli da pričamo o integraciji PHP-a i MySQL-a moramo prvo da imamo neka znanja iz MySQL-a.

Prvi termin koji trebamo da znamo je CRUD. Ovo nije komanda već akronim koji predstavlja osnovne operacije sa bazama podataka.

Create (napravi) Read (procitaj) Update (ažuriraj) Delete (obriši)

Počnimo prvo sa read operacijom. SELECT * FROM tabela WHERE kolona1 = ’neki_tekst’ ORDER BY kolona1, kolona2 ASC;

Kao što se vidi iz gornjeg koda SQL komande se pišu velikim slovima. Gore navedeni kod vrši čitanje iz baze podataka. * znači “sve” odnosno u ovom kontekstu “označi sve”. Ustvari gore navedeni kod znači: Označi sve iz „tabela” (ime tabele), gde je u koloni 1 “neki_tekst”, i sortiraj po abecednom redu od A prema Z. Da se vratimo sada na Create tj. kao kreiramo unos u bazu podataka. INSERT INTO tabela (kolona1, kolona2, kolona3) VALUES (vrednost1, vrednost2, vrednost3);

Ovim kodom u bazu podataka upisujemo entry(record). Gore navedeni kod bi značio u tabelu (ime tabele) koja ima kolone (kolona1, kolona2, kolona3) upisujemo vrednosti (vrednos1, vrednost2, vrednost3). Ako želimo da ažuriramo određeni unos (record) koji se već nalazi u bazi podataka koristimo sledeći kod:

Page 25: Php Praktikum Za Lv

25

UPDATE tabela SET kolona1 = ’neki_tekst’ WHERE id = 1;

Ovaj kod bi značio: Ažuriraj unos u tabeli (ime tabele), postavljajuci vrednost u koloni1 aa “neki_tekst” ali samo u unosu (record-u) koji ima id==1. I na kraju imamo Brisanje recorda odnosnno entry-ja iz tabele.

DELETE FROM tabela WHERE id=1; Ovim kodom brišemo unos iz tabele tj. baze podatakka. 4.2 MySQL pprompt (MMySQL cconsole)

Osnovne komande koje smo predstavili u predoodnom poglavlju sadda će bitii predstvvljene u praksi. Najosnovniji način rada u MMySQL-u je preko MySQL consolle (MySQL prompta). Da bi se startovaoo MySQL prompt (uooliko koristimo WAMP server) potrebno je samo klikuti na ioonu WAMP-a i naći prečicu do MySQL pompta kao na slici.

Page 26: Php Praktikum Za Lv

26

Po ulasku u MySQL prompt MySQL nam prvo traži password. Svaki korisnik MySQL-a ima svoju lozinku. Po ukucavanju lozinke dozvoljava se pristupp MySQL-u. Treba pomenuti da je sigurnost veoma bitna kada se radi sa MySQL-om i bazama podataka uopšte. Nedovoljno iskusan pojedinac može potpuno da uništi bazu podataka. Zbog toga postoje različiti nivoi pristupa MySQL-u.

Kao što se vidi sa slike MySQL neodoljivvo podseća na DOS prompt.

Prva stvar koju treba uraditi je kreiranje baze podataka. To radimo komandom:

Ovom komandom je kreirana baza podataka sa nazivom vts_nis. Po kreiranju da bi nastavili rad sa ovom bazom moramo da je izaberemo – selektujemo. To se radi na sledeći način:

Page 27: Php Praktikum Za Lv

27

Trenutno, ova baza podataka je prazna. Sada ćemo napraviti tabelu u okviru ove baze.

Komanda je naravno “CREATE TABLE” a “profesori” je ime tabele. Zatim sledi “(“ iako pritisnemo “enter” kod komade neće biti izvršen. Ovo je zbog toga što SQL komande mogu da budu veoma dugačke i onda je neophodno da budu u više redova. SQL koomanda se izvršava tek kada naiđe na znak tačku-zarez “;”. Unutar zagrada formiramo tabelu. “pid” je skraćeno (profesor ID) i to je broj odnosno index po kome ćemo razlikovati unose unutar ove tabele. Ova kolona mogla je da se zove samo ID ali ovo treba izbegavati i uvek treba težiti da se da naziv koji je malo određeniji. “int(3)” znači da će ovaj podatak biti tipa integer tj. ceo broj i imaće maksimalno tri cifre. “NOT NULL” znači da sadržaj ovog poolja u tabeli ne može biti prazan.. “auto_increment” znači da se pri upisivanju sledećeg record-a polje “pid” automatski inkrementira. “ime” je kolona u kojoj će biti upisivana imena, a imena su po tipu podataka “stringovi”. Zato i stoji varchar(20) što znači promeenljiva tipa char. Maksimalni rezervisani broj mesta za karaktere je 20. Kolone “prezime” i “titula” su jasne same po sebi. Na kraju imamo “PRIMARY KEY (pid)”. Ovom proglašavamo “pid” za primarni ključ. Pošto je tabela kreiana sada trebamo upisati u nju podatke. To radimo na sledeći način:

Page 28: Php Praktikum Za Lv

28

Ovim smo uneli tri rekorda – zapisa u našu tabelu, odnosno

bazu podataka. Ako sada želimo da izlistamo tabelu, to radimo na sledeći način:

Naredba je naravno SELECT. Znak “*” označava da želimo da izlistamo sve kolone. “FROM profesori” daje odrednicu iz koje tabele želimo da izlistamo podatke.

Primera radi dodaćemo još jedan unosaa zatim izvršiti ažuriranje tog unosa da bi smo prikazali komandu UPDATE.

Prvo se navodi ime tabele u kojoj jje unos koji želimo da ažuriramo. Sa SET podatku u određenoj koloni po želji dodeljujemo novu vrednost. Sa WHERE specificiramo kom record-u želimo da dodelimo novu vrednost. Ukoliko ne specificiramo kom recordu

Page 29: Php Praktikum Za Lv

29

menjamo vrednost, SQL će u celoj koloni upisati novu vrednost, a to nas može skupo koštati, jer na taj način možemo izgubiti podatke koji nam trebaju. I na kraju imamo Brisanje recorda iz taeele i to radimo na sledeći način:

Pri brisanju treba navesti u kojoj tabeli se vrši brisanje i sa WHERE kriterijum za brisanje. Za izlazak is MySQL prompta koristimo komandu “quit”.

Page 30: Php Praktikum Za Lv

30

4.3 PHPMyAdmin i njegovo konfigurisanje

Kucanje SQL komandi u promptu kao u vreme DOOS-a može biti veoma zamorno, naročito pri kucanju dugih komandi i pri formiranju komplikovanih baza podataka. Zbog toga postoje pojednostavljena rešenja sa GUI-om. Najpopularnije od njih je PHPMyAdmin. To je u suštini PHP aplikacija. Dovoljno je samo pogledati direktorijum C:\Program Files\wamp\phpmyadmin\ gde je inače smešten ovaj program i videćemo koliko PHP modula ima u njemu. Ovom programu pristupamo iz web browser-a tako što u polju za adresu pišemo: http://localhost/phpmyadmin/ U prozooru web broowser-a dobijamo:

Ovo je sasvim normalna reakcija programa jer smo ga starovali po prvi put. Pre korišćenja potrebno je konfigurisati PHPMyAdmin. To radimo korišćenjem skripta setup.php pa u polje za adresu upisujemo:

Page 31: Php Praktikum Za Lv

31

Time startujemo setup script i u prozoru web browsera dobijamo:

Prvo treba configurisati Server na kome će PHPMyAdmin raditi. To radimo klikom na ADD dugme u odeljku Servers. Tada u prozoru browser-a dobijamo:

Page 32: Php Praktikum Za Lv

32

Setup script je već popunio upitnik neophodnim podacima

stoga ne treba ništa dirati. Svako od ovih polja iziskuje duga objašnjenja koja prevazilaze okvire ovog rada tako da neće biti objašnjena. Sve što na ovoj stranici treba upiaati je Password u okviru polja “Password for config auth”. Ovo je password koji se izabira kod instalacije WAMP servera. Po upisu šifre scroll-u jemo na dole i kliknemo da dugme “Add”. Zatim u prozoru browser-a dobijamo:

Kao šoo se vidi aa slike sada imamo konfigurisan jedan server. Ovde ne treba zaboraviti da snimimo konigurisanje. To radimo tako što scrol--ujemo na dole i u odeljku “Configuration”” kliknemo na dugme “Save”. Tada u prozoru browsera dobijamo:

Page 33: Php Praktikum Za Lv

33

Sada treba obratiti pažnju na poruku u žutom pravougaoniku. PorukA JE JASNA, KONFIGURACIONI FAJL JE SNIMLJEN u poddirektorijumu Config a da bi se koristio, potrebno ga je iskopirati na jedan nivo iznad i izbrisati Config direktorijum da bi mogli da koristimo ovaj konfiguracioni fajl. Ovo naravno možemo uraditi naprimer preko Windows explorera.

Po izvršenju predhodno pomenute elementarne radnje možemo pristupitii PHPMyAdmin-u. To činimo upisivanjem u polje za adresu unuutar web browsera http://localhost/phpmyadmin/. U prozoru browsera dobijamo:

Page 34: Php Praktikum Za Lv

34

Time je završeno konfigurisanje PHPMyAdmin-a i on je spreman za korišćenje. Na predhodnoj slici se jasno vidi baza podataka vts_nis koja je napravljena u prethodnom poglavlju. Ako kliknemo na nj dobijamo:

Sa slike se vidi da imamo jednu tabelu profesori koju smo napravili u predhodnom poglavlju. Klikom na browse ikonicu dobijamo

Page 35: Php Praktikum Za Lv

35

pregled tabele kao na slici:

Vratimo se sada korak unazad klikom na back dugme browsera. Recimo želimo da napravimo još jednu tabelu u okviru baze podataka “vts_nis”. To radimo u odeljku “Create new table on database vts_nis” treba samo upisati ime koje želimo da damo novoj tabeli i broj kolona. Neka ime tabele bude “knjige” i neka ta tabela ima 3 kolone. Pritiskom na dugmme “Go” dobijamo:

Naravno polja nisu popunjena. Ali je na slici prikazano kako ih

Page 36: Php Praktikum Za Lv

36

treba popuniti u slučaju ovgg primera. Prva kolona će biti ““ISBN” jer svaka knjiga ima ovaj broj i on je jedinstven za svaku knjigu. Zbog toga će ovo biti i primarni ključ u ovoj tabeli. Druga kolona će sadržati nazive knjiga dok će treća sadržati imena autora knjiga. Pritiskom na dugme “Save” napravili smo novu tabelu ““knjige”. U prozoru web browsera dobijamo sledeće:

Sada želimo da ubacimo podatke u novu tabelu pa to radimo pritiskom na taster Insert. Po pritisku na Insert dobijamo:

Page 37: Php Praktikum Za Lv

37

Sada samo treba upisati odgovarajuće vrednosti u “Values” polja. Ubacićemo tri Knjige:

Po popunjavanju polja i po pritisku na dugme “Go” izvršeno je upisivanje jednog record-a. Postupak ponavljamo tri puta jer želimo da ubacimo tri recorda (tri knjige). Pošto ste izvršili ubacivanje podataka može se proveriti tablica njenim izlistavanjem. Ukoliko se korektno ubace podaci, izlistna tabela “knjige” izgleda ovako:

Page 38: Php Praktikum Za Lv

38

GUI interfejs programa PHPmyadmin je veoma intuitivan i zbog toga se brzo uči. Sve potrebne operacije sa bazama podataka se mogu izvršiti u njemu.

Page 39: Php Praktikum Za Lv

39

8.4 PHP-MySQL integracija Pošto je u predhodnim primerima objašnjen MySQL i

PHPmyAdmin i kroz ta objašnjenja je kreirana baza podataka sa dve tablice sada možemo da se pozabavimo problematikom integracije PHP i MySQLL-a tj. prostije rečeno ““Kako iz PHP aplikacijje pristupitii bazi podataka?” Proces integracije PHP-a sa bazom podataka ima pet koraka:

1. Kreiranje konekcije

2. Selektovanje baze podataka

3. Postavljanje upita

4. Korišćenje povratnih informacija iz upita (ako postoje)

5. Raskidanje konekcije

Ovih pet koraka će biti najbolje objašnjena na sledećem primeru

(bazepodat.php):

Page 40: Php Praktikum Za Lv

40

Startovanjem ovog programa dobijamo:

Page 41: Php Praktikum Za Lv

41

Sada sledi obrazloženje progamskog koda:

1. Kreiranje konekcije vrši se komaandom myssql_connect i ona ima tri agumenta: ime severa (localhost), username (root), password (proba17). Čitava konekcija je dodeljena varijabli “connection””. Ona se još naziva ““handle” jer će referenca na MySQL bazu podataka ići preko ove promenljive. If iskaz koji sledi je mera predostrožnosti i tim iskazom proveravamoo da li je uspostavljena konekcija sa MySQL-om. Nova komanda unutar If iskaza je “die” i koristimo je u slučaju da nije izvršena korektna konekcija sa MySQL-om. Komada die raskida svaku vezu sa MySQL-om. 2. Selektovanje baze podataka je bitno jer u okviru MySQL-a mogu da postoje više baza podataka tako da je potrebno specificirati sa kojom bazom želimo da uspostavimo konekciju. Komanda je mysql__select_db i ima dva argumenta ime baze podataka (vts_nis) i referencu na MySQL konekciju a to je promenljiva $connection. Sada je slično kao kod konekcije na MySQL izvršena konekcija na bazu podataka “vts_nis”” preko nove promenljive $db_select. Zatim sledi sličan If iskaz kojim se proverava da li je konekcija izvršena. 3. Postavljanje upita je korak gde želimo da izvušemo neke podatke iz baze podataka. To činimo komandom mysql_query koja ima dva arguumenta. Prvi argument je ustvari određena SQL

Page 42: Php Praktikum Za Lv

42

komanda dok je druga, referenca na varijablu $connection. Praktično PHP ne vrši upite već to radi preko SQL komandi koje su specificirane za rad sa bazama podataka. Inače SQL komanda u ovom primeru je elementarna i njom listamo sadržaj tabele “knjige”. Naravno rezultat tj. podaci koji se dobijaju upitom stavljaju se u novu promenljuvu $result. Zatim sledi već poznati If iskaz provere ispravnosti. 4. Pošto smo izvršili upit i uzeli informacije iz baze podataka sada želimo da te informacije koristimo. Record-i iz baze podataka se najlakše smeštaju u nizove podataka. Zato se koristi komanda mysql_fetch_array($result). Pošto je promenljiva $result u stvari kolekcija redova (record-a) tabele “knjige” ovu komandu ćemo zatvoriti u while petlju da bi smo mogli da isčitamo sve redove (record-e). Dalje treba pomenuti da je svaki pojedinačan red (record) smešten u različit niz (array). Iz ovih nizova možemo isčitati sve podatke ali samo one koje želimo. Ovi nizovi su asocijativni tako da umesto broja pozicije vrednosti u nizu možemo koristiti imena. U ovom primeru to su “naziv” i “autor”. 5. Kada završimo sa radom i sa bazom podataka treba da raskinemo konekciju. To radimo preko komande mysql_close($connection);. Komanda ja sama po sebi jasna i ne treba je objašnjavati.

Ovih pet koraka su uvek ista kod rada sa bazama podataka s tim što treba napomenuti da se koraci 3 i 4 mogu ponoviti proizvoljan broj puta.