php - almir sinanovic
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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.
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
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.
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.
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
*/
?>
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.
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:
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
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.
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
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
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>
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;
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;
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.
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";
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:
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:
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!
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++;
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);
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
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>
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.
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.
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 ";
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
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!
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 />
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
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)
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.
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
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>
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
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'
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
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";
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);
?>
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 />";
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"];
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"];
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);
?>
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 />";
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:
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>
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'];
?>
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.
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
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
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],
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
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.
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.
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 ()
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");
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
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
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:
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.
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");
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:
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.
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();
}
?>
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);
}
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();
}
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
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.
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());
}
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);
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
(
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
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);
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))
{
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))
{
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>";
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)
{
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
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
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);
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");
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.
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.
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.
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.
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: ";
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
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
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
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
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
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!
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.
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).
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:
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;
}
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
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";
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;
?>
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>
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;
}
}
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');
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.
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.
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
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>
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.
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> <span id="lastname"></span></h2>
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)
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".
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
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>
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";
}
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:
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 == "")
{
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>
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);
}
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"];
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>");
}
?>
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>
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)
{
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)
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:
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).