p h p - hr

Upload: abrezak

Post on 06-Apr-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 P H P - HR

    1/36

    P H P

    Priredio i prilagodio: Dragan Lesi

  • 8/2/2019 P H P - HR

    2/36

    Uvod

    Instalacija

    Vaa prva skripta

    Slanje teksta u browser

    Definiranje varijabli

    Predefinirane varijablePodruje djelovanja varijabli

    Definiranje konstanti

    Prihvat varijabli iz formulara

    Izrazi (exprijessions)

    Operatori

    "If" grananje

    "While" petlja

    "For" petlja

    Kontrolna struktura "Switch"

    Funkcije

    Argumenti funkcija

    Klase i objekti

    Slanje e-mail poruka sa web-a (I dio)

    Slanje e-mail poruka sa web-a (II dio)

    Konekcija na MySQL bazu podataka (I dio)

    Konekcija na MySQL bazu podataka (II dio)

    PHP - Konekcija na MySQL bazu podataka (III-dio)

    PHP - Zato koristiti MySQL kao SUBP?

  • 8/2/2019 P H P - HR

    3/36

    Uvod

    PHP je iroko rasprostranjen Open Source skript jezik koji se izvrava na strani web servera,a namijenjen je za kreiranje dinamikih web stranica, i uope razliitih Internet aplikacija.PHP je nastao 1994. godine od strane Pasmus Ledorfa, a inae je skraenica od "PersonalHome Page Tools". Autor je jezik kreirao radi odravanja vlastitih web stranica, a na bazi tadajako zastupljenog Perl jezika. Inae, sintaksa samog jezika je vrlo slina sintaksama jezika CiPerl. Nakon njegovog pojavljivanja, veliki broj programera i dizajnera je uzeo uea unjegovom daljem razvoju (poto se radi o Open Source projektu), tako da je jezik sada

    "dogurao" do verzije 4 (ako imate volje i entuzijazma i sami moete raditi na njegovomrazvoju).

    PHP je podran od strane velikog broja platformi (gotovo svih), ali se posebno odomaio naUnix/Linux platformi. Direktan konkurent PHP-Linux-Apache platformi jeASP-WindowsNT-IIS platforma, ali po veini Internet marketing agencija ubjedljivo vodi PHP platforma,uglavnom zato to je besplatna i to je otvorenog koda. Pored svega navedenog, svojupopularnost duguje svojoj sposobnosti da podrava veliki broj sistema za upravljanje bazamapodataka (RDBMS), kao to su: na prvom mjestu MySQL; pa zatim i ostali: MS SQL server,Oracle, Postgre SQL,MS Access i jo mnogi drugi.

    PHP na strani web servera prijedstavlja prijetprocesor kome se prosljeuju PHP skripte. Ovou praksi radi na slijedei nain, kreirate HTML stranice i u njih dodate i svoje PHP skripte,date stranice obavezno imaju ekstenziju "*.php". Kada ih postavite na web server i korisnik ihzatrai putem svog browser-a, web server e na osnovu ekstenzije prijepoznati da se radi oPHP stranicama i proslijedit e ih instaliranom prijetprocesoru. Potom e prijetprocesorizvriti programski kod i rezultat vratiti web serveru, koji nakon toga sve alje browser-u.Rezultat procesiranja su najee dinamiki kreirane HTML stranice, koje se zasnivaju napodacima iz neke od baza podataka.

    U sluaju da i sami odravate neki web site, sigurno ste se susreli sa problemom odravanjasajta i to kada broj stranica prijevazie kritian broj. U tom sluaju, kada imamo veliki broj

    stranica, svaki update je vrlo mukotrpan. U tom momentu bi trebalo da se okrenete PHP-u iliASP-u, a sve u zavisnosti od toga na kojoj platformi radi va hostprovajder.

    Poto je pria o PHP-u zaista iroka, ovdje emo stati, a priu emo nastaviti u slijedeimprilozima. Prvo to emo obraditi je, kako osposobiti vlastiti kompjuter za PHP razvoj.

  • 8/2/2019 P H P - HR

    4/36

    Instalacija

    U prolom prilogu smo napravili lijepu uvertiru za ono to slijedi, a to je instalacija PHPrazvojnog okruenja, odnosno svih potrebnih elemenata. Poto se PHP izvrava na serveru,razvoj bi trebao da se odigrava na vaem osobnom kompjuteru koji ima stalnu vezu saInternetom. Na njemu bi pisali PHP-HTML programski kod i to odmah testirali na serveru.Ali poto taj "luksuz" veina ne moe da priuti rjeenje je instalacija vlastitog lokalnog webservera sa podrkom za PHP. Ovo e vam pruiti veliku udobnost u radu, a kada zavrite nekiprojekt lako ga je poslati na server vaeg host provajdera.

    Poto veina host provajdera radi na platformi "Linux/Apache/PHP/MySQL", i vi bi trebali dana svom osobnom raunalu instalirate ovu opciju radi potpune kompatibilnosti (ovo je malokompliciranije rjeenje). Ali, ne mora sve da bude tako, sve ovo moe da se odradi i naveinskoj Windows platformi. Rjeenje se nalazi u instalaciji besplatnih gotovih paketa(namijenjenih Windows-u) koji sadre sve potrebne elemente. Prijeporuiemo vam jedanpaket, koji u sebi sadri sve potrebno:

    Apache web server, verzije 1.3.14 PHP 4.0.2 Perl 5 MySQL 3.23

    Paket je proizvod firme "NuSphere" koja vlasnitvo velike softverske kue "ProgressSoftware", a instalacioni paket moete "skinuti" sa adrese:

    www.nusphere.com

    Paket je veliine oko 23 megabajta (zapakiran), a pored gore navedenih komponenti u paketuete nai i dosta literature u elektronskom obliku. Kada "skinete" instalaciju i raspakirate bitie dovoljno da startate instalaciju preko fajla "setup.exe". Otvorie vam se prozor browser-a ukome treba samo da kliknete na dugme "install" i krenut e instalacija koja e trajati nekoliko

    minuta (kao na slici). I to je sve, sada ste sprijemeni za svoje prve korake u PHP-u.

  • 8/2/2019 P H P - HR

    5/36

    Vaa prva skripta

    Ako ste pratili prethodna dva priloga i podesili sve onako kako je opisano, onda ste sprijemnida krenete u kodiranje. Poto je instaliran i web server i podrka za PHP, prije samog poetkapotrebno je da pokreneteApache server aktiviranjem fajla:

    C:\nusphere\apache\Apache.exe s

    Ovo je defaultputanja do vaeg web servera. Nakon ove procedure moemo da krenemo u

    kreiranje vaih prvih PHP stranica.

    Za kreiranje PHP skriptova potreban vam je bilo kakav tekst editor. To moe da bude i onajkoji dolazi uz Windows - "Notepad", ali vam mi za bilo kakav komotniji rad preporuujemodva druga editora, a to su:

    Note Tab Light - koji moete prijeuzeti sa adrese www.notetab.com TextPad - koji moete prijeuzeti sa adrese www.textpad.com

    Kodiranje skriptova emo zapoeti od programerskog standarda, programa "Zdravo svijete!"(tj. "Hello World!") iz koga emo vidjeti samu sintaksu PHP-a. Otvorite neki od editora i

    ubacite slijedei kod:

    PHP pocetak

    Snimite fajl, obavezno sa ekstenzijom "*.php" ili "*.php3", "*.phtml". Mi vam preporuujemo

    da to bude ".php", jer je to dio PHP standarda. Mada, fajl moete snimiti i sa ekstenzijom.htm ili .html, s tim to tada morate da podesite server da i takve fajlove, prije slanja ubrowser, propusti kroz PHP parser. Fajl, za poetak, obavezno snimite u folder"C:\nusphere\apache\Htdocs", koji je rootfolder vaeg servera. Sada emo isprobati na maliPHP skript, a ujedno emo i istestirati server. Otvorite browser i u Address liniju ukucajte"http://localhost/proba.php". Dobiete ekran kao na slici, znai samo jednu reenicu. Izvornikod ete vidjeti preko menija "View > Source", a rezultat parsiranja e biti:

    PHP pocetak

    Zdravo svijete!

    Kao to ste i videli u primjeru, svaka PHP skripta poinje sa "".Skripte se ugnjeavaju u standardne HTML stranice, ali mogu biti i u eksternim fajlovima.

  • 8/2/2019 P H P - HR

    6/36

    Ovdje smo za ispisivanje teksta u browser-u iskoristili funkciju "echo", a cilj skripta jeosnovno upoznavanje sa PHP sintaksom. Ovo je bilo dovoljno za poetak, nastavak slijedi.

    Slanje teksta u browser

    Nakon prvog skripta ("Hello World!"), prijei emo na objanjavanje najjednostavnijih

    funkcija, to su one koje slue za "slanje" obinog teksta u HTML (odnosno browserkorisnika). Za "slanje" teksta PHP osigurava tri vrste funkcija, a mi smo u prolom prilogu

    iskoristili funkciju "echo". Za primjer ubacite slijedei kod u neki ".php" fajl, i poaljite gaserveru (localhost\fajl.php):

    Rezultat koji e server vratiti e biti:

    Ovo je print funkcija.

    Ovo je echo funkcija. P.S. Ovdje mozete dodati i drugi string ako stringove razdvojitezarezom.

    Ovo je printf funkcija.

    Funkcija printf se najcesce koristi za formatiranje brojki.

    Ne zaboravite zagradu sa funkcijom printf.

    Kao to vidite upotrijebili smo sve tri funkcije:

  • 8/2/2019 P H P - HR

    7/36

    print - najjednostavnija funkcija za slanje teksta u prozor browser-a. Funkcija moeda se navodi i bez, i sa zagradama.

    echo - funkcija slina prethodnoj, samo to ovdje moete da kombinirate viestringova, koje obavezno odvajamo zarezima. Sa ovom funkcijom se ne koristezagrade.

    printf- funkcija koja najee slui za formatiranje brojki kao integera, decimala itd.Ova funkcija obavezno zahtjeva upotrebu zagrada.

    Nakon ove prie probajte da to vie eksperimentirate sa ovim funkcijama, poto su one jako

    bitne za PHP/HTML kombiniranje. U slijedeem prilogu emo se baviti varijablama, vrstamavarijabli i nainom njihovog definiranja.

    Definiranje varijabli

    Varijable se u PHP-u predstavljaju tako to se ispred naziva varijable postavlja znak dolara($). Pri definiranju varijabli moramo paziti i na upotrebu malih-velikih slova, poto su nazivivarijabli osetljivi na upotrebu "malih/velikih" karaktera (case-sensitive). Pored ovoga moramopaziti i na karakter kojim poinjemo naziv varijable. Iza znaka dolara mogu da idu samo slovaalfabeta ili podvuena crta (underscore), a iza njih mogu da idu i slova, cifre, ili linije. Evo iprimjera pravilnog definiranja PHP varijabli:

    Rezultat koji e server vratiti e biti:

  • 8/2/2019 P H P - HR

    8/36

    Milan,Prokicpocetak

    U verziji jezika PHP3, varijablama se uvijek dodjeljuje i vrijednost. Pri ovome, kada jednojvarijabli dodijelimo vrijednost neke druge varijable, njoj se dodjeljuje samo vrijednost prvevarijable, bez referenci. Ovo znai, da na primjer, kada jednoj varijabli dodijelimo vrijednostdruge varijable, i zatim promenimo vrijednost prvoj varijabli, data promjena nee uticati navrijednost druge varijable. Sa pojavom verzije PHP4, dobija se mogunost i dodjeljivanja

    vrijednosti varijablama sa referencom. Ovo znai, da varijabla kojoj smo dodijelili vrijednostdruge varijable, uvijek referencira na prvu, tj. uvijek ima njenu vrijednost. Ovo znai, da akopromjenimo vrijednost originalnoj varijabli, promijenit e se i vrijednost druge varijable, ali iobrnuto. Za dodjeljivanje vrijednosti sa referencom, ispred naziva varijable postavlja karakter"ampersand" (&). Evo i primjera

    U ovom primjeru, varijabli "druga" dodjeljujemo vrijednost varijable "prva", i to sareferencom (&$prva). Zatim drugoj varijabli dodjeljujemo novu vrijednost, a samim timpromjena se zbog reference vri i kod prve varijable. Na kraju e ova mala skripta dva puta"odtampati" jedan isti string (vidi sliku).

    Iz ove prethodne prie moete vidjeti da je jako bitno koja verzija PHP parsera (interpretera)se koristi na serveru vaeg host provajdera. Jer, ovaj drugi nain definiranja varijabli neetemoi da koristite ako va provajder radi sa starijim verzijama PHP-a. Zato od provajderaobavezno pribavite svu potrebnu dokumentaciju.

  • 8/2/2019 P H P - HR

    9/36

    Predefinirane varijable

    U prethodnom PHP prilogu, pisali smo o varijablama i nainu definiranja varijabli. Poredovih varijabli koje su korisniki definirane, postoje i tzv. "predefinirane" varijable od straneservera ili PHP pretprocesora. Sam PHP pretprocesor osigurava veliki broj predefiniranihvarijabli koje su dostupne svakoj skripti. Poto ovih varijabli ima stvarno dosta, veliki broj

    nije dovoljno ni dokumentiran, a i veliki broj zavisi od sistemskog okruenja tj. od: servera,verzije servera, verzije pretprocesora i drugih faktora.

    Serverske predefinirane varijable kreira, kao to smo rekli server, pri podizanju sistema. Radinjihovog boljeg iskorienja prikazat emo vam one najvanije. Prva meu njima je svakakovarijabla koja sadri podatak o serveru i njegovoj verziji - varijabla"SERVER_SOFTWARE". A evo i kako moemo da dobijemo podatak o serveru:

    Pokrenite "Apache" web server i pokrenite bilo koji tekst editor. U novi "*.php" fajl unesite slijedei kod:

    Snimite fajl i pozovite ga preko servera u browser, radi pretprocesiranja.

    Kao rezultat dobiete podataka o serveru i njegovoj verziji. Osim varijable"SERVER_SOFTWARE" jo neke bitne varijable su:

    SERVER_NAME - koja daje naziv host servera pod kojim se dati skripta izvrava.Ukoliko se skripta izvrava pod virtualnim hostom, ovo e biti vrijednost definirana za

    virtualni host (localhost). SERVER_PROTOCOL - daje naziv i verziju web protokola preko koga se potrauje

    data stranica. Na primjer "HTTP/1.1". SERVER_PORT- varijabla kojom dobijamo podatak o portu na serverskoj maini koji

    se koristi za komunikaciju. Podrazumjevani port, pri instalaciji je 80.

    Pored serverskih varijabli postoje i predefinirane varijable koje kreira sam PHP parser. Jednaod ovih varijabli je i PHP_SELF - varijabla koja sadri relativnu putanju do tekuegdokumenta, u okviru koga se nalazi skript. Primjer, odnosno PHP skript sa predefiniranimvarijablama moete vidjeti na slici.

  • 8/2/2019 P H P - HR

    10/36

    Podruje djelovanja varijabli

    Do sada smo nauili kako se varijable definiraju i upoznali smo se sa vrstama varijabli. Slijedivrlo vana pria koja se tie varijabli, a to je podru je djelovanja varijabli i njihov "vijektrajanja". Podru je djelovanja varijable predstavlja dio programskog koda unutar koga datavarijabla egzistira. Veina PHP varijabli ima lokalni karakter, to znai da je data varijabla

    "vidljiva" samo unutar jedne procedure (ili funkcije), a nije "vidljiva" i za druge procedure uPHP skriptu.

    U slijedeem PHP primjeru vidjet emo dvije podrujei djelovanja varijabli:

    Prethodni skript nee prouzrokovati nikakav izlaz (znai, nee biti tampana jedinica) jernaredba "echo" referencira lokalnu varijablu "$a", a lokalnoj "verziji" ovoj varijabli nijedodjeljena nikakva vrijednost. Zbog ovoga, kada elimo da unutar funkcije upotrebljavamoglobalne varijable moramo ih tako i definirati (globalne unutar funkcije):

    Rezultat gornjeg skripta bit e "3". Deklariranjem varijabli "$a" i "$b" kao globalne unutar

    funkcije, mi smo izvrili referenciranje na promjenljive koje se nalaze van funkcije. Pri tome,nema nikakvih ogranienja u broju globalnih varijabli kojima ete manipulirati unutar jednefunkcije. U sluaju da u gornjem primjeru, u funkciji "Zbrajanje()", niste definirali varijablekao globalne - rezultat bi bio "2".

    Prethodni primjer moemo napisati i na drugi nain.

  • 8/2/2019 P H P - HR

    11/36

    $a = 1;$b = 2;

    Function Zbrajanje () {$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];

    }

    Zbrajanje ();echo $b;

    ?>Ovdje se pristup vanjskim varijablama vri preko ugraenog PHP definiranog niza"$GLOBALS". Niz $GLOBALS je asocijativni niz naziva globalnih varijabli, gjde indeksepredstavljaju nazivi varijabli, te se preko njih dolazi do vrijednosti samih globalnih varijabli.

    Jo jedna bitna mogunost kada govorimo o podru ju djelovanja varijabli, je i mogunostnjihovog definiranja kao statikih varijabli ("Static"). Statike varijable egzistiraju samo ulokalnoj funkciji, s tim to ne gube svoju vrijednost kada programom napustimo datufunkciju. Pogledajte slijedei primjer:

    Ova funkcija je uglavnom beskorisna poto svaki put kada se pozove (u naem sluaju dvaputa), vrijednost varijable "$a" postavlja na nulu i tampa nulu. Instrukcijom "$a++" vrimo

    poveanje vrijednosti varijable za jedan, ali to ovdje nema nikakvu funkciju, zbog toga tonakon ove instrukcije funkcija zavrava, a pri njenom ponovnom pozivu vrijednost se vraana nulu. Da bi funkcija "Brojac()" stvarno bila korisna, varijablu "$a" moramo definirati kaostatiku:

    Sada e nakon svakog poziva funkcije, vrijednost varijable "$a" uveati za jedan (kao naslici). Ovakvim definiranjem vrijednost lokalne varijable uvamo u memoriji i nakonzavretka date funkcije.

  • 8/2/2019 P H P - HR

    12/36

    Definiranje konstanti

    Kao to znate, iz drugih programskih jezika, konstante predstavljaju identifikatore dodjeljenihvrijednosti koji se ne mijenjaju tokom izvravanja programa. I sam naziv konstanti je logian,jer "promjenljive" (varijable) programer moe mijenjati, dok se vrijednost konstanti ne moemijenjati. PHP u sebi nosi nekoliko predefiniranih konstanti, a naravno osigurava i

    mehanizam za definiranje novih konstanti tokom run-time-a. Inae vrlo su sli

    ne varijablama,s tim to se za razliku od njih definiraju uz pomo funkcije "define()" i kasnije im ne moe

    biti dodjeljena druga vrijednost.

    U slijedeim redovima predstaviemo vam neke od predefiniranih konstanti, koje moetekoristiti u svakom trenutku:

    PHP_VERSION- konstanta koja sadri vrijednost verzije PHP parsera koja se koristi. PHP_OS - konstanta koja sadri string - naziv operativnog sistema na kome se radi

    PHP parser. Na primjer: Linux TRUE - vrijednost true - 1.

    FALSE - vrijednost false - 0.Da bi isprobali ove konstante, kreiraemo malu PHP skriptu koja e "odtampati" vrijednostovih konstanti:

    Rezultat e zavisiti od vae konfiguracije.

    Kao to smo rekli, pored predefiniranih moemo definirati i nae korisnike konstante. Zadefiniranje konstanti se koristi ugraena funkcija "define()", ija je sintaksa slijedea:

    int define (naziv_konstante, dodjeljena_vrijednost [, int mala_slova])Ovom sintaksom definiramo konstante, koje su vrlo sline varijablama, osim u slijedeem:

    Ispred identifikatora konstanti ne ide znak "$". Konstantama moete pristupiti sa bilo kog mjesta u skripti, bez obira na podruje

    prostiranja. Kada se jednom definiraju, ne mogu biti redefinirane ili nedefinirane.

    Argumenti "naziv_konstante" i "dodjeljena_vrijednost" predstavljaju, sam naziv konstante injenu vrijednost, a argument "mala_slova" odreuje osetljivost na upotrebu malih-velikihslova. Po default-u konstanta je osetljiva na upotrebu malih-velikih slova (nije isto"KONSTANTA" i "Konstanta"), a ako argumentu dodjelite vrijednost "1" - onda nee biti. Zaprimjer definirat emo dvije konstante i izvriti ispis njihovih vrijednosti:

  • 8/2/2019 P H P - HR

    13/36

    Skripta e rezultirati ispisom vrijednosti dodjeljenoj konstanti "RECENICA".

    Prihvat varijabli iz formulara

    esto ete na stranicama automatiziranih PHP-om, imati formulare. Najee e se raditi oanketama, formularima za komentare, glasanje i slino. Na svu sreu, kada se jedan ovakavformular proslijedi u PHP skriptu, sve varijable definirane na formi bit e automatskidostupne PHP skripti. Ovo znai da skripta moe da prihvati i varijable koje nisu definirane usamoj PHP skripti. Na primjer, imamo jednostavan formular, koji se metodom "POST" aljena obradu PHP skripti pod nazivom "primjer.php":

    IME:

    Kada ovaj formular popunite i kliknete na dugme "Posalji", metodom "POST" elementiformulara e biti proslijeeni PHP stranici "primjer.php" na dalju obradu. Stranica"primjer.php" e automatski primiti sadraj iz proslijeenog polja "ime" u varijablu "$ime".Evo kako bi mogla da izgleda skripta "primjer.php":

    Znai, kada popunimo polje "IME" na stranici sa formularom, i kliknemo na dugme za slanje,sadraj ovog polja e primiti varijabla "$ime" u PHP skriptu na stranici "primjer.php", te e seuz pomo instrukcije "echo" prikazati vrijednost date varijable.

    PHP skripte takoe mogu i da prihvataju vanjske nizove varijabli iz formulara. Na primjer,moete imati grupu povezanih varijabli na formularu u niz, ili moete iskoristiti ovumogunost za prihvat vrijednosti iz viestrukog SELECT OPTION objekta:

    Ime:
    Email:
    Boja kose:

    Crna

  • 8/2/2019 P H P - HR

    14/36

    SmedjaPlava

    U sluaju da je ukljuena PHP mogunost "track_vars", bilo pri samoj konfiguraciji ilipomou direktive: , sve varijable poslate POSTi GETmetodama bit elanovi i globalnih nizova $HTTP_POST_VARS i $HTTP_GET_VARS (u zavisnosti od

    upotrebljene metode).

    Izrazi (expressions)

    Izrazi su jedan od najbitnijih pojmova svakog programskog jezika, pa i samog PHP-a, jerskoro sve to napiete u programskom kodu predstavlja "izraz" (engl. expression).Najjednostavniju formu izraza predstavljaju varijable i konstante (koje smo upoznali uprethodnim prilozima), odnosno dodjeljivanje vrijednosti istima. Kada napiete "$x=5", vitada dodjeljujete vrijednost "5" varijabli "$x". Nakon ove dodjele, oekivaete da "$x" imavrijednost 5.

    Neto malo kompleksnije izraze predstavljaju funkcije. Na primjer, razmotrite sledijeufunkciju:

    function dodjeli () {

    return 5;}Ukoliko vam je blizak koncept funkcija, moete pretpostaviti da ova funkcija slui dodjelivrijednosti (u ovom sluaju vrijednosti 5). Probajte sada da napiete:

    $x=dodjeli()Ovim izrazom varijabli "$x" dodjeljujemo vrijednost 5, to vam je isto kao da ste napisali"$x=5". Funkcije predstavljaju izraze, koje u sebi sadre druge izraze, a slue za vraanjeneke vrijednosti. U naem sluaju ova funkcija vraa vrijednost 5, a inae funkcije ne sluesamo za jednostavno vraanje neke statike vrijednosti, ve uglavnom za neka izraunavanja.Ove vrijednosti pri tome ne moraju da budu samo numerike (integer), ve mogu da budu bilokoji tip podataka. PHP pri tome podrava, osim spomenutog integer-a, i skalarne vrijednosti,stringove i realne brojeve. PHP, takoe, podrava i dva kompozitna tipa (tipovi sastavljeni oddrugih tipova): nizove i objekte. Naravno, pri tome, svaki od nabrojanih tipova podatakamoe biti dodjeljen nekoj varijabli ili moe biti vraen od strane funkcija.

  • 8/2/2019 P H P - HR

    15/36

    Jo jedan dobar primjer izraza predstavljaju operacije uveanja (increment) i smanjenja(decrement). Onima koji poznaju sintaksu jezika C sigurno su poznate ove dvije operacije zapromjenu vrijednosti, iji su operatori: ++ i --. Ako bi u PHP-u napisali "$x++", ovo ne bi bioizraz poto prethodno varijabli nismo dodijelili nikakvu vrijednost. Pored ovih operacija, uPHP-u su vrlo uobiajeni i komparacioni izrazi. Rezultat ovih izraza mogu biti samovrijednosti 0 ili 1, odnosno FALSE ili TRUE. PHP podrava slijedee komparacioneoperatore: > (vee), < (manje), == (jednako), != (nejednako), >= (vee ili jednako) i

  • 8/2/2019 P H P - HR

    16/36

    operatore, gde kombinujemo operator dodjele i bilo koji aritmetiki ili string operator. Naprimjer:$x = 3;$x += 5;// varijabla $x ima vrijed. 8, jer kao sto smo rekli: $x = $x + 5;

    $y = "Cao ";$y .= "svima!";// varijabla $y ima vrijed. "Zdravo svima!",

    //kombinirali smo operatore "=" i "."

    Komparacioni operatori Ovi operatori, kao to im i ime kae, slue za komparaciju (uporeivanje) dvije vrijednosti:

    $x == $y - operator "jednako". $x === $y - operator "identino". Operator vezan za PHP verzije 4, a oznaava da su

    dvije vrijednosti "identine" ako imaju istu vrijednost i ako su istog tipa. $x != $y - operator "nejednako". $x !== $y - operator "nisu identini", znai suprotno operatoru "identini". $x < $y - operator "manje od".

    $x > $y - operator "vee od". $x = $y - operator "vee ili jednako".

    Inkrementalni operatori Kao i kod jezika C, imamo operatore koji slue za poveanje/smanjenje vrijednosti varijabliza jedan:

    ++$x - operator poveava vrijednost varijable $x za jedan, pa tek onda vraa varijablu$x.

    $x++ - vraa se prvo vrijednost varijable, pa se zatim ista uveava za jedan.

    --$x - smanjuje vrijednost varijable, pa onda vraa njenu vrijednost. $x-- - vraa trenutnu vrijednost varijable, pa je zatim smanjuje za jedan.

    Evo i jednog primjera:

    U prvom redue se ispisati pet (5), a u drugom est (6).

    String operatori Ovdje postoje samo dva operatora, prvi je operator spajanja stringova - ".", koji kao rezultatvraa spojeni string, lijevog i desnog argumenta. A drugi, je operator dodjele i spajanja - ".=",koji na vrijednost lijevog argumenta dodaje vrijednost desnog argumenta. Na primjer:

    $a = "Zdravo ";

  • 8/2/2019 P H P - HR

    17/36

    $b = $a . "Svijete!";// sada $b sadrzi "Zdravo Svijete!"

    $a = "Zdravo ";$a .= "Svijete!";// sada $a sadrzi "Zdravo Svijete!"

    "If" grananje

    Svaka PHP skripta je satkana od serije naredbi, koje mogu biti razna dodjeljivanja, pozivifunkcija, petlje, uvjetna grananja, pa ak i naredbe koje nita ne rade (tzv. prazne naredbe).Svaka od instrukcija zavrava, po pravilu, toka-zarezom (;). Pored toga, odreeni brojnaredbi moe graditi "grupu naredbi" koje su same po sebi poseban izraz. Jedan od ovihgrupnih izraza je i "IF" grananje. "IF" grananje prijedstavlja jedno od najvanijih programskihstruktura svakog jezika, meu njima je i PHP. Ova struktura osigurava uvjetno izvravanjeodreenog dela programskog koda. Struktura PHP-ovog "IF" grananja je vrlo slina strukturi

    C jezika:

    if (uvjet)izrazi

    Kao to smo rekli u prilogu o izrazima, "uvjet" predstavlja izraz sa odreenom istinosnomvrijednou, koja moe biti TRUE ili FALSE. Ukoliko je vrijednost uvjeta TRUE, PHP eizvriti naredbe koje se nalaze u delu "izrazi", a ako je ta vrijednost FALSE- programski kodunutar ove strukture e se ignonirati.

    Slijedei primjer e nam, uz pomo "IF" grananja, prikazati veu vrijednost od vrijednostidvije varijable koje se uporeuju:

    esto ete imati situaciju da se u okviru "IF" izraza nalazi vie od jedne instrukcije, i tadaimamo "grupisane izraze", kao u slijedeem primjeru gde imamo dvije instrukcije:

    Ovdje prvo provjeravamo da li je X vee od Y, i ako jeste izvrava se grupa od dvijeinstrukcije, gdje prvo ispisujemo poruku, a zatim vrijednost varijable X dodjeljujemo varijabliY. Ukoliko uvjet nije ispunjen, ove dvije naredbe se nee izvriti.

  • 8/2/2019 P H P - HR

    18/36

    Sam "IF" izraz moe biti ugraen u neodreeni broj drugih "IF" izraza, i na taj nain vamosigurava veliku fleksibilnost. Primjer za vie ugnjedenih "IF" izraza je slijedei:

    esto ete imati potrebu da u sluaju neispunjenja uvjeta izvrite neki drugi kod, a ne samo daignorirate "IF" izraz. U ovakvim sluajevima koristiemo proirenje "IF" izraza kljunomrje ju "ELSE", a koja omoguava izvrenje odreenog koda u sluaju da "uvjet" imavrijednost FALSE. Na primjer, u slijedeem primjeru vrimo uporeivanje dvije varijable izatim ispisujemo odgovarajuu poruku:

  • 8/2/2019 P H P - HR

    19/36

    "While" petlja

    Nakon "If" strukture prelazimo na obradu najjednostavnijeg tipa petlji u PHP-u, a to je"While" petlja. Struktura i sintaksa u PHP-u je vrlo slina sintaksi ove petlje u programskom jeziku while (izraz)

    naredbeSemantika same petlje je vrlo jednostavna, ona "kae" PHP-u da ponavlja izvravanjeugraenih naredbi, sve dok je ispunjen uvjet, tj. dok je vrijednost "izraza" TRUE. Vrijednostizraza se provjerava samo na svakom poetku ponavljanja petlje, tako da ako se ovavrijednost promjeni tokom izvravanja ugnjedenih instrukcija, izvrenje se nee prekinuti dokraja date iteracije. U sluaju da je vrijednost "izraz"-a FALSE, nee se izvriti ugnjedenenaredbe, a izvrenje programa e se prebaciti na slijedeu instrukciju koja dolazi nakon petlje.

    Kao i kod "IF" grananja, i ovdje moete grupirati vie instrukcija unutar jedne "While" petlje,i to uz pomo vitiastih zagrada, ili uz korienje alternativne sintakse:

    while (izraz) :...naredbe...

    endwhile;U slijedeim redovima moete vidjeti dvije "While" petlje, napisane na dva naina, koje"tampaju" cifre od 1 do 10:

    Kao to vidite, ovdje smo upotrijebili inkrementalni operator (++) koji uveava vrijednostvarijable "$a", i to nakon njenog tampanja.

    Slina prethodnoj "While" petlji je "Do...While" petlja, a razlika je samo u pozicijiprovjeravanja "izraz"-a. Kod ove petlje provjera istinosne vrijednosti izraza se vri na krajupetlje svake iteracije. Glavna razlika je u tome to e se kod ove druge petlje (do...while) prva

  • 8/2/2019 P H P - HR

    20/36

    iteracija svakako izvriti, za razliku od "While" gde se moda nee izvriti ni jedna iteracija (usluaju da je vrijednost izraza FALSE).

    Prethodna petlja e se izvriti tano jedanput, jer se nakon prve iteracije provjerava izraz ($a>0), kojie imativrijednost FALSE. Zbog ove vrijednosti izraza petlja e prekinuti dalje izvravanje.

  • 8/2/2019 P H P - HR

    21/36

    "For" petlja

    Za razliku od "jednostavne" sintakse "While" petlje, "For" petlja ima najsloeniju sintaksu uPHP-u (vrlo slinu C-u). Struktura i sintaksa je ove petlje je slijedea:

    for (izraz1; izraz2; izraz3)

    naredbaPrvi izraz (izraz1) se provjerava (izvrava) samo jednom (bezuvjetno), i to na poetku petlje.Na poetku svake iteracije provjerava se drugi izraz (izraz2). Ukoliko je istinosna vrijednostovog izraza TRUE, petlja se nastavlja i izvrava se ugnjedena instrukcija(e). Ukoliko jevrijednost izraza FALSE, prekinut e se izvravanje petlje. Takoe, na kraju svake iteracijepetlje provjerava se (izvrava se) trei izraz (izraz3).

    Svaki od nabrojanih izraza moe biti "prazan", tj. ne mora sadrati nikakav izraz. Ako je naprimjer, drugi izraz "prazan" petlja e se ponavljati nedefiniran broj puta. Moda vam ova

    mogunost na prvi pogled nema smisla, ali sve do momenta kada ovu mogunost budeteupotrijebili sa uvjetnom instrukcijom "break". Razmotrite slijedei primjer:

  • 8/2/2019 P H P - HR

    22/36

    /* 4. primjer */

    for ($d = 1; $d Od ova etiri primjera, prvi je svakako najjasniji. U drugom primjeru je prikazan "prazan"drugi izraz, pa imamo nedefiniran broj iteracija petlje. Ali, tu smo upotrijebili "If" grananje iinstrukciju "break", kojom izlazimo iz petlje (petlja se prekida) kada vrijednost varijable "$b"bude 11 (nakon toga vrimo tampanje vrijednosti varijable). Trei primjer je specifian jer su

    sva tri izraza "prazna" (nedefinirana). Tako da e se data petlja izvravati u zavisnosti odprirode ugnjeenih naredbi. PHP naravno, osigurava i alternativno definiranje "For" petlje(sa dvotokom):

    for (izraz1; izraz2; izraz3):...naredba; ...;

    endfor;

    Kontrolna struktura "Switch"Instrukcija "Switch" je slina seriji "If" naredbi koje se nalaze u istom izrazu. U mnogosituacija, trebat ete da npr. uporeujete istu varijablu (ili cio izraz) sa vie razliitihvrijednosti, i pri tome da u zavisnosti od jednakosti ove dvije vrijednosti izvrite odreeni(razliit) programski kod. Ova naredba je ekvivalentna naredbi "Select ... Case", Visual Basic-a. U naredna dva primjera vidjet ete dva naina za rjeavanje istog problema, prvi nainkoristi seriju "If" instrukcija, a drugi nain naredbu "Switch":

  • 8/2/2019 P H P - HR

    23/36

    }?>Jako je bitno da razumijete nain na koji se ova naredba izvrava, jer ete inae nainitigreke. Naredba "Switch" se izvrava liniju po liniju (zapravo, naredbu po naredbu). U prvomtrenutku ne izvrava se ni jedna naredba. Tek kada PHP parser utvrdi koja PHP vrijednost uCase izrazu odgovara vrijednosti Switch izraza, tada poinje da se izvrava programski kod.PHP izvrava instrukcije do kraja "Switch" bloka, ili do "Break" naredbe. Pazite, ukoliko nenapiete naredbu "Break" na kraju svakog "Case" bloka, PHP e nastavljati izvravati svenaredne "Case" blokove. Pogledajte slijedei primjer:

    Ukoliko je varijabla $a jednaka nuli (0), PHP e izvriti sve naredbe za ispis (Print)! Ako jevrijednost varijable jedan (1), PHP e izvriti obje, donje naredbe za ispis. Tek ako jevrijednost varijable dva (2), imat emo "oekivano" ponaanje ove strukture i ispisat e sesamo "a je manje od 3, ali nije negativno", jer iza ove naredbe slijedi naredba prekida -"Break". Ovo znai da obavezno morate koristiti naredbu prekida.

    Kod naredbe "Switch" uvjet se provjerava samo jedanput, a rezultat se uporeuje sa svakom"Case" instancom. Naredba "Switch" je bolje rjeenje od viestrukih "If ... else if" naredbi, jerse bre izvrava (zato to se uvjet viestruko provjerava). Specijalan sluaj Case izrazapredstavlja "podrazumjevana" Case naredba, iji se programski kod izvrava ukoliko nije

    zadovoljena ni jedna prethodna Case instanca. Evo i primjera:

  • 8/2/2019 P H P - HR

    24/36

    Funkcije

    Ako poznajete bilo koji programski jezik, sigurno ste uli i zafunkcije. Funkcija prijedstavljaskup iskaza koji je organiziran na poseban nain, a PHP parser je tretira kao zasebnuprogramsku cjelinu. Svaka funkcija se sastoji od zaglavlja i tela funkcije, pri tome zaglavljefunkcije sadri identifikator funkcije (naziv same funkcije) i argumente sa njihovimdefinicijama, a u tijelu funkcije sadrane su razliite izvrne instrukcije i deklaracije varijablikoje se koriste u funkciji. Naravno, deklaracija promjenljivih se mora napisati prije izvrnihnaredbi u kojima se upotrebljavaju date varijable. Evo i primjera jedne vrlo jednostavne

    funkcije:

    Identifikator "ispisi" u zaglavlju funkcije je sam naziv funkcije, kojim se funkcija identificira ipoziva njeno izvrenje. Prazna lista argumenata izmeu zagrada "(" i ")", oznaava da ovafunkcija nema argumenata, tj. iz pozivajueg dijela PHP skripta se ne prenosi ni jednavrijednost. Izmeu vitiastih zagrada je tijelo funkcije u koje idu deklaracije i instrukcije. Utijelu funkcije "ispisi" imamo samo jednu instrukciju - echo, koja e samo ispisati tekst. Kaoto vidimo, unutar same funkcije nemamo deklaraciju varijabli.

    Ako bi ovakvu funkciju (unutar HTML stranice) proslijedili PHP parseru, nita se ne bidesilo, odnosno parser bi vratio praznuHTML stranicu jer nigdje u PHP skripti nismo pozvalifunkciju "ispisi()" na izvrenje. Zato emo u prethodnu skriptu dodati i poziv funkcije:

    Kada se doe do poziva funkcije (ispisi), kontrola programa se direktno prenosi u funkciju"ispisi()" i izvrava se tijelo funkcije, odnosno ispisuje se poruka "Ovo je Vasa prvafunkcija!". Na kraju funkcije, oznaene zatvorenom vitiastom zagradom, kontrola programase vraa na prvu instrukciju koja slijedi nakon iskaza kojim se poziva funkcija ispisi.

    Svaka funkcija se moe pozivati neodreeni broj puta, pa tako ako bi funkciju "ispisi()"pozvali tri puta - tri puta bi se na ekranu ispisala poruka (kao na slici). to se tie PHP-a, bilokoji valjan kod moe da se smjesti u tijelo funkcije, ukljuujui tu i druge funkcije i klase.

  • 8/2/2019 P H P - HR

    25/36

    Argumenti funkcija

    U prethodnom PHP prilogu definirali smo ta su to funkcije i kako se koriste, i ta suargumenti jedne funkcije. Inae, razne informacije se funkciji mogu proslijediti preko listeargumenata, koja prijedstavlja zarezom razdvojenu listu varijabli, i/ili konstanti.Podrazumjeva se da PHP omoguava prosleivanje argumenata funkciji u vidu vrijednosti;argumenti se mogu jo proslijediti kao reference (varijable), i kao "podrazumjevanevrijednosti". Takoe, omoguena je i upotreba listi argumenata varijabilne duine, ali samo uveziji PHP-a 4. Kod verzije 3 PHP-a, listu argumenata moemo simulirati u vidu niza koji seproslijeuje funkciji. Na primjer:

    Uglavnom se funkcijama prosljeuju konkretne vrijednosti, pa tako kada promjenimovrijednost argumenta unutar funkcije, nee se promjeniti i njegova vrijednost van funkcije.Ukoliko elite da se vrijednosti prosljeenih argumenata mogu mijenjati unutar funkcije,proslijedite te iste argumente u vidu referenci. A ako elite se argumenti uvijek prosljeujukao reference morat ete da ispred naziva argumenta dodate znak ampersand (&). Evo iprimjera prosljeivanja argumenta u vidu reference:

    Rezultat ovog malog skripta e biti ispis - "Ovo je string, i dodatni dio stringa.". Slinoprethodnoj metodi, varijablu kao referencu moete proslijediti i kada to niste u prvi mahdefinirali, tada ete u samom pozivu funkcije dodati znak ampersand (&):

  • 8/2/2019 P H P - HR

    26/36

    // izlaz 'Ovo je string, a ovo je dodatni dio.'?>

    Slino prethodnom definiranju argumenata je i definiranje "podrazumjevanih argumenata"(kao kod jezika C++):

    Izlaz ove male skripte e biti:

    Najbolja je kava Grand.Najbolja je kava Doncaffe.Kao to vidite, ako funkciji ne proslijedimo nikakvu vrijednost argumenta, koristit e se

    podrazumjevana vrijednost (Doncaffe).

  • 8/2/2019 P H P - HR

    27/36

    Klase i objekti

    Klase predstavljaju opu kategoriju u objektno-orijentiranom programiranju, koja opisujegrupu posebnih elemenata koji se nazivaju objekti i nalaze se unutar grupe. Klasa je opisnielement, i u programiranju slui za definiranje skupa atributa ili skupa akcija (funkcija) kojesu dostupne drugim dijelovima programa, a karakteristine su za sve lanove jedne klase.Definiranje klasa u objektno-orijentiranom programiranju je vrlo slino definiranju tipovapodataka u strukturnom programiranju.

    U PHP-u jedna klasa je, najjednostavnije reeno, kolekcija varijabli i funkcija kojemanipuliraju ovim varijablama. U slijedeim redovima vidjet emo nain definiranja jedneklase:

    Kao to moete vidjeti, definirali smo klasu "Racun" (kupovni raun) koja sadri odreenibroj artikala - stavki (niz $stavke) i dvije funkcije:

    dodaj_stavku() - funkcija za dodavanje odreeneog broja (kom) artikala (ser_br) naraun

    ukloni_stavku()- funkcija za skidanje, takoe, odreenog broja (korisnik ne moraponititi kupovinu svih) stavki sa rauna.

    Poto smo rekli da su klase kao tipovi podataka, da bi ih upotrijebili u programiranju,potrebno je da deklariramo varijable na osnovu klase:

    $racun = new Racun;$racun->dodaj_stavku("10", 1);Ovaj kod e kreirati objekat $racun koji pripada klasi Racun. Zatim smo funkcijom"dodaj_stavku()", na raun dodali 1 komad artikla sa serijskim brojem 10.

  • 8/2/2019 P H P - HR

    28/36

    Klase inae mogu biti proirenja drugih klasa. Pri tome, proirena klasa ima sve varijable ifunkcije osnovne klase (kroz tzv. nasljeivanje) i moe da ima dodatne vlastite varijable ifunkcije. Da naglasimo i to da viestruko nasljeivanje nije podrano. Evo primjeraproirivanja prethodno definirane klaseRacun:

    class Kupovni_Racun extends Racun {var $kupac;

    function unos_kupca ($ime) {

    $this->kupac = $ime;}}Ovim smo definirali novu klasu - Kupovni_Racun, koja ima sve varijable i funkcije kao iklasaRacun, kao i dodatnu varijablu $kupac i funkciju unos_kupca().

  • 8/2/2019 P H P - HR

    29/36

    PHP - Slanje e-mail poruka sa web-a (I dio)

    Nakon osnovnog upoznavanja sa PHP jezikom i njegovom sintaksom, konano prelazimo naneke ozbiljnije stvari. U ovom i nekoliko narednih priloga obradit emo temu "slanje e-mailporuka uz pomo PHP-a", koja uope nije "teak zalogaj". Prolaskom kroz ovu temu,prodiskutirat emo i jo nekoliko pitanja, kao to su: prikaz "rezultirajue" stranice, provjeraulaznih podataka itd. Radei na ovoj "e-mail" skripti, javie vam se vie ideja kako da juupotrijebite i ime moete da ga dopunite. Za poetak, evo i same sintakse PHP "mail"

    instrukcije:

    mail ([primalac], [tema], [tijelo_poruke], [zaglavlja]);Kao to vidite, nema niega to bi trebalo da vas uplai. Ako ste ve naprijedniji PHP"skripter", u ovom trenutku ete ve znati ta dalje raditi. Ali, ako ste totalni poetnik, onda jeje ovo pravo mjesto za vas. Evo i koje toke emo obraditi kroz ovu temu:

    Provjera, da li se poziv e-mail forme i izvrenje, vri sa vaeg sajta, a ne sa neke drugelokacije.

    Dinamiko kreiranje tijela e-mail poruke. Osnovna provjera greaka i provjera popunjenosti svih polja (validacija). Kreiranje "rezultujue" stranice i "rezultujue" stranice u sluaju greke. Kreiranje mail forme (obrasca).

    Pa, da krenemo odmah.

    Kreemo sa prvom tokom, a to je detekcija "poiljaoca". Ovo je vrlo vana toka, jer ako neimplementirate ovu mogunost, neki zlonamjerni PHP "skripteri" mogu lako da iskoriste vauweb mail formu za slanje velikog broja spam poruka. Neemo vam prikazati, i kako se to radi,ali verujte - lake je nego to mislite. Dosta teoretiziranja, imamo "puno posla", pa zatoprelazimo na konkretne stvari. Prvo, na prethodnu liniju PHP koda "nakalemiemo" jednouvjetno "if...then" grananje, tako da moemo zaustaviti slanje e-mail-a u sluaju da neto nije

    u redu:

    if (!$greska) {mail ([primalac], [tema], [tijelo_poruke], [zaglavlja]);}Izgleda ve kompliciranije, zar ne? Potom, emo prijei na dio koji je vazan za odailjaocaporuke, gdje prvo kreiramo varijablu - niz:

    $odasiljaoci = array ('krstarica.com','www.krstarica.com');Gornjom linijom kreiramo niz u kome se nalaze nazivi domena sa kojih e biti dozvoljenoizvravanje e-mail skripti. Nije bitno kojim redom navedete elemente niza, a umesto naziva

    domena moete koristiti i IP adrese datih domena. Slijedi PHP kod koji proverava da li seodailjalac nalazi u naem nizu dozvoljenih odailjaoca ($odasiljaoci):

    $privremeni = explode("/",getenv("HTTP_REFERER"));$brojac = 0;while($brojac < count($odasiljaoci)){

    if (ereg($odasiljaoci[$brojac], $privremeni[2])) {$ispravno = "true";

  • 8/2/2019 P H P - HR

    30/36

    }$brojac++;

    }if ($ispravno != "true") { $autorizacija .= "neautoriziran "; }Da vidimo to se tu zbiva:

    Potencijalni poiljalac se ubacuje u niz "$privremeni[ ]". Petljom provjeravamo poiljaoca, tako to uporeujemo domen iz varijable

    "$privremeni[ ]" sa predefiniranim vrijednostima iz niza "$odasiljaoci[]". Ukoliko se neki od domena iz niza "$odasiljaoci[]" poklopi sa prosljeenimdomenom, prolazi se kroz ovu "kontrolnu toku" i varijabli "$ispravno" dodjeljuje se

    vrijednost "true". Posljednja instrukcija u "if...then" instrukcija jednostavno popunjava varijablu

    "$autorizacija" sa stringom "neautoriziran", u sluaju da neko koristi e-mail formu sadrugog servera.

    Ovdje emo se zaustaviti, te nastavljamo u slijedeem PHP prilogu.

    Slanje e-mail poruka sa web-a (II dio)

    Funkciju za provjeru odailjaoca iz prethodnog priloga, vrlo je lako implementirati u vauPHP skriptu. Potrebno ju je postaviti iznad PHP funkcije "mail()", iz prethodnog priloga. Akoste dobro pogledali prethodni PHP kod, vjerovatno ste uoili da je nizu "$odasiljaoci[ ]"potrebno malo podeavanja.

    Nastavljamo dalje, i u ovom prilogu pozabavit emo se kreiranjem tijela e-mail poruke kojae biti odaslana. Prikazat emo vam kako moete formirati listu (listing) svih vrijednosti kojise alju preko formulara, i kako napraviti automatski odgovor za posjetioce vaih stranica.Veina web formulara zahtjeva od korisnika unos informacija. Najei tip web formulara je

    tzv. "feedback" formular, koji emo iskoristiti kao primjer. Kasnije, jednostavno moeteprepraviti programski kod i prilagoditi ga drugaijim potrebama.

    Slijedea e-mail poruka (administratorska) najee ide webmaster-u (odnosno, vama) iliodgovarajuem sektoru vae firme (ako se radi o firmi). Sadraj svakog ovakvog mail-a jejednostavna lista sa svim podacima koji su uneseni putem formulara, i odaslati preko skripte.Ove podatke, kao administrator, moete smjestiti u neku bazu podataka, kojoj kasnije moetepristupiti radi analize. Za poetak, uitaemo sve podatke odaslate uz pomo skripta:

    function parsiranje_formulara($ulaz) {

    if (count ($ulaz)) {while (list ($naziv, $vrijednost) = each($ulaz)) {

    if (is_array ($val)) {for ($brojac2=0; $brojac < count ($vrijednost); $brojac2++) {

    $sadrzaj .= "$naziv: $vrijednost [$brojac2]\n";}

    } else {$sadrzaj .= "$naziv: $vrijednost\n";

  • 8/2/2019 P H P - HR

    31/36

    }}

    }return $sadrzaj;

    }$sadrzaj = parsiranje_formulara($HTTP_POST_VARS);Ovaj kod nije previe teak. Ono to ovdje treba da dobijemo je varijabla "$sadrzaj" koja jesainjena od svih ulaznih podatka koji su poslati PHP skripti na obradu . U sluaju da imatevie ulaza, dobit ete listu slinu ovoj:

    naziv_ulaza1: vrijednost1naziv_ulaza2: vrijednost2naziv_ulaza3: vrijednost3I tako dalje. Pretpostavljate ta bi se desilo da imate samo jedan ulaz. PHP kod koji uobliavasadraj vaih poruka je slijedei:

    $sadrzaj .= "$naziv: $vrijednost [$brojac2]\n";$sadrzaj .= "$naziv: $vrijednost\n";Varijabla "$naziv" sadri nazive polja formulara, a varijabli "$vrijednost" se dodjeljujesadraj vezan za odgovarajue polje formulara. Prije nego to krenemo dalje, ispisat emo

    subjecte-mail poruke koja se upuuje administratoru:

    $admin_subject = "Odgovor poslat putem PHP-a";Ovdje emo se zaustaviti, a nastavit emo u slijedeem PHP prilogu. Ako do sada imateutisak da je ovo previe komplicirano, i da je PHP kod koji predstavljamo previe razuen, nebrinite. Na kraju ove teme predstaviemo vam cio kod, u jednoj celini.

  • 8/2/2019 P H P - HR

    32/36

    Konekcija na MySQL bazu podataka (I dio)

    Nakon vie uvodnih lanaka o PHP-u i upoznavanja sa sintaksom i osnovnim funkcijamaPHP-a, stigli smo i do moda i najkorisnijeg segmenta upotrebe, a to je spajanje sa bazompodataka koja se nalazi na MySQL serveru. Spajanje sa bazama podataka predstavlja i osnovuza izgradnju kompleksnih mrenih aplikacija. Inae, uz pomo PHP-a moete se spojiti sa bilokojim sistemom za upravljanje bazama podataka (DBMS), a meu PHP programerima susvakako MySQL baze podataka najomiljeniji tip. Na va budui izbor baza podataka sigurno

    e uticati i va web provajder, tj. tip baza podataka koje on podrava (tj. instaliran server bazapodataka).

    Kada je rije o upotrebi MySQL baza podataka, postoji vei broj dobro dokumentiranih PHPfunkcija koje e vam pomoi u uspostavljanju veze sa podacima. Meutim, trebat e vamsamo nekoliko ovih funkcija u cilju postizanja jednostavne konekcije i selekcije nekihpodataka:

    mysql_connect - funkcija kojom ostvarujemo vezu sa MySQL serverom; zahtjevanaziv hosta, korisniko ime i lozinku.

    mysql_select_db - funkcija za izbor baze podataka od mnogobrojnih koje se nalaze na

    MySQL serveru. mysql_query - funkcija za postavljanje SQL instrukcija. mysql_fetch_array - funkcija za smjetanje rezultata SQL upita u niz. mysql_free_result - funkcija za oslobaanje resursa zauzetih trenutnom konekcijom. mysql_close - funkcija za prekid veze ka bazi podataka.

    Ovo su osnovne funkcije koje vam trebaju za rad sa bazama podataka, a detalje o ostalimfunkcijama moete nai u odgovarajuem priruniku koji se nalazi na adresiwww.php.net/manual/.

    U naem primjeru, pretpostavit emo da ste instalirali MySQL server, da ste kreirali bazu

    podataka i da za datu bazu imate korisniko ime (username) i lozinku (password). U toj bazikreirajte tabelu "Proizvodi", koja e imati polja: "Naziv", "Tip" i "Kolicina". Samu tabelu

    popunite sa podacima kao to su ovi dati na slici.

  • 8/2/2019 P H P - HR

    33/36

    Konekcija na MySQL bazu podataka (II dio)

    Nakon upoznavanja sa osnovnim funkcijama za spajanje sa bazom i kreiranja baze i tabelekao pripreme za na primjer, kreemo i sa samim PHP kodiranjem. Prije nego to ponete,potrebno je da znate naziv servera na kome se nalazi baza podataka (ukoliko radite u lokalu,naziv e biti "local"), validno korisniko ime i lozinka za taj server. Zatim, startamo sa PHPkdom, kreiranjem konekcione varijable:

    $connection = mysql_connect

    ("naziv_servera","kor_ime","lozinka")or die("Povezivanje nije moguce.");

    Funkcija die() koristi se za prekidanje skripte i "tampanje" poruke o greci ukoliko prethodnafunkcija "propadne" (u ovom sluaju, ako konekcija nije uspostavljena).

    Kada uspostavite vezu, tj. konekciju, slijedei korak predstavlja izbor baze podataka ikreiranje SQL instrukcije (upita). Pretpostavimo da tabela "Proizvodi" ve postoji u MySQLbazi podataka koja se npr. zove "mojaBaza". Potrebno je da eksplicitno izaberete bazu

    podataka na serveru na koju ete se spojiti:

    $db = mysql_select_db("mojaBaza", $connection)or die("Baza nije dostupna.");

    U ovoj toki smo "naredili" PHP parseru da se spoji na MySQL server i selektira bazupodataka. Ako je sve u redu do ove toke, moete odaslati SQL upit i nadati se da e vam sevratiti nekakav rezultat, tj. rezultirajui set slogova. Kreirat emo upit koji se zasniva na tabeli"Proizvodi" (definirana u prethodnom prilogu), a koji treba da vrati polja sa nazivimaproizvoda, njihovim tipom i koliinom proizvoda, s tim da se podaci poredaju po najveimkoliinama. Kreirat emo varijablu koja e sadrati ovu nau SQL instrukciju:

    $sql = "SELECT Naziv, Tip, KolicinaFROM ProizvodiORDER BY Kolicina DESC";

    Potom emo kreirati varijablu koja e prihvatiti rezultate prethodnog upita, a koji e se dobitiuz pomomysql_query funkcije. Funkcija mysql_query poseduje dva argumenta; konekciju iSQL varijablu, koje smo prethodno kreirali:

    $sql_result = mysql_query($sql,$connection)

    or die("Upit nije izvrsen");

    Ovim bi trebalo da uspostavimo konekciju, selektiramo tabelu, postavimo upit i smjestimorezultate u varijablu. U slijedeem prilogu emo vidjeti kako rezultate upita prikazatikorisnicim

  • 8/2/2019 P H P - HR

    34/36

    PHP - Konekcija na MySQL bazu podataka (III-dio)

    Nakon postavljenog i upuenog upita serveru uz pomo funkcije mysql_query, bie potrebnoda rezultat sadran u varijabli $sql_result formatiramo, tako da ga podjelimo na odvojeneredove, u emu e nam pomoi funkcija mysql_fetch_array:

    while ($row = mysql_fetch_array($sql_result)) {

    //prog. kod}

    Kao to vidite, uz pomowhile petlje kreirat emo niz koji smo nazvali $row, i to za svakislog u rezultirajuem skupu slogova. Da bismo dobili pojedinane elemente sloga, odnosnopolja ( Naziv, Tip, Kolicina), kreirat emo potrebne varijable:

    $naziv_proiz = $row["Naziv"];$tip_proiz = $row["Tip"];$kolicina = $row["Kolicina"];

    Poto je osnovna svrha bilo kog upita prikaz i nekakva analiza podataka, smjestiemodobijene podatke u HTML tabelu, tj. prikazaemo rezultat u takvom obliku da moe da gaiita bilo koji web browser. Da biste ovo odradili, slijedei HTML kd smjestite ispred whilepetlje, kako biste "otvorili" tabelu i kreirali naslovni red tabele:echo "";

    echo "Naziv proizvodaTipKolicina

    ";

    Nakon definiranja varijabli unutar while petlje, "odtampat emo" ih u tabeli:echo "

    $naziv_proiz$tip_proiz$kolicina";

    Prema tome, konana while petlja izgledat e ovako:

    while ($row = mysql_fetch_array($sql_result)) {$naziv_proiz = $row["Naziv"];$tip_proiz = $row["Tip"];$kolicina = $row["Kolicina"];echo "

  • 8/2/2019 P H P - HR

    35/36

    $naziv_proiz$tip_proiz$kolicina

    ";}

    Nakon zavretka petlje, slijedi i zatvaranje taga tabele:

    echo "";

    I konano, na kraju je potrebno da oslobodimo sve resurse zauzete izvravanjem upita, izatvorimo konekciju ka bazi podataka. Ako ovo ne uradimo, moemo izazvati neeljeno"curenje" memorije ili sline resurs-probleme.

    mysql_free_result($sql_result);mysql_close($connection);

    ?>

    PHP - Zato koristiti MySQL kao SUBP?

    U jednom od prethodnih PHP priloga mogli ste vidjeti najjednostavniji nain za povezivanjePHP stranica i baza podataka. U datom sluaju spojili smo se na MySQL server bazapodataka, a mogli smo na bilo koji sistem za upravljanje podacima. Ali, zato smo izabrali baMySQL i zato se ovaj sistem i koristi u najveem broju sluajeva?

    MySQL predstavlja relacioni sistem za upravljanje bazama podataka (RSUBP) kojiomoguava da uvate podatke, da im pristupate i da ih organizirate na najbolji mogui nain

    (ovo zadire u iroku temu zvanu "Organizacija podataka"). Pri tome, ovaj RSUBP moe daslui u organizaciji podataka i to od nivoa obine liste podataka, pa sve do velike kolekcijetabela sa milionskim brojem slogova. Inae, relacione baze podataka su vrlo mona alatkakoja osigurava da crpite informacije iz viestrukih izvora i pri tome vrite njihovukomparaciju, kombiniranje i sumiranje radi dobijanja prave informacije u bilo koje doba. Naprimjer, moete dobiti jednostavnu listu klijenata, ili iskombinirati klijente sa njihovimnarudbinama i pozicijama koje su naruili. Baze podataka osiguravaju potrebnu strukturu iorganizaciju koja je potrebna radi operacija za efikasan pristup podacima, ak i kada ovopodrazumjeva veliku koliinu informacija i veliki broj tabela (entiteta).

    Ipak, ta je to toMySQLini tako posebnim:

    MySQL je Open Source RSUBP. Dostupan je na Internetu i pri tome je besplatan.Ovo je veliki kontrast drugim komercijalnim sistemima za baze podataka (kao to suOracle, MS SQL, Informix i sl.), kreiranih od strane velikih kompanija, koji su pritome veoma skupi. Meutim, za one koji ele da narueMySQL sistem na CD-u, i pritome prime odgovarajuu tampanu dokumentaciju, veliki broj firmi osigurava ovuopciju za malu sumu (stotinjak dolara). Pored toga, neke od ovih firmi nude i tehnikupodrku i trening kurseve.

  • 8/2/2019 P H P - HR

    36/36

    Brzina. Svaki od sistema za baze podataka ima podruja u kojima se posebno istie.ZaMySQL, jedna od ovih podruja je brzina - iroko je priznato da su odgovori ovogsistema bri nego kod drugih sistema. Upravo zbog brzine, MySQL je sistem izbora zaInternet aplikacije, gdje se zbog velikog saobraaja zahtjeva velika brzina.

    SQL-orijentacija. MySQL podrava standardni Structured Query Language (SQL),najkorieniji jezik za definiranje i ekstrakciju podataka.

    Lakoa upotrebe. DistribucijaMySQL je relativno mali paket, koji ne zahtjeva stotinei stotine megabajta kao drugi SUBP. Razvojna filozofija ovog sistema fokusirana je nairoku i laku upotrebljivost, gdje se u paket ubacuju samo neophodne funkcije. Ovo

    MySQL ini lakim za razumjevanje, lakim za instaliranje, podeavanje iadministraciju. Portabilnost. MySQL moe da se pokrene na brojnim paltformama, a najvanije su

    UNIX, Linux i Windows. Rapidni razvoj. Suvremeni dodaci za MySQL ukljuuju podrku za transakcije,

    replikaciju, tekstualno pretraivanje i RAID fajl-sisteme. Pored toga, moe se ukljuitii podrka za zakljuavanje na nivou sloga.

    Interoperabilnost.MySQL moe se koristiti u kombinaciji sa velikim brojem drugogsoftvera, koji je takoer besplatan. Ove alatke vam omoguavaju da na lak nainiskoristite sve mogunostiMySQL-a.

    Programibilnost. Ukoliko postojei softver ne odgovara vaim potrebama, moete

    kreirati vlastiti. Dostupni su interfejsi za veliki broj programskih jezika, kao to su: C,C++, Perl, PHP, Python, Java, Ruby, itd.