134
Almir Sinanović | PHP 1 Univerzitet u Novom Pazaru FAKULTET TEHNIČKIH NAUKA Seminarski rad: PHP Departman: Elektrotehnika i računarsko inžinjerstvo Studijski program: Računarska tehnika Predmet: Web dizajn Student: Mentor: Almir Sinanović 02-512/04 Prof.dr Miroslav Lutovac

PHP - Almir Sinanovic

Embed Size (px)

Citation preview

Page 1: PHP - Almir Sinanovic

Almir Sinanović | PHP 1

Univerzitet u Novom Pazaru

FAKULTET TEHNIČKIH NAUKA

Seminarski rad:

PHP

Departman: Elektrotehnika i računarsko inžinjerstvo

Studijski program: Računarska tehnika

Predmet: Web dizajn

Student: Mentor:

Almir Sinanović 02-512/04 Prof.dr Miroslav Lutovac

Page 2: PHP - Almir Sinanovic

Almir Sinanović | PHP 2

Sadržaj

PHP Vodič ...................................................................................................................................... 9

PHP Uvod ....................................................................................................................................... 9

Ono što već treba da znate .......................................................................................................... 9

Šta je PHP ? ................................................................................................................................ 9

Šta je PHP datoteka ? ................................................................................................................ 10

Šta je MySQL ? ......................................................................................................................... 10

PHP + MySQL .......................................................................................................................... 10

Zašto PHP ?............................................................................................................................... 10

Odakle da počnem ? ................................................................................................................. 10

PHP Instalacija .............................................................................................................................. 10

Šta vam treba? ........................................................................................................................... 11

Preuzmite PHP .......................................................................................................................... 11

Preuzmite MySQL bazu podataka ............................................................................................ 11

Preuzmite Apache Server .......................................................................................................... 11

Prezentacija WampServer-a ...................................................................................................... 11

Instalacija .................................................................................................................................. 12

Funkcije..................................................................................................................................... 12

Kako početi ............................................................................................................................... 13

Dodaj Apache, MySQL i PHP verzije ...................................................................................... 13

PHP Sintakse ................................................................................................................................. 14

Osnovne PHP sintakse .............................................................................................................. 14

Komentari u PHP-u ................................................................................................................... 15

PHP Promenljive ........................................................................................................................... 16

Promenljive u PHP-u ................................................................................................................ 16

PHP je labavo napisan jezik ...................................................................................................... 16

Pravila za imenovanje promenljivih ......................................................................................... 17

PHP String Promenljive ................................................................................................................ 17

String promenljive u PHP-u ...................................................................................................... 17

Operater za nadovezivanje ........................................................................................................ 18

Strlen ( ) funkcija ...................................................................................................................... 18

Strpos ( ) funkcija...................................................................................................................... 19

Kompletna PHP string referenca .............................................................................................. 19

Page 3: PHP - Almir Sinanovic

Almir Sinanović | PHP 3

PHP Operacije ............................................................................................................................... 19

PHP Operacije ........................................................................................................................... 20

PHP If...Else Izjave ....................................................................................................................... 21

Uslovne izjave ........................................................................................................................... 21

IF Izjava .................................................................................................................................... 22

If..else Izjava ............................................................................................................................. 22

if...elseif....else Izjava ............................................................................................................... 23

PHP Promenljive Izjave ................................................................................................................ 24

PHP Promenljive izjave ............................................................................................................ 24

PHP Nizovi ................................................................................................................................... 25

Šta je niz ? ................................................................................................................................. 26

Numerički nizovi ...................................................................................................................... 26

Asocijativni nizovi .................................................................................................................... 27

Višedimenzionalni nizovi ......................................................................................................... 28

Kompletan PHP niz napomena ................................................................................................. 29

PHP Petlje – „While“ petlje .......................................................................................................... 30

PHP Petlje ................................................................................................................................. 30

„While“ petlja ........................................................................................................................... 30

„do...while“ izjava..................................................................................................................... 31

PHP petlje – „For“ petlje .......................................................................................................... 32

„For“ petlja................................................................................................................................ 32

„Foreach“ petlja ........................................................................................................................ 33

PHP Funkcije ................................................................................................................................ 34

PHP ugraĎene funkcije ............................................................................................................. 34

PHP Funkcije ............................................................................................................................ 34

Kreirati PHP funkciju ............................................................................................................... 35

PHP Funkcije – dodavanje parametara ..................................................................................... 35

PHP Funkcije - Povratne vrednosti .......................................................................................... 37

PHP Obrazci i Korisnički input .................................................................................................... 38

RukovoĎenje PHP Formama..................................................................................................... 38

PotvrĎivanje obrazaca ............................................................................................................... 39

PHP $_GET Funkcija ................................................................................................................... 39

$_GET Funkcija ........................................................................................................................ 39

Kada koristiti metod ="get"? .................................................................................................... 40

Page 4: PHP - Almir Sinanovic

Almir Sinanović | PHP 4

PHP $_POST Funkcija ................................................................................................................. 40

$_POST Funkcija ...................................................................................................................... 40

Kada koristiti metod="post"? .................................................................................................... 41

PHP $_REQUEST Funkcija ..................................................................................................... 41

PHP Date() Funkcija ..................................................................................................................... 41

PHP Date() Funkcija ................................................................................................................. 41

PHP Date() - Podešavanje datuma ............................................................................................ 42

PHP Date() - Dodavanje vremenskog ţiga ............................................................................... 42

Potpuna referenca za PHP Date ................................................................................................ 43

PHP Include File ........................................................................................................................... 43

Include u sporednom serveru (SSI)........................................................................................... 43

PHP include() Funkcija ............................................................................................................. 44

PHP require() Funkcija ............................................................................................................. 45

PHP upravljanje datotekama ......................................................................................................... 47

Otvaranje datoteka .................................................................................................................... 47

Zatvaranje datoteke ................................................................................................................... 48

Proveriti End-of-file (kraj datoteke) ......................................................................................... 48

Čitanje datoteke Liniju po Liniju (Line by Line)...................................................................... 49

Čitanje datoteke Karakter po Karakter ..................................................................................... 49

PHP Učitavanje datoteka .............................................................................................................. 50

Kreirati obrazac Učitavane-Datoteke ........................................................................................ 50

Kreirati Učitavajuću skriptu ...................................................................................................... 50

Ograničenja na Učitavanje ........................................................................................................ 51

Čuvanje učitanih datoteka ......................................................................................................... 52

PHP Kolačići ................................................................................................................................. 53

Šta je kolačić? ........................................................................................................................... 53

Kako napraviti Kolačić? ........................................................................................................... 53

Kako povratiti vrednost Kolačića?............................................................................................ 54

Kako izbrisati Kolačić? ............................................................................................................. 55

Šta ako pretraţivač ne podrţava kolačiće? ............................................................................... 55

PHP Sesije ..................................................................................................................................... 56

PHP Sesije promenljiva ............................................................................................................ 56

Startovanje PHP Sesije ............................................................................................................. 56

Čuvanje Sesije promenljive ...................................................................................................... 57

Page 5: PHP - Almir Sinanovic

Almir Sinanović | PHP 5

Uništavanje Sesije ..................................................................................................................... 58

PHP Slanje e-mail-ova ................................................................................................................. 58

PHP mail() funkcija .................................................................................................................. 58

PHP Jednostavni E-Mail ........................................................................................................... 59

PHP Mail Od ............................................................................................................................. 59

PHP Mail Reference ................................................................................................................. 60

PHP Sigurni E-mail-ovi ................................................................................................................ 60

PHP E-mail Inekcije ................................................................................................................. 61

PHP Zaustavljanje E-mail Inekcija ........................................................................................... 62

PHP Rukovanje Greškama ............................................................................................................ 63

PHP Rukovanje Greškama ........................................................................................................ 63

Osnovna manipulacija greškama: Koristeći die() funkciju ...................................................... 64

Kreiranje prilagoĎenog rukovanja greškama ............................................................................ 65

Nivo prijavljivanja grešaka ....................................................................................................... 65

Set Error Handler ...................................................................................................................... 66

Pokretanje greške ...................................................................................................................... 67

Greške prijavljivanja ................................................................................................................. 69

Slanje poruke o grešci putem e-maila ....................................................................................... 69

PHP Upotreba izuzetka ................................................................................................................. 70

Šta je izuzetak? ......................................................................................................................... 70

Osnovna upotreba izuzetka ....................................................................................................... 70

Pokušaj ,baci i uhvati ................................................................................................................ 71

Kreiranje prilagodjene klase izuzetaka ..................................................................................... 72

Višestruki izuzeci ...................................................................................................................... 74

Ponovno bacani izuzeci............................................................................................................. 75

Postavi vrhunskog upravljača izuzetaka ................................................................................... 76

Pravila za izuzetke .................................................................................................................... 77

PHP MySQL Uvod ................................................................................................................... 77

Sta je MySQL? .......................................................................................................................... 77

Tabele baze podataka ................................................................................................................ 77

Pretrazivanja ............................................................................................................................. 78

Skinite MySQL bazu podataka ................................................................................................. 78

Cinjenice o MySQL bazi podataka ........................................................................................... 78

PHP MySQL Povezite se sa bazom podataka........................................................................... 78

Page 6: PHP - Almir Sinanovic

Almir Sinanović | PHP 6

Napravite konekciju sa MySQL bazom podataka .................................................................... 79

Zatvaranje konekcije ................................................................................................................. 79

PHP MySQL Napravite baze podataka i tabele ............................................................................ 80

Kreirajte bazu podataka ............................................................................................................ 80

Kreirajte tabelu.......................................................................................................................... 81

Primarni kljucevi i polja za autopovecanje ............................................................................... 82

PHP MySQL Ubaciti u ................................................................................................................. 82

Ubaciti podatke u tabelu baze podataka .................................................................................... 83

Ubacite podatke iz baze podataka Formirajte u ........................................................................ 84

PHP MySQL Selektovanje ........................................................................................................... 85

Selektovanje podataka iz tabele baze podataka ........................................................................ 85

Sintaksa ............................................................................................................................................... 85

Primer .................................................................................................................................................. 85

Prikazi rezultate u HTML tabeli ............................................................................................... 86

PHP MySQL The Where Clause .................................................................................................. 87

Klauzula Gde ............................................................................................................................ 87

Sintaksa ............................................................................................................................................... 87

Primer .................................................................................................................................................. 87

PHP MySQL Naredba kljucnom reci ........................................................................................... 88

ORDER BY Kljucna rec ........................................................................................................... 88

Sintaksa ............................................................................................................................................... 88

Primer .................................................................................................................................................. 89

Naredba sa dve kolone .............................................................................................................. 89

PHP MySQL Azuriranje ............................................................................................................... 90

Azuriranje podataka u bazi podataka ........................................................................................ 90

Sintaksa ............................................................................................................................................... 90

Primer .................................................................................................................................................. 90

PHP MySQL Brisanje ................................................................................................................... 91

Brisanje podataka iz baze podataka .......................................................................................... 91

Sintaksa ............................................................................................................................................... 91

Primer .................................................................................................................................................. 91

PHP Baza podataka ODBC ........................................................................................................... 92

Kreirajte ODBC konekciju ....................................................................................................... 92

Page 7: PHP - Almir Sinanovic

Almir Sinanović | PHP 7

Konektujte se sa ODBC ............................................................................................................ 93

Primer .................................................................................................................................................. 93

Vracanje zapisa ......................................................................................................................... 93

Vracanje polja iz zapisa ............................................................................................................ 93

Zatvaranje ODBC konekcije ..................................................................................................... 93

ODBC Primer............................................................................................................................ 94

PHP XML Expat Analizator ......................................................................................................... 94

Šta je XML? .............................................................................................................................. 95

Šta je Expat? ............................................................................................................................. 95

Instalacija .................................................................................................................................. 96

XML datoteka ........................................................................................................................... 96

Pokretanje XML analizatora ..................................................................................................... 96

Vise o PHP Expat analizatoru ....................................................................................................... 98

PHP XML DOM ........................................................................................................................... 98

Šta je DOM? ............................................................................................................................. 98

XML Analiziranje ..................................................................................................................... 98

XML Datoteka .......................................................................................................................... 99

Učitavanje I izvoz XML dokumenta ......................................................................................... 99

Petlja unutar XML-a ............................................................................................................... 100

PHP ProstiXML .......................................................................................................................... 101

Šta je ProstiXML?................................................................................................................... 101

Instalacija ................................................................................................................................ 101

Korišćenje ProstogXML-a ...................................................................................................... 102

Više o PHP ProstomXML-u ................................................................................................... 103

AJAX Uvod ................................................................................................................................ 103

AJAX = Asinhroni JavaScript i XML .................................................................................... 103

AJAX je zasnovan na internet standardima ............................................................................ 103

AJAX se bavi boljim internet aplikacijama ............................................................................ 103

Počnite da koristite AJAX već danas ...................................................................................... 104

PHP i AJAX ............................................................................................................................ 104

AJAX XMLHttpRequest ............................................................................................................ 104

AJAKS koristi XMLHttpRequest objekat .............................................................................. 104

AJAKS – Pomoć pretraţivaču ................................................................................................ 105

Više o XMLHttpRequest objektima ....................................................................................... 105

Page 8: PHP - Almir Sinanovic

Almir Sinanović | PHP 8

PHP Primer – AJAX Predlozi ..................................................................................................... 105

AJAX Predloţeni primer......................................................................................................... 105

Objašnjen primer - HTML stranica......................................................................................... 105

Objašnjen primer - JavaScript kod .......................................................................................... 106

Objašnjen primer – PHP strana ............................................................................................... 108

PHP Primer - AJAX i XML ........................................................................................................ 110

AJAX XML primer ................................................................................................................. 110

Objašnjen primer – HTML strana ........................................................................................... 110

Objašnjen pimer - JavaScript kod ........................................................................................... 111

Objašnjen primer - PHP Strana ............................................................................................... 112

PHP Primer - AJAX i MySQL.................................................................................................... 113

AJAX primer baze podataka ................................................................................................... 113

Objačnjen primer - MySqL baza podataka ............................................................................. 114

Objašnjen primer – HTML stranica ........................................................................................ 114

Objačnjen primer – JacaScript kod ......................................................................................... 115

Objašnjen primer – PHP stranica ............................................................................................ 116

PHP Primer – responseXML ...................................................................................................... 117

AJAX ResponseXML primer ................................................................................................. 117

Objašnjen primer – MySQL baza podataka ............................................................................ 118

Objašnjen primer – HTML stranica ........................................................................................ 118

Objašnjen primer – JavaScript kod ......................................................................................... 119

Objašnjen primer – PHP Stranica ........................................................................................... 120

PHP Primer – AJAX Uţivo pretraga .......................................................................................... 121

AJAX uţivo pretraga .............................................................................................................. 122

Objašnjen primer – HTMP stranica ........................................................................................ 122

Objašnjen primer – JavaScript kod ......................................................................................... 123

Objašnjen primer – PHP stranica ............................................................................................ 124

PHP Primer – AJAX RSS Čitač ................................................................................................. 126

AJAX RSS Čitač ..................................................................................................................... 126

Objašnjen primer – HTML stranica ........................................................................................ 126

Objašnjen primer – JavaScript kod ......................................................................................... 127

Objašnjen primer – PHP stranica ............................................................................................ 128

PHP Primer – AJAX Anketa....................................................................................................... 130

AJAX Anketa .......................................................................................................................... 130

Page 9: PHP - Almir Sinanovic

Almir Sinanović | PHP 9

Objašnjen primer – HTML stranica ........................................................................................ 130

Objašnjen primer – JavaScript kod ......................................................................................... 131

PHP stranica ............................................................................................................................ 132

Tekstualna datoteka ................................................................................................................ 133

PHP Vodič

PHP je moćan alat za izradu dinamičkih i interaktivnih Web stranica.

PHP je široko korišćena, besplatna, i efikasna alternativa za konkurente kao što je Microsoft

ASP.

U našem PHP priručniku će te naučiti o PHP-u, i kako da izvršava skripte na vasem serveru.

PHP Uvod

PHP je serverski-sporedni jezik za skriptovanje.

Ono što već treba da znate

Pre nego što nastavite morate imati osnovno razumevanje sledećeg:

HTML/XHTML

JavaScript

Ako zelite da učite ove teme posetite sajt http://www.w3schools.com, gde mozete naci skripte za

ove programske jezike.

Šta je PHP ?

PHP je skraćenica za PHP: Hipertekst Preprocesor

PHP je server-strani jezik za skriptovanje kao što je ASP

PHP skripte se izvršavaju na serveru

PHP podrţava mnoge baze podataka (MySQL, Informix, Oracle, Sybase, Solid,

PostgreSQL, Generic ODBC, itd)

PHP je open source softver

PHP je besplatan za preuzimanje i korišćenje

Page 10: PHP - Almir Sinanovic

Almir Sinanović | PHP 10

Šta je PHP datoteka ?

PHP datoteke mogu da sadrţe tekst, HTML tagove i skripte

PHP datoteke se vraćaju u pretraţivač kao običan HTML

PHP datoteke imaju nastavak ".php", ".php3", ili ".phtml"

Šta je MySQL ?

MySQL je server baze podataka

MySQL je idealan za veoma male i velike aplikacije

MySQL podrzava standardni SQL

MySQL je sastavljen na broju platformi

MySQL je besplatan za preuzimanje i korišćenje

PHP + MySQL

PHP u kombinaciji sa MySQL-om je unakrsna platforma ( Moţete razviti u Windows-u i

koristiti na Unix platformi)

Zašto PHP ?

PHP radi na različitim platformama (Windows, Linux, Unix, itd)

PHP je kompatibilan sa skoro svim serverima koji se koriste danas (Apache, IIS, itd)

PHP je besplatan i moţete ga preuzeti sa zvanicnog PHP izvora: www.php.net

PHP je lak za učenje i efikasno radi na drugim serverima

Odakle da počnem ?

Da biste dobili pristup web serveru sa PHP podrškom, moţete:

Instalirati Apache (ili IIS) na vašem serveru,instalirati PHP i MySQL

Ili pronaći web hosting plan sa PHP i MySQL podrškom

PHP Instalacija

Page 11: PHP - Almir Sinanovic

Almir Sinanović | PHP 11

Šta vam treba?

1. Ako vas server podrţava PHP ne morate ništa da radite..

Samo napravite neke svoje .php fajlove u web direktorijumu, i server će ih analizirati za vas.

Zato što je besplatan, većina web hostova nude PHP podršku.

MeĎutim, ako vaš server ne podrţava PHP , morate instalirati PHP.

Ovde je link za dobar tutorijal iz PHP.net-a o tome kako da instalirate php5:

http://www.php.net/manual/en/install.php

Preuzmite PHP

Preuzmite PHP besplatno odavde: http://www.php.net/downloads.php

Preuzmite MySQL bazu podataka

Preuzmite MySQL besplatno odavde: http://www.mysql.com/downloads/index.html

Preuzmite Apache Server

Preuzmite Apache besplatno odavde: http://httpd.apache.org/download.cgi

2. Drugi način je instalacija WampServer-a

Prezentacija WampServer-a

WampServer je Windows web razvojnog okruţenja. On vam omogućava da kreirate web

aplikacijusaApache, PHP i MySQL bazom podataka. TakoĎe,dolazi u paketu sa PHPMyAdmin

da bi lakše upravljali sa vašom bazom podataka.

WampServer se automatski instalira a njegovo korišćenje je veoma lako. Moći ćete da podesite

svoj server čak i bez dodirivanja postavke datoteka.

Posle instalacije WampServer-apojavit će vam se tray ikonica ,preko koje moţete lakse

upravljati svojim serverom i njegovim podešavanjima.

Page 12: PHP - Almir Sinanovic

Almir Sinanović | PHP 12

Instalacija

Preuzmite Apache besplatno odavde :http://www.wampserver.com/en/download.php

Dvaput kliknite na preuzetu datoteku i sledite uputstva. Sve je automatski. WampServer paket se

isporučuje saposlednjim verzijama Apache, MySQL i PHP-a.

Posle instalacije WampServera , moţete dodati i starije verzije ovog programa. One će se

pojaviti u meniju WampServera i moći ćete da se prebacite jednim klikom sa jedne na drugu

verziju.

Svaka verzija Apache, MySQL i PHP-aima svoja podešavanja i svoje fajlove.

Funkcije

Funkcije u WampServeru su veoma potpune i jednostavane za korišćenje.

Levim klikom na ikonicu WampServer-a, moći ćete da:

Upravljate Apache i MySQL uslugama

Prelazak na povezan / nepovezan (dati pristup svima ili samo localhost)

Instaliranje i promena Apache, MySQL i PHP verzija

Upravljate vašim podešavanjima na serveru

Pristup vašim logovima

Pristup i podešavanje vaših datoteka

Kreiranje pseudonima

Page 13: PHP - Almir Sinanovic

Almir Sinanović | PHP 13

Desnim klikom:

Menjate WampServer jezik u meniju

Pristupate ovoj stranici

Kako početi

Kada ste instalirali WampServer , “www” direktorijum je kreiran (obično na c:\wamp\www)

Kreirajte direktorijum unutar i PHP fajlove iz vašeg projekta smestite u njemu.

Kliknite na link "localhost" u meniju WampServer-a ili u Vašem pretraţivaču otvorite adresu

http://localhost.

Dodaj Apache, MySQL i PHP verzije

WampServer vam omogućava da instalirate skoro sve postojeće verzije Apache, PHP i MySQL-

atako da moţete tačno reprodukovati konkretno ta podešavanja vašeg servera.

Page 14: PHP - Almir Sinanovic

Almir Sinanović | PHP 14

Da biste dodali novu verziju, preuzmite je ovde i instalirajte.

Zatim kliknite na WampServer meni i aktivirajte verziju koju ţelite da koristite.

Sačekajte dok WampServer ikonica postane opet bela i nastavite sa radom.

Napomena: Sva verzije PHP-a nisu kompatibilna sa Apache verzijama. WampServer zna koje

verzije mogu da rade zajedno i reći će vam kada nije moguće da se prebacite.

PHP Sintakse

PHP kod se izvršava na serveru, a rezultat čistog HTML-se šalje pretraţivaču.

Osnovne PHP sintakse

PHP skriptovani blok uvek počinje sa <?php i zavrsava sa ?>. PHP skriptni blok moţe se

postaviti bilo gde u dokumentu.

Na serverima gde je uključena podrska za scenografiju ,moţete da pokrenete skriptni blok sa <? I

završite sa ?>.

Za maksimalnu kompatibilnost, preporučujemo da koristite standardni obrazac (<Php?) pre nego

scenografija formu.

Page 15: PHP - Almir Sinanovic

Almir Sinanović | PHP 15

<?php

?>

PHP datoteka obično sadrţi HTML oznake, kao i HTML datoteku, a neke PHP skriptovane

kodove.

Ispod, imamo primer jednostavne PHP skripte koja šalje tekst "Zdravo svete" u pretraţivaču:

<html>

<body>

<?php

echo "Zdrave svete";

?>

</body>

</html>

Svaka linija koda u PHP-u mora da se završava tačka-zarezom. Tačka-zarez je rastavljač i koristi

se razlikovati jedan set instrukcija iz drugog.

Postoje dve osnovne izjave na izlaznom tekstu sa PHP-om: echo i print. U gornjem primeru smo

koristili echo izjavu za izlazni tekst "Zdravo svete".

Napomena: fajl mora imati .php ekstenziju. Ako datoteka ima .html ekstenziju, PHP kod neće

biti izvršen.

Komentari u PHP-u

U PHP-u moţete koristiti // kako bi napisali jedanolinijski komentar ili / * i * / da bi napisali

veliki blok komentar.

<html>

<body>

<?php

//Ovo je komentar

/*

Ovo je

komentar

blok

*/

?>

Page 16: PHP - Almir Sinanovic

Almir Sinanović | PHP 16

</body>

</html>

PHP Promenljive

Promenljiva se koristi za skladištenje informacija.

Promenljive u PHP-u

Varijable se koriste za čuvanje vrednosti, kao što su tekstualne ţice, brojevi ili nizovi.

Kada je promenljiva objavljena, ona se moţe koristiti iznova i iznova u vasoj skripti.

Sve promenljive u PHP-u počinju sa $ znak simbolom.

Korektan način objavljivanja promenljive u PHP-u:

$var_name = value;

Novi PHP programeri često zaboravljaju $ znak na početku promenljive. U tom slučaju on neće

raditi.

Pokušajmo stvariti promenljivu koja sadrţi ţice, kao i promenljivu koja sadrţi broj:

<?php

$txt="Zdravo svete!";

$x=16;

?>

PHP je labavo napisan jezik

U PHP-u, promenljiva ne mora da bude proglašena pre dodavanja vrednosti na njega.

U gornjem primeru, moţete videti da ne morate da kaţete PHP-u koji tip podataka je

promenljiva.

PHP automatski konvertuje promenljivu u odgovarajući tip podataka, u zavisnosti od njene

vrednosti.

Page 17: PHP - Almir Sinanovic

Almir Sinanović | PHP 17

U snaţno otkucanom programskom jeziku, morate deklarisati (definisati) vrstu i naziv varijable

pre upotrebe.

U PHP-u, promenljive se deklarisu automaski kada ih koristite.

Pravila za imenovanje promenljivih

U PHP-u, promenljiva ne mora da bude proglašena pre dodavanja vrednosti na njega.

Ime promenljive mora početi slovom ili donjom crtom "_"

Ime promenljive moţ da sadrţi samo alfanumeričke znakove i donju crte ( az, AZ, 0-9, i

_ )

Ime promenljive ne sme sadrţati razmake. Ako je ime promenljive više od jedne reči,

treba da bude odvojena sa donjom crtom ($my_string), ili sa velikim slovima

($myString)

PHP String Promenljive

String promenljive se koriste za skladištenje i manipulaciju teksta.

String promenljive u PHP-u

String promenljive se koriste za vrednosti koje sadrţi znakove.

U ovom poglavlju ćemo pogledati najčešće funkcije i operatore koji se koriste za manipulaciju

stringova u PHP-u.

Nakon što smo kreirali string moţemo manipulisati. String moţe da se koristi direktno u funkciju

ili moţe da se skladišti u promenljive.

Ispod, PHP skripta dodeljuje tekst "Zdravo svete" na string promenljivu nazvanu $txt:

<?php

$txt="Zdravo svete";

echo $txt;

?>

Izlazni kod od ovog iznad će biti:

Page 18: PHP - Almir Sinanovic

Almir Sinanović | PHP 18

"Zdravo svete"

Sada, pokušajte da koristite neke druge funkcije i operatore za manipulaciju stringova.

Operater za nadovezivanje

Postoji samo jedan string operator u PHP-u.

Operator za povezivanje (.) sluţi da sastavite dve string vrednosti zajedno.

Za povezivanje dve promenljive stringa, koristite operator za nadovezivanje:

<?php

$txt1="Zdravo svete!";

$txt2="Kako divan dan!";

echo $txt1 . " " . $txt2;

?>

Izlazni kod od ovog iznad će biti:

Zdravo svete! Kako divan dan!

Ako pogledamo kod iznad vidite da smo koristili operater za nadovezivanje dva puta. To je zato

sto smo morali da ubacimo treci string (razmak) ,za razdvajanje dva stringa.

Strlen ( ) funkcija

Strlen () funkcija se koristi za povratak na duţinu stringa.

Hajde da pronaĎemo duţinu stringa:

<?php

echo strlen("Zdravo svete!");

?>

Izlazni kod od ovog iznad će biti:

12

Page 19: PHP - Almir Sinanovic

Almir Sinanović | PHP 19

Duţina stringa se često koristi u petlji ili drugim funkcijama, kada je vaţno znati kada se

završava string. (tj. u petlji, mi bi ţeleli da se zaustavi petlja posle poslednjeg karaktera u

stringu).

Strpos ( ) funkcija

Strpos () funkcija se koristi za traţenje znakova u stringu.

Ako se pronaĎe podudaranje, ova funkcija će vratiti poziciju na prvi meč. Ako se utvrdi da ne

odgovara, ona će se vratiti vrednost FALSE.

Hajde da vidimo da li moţemo naći string "svete" u našem stringu:

<?php

echo strpos("Zdravo svete!","svete");

?>

Izlazni kod od ovog iznad će biti:

6

Poloţaj stringa "svete" u našem stringu je pozicija 6.Razlog da je to 6 (a ne 7), je zato što je prvo

mesto u stringu je 0, a ne 1.

Kompletna PHP string referenca

Za kompletnu referencu svih niz funkcija, idite na našu celokupnu PHP string Referencu

Referenca sadrţi kratak opis i primere upotrebe za svaku funkciju!

PHP Operacije

Operacije se koriste za rad sa vrednostima.

Page 20: PHP - Almir Sinanovic

Almir Sinanović | PHP 20

PHP Operacije

Ovaj odeljak navodi različite operacije koji se koriste u PHP-u.

Aritmetičke operacije

Operacija Opis Primer Rezultat

+ Sabiranje x=2

x+2

4

- Oduzimanje x=2

5-x

3

* Mnoţenje x=4

x*5

20

/ Deljenje 15/5

5/2

3

2.5

% Modul (ostatak

podele)

5%2

10%8

10%2

1

2

0

++ uvećanje x=5

x++

x=6

-- opadanje x=5

x--

x=4

Dodeljene operacije

Operacija Primer Je isto kao

= x=y x=y

+= x+=y x=x+y

-= x-=y x=x-y

*= x*=y x=x*y

/= x/=y x=x/y

.= x.=y x=x.y

%= x%=y x=x%y

Operacije poređenja

Operacija Opis Primer

== Je jednak 5==8 dobija se netačno

!= Nije jednak 5!=8 dobija se tačno

<> Nije jednak 5<>8 dobija se tačno

> Je veći od 5>8 dobija se netačno

< Je manji od 5<8 dobija se tačno

>= Je veči ili jednak od 5>=8 dobija se netačno

<= Je manji ili jednak od 5<=8 dobija se tačno

Page 21: PHP - Almir Sinanovic

Almir Sinanović | PHP 21

Logičke operacije

Operacija Opis Primer

&& i x=6

y=3

(x < 10 && y > 1) dobija se

tačno

| | ili x=6

y=3

(x==5 || y==5) dobija se

netačno

! ne x=6

y=3

!(x==y) dobija se tačno

PHP If...Else Izjave

Uslovne izjave se koriste za obavljanje različitih akcija na osnovu različitih uslova.

Uslovne izjave

Vrlo često kada pišete k d, moţete da izvršite razne akcije za različite odluke.

Moţete da koristite uslovne izjave u kodu da se to uradi.

U PHP-u imamo sledeće uslovne izjave:

If izjava - koristi ovu izjavu da izvrši neki kod samo ako je ispunjen odreĎeni uslov

If...else izjava - koristi ovu izjavu da izvrši neki kod ukoliko je uslov istinit, a drugi kod

ako je uslov netačan

if...elseif....else izjava - koristi ovu izjavu da izabere jedan od nekoliko blokova koda koje

treba da izvrši

switch izjava - koristi ovu izjavu da izabere jednu od mnogih blokova koda koje treba da

izvrši

Page 22: PHP - Almir Sinanovic

Almir Sinanović | PHP 22

IF Izjava

Koristi ovu izjavu da izvrši neki kod samo ako je ispunjen odreĎeni uslov.

Sintaksa

if (uslov) kod treba da se izvrši ako je uslov istinit;

Sledeći primer će odštampati "Ugodan vikend!" Ako je aktuelni dan petak:

<html>

<body>

<?php

$d=date("D");

if ($d=="Pet") echo " Ugodan vikend!";

?>

</body>

</html>

Primetiti da ne postoji ..else .. u ovoj sintaksi. Kazali ste pretraţivaču da izvrši deo koda samo

ukoliko je određeni uslov tačan.

If..else Izjava

Koristi ovu izjavu da izvrši neki kod ukoliko je uslov istinit, a drugi kod ako je uslov netačan.

Sintaksa

if (uslov)

kod treba da se izvrši ako je uslov tačan;

else

kod treba da se izvrši ako je uslov netačan;

Primer

Sledeći primer će odštampati "Ugodan vikend!" ako je trenutni dan petak, inače će odštampati

"Ugodan dan!":

<html>

<body>

Page 23: PHP - Almir Sinanovic

Almir Sinanović | PHP 23

<?php

$d=date("D");

if ($d=="Pet")

echo " Ugodan vikend!";

else

echo " Ugodan dan!";

?>

</body>

</html>

Ako više od jednog reda treba da bude izvršena ako je uslov tačno / netačno, linija treba da bude

zatvorena unutar vitičastih zagrada:

<html>

<body>

<?php

$d=date("D");

if ($d=="Pet")

{

echo "Zdravo!<br />";

echo " Ugodan vikend!";

echo "Vidimo se u ponedeljak!";

}

?>

</body>

</html>

if...elseif....else Izjava

Koristi ovu izjavu da izabere jedan od nekoliko blokova koda koje treba da izvrši.

Sintaksa

if (uslov)

kod treba da se izvrši ako je uslov tačan;

elseif (uslov)

kod treba da se izvrši ako je uslov tačan;

else

kod treba da se izvrši ako je uslov netačan;

Page 24: PHP - Almir Sinanovic

Almir Sinanović | PHP 24

Primer

Sledeći primer će štampati "Ugodan vikend!" ako je trenutni dan petak, i "Ugodna nedelja!" ako

je tekući dan nedelja. U suprotnom će štampati "Ugodan dan!":

<html>

<body>

<?php

$d=date("D");

if ($d=="Pet")

echo " Ugodan vikend!";

elseif ($d=="Ned")

echo " Ugodna nedelja!";

else

echo " Ugodan dan!";

?>

</body>

</html>

PHP Promenljive Izjave

Uslovne izjave se koriste za obavljanje različitih akcija na osnovu različitih uslova.

PHP Promenljive izjave

Koristi promenljive izjave da izaberete jedan od mnogo blokova koda koji će da se izvrše.

Sintaksa

switch (n)

{

case label1:

kod će se izvršitiako je n=label1;

break;

case label2:

kod će se izvršiti ako je n=label2;

break;

Page 25: PHP - Almir Sinanovic

Almir Sinanović | PHP 25

default:

kod treba da se izvrši ako se n razlikuje od oba label1 i label2;

}

Evo kako to radi: prvo imamo jedan izraz n (najčešće varijable) koji se ocenjuje jedanput.

Vrednost izraza je onda u poreĎenju sa vrednostima za svaki slučaj u strukturi.Ako postoji

podudaranje,blok koda povezan u tom slučaju se izvršava. Koristite pauze za sprečavanje

pokretanja koda automatski u narednom slučaju.Podrazumevani iskaz se koristi kada nije

pronaĎen nijedan traţeni podatak.

Primer

<html>

<body>

<?php

switch ($x)

{

case 1:

echo "Broj 1";

break;

case 2:

echo "Broj 2";

break;

case 3:

echo "Broj 3";

break;

default:

echo "Nema brojeva izmeĎu 1 i 3";

}

?>

</body>

</html>

PHP Nizovi

U nizu se skladište višestruke vrednosti kao jedna promenljiva.

Page 26: PHP - Almir Sinanovic

Almir Sinanović | PHP 26

Šta je niz ?

Promenljiva sadrţi u sebi broj ili tekst.Problem je,promenljive će sadrţati samo jednu vrednost.

Niz je posebna promenljiva, koja moţe sadrţati višestruke vrednosti kao jednu promenljivu.

Ako imate listu stavki (listu imena automobila, na primer), čuvanje automobila u jednoj varijabli

moţe izgledati ovako:

$auto1="Saab";

$auto2="Volvo";

$auto3="BMW";

MeĎutim, šta ako ţelite da petlja kroz automobile nadje jedan odreĎeni?I šta ako nemate 3

automobila već 300?

Najbolje rešenje je da koristite niz!

Niz moţe sadrţati sve vaše vrednosne promenljive pod jednim imenom . I moţete pristupiti

vrednostima koje se odnose na ime niza.

Svaki element u nizu ima svoj sopstveni index kako bi se moglo lako njemu pristupiti.

U PHP-u ima tri vrste nizova:

Numerički niz – Niz sa numeričkim indexom.

Asocijativni niz – Niz čiji je svaki ID ključ povezan sa odreĎenom vrednošću.

Višedimenzionalni niz – Niz koji sadrţi jedan ili vise nizova.

Numerički nizovi

Numerički niz skladišti svaki elemenat niza sa numeričkim indexom.

Postoje dve metode za kreiranje numeričkog niza.

1.U sledećem primeru index se automatski dodeljuje (index počinje od 0):

$auto=array("Saab","Volvo","BMW","Toyota");

2. U sledećem primeru smo dodelili index ručno

$auto [0]="Saab";

$auto[1]="Volvo";

Page 27: PHP - Almir Sinanovic

Almir Sinanović | PHP 27

$auto[2]="BMW";

$auto[3]="Toyota";

Primer

U sledećem primeru pristupamo promenljivim vrednostima koje se odnose na niz imena i indexa:

<?php

$auto[0]="Saab";

$auto[1]="Volvo";

$auto[2]="BMW";

$auto[3]="Toyota";

echo $auto[0] . " i " . $auto[1] . " su Švedski automobili.";

?>

Izlazni kod od ovog iznad će biti:

Saab i Volvo su Švedski automobili.

Asocijativni nizovi

U asocijativnim nizovima svaki ID ključ je povezan sa vrednostima.

Kada je čuvanje podataka o odreĎenim imenovanim vrednosima u pitanju, numerički nizovi nisu

uvek najbolji način da to uradite.

Sa asocijativnim nizovima moţemo koristiti vrednosti kao ključeve,pa im moţete dodeliti i

vrednosti.

Primer 1

U ovom primeru ćemo koristiti niz da dodelimo godine različitim osobama:

$godine = array("Peter"=>32, "Quagmire"=>30, "Joe"=>34);

Primer 2

Ovaj primer je isti kao i primer 1 ,ako pokazuje drugačiji način stvaranja niza:

$godine['Peter'] = "32";

$godine['Quagmire'] = "30";

$godine['Joe'] = "34";

ID Ključevi se mogu koristiti u skripti:

Page 28: PHP - Almir Sinanovic

Almir Sinanović | PHP 28

<?php

$godine['Peter'] = "32";

$godine['Quagmire'] = "30";

$godine['Joe'] = "34";

echo "Peter ima " . $godine['Peter'] . " godine.";

?>

Izlazni kod od ovog iznad će biti:

Peter ima 32 godine.

Višedimenzionalni nizovi

U višedimenzionalnom nizu ,svaki element u glavnom nizu moţe biti niz. I svaki element u pod-

nizu moţe biti niz , i tako dalje.

Primer

U ovom primeru smo kreirali višedimenzionalni niz sa automatski dodeljenim ID ključom:

$familije = array

(

"Griffin"=>array

(

"Peter",

"Lois",

"Megan"

),

"Quagmire"=>array

(

"Glenn"

),

"Brown"=>array

(

"Cleveland",

"Loretta",

"Junior"

)

);

Niz iznad će izgledati ovako ako je napisan na izlazu:

Page 29: PHP - Almir Sinanovic

Almir Sinanović | PHP 29

Array

(

[Griffin] => Array

(

[0] => Peter

[1] => Lois

[2] => Megan

)

[Quagmire] => Array

(

[0] => Glenn

)

[Brown] => Array

(

[0] => Cleveland

[1] => Loretta

[2] => Junior

)

)

Primer 2

Pokušajmo da prikaţemo jednu vrednost iz koda iznad:

echo "Jeli" . $familije['Griffin'][2] .

" deo Griffin familije?";

Kod iznad će štampati :

Je li Megan deo Griffin familije?

Kompletan PHP niz napomena

Za kompletne napomene svih niz funkcija ,idite na naš Kompletan PHP niz napomena

Napomena sadrţi kratak opis i primere za svaku funkciju!

Page 30: PHP - Almir Sinanovic

Almir Sinanović | PHP 30

PHP Petlje – „While“ petlje

Petlje izvršavaju blok kodova odreĎen broj puta, ili dok odreĎena vrednost nije tačna.

PHP Petlje

Često dok pišete kod, ţelite da se isti blok kodova izvršava ponovo i ponovo u redu. Umesto da

koristimo nekoliko skoro istih linija u skripti, moţemo koristiti petlje da bi se izvršio ovakav

zadatak.

U PHP-u, mi imamo sledeće petlja iskaze:

while – petlja kroz blok kodova dok je specifičan uslov istinit

do...while – petlje kroz blok kodova jednom, i onda da se petlja ponavlja sve dok je

specifičan uslov istinit

for – petlje kroy blok kodova odreĎen broj puta

foreach – petlje kroz blok kodova za svaki element u nizu

„While“ petlja

„While“ petlja izvršava blok kodova dok je uslov istinit.

Sintaksa

while (uslov)

{

kod koji treba da se izvrši;

}

Primer

Primer ispod definiše petlju koja počinje sa i=1. Petlja će nastaviti da funkcioniše sve dok je i

manje ili jednako 5, i će se povećati za 1 svaki put kad petlja funkcioniše

<html>

<body>

<?php

$i=1;

while($i<=5)

{

echo "Broj je " . $i . "<br />";

$i++;

Page 31: PHP - Almir Sinanovic

Almir Sinanović | PHP 31

}

?>

</body>

</html>

Rezultat:

Broj je 1

Broj je 2

Broj je 3

Broj je 4

Broj je 5

„do...while“ izjava

„do...while“ izjava će uvek izvršiti blok kodova jednom, onda će proveriti uslov, i ponavljati

petlju dok uslov ne bude tačan.

Sintaksa

do

{

kod koji treba da se izvrši;

}

while (uslov);

Primer

Primer ispod definiše petlju koja startuje sa i=1. Onda će povećati i sa 1, i napisati neki rezultat.

Onda je uslov proveren, i petlja će nastaviti da funkcioniše sve dok je i manje ili jednako 5:

<html>

<body>

<?php

$i=1;

do

{

$i++;

echo "Broj je " . $i . "<br />";

}

while ($i<=5);

Page 32: PHP - Almir Sinanovic

Almir Sinanović | PHP 32

?>

</body>

</html>

Rezultat:

Broj je 2

Broj je 3

Broj je 4

Broj je 5

Broj je 6

PHP petlje – „For“ petlje

Petlje izvršavaju blok kodova odreĎen broj puta, ili dok je odreĎeni uslov istinit.

„For“ petlja

„For“ petlja se koristi kada znate unapred koliko puta skripta treba da funkcioniše.

Sintaksa

for (init; uslov; uvećanje)

{

kod koji treba da se izvši;

}

Parametri:

o init: Uglavnom se koristi da se podesi brojač (ali moţe biti koji treba da se izvrši jednom

na početku petlje)

o uslov: Procenjen za svako ponavljanje petlje. Ako proceni da je ISTINITO, petlja

nastavalj. Ako proceni da je LAŢNO, petlja završava.

o uvećanje: Uglavnom se koristi da se uveća brojač (ali moţe biti bilo koji kod koji treba da

se izvrši na kraju petlje)

Napomena: Svaki od gore pomenutih parametara moţe biti prazan, ili imati višestruke izraze

(odvojene zarezom)

Primer

Page 33: PHP - Almir Sinanovic

Almir Sinanović | PHP 33

Primer ispod definiše petlju koja počinje sa i=1. Petlja će nastaviti da funkcioniše sve dok je i

manje ili jednako 5. i će se povećati za 1 svaki put kad petlja funkcioniše.

<html>

<body>

<?php

for ($i=1; $i<=5; $i++)

{

echo "Broj je " . $i . "<br />";

}

?>

</body>

</html>

Rezultat:

Broj je 1

Broj je 2

Broj je 3

Broj je 4

Broj je 5

„Foreach“ petlja

„Foreach“ petlja se koristi kao petlja kroz nizove.

Sintaksa

foreach ($niz kao $vrednost)

{

kod koji treba da se izvrši;

}

Za svako ponavljanje petlje, vrednost tekućeg elementa niza je označen kao $vrednost (i

pokazivač niza je pomeren za jedan) – tako da sledećem ponavljanju petlje, vi ćete videti sledeći

vrednost niza.

Primer

Sledeći primer će demonstrirati petlju koja će štampati vrednosti datog niza:

<html>

Page 34: PHP - Almir Sinanovic

Almir Sinanović | PHP 34

<body>

<?php

$x=array("jedan","dva","tri");

foreach ($x as $value)

{

echo $value . "<br />";

}

?>

</body>

</html>

Rezultat:

jedan

dva

tri

PHP Funkcije

Prva moć PHP-a dolazi od funkcija.

U PHP-u, ima više od 700 ugraĎenih funkcija.

PHP ugrađene funkcije

Za kompletnu reference I primere ugraĎenih funkcija posetite našu stranicu sa PHP

Referencama.

PHP Funkcije

U ovom poglavlju ćemo vam pokazati kako da napravite veše sopstvene funkcije.

Da bi se sprečio pretraţivač da izvršava skriptu kada se strana puni, moţete staviti vašu skriptu u

funkciji.

Funkcija će se izvršiti po pozivu za funkciju.

Moţete pozvati funkciju sa bilo kojeg mesta u strani.

Page 35: PHP - Almir Sinanovic

Almir Sinanović | PHP 35

Kreirati PHP funkciju

Funkcija će se izvršiti po pozivu za funkciju.

Sintaksa

funkcija funkcijaIme()

{

kod koji treba da se izvrši;

}

PHP smernice funkcija:

o Dajte funkciji ime koja odraţava ono što funkcija čini

o Ime funkcije moţe početi sa slovom ili donjom crtom (ne brojom)

Primer

Prosta funcija koji piše ime kada se to traţi od nje:

<html>

<body>

<?php

function writeName()

{

echo "Almir Sinanovic";

}

echo "Moje ime je ";

writeName();

?>

</body>

</html>

Rezultat:

Moje ime je Almir Sinanovic

PHP Funkcije – dodavanje parametara

Da bi se dodala što veća funkcionalnost funkciji, moţemo dodati prametre.Parametar je isti kao

promenljiva.

Page 36: PHP - Almir Sinanovic

Almir Sinanović | PHP 36

Parametri se specificiraju posle imena funkcije, unutar zagrada.

Primer 1

Sledeći primer će ispisati različita imena, ali isto prezime:

<html>

<body>

<?php

function writeName($fname)

{

echo $fname . " Sinanovic.<br />";

}

echo "Moje ime je ";

writeName("Almir");

echo "Ime moje sestre je ";

writeName("Edina");

echo "Ime mog brata je ";

writeName("Jaman");

?>

</body>

</html>

Rezultat:

Moje ime je Almir Sinanovic.

Ime moje sestre je Edina Sinanovic.

Ime mog brata je Jaman Sinanovic.

Primer 2

Sledeća funkcija ima dva parametra:

<html>

<body>

<?php

function writeName($fname,$punctuation)

{

echo $fname . " Sinanovic" . $punctuation . "<br />";

}

echo "Moje ime je ";

Page 37: PHP - Almir Sinanovic

Almir Sinanović | PHP 37

writeName("Almir",".");

echo " Ime moje sestre je ";

writeName("Edina","!");

echo " Ime mog brata je ";

writeName("Jaman","?");

?>

</body>

</html>

Rezultat

Moje ime je Almir Sinanovic.

Ime moje sestre je Edina Sinanovic!

Ime mog brata je Jaman Sinanovic?

PHP Funkcije - Povratne vrednosti

Da bi se dozvolilo funkciji da povrati vrednost, koristit „return“ izjavu.

Primer

<html>

<body>

<?php

function add($x,$y)

{

$total=$x+$y;

return $total;

}

echo "1 + 16 = " . add(1,16);

?>

</body>

</html>

Rezultat:

1 + 16 = 17

Page 38: PHP - Almir Sinanovic

Almir Sinanović | PHP 38

PHP Obrazci i Korisnički input

PHP $_GET and $_POST promenljive se koriste da povrate informacije iz obrazaca, kao

korisničkih inputa.

Rukovođenje PHP Formama

Najvaţniju stvar koju treba primetiti kada se radi sa HTML obrazcima i PHP-om je da će svaki

element obrazca u HTML strani automatski biti dostupan na vašoj PHP skripti.

Primer

Primer ispod sadrţi HTML obrazce sa dva input polja i dugmetom „submit“:

<html>

<body>

<form action="welcome.php" method="post">

Ime: <input type="text" name="fname" />

Godine: <input type="text" name="age" />

<input type="submit" />

</form>

</body>

</html>

Kada koorisnik potpuni obrazac gore i klikne na dugme „submit“, podatak obrazca je poslat PHP

fajlu zvanom „welcome.php“:

"welcome.php" izgleda ovako:

<html>

<body>

Dobrodošao <?php echo $_POST["fname"]; ?>!<br />

Vi imate<?php echo $_POST["age"]; ?>godina.

</body>

</html>

Rezultat bi trebao biti ovakav:

Dobrodošao John!

Page 39: PHP - Almir Sinanovic

Almir Sinanović | PHP 39

Vi imate 28 godina.

Potvrđivanje obrazaca

Korisnički input treba da dube potvrĎen u pretraţivaču kad god je to moguće (od skripte

klijenta). PotvrĎivanje pretraţivača je brţe i skraćuje vreme punjenja servera.

Treba razmotriti potvrĎivnje servera ako će korisniči input biti ubačen u bazu podataka. Dobar

način da se potvrdi obrazac na serveru jeste postaviti obrazac samom sebi, umesto ići na drugu

stranu. Korisnik će onda dobiti poruku o grešci na istoj strani kao obrazcu. Ovako je lakše

pronaći grešku.

PHP $_GET Funkcija

UgraĎena $_GET funkcija se koristi da prikupi vrednosti u obrazcu sa metodom =“get“.

$_GET Funkcija

UgraĎena $_GET funkcija se koristi da prikupi vrednosti u obrazcu sa metodom =“get“.

Informacija poslata iz obrazca sa GET metodom je vidljiva svima (biće prikazana na adresnoj

liniji pretraţivača) i ima ograničenja na količinu informacija koju moţe poslati (maks. 100

karaktera).

Primer

<form action="welcome.php" method="get">

Ime: <input type="text" name="fname" />

Godine: <input type="text" name="age" />

<input type="submit" />

</form>

Kada korisnik klikne na „Submit“ dugme, URL poslat serveru izgleda ovako:

http://www.w3schools.com/welcome.php?fname=Peter&age=37

"welcome.php" fajl sad moţe koristiti $_GET funkciju da prikupi podatke obrazca (imena polja

obrazca će automatski biti ključevu u $_GET nizu):

Dobrodošao<?php echo $_GET["fname"]; ?>.<br />

Page 40: PHP - Almir Sinanovic

Almir Sinanović | PHP 40

Vi imate<?php echo $_GET["age"]; ?>godine!

Kada koristiti metod ="get"?

Kada se koristi metod =“get“ u HTML formatu, sva imena promenljivih su prikuzana u URL-u.

Napomena: Ovaj metod se ne treba koristiti kada se šalju šifre ili druge osetljive informacije!

Ipak, zato što su promenljive prikazanu u URL, moguće je označiti stranu. To moţe biti korisno

u nekim slučajevima.

Napomena: Get metod je nije pogodan za velike vrednosti promeljivih; vrednost ne sme preći

100 karaktera.

PHP $_POST Funkcija

UgraĎena $_POST funkcija se koristi da se prikupe vrednosti u obrazcu sa metodom =“post“.

$_POST Funkcija

UgraĎena $_POST funkcija se koristi da se prikupe vrednosti u obrazcu sa metodom =“post“.

Informacije poslate iz obrazca sa POST metodom su nevidljive drugima i nemaju ograničenja sto

se tiče poslate količine informacija.

Napomena: Ipak, postoji 8 Mb maksimalna veličina za POST metod, opšte (moţe se promeniti u

podešavanjima php.ini fajla: post_max_size)

Primer

<form action="welcome.php" method="post">

Name: <input type="text" name="fname" />

Age: <input type="text" name="age" />

<input type="submit" />

</form>

Kada korisnik klikne „Submit“ dugme, URL će izgledati ovako:

http://www.w3schools.com/welcome.php

Page 41: PHP - Almir Sinanovic

Almir Sinanović | PHP 41

„welcome.php“ fajl moţe koristiti $_POST funkciju da prikupi podatke obrazca (imena polja

obrazca će automatski biti ključevi u $_POST nizu):

Dobrodošao<?php echo $_POST["fname"]; ?>!<br />

Vi imate<?php echo $_POST["age"]; ?>godine.

Kada koristiti metod="post"?

Informacije poslate iz obrazca sa POST metodom su nevidljive drugima i nemaju ograničenja što

se tiče količine poslatih informacija.

Ipak, zato što promenljive nisu prikazane u URL-u, nije moguće označiti stranu.

PHP $_REQUEST Funkcija

PHP ugraĎena $_REQUEST funkcija sadrţi i $_GET, $_POST, i $_COOKIE.

$_REQUEST funkcija moţe biti korišćena da se prikupe podaci iz obrazca poslati i sa GET i sa

POST metodom.

Primer

Dobrodošao<?php echo $_REQUEST["fname"]; ?>!<br />

Vi imate<?php echo $_REQUEST["age"]; ?>godina.

PHP Date() Funkcija

PHP date() funkcija se koristi za podešavanje vremena i/ili datuma.

PHP Date() Funkcija

PHP date() funkcija sluţi za pretvaranja vremenskog ţiga(timestamp) u PHP-u logičniji format

datuma i vremena.

Vremenski ţig je je niz karaktera, koje označava datum i/ili vreme kada se odreĎeni dogaĎaj

odigrao.

Sintaksa

date(format,timestamp)

Page 42: PHP - Almir Sinanovic

Almir Sinanović | PHP 42

Parametar Opis

format Neophodan. Navodi format vremenskog ţiga

timestamp Opciono. Navodi vremenski ţig. Obično uz njega

ide trenutni datum i vreme

PHP Date() - Podešavanje datuma

Format parametar u date() funkciji je neophodan i precizira kako da podesimo datum/vreme.

Evo nekih karaktera koji se mogu koristiti:

d - Predstavlja dan u mesecu (01 do 31)

m - Predstavlja mesec (01 do 12)

Y - Predstavlja godinu (četvorocifreno)

Listu svih karaktera koji se mogu koristiti u parametru format , moţemo naći ovde PHP Date

reference.

Drugi karakteri, kao npr: "/", ".", ili "-" se mogu ubaciti izmeĎu brojeva za dodatno oblikovanje

datuma:

<?php

echo date("Y/m/d") . "<br />";

echo date("Y.m.d") . "<br />";

echo date("Y-m-d")

?>

Izlaz od gorepomenutog koda bi mogao da bude ovakav:

2009/05/11

2009.05.11

2009-05-11

PHP Date() - Dodavanje vremenskog žiga

Opcioni timestamp parametar u date() funkciji precizira vremenski ţig. Ako sami ne definišemo

vremenski ţig, koristiće se trenutni datum i vreme.

mktime() funkcija izbacuje vremenski ţig u Unix formatu.

Unix vremenski ţig je broj sekundi počev od Unix Epohe (1.1.1970 00:00:00 po Griniču) do

preciziranog vremena.

Page 43: PHP - Almir Sinanovic

Almir Sinanović | PHP 43

Sintaksa mktime()

mktime(sat,minut,sekunda,mesec,dan,godina,je_ravnodnevnica)

Da bi prešli na sutrašnji dan jednostavno dodamo jedinicu u argumentu za dan unutar mktime()

funkcije:

<?php

$sutra = mktime(0,0,0,date("m"),date("d")+1,date("Y"));

echo "Sutra je ".date("Y/m/d", $sutra);

?>

Izlaz iz gorepomenutog koda bi mogao da izgleda ovako:

Sutra je 2009/05/12

Potpuna referenca za PHP Date

Za potpunu referencu svih date funkcija, idite na kompletnu PHP Date Referencu.

Ova referenca sadrţi kratke opise i primere za svaku funkciju!

PHP Include File

Include u sporednom serveru (SSI)

Pomoću include() ili require () funkcije moţemo da ubacimo sadrţaj iz jedne PHP datoteke u

drugu pre nego što je server pokrene.

Ove dve funkcije su skoro potpuno identične.Razlikuju se samo po načinu kako se ophode prema

greškama:

include() generiše upozorenje,ali skripta će nastaviti sa izvršavanjem

require() generiše fatalnu grešku, i tad će skripta obustaviti izvršsavanje

Ove dve funkcije se koriste za stvaranje funkcija, zaglavlja, podnoţja, ili elemenata koji će se

koristiti na nekoliko stranica.

Includes u sporednom server nam uštedi puno posla. To znači da moţemo kreirati jednu

standardnu datoteku sa zaglavljem, podnoţjem ili menijem i koristiti je na svim našim

stranicama. Kada treba da aţuriramo fajl sa zaglavljem, moţemo da aţuriramo samo include

Page 44: PHP - Almir Sinanovic

Almir Sinanović | PHP 44

datoteku, ili kada dodamo novu stranu našoj web stranici, moţemo jednostavno samo da

promenimo datoteku sa menijem (umesto da aţuriramo sve linkove na svim našim web

stranicama).

PHP include() Funkcija

include() funkcija preuzima sav sadrţaj iz date datoteke i uključuje ga u trenutnu datoteku koju

obraĎujemo.

Ako doĎe do greške, include() funkcija generiše generiše upozorenje,ali će skripta nastaviti sa

izvršavanjem.

Primer 1

Predpostavimo da imamo standardnu datoteku sa zaglavljem, nazvanu “header.php”.Da bi

uključili pomenuti fajl sa datotekom u stranu, koristimo include() funkciju:

<html>

<body>

<?php include("header.php"); ?>

<h1>Dobrodošli na početnu stranu!</h1>

<p>Neki tekst.</p>

</body>

</html>

Primer 2

Predpostavimo da imamo standardnu datoteku sa menijem, nazvanu “menu.php”, koju ţelimo da

koristimo na svim našim stranama:

<a href="/default.php">Početna</a>

<a href="/tutorials.php">Uputstvo</a>

<a href="/references.php">Reference</a>

<a href="/examples.php">Primeri</a>

<a href="/about.php">O nama</a>

<a href="/contact.php">Kontaktirajte nas</a>

Ţelimo da sve strane na web stranici imaju uključen ovu datoteku sa menijem.Evo kako to

moţemo postići:

<html>

<body>

Page 45: PHP - Almir Sinanovic

Almir Sinanović | PHP 45

<div class="leftmenu">

<?php include("menu.php"); ?>

</div>

<h1>Dobrodošli na početnu stranu.</h1>

<p>Neki tekst.</p>

</body>

</html>

Ako pogledamo izvorni kod od gore-navedene stranice (u browseru), izgkedaće ovako:

<html>

<body>

<div class="leftmenu">

<a href="/default.php">Početna strana</a>

<a href="/tutorials.php">Uputstvo</a>

<a href="/references.php">Reference</a>

<a href="/examples.php">Primeri</a>

<a href="/about.php">O nama</a>

<a href="/contact.php">Kontaktirajte nas</a>

</div>

<h1>Dobrodošli na početnu stranu!</h1>

<p>Neki tekst.</p>

</body>

</html>

PHP require() Funkcija

require() funkcija je identična sa include() funkcijom, osim što se drugačije ophodi prema

greškama.

Ako doĎe do greške, include() funkcija generiše upozorenje, ali skripta će nastaviti sa

izvršavanjem. Require() generiše fatalnu grešku, i obustaviće se izvršavanje skripte.

Primer greške kod include() funkcije

<html>

<body>

<?php

Page 46: PHP - Almir Sinanovic

Almir Sinanović | PHP 46

include("wrongFile.php");

echo "Zdravo svete!";

?>

</body>

</html>

Tekst greške:

Warning: include(wrongFile.php) [function.include]:

failed to open stream:

No such file or directory in C:\home\website\test.php on line 5

Warning: include() [function.include]:

Failed opening 'wrongFile.php' for inclusion

(include_path='.;C:\php5\pear')

in C:\home\website\test.php on line 5

Zdravo svete!

Primećujemo da se pokreće echo iskaz! Ovo se dešava zato što upozorenje ne obustavlja

izvršavanje skripte.

Primer greške kod require() funkcije

Sada ćemo isti primer pokrenuti sa require() funkcijom.

<html>

<body>

<?php

require("wrongFile.php");

echo "Zdravo svete!";

?>

</body>

</html>

Tekst greške:

Warning: require(wrongFile.php) [function.require]:

failed to open stream:

No such file or directory in C:\home\website\test.php on line 5

Fatal error: require() [function.require]:

Failed opening required 'wrongFile.php'

Page 47: PHP - Almir Sinanovic

Almir Sinanović | PHP 47

(include_path='.;C:\php5\pear')

in C:\home\website\test.php on line 5

Echo iskaz nije izvšren , jer se nakon fatalne greške obustavilo izvršavanje skripte.

Preporučljivo je da se uvek koristi require() funkcija umesto include(), jer nije poţeljno da

skripte nastavljaju sa izvršavanjem posle greške.

PHP upravljanje datotekama

„fopen()“ funkcija se koristi da otvori fajlove u PHP-u.

Otvaranje datoteka

„fopen()“ funkcija se koristi da otvori fajlove u PHP-u.

Prvi parametar ove funkcije sadrţi ime datoteke koja treba da se otvori i drugi parametar koji

odreĎuje na koji način datoteka treba da se otvori:

<html>

<body>

<?php

$file=fopen("welcome.txt","r");

?>

</body>

</html>

Datoteka se moţe otvoriti na sledeće načine:

Način Opis

r Samo za čitanje. Počinje na početku datoteke.

r+ Čitanje/Pisanje. Počinje na početku datoteke.

w Samo za pisanje. Otvara i čisti sadrţaj datoteke; ili

kreira novu datoteku ako ona ne postoji.

w+ Čitanje/Pisanje. Otvara i čisti sadrţaj datoteke; ili

kreira novu datoteku ako ona ne postoji.

a Dodavanje. Otvara i piše na kraju datoteke ili

kreira novu datoteku ako ona ne postoji.

a+ Čitanje/Dodavanje. Čuva sadrţaj datoteke tako što

piše na kraju datoteke.

x Samo za pisanje. Kreira novu datoteku. Povraća

Page 48: PHP - Almir Sinanovic

Almir Sinanović | PHP 48

NETAČNO i grešku ako datoteka već postoji.

x+ Čitanje/Pisanje. Kreira novu datoteku. Povraća

NETAČNO i grešku ako datoteka već postoji.

Napomena: Ako fopen() funkcija ne moţe da otvori odreĎenu datoteku, ona vraća vrednost 0

(netačno)

Primer

Sledeći primer generiše poruku ako fopen() funkcija ne moţe da otvori odreĎenu datoteku:

<html>

<body>

<?php

$file=fopen("welcome.txt","r") or exit("Ne moţe da otvori datoteku!");

?>

</body>

</html>

Zatvaranje datoteke

„fclose()“ funkcija se koristi da zatvori otvorenu datoteku:

<?php

$file = fopen("test.txt","r");

//neki kod koji treba da se izvrši

fclose($file);

?>

Proveriti End-of-file (kraj datoteke)

„feof()“ funkcija proverava da lije dostignut „kraj-datoteke“ (EOF)

“feof()“ funkcija je korisna za petlja kroz podatkke nepoznate duţine.

Napomena: Ne moţete čitati iz datoteke otvorene u w, a i x načinu!

if (feof($file)) echo "Kraj datoteke";

Page 49: PHP - Almir Sinanovic

Almir Sinanović | PHP 49

Čitanje datoteke Liniju po Liniju (Line by Line)

„fgets()“ funkcija se koristi da pročita jednu liniju iz datoteke.

Napomena: Posle poziva ove datoteke pokazivač datoteke se premestion na narednu liniju.

Primer

Primer ispod čita datoteku liniju po liniju, dok kraj datoteke nije dostignut:

<?php

$file = fopen("welcome.txt", "r") or exit("Unable to open file!");

//Rezultat linija reda dok kraj nije dostignut

while(!feof($file))

{

echo fgets($file). "<br />";

}

fclose($file);

?>

Čitanje datoteke Karakter po Karakter

„fgetc()“ funkcija se koristi da čita jedan karakter iz datoteke.

Napomena: Posle poziva ove funkcije pokazivač datoteke se premešta na sledeći karakter.

Primer

Primer ispod čita karakter po karakter, dok kraj datoteke nije dostignut:

<?php

$file=fopen("welcome.txt","r") or exit("Unable to open file!");

while (!feof($file))

{

echo fgetc($file);

}

fclose($file);

?>

Page 50: PHP - Almir Sinanovic

Almir Sinanović | PHP 50

PHP Učitavanje datoteka

Sa PHP-om je moguće da se učitavaju datoteke na server

Kreirati obrazac Učitavane-Datoteke

Dozvoliti korisnicima da učitaju datoteku u obrazcu moţe biti veoma korisno.

Pogledajte naredni HTML obrazac za učitavanje datoteka:

<html>

<body>

<form action="upload_file.php" method="post"

enctype="multipart/form-data">

<label for="file">Filename:</label>

<input type="file" name="file" id="file" />

<br />

<input type="submit" name="submit" value="Submit" />

</form>

</body>

</html>

Primetite naredno u vezi HTML obrazca gore:

Atribut <obrazca> odreĎuje koji tip sadrţaja koristiti kada se predaje obrazac.

„multipart/form-data“ se koristi kada obrazac traţi binarni podatak, kao sadrţaj datoteke,

da se učita.

Tip =“file“ atribut od <input> odreĎuje da input treba da bude obraĎen kao datoteka. Na

primer, kada se gleda u pretraţivaču, imaţe dugme „pretraţiti“ pored input polja.

Napomena: Dozvolit korisnicima da učitavaju datoteku je veliki rizik. Samo sigurni korisnici

treba da učitavaju datoteke.

Kreirati Učitavajuću skriptu

"upload_file.php" datoteka sadrţi kod za učitavanje datoteke:

<?php

if ($_FILES["file"]["error"] > 0)

{

echo "Error: " . $_FILES["file"]["error"] . "<br />";

Page 51: PHP - Almir Sinanovic

Almir Sinanović | PHP 51

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "<br />";

echo "Type: " . $_FILES["file"]["type"] . "<br />";

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

echo "Stored in: " . $_FILES["file"]["tmp_name"];

}

?>

Koristeći globalni PHP $_FILES niz moţete učitati datoteku sa klijent kompjutera na server.

Priv parametar je ime obrazca inputa i drugi indeks moţe da bude ili „ime“, „tip“, „veličina“,

„privremeno_ime“ ili „greška“. Kao ovo:

$_FILES["file"]["name"] – ime učitane datoteke

$_FILES["file"]["type"] – tip učitane datoteke

$_FILES["file"]["size"] – veličina u bajtovima učitane datoteke

$_FILES["file"]["tmp_name"] – ime privremen kopije datoteke sačuvane na serveru

$_FILES["file"]["error"] – kod greške vezane za učitanu datoteku

Ovo je veoma jednostavan način za učitavanje dadoteka. Zbog bezbedonosnih razloga trebate

dodati ograničenja vezana za vrsta datoteke koja se moţe učitati.

Ograničenja na Učitavanje

U skripti dodajemo neka ograničenja vezana za učitavanje datoteke. Korisnici mogu samo učitati

.gif ili .jpg datoteke, i veličina datoteke mora biti ispod 20 kb:

<?php

if ((($_FILES["file"]["type"] == "image/gif")

|| ($_FILES["file"]["type"] == "image/jpeg")

|| ($_FILES["file"]["type"] == "image/pjpeg"))

&& ($_FILES["file"]["size"] < 20000))

{

if ($_FILES["file"]["error"] > 0)

{

echo "Error: " . $_FILES["file"]["error"] . "<br />";

}

else

{

echo "Upload: " . $_FILES["file"]["name"] . "<br />";

echo "Type: " . $_FILES["file"]["type"] . "<br />";

echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

echo "Stored in: " . $_FILES["file"]["tmp_name"];

Page 52: PHP - Almir Sinanovic

Almir Sinanović | PHP 52

}

}

else

{

echo "Invalid file";

}

?>

Napomena: Da bi Internet Explorer to prepoznao jpg datoteke moraju biti pjpeg, a za FireFox

mora bit jpeg.

Čuvanje učitanih datoteka

Primer poviše kreira privremenu kopiju učitane datoteke na PHP privremenom folderu na

serveru.

Privremene kopije datoteka nestaju kada se skripta završi. Da bi sačuvali učitanu datoteku

moramo da je kopiramo na drugoj lokaciji:

<?php

if ((($_FILES["file"]["type"] == "slika/gif")

|| ($_FILES["file"]["type"] == "slika/jpeg")

|| ($_FILES["file"]["type"] == "slika/pjpeg"))

&& ($_FILES["file"]["size"] < 20000))

{

if ($_FILES["file"]["error"] > 0)

{

echo "Povratni Kod: " . $_FILES["datoteka"]["greška"] . "<br />";

}

else

{

echo "Učitavanje: " . $_FILES["file"]["name"] . "<br />";

echo "Tip: " . $_FILES["file"]["type"] . "<br />";

echo "Veličina: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";

echo "Privremema datoteka: " . $_FILES["file"]["tmp_name"] . "<br />";

if (datoteka_postoji("upload/" . $_FILES["file"]["name"]))

{

echo $_FILES["file"]["name"] . " već postoji. ";

}

else

{

pomeriti_učitanu_datoteku($_FILES["file"]["privremeno_ime"],

"učitati/" . $_FILES["datoteka"]["ime"]);

echo "Sačuvano ime: " . "upload/" . $_FILES["datoteka"]["ime"];

Page 53: PHP - Almir Sinanovic

Almir Sinanović | PHP 53

}

}

}

else

{

echo "Netačna datoteka";

}

?>

Skripta gore proverava da li datoteka već postoji, ako ne postoji, ona kopira datoteku u odreĎeni

folder.

Napomena: Primer čuva datoteku u novi folder zvani „učitavanje“

PHP Kolačići

Kolačić se često koristi da identifikuje korisnika.

Šta je kolačić?

Kolačić se često koristi da identifikuje korisnika. Kolačić je mala datoteka koju server ubacuje

na kompjuter korisnika. Svaki puta kada isti kompjuter traţi istu stranu u pretraţivaču, on će

poslati takoĎe i kolačić. Sa PHP-om, moţeš kreirati i povratiti vrednosti kolačića.

Kako napraviti Kolačić?

Setcookie() funkcija se koristi da bi se postavio kolačić.

Napomena: setcookie() funkcija se mora pojaviti PRE <html> oznake.

Sintaksa

setcookie(ime, vrednost, kad ističe, put, domejn);

Primer 1

U primeru ispod, mi ćemo napraviti kolačić zvani „korisnik“ i dodati mu vrednost „Almir

Sinanovic“. TakoĎe ćemo specificirati da kolčić istekne posle jednog sata:

<?php

setcookie("korisnik", "Almir Sinanović", vreme()+3600);

?>

Page 54: PHP - Almir Sinanovic

Almir Sinanović | PHP 54

<html>

.....

Napomena: Vrednost kolačića je automatski URL kodiran kad se pošalje kolačić, i automatski

dekodiran kada se prima kolačić (ako hoćete da sprečite dekodiranje kada se prima kolačić

koristite setrawcookie() umesto setcookie).

Primer 2

Moţete takoĎe postavit vreme isteka kolačića na drugi način. Moţe biti lakše nego kad se koriste

sekunde.

<?php

$ističe=vreme()+60*60*24*30;

setcookie("korisnik", "Almir Sinanović", $ističe);

?>

<html>

.....

U primeru gore, vreme isteka je podešeno u mesecu (60 sec * 60 min * 24 sata * 30 dana).

Kako povratiti vrednost Kolačića?

PHP $_COOKIE promenljiva se koristi da bi se povratila vrednost kolačića.

U primeru ispod, povratićemo vrednost kolačića imenovanog „korisnik“ i to prikazati na strani.

<?php

// Ištampati kolačić

echo $_COOKIE["korisnik"];

// Način da se vide svi kolačići

ištampati_r($_COOKIE);

?>

U narednom primeru koristićemo isset() funkciju da bi saznali da li je kolačić postavljen:

<html>

<body>

<?php

if (isset($_COOKIE["korisnik"]))

echo "Dobrodošli " . $_COOKIE["korisnik"] . "!<br />";

Page 55: PHP - Almir Sinanovic

Almir Sinanović | PHP 55

else

echo "Dobrodošao gost!<br />";

?>

</body>

</html>

Kako izbrisati Kolačić?

Kada se kolačić briše treba biti siguran da je datum isteka u prošlosti.

Primer brisanja:

<?php

// postaviti datum isteka pre sat vremena

setcookie("korisnik", "", vreme()-3600);

?>

Šta ako pretraživač ne podržava kolačiće?

Ako vaša aplikacija ima posla sa pretraţivačem koji ne podrţava kolačiće, moraćete da koristite

druge načine da bi se prebacile informacije sa jedne na drugu stranu u vašoj aplikaciji. Jedan

način je da se podaci prebacuju kroz obrazce (obrazci i korisnički input sa opisani ranije u ovom

radu).

Obrazac ispod predaje korisnički input na „welcome.php“ kada korisnik kliken ne „Submit“

dugme:

<html>

<body>

<akcija obrazca="dobrodošao.php" način="post">

Ime: <tip inputa="text" ime="ime" />

Godine: <input type="text" ime="godine" />

<tip inputa="submit" />

</form>

</body>

</html>

Povratiti vrednost u „dobrodošao.php“ na sledeći način:

Page 56: PHP - Almir Sinanovic

Almir Sinanović | PHP 56

<html>

<body>

Dobrodošao <?php echo $_POST["name"]; ?>.<br />

Ti si <?php echo $_POST["godine"]; ?> godina star.

</body>

</html>

PHP Sesije

PHP sesija promenljive se koriste da bi se sačuvale informacije o, ili promenila podešavanja za

sesiju korisnika. Promenljive sesije sadrţe informacije o jednom korisniku, i dostupne su na

svakoj strani u jednoj aplikaciji.

PHP Sesije promenljiva

Kada radite sa nekom aplikacijom, vi je otvorite, izvršite neke promen i onda je zatvorite. To je

jedna vrsta Sesije. Kompjuter zna ko ste vi. On zna kada startujete aplikaciju i kada je zatvarate.

Ali na internetu postoji jedan problem: web server ne zna ko ste vi i šta radite zato što HTTP

adresa ne sadrţi stanje.

PHP sesije rešavaju problem tako što dozvoljavaju vama da skladištite korisničke informacije za

kasniju upotrebu (korisničko ime, kupljene stvari itd.). Ipak, informacije o sesiji su privremene i

biće izbrisane kada korisnik napusti sajt. Ako vam traba negoriničeno trajanje podataka. Moţda

će te ţeleti da sačuvate podatke u bazi podataka.

Sesije rade tako što se stvara jedinstven ID (UID) za svakog posetioca i čuvaju promenljive

bazirane na UID, UID je ili sačuvan u kolačiću ili je propagiran u URL-u.

Startovanje PHP Sesije

Pre nego što meţete sačuvati korisničke informacije u PHP sesiji, morate prvo startovati sesiju.

Napomena: „session_start()“ funkcija mora se pojaviti PRE <html> taga:

<?php session_start(); ?>

<html>

<body>

</body>

Page 57: PHP - Almir Sinanovic

Almir Sinanović | PHP 57

</html>

Kod gore će registrovati korisničku sesiju sa serverom, dozvoljavajući vam da startujete sa

čuvanjem korisničkih informacijama, i dodati UID za tu korisničku sesiju.

Čuvanje Sesije promenljive

Pravilan način da čuvaš i povratiš sesije promenljive jeste da se koristi PHP $_SESSION

promenljiva:

<?php

sesija_početak();

// čuvati sesija podatke

$_SESSION['views']=1;

?>

<html>

<body>

<?php

//povratiti sesija podatke

echo "Pageviews=". $_SESSION['views'];

?>

</body>

</html>

Rezultat:

Pregled strana=1

U primeru ispod, mi kreiramo jednostavan brojac pregleda strana. „isset() funkcija proverava da

li je „pregledi“ promenljiva već poslata. Ako je „pregledi“ već poslato, moţemo povećati naš

brojač. Ako „pregledi“ ne postoji, mi kreiramo „pregledi“ promenljivu i postavimo je da bude 1.

<?php

sesija_početak();

if(isset($_SESSION['pregledi']))

$_SESSION['views']=$_SESSION['pregledi']+1;

else

$_SESSION['views']=1;

echo "pregledi=". $_SESSION['pregledi'];

?>

Page 58: PHP - Almir Sinanovic

Almir Sinanović | PHP 58

Uništavanje Sesije

Ako ţelite da izbrišete neke podatke iz sesije, moţete koristiti unset() ili session_destroy()

funkciju.

„unset() funkcija se koristi da oslobodi odreĎenu promenljivu sesije:

<?php

unset($_SESSION['pregledi']);

?>

TakoĎe moţete kompletno uništiti sesiju zvanjem funkcije „session_destroj()“

<?php

session_destroy();

?>

Napomena: „session_destroy()“ će resetovati vašu sesiju i vi ćete izgubiti svaki sačuvani

podatak o sesiji.

PHP Slanje e-mail-ova

PHP vam pruţa mogućnost da šaljete e-mail-ove direktno sa skripte.

PHP mail() funkcija

PHP mail() funkcija se koristi da se šalju mail-ovi iz skripte.

Sintaksa

e-mail(ka,tema,poruka,poglavlje,parametri)

Parametar Opis

ka Obavezno. OdreĎuje ko će primiti e-mail.

tema Obavezno. OdreĎuje temu e-mail-a. Napomena:

Ovaj parametar ne moţe sadrţati nikakve karaktere

nove linije.

Page 59: PHP - Almir Sinanovic

Almir Sinanović | PHP 59

Poruka Obavezno. To je poruka koja se šalje. Svaki red

treba da bude odvojen sa LF (\n). Redove ne treba

da prelaze 70 karaktera.

poglavlje Opciono. OdreĎuje dodatno poglavlje, kao što je:

Od, Cc i Bcc. Dodatna poglavlja treba da budu

odvojena sa CRLF (\r\n)

parametri Opciono. OdreĎuje dodatni parametar programu

koji šalje e-mail.

Optional. Specifies an additional parameter to the

sendmail program

Napomena: Da bi mail funkcija bila dostupna. PHP zahteva instaliran i funkcionalan e-mail

sistem. Program koji treba da se koristi je definisan i podešavanjima konfiguracije u php.ini

datoteci.

PHP Jednostavni E-Mail

Najednostavniji način da se šalje e-mail sa PHP-om jeste da se šalje tekstualni e-mail.

U primeru ispod prvo odredimo promenljive ($ka, $tema, $poruka, $od, $poglavlja), onda

koristimo promenljive u mail() funkciji da bi se slao e-mail:

<?php

$ka = "[email protected]";

$tema = "Test mail";

$poruka = "Zdravo! Ovo je jednostavna e-mail poruka.";

$od = "[email protected]";

$poglavlja = "Od: $od";

mail($ka,$tema,$poruka,$poglavlja);

echo "Mail Poslat.";

?>

PHP Mail Od

Sa PHP-om, moţete napraviti povratnu informaciju-obrazac na vašem sajtu. Primer ispod šalje

tekst poruku nekoj odreĎenoj e-mail adresu:

<html>

<body>

<?php

if (isset($_REQUEST['email']))

//if "email" is filled out, send email

{

//send email

Page 60: PHP - Almir Sinanovic

Almir Sinanović | PHP 60

$email = $_REQUEST['email'] ;

$subject = $_REQUEST['subject'] ;

$message = $_REQUEST['message'] ;

mail( "[email protected]", "Subject: $subject",

$message, "From: $email" );

echo "Thank you for using our mail form";

}

else

//if "email" is not filled out, display the form

{

echo "<form method='post' action='mailform.php'>

Email: <input name='email' type='text' /><br />

Tema: <input name='subject' type='text' /><br />

Poruka:<br />

<textarea name='message' rows='15' cols='40'>

</textarea><br />

<input type='submit' />

</form>";

}

?>

</body>

</html>

Ovo je kako primer gore radi:

Prvo, proverava da li je input e-mail-a popunjen

Ako nije (kao kad je strana prvo posećena); rezultat HTML obrazca

Ako jeste (posle ispunjavanja obrazca); poslati e-mail iz obrazca

Kada se pritisne „submit“ posle potpunjavanja obrazca, strana se ponovo puni, proverava

da je input e-mail-a postavljen i šalje e-mail

Napomena: Ovo je najednostavniji način da se šalje e-mail, ali nije tako siguran. U sledećem

poglavlju ovog vodiča moţete pročitati više o ranjivosti e-mail skripte i kako da se potvrĎivanje

unosa korisnika bude na što sigurniji način.

PHP Mail Reference

Za više informacija o PHP mail() funkciji,posetite našu stranicu PHP Mail Reference.

PHP Sigurni E-mail-ovi

Page 61: PHP - Almir Sinanovic

Almir Sinanović | PHP 61

Postoji slabost u PHP e-mail skripti prethodno navedenoj.

PHP E-mail Inekcije

Prvo, pogledati PHP kod u prethodnom poglavlju:

<html>

<body>

<?php

if (isset($_REQUEST['email']))

//if "email" is filled out, send email

{

//send email

$email = $_REQUEST['email'] ;

$subject = $_REQUEST['subject'] ;

$message = $_REQUEST['message'] ;

mail("[email protected]", "Subject: $subject",

$message, "From: $email" );

echo "Thank you for using our mail form";

}

else

//if "email" is not filled out, display the form

{

echo "<form method='post' action='mailform.php'>

Email: <input name='email' type='text' /><br />

Subject: <input name='subject' type='text' /><br />

Message:<br />

<textarea name='message' rows='15' cols='40'>

</textarea><br />

<input type='submit' />

</form>";

}

?>

</body>

</html>

Problem sa kodom gore jeste da neautorizovani korisnik moţe ubaciti podatke u mail poglavlja

preko input obrazca.

Šta se dešava ako korisnik doda naredni tekst u e-mail input poljima u obrazcu?

[email protected]%0ACc:[email protected]

%0ABcc:[email protected],[email protected],

Page 62: PHP - Almir Sinanovic

Almir Sinanović | PHP 62

[email protected],[email protected]

%0ABTo:[email protected]

mail() funkcija stavlja teks gore u e-amil poglavlja kao što je uobičajno, i sad poglavlja imaju

dodatna Cc; Bcc; i Ka: polja. Kada korisnik klikne na dugme „submit“, e-mail će se poslati na

sve adrese gore.

PHP Zaustavljanje E-mail Inekcija

Najbolji način da se zaustave e-mail inekcije jeste da se proveri input

Kod ispod je isti kao u prethodnom poglavlju, ali smo sada dodali input proverator koji

proverava e-mail polja u obrazcu:

<html>

<body>

<?php

function spamcheck($field)

{

//filter_var() sanitizes the e-mail

//address using FILTER_SANITIZE_EMAIL

$field=filter_var($field, FILTER_SANITIZE_EMAIL);

//filter_var() validates the e-mail

//address using FILTER_VALIDATE_EMAIL

if(filter_var($field, FILTER_VALIDATE_EMAIL))

{

return TRUE;

}

else

{

return FALSE;

}

}

if (isset($_REQUEST['email']))

{//if "email" is filled out, proceed

//check if the email address is invalid

$mailcheck = spamcheck($_REQUEST['email']);

if ($mailcheck==FALSE)

{

echo "Invalid input";

}

else

Page 63: PHP - Almir Sinanovic

Almir Sinanović | PHP 63

{//send email

$email = $_REQUEST['email'] ;

$subject = $_REQUEST['subject'] ;

$message = $_REQUEST['message'] ;

mail("[email protected]", "Subject: $subject",

$message, "From: $email" );

echo "Thank you for using our mail form";

}

}

else

{//if "email" is not filled out, display the form

echo "<form method='post' action='mailform.php'>

Email: <input name='email' type='text' /><br />

Subject: <input name='subject' type='text' /><br />

Message:<br />

<textarea name='message' rows='15' cols='40'>

</textarea><br />

<input type='submit' />

</form>";

}

?>

</body>

</html>

U kodu gore mi koristimo PHP filter da bi proverili input:

FILTER_SANITIZE_EMAIL filter otklanja ilegalne e-mail karaktere iz niza

FILTER_VALIDATE_EMAIL filter proverava vrednost kao e-mail adresu

PHP Rukovanje Greškama

Predefinisni metod manipulacije izuzecima u php je prilišno jednostavan. Jedna greška sa

imenom fajla, linija brojeva i poruka je poslata pretraţivaču na obradu.

PHP Rukovanje Greškama

Kada kreiramo skripte i web aplikacije, manipulacija greškama je vaţan deo . Ako kodu fali deo

za proveru greške, vaš program će izgledati veoma neprofesionalno i imaće mogućnosti ka

rušenju bezbednosti same aplikacije.

Page 64: PHP - Almir Sinanovic

Almir Sinanović | PHP 64

Ovaj tutorijal sadrţi neke metode za manipulaciju greškama u PHP-u.

Pokazat ćemo vam različite metode:

jednostavnu "die()" izjavu

PrilagoĎene greške i greške okidača

Greška u izveštavanja

Osnovna manipulacija greškama: Koristeći die() funkciju

Prvi primer pokazuje jednostavan skript koji otvara tekstualne datoteke:

<?php

$file=fopen("welcome.txt","r");

?>

Ako fajl ne postoji moţete dobiti ovakvu grešku:

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:

No such file or directory in C:\webfolder\test.php on line 2

Da bi ste izbegli greške testirajte pristupnost fajlu pre nego što pokrenete:

<?php

if(!file_exists("welcome.txt"))

{

die("File not found");

}

else

{

$file=fopen("welcome.txt","r");

}

?>

Sada, ako datoteka ne postoji, dobijate grešku kao što je ova:

File not found

Kod iznad je mnogo efikasnija nego raniji kod, jer se koristi jednostavan mehanizam za

rukovanje grešaka i zaustavlja skriptu nakon greške.

MeĎutim, jednostavno zaustavljanje skripte nije uvek ispravan način. Hajde da pogledamo

alternativu PHP funkcije za rukovanje grešaka.

Page 65: PHP - Almir Sinanovic

Almir Sinanović | PHP 65

Kreiranje prilagođenog rukovanja greškama

Kreiranje prilagoĎenog rukovanja greškama je prilično jednostavno. Jednostavno napravite

posebnu funkciju koja se moţe pozvati kada doĎe do greške u PHP-u.

Ova funkcija mora biti u stanju da obradi najmanje dva parametra (nivo greške i poruke o

grešci), ali moţe da prihvati do pet parametara (opciono: datoteka, linija-broj, i greška u

kontekstu):

Sintaksa

error_function(error_level,error_message,

error_file,error_line,error_context)

Parametar Opis

error_level Potrebno. Navodi izveštaj o grešci nivou za

korisnički definisane greške. Mora biti vrednost

broja. Pogledajte tabelu ispod nivoa za moguće

greške izveštaj

error_message Potrebno. Navodi o grešci za korisnički definisane

greške

error_file Opcionalno. Navodi datoteke u kojoj je došlo do

greške

error_line Opcionalno. OdreĎuje broj reda u kome je došlo do

greške

error_context Opcionalno. Navodi niz koji sadrţi sve

promenljive, i njihove vrednosti, u upotrebi kada je

došlo do greške

Nivo prijavljivanja grešaka

Ovi nivoi prijavljivanja grešaka su različite vrste grešaka korisnički-definisanih rukovanih

grešaka i mogu se koristi za:

Vrednost Konstanta Opis

2 E_WARNING Ne-fatalna vremenski izvršena

greška. Izvršenja skripta nije

zaustavljena

8 E_NOTICE Vremenski izvršena obaveštenja.

Skripta će naći nešto što moţe

biti greška, ali bi moglo da se

desi kada se skripta prikayuje

normalno

256 E_USER_ERROR Fatalna korisnički-generisana

greška. Ovo je kao E_ERROR

postavio programer pomoću PHP

funkcije trigger_error ()

Page 66: PHP - Almir Sinanovic

Almir Sinanović | PHP 66

512 E_USER_WARNING Ne-fatalno gorisnički-generisano

upozorenje. Ovo je kao

E_WARNING postavio

programer pomoću PHP funkcije

trigger_error ()

1024 E_USER_NOTICE Korisnički generisano

obaveštenje. Ovo je kao

E_NOTICE postavio programer

pomoću PHP funkcije

trigger_error ()

4096 E_RECOVERABLE_ERROR Primetljiva fatalna greška.Ovo je

kao E_ERROR ali moţe biti

primećen od stranekorisnički

definisanog regulatora (vidi

takoĎe set_error_handler ())

8191 E_ALL Sve greške i upozorenja ,osim

nivoa E_STRICT (E_STRICT će

biti deo kao E_ALL PHP 6,0)

Sada kreirajmo funkciju za obradu greške:

function customError($errno, $errstr)

{

echo "<b>Error:</b> [$errno] $errstr<br />";

echo "Ending Script";

die();

}

Gorepomenuti kod je ustvari jednostavna funkcija za tretiranje grešaka.Kada se ova funkcija

izvrši ona identifikuje nivo i text greške.Ta funkcija onda izbaci o kom se nivou greške radi i koji

je text greške,i tada ukida skriptu.

Sada kad smo stvorili funkciju za tretiranje grešaka treba da odlučimo kad će nam trebati da je

pokrenemo.

Set Error Handler

Podrazumevani upravljač greškama za PHP je već ugradjeni upravljač grešaka. Mi ćemo

napraviti funkciju iznad podrazumevanog upravljača greškom za vreme trajanja skripte.

Moguće je promeniti upravljača greškom i primeniti ga samo za neke greške, na taj način skripta

moţe da prihvati različite greške na različite načine. MeĎutim, u ovom primeru ćemo koristiti

naš prilagoĎeni upravljač grešaka za sve greške:

set_error_handler("customError");

Page 67: PHP - Almir Sinanovic

Almir Sinanović | PHP 67

Pošto ţelimo da naša prilagoĎena funkcija obavi sve greške, set_error_handler () je potreban

samo jedan parametar, drugi parametar se moţe dodati da odredite nivo greške.

Primer

Testiranje upravljača grešaka pokušavajući da štampa promenljivu koja ne postoji:

<?php

//error handler function

function customError($errno, $errstr)

{

echo "<b>Error:</b> [$errno] $errstr";

}

//set error handler

set_error_handler("customError");

//trigger error

echo($test);

?>

Izlazni kod od ovog iznad će izgledati ovako:

Error: [8] Undefined variable: test

Pokretanje greške

U skripti, gde korisnici mogu da unose podatke je korisno da se aktiviraju greške prilikom

nepravilnog unosa. U PHP-u, ovo je rešeno trigger_error () funkcijom.

Primer

U ovom primeru greška se javlja ako je "testiranje" promenljivih veće od "1":

<?php

$test=2;

if ($test>1)

{

trigger_error("Value must be 1 or below");

}

?>

Izlazni kod od ovog iznad će izgledati ovako:

Notice: Value must be 1 or below

Page 68: PHP - Almir Sinanovic

Almir Sinanović | PHP 68

in C:\webfolder\test.php on line 6

Greška se moţe pokrenuti bilo gde u skripti a dodavanjem drugog parametra, moţete da odredite

koji je nivo greške pokrenut.

Tipovi mogućih grešaka:

E_USER_ERROR - Fatalna korisnički-generisana vremenski-izvršljiva greška. Greške koje se

ne mogu popraviti. Izvršenje skripte je zaustavljeno.

E_USER_WARNING - Ne- fatalna korisnički-generisana vremenski-izvršljiva upozorenja.

Izvršenje skripte nije zaustavljeno.

E_USER_NOTICE - Uobičajeno. Korisnički-generisano vremenski-izvršljivo obaveštenje.

Skripta nalazi nesšto što moţe biti greška, ali bi moglo da se desi kada se skipta pokrene

normalno

Primer

U ovom primeru E_USER_WARNING se javlja ako je "testiranje" promenljive veće od "1".

Ako se desi E_USER_WARNING koristit ćemo naš podrazumevani upravljač greškama na kraju

skripte:

<?php

//error handler function

function customError($errno, $errstr)

{

echo "<b>Error:</b> [$errno] $errstr<br />";

echo "Ending Script";

die();

}

//set error handler

set_error_handler("customError",E_USER_WARNING);

//trigger error

$test=2;

if ($test>1)

{

trigger_error("Value must be 1 or below",E_USER_WARNING);

}

?>

Izlazni kod od ovog iznad će izgledati ovako:

Error: [512] Value must be 1 or below

Ending Script

Page 69: PHP - Almir Sinanovic

Almir Sinanović | PHP 69

Sada kada smo naučili da kreiramo sopstvene greške i kako da ih pokrećemo, pogledajte kako da

prijavimo grešku.

Greške prijavljivanja

Po podrazumevanim podešavanjima PHP šalje greške da se priajvi na serverima ili na sistem

datoteka ,u zavisnosti od toga koliko je error_log konfiguracija smeštena u php.ini fajlu.

Korišćenjem error_log funkcije moţete da šaljete prijavljenu grešku u navdenu datoteku ili na

udaljenom mestu.

Slanjem greške putem e-maila moţe biti dobar način da se dobije obaveštenje o odredjenim

greškama.

Slanje poruke o grešci putem e-maila

U ovom primeru ispod mi ćemo e-mail sa greškom I na kraju skripte ako je u specifičnoj greški

ponudjeno:

<?php

//error handler function

function customError($errno, $errstr)

{

echo "<b>Error:</b> [$errno] $errstr<br />";

echo "Webmaster has been notified";

error_log("Error: [$errno] $errstr",1,

"[email protected]","From: [email protected]");

}

//set error handler

set_error_handler("customError",E_USER_WARNING);

//trigger error

$test=2;

if ($test>1)

{

trigger_error("Value must be 1 or below",E_USER_WARNING);

}

?>

Izlazni kod od ovog iznad će izgledati ovako:

Greška: (512) vrednost mora da bude 1 ili ispod.

WebMaster je obavešten.

I primljeni mail od koda iznad treba izgledati nešto ovako:

Page 70: PHP - Almir Sinanovic

Almir Sinanović | PHP 70

Greshka: (512) vrednost mora biti 1 ili ispod.

Ovo ne bi trebalo biti upotrebljeno sa svim greškama.Regularne greške bi trebale biti ulogovane

na serveru upotrebljavajući upravljač PHP logovanog sistema.

PHP Upotreba izuzetka

Izuzeci se koriste za promenu normalnog toka skripte,ako je navedena greška.

Šta je izuzetak?

Sa PHP 5 je došao novi objekat koji je orijentisan sa nachinom suochavanja greshkaka.

Izuzetak se koristi za promenu normalnog toka izvrshenja koda ako odredjene greshke(izuzetne)

iamju uslov da se to dogodi.ovo stanje se naziva izuzetak.

Ovo je neshto shto se obichno deshava kada je izuzetak moguc:

*Trenutno stanje koda je sachuvano

*Izvrshavanje koda ce se prebaciti ako su unapred definisane (korisnichki)izuzetak rukovodioche

funkcije.

U zavisnoosti od situacije,a rukovalac mozhe da nastavi sa izvrshenjem sachuvanog koda od

drzhave,prekinuti ili nastaviti izvrshenje skripta iz razlichitih lokacija u kodu.

Mi cemo vam pokazati razlichite metode rukovanja greshkama:

*Osnovno korishcenje izuzetaka

*Kreiranje prilagodjenih izuzetaka rukovodioca

*Vishestruki izuzetak

*povracanje izuzetka

*poslednji nivo izuzetaka rukovodioca

Napomena: Izuzeci treba da se koriste samo u uslovima greshke,I ne treba koristiti da biste

skochili na drugo mesto u kodu na odredjene tachke.

Osnovna upotreba izuzetka

Kada je izuzetak bachen,pracen kod nece biti izuzetak,I PHP ce pokushati da pronadje

odgovarajuci “uhvati” blok.

Ako izuzetak nije uhvacen ,kobna greshka bi bila izdata sa “Neuhvacen izuzetak” porukom.

Page 71: PHP - Almir Sinanovic

Almir Sinanović | PHP 71

Omogucava namda probamo da bacimo izuzetak bez hvatanja:

<?php

//create function with an exception

function checkNum($number)

{

if($number>1)

{

throw new Exception("Value must be 1 or below");

}

return true;

}

//trigger exception

checkNum(2);

?>

Kod iznad bi trebao izgledati ovako neshto:

Fatalna greshka:neuhvacen izuzetak “IZUZEtAK” sa porukom “gde vrednost mora biti 1 ili

ispod „ u “C”webfolderu.test php.6

Stek trag:#0 “C”\webfolder/test php12: provera broja28#1 (main) prebachen u c webfolder test

php online 6.

Pokušaj ,baci i uhvati

Da biste izbegli greshke u gore navedenom primeru ,potrebno je da kreirate odgovarajuci kod za

rukovanje izuzetkom.

Kod Pravilni izuzetak kod treba da sadrzhi:

1.probajte-koristeci funkciju treba da bude izuzetak u pokushaju, blok.Ako izuzetak ne aktivira

,kod ce I dalje biti normaalan.medjutim,ako osim aktivnosti , izuzetak je bachen .

2.Baciti-ovo je nachin kako aktivnost izuzeti. Iako “baciti” mora imati poslednje “uhvati”

3.Uhvati- uhvati blok preuzima izuzetak I kreira objekat koji sadrzhi informacije izuzetak.

Hajde da pokushamo da pokrenemo izuzetak gde je kod validan:

<?php

//create function with an exception

function checkNum($number)

{

if($number>1)

{

throw new Exception("Value must be 1 or below");

Page 72: PHP - Almir Sinanovic

Almir Sinanović | PHP 72

}

return true;

}

//trigger exception in a "try" block

try

{

checkNum(2);

//If the exception is thrown, this text will not be shown

echo 'If you see this, the number is 1 or below';

}

//catch exception

catch(Exception $e)

{

echo 'Message: ' .$e->getMessage();

}

?>

Kod bi gore trebao da izgleda ovako neshto:

Poruka :vrednost mora biti 1 ili ispod

Primer objashnjava:

Kod iznad baca izuzetak I hvata ih:

1.provera broja funkc.je kreiran.proverava se ako je broj veci od 1 oda se izuzetak baca.

2.provera roja funkc. Je nazvan |pokushaj” bloka.

3.izuzetak ggde je provera broja funkc.bachen

4.”uhvati”blok povraca izuzetak I kreira objektivni sadrzhaj izuzetka informacije.

5.Poruka o greshci iz izuzetka je ponovio pozivom $E->get\metccage iz objekta izuzetka.

Medjutim ,jedan od nachina da se to “baci svaki mora imati ulov‟ pravilo je da se podesi krajnji

nivo I rukovalac ce izuzetkom rukovat greshke koje ce skroz skliznuti.

Kreiranje prilagodjene klase izuzetaka

Kreiranje prilagodjenih izuzetaka rukovanje je prilichno jednostavno,mi jednostavno napravimo

posebne klase sa funkcijama koje mogu da se ukrste ako se izuzetak javlja u PHP-u .klasa mora

da bude produzhenje izuzetka klase.

Obichaj izuzetka klase nasledjuje osobine iz klase osim PHP-a mozhete dodati prilagodjene

funkc,na njega.

Hajde da kreiramo klasu izuzetka:

Page 73: PHP - Almir Sinanovic

Almir Sinanović | PHP 73

<?php

class customException extends Exception

{

public function errorMessage()

{

//error message

$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';

return $errorMsg;

}

}

$email = "[email protected]";

try

{

//check if

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

{

//throw exception if email is not valid

throw new customException($email);

}

}

catch (customException $e)

{

//display custom message

echo $e->errorMessage();

}

?>

Nova klasa je kopija stare a izuzetak klase sa dodatkop eppopmeccage funkc.jer je kopija stare

klase I mozemo koristiti metode klase kao izuzetak na online I na fajl I na poruku.

Objashnjenje preko primera:

Kod baca izuzetak I hvata gas a klase koji je prilagodjeni izuzetak:

1.ova vrsta klase je nastala kao produzhetak starok izuzetka klase.na ovaj nachin se nasleduju sve

metode I svojstva iz starog izuzetka klase…

2.EpporMeccage funkc.je napravljen.ova funkcija vraca poruku o freshci ako je e-mail adresa

neispravna.

3.$ Email promenljiva postavljena na nisku koja nije vazheca e-mail adresa.

4.Pokusaj gde se blok izvrshava I baca se izuzetak od emaila ,adresa nije ispravna

5.Uhvati blok hvata izuzetak I prikazuhe poruku greshci.

Page 74: PHP - Almir Sinanovic

Almir Sinanović | PHP 74

Višestruki izuzeci

Moguce je koristiti skripte,vishe izuzetke za proveru uslova.

Moguceb je koristiti vishe ako…drugo blokira,prekidach,gnezda ili vishe izuzetaka.ovi izuzeci

mogu da koriste razlichite klase I vrati izuzetak razlichite poruke o greshci.

<?php

class customException extends Exception

{

public function errorMessage()

{

//error message

$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()

.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';

return $errorMsg;

}

}

$email = "[email protected]";

try

{

//check if

if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)

{

//throw exception if email is not valid

throw new customException($email);

}

//check for "example" in mail address

if(strpos($email, "example") !== FALSE)

{

throw new Exception("$email is an example e-mail");

}

}

catch (customException $e)

{

echo $e->errorMessage();

}

catch(Exception $e)

{

echo $e->getMessage();

}

?>

Page 75: PHP - Almir Sinanovic

Almir Sinanović | PHP 75

JEDNOSTAVNO OBJASHNJENJE:

Kod iznad testova dva uslova I baca izuzetak ako su neki od uslova neispunjeni :

1.chas je kreiran kao produzhetak starog izuzetka chasa,na ovaj nachin se nasledjuju sve metode

I svojstva iz starog izuzetka chasa.

2.eppopmeccage funkc vraca poruku o greshki ako je e-mail adresa neispravna

3.$ E promenljiva postavljena na nisku koja je vazheca,e-mail adresu,al sadrzhi niske primere…

4.Pokushajte ,blok se izvrshava a izuzetak nije bachen na prvi uslov.

5.drugi uslov aktivira izuzetak od email poruka I sadrzhi niske primere.

6.Uhvati,blok hvata izuzetak I techno prikazuje poruku o greshci .

Ako nema customException uhvatim,samo baza uhvatim izuzetak,I taj izuzetak se reshava tamo.

Ponovno bacani izuzeci

Ponekad, kada se baca izuzetak, moţda ćete ţeleti da se rukuje drugačije od standardnog načina.

Moguće je da se baci izuzetak po drugi put u roku od "uhvati" blok.

Skripta bi trebalo da sakriju greške sistema korisnika. Sistem greške mogu biti od značaja za

koder, ali nije od interesa za korisnika. Da bi stvari lakše korisnik moţete ponovo baciti izuzetak

sa korisnike poruku:

<?php

class customException extends Exception

{

public function errorMessage()

{

//error message

$errorMsg = $this->getMessage().' is not a valid E-Mail address.';

return $errorMsg;

}

}

$email = "[email protected]";

try

{

try

{

//check for "example" in mail address

if(strpos($email, "example") !== FALSE)

{

//throw exception if email is not valid

throw new Exception($email);

}

Page 76: PHP - Almir Sinanovic

Almir Sinanović | PHP 76

}

catch(Exception $e)

{

//re-throw exception

throw new customException($email);

}

}

catch (customException $e)

{

//display custom message

echo $e->errorMessage();

}

?>

Objasnjenje primera:

Kod iznad testira testova da li je e-adresa sadrţi nisku "primer" u njoj, ako ne, izuzetak je ponovo

baca:

1. The customException() class is created as an extension of the old exception class. This

way it inherits all methods and properties from the old exception class

2. The errorMessage() function is created. This function returns an error message if an e-

mail address is invalid

3. The $email variable is set to a string that is a valid e-mail address, but contains the string

"example"

4. The "try" block contains another "try" block to make it possible to re-throw the exception

5. The exception is triggered since the e-mail contains the string "example"

6. The "catch" block catches the exception and re-throws a "customException"

7. The "customException" is caught and displays an error message

Ako se izuzeće nije zatečen u svom trenutnom "pokušati" blok, on će potraţiti uhvatim blok na

"višim nivoima".

Postavi vrhunskog upravljača izuzetaka

Set_eksception_handler () Funkcija postavlja korisnički definisana funkcija za rukovanje sve

Neuhvaćen izuzetaka.

<?php

function myException($exception)

{

echo "<b>Exception:</b> " , $exception->getMessage();

}

Page 77: PHP - Almir Sinanovic

Almir Sinanović | PHP 77

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');

?>

Kod iznad će da štampa:

Exception: Uncaught Exception occurred

U kodu gore nije bilo "uhvati" blok. Umesto toga, vrhunski izuzetak su pokrenuli rukovalac. Ova

funkcija treba da se koristi da uhvati Neuhvaćen izuzetaka.

Pravila za izuzetke

Kod moţe biti okruţen pokušati blok, kako bi potencijalni ulov izuzetaka

Svaki pokušati blokirati ili "bacaju" mora imati bar jedan blok odgovarajućih ulov

Višestruki uhvatiti blokovi mogu da se koriste da uhvate različite klase izuzetaka

Izuzeci mogu biti bačen (ili ponovo bačen) u roku uhvatiti blok pokušati blok

Jednostavno pravilo: Ako nešto baci, morate ga uhvatiti.

PHP MySQL Uvod

MySQL je najpopularnija baza podataka otvorenog izvora.

Sta je MySQL?

MySQL je baza podataka.

Podaci u MySQL su smesteni u objektima baze podataka zvanim tabele .

Tabela je zbir povezanih unosa podataka i sastoji se od kolona i redova.

Baze podataka su korisne kod skladistenja informacija po kategorijama. Kompanija moze imati

baze podataka sa sledecim tabelama: “Zaposljeni“,“Proizvodi“.“Musterije“ i “Narudzbine“.

Tabele baze podataka

Baza podataka najcesce sadrzi jednu ili vise tabela. Svaka tabela je identifikovana po nazivu

(npr. “Musterije“ ili “Narudzbine“). Tabela sadrzi zapise (redove) sa podacima.

Ispod je primer tabele zvane “Osobe“:

Prezime Ime Adresa Grad

Page 78: PHP - Almir Sinanovic

Almir Sinanović | PHP 78

Hansen Ola Timoteivn 10 Sandnes

Svendson Tove Borgvn 23 Sandnes

Pettersen Kari Storgt 20 Stavanger

Tabela iznad sadrzi tri zapisa (jedan za svaku osobu) i cetiri kolone (Prezime,Ime,Adresa i Grad)

Pretrazivanja

Pretrazivanje je pitanje ili zahtev.

Sa MySQL,mozemo pretraziti bazu podataka za odredjenu informaciju i imamo vracen zapis.

Pogledajte sledece pretrazivanje:

ODABERI Prezime IZ Osobe

Pretrazivanje iznad ce selektovati sve podatke iz kolone “Prezime“ i dace ovakav zapis:

Prezime

Hansen

Svendson

Pettersen

Skinite MySQL bazu podataka

Ako nemate PHP server sa MySQL bazom podataka,mozete skinuti MySQL besplatno ovde:

http://www.mysql.com/downloads/index.html

Cinjenice o MySQL bazi podataka

Jedna sjajna stvar o MySQL je da moze biti smanjen da podrzi ugradjene aplilkacije baze

podataka. Mozda zbog ove reputacije mnogo ljudi veruje da MySQL moze da podnese sisteme

male do srednje velicine.

Istina je da MySQL standardna baza podataka za web sajtove koja podrzava ogromne kolicine

podataka i krajnjih korisnika (kao Friendster, Yahoo, Google)

Pogledajte na http://www.mysql.com/customers/ za pregled kompanija koje koriste MySQL

PHP MySQL Povezite se sa bazom podataka

Besplatna MySQL baza podataka se veoma cesto koristi sa PHP-om.

Page 79: PHP - Almir Sinanovic

Almir Sinanović | PHP 79

Napravite konekciju sa MySQL bazom podataka

Pre nego sto mozete da pristupite podacima u bazi podataka,morate napraviti konekciju sa bazom

podataka.

U PHP,ovo se radi pomocu mysql_connect() funkcije.

Sintaksa

mysql_connect(servername,username,password);

Parametar Opis

Naziv servera Po izboru. Predstavlja server za konekciju. Default vrednost je "localhost:3306"

Korisnicko ime Po izboru. Predstavlja korisnicko ime za logovanje Default vrednost je ime korisnika

koji poseduje proces servera.

sifra Po izboru. Predstavlja sifru za logovanje Default je ""

Napomena: postoji vise dostupnih parametara,ali ovi na spisku iznad su najvazniji. Posetite PHP

MySQL Reference za vise detalja.

Primer

U sledecem primeru cuvamo konekciju u varijabli ($con) za kasnije koriscenje u skripti. Deo

“die“ ce biti izvsen ako konekcije ne uspe:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

// some code

?>

Zatvaranje konekcije

Konekcija ce se automatski zatvoriti kada se skripta zavrsi. Da bi zatvorili konekciju pre koristite

funkciju mysql_close() :

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

Page 80: PHP - Almir Sinanovic

Almir Sinanović | PHP 80

// some code

mysql_close($con);

?>

PHP MySQL Napravite baze podataka i tabele

Baza podataka sadrzi jednu ili vise tabela.

Kreirajte bazu podataka

Iskaz CREATE DATABASE se koristi da se napravi baza podataka u MySQL

Sintaksa

CREATE DATABASE database_name

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio iskaz iznad moramo koristiti funkciju mysql_query(). Ova funkcija se koristi

da posalje pitanje ili komandu MySQL konekciji.

Primer

Sledeci primer stvara bazu podataka zvanu "my_db":

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

if (mysql_query("CREATE DATABASE my_db",$con))

{

echo "Database created";

}

else

{

echo "Error creating database: " . mysql_error();

}

mysql_close($con);

Page 81: PHP - Almir Sinanovic

Almir Sinanović | PHP 81

?>

Kreirajte tabelu

CREATE TABLE zapis se koristi da bi se kreirala tabela u MySQL.

Sintaksa

CREATE TABLE table_name

(

column_name1 data_type,

column_name2 data_type,

column_name3 data_type,

....

)

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Moramo dodati zapis CREATE TABLE funkciji mysql_query() da bi izvrsili komandu.

Primer

Sledeci primer kreira tabeli nazvanu “Osobe“ sa tri kolone. Nazivi kolona ce biti

“Ime“,“Prezime“ i “Godiste“:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

// Create database

if (mysql_query("CREATE DATABASE my_db",$con))

{

echo "Database created";

}

else

{

echo "Error creating database: " . mysql_error();

}

// Create table

mysql_select_db("my_db", $con);

$sql = "CREATE TABLE Persons

(

Page 82: PHP - Almir Sinanovic

Almir Sinanović | PHP 82

FirstName varchar(15),

LastName varchar(15),

Age int

)";

// Execute query

mysql_query($sql,$con);

mysql_close($con);

?>

Vazno:.Baza podataka mora biti odabrana pre nego sto se tabela kreira. Baza podataka se bira sa

funkcijom mysql_select_db()

Napomena: Kada kreirate polje baze podataka tipa varchar,morate naglasiti maksimalnu duzinu

polja,npr varchar(15).

Tip podataka naglasava koji tip podataka moze da podrzi. Za kompletne karakteristike svih

tipova podataka dostupnih u MySQL,idite na Data Types reference.

Primarni kljucevi i polja za autopovecanje

Svaka tabela treba da ima polje za primarne kljuceve.

Primarni kljuc se koristi da jedinstveno identifikuje redove u tabeli. Svaka vrednost primarnog

kljuca mora biti jedinstvena unutar tabele. Dalje,primarni kljuc ne moze biti nulti jer motor baze

podataka zahteva vrednost da bi nasao zapis.

Sledeci primer postavlja polje personID kao polje primarnog kljuca. Polje primarnog kljuca je

cesto ID broj i cesto se koristi sa podesavanjem AUTO_INCREMENT. AUTO_INCREMENT

automatski povecava vrednost polja za 1 svaki put kad je zapis dodat. Da bi se osiguralo da polje

primarnog kljuca ne moze biti nulto,moramo dodati polju podesavanje NOT NULL.

Primer

$sql = "CREATE TABLE Persons

(

personID int NOT NULL AUTO_INCREMENT,

PRIMARY KEY(personID),

FirstName varchar(15),

LastName varchar(15),

Age int

)";

mysql_query($sql,$con);

PHP MySQL Ubaciti u

Page 83: PHP - Almir Sinanovic

Almir Sinanović | PHP 83

Izjava INSERT INTO (ubaciti u) se koristi da se ubace novi zapisi u tabelu.

Ubaciti podatke u tabelu baze podataka

Izjava INSERT INTO se koristi da se dodaju novi zapisi u tabelu baze podataka.

Sintaksa

Izjava INSERT INTO moze biti napisana u dve forme.

Prva forma ne naglasava naziv kolone u koju ce podaci biti ubaceni,samo njihove vrednosti:

INSERT INTO table_name

VALUES (value1, value2, value3,...)

Druga forma naglasava imena i vrednosti koja ce biti ubacene:

INSERT INTO table_name (column1, column2, column3,...)

VALUES (value1, value2, value3,...)

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio naredbu iznad moramo koristiti funkciju mysql_query() function. Ova

funkcija se koristi da posalje pitanje ili naredjenje MySQL konekciji.

Primer

U prethodnom poglavlju kreirali smo tabelu zvanu “Osobe“,sa tri kolone; “Ime“,“Prezime“ i

Godiste“. Koristicemo istu tabelu u ovom primeru. Sledeci primer dodaje dva nova zapisa tabeli

“Osobe“:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)

VALUES ('Peter', 'Griffin', '35')");

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)

VALUES ('Glenn', 'Quagmire', '33')");

mysql_close($con);

Page 84: PHP - Almir Sinanovic

Almir Sinanović | PHP 84

?>

Ubacite podatke iz baze podataka Formirajte u

Sada cemo kreirati formu HTML koja moze biti koriscena da se dodaju novi zapisi u tabeli

“Osobe“

Ovde je forma HTML:

<html>

<body>

<form action="insert.php" method="post">

Firstname: <input type="text" name="firstname" />

Lastname: <input type="text" name="lastname" />

Age: <input type="text" name="age" />

<input type="submit" />

</form>

</body>

</html>

Kada korisnik pritisne dugme submit (poslati) u HTML formi kao primer odozgo,forma podatka

je poslata u "insert.php".

Fajl "insert.php" se povezuje sa bazom podataka i vraca vrednost iz fome sa varijablama PHP

$_POST

Onda,kada funkcija mysql_query() izvrsi naredbu INSERT INTO,novi zapis ce biti dodat tabeli

“Osobe“.

Ovde je strana "insert.php":

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$sql="INSERT INTO Persons (FirstName, LastName, Age)

VALUES

('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";

if (!mysql_query($sql,$con))

{

Page 85: PHP - Almir Sinanovic

Almir Sinanović | PHP 85

die('Error: ' . mysql_error());

}

echo "1 record added";

mysql_close($con)

?>

PHP MySQL Selektovanje

Naredba SELECT se koristi da selektuje podatke iz baze podataka.

Selektovanje podataka iz tabele baze podataka

Naredba SELECT se koristi da selektuje podatke iz baze podataka.

Sintaksa

SELECT column_name(s)

FROM table_name

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio naredbu iznad moramo koristiti funkciju mysql_query(). Ova funkcija se koristi da posalje pitanje ili komandu MySQL konekciji.

Primer

Sledeci primer selektuje sve podatke smestene u tabeli “Osobe“ (simbol * selektuje sve podatke u tabeli):

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons");

while($row = mysql_fetch_array($result))

{

Page 86: PHP - Almir Sinanovic

Almir Sinanović | PHP 86

echo $row['FirstName'] . " " . $row['LastName'];

echo "<br />";

}

mysql_close($con);

?>

Primer iznad cuva podatke vracene funkcijom mysql_query() u varijabli $result.

Sledece,koristimo funkciju mysql_fetch_array() da vratimo prvi red is zapisa kao niz. Svaki poziv mysql_fetch_array() vraca sledeci red u zapisu. Dok petlja trazi sve zapise. Da bi istampali vrednost svakog reda,koristimo PHP $row varijablu ($row['FirstName'] and $row['LastName']).

Rezultat koda iznad ce da bude:

Peter Griffin

Glenn Quagmire

Prikazi rezultate u HTML tabeli

Sledeci primer selektuje iste podatke kao primer iznad,ali ce prikazati podatke u HTML tabeli:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons");

echo "<table border='1'>

<tr>

<th>Firstname</th>

<th>Lastname</th>

</tr>";

while($row = mysql_fetch_array($result))

{

echo "<tr>";

echo "<td>" . $row['FirstName'] . "</td>";

echo "<td>" . $row['LastName'] . "</td>";

echo "</tr>";

Page 87: PHP - Almir Sinanovic

Almir Sinanović | PHP 87

}

echo "</table>";

mysql_close($con);

?>

Rezultat koda iznad ce da bude:

Ime Prezime

Glenn Quagmire

Peter Griffin

PHP MySQL The Where Clause

The WHERE clause is used to filter records.

Klauzula Gde

Klauzula GDE se koristi da izvuce samo one zapise koji ispunjavaju naglaseni kriterijum.

Sintaksa

SELECT column_name(s)

FROM table_name

WHERE column_name operator value

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio naredbu iznad moramo koristiti funkciju mysql_query(). Ova funkcija se koristi da posalje pitanje ili komandu MySQL konekciji.

Primer

Sledeci primer selektuje sve redove iz tabele “Osobe“ gde je “Ime='Peter':

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

Page 88: PHP - Almir Sinanovic

Almir Sinanović | PHP 88

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons

WHERE FirstName='Peter'");

while($row = mysql_fetch_array($result))

{

echo $row['FirstName'] . " " . $row['LastName'];

echo "<br />";

}

?>

Rezultat koda iznad ce biti:

Peter Griffin

PHP MySQL Naredba kljucnom reci

ORDER BY kljucna rec se koristi da sortira podatke u zapisu.

ORDER BY Kljucna rec

ORDER BY kljucna rec se koristi da sortira podatke u zapisu.

ORDER BY kljucna sortira zapise u rastucem nizu po defoltu.

Ako hocete da sortirate zapise u padajucem redu,mozete koristiti kljucnu rec DESC.

Sintaksa

SELECT column_name(s)

FROM table_name

ORDER BY column_name(s) ASC|DESC

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Page 89: PHP - Almir Sinanovic

Almir Sinanović | PHP 89

Primer

Sledeci primer selektuje sve podatke sacuvane u tabeli “Osobe“ i sortira ih kao rezultat u koloni “Godiste“:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

$result = mysql_query("SELECT * FROM Persons ORDER BY age");

while($row = mysql_fetch_array($result))

{

echo $row['FirstName'];

echo " " . $row['LastName'];

echo " " . $row['Age'];

echo "<br />";

}

mysql_close($con);

?>

Rezultat koda iznad ce biti:

Glenn Quagmire 33

Peter Griffin 35

Naredba sa dve kolone

Takodje je moguce da se naredi sa vise od jedne kolone. Kada se narucuje sa vise od dve kolone,druga kolona se koristi samo ako su vrednosti u prvoj koloni jednake:

SELECT column_name(s)

FROM table_name

ORDER BY column1, column2

Page 90: PHP - Almir Sinanovic

Almir Sinanović | PHP 90

PHP MySQL Azuriranje

Naredba UPDATE (azuriranje) se koristi da izmeni podatke u tabeli.

Azuriranje podataka u bazi podataka

Naredba UPDATE se koristi da azurira postojece zapise u tabeli.

Sintaksa

UPDATE table_name

SET column1=value, column2=value2,...

WHERE some_column=some_value

Napomena: obratite paznju na klauzulu WHERE (GDE) u UPDATE sintaksi. Klauzula WHERE naglasava koji zapis ili zapisi trebaju biti azurirani. Ako se propusti klauzula WHERE,svi zapisi ce biti azurirani!

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio naredbu iznad moramo koristiti funkciju mysql_query(). Ova funkcija se koristi da posalje pitanje ili komandu MySQL konekciji.

Primer

Pre smo u uputstvu kreirali tabelu pod nazivom “Osobe“. Ovako izgleda:

Ime Prezime Godine

Peter Griffin 35

Glenn Quagmire 33

Sledeci primer azurira neke podatke iz tabele “Osobe“:

<?php

$con = mysql_connect("localhost","peter","abc123");

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

mysql_query("UPDATE Persons SET Age = '36'

WHERE FirstName = 'Peter' AND LastName = 'Griffin'");

mysql_close($con);

Page 91: PHP - Almir Sinanovic

Almir Sinanović | PHP 91

?>

Posle azuriranja tabela “Osobe ce izgledati ovako:

Ime Prezime Godine

Peter Griffin 36

Glenn Quagmire 33

PHP MySQL Brisanje

Naredba DELETE (brisanje) se koristi za brisanje zapisa u tabeli.

Brisanje podataka iz baze podataka

Naredba DELETE FROM (izbrisi iz) se koristi da izbrise zapise iz tabele baze podataka.

Sintaksa

DELETE FROM table_name

WHERE some_column = some_value

Napomena: obratite paznju na klauzulu WHERE (gde) u sintaksi DELETE (obrisi). Klauzula WHERE naglasava koji zapis ili zapisi trebaju da budu izbrisani. Ako izostavite klauzulu WHERE,svi zapisi ce biti izbrisani!

Da bi naucili vise o SQL,molimo vas posetite nas SQL tutorial

Da bi PHP izvrsio naredbu iznad moramo koristiti funkciju mysql_query(). Ova funkcija se koristi da posalje pitanje ili komandu MySQL konekciji.

Primer

Pogledajte sledecu tabelu “Osobe“:

Ime Prezime Godine

Peter Griffin 35

Glenn Quagmire 33

Sledeci primer brise sve zapise iz tabele “Osobe“ gde je Prezime='Griffin':

<?php

$con = mysql_connect("localhost","peter","abc123");

Page 92: PHP - Almir Sinanovic

Almir Sinanović | PHP 92

if (!$con)

{

die('Could not connect: ' . mysql_error());

}

mysql_select_db("my_db", $con);

mysql_query("DELETE FROM Persons WHERE LastName='Griffin'");

mysql_close($con);

?>

Posle brisanja tabela ce izgledati ovako:

Ime Prezime Godine

Glenn Quagmire 33

PHP Baza podataka ODBC

ODBC je aplikacija za programiranje interfejsa koja vam omogucava da se povezete sa

izvorom podataka (npr. MS pristupna baza podataka)

Kreirajte ODBC konekciju

Sa ODBC konekcijom,mozete se povezati sa bilo kojom bazom podataka,na bilo kojem kompjuteru u vasoj mrezi,sve dok je ODBC konekcija dostupna.

Ovde je kako da kreirate ODBC konekciju sa MS pristupnom bazom podataka:

1. Otvorite ikonu Administrative Tools na vasem Control Panel-u 2. Dupli klik na ikonu Data Sources (ODBC) unutra. 3. Odaberite System DSN tab. 4. Kliknite na Add u System DSN tab. 5. Odaberite Microsoft Access Driver. Kliknite Finish. 6. Na sledecem ekranu, kliknite Select da bi locirali bazu podataka. 7. Dajte bazi podataka Data Source Name (naziv izvora podataka) (DSN). 8. Click OK.

Napomenite da ova konfiguracija mora biti obavljena na kompjuteru gde je vas web site lociran. Ako koristite Internet Information Server (IIS) na vasem kompjuteru,instrukcije iznad ce raditi,ali ako je vas web site lociran na daljinskom serveru,morate da imate fizicki pristup tom serveru ili pitajte vaseg web domacina da podesi DSN za vase koriscenje.

Page 93: PHP - Almir Sinanovic

Almir Sinanović | PHP 93

Konektujte se sa ODBC

Funkcija odbc_connect() se koristi da se poveze sa izvorom informacija. Funkcija uzima cetiri parametra: naziv izvora informacija,korisnicko ima,sifru i tip izbornog kursora.

Funkcija odbc_exec() se koristi da izvrsi naredbu SQL .

Primer

Sledeci primer kreira konekciju sa DSN zvanu northwind,bez korisnickog imena i sifre. Potom kreira SQL i izvrsava je:

$conn=odbc_connect('northwind','','');

$sql="SELECT * FROM customers";

$rs=odbc_exec($conn,$sql);

Vracanje zapisa

Funkcija odbc_fetch_row() se koristi da vrati zapise iz rezultata. Ova funkcija vraca istinu ako je moguce da vrati redove,inace lazne.

Funkcija uzima dva parametra: identifikator ODBC rezultata i opcionalan broj redova:

odbc_fetch_row($rs)

Vracanje polja iz zapisa

Funkcija odbc_result() se koristi da cita polja iz zapisa. Ova funkcija uzima dva parametra: identifikator ODBC rezultata i polje broj ili ime.

Linija koda ispod vraca vrednost prvog polja iz zapisa:

$compname=odbc_result($rs,1);

Linija koda ispod vraca vrednost polja zvanog “Naziv kompanije“:

$compname=odbc_result($rs,"CompanyName");

Zatvaranje ODBC konekcije

Funkcija odbc_close() se koristi da zatvori ODBC konekciju.

Page 94: PHP - Almir Sinanovic

Almir Sinanović | PHP 94

odbc_close($conn);

ODBC Primer

Sledeci primer pokazuje kako da se prvo kreira konekcija baze podataka,potom set rezultata i onda da se prikazu podaci u HTML tabeli.

<html>

<body>

<?php

$conn=odbc_connect('northwind','','');

if (!$conn)

{exit("Connection Failed: " . $conn);}

$sql="SELECT * FROM customers";

$rs=odbc_exec($conn,$sql);

if (!$rs)

{exit("Error in SQL");}

echo "<table><tr>";

echo "<th>Companyname</th>";

echo "<th>Contactname</th></tr>";

while (odbc_fetch_row($rs))

{

$compname=odbc_result($rs,"CompanyName");

$conname=odbc_result($rs,"ContactName");

echo "<tr><td>$compname</td>";

echo "<td>$conname</td></tr>";

}

odbc_close($conn);

echo "</table>";

?>

</body>

</html>

PHP XML Expat Analizator

Ugradjeni Expat analizator omogućava procesiranje XML documenata u PHP-u.

Page 95: PHP - Almir Sinanovic

Almir Sinanović | PHP 95

Šta je XML?

XML se koristi da objasni podatke I da se fokusira na to šta je to podatak. XML fajl objašnjava

strukturu podatka.

U XML-u, dodaci nisu predefinisani. Vi morate definisati svoje dodatke.

Ako ţelite da naučite više o XML-u, posetite nas XML tutorial.

Šta je Expat?

Da bi citali I updejtovali – kreirali I manipulisali – XML dokument, trebaće vam XML

analizator.

Postoje dva osnovna tipa XML analizatora:

Analizator sa strukturom drveta: Ovaj analizator transformise XML document u

obliku drveta. On analizira ceo dokument, I omogućava pristup razgranatim

elementima. Na primer: Document Object Model (DOM)

Analizator baziran na dogaĎajima: Vidi XML document kao niz dogaĎaja. Kada

se odreĎeni dogaĎaj desi, on koristi funkciju da bi ga obradio.

Expat analizator je analizator baziran na dogaĎajima.

Analizatori bazirani na dogaĎajima se fokusiraju na sadrţinu dokumenta, ne njihovu strukturu.

Zbog ovoga, analizatori bazirani na dogaĎajima mogu brţe da pristupe podacima od analizatora

sa strukturom drveta.

Pogledajte sledeću XML frakciju:

<from>Jani</from>

Analizator na bazi dogaĎaja prikazuje XML document iznad kao niz tri dogaĎaja:

• Početni element: from

• Početnu CDATA sekciju, vrednost: Jani

• Završni element: from

XML primer dat iznad sadrţi dobro formiran XML. MeĎutim, primer nije validan XML, zato što

ne sadrţi Document Type Definition (DTD). Ipak, ovo ne pravi nikakvu razliku kad se koristi

Expat analizator. Expat nije proveren analizator, I ignoriše sve DTD-e.

Kao baziran na dogaĎajima,ne proveren analizator, Expat je mali I brz, I odličan izbor za PHP

internet aplikacije.

Napomena: XML dokumenti moraju biti dobro formirani,inače će Expat prikazati grešku.

Page 96: PHP - Almir Sinanovic

Almir Sinanović | PHP 96

Instalacija

Funkcije XML Expat analizatora su deo PHP jezgra. Nije potrebna instalacija da bi se ove

funkcije koristile.

XML datoteka

XML datoteka data ispod će biti korisćena kao primer:

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

Pokretanje XML analizatora

Ţelimo da započnemo XML analizator u PHP-u, da definišemo programe odreĎene za različite

XML dogaĎaje, I onda da analiziramo XML fajl.

Primer

<?php

//Initialize the XML parser

$parser=xml_parser_create();

//Function to use at the start of an element

function start($parser,$element_name,$element_attrs)

{

switch($element_name)

{

case "NOTE":

echo "-- Note --<br />";

break;

case "TO":

echo "To: ";

break;

case "FROM":

echo "From: ";

break;

case "HEADING":

echo "Heading: ";

Page 97: PHP - Almir Sinanovic

Almir Sinanović | PHP 97

break;

case "BODY":

echo "Message: ";

}

}

//Function to use at the end of an element

function stop($parser,$element_name)

{

echo "<br />";

}

//Function to use when finding character data

function char($parser,$data)

{

echo $data;

}

//Specify element handler

xml_set_element_handler($parser,"start","stop");

//Specify data handler

xml_set_character_data_handler($parser,"char");

//Open XML file

$fp=fopen("test.xml","r");

//Read data

while ($data=fread($fp,4096))

{

xml_parse($parser,$data,feof($fp)) or

die (sprintf("XML Error: %s at line %d",

xml_error_string(xml_get_error_code($parser)),

xml_get_current_line_number($parser)));

}

//Free the XML parser

xml_parser_free($parser);

?>

Izlazni rezultat koda datog iznad će biti:

-- Note --

To: Tove

From: Jani

Heading: Reminder

Page 98: PHP - Almir Sinanovic

Almir Sinanović | PHP 98

Message: Don't forget me this weekend!

Kako ovo radi:

1. Pokrenuti XML analizator pomoću xml_parser_create() funkcije

2. Kreirati funkcije koje se koriste sa različitim upravljačima dogaĎaja

3. Dodati xml_set_element_handler() funkciju da odredi koja funkcija ce se izvršiti kada se

analizator sretne sa otvarajućom I zatvarajućom oznakom

4. Dodati xml_set_character_data_handler() funkciju da odredi koja će se funkcija izvršiti

kada se analizator sretne sa znakovnim podatkom

5. Analizirati fajl "test.xml" sa xml_parse() funkcijom

6. U slučaju greške, dodati xml_error_string() funkciju da konvertuje XML grešku u

tekstualnom obliku

7. Pozvatii xml_parser_free() funkciju radi oslobaĎanja memorije dodeljene sa

xml_parser_create() funkcijom

Vise o PHP Expat analizatoru

Za više informacija o PHP Expat funkcijama,posetite naš PHP XML Parser Reference.

PHP XML DOM

Ugradjeni DOM analizator omogućava da se XML dokumenti obraĎuju u PHP-u.

Šta je DOM?

W3C DOM pruţa standardni set objekata za HTML i XML dokumente, I standardni interfejs za

pristupanje I obradu istih.

W3C DOM je podeljen u različite delove (Core, XML, and HTML) I različite nivoe (DOM

Level 1/2/3):

* Core DOM – definiše standardni skup objekata za bilo koji strukturisani dokument

* XML DOM – definiše standardni skup objekata za XML dokumente

* HTML DOM – definiše standardni skup objekata za HTML dokumente

Ako ţelite da naučite vise o XML DOM, molimo vas posetite naš XML DOM tutorial.

XML Analiziranje

Page 99: PHP - Almir Sinanovic

Almir Sinanović | PHP 99

Da bi čitali I apdejtovali – kreirali I obraĎivali - XML dokument, potreban vam je XML

analizator.

Postoje dva osnovna tipa XML analizatora:

• Analizator sa strukturom drveta: Ovaj analizator transformise XML document u obliku

drveta. On analizira ceo dokument, I omogućava pristup razgranatim elementima. Na primer:

Document Object Model (DOM)

• Analizator baziran na dogaĎajima: Vidi XML document kao niz dogaĎaja. Kada se

odreĎeni dogaĎaj desi, on koristi funkciju da bi ga obradio

DOM analizator je analizator sa strukturom drveta.

Pogledajte sledeći deo XML dokumenta:

<?xml version="1.0" encoding="ISO-8859-1"?>

<from>Jani</from>

XML DOM vidi XML dat iznad kao strukturu drveta:

• Nivo 1: XML dokument

• Nivo 2: osnovni element: <from>

• Nivo 3: tekstualni element: "Jani"

Instalacija

Funkcije DOM XML analizatora su deo PHP jezgra. Nije potrebna instalacija da bi se ove

funkcije koristile.

XML Datoteka

XML datoteka data ispod će biti korišćena kao primer:

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

Učitavanje I izvoz XML dokumenta

Ţelimo da pokrenemo XML analizator, učitamo xml, I izvezemo ga:

Primer

Page 100: PHP - Almir Sinanovic

Almir Sinanović | PHP 100

<?php

$xmlDoc = new DOMDocument();

$xmlDoc->load("note.xml");

print $xmlDoc->saveXML();

?>

Izlazni rezultat koda datog iznad će biti:

Tove Jani Reminder Don't forget me this weekend!

Ako izaberete "Vidi izvor" u prozoru pretraţivača, videćete sledeći HTML:

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

Primer dat iznad kreira DOM dokument I učitava XML iz "note.xml" u njega.

Zatim saveXML() funkcija postavlja unutrašnji XML document u mreţu, da bi ga mogli izvesti.

Petlja unutar XML-a

Ţelimo da pokrenemo XML analizator, da učitamo XML, i vrtimo ga kroz sve delove <note>

elemenata:

Primer

<?php

$xmlDoc = new DOMDocument();

$xmlDoc->load("note.xml");

$x = $xmlDoc->documentElement;

foreach ($x->childNodes AS $item)

{

print $item->nodeName . " = " . $item->nodeValue . "<br />";

}

?>

Izlazni rezultat koda datog iznac će biti:

#text =

to = Tove

Page 101: PHP - Almir Sinanovic

Almir Sinanović | PHP 101

#text =

from = Jani

#text =

heading = Reminder

#text =

body = Don't forget me this weekend!

#text =

U primeru datom iznad moţete videti da ima praznih mesta u tekstu izmeĎu svakog elementa.

Kada XML generiše, često sadrţi prazna mesta izmeĎu elemenata. XML DOM analizator tretira

ove elemente kao obične elemente, i ako ne obratite paţnju na njih, oni ponekad mogu stvoriti

probleme.

Ako ţelite da naučite nešto više o XML DOM, molimo vas posetite naš XML DOM tutorial.

PHP ProstiXML

ProstiXML obraĎuje najuobičajenije XML zadatke i prepušta ostalo drugim ekstenzijama.

Šta je ProstiXML?

ProstiXML je novost PHP 5. To je jednostavan način dobijanja atributa i teksta elementa, ako

znate formu XML dokumenta.

Za razliku od DOM ili Expat analizatora, ProstiXML jednostavno uzima nekoliko redova iz koda

da pročita tesktualni podatak elementa.

JednostavniXML konvertuje XML document u objekat, ovako:

• Elementi – su konvertovani u SimpleXMLElement objekat prostih atributa. Kada ima

vise od jednog elementa u jednom nivou, oni se smeštaju u grupu

• Atributi – Pristupa im se koristeći pomoćne grupe, gde index odgovara imenu atributa

• Element podatka – Tekstualni podaci iz elemenata su konvertovani u mreţu. Ako element

ima vise od jednog preznog mesta u tekstu, oni će biti poreĎani u redosledu kako su i izvedeni.

ProstiXML je brz i jednostavan za korišćenje kada obavlja osnovne zadatke kao što su:

• Čitanje XML fajlova

• Izvoz podataka iz XML mreţa

• Ispravljanje praznih mesta u tekstu i atributa

MeĎutim, kada se radi o naprednijem XML-u, kao što su mesta za ime, bolje vam je da koristite

Expat analizator ili XML DOM.

Instalacija

Page 102: PHP - Almir Sinanovic

Almir Sinanović | PHP 102

Kao deo PHP 5.0, funkcije ProstogXML-a su deo PHP jezgra. Instalacija nije potrebna za

koriščeje ovih funkcija.

Korišćenje ProstogXML-a

Ispod je dat XML fajl:

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

Ţelimo da izvezemo imena elemenata i podataka iz iznad datog XML fajla.

Evo sta uraditi:

1. Učitati XML fajl

2. Dati ime prvog elementa

3. Kreirati petlju u svakom podčvorištu, koristeći children() funkciju

4. Izvesti ime i podatak elementa za svako podčvorište

Primer

<?php

$xml = simplexml_load_file("test.xml");

echo $xml->getName() . "<br />";

foreach($xml->children() as $child)

{

echo $child->getName() . ": " . $child . "<br />";

}

?>

Izlazni rezultat datog koda iznad će biti:

note

to: Tove

from: Jani

heading: Reminder

body: Don't forget me this weekend!

Page 103: PHP - Almir Sinanovic

Almir Sinanović | PHP 103

Više o PHP ProstomXML-u Za više informacija o PHP ProstaXML funkcijama, posetite našu PHP SimpleXML Reference.

AJAX Uvod

AJAX = Asinhroni JavaScript i XML

AJAX nije novi programski jezik, ali je nova tehnologija za kreiranje bolje,brze i mnogo

interaktivnije mrezne aplikacije.

Sa AJAX-om, JavaScript moze direktno komunicirati sa serverom, sa XMLHttpRequest

objektom. Uz ovaj objekat, JavaScript razmenjuje podatake sa web serverom, bez ponovnog

učitavanja stranice.

AJAX koristi asinhroni podatak prenoseći (HTTP zahtev) izmedju pretrazivača i web servera,

omogućavajući web strane da zahtevaju male bitove informacija od servera umesto cele strane.

AJAX tehnika pravi internet aplikakacije manjim,brţim i mnogo korisnijim.

AJAX je zasnovan na internet standardima

AJAX je zasnovan na sledecim web standardima:

JavaScript

XML

HTML

CSS

AJAX aplikacija je nezavistan pretraţivač i platforma.

AJAX se bavi boljim internet aplikacijama

Intenet aplikacije imaju puno naknada preko desktop aplikacija,one mogu dostići

veću paţnju ,one su lakše za instaliranje i podršku,i lakše za predstavljanje.

Kako god internet aplikacija nije uvek ``bogata`` i korisna kao tradicionalne desktop

aplikacije.

Pomoću AJAKS-a, internet aplikacije mogu biti bogatije i više korisnije.

Page 104: PHP - Almir Sinanovic

Almir Sinanović | PHP 104

Počnite da koristite AJAX već danas

Tu nema niceg novog.

AJAX je baziran na postojećim standardima. Ti standardi su korišćeni od strane programera-ljudi

koji su odgovorni već nekoliko godina.

PHP i AJAX

Ne postoji takva stvar kao što je AJAX server. AJAX radi u tvom pretraţivaču.AJAX koristi http

zahtev da bi zahtevao male delove informacija od servera,umesto čitavih stranica.

U našem PHP vodiču mi ćemo demonstrirati kako web stranica moţe da komunicira sa PHP web

serverom na mreţi.

AJAX XMLHttpRequest

Princip AJAX-a je XMLHttpRequest objekat.

AJAKS koristi XMLHttpRequest objekat

Da bi ste dobili ili poslali informaciju od/do baze podataka ili datoteke na server sa

tradicionalnom JavaScript-om, moraćete da napravite HTML formu, i korisnik će morati da

kliknite na dugme “Pošalji” da pošalje / dobijete informacije, sačeka server da odgovori, I onda

će se učitati nova stranica sa rezultatima. Zato što server vraća novu stranicu svaki put kada

korisnik prosledi ulaz, tradicionalne web aplikacije se mogu pokretati sporo i imaju tendenciju da

budu manje korišćene.

Sa AJAK-om, JavaScript komunicira direktno sa serverom, kroz JavaScript XMLHttpRequest

objekat.

Sa XMLHttpRequest objekatom, web stranica moţe da zahteva da dobije odgovor od web

servera - bez ponovnog učitavanja stranice. Korisnik će ostati na istoj stranici, i on ili ona neće

primetiti da skripta šalje zahtev stranici, ili da šalje podatke na server u pozadini.

XMLHttpRequest objekat je podrţan u svim većim pretraţivačima (Internet Explorer, Firefox,

Chrome, Opera i Safari).

Page 105: PHP - Almir Sinanovic

Almir Sinanović | PHP 105

AJAKS – Pomoć pretraživaču

Svi novi pretraţivači u sebi imaju ugraĎene JavaScript XMLHttpRequest objekte za kreiranje

XMLHttpRequest objekata (IE5 i IE6 koriste ActiveXObject-e).

JavaScript kod za kreiranje XMLHttpRequest objekta:

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

Sledeće poglavlje pokazuje kako se koristi XMLHttpRequest objekat za komunicirane sa PHP

serverom.

Više o XMLHttpRequest objektima

Ako ţelite da pročitate više o XMLHttpRequest, posetite naš Ajaks Tutorial.

PHP Primer – AJAX Predlozi

AJAX moţe da se koristi za kreiranje više interaktivnih aplikacija.

AJAX Predloženi primer

Sledeći primer u AJAX-u će demonstrirati kako web stranica moţe da komunicira sa web

serverom, dok korisnik unosi podatke u HTML formu.

Otkucajte ime u polje za unos ispod:

Ime:

Predlozi:

Objašnjen primer - HTML stranica

HTML stranica sadrţi link na spoljni JavaScript, jednostavanu HTML formu, i polje za unos:

Page 106: PHP - Almir Sinanovic

Almir Sinanović | PHP 106

<html>

<head>

<script type="text/javascript" src="clienthint.js"></script>

</head>

<body>

<form>

Ime: <input type="text" id="txt1" onkeyup="showHint(this.value)" />

</form>

<p>Predlozi: <span id="txtHint"></span></p>

</body>

</html>

HTML formu iznad ima polje za unos nazivanu "txt1" . Atribut dogaĎaja za ovo polje definiše

funkciju da pokreće onkeyup dogaĎaj.

Pasus ispod obrasca sadrţi polje za unos nazivanu "txtHint" . Polje za unos se koristi kao čuvar

mesta za podatake preuzete sa web servera.

Kada korisnik ubaci podatake, funkciju koja se zove "showHint()" se izvrši. Izvršenja funkcija se

pokreće od strane "onkeyup" dogaĎaja.

Drugim rečima: Svaki put kada korisnik pomera prst od tastature taster unutar input polja,

funkcija se zove showHint.

Objašnjen primer - JavaScript kod

Ovo je JavaScript kod, koji se nalaze u datoteci ``clienthint.js``

var xmlhttp

function showHint(str)

{

if (str.length==0)

{

document.getElementById("txtHint").innerHTML="";

return;

}

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("Vaš pretraţivač ne podrţava XMLHTTP!");

return;

}

Page 107: PHP - Almir Sinanovic

Almir Sinanović | PHP 107

var url="gethint.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

}

}

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

ShowHint () funkcija

ShowHint () funkcija se izvršava svaki put kada se unese karakter u "txt1" polje za unos.

Ako ne postoji unos u polje za unos (str.lengthght> 0), showHint () funkcija izvršava sledeće:

Poziva GetXmlHttpObject() funkciju da bi kreirao objekat XMLHTTP

Definiše URL (ime fajla) za slanje na server

Dodaje parametar (q) na URL adresu sa sadrţajem input polja

Dodaje nasumični broj kako bi se sprečilo server koristeći sačuvane datoteke

Svaki put kada se readyState promene podešavanja, stateChanged () funkcija će se

izvršiti

Otvara XMLHTTP objekat sa zadatim URL-om

Šalje HTTP zahtev na server

Page 108: PHP - Almir Sinanovic

Almir Sinanović | PHP 108

Ako je polje za unos prazno, funkcija jednostavno briše sadrţaj txtHint čuvara mesta.

GetXmlHttpObject() funkcija

ShowHint () funkcija iznad poziva funkciju nazvanu GetXmlHttpObject ().

Svrha GetXmlHttpObject () funkcije je da reši problem kreiranja različitih XMLHTTP objekata

za različite pretraţivače.

StateChanged () funkcija

StateChanged () funkcija se izvršava svaki put kada se stanje XMLHTTP objekta promeni.

Kada se stanje promeni na 4 ("potpuno"), sadrţaj tkstHint čuvara mesta se ispunjeni

odgovarajućim tekstom.

Objašnjen primer – PHP strana

Kod u `gethint.php` proverava niz imena i daje odgovarajuća imena za klijenta:

<?php

// Ispuniti niz sa imenima

$a[]="Anna";

$a[]="Brittany";

$a[]="Cinderella";

$a[]="Diana";

$a[]="Eva";

$a[]="Fiona";

$a[]="Gunda";

$a[]="Hege";

$a[]="Inga";

$a[]="Johanna";

$a[]="Kitty";

$a[]="Linda";

$a[]="Nina";

$a[]="Ophelia";

$a[]="Petunia";

$a[]="Amanda";

$a[]="Raquel";

$a[]="Cindy";

$a[]="Doris";

$a[]="Eve";

$a[]="Evita";

$a[]="Sunniva";

$a[]="Tove";

Page 109: PHP - Almir Sinanovic

Almir Sinanović | PHP 109

$a[]="Unni";

$a[]="Violet";

$a[]="Liza";

$a[]="Elizabeth";

$a[]="Ellen";

$a[]="Wenche";

$a[]="Vicky";

//uzima q parametar iz URL-a

$q=$_GET["q"];

//Pretraţi medju svim nagoveštajima iz niza ako je duţina q>0

if (strlen($q) > 0)

{

$hint="";

for($i=0; $i<count($a); $i++)

{

if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))

{

if ($hint=="")

{

$hint=$a[$i];

}

else

{

$hint=$hint." , ".$a[$i];

}

}

}

}

// Postavi izlaz da "nema komentar" ako se ne naĎe nagoveštaj

// ili ispravi vrednosti

if ($hint == "")

{

$response="nema komentar";

}

else

{

$response=$hint;

}

//izlazni odgovor

echo $response;

?>

Page 110: PHP - Almir Sinanovic

Almir Sinanović | PHP 110

Ako postoji bilo kakav tekst poslan iz JavaScript-a (strlen($q) > 0), dešava se sledeće:

1. PronaĎi podudaranje imena u karakterima poslne iz JavaScript-a

2. Ako se ne naĎe podudaranje, postavite odgovarajuči string na `nema predlog`

3. Ako je pronaĎeno jedno ili više podudaranja imena, postavite odgovor na sva ova imena

4. Odgovor se šalje na `txtHint` čuvar mesta

PHP Primer - AJAX i XML

AJAKS moţe da se koristi za interaktivnu komunikaciju sa XML datotekom.

AJAX XML primer

Sledeći primer će demonstrirati kako web stranica moţe da donese podatke iz XML datoteke sa

AJAX tehnologijom.

Izaberi CD Bob Dylan

Informacije CD-a će biti izlistane ovde...

Objašnjen primer – HTML strana

HTML stranica sadrţi vezu sa eksternom JavaScript-om,HTML formom, i polja za unos:

<html>

<head>

<script type="text/javascript" src="selectcd.js"></script>

</head>

<body>

<form>

Izaberi CD:

<select name="cds" onchange="showCD(this.value)">

<option value="Bob Dylan">Bob Dylan</option>

<option value="Bonnie Tyler">Bonnie Tyler</option>

<option value="Dolly Parton">Dolly Parton</option>

</select>

</form>

Page 111: PHP - Almir Sinanovic

Almir Sinanović | PHP 111

<div id="txtHint"><b> Informacije CD-a će biti izlistane ovde..</b></div>

</body>

</html>

Kao što vidite to je samo jednostavna HTML forma sa jednostavnim padajućim meniom pod

nazivom `cds`.

Ispod obrasca će se koristiti <div> kao čuvar mesta za informacije preuzete sa web servera.

Kada korisnik izabere podatak, funkciju koja se zove `showCD` se izvrši. Izvršenje funkcije se

pokreće od strane `onchange` dogaĎaja. Drugim rečima: Svaki put kada korisnik promeni

vrednost u padajućem polju poziva se showCD funkcija.

Objašnjen pimer - JavaScript kod

Ovo je JavaScript kod koji se nalaze u datoteci `selectcd.js`

var xmlhttp

function showCD(str)

{

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("Vaš pretraţivač ne podrţava AJAX!");

return;

}

var url="getcd.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

}

}

Page 112: PHP - Almir Sinanovic

Almir Sinanović | PHP 112

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

StateChanged () i GetXmlHttpObject funkcije su iste kao u PHP AJAX Predloţi poglavlju,

moţete da odete tamo za objašnjenje tih.

ShowCD () Funkcija

Kada se CD u padajućem meniju izabere, showCD () funkcija izvršava sledeće:

1. Poziva GetXmlHttpObject () funkciju da bi kreirala XMLHTTP objekat

2. Definiše URL adresu (ime fajla) za slanje na server

3. Dodaje parametar (q) na URL sa sadrţajem padajućeg menija

4. Dodaje nasumični broj kako bi se sprečio server da koristi sačuvane datoteke

5. Svaki put kada se readyState promene podešavanja, stateChanged() funkcija će se izvršiti

6. Otvara XMLHTTP objekat sa zadatim URL-om

7. Šalje HTTP zahtev na server

Objašnjen primer - PHP Strana

Stranica servera nazvana po JacaScript-i, je PHP datoteka nazvana "getcd.php".

PHP skripta učita XML dokument, `cd_catalog.xml`, pokreće upit nad XML datotekom, i vraća

rezultat kao HTML:

<?php

$q=$_GET["q"];

$xmlDoc = new DOMDocument();

$xmlDoc->load("cd_catalog.xml");

$x=$xmlDoc->getElementsByTagName('ARTIST');

Page 113: PHP - Almir Sinanovic

Almir Sinanović | PHP 113

for ($i=0; $i<=$x->length-1; $i++)

{

//Izvrši samo elemente čvora

if ($x->item($i)->nodeType==1)

{

if ($x->item($i)->childNodes->item(0)->nodeValue == $q)

{

$y=($x->item($i)->parentNode);

}

}

}

$cd=($y->childNodes);

for ($i=0;$i<$cd->length;$i++)

{

//Process only element nodes

if ($cd->item($i)->nodeType==1)

{

echo($cd->item($i)->nodeName);

echo(": ");

echo($cd->item($i)->childNodes->item(0)->nodeValue);

echo("<br />");

}

}

?>

Kada je CD sadrzaj poslat iz JavaScript-a na PHP stranicu, dešava se sledeće:

1. PHP kreira XML DOM objekat

2. Pronalazi sve <artist> elemente koji odgovaraju imenu poslatom iz JavaScript-a

3. Prikazuje informacije tog albuma (šalje na "txtHint" čuvar mesta)

PHP Primer - AJAX i MySQL

AJAX moţe da se koristi za interaktivnu komunikaciju sa bazom podataka.

AJAX primer baze podataka

Sledeći primer će demonstrirati kako web stranica moţe da donese informacije iz baze podataka

sa AJAX tehnologija.

Page 114: PHP - Almir Sinanovic

Almir Sinanović | PHP 114

Izaberi ličnost Peter Griffin

Informacije ličnosti će biti izlistane ovde.

Objačnjen primer - MySqL baza podataka

Tabela baze podataka koje koristimo u ovom primeru izgleda ovako:

id Ime Prezime Godina Mesto roĎenja Posao

1 Peter Griffin 41 Quahog Pivara

2 Lois Griffin 40 Newport Učitelj klavira

3 Joseph Swanson 39 Quahog Policajac

4 Glenn Quagmire 41 Quahog Pilot

Objašnjen primer – HTML stranica

HTML stranica sadrţi vezu na eksterni JavaScript, HTML formu, i polje za unos.

<html>

<head>

<script type="text/javascript" src="selectuser.js"></script>

</head>

<body>

<form>

Izaberi člana:

<select name="users" onchange="showUser(this.value)">

<option value="1">Peter Griffin</option>

<option value="2">Lois Griffin</option>

<option value="3">Glenn Quagmire</option>

<option value="4">Joseph Swanson</option>

</select>

</form>

<br />

<div id="txtHint"><b> Informacije ličnosti će biti izlistane ovde.</b></div>

</body>

</html>

Kao što vidite to je samo jednostavna HTML forma sa padajućim menijem pod nazivom `klijent`

Ispod <div> će se koristiti forma kao čuvar mesta za informacije preuzete sa web servera.

Page 115: PHP - Almir Sinanovic

Almir Sinanović | PHP 115

Kada korisnik izabere podatke, funkcija koja se zove `showUser ()` se izvršava. Izvršenje

funkcije se pokreće od strane `onchange` dogaĎaja.

Drugim rečima: Svaki put kada korisnik promeni vrednost u padajućem meniju poziva se

funkcija showUser ().

Objačnjen primer – JacaScript kod

Ovo je JavaScript kod sačuvan u fajlu `selectuser.js`:

var xmlhttp;

function showUser(str)

{

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("Pretraţivač ne podrţava HTTP zahtev");

return;

}

var url="getuser.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

}

}

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

Page 116: PHP - Almir Sinanovic

Almir Sinanović | PHP 116

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

StateChanged () i GetXmlHttpObject funkcije su iste kao u PHP AJAX Predloţi poglavlju,

moţete da odete tamo za objašnjenje istih.

showUser() Funkcija

Kada osoba u padajućeg menija izabere, showUser() funkcija izvršava sledeće:

1. Poziva GetXmlHttpObject () funkciju da bi kreirala XMLHTTP objekat

2. Definiše URL adresu (ime fajla) za slanje na server

3. Dodaje parametar (q) na URL sa sadrţajem padajućeg menija

4. Dodaje nasumični broj kako bi se sprečio server da koristi sačuvane datoteke

5. Svaki put kada se readyState promene podešavanja, stateChanged() funkcija će se izvršiti

6. Otvara XMLHTTP objekat sa zadatim URL-om

7. Šalje HTTP zahtev na server

Objašnjen primer – PHP stranica

PHP stranica pozvana od JavaScript-a, zove se "getuser.php".

PHP skript pokreće SQL upit nad MYSQL bazom podataka, i vraća rezultat kao HTML:

<?php

$q=$_GET["q"];

$con = mysql_connect('localhost', 'peter', 'abc123');

if (!$con)

{

die('Ne moţe da se konektuje: ' . mysql_error());

}

mysql_select_db("ajax_demo", $con);

$sql="SELECT * FROM user WHERE id = '".$q."'";

$result = mysql_query($sql);

echo "<table border='1'>

<tr>

<th>Firstname</th>

<th>Lastname</th>

Page 117: PHP - Almir Sinanovic

Almir Sinanović | PHP 117

<th>Age</th>

<th>Hometown</th>

<th>Job</th>

</tr>";

while($row = mysql_fetch_array($result))

{

echo "<tr>";

echo "<td>" . $row['Ime'] . "</td>";

echo "<td>" . $row['Prezime'] . "</td>";

echo "<td>" . $row['Godina'] . "</td>";

echo "<td>" . $row['Mesto roĎenja'] . "</td>";

echo "<td>" . $row['Posao'] . "</td>";

echo "</tr>";

}

echo "</table>";

mysql_close($con);

?>

Kada je upit poslan sa JavaScript-e na PHP stranicu, dešava se sledeće:

1. PHP otvara vezu sa MYSQL serverom

2. Ispravna osoba je pronaĎena

3. HTML tabela je kreirana, i polja sa podacima, i poslana nazad u `txtHint` čuvar mesta

PHP Primer – responseXML

responseTekst daje HTTP-u odgovor kao string.

responseXML daje odgovor kao XML.

AJAX ResponseXML primer

ResponseXML daje podešavanja u XML dokument objekta, koji se moţe ispitati i analizirati

pomoću DOM-a.

Sledeći primer će demonstrirati kako web stranica moţe da donese informacije iz baze podataka

sa AJAX tehnologijom. Izabrani podaci iz baze podataka će ovaj put biti konvertovani u XML

dokument, a zatim će koristiti za izdvajanje DOM vrednosti koje će biti prikazane.

Page 118: PHP - Almir Sinanovic

Almir Sinanović | PHP 118

Ovaj primer moţe da izgleda isto kao i "PHP AJAX i MySQL" primeri u prethodnom poglavlju.

MeĎutim, postoji velika razlika: ovaj put smo dobili podatke iz PHP stranica u XML formatu,

koristeći responseXML funkciju.

Primanje odgovora kao XML dokumenta omogućava nam da aţuriramo ove stranice na nekoliko

mesta, umesto da samo primaju HTML izlaz, i prikazuje ga.

U ovom primeru ćemo aţurirati više elemenata sa informacijama koje dobijamo od baze

podataka.

Izaberi korisnika: Peter Griffin

Objašnjen primer – MySQL baza podataka

Tabela baze podataka koje koristimo u ovom primeru izgleda ovako:

id Ime Prezime Godina Mesto roĎenja Posao

1 Peter Griffin 41 Quahog Pivara

2 Lois Griffin 40 Newport Učitelj klavira

3 Joseph Swanson 39 Quahog Policajac

4 Glenn Quagmire 41 Quahog Pilot

Objašnjen primer – HTML stranica

HTML stranica sadrţi vezu na eksternim JavaScript-om, HTML formu, i nekoliko <span>

elemenata:

<html>

<head>

<script type="text/javascript" src="responsexml.js"></script>

</head>

<body>

<form>

Select a User:

<select name="users" onchange="showUser(this.value)">

<option value="1">Peter Griffin</option>

<option value="2">Lois Griffin</option>

<option value="3">Glenn Quagmire</option>

<option value="4">Joseph Swanson</option>

</select>

</form>

<h2><span id="firstname"></span>&nbsp;<span id="lastname"></span></h2>

Page 119: PHP - Almir Sinanovic

Almir Sinanović | PHP 119

<span id="job"></span>

<div style="text-align: right">

<span id="age_text"></span>

<span id="age"></span>

<span id="hometown_text"></span>

<span id="hometown"></span>

</div>

</body>

</html>

HTML obrazac sadrţi padajući meni pod nazivom `korisnici` sa ID i imenima iz tabele

baze podataka, opciono

<span> elementi su čuvari mesta za vrednosti koje će dobiti

Kada je korisnik izabran, funkcija koja se zove "showUser()" se izvršava (pokreće

`onchange` dogaĎaj)

Drugim rečima: Svaki put kada korisnik promeni vrednost u padajućem polju, showUser()

funkcija se pozove, i štampa rezultat u <span> elementima.

Objašnjen primer – JavaScript kod

Ovo je JavaScript kod koji se nalazi u datoteci "responsexml.js":

var xmlhttp;

function showUser(str)

{

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("Pretraţivač ne podrţava HTTP zahtev ");

return;

}

var url="responsexml.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

Page 120: PHP - Almir Sinanovic

Almir Sinanović | PHP 120

{

xmlDoc=xmlhttp.responseXML;

document.getElementById("Ime").innerHTML=

xmlDoc.getElementsByTagName("Ime")[0].childNodes[0].nodeValue;

document.getElementById("Prezime").innerHTML=

xmlDoc.getElementsByTagName("Prezime")[0].childNodes[0].nodeValue;

document.getElementById("Posao").innerHTML=

xmlDoc.getElementsByTagName("Posao")[0].childNodes[0].nodeValue;

document.getElementById("godina_tekst").innerHTML="Age: ";

document.getElementById("godina").innerHTML=

xmlDoc.getElementsByTagName("godina")[0].childNodes[0].nodeValue;

document.getElementById("mesto roĎenja_text").innerHTML="<br/>From: ";

document.getElementById("mesto roĎenja ").innerHTML=

xmlDoc.getElementsByTagName("mesto roĎenja")[0].childNodes[0].nodeValue;

}

}

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

Shoutopic () i GetXmlHttpObject funkcije su iste kao u PHP i MySQL AJAX poglavlju, moţete

da odete tamo za objašnjenje istih.

stateChanged () Funkcija

Kada je opcija u padajućem meniju izabrana, funkcija izvršava sledeće:

1. Setuje xmlDoc promenljive kao XML dokument, korišćenjem funkcije responseXML

2. Preuzima podatke iz XML dokumenta, i premešta u ispravan <span> element

Objašnjen primer – PHP Stranica

PHP stranica pozvana od JavaScript-e, zove se "responsexml.php".

Page 121: PHP - Almir Sinanovic

Almir Sinanović | PHP 121

PHP skript pokreće SQL upit ponovo u MySQL bazu podataka, i daje rezultat u XML

dokumentu:

<?php

$q=$_GET["q"];

$con = mysql_connect('localhost', 'peter', 'abc123');

if (!$con)

{

die('Ne moţe da se konektuje: ' . mysql_error());

}

mysql_select_db("ajax_demo", $con);

$sql="SELECT * FROM user WHERE id = ".$q."";

$result = mysql_query($sql);

header('Content-type: text/xml');

echo '<?xml version="1.0" encoding="ISO-8859-1"?>

<person>';

while($row = mysql_fetch_array($result))

{

echo "<ime>" . $row[' ime '] . "</ime>";

echo "<prezime>" . $row[' prezime '] . "</prezime>";

echo "<godina>" . $row[' godina '] . "</godina>";

echo "<mesto roĎenja>" . $row[' mesto roĎenja '] . "</ mesto roĎenja >";

echo "<posao>" . $row['posao'] . "</job>";

}

echo "</person>";

mysql_close($con);

?>

Kada se upit šalje sa JavaScript-e u PHP stranicu, dešava se sledeće:

1. Podešava promenljivu $q kao podatak za slanje u parametru q

2. Otvori vezu sa MySQL serverom

3. `Korisnik`-a sa navedenim ID-om naĎe

4. Podaci se šalju kao XML document

PHP Primer – AJAX Uživo pretraga

Page 122: PHP - Almir Sinanovic

Almir Sinanović | PHP 122

AJAX se moţe koristiti za vise-korisničku i interaktivnu pretragu.

AJAX uživo pretraga

U ovom primeru ćemo pokazati uţivo pretraţivanje, gde dobijate rezultate pretrage dok kucate.

Uţivo pretraga ima mnogo prednosti u odnosu na tradicionalno pretraţivanje:

Rezultati se prikazuju dok pišete

Rezultati se suţava dok nastavljate da kucate

Ako je rezultat preuzak, uklonite znakove da vidite više rezultata

Traţi po w3schools stranici u polju za unos ispod:

U gornjem primeru, rezultati se nalaze u XML dokumentu (links.xml). Da bi smo ovaj primer

umanjili I pojednostavili, samo osam rezultata pretrage je dostupno.

Objašnjen primer – HTMP stranica

HTML stranica sadrţi vezu na eksterni JavaScript, neke definicije stila, HTML formu, i div

elemente:

<html>

<head>

<script type="text/javascript" src="livesearch.js"></script>

<style type="text/css">

#livesearch

{

margin:0px;

width:194px;

}

#txt1

{

margin:0px;

}

</style>

</head>

<body>

<form>

<input type="text" id="txt1" size="30" onkeyup="showResult(this.value)" />

<div id="livesearch"></div>

</form>

Page 123: PHP - Almir Sinanovic

Almir Sinanović | PHP 123

</body>

</html>

HTML obrazac funkcioniše na sledeći način:

DogaĎaj se pokreće kada korisnik pritisne, oslobadja taster u polje za unos

Kada se aktivira dogaĎaj, funkcija showResult () se izvršava

<div id="livesearch"> Je čuvar mesta za podatke vraćene iz showResult () funkcije

Objašnjen primer – JavaScript kod

Ovo je JavaScript kod koji se nalaze u datoteci `livesearch.js`:

var xmlhttp;

function showResult(str)

{

if (str.length==0)

{

document.getElementById("livesearch").innerHTML="";

document.getElementById("livesearch").style.border="0px";

return;

}

xmlhttp=GetXmlHttpObject()

if (xmlhttp==null)

{

alert ("Vaš pretraţivač ne podrţava XML HTTP zahtev");

return;

}

var url="livesearch.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged ;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("livesearch").innerHTML=xmlhttp.responseText;

document.getElementById("livesearch").style.border="1px solid #A5ACB2";

}

Page 124: PHP - Almir Sinanovic

Almir Sinanović | PHP 124

}

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

GetXmlHttpObject() funkcija je ista kao u PHP AJAX Predlozi poglavlju.

The showResult() Funkcija

Ova funkcija se izvršava svaki put kada se ubaci karakter u polje za unos.Ako ne postoji unos u

tekstualnom polju (str.length == 0) ,funkcija vraća prazno polje I uklanja granice oko

nje.MeĎutim,ako postoji neki unos u polje za tekst,funkcija izvrčava sledeće:

1. Poziva GetXmlHttpObject() funkciju I kreira XMLHTTP objekat

2. Definiše URL (ime fajla) za slanje na server

3. Dodaje parametar (q) u URL sa sadrţajem polja za unos

4. Dodaje nasumični broj kako bi se sprečio server da koristi sačuvane datoteke

5. Svaki put kada se readyState podešavanja promene, stateChanged () funkcija će se izvršiti

6. Otvara XMLHTTP objekat sa zadatim URL-om

7. Šalje HTTP zahtev na server

stateChanged() Funkcija

Ova funkcija se izvršava svaki put kada se stanje XMLHTTP objekta promeni. Kada se stanje

promeni na 4 ( "potpuno"), sadrţaj txtHint čuvara mesta se ispuni odgovarajućim tekstom, I

granica se postavi oko polja.

Objašnjen primer – PHP stranica

PHP kod pozvan od strane JavaScript-a se zove "livesearch.php".

Kod pretraţuje XML datoteku za podudaranje naslova traţenog stringa I daje rezultat u HTML-

u:

Page 125: PHP - Almir Sinanovic

Almir Sinanović | PHP 125

<?php

$xmlDoc = new DOMDocument();

$xmlDoc->load("links.xml");

$x=$xmlDoc->getElementsByTagName('link');

//get the q parameter from URL

$q=$_GET["q"];

//lookup all links from the xml file if length of q>0

if (strlen($q) > 0)

{

$hint="";

for($i=0; $i<($x->length); $i++)

{

$y=$x->item($i)->getElementsByTagName('title');

$z=$x->item($i)->getElementsByTagName('url');

if ($y->item(0)->nodeType==1)

{

//find a link matching the search text

if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q))

{

if ($hint=="")

{

$hint="<a href='" .

$z->item(0)->childNodes->item(0)->nodeValue .

"' target='_blank'>" .

$y->item(0)->childNodes->item(0)->nodeValue . "</a>";

}

else

{

$hint=$hint . "<br /><a href='" .

$z->item(0)->childNodes->item(0)->nodeValue .

"' target='_blank'>" .

$y->item(0)->childNodes->item(0)->nodeValue . "</a>";

}

}

}

}

}

// Set output to "no suggestion" if no hint were found

// or to the correct values

if ($hint == "")

{

Page 126: PHP - Almir Sinanovic

Almir Sinanović | PHP 126

$response="no suggestion";

}

else

{

$response=$hint;

}

//output the response

echo $response;

?>

Ako postoji bilo kakav tekst poslan iz JavaScript-a (strlen($q) > 0), dešava se sledeće:

1. PHP kreira XML DOM objekat u "links.xml" datoteku

2. Petlja kroz sve <title> elemente da pronaĎete naslove koji odgovaraju tekstu poslanom iz

JavaScript-a

3. Setuje ispravan link i naslov u "$odgovor" promenljivoj.Ako se pronaĎe više od jedne

podatka, svi podati se dodaju na promenljivu

4. Ako ne pronaĎe nikakve rezultate, $ promenljiva odgovor se postavlja na "nema

komentar"

5. Štampa $odgovor promenljivu u "Livesearch" čuvar mesta

PHP Primer – AJAX RSS Čitač

RSS čitač se koristi za čitanje RSS feedova.

AJAX RSS Čitač

U ovom primeru ćemo vam pokazati RSS čitač, gde se sadrţaj iz RSS-a učita u stranicu bez

osveţavanja.

Izaberite RSS Feed: Google New s

RSS Feed će biti naveden ovde..

Objašnjen primer – HTML stranica

HTML stranica sadrţi vezu na eksterni JavaScript , HTML obrazac, i div element:

<html>

Page 127: PHP - Almir Sinanovic

Almir Sinanović | PHP 127

<head>

<script type="text/javascript" src="getrss.js"></script>

</head>

<body>

<form>

Select an RSS-feed:

<select onchange="showRSS(this.value)">

<option value="Google">Google News</option>

<option value="MSNBC">MSNBC News</option>

</select>

</form>

<p><div id="rssOutput">

<b> RSS Feed će biti naveden ovde..</b></div></p>

</body>

</html>

HTML obrazac funkcioniše na sledeći način:

1. DogaĎaj se pokreće kada korisnik pritisne, oslobadja ključ u polje za unos

2. Kada se aktivira dogaĎaj, funkcija showResult () se izvršava

3.<div id="livesearch"> Je čuvar mesta za podatke vraćene iz showResult () funkcije

Objašnjen primer – JavaScript kod

Ovo je JavaScript kod koji se nalaze u datoteci `livesearch.js`:

var xmlhttp;

function showRSS(str)

{

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("vaš pretraţivač ne podrţava XML HTTP zahtev");

return;

}

var url="getrss.php";

url=url+"?q="+str;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

Page 128: PHP - Almir Sinanovic

Almir Sinanović | PHP 128

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;

}

}

function GetXmlHttpObject()

{

if (window.XMLHttpRequest)

{

// code for IE7+, Firefox, Chrome, Opera, Safari

return new XMLHttpRequest();

}

if (window.ActiveXObject)

{

// code for IE6, IE5

return new ActiveXObject("Microsoft.XMLHTTP");

}

return null;

}

StateChanged () i GetXmlHttpObject funkcije su iste kao u PHP AJAX Predlozi poglavlju.

showRSS () Funkcija

Svaki put kada se izabere opcija u polje za unos, ova funkcija izvršava sledeće:

1. Poziva GetXmlHttpObject() funkciju da kreira objekat XMLHTTP

2. Definiše URL (ime fajla) za slanje na server

3. Dodaje parametar (q) u URL sa izabranih opcija iz padajuće liste

4. Dodaje nasumični broj kako bi se sprečilo da server koristi sačuvane datoteke

5. Svaki put kada se readyState podešavanja promene, stateChanged () funkcija će se izvršiti

6. Otvara XMLHTTP objekat sa zadatim URL-om

7. Šalje HTTP zahtev na server

Objašnjen primer – PHP stranica

PHP stranica pozvana od JavaScript koda se naziva "getrss.php":

<?php

//get the q parameter from URL

$q=$_GET["q"];

Page 129: PHP - Almir Sinanovic

Almir Sinanović | PHP 129

//find out which feed was selected

if($q=="Google")

{

$xml=("http://news.google.com/news?ned=us&topic=h&output=rss");

}

elseif($q=="MSNBC")

{

$xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");

}

$xmlDoc = new DOMDocument();

$xmlDoc->load($xml);

//get elements from "<channel>"

$channel=$xmlDoc->getElementsByTagName('channel')->item(0);

$channel_title = $channel->getElementsByTagName('title')

->item(0)->childNodes->item(0)->nodeValue;

$channel_link = $channel->getElementsByTagName('link')

->item(0)->childNodes->item(0)->nodeValue;

$channel_desc = $channel->getElementsByTagName('description')

->item(0)->childNodes->item(0)->nodeValue;

//output elements from "<channel>"

echo("<p><a href='" . $channel_link

. "'>" . $channel_title . "</a>");

echo("<br />");

echo($channel_desc . "</p>");

//get and output "<item>" elements

$x=$xmlDoc->getElementsByTagName('item');

for ($i=0; $i<=2; $i++)

{

$item_title=$x->item($i)->getElementsByTagName('title')

->item(0)->childNodes->item(0)->nodeValue;

$item_link=$x->item($i)->getElementsByTagName('link')

->item(0)->childNodes->item(0)->nodeValue;

$item_desc=$x->item($i)->getElementsByTagName('description')

->item(0)->childNodes->item(0)->nodeValue;

echo ("<p><a href='" . $item_link

. "'>" . $item_title . "</a>");

echo ("<br />");

echo ($item_desc . "</p>");

}

?>

Page 130: PHP - Almir Sinanovic

Almir Sinanović | PHP 130

Kada je opcija poslata iz JavaScript-a, dešava se sledeće:

1. PHP nalazi koji je RSS feed odabran

2. XML DOM objekat je kreiran za izabrani RSS

3. Elemente iz RSS kanala nalazi I štampa

4. Petlja kroz prva tri elementa i štampa rezultat

PHP Primer – AJAX Anketa

AJAX Anketa

Ovaj primer će pokazati anketu kada web stranice mogu prikazati rezultate bez ponovnog

učitavanja.

Da li vam se sviĎaju PHP i AJAX do sada?

Da

Ne

Objašnjen primer – HTML stranica

HTML stranica sadrţi vezu na eksterni JavaScript , HTML formu, i div elemenat:

<html>

<head>

<script type="text/javascript" src="poll.js"></script>

</head>

<body>

<div id="poll">

<h3> Da li vam se sviĎaju PHP i AJAX do sada??</h3>

<form>

Da:

<input type="radio" name="vote" value="0" onclick="getVote(this.value)" />

<br />Ne:

<input type="radio" name="vote" value="1" onclick="getVote(this.value)" />

</form>

</div>

Page 131: PHP - Almir Sinanovic

Almir Sinanović | PHP 131

</body>

</html>

HTML obrazac funkcioniše na sledeći način:

1. DogaĎaj se pokreće kada korisnik izabere `da` ili `ne` opciju

2. Kada se aktivira dogaĎaj, funkcija getVote () se izvršava

3. Podaci dobijeni iz getVote () funkcije će zameniti formular, u <div> oznaci

Objašnjen primer – JavaScript kod

Ovo je JavaScript kod koji se nalaze u datoteci `poll.js`:

var xmlhttp;

function getVote(int)

{

xmlhttp=GetXmlHttpObject();

if (xmlhttp==null)

{

alert ("Pretraţivač ne podrţava HTTP zahtev");

return;

}

var url="poll_vote.php";

url=url+"?vote="+int;

url=url+"&sid="+Math.random();

xmlhttp.onreadystatechange=stateChanged;

xmlhttp.open("GET",url,true);

xmlhttp.send(null);

}

function stateChanged()

{

if (xmlhttp.readyState==4)

{

document.getElementById("poll").innerHTML=xmlhttp.responseText;

}

}

function GetXmlHttpObject()

{

var objXMLHttp=null;

if (window.XMLHttpRequest)

{

Page 132: PHP - Almir Sinanovic

Almir Sinanović | PHP 132

objXMLHttp=new XMLHttpRequest();

}

else if (window.ActiveXObject)

{

objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");

}

return objXMLHttp;

}

StateChanged () i GetXmlHttpObject funkcije su iste kao u PHP AJAX Predlozi poglavlju.

getVote () Funkcija

Ova funkcija se izvršava kada su `da`ili `ne` izabrani u HTML obliku.

1. Poziva GetXmlHttpObject() funkciju da kreira objekat XMLHTTP

2. Definiše URL (ime fajla) za slanje na server

3. Dodaje parametar (glasanje) na URL sa sadrţajem input polja

4. Dodaje nasumični broj kako bi se sprečilo da server koristi sačuvane datoteke

5. Svaki put kada se readyState podešavanja promene, stateChanged () funkcija će se izvršiti

6. Otvara XMLHTTP objekat sa zadatim URL-om

7. Šalje HTTP zahtev na server

PHP stranica

Server strana pozvana od JavaScript kod-a je jednostavan PHP fajl pod nazivom `poll_vote.php`.

<?php

$vote = $_REQUEST['vote'];

//get content of textfile

$filename = "poll_result.txt";

$content = file($filename);

//put content in array

$array = explode("||", $content[0]);

$yes = $array[0];

$no = $array[1];

if ($vote == 0)

{

$yes = $yes + 1;

}

if ($vote == 1)

Page 133: PHP - Almir Sinanovic

Almir Sinanović | PHP 133

{

$no = $no + 1;

}

//insert votes to txt file

$insertvote = $yes."||".$no;

$fp = fopen($filename,"w");

fputs($fp,$insertvote);

fclose($fp);

?>

<h2>Result:</h2>

<table>

<tr>

<td>Yes:</td>

<td>

<img src="poll.gif"

width='<?php echo(100*round($yes/($no+$yes),2)); ?>'

height='20'>

<?php echo(100*round($yes/($no+$yes),2)); ?>%

</td>

</tr>

<tr>

<td>No:</td>

<td>

<img src="poll.gif"

width='<?php echo(100*round($no/($no+$yes),2)); ?>'

height='20'>

<?php echo(100*round($no/($no+$yes),2)); ?>%

</td>

</tr>

</table>

Izabrana vrednost se šalje iz JavaScript-a i dešava se sledeće:

1. Dobija sadrţaj iz `poll_result.txt` datoteke

2. Stavlja sadrţaj datoteke u promenljive i dodaje jednu u odabranu promenljivu

3. Ispisuje rezultat iz `poll_result.txt` datoteke

4. Štampa grafički prikaz rezultata ankete

Tekstualna datoteka

Tekstualna datoteka (poll_result.txt) je mesto gde se skladište podaci iz ankete.

To se čuva kao ovo:

Page 134: PHP - Almir Sinanovic

Almir Sinanović | PHP 134

0||0

Prvi broj predstavlja `Da` glasove, drugi broj predstavlja `Ne` glasove.

Napomena: Ne zaboravite da vaš web server omogućava da izmenite tekstualnu datoteku.

Nemojte davati pristup svakome, samo web serveru (PHP-u).