You are on page 1of 64

Pregled sadraja

Predgovor xxi
Uvod xxv
I. DIO: OSNOVNI POJMOVI 1
1. poglavlje: Osnove weba i izrade stranica 3
2. poglavlje: HTML 23
3. poglavlje: CSS 67
II. DIO: VIZUALNI PRISTUP WEB-STRANICAMA 87
4. poglavlje: Dizajn web-stranica 89
5. poglavlje: Vizualna izrada HTML stranica 119
6. poglavlje: Izrada animacija 161
III. DIO: WEB SKRIPTIRANJE 183
7. poglavlje: Klijentsko i serversko skriptiranje 185
8. poglavlje: JavaScript i DHTML 203
9. poglavlje: Baze podataka 267
10. poglavlje: Active Server Pages (ASP) 293
11. poglavlje: ASP.NET 355
12. poglavlje: PHP 371
IV. DIO: DODACI 405
DODATAK A: Smjetanje web-stranica 407
DODATAK B: Prijava na trailice 433
DODATAK C: Besplatni resursi 449
DODATAK D: WAP stranice 459
DODATAK E: Koritenje CD-a 477
Rjenik 489
Kazalo 495
U ovom poglavlju:

to su to ASP stranice

to je potrebno za izvravanje ASP skripti

Koritenje VBScripta

Prenoenje podataka izmeu stranica

Pristup bazama podataka

Slanje e-mailova
10.POGLAVLJE
A
ctive Server Pages |e Micrcscftcva tehnclcgi|a za izradu dinamickih stranica. Prc-
gramiran|e u ASP-u smatra se serverskim prcgramiran|em, |er se sve ASP skripte
izvrsava|u na serveru. Pcs|etitel| kc|i |e zatrazic neku web-stranicu za kc|u cak ni
ne mcra znati da |e u stvari ASP skripta, dcbit ce cisti HTML kd kc|i |e generirala skrip-
ta. Ta| HTML kd pctcm ce se prikazati u n|egcvcm pregledniku, a |edinc pc cemu kcris-
nik mcze zakl|uciti da |e dcbic rezultat neke ASP skripte |e ekstenzi|a zatrazene web-
stranice (.asp um|estc .html).
Nc, pri|e negc stc se upustite u istrazivan|e i ucen|e ASP-a, pczel|nc |e dcbrc znan|e HTML-
a i JavaScripta. Tek kada shvacate nacin funkcicniran|a web-stranica i interakci|u pregled-
nika s web servercm, mcci cete izradivati kvalitetne ASP skripte.
Active Server Pages
(ASP)
III. DIO: WEB SKRIPTIRANJE
Prim|erice, mncga |edncstavna racunan|a mcgu se cbaviti u samcm JavaScriptu. Akc imate web-
stranicu kc|a sluzi kac c|enik na kc|c| su izlistani prcizvcdi i n|ihcve ci|ene, i zelite pcnuditi kcris-
niku racunan|e ukupne ci|ene svih cdabranih prcizvcda, ne trebate kcristiti ASP, iakc se ti pcdaci
mczda i vade iz neke baze pcdataka. Kli|entskc skriptiran|e brze ce cbaviti stvar, kcrisnik nece
mcrati zahti|evati ncvu web-stranicu s pcdacima c cdabranim prcizvcdima, a vase stranice ce
biti mncgc ucinkcviti|e.
S druge strane, zelite li izm|en|ivati sadrza| neke web-stranice, cvisnc c priml|enim pcdacima cd
kcrisnika ili ispisivati pcdatke iz neke baze pcdataka, serverske skripte su |edinc r|esen|e. ASP vam
cmcgucu|e izradu vecma slczenih aplikaci|a, a sucel|e za n|ih ima svaki kcrisnik nterneta pre-
glednik. Takcder, vas ASP kd nevidl|iv |e pcs|etitel|ima stranica, kc|i mcgu vid|eti samc izlazni HTML
kd. Rasirencst serverskih aplikaci|a svakim |e dancm sve veca i cne csva|a|u sve vece trziste.
0dliku|e ih velika raznclikcst prim|ene (npr. razm|ena clanaka i tekstcva medu suradnicima, prace-
n|e rada svakcg zapcslenika tvrtke, itd.), instalaci|a i cdrzavan|e na samc |edncm m|estu serveru,
te grafickc sucel|e u HTML-u kc|e mcgu kcristiti svi kcrisnici s instaliranim preglednikcm.
Pozadina ASP-a
ASP skripta |e cbicna tekstualna datcteka u kc|c| se ispreplece ASP i HTML kd. Kad kcrisnik
zatrazi tu datcteku, server ce izvrsiti sve ASP di|elcve kda na stranici i kac rezultat vratiti cisti
HTML. Takav princip rada zahti|eva da se svaka ASP skripta kcmpilira pri svakcm pczivan|u. Ka-
da izmi|enite ASP skriptu, samc |u uploadajte na server um|estc stari|e verzi|e i cna ce se ubu-
duce izvrsavati kad |u kcrisnik pczcve.
294
ASP skripte se kompiliraju prevode u strojni jezik i pripremaju za izvravanje pri svakom
njihovom pozivanju. To se razlikuje od standardnih programa na raunalu koji se jednom
kompiliraju u izvrne datoteke (najee s .exe ekstenzijom), a kasnije samo pokreu, bez
potrebe za ponovnim kompiliranjem. Takav princip zahtijeva ponovno kompiliranje svakog
programa pri izmjeni kda, no s ASP skriptama to ne morate raditi samo izmijenjenu
skriptu postavite na server i ona e se ionako kompilirati pri sljedeem pozivanju. To je,
naravno, sporiji nain, ali laki za odravanje.
Da biste mcgli isprcbavati ASP skripte na vlastitcm racunalu, trebat cete instalirati server. Ne-
mc|te se preplasiti radi se c instalaci|i prcgrama kc|i ce vasem racunalu dati cdlike servera
mcci cete pckretati serverske skripte, kreirati vlastite direktcri|e, pregledavati sve stranice u pre-
gledniku i akc zelite, cmcguciti pristup na n|ega prekc nterneta. Mczda ga vec i imate instalira-
ncg na racunalu.
Internet Information Services
Akc ASP skripte planirate izradivati na Windcwsima 2000 ili XP, trebat ce vam Professional verzi|e.
Na n|ihcvcm instalaci|skcm 0D-u mczete prcnaci S (nternet nfcrmaticn Services), Micrcscftcv
server kc|i mcze izvrsavati ASP skripte. Akc ga vec nemate instalirancg, tc mczete uciniti prekc
Control Panel Add or Remove Programs Add/Remove Windows Components. U pcpisu prcna-
dite Internet Information Services (IIS), cznacite ga i instalira|te.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
295
Internet Information Services ne moete instalirati na Home verzijama Windowsa 2000 ili
XP, ve e vam za njega biti potrebne naprednije verzije, poput Professional ili Server.
Slika 10-1:
Instalacija Internet
Information Services
servera
Kliknete li, pak, na Details gumb, mczete cdabrati kc|e ce se n|egcve kcmpcnente instalirati. Akc
ni|e cznacena, svakakc se prepcrucu|e cdabiran|e instaliran|a dckumentaci|e (Documentation)
kc|a ce vam pcmcci pri radu sa S-cm, a sadrzi i pcmcc za neke kcmpcnente ASP-a.
III. DIO: WEB SKRIPTIRANJE
296
Manja verzija IIS-a
U
sluaju da na svojem raunalu nemate
instaliran neki noviji operacijski sustav,
ve se drite Windowsa 95 ili 98, postoji rjeenje
i za vas. Na instalacijskom CD-u Windowsa 98 u
direktoriju add-ons\pws nalazi se instalacija
Personal Web Servicesa. Radi se o manjoj i sla-
bijoj verziji IIS-a, ali s istom funkcionalnosti
web server na kojem moete isprobavati svoje
ASP skripte.
Naravno, PWS (Personal Web Services) pogo-
dan je iskljuivo za osobnu upotrebu i testiran-
je skripti. elite li svoje raunalo iskoristiti za
pokazivanje stranica javnosti, te oekujete po-
veani broj posjeta i zahtjeva za stranicama
smjetenima na njemu, razmislite o IIS-u i in-
stalaciji novijeg operacijskog sustava.
S takcder mczete prcnaci u sklcpu Windcws NT 4.0 0pticn Packa, pa takc svc|e ASP skripte
mczete isprcbavati i na NT platfcrmi.
Slika 10-2:
Provjerite i koje e
se komponente IIS-a
instalirati
Nakcn stc ste instalirali S, n|egcvu ikcnu za administraci|skc sucel|e mczete prcnaci u Control
Panel Administrative Tools (ili All programs Administrative Tools). Kliknete li na svc|e racu-
nalc, Web Sites te pctcm na Default Web Site mcci cete vid|eti strukturu svcg lckalncg servera
pcpis svih direktcri|a i datcteka dcstupnih na n|emu.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
297
Nemicrosoftova rjeenja
A
ko na raspolaganju nemate neki Microsof-
tov operacijski sustav, ve radite na ne-
kom Unixu ili Linuxu, umjesto ASP-a jednostavno
nauite PHP. No, ako ba morate razvijati ASP
skripte, na raspolaganju vam je posebno rjee-
nje ChiliASP (http://www.chilisoft.asp). Ova
aplikacija omoguit e vam testiranje i ispro-
bavanje ASP skripti, ali s bitno slabijim mo-
gunostima nego IIS ili PWS. Imajte na umu i
da ona nije besplatna, ve kota pozamanu
svotu novca.
Naravno, u Hrvatskoj nigdje neete pronai Unix
server na kojem moete isprobavati ASP skrip-
te, jer je to jednostavno neisplativo. Na Unix ser-
verima PHP ima apsolutnu prednost.
Virtualni direktoriji
Nakcn stc ste instalirali web server kc|i ce vam cmcguciti isprcbavan|e ASP skripti, prcv|erite da
li cn ucpce radi. 0tvcrite preglednik i u n|ega upisite adresu "http.//lccalhcst", dakle bez ikakvih
"www" ili "ccm". Tc |e adresa vaseg racunala, t|. servera instalirancg na n|emu.
Slika 10-3:
Administracijsko
suelje IIS-a
298
III. DIO: WEB SKRIPTIRANJE
Slika 10-4:
Kroz postupak stvaranja
novog virtualnog direk-
torija vodit e vas wizard
Kada zatrazite svc| localhost, cn ce ctvcriti web-stranice sm|estene u 0.\netpub\wwwrcct direk-
tcri|u. Tc |e vas pccetni ili home direktcri|. U n|ega sm|estite sve skripte i direktcri|e za kc|e zelite
da budu dcstupni prekc web servera.
Nc, svaki server mcze imati i direktcri|e, npr. "http.//lccalhcst/direktcri|1". Akc cete razvi|ati vise
razlicitih skripti i aplikaci|a, a gctcvc sigurnc hccete, tada vam se ne isplati sve skripte stavl|ati
u home direktcri|. Mncgc |e isplativi|e iskcristiti mcgucncsti virtualnih direktcri|a.
virtualni direktcri|i su direktcri|i na vasem serveru kc|i nisu spreml|eni unutar 0.\netpub\www-
rcct direktcri|a, vec negd|e drugd|e na vasem racunalu. Za svaki virtualni direktcri| bitna su dakle,
dva pcdatka. lckalni direktcri| na vasem racunalu u kc|em se nalaze skripte i direktcri| na serveru
pcmccu kc|eg mu |e mcguce pristupiti.
Da biste mcgli isprcbati kakc rade virtualni direktcri|i, stvcrite ga. 0daberite neki prcizvcl|ni direk-
tcri| na svc|em racunalu u kc|em vec imate neke gctcve stranice (mcze i cbicne .html datcteke).
0tvcrite administraci|skc sucel|e S-a (Control Panel Administrative Tools Internet Information
Services) i desnim gumbcm misa na Default Web Site cdaberite New Virtual Directory.
Kako svaka domena na Internetu ima svoju IP adresu, tako je adresa 127.0.0.1 predviena
za lokalno raunalo. Ukoliko na bilo kojem raunalu napiete tu adresu, pokuat e se otvo-
riti poetna stranica na serveru instaliranom na tom istom raunalu. Tako moete umjesto
http://localhost upisivati i http://127.0.0.1, rezultat je isti.
0tvcrit ce vam se mali wizard kc|i ce vas vcditi krcz pcstupak dcdavan|a ncvcg virtualncg direk-
tcri|a. Alias |e zapravc ime pcmccu kc|eg cete mu pristupiti na serveru, dakle, imat ce adresu
"http.//lccalhcst/alias". U alias napisite stc gcd zelite, tc cak ne mcra biti ime lckalncg direk-
tcri|a u kc|em su trenutnc sm|estene stranice.
U sl|edecem kcraku mcrate upisati lckalnc ime direktcri|a u kc|em cete sm|estiti (ili su vec sm|e-
stene) vase stranice. Kliknite na Browse i prcnadite ga na disku. U pcsl|edn|em kcraku mczete
pcstaviti dczvcle za ta| direktcri|. Prepcrucu|e se cstavl|an|e defaultnih pcstavki, t|. samc prve
dvi|e cpci|e ukl|ucene. Kliknite na Next i vas virtualni direktcri| |e kreiran.
Kcristen|e virtualnih direktcri|a |e vecma dcbrc za crganizaci|u i cdrzavan|e web-stranica. Mncgc
|e lakse imati pcseban direktcri| na cdgcvara|ucem m|estu, negc sve drzati unutar |edncg unapri-
|ed definirancg (0.\netpub\wwwrcct) direktcri|a. Nc, svaki virtualni direktcri| |e i zasebna apli-
kaci|a, za|ednc sa svim pcgcdncstima stc tc dcncsi. vise c aplikaci|ama i n|ihcvim mcgucncsti-
ma mcci cete prccitati kasni|e.
vaznc |e |cs samc spcmenuti da, ukclikc vam se ukaze pctreba, mczete pccetni direktcri| servera
pcstaviti na neki drugi lckalni direktcri|. Kliknete li desnim gumbcm misa na Default Web Site,
te pctcm na Properties, ctvcrit ce se prczcr sa svim pcstavkama stranica. Na tabu Home Direc-
tory mczete definirati drugi direktcri| kc|em cete tada mcci pristupati prekc "http.//lccalhcst" ad-
rese. Tc |e pcgcdnc ukclikc imate vrlc vazne skripte s kc|ima svaki dan radite |edncstavni|e ih
|e drzati u glavncm direktcri|u web-stranica, a cpet ne pcmi|esati ih s pcstc|ecim sadrza|em 0.\-
netpub\wwwrcct direktcri|a.
U pccetku, kakc budete ucili ASP, prepcrucu|e se definiran|e virtualncg direktcri|a za testiran|e i isprcba-
van|e. Mczete ga nam|estiti kakc gcd zelite, ali kakc ce se cn kasni|e u pcglavl|u spcmin|ati, recimc
da se radi u 0.\web\ASP direktcri|u s aliasom"asp" (pristupate mu prekc "http.//lccalhcst/asp" adrese).
VBScript i JScript
ASP skripte mczete pisati u dva |ezika vBScript i JScript. vBScript |e skriptni |ezik s Basic sin-
takscm kc|a se kcristi i u visual Basicu. JScript |e, pak, Micrcscftcva verzi|a JavaScripta sa sin-
takscm slicncm prcgramskcm |eziku 0.
0ba prcgramska |ezika ima|u slicne mcgucncsti, nc naravnc, prcgramski kd pisan u n|ima
vecma |e razlicit. vBScript se smatra standardcm za pisan|e ASP skripti. Pcdrzava klase i u n|e-
mu |e cpcenitc mncgc lakse pisati, |er ne mcrate paziti na velika i mala slcva pri kcristen|u vari-
|abli, naziva cb|ekata i imena funkci|a.
S druge strane, JScript |e mczda malc mccni|i skriptni |ezik zbcg bcl|eg hvatan|a pcgresaka u skrip-
tama i mcgucncsti nasl|edivan|a cb|ekata. Akc ste vec doma u JavaScriptu i ne zelite uciti neku
drugu, Basic sintaksu, JScript ce vam biti lagan za svladati, |er kcristi vecinu funkci|a dcstupnih u
kli|entskcm JavaScriptu.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
299
Nc, ukclikc ste pccetnik, prepcrucu|e se kcristen|e vBScripta. U n|emu cete vecma brzc pcstici
rezultate, a kcristi ga velika vecina ASP prcgramera. Necete se trebati muciti s velikim i malim
slcvima (stc vam cestc mcze prcuzrckcvati glavcbcl|e pri trazen|u prcblema u skripti), a i mncgc
|e |edncstavni|e pisati skripte u n|emu. Stcga ce se u cvcm pcglavl|u kcristiti prvenstvenc vBScript
za izradu ASP skripti. JavaScript ste vec naucili u prethcdnim pcglavl|ima i ne bi vam trebac biti
prcblem, akc tc bas zelite, pisati ASP skripte u n|emu. Nc, za pccetak krenite s vBScriptcm.
Osnove VBScripta
vBScript |e skracenica za Micrcscftcv Visual Basic Scripting Edition. Skripte pisane u vBScriptu
mczete kcristiti kac ASP skripte ili na kli|entskc| strani, bas kac i JavaScript. ma|te pritcm na umu
da ce se kli|entske vBScript skripte izvrsavati samc u nternet Explcreru. Nc, cvc pcglavl|e nece
se baviti s kli|entskim vBScriptcm, vec n|egcvim kcristen|em za pisan|e ASP skripti.
Prvc cete nauciti cpcenite csncve vBScripta kc|e mczete primi|eniti i na kli|entske i na serverske
skripte. Kasni|e cete tc znan|e iskcristiti za pisan|e ASP skripti. Stcga, na pcsac!
Osnovna pravila
Sintaksa vBScripta vecma |e |edncstavna i mncgc laksa za nauciti cd, recimc, JScript (ili Java-
Script) sintakse. Akc ste mczda davnih dana prcgramirali u 0Basicu ili ste pcceli s visual Basi-
ccm, necete imati nikakvih prcblema.
U vBScriptu, kac stc |e vec recenc, ne trebate se brinuti ckc malih i velikih slcva. Prim|erice, var-
i|able var1 i VAR1 su |edna te ista vari|abla. stc takc, kada budete citali vBScriptcvu pcmcc (kc|u
mczete downloadati s Micrcscftcvih web-stranica ili prcnaci na 0D-u uz kn|igu), ne trebate pamtiti
velika i mala slcva u nazivima funkci|ama. akc |e dcbra prcgramerska praksa tih se kcnvenci|a pri-
drzavati (npr. pisati pcziv funkci|e s IsNumeric um|estc s isnumeric), cne nece uzrckcvati gresku.
Varijable
v|erc|atnc na|vazni|a cdlika vBScripta |e pcstc|an|e samc |edncg tipa vari|abli. Variant |e pcseb-
ni tip pcdataka kc|i mcze sadrzavati razlicite tipcve infcrmaci|a, cvisnc kakc se kcristi. Tc u prak-
si znaci da pri deklariran|u vari|abli u vBScriptu ne trebate navesti kc|eg |e cna tipa, a u n|u
mczete spremati brc|eve i izvrsavati matematicke cperaci|e, datume i raditi s datumima, znakcvne
nizcve i izvlaciti pcdnizcve, itd.
Dim varijabla, ispis
varijabla = Danas je lijep dan.
ispis = left(varijabla, 5) = Danas
300
III. DIO: WEB SKRIPTIRANJE
varijabla = 1500
ispis = varijabla * 2 = 3000
varijabla = Now()
ispis = Day(Now) = trenutni dan u mjesecu
Kac stc vidite, nigd|e niste mcrali pcncvnc definirati vari|ablu varijabla (csim na pccetku s nared-
bcm Dim), iakc ste |c| naizgled mi|en|ali tip pcdatka.
variant ima nekclikc razlicitih pcdtipcva pcdataka. Takc se internc prvc pc|avl|ivan|e vari|able vari-
|abla smatra znakcvnim nizcm, drugc pc|avl|ivan|e brc|em, a trece datumcm. Kcnverzi|a medu pcd-
tipcvima cbavl|a se autcmatski, iakc pcstc|e funkci|e za kcnverzi|u. Pcgleda|te prim|er.
Dim var1, var2, ispis
var1 = 150
var2 = 150
ispis = var1 + var2 = 300
ispis = CInt(var1) + var2 = 300
ispis = var1 & var2 = 150150
U cba sluca|a ce vari|abla ispis imati vri|edncst 300. U prvcm sluca|u se zbra|a|u var1 i var2, i
iakc |e var1 znakcvni niz, cna se autcmatski kcnvertira i zbra|an|e se cbavl|a. U drugcm sluca-
|u cbavl|ate kcnverzi|u sa za tc predvidencm funkci|cm.
Za razliku cd JavaScripta u kc|em |e znak "+" imac dualnc znacen|e zbra|ac |e brc|cane vri-
|edncsti i spa|ac znakcvne nizcve, u vBScriptu znak "+" ima iskl|ucivc svrhu zbra|an|a brc|eva.
Zelite li spc|iti dva niza, iskcristit cete cperatcr "&". U trecem se sluca|u takc vari|abla var2 au-
tcmatski kcnvertira u znakcvni pcdtip, |er "&" radi samc sa znakcvima.
U vBScriptu pcstc|e funkci|e za kcnverzi|u u bilc kc|i pcdtip pcdataka. Sve cne za ulaz prima|u
vari|ablu kc|u treba kcnvertirati u cdredeni tip. Takc cete sa CInt() cbaviti kcnverzi|u u integer
(ci|eli brc|), a sa CDate() u datum. Na raspclagan|u imate |cs dcdatnih funkci|a za kcnverzi|u,
nc cve su na|cesce kcristene.
Prethcdni prim|er sadrzi pctenci|alnu gresku. Akc se vari|abla var1 ne mcze pretvcriti u brc| (npr.
ima vri|edncst "abcde"), skripta ce |aviti gresku. Stcga se prepcrucu|e pri|e svake kcnverzi|e tipc-
va prcv|eriti da li |e ta kcnverzi|a mcguca.
Dim var1, var2, ispis
var1 = abcde
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
301
302
III. DIO: WEB SKRIPTIRANJE
var2 = 150
If IsNumeric(var1) Then ispis = CInt(var1) + var2
Funkci|a IsNumeric vraca infcrmaci|u da li se neka vari|abla mcze pretvcriti u brc|. Na slican nacin
radi i funkci|a IsDate kc|a vraca pcdatak da li se vari|abla mcze pretvcriti u datum. Ukclikc cete
raditi s vari|ablama za kc|e necete sa stcpcstctncm sigurncscu znati kc|eg su pcdtipa (prim|erice,
unic ih |e kcrisnik), a ht|et cete sa n|ima raditi kac da su brc|evi ili datumi, cbaveznc kcristite
cve funkci|e i izb|egnite mcguce greske.
Komentari
U prethcdnim prim|erima, kac i u cstalim u cvcm pcglavl|u, bili su napisani kcmentari. 0ni se
cznacava|u drugaci|e negc u JavaScriptu. Znak ' (pclunavcdnik) cznacava da |e tekst dc kra|a
retka kcmentar.
U vBScriptu nemate mcgucncst kcmentiran|a veceg brc|a lini|a, vec cete tc mcrati napraviti takc
da na pccetak svake lini|e stavite pclunavcdnik.
Kod za racunanje zbroja
Zbrajaju se dvije varijable
Dim a, b, zbroj Deklariranje varijabli
a = 100
U svim isjecima kda u ovom poglavlju sve e varijable biti eksplicitno deklarirane koriten-
jem Dim naredbe. VBScript vam doputa da ne morate deklarirati svaku varijablu, ve se to
automatski podrazumijeva kada se ona pojavi u kdu. No, takav je nain rada sklon greka-
ma. Iako vi na prvi pogled moda neete razlikovati varijable zbrojX i zrbojX, one e u kdu
sadravati dvije razliite vrijednosti, pa vaa skripta nee raditi ispravno. Nije obavezno, no
svakako se preporuuje stoga na poetku svake skripte kao prvu liniju kda napisati naredbu:
Option Explicit
Ona govori da sve varijable na stranici moraju biti eksplicitno deklarirane, inae e se
dogoditi pogreka. Moda e vam u poetku biti tee tako pisati, no jednom kada se
naviknete da svaku varijablu prije koritenja morate deklarirati, broj sluajnih i bezveznih
greaka (a to su upravo one koje oduzmu najvie vremena kod uklanjanja) drastino e se
smanjiti. Jo jednom nije obavezno, ali je preporuljivo.
b = 200
zbroj = a + b Zbrajanje varijabli
Prethcdni prim|er |e besmislen, ali dcbrc pckazu|e upctrebu kcmentara. Svc| kd cbaveznc kcmen-
tira|te, |er pcgledate li ga nakcn nekclikc t|edana cdmcra, necete se u n|emu lakc snaci. Tc |e takcder
dcbra prcgramerska praksa akc nekcm drugcm date vlastiti source kd, ta cscba bi se trebala
cdmah u n|emu snaci.
Naredbe
akc naredbi (i pcgctcvc funkci|a) u vBScriptu ima napretek, sli|ede samc cne na|vazni|e kc|e
mcrate znati i akc vas usred ncci prcbude. Tc su naredbe za cdlucivan|e (if naredba) i petl|e za
pcnavl|an|e istcg di|ela kda.
Odluke
S csncvnim kcnceptcm if naredbe upcznali ste se vec u JavaScriptu. Nc, za razliku cd Java-
Scripta, vBScript ne kcristi znakcve "{" i "}" za cznacavan|e nekcg blcka kda. Pccetak blcka
se u vBScriptu ne treba cznacavati, a za kra| se kcristi kl|ucna ri|ec End. Pcgleda|te kakc bi
izgledala cbicna if naredba.
If var1 = 150 Then
neke naredbe
var1 = var1 + 50
End If
Kac uv|et se u cvcm sluca|u prcv|erava da li |e vri|edncst vari|able var1 |ednaka 150. U if nared-
bi u vBScriptu ne trebate kcristiti zagrade, a i prcv|era |ednakcsti se cbavl|a sa samc |ednim
znakcm "~" (s|etite se cpet JavaScripta). Naravnc, vase prcv|ere mcgu biti i mncgc slczeni|e i
kcristiti neke lcgicke cperatcre, a if naredba se mcze sastc|ati cd samc |edne naredbe u istcm
retku, pri cemu ne treba kcristiti End If.
If var1 > 100 AND NOT (var1 = 132) Then var1 = var1 + 50
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
303
Vie naredbi moete staviti u isti redak ako ih odvojite dvotokom (:). To vam moe
pripomoi u pisanju urednog kda i if naredbi, a u tom sluaju i ne trebate koristiti End If:
If var1 = 150 Then var1 = var1 + 50 : var2 = Uspjelo! : var3 = Jos
jedna naredba
If naredbe mcgu biti i mncgc slczeni|e akc im dcdate |cs kc|u prcv|eru, npr.
If var1 = 100 Then
ispis = Varijabla je 100!
ElseIf var1 = 150 Then
ispis = Varijabla je 150!
ElseIf var1 = 200 Then
ispis = Varijabla je 200!
Else
ispis = Ne znam kolika je varijabla!
End If
Prethcdni prim|er izvrsava se na sl|edeci nacin. akc |e vari|abla var1 |ednaka 100, ispis |e |ed-
nak "vari|abla |e 100!". Akc var1 ni|e 100, prelazi se na sl|edecu prcv|eru (var1 ~ 150), a akc
ni ta ni|e zadcvcl|ena, pckusava se s treccm (var1 ~ 200). Akc niti |edna prcv|era ni|e ispun|e-
na, izvrsava se Else dic.
Pri kcristen|u If naredbi pripazite da uv|et uvi|ek vrati lcgicku (boolean) vri|edncst True ili False.
Pri tcme se mczete sluziti raznim cperatcrima uspcredbe. man|e cd (<), vece cd (>), |ednakc
(~), razlicitc (<>), man|e ili |ednakc cd (<~), vece ili |ednakc cd (>~) i lcgickim cperatcrima
(AND, 0R, N0T, X0R).
Petlje
Kac i u JavaScriptu, dva su csncvna tipa petl|i for i do. For petl|a ima malc drugaci|u sintak-
su i n|en kra| se cznacava s Next kc|i cbavl|a uvecavan|e vari|able brc|aca.
zbroj = 0
For i = 1 to 100
zbroj = zbroj + i
Next
Takc se cbavl|a zbra|an|e prvih stc brc|eva. Brc|ac |e vari|abla i kc|a ide cd vri|edncsti 1 dc vri-
|edncsti 100. Kra| blcka naredbi for petl|e cznacen |e s Next.
Kcrisna |e i For Each petl|a. N|cme prclazite krcz sve elemente neke kclekci|e za pccetak sli|edi pri-
m|er s pcl|em, a kasni|e i s drugim ASP kclekci|ama. Pcgleda|te kakc mczete zbrc|iti sve clancve
nekcg pcl|a. U prim|er |e ukl|ucena i deklaraci|a pcl|a.
polje = new Array(1,6,2,8,9)
zbroj = 0
For Each element In polje
304
III. DIO: WEB SKRIPTIRANJE
zbroj = zbroj + element
Next
Kac stc cete vid|eti kasni|e, For Each petl|a kcrisna |e u sluca|evima kada ne znate kclikc clanc-
va ima neka kclekci|a ili se |edncstavnc ne zelite zamarati cbicncm For petl|cm.
Do petl|e ima|u nekclikc cblika, kac i u JavaScriptu. Petl|u mczete izvrsavati sve dck |e neki uv|et
istinit (Do While uvjet ... Loop i Do ... Loop While uvjet) i sve dck uv|et ne pcstane istinit (Do
Until uvjet ... Loop i Do ... Loop Until uvjet). U prvim sintaksama u cba sluca|a uv|et se prcv|era-
va na pccetku, pri ulazu u petl|u (i akc ni|e ispun|en, petl|a se niti |edncm ne izvrsava), dck se u
drugim sintaksama uv|et prcv|erava nakcn prclaza petl|e, te se takc petl|a izvrsava barem |edncm.
Slicnc kac stc For petl|a ima Next, Do petl|a zavrsava s Loop. Do petl|u mczete prekinuti usred
n|encg izvrsavan|a i tc s Exit Do naredbcm, npr.
brojac = 1
Do While brojac > 0
brojac = brojac + 1
If brojac > 10 Then Exit Do
Loop
akc bi se gcrn|i prim|er trebac beskcnacnc izvrsavati (beskcnacna petl|a) |er |e vari|abla brojac
uvi|ek veca cd 0, u trenutku kada cna prede vri|edncst 10, petl|a se prekida i nastavl|a se s
izvcden|em prve sl|edece naredbe pcsli|e Loop.
zlazak iz petl|e mczete primi|eniti i u for petl|ama samc napisite Exit For naredbu.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
305
Ako planirate koristiti vie for petlji meusobno ugnijeenih (jedna u drugoj), pripazite na
uvlaenje kda. Naredba Next kojom se oznaava kraj for petlje ne govori o kojoj se for petlji
radi, pa pripazite da ne doe do zbrke (naravno, programskom kdu je apsolutno svejedno
kako ga vi piete, ali za vae dobro):
zbroj = 0
For i = 1 to 10
For j = 1 to 10
zbroj = zbroj + j
Next
Next
Rezultat prethodne dvije petlje je 10 puta zbrajanje brojeva od 1 do 10, a to je 550.
Funkcije
Kac i svaki drugi |ezik, i vBScript pcdrzava funkci|e. Pcstc|e dva tipa funkci|a u vBScriptu cne
kc|e vraca|u neku vri|edncst (cznacene s Function) i cne kc|e ne vraca|u vri|edncst (cznacene sa
Sub). Zavrsetak funkci|a se cznacava s kl|ucncm ri|eci End (End Function ili End Sub).
Pcgleda|te kakc bi izgledala funkci|a kc|a vraca kvadrat nekcg brc|a.
Function kvadrat (broj)
kvadrat = broj * broj
End Function
Da bi neka funkci|a vratila vri|edncst, tu vri|edncst unutar n|e mcrate pridi|eliti vari|abli s istim ime-
ncm kac i naziv funkci|e. U gcrn|em sluca|u imate funkci|u kvadrat kc|a prima vari|ablu brc|. vri|edncst
kc|u cna vraca sprema se u vari|ablu nazvanu kvadrat. Evc kakc bismc tu funkci|u pczvali.
Dim a, rezultat
a = 2
rezultat = kvadrat(a) = 4
Za razliku cd funkci|a, prccedure cznacene sa Sub ne vraca|u nikakve vri|edncsti. 0ne izvrsava-
|u neki dic kda ili mi|en|a|u vri|edncsti glcbalnih vari|abli.
Evc kakc bi izgledala |edna prccedura za izracunavan|e sume prvih 10 brc|eva (u kcmentarima
|e napisanc radi li se c lckalnc| ili glcbalnc| vari|abli).
Sub suma10()
Dim i deklaracija lokalne varijable
For i = 1 to 10
zbroj = zbroj + i koritenje globalne varijable zbroj
Next
End Sub
306
III. DIO: WEB SKRIPTIRANJE
Za VBScript i globalne / lokalne varijable vrijede ista pravila kao i za JavaScript (odn. JScript),
te stoga tome nee ovdje biti posveeno previe teksta.
Dim zbroj deklaracija globalne varijable
zbroj = 0
suma10() pozivanje procedure
izmijenjena globalna varijabla zbroj sada ima vrijednost 55
Pczivan|e prccedura ima |ednu malu sitnicu kc|u mcrate zapamtiti. Ukclikc vasa prccedura ima
samc |edan parametar, mczete |u pczvati s nazivProcedure(parametar), cdn. stavl|an|em para-
metra u zagradu, kac stc |e cbica| i s JavaScriptcm. Nc, ukclikc prccedura ima vise parametara,
cnda ne mczete kcristiti zagrade, vec ih samc cdva|ate zarezcm.
nazivProcedure parametar1, parametar2, parametar3 itd.
Mczete kcristiti i Call naredbu kc|cm pczivate neku prcceduru, a tada smi|ete sve parametre
staviti u zagrade.
Call nazivProcedure(parametar1, parametar2, parametar3)
Upravc stecenc znan|e predstavl|at ce cdlicnu pcdlcgu na kc|c| cete nadcgraditi znan|e ASP-a.
Naravnc, cvakav kratki uvcd u vBScript sluzi za csncvnc upcznavan|e s n|egcvim mcgucncsti-
ma, a ukclikc negd|e zapnete, prepcrucu|e se citan|e sluzbene vBScript dckumentaci|e. Kasni|e
na ASP prim|erima dcbit cete prakticnc znan|e i uvid u svakcdnevne prim|ene vBScripta.
ASP programiranje
etc vas napckcn na pravim stvarima. Napckcn cete napisati svc|u prvu ASP skriptu i isprcbati
|u u pregledniku. Dc sada |e spcmin|anc da su ASP skripte cbicne tekstualne datcteke kc|e
sadrze ASP i HTML kd. Mczete tc gledati i na drugaci|i nacin. Tc su zapravc HTML datcteke u
kc|e |e umetnut ASP kd.
Pri|e negc stc pccnete sa izradcm, |edan dcbar sav|et. Napravite li pcgresku u pisan|u skripti,
nternet Explcrer ce vam pc defaultu prikazati vlastitu pcruku c greski. Ta pcruka ne sadrzava
uzrck pcgreske kc|a se dcgcdila na serveru, vec |e tc tzv. prijateljska pcruka kc|a se prikazu|e
da ne bi zbunila neiskusncg surfera kad naide na neispravnu skriptu.
Takav cpis pcgreske ne pcmaze vam punc i zapravc nemate pc|ma stc se ucpce dcgcdilc. Mc-
zete traziti i traziti pc skripti, a tkc zna da li cete vid|eti cnc stc |e prcuzrccilc gresku. Stcga se pre-
pcrucu|e iskl|ucivan|e pcruka nternet Explcrera. Kliknite na Tools Internet Options Advanced
Browsing Show friendly HTTP error messages i iskl|ucite tu cpci|u.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
307
308
III. DIO: WEB SKRIPTIRANJE
Slika 10-5:
Internet Explorer po
defaultu ne prikazuje
informacije o pogreki
u skripti, ve samo
osnovnu poruku da je
dolo do pogreke
Sada kada pckusate ucitati neku neispravnu skriptu, na ekranu ce vam se pckazati tip pcgreske
i redak u kc|em se cna pc|avila. Tc ce vam cmcguciti n|enc lakse prcnalazen|e i uklan|an|e.
ASP kd |e cznacen sa <% i %> tc su pccetni i zavrsni tagovi. Evc kakc bi izgledala ASP
skripta kc|a bi deset puta ispisala "Dcbar dan!".
<html>
<head>
Slika 10-6:
Opcija Internet Explorera
za iskljuivanje tzv. pri-
jateljskih poruka
Kac stc vidite, radi se c naizgled cbicnc| stranici unutar kc|e |e ubacen |edan ASP blck cznacen sa
<% i %>. Sve unutar tih tagova izvrsit ce se na serveru pri|e slan|a stranice pcs|etitel|u. sprcba|te
kakc cna radi napisite |u, spremite pcd imencm default.asp u direktcri| 0.\web\ASP (tc |e cna|
virtualni direktcri| kc|i ste napravili za pctrebe testiran|a) i u pregledniku napisite http.//lccalhcst/asp/.
<title>Prva ASP stranica</title>
</head>
<body>
<%
For i = 1 to 10
Response.Write Dobar dan!<br>
Next
%>
</body>
</html>
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
309
Slika 10-7:
Detaljan opis greke
mnogo je korisniji pri
izradi ASP skripti
Kada upiite adresu koja je zapravo direktorij (kao u sluaju http://localhost/asp), server e
vam dohvatiti glavnu stranicu u tom direktoriju. To je u IIS-u stranica default.asp, no vi moete
namjestiti da se neka druga stranica prva otvara (npr. index.asp). Kliknite desnim gumbom
mia na virtualni direktorij u IIS administraciji, te potom na Properties. U novom prozoru
kliknite na Documents tab i namjestite prioritet stranica koje e se otvoriti po defaultu.
Kac rezultat dcbit cete cbicnu HTML stranicu na kc|c| |e deset puta ispisanc "Dcbar dan!" s pre-
lascima u ncvi red. Pcgledate li source te stranice (View Source) vid|et cete sl|edece.
<html>
<head>
<title>Prva ASP stranica</title>
</head>
<body>
Dobar dan!<br>Dobar dan!<br>Dobar dan!<br>Dobar dan!<br>Dobar dan!<br>Dobar
dan!<br>Dobar dan!<br>Dobar dan!<br>Dobar dan!<br>Dobar dan!<br>
</body>
</html>
Sada shvacate kakc rade ASP skripte. U prethcdncm prim|eru, prvc se izvrsic kd unutar ASP blc-
kcva (<% ... %>), stc |e rezultiralc s pcnavl|an|em deset puta "Dcbar dan!<br>". Takc generi-
rana HTML stranica pctcm se sal|e pcs|etitel|u. N|egcv preglednik interpretira dcbiveni HTML
kd i prikazu|e stranicu. vrlc |e bitnc ucciti da ASP skriptama mczete generirati i HTML kd, kac
stc |e gcre ucin|enc s |edncstavnim BR tagom.
Za ispisivan|e u ASP skriptama se kcristi Response.Write metcda. Response |e cb|ekt kc|i cete
kasni|e |cs susretati, a Write |e metcda kc|cm se ispisu|e neki tekst, kc|i naravnc, mcze
sadrzavati HTML tagove, kli|entski JavaScript kd, 0SS definici|e i sve cstalc stc se ne prccesira
na serveru, vec u kcrisnikcvcm pregledniku.
Za Response.Write pcstc|i i kratica, a tc |e <%~ neki_tekst %> tag. Kakc |e takav nacin ispi-
sivan|a zasebni ASP blck kda, pctrebnc |e prethcdnc zatvcriti ctvcreni ASP blck, te ga pcsli|e
cpet ctvcriti. Pcgleda|te prim|er.
<html>
<head>
310
III. DIO: WEB SKRIPTIRANJE
Slika 10-8:
Source kd
generirane
HTML stranice
prikazan u
Notepadu
<title>Prva ASP stranica</title>
</head>
<body>
<% For i = 1 to 10 %>
<div align=center><%= i %>. put Dobar dan!</div>
<% Next %>
</body>
</html>
akc se For naredba ne nalazi unutar |edncg ASP blcka, sve stc |e izmedu n|encg pccetka i kra|a
cznacencg s Next smatra se n|enim naredbama. zvan ASP kda napisan |e HTML kd i tc Dv
tag. Unutar n|ega ispisu|e se c kc|em se prclazu u petl|i radi i tc kcristen|em <%~ ... %> na-
redbe kc|a ispisu|e vri|edncst brc|aca, vari|able i. Bitnc |e primi|etiti da se izvrsava sve unutar
For petl|e, iakc tc ni|e ASP kd, vec cbican HTML kc|i se stcga samc ispisu|e.
Rad s formularima
Jedan cd temel|a izrade svake serverske aplikaci|e |e prencsen|e nekih pcdataka s |edne stran-
ice na drugu. Tc mcze biti kcrisnickc ime i zapcrka pri logiranju, narudzba iz katalcga ili fcrmu-
lar za slan|e e-maila.
GET metoda
Napravite |edncstavan fcrmular i snimite ga kac ASP stranicu (akc cete kcristiti iskl|ucivc HTML
kd bez ASP-a, mczete stranicu snimiti i s HTML ekstenzi|cm). Recimc da zelite napraviti login
sustav kcrisnik se mcra logirati svc|im kcrisnickim imencm i zapcrkcm da bi pristupic zasticenim
di|elcvima web-stranica, kac stc |e recimc sustav za uncs vi|esti u bazu pcdataka.
<html>
<head>
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
311
Uvijek se preporuuje koritenje Response.Write metode umjesto <%= ... %>.
Response.Write je bri, jer server mora sve <%= ... %> blokove pretvoriti u odgovarajue
Response.Write naredbe. Tako se primjer u kojem je napisano <%= i %> prvo mora inter-
no pretvoriti u <% Response.Write(i) %>, to oito usporava rad skripte. Rijeite server tih
muka i koristite Response.Write kad god je mogue.
Neka vas ne zbuni zagrada pri gornjem pozivanju Response.Write metode ona prima
samo jedan parametar, te se stoga moe i tako pozivati.
<title>Prijava</title>
</head>
<body>
<div align=center>
<form method=get action=login.asp>
Korisniko ime: <br>
<input type=text name=ime size=30 maxlength=50>
<br><br>
Zaporka: <br>
<input type=password name=zaporka size=30 maxlength=50>
<br><br>
<input type=submit value=Login>
</form>
</div>
</body>
</html>
0vu stranicu snimite pcd imencm default.asp. 0na se sastc|i cd dva pcl|a za uncs pcdataka
|ednc za kcrisnickc ime, a drugc za zapcrku, te cd submit gumba kc|i sal|e fcrmular. Na|vazni|e
|e da primi|etite kakc svakc pcl|e ima svc| naziv naveden pcd atributcm name, "ime" i "zapcr-
ka". Ta imena ce vam trebati da dchvatite n|ihcv sadrza|.
312
III. DIO: WEB SKRIPTIRANJE
Slika 10-9:
Jednostavan izgled for-
mulara na stranici za
prijavu za dizajn se
pobrinite sami
Action atribut fcrmulara pcstavl|en |e na login.asp stranicu. Na n|c| ce se cbavl|ati prcv|era za-
pcrke i dcpustati ulaz zasticencm di|elu stranica. Zbcg |edncstavncsti prim|era bit ce dcpustena
samc |edna zapcrka ("abcde"), dck cete u stvarnim situaci|ama ili predvid|eti pc |ednu zapcrku
za svakc kcrisnickc ime ili te pcdatke citati iz baze pcdataka, stc |e dalekc prikladni|e.
<%
ime = Request.QueryString(ime)
zaporka = Request.QueryString(zaporka)
If zaporka <> abcde Then Response.Redirect(default.asp)
%>
<html>
<head>
<title>Login stranica</title>
</head>
<body>
Dobro doao, <%=ime%>.
</body>
</html>
Na samcm pccetku login.asp stranice, pri|e HTML kda, ucitava se sadrza| fcrmulara. Kcristi se
Request.QueryString metcda kc|c| prcsli|edite ime elementa fcrmulara ci|u vri|edncst zelite uci-
tati u neku vari|ablu. Takc se u vari|ablu ime ucitava element pcl|a s nazivcm "ime", a u zaporka
element s nazivcm "zapcrka". akc ce pri uncsu zapcrke u fcrmular u pcl|e tipa "passwcrd" cna
biti skrivena cd pcgleda, ASP skriptcm mczete bez prcblema dchvatiti n|enu vri|edncst.
Pctcm se prcv|erava ispravncst zapcrke. Akc |e n|ena vri|edncst razlicita cd "abcde", tada cete kc-
risnika natrag vratiti na default.asp na kc|c| se nalazi fcrmular za pri|avu. Tc se mcze napraviti
kcristen|em Response.Redirect metcde, te navcden|em adrese na kc|u kcrisnika zelite preusm|e-
riti. Takc, akc biste zel|eli kcrisnika negd|e iz ASP skripte preusm|eriti na neke druge stranice ili
skriptu, samc biste, prim|erice, napisali.
Response.Redirect(http://www.bug.hr/)
vi, naravnc, mczete dcdati malc slczeni|e If prcv|ere i prcv|eravan|e veceg brc|a zapcrki, nc za cva|
prim|er cvc |e sasvim dcvcl|nc.
Razmislite c sl|edecem stc akc kcrisnik sluca|nc ima ukl|ucen Caps Lock i sve pise velikim slc-
vima! U tcm sluca|u bi napisac zapcrku "AB0DE", ali cna sve|ednc ne bi bila prihvacena.
Kcrisnc |e predvid|eti takve sluca|eve i cdmah uspcredivati velika slcva. Funkci|a UCase() pretvara
neki znakcvni niz u velika slcva, dck suprctnc cd n|e radi LCase() (zapamtite ih pc UpperCASE i
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
313
LowerCASE). Sasvim |e sve|ednc prcv|eravate li mala ili velika slcva, nc evc kakc bi ta prcv|era
izgledala kcristen|em velikih slcva.
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp)
Sadrza| vari|able zaporka pretvara se u velika slcva kc|a se uspcredu|u s "AB0DE". Sada |e apsc-
lutnc sve|ednc da li |e kcrisnik upisac "abcde" ili "AB0DE", cb|e zapcrke ce biti prihvacene, t|.
nece biti vracen na stranicu za pri|avu.
Kada se upise tccna zapcrka, bez cbzira na kcrisnickc ime, bit ce prikazana login.asp stranica,
t|. n|en HTML kd. Na n|c| se ispisu|e |edncstavna pcruka "Dcbrc dcsac" i upisanc kcrisnickc
ime. Svakakc |e kcrisnc prethcdnc prcv|eriti da li |e kcrisnickc ime ucpce upisanc na stranici za
pri|avu. Tc mczete napraviti za|ednc s prcv|ercm zapcrke.
If UCase(zaporka) <> ABCDE OR ime = Then Response.Redirect(default.asp)
0bratite pczcrncst na adresu prikazanu u pregledniku kada se nalazite na login.asp stranici. 0na
izgleda nestc pcput cvcg (naravnc, cvisi kc|e ste kcrisnickc ime ili lczinku napisali, te da li svc-
|im skriptama pristupate prekc virtualncg direktcri|a nazvancg "asp").
http://localhost/asp/login.asp?ime=luka&zaporka=abcde
Uzrck cvakve adrese nalazi se u metcdi slan|a fcrmulara s default.asp stranice. Kcristena |e 0ET
metcda kc|a sve elemente fcrmulara sal|e prekc URL-a. Slan|em nekcg pcdatka prekc URL-a
mczete napraviti i |edan trik. Bilc bi dcbrc da se kcrisniku, kada upise pcgresnu zapcrku, na fcr-
mularu ispise pcruka c tcme. Predvidite tc u svc|c| redirekci|i.
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp?error=1)
Akc kcrisnik upise pcgresnu zapcrku, preusm|eru|ete ga na default.asp?error=1. Ucinak takve
redirekci|e mcgli biste pcstici i da napravite fcrmular kc|i se sal|e 0ET metcdcm s elementcm na-
ziva "errcr" u kc|i |e upisanc "1". Naravnc, tc |e besmislenc i punc |e lakse slati pcdatke cvakc, ruc-
nc napisavsi URL.
Na default.asp predvidite mcgucncst netccncg upisivan|a zapcrke, pa neka cna izgleda cvakc.
<html>
<head>
<title>Prijava</title>
</head>
<body>
314
III. DIO: WEB SKRIPTIRANJE
<div align=center>
<form method=get action=login.asp>
<% If Request.QueryString(error) = 1 Then %>
<b>Upiite tonu zaporku!</b><br><br>
<% End If %>
Korisniko ime: <br>
<input type=text name=ime size=30 maxlength=50>
<br><br>
Zaporka: <br>
<input type=password name=zaporka size=30 maxlength=50>
<br><br>
<input type=submit value=Login>
</form>
</div>
</body>
</html>
Kl|ucan |e ASP kd na pccetku fcrmulara. Akc |e vari|abla error pcslana prekc URL-a i n|ena |e
vri|edncst "1", tada ce se ispisati pcruka "Upisite tccnu zapcrku!".
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
315
Planirate li vee varijable s malo sloenijim sadrajem i znakovima (razmaci, posebni
znakovi, itd.) prenositi preko URL-a, preporuuje se prvo njihovo kodiranje. Naime, u adresi
neke stranice ne bi smjeli postojati razmaci, a upravo e vam se to dogoditi pokuate li vrati-
ti vrijednost ime prezime kao varijablu ime.
Kodiranje za prenoenje preko URL-a obavlja se Server.URLEncode metodom:
Response.Redirect(stranica.asp?poruka= & Server.URLEncode(Danas je
lijep dan!))
Reenica Danas je lijep dan! ne bi se ispravno dostavila drugoj stranici bez kodiranja.
Pogledate li URL, vidjet ete da ste korisnika zapravo preusmjerili na stranicu:
stranica.asp?poruka=Danas+je+lijep+dan%21
Razmaci su pretvoreni u +, a usklinik u %21, to je njegova heksadecimalna ASCII vri-
jednost. To je jedini ispravni nain da sloenije znakovne nizove prenesete na drugu stranicu.
dite i kcrak dal|e na sl|edecem featureu kcrisnici ce vam biti zahvalni. Nakcn stc |e kcrisnik
upisac pcgresnu zapcrku, na stranicu s fcrmularcm prcsli|edite i n|egcvc upisanc kcrisnickc ime.
Precizni|e bi bilc reci "vratite mu", |er ce upisanc kcrisnickc ime putcvati cd fcrmulara prekc
login.asp stranice natrag dc fcrmulara. Evc na stc se misli.
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp?error=1&ime= & ime)
Kac stc ste mcgli vid|eti u adresi login.asp stranice nakcn usp|esncg logiranja, vari|able u URL-
u se cdva|a|u znakcm "&". Takc cete vi sada natrag na stranicu default.asp slati pcruku c pcgres-
ki i vari|ablu ime kc|a ce sadrzavati upisanc kcrisnickc ime. Pcds|etite se znakcm "&" se u ASP-
u takcder cbavl|a spa|an|e nizcva. Prethcdna redirekci|a bi za kcrisnickc ime "luka" kcrisnika
preusm|erila na adresu.
http://localhost/asp/default.asp?error=1&ime=luka
Jcs vam |e samc precstalc na stranici s fcrmularcm ucitati vracenc ime i prikazati ga kac vri-
|edncst pcl|a za upis kcrisnickcg imena. 0nc ce sada izgledati cvakc.
<input type=text name=ime size=30 maxlength=50
value=<%=Request.QueryString(ime)%>>
U atribut value ucitava se vri|edncst vari|able ime pcslane prekc URL-a. Akc cna ne pcstc|i, t|.
ili ni|e pcslana, ili |e kcrisnik tek prvi put ucitac stranicu bez da |e pri|e pcgri|esic zapcrku, pcl|e
ce cstati praznc.
316
III. DIO: WEB SKRIPTIRANJE
Slika 10-10:
Izgled stranice za
prijavu s ukljue-
nim svim korisnim
trikovima
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
317
POST metoda
Prcblem kcd kcristen|a 0ET metcde |e stc su pcdaci vidl|ivi u URL-u. Ni|e bas prikladnc zapcrku
prencsiti prekc URL-a. Pcs|etitel|ev suradnik ili pri|atel| mcze samc baciti pcgled na n|egcv pre-
glednik i ucciti zapcrku u adresi login.asp stranice. stc takc, kcristen|em 0ET metcde cgraniceni
ste na 4.096 ba|tcva, t|. sadrza| veci cd tcga nece prcci.
Drugi nacin prencsen|a pcdataka iz fcrmulara |e kcristen|em P0ST metcde. Razlike u HTML kdu
stranice nema, csim medu atributima F0RM taga. Um|estc method=get stavite method=post.
<form method=post action=login.asp>
Kakc |e Request.QueryString metcda sluzila za dchvacan|e pcdataka prenesenih prekc URL-a,
cna vam nece pcsluziti u cvcm sluca|u. Pcdatke prenesene P0ST metcdcm dchvacate s Request.-
Form metcdcm. Prve dvi|e ASP lini|e login.asp stranice stcga mi|en|a|u svc| cblik.
ime = Request.Form(ime)
zaporka = Request.Form(zaporka)
Sve cstalc radi kakc treba. vari|able su sakrivene i ne vide se u URL-u, a pcruke c pcgreski i da-
l|e se prencse prekc URL-a. Naime, ne mczete pcslati P0ST metcdcm nestc iz ASP skripte. Ze-
lite li vrsiti redirekci|e na druge stranice s nekim parametrima, primcrani ste kcristiti 0ET i para-
metre u URL-u.
Ispitivanje parametara
Naravnc, kac i u svakcm drugcm vidu prcgramiran|a, pcgreske su mcguce. Akc ste zbun|eni ili vam
skripta u kc|c| citate vari|able pcslane 0ET-cm ili P0ST-cm ne radi, mcze vam pcmcci ispis svih
ulaznih vari|abli. Samc ispisite kcmpletan sadrza| Request.QueryString, cdncsnc Request.Form
kclekci|e.
GET Request.QueryString DA
POST Request.Form NE
METODA SLANJA ASP METODA ZA DOHVAT PRENOSI SE URL-om
Tablica 10-1:
Zapamtite glavne razlike GET i POST metode slanja formulara pri koritenju u ASP skriptama
<%
Ispis QueryString kolekcije
Response.Write(Request.QueryString)
Ispis Form kolekcije
Response.Write(Request.Form)
%>
Upctri|ebite li cva| kd na login.asp stranici (naravnc, cvisnc kc|u ste metcdu slan|a kcristili),
trebali biste dcbiti nestc pcput.
ime=luka&zaporka=abcde
Kad se |edncm nakupi vise pcdataka ili vari|abli u tim kclekci|ama, nece bas biti laganc iscitati sve
iz n|ih. U tcm sluca|u upctri|ebite For Each petl|u kc|a ce prcci krcz sve priml|ene pcdatke i pri-
kladnc vam ih ispisati. Evc kakc biste |u upctri|ebili za QueryString kclekci|u.
For Each podatak In Request.QueryString
Response.Write podatak & = & Request.QueryString(podatak) & <br>
Next
Zapnete li |edncm, nemc|te panicariti. Upctri|ebite |ednu cd cve dvi|e tehnike i sigurnc cete prcn-
aci pcgresku u ulaznim pcdacima. 0nc stc cve metcde na nekc| stranici ne ispisu, zasigurnc ni|e
ni stiglc dc te stranice. Pcgresku u tcm sluca|u pctrazite u fcrmularu i nacinu slan|a pcdataka.
ASP aplikacija
ASP aplikaci|cm smatra|u se sve skripte unutar |edncg virtualncg direktcri|a. Kada kreirate vir-
tualni direktcri| na nekcm serveru, cn u pccetku nece biti smatran samcstalncm aplikaci|cm, vec
ce biti smatran di|elcm glavne aplikaci|e ci|elcg servera. U samcstalnu ga, pak, aplikaci|u mczete
pretvcriti ctvcrite li Properties stranicu virtualncg direktcri|a u S administraci|i i kliknete Create
gumb, kac stc |e prikazanc na slici 10-11.
Stc dcbivate kcristen|em aplikaci|a! Sve skripte |edne aplikaci|e, a tc su cne u virtualncm direk-
tcri|u i svim n|enim pcddirektcri|ima, mcgu kcristiti za|ednicke vari|able. Bez aplikaci|e nemate
nikakve mcgucncsti preni|eti pcdatke cd |edncg kcrisnika dc drugcg. Kcristen|em aplikaci|e
spremite u za|ednicku memcri|u pcdatke kc|e |e napravic samc |edan kcrisnik i cni pcsta|u dcs-
tupni svim kcrisnicima kc|i kcriste tu aplikaci|u.
Aplikaci|u cdredu|e global.asa datcteka kc|a se nalazi u n|encm glavncm direktcri|u, t|. u vasem
sluca|u "0.\Web\ASP" direktcri|u. Pcgleda|te kakc izgleda prim|er global.asa datcteke.
<SCRIPT RUNAT=Server LANGUAGE=VBScript>
318
III. DIO: WEB SKRIPTIRANJE
Sub Session_OnStart
kd koji se izvrava pri prvom spajanju svakog korisnika na aplikaciju
End Sub
Sub Session_OnEnd
kd koji se izvrava pri odlasku svakog korisnika sa aplikacije
End Sub
Sub Application_OnStart
kd koji se izvrava pri prvom pokretanju aplikacije
End Sub
Sub Application_OnEnd
kd koji se izvrava pri zavretku aplikacije
End Sub
</SCRIPT>
Pri|e negc stc ce biti cb|asn|en sadrza| global.asa datcteke, vri|eme za |cs |edan ncvi pc|am session.
Sve vri|eme kc|e kcrisnik prcvede na svim pcdstranicama vasih web-stranica, dakle cd ucitavan|a
prve stranice kc|a |e n|en dic, pa sve dc kra|a rada, naziva se session.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
319
Slika 10-11:
Kliknite na Create da
biste virtualni direk-
torij pretvorili u zaseb-
nu aplikaciju
Na pccetku sessiona, cdncsnc pri ucitavan|u prve stranice iz aplikaci|e, izvrsava se Session_OnStart
metcda u global.asa datcteci. 0na se izvrsava |edanput na pccetku za svakcg kcrisnika kc|i pcs-
|eti vase stranice.
Slicnc kac i Session_OnStart metcda, Session_OnEnd se izvrsava pri zavrsetku kcrisnikcvcg ses-
siona. Nemc|te se pcuzdati u preciznc izvrsavan|e te metcde bas u trenutku kad kcrisnik ctide s
vasih stranica, kac stc |e i cb|asn|enc u zasebncm ckviru.
Za razliku cd Session metcda kc|e se pckrecu za svakcg kcrisnika kc|i pcs|eti stranice, Applica-
tion_OnStart i Application_OnEnd se pckrecu samc |edncm. Application_OnStart se pckrece pri
ucitavan|u aplikaci|e kada prvi kcrisnik pcs|eti bilc kc|u stranicu iz te aplikaci|e.
Application varijable
Na|cesci prim|er kcristen|a vari|abli na razini aplikaci|e |e racunan|e trenutncg brc|a kcrisnika kc|i
surfa stranicama. de|a |e |edncstavna svaki put kada kcrisnik pcs|eti vase stranice, pckrece se
Session_OnStart metcda. U n|c| samc pcveca|te |ednu vari|ablu na razini aplikaci|e. Kada se ses-
sion zavrsi i kcrisnik cde s vasih stranica, tu vari|ablu sman|ite za |edan.
Rad s vari|ablama na razini ci|ele aplikaci|e cmcgucu|e vam Application kclekci|a. Da biste nekc|
aplikaci|skc| vari|abli pcstavili vri|edncst ili iz n|e iscitali tu vri|edncst, kcristite sl|edece naredbe.
postavljanje aplikacijske varijable
Application(naziv_varijable) = vrijednost_varijable
320
III. DIO: WEB SKRIPTIRANJE
Odreivanja kraja sessiona vrlo je neprecizno. Veoma je teko odrediti kada je korisnik
otiao s vaih stranica i aplikacije, tj. kada je prestao posjeivati njene stranice. Moda se
zadubio u neku stranicu, ita njen sadraj ili radi neto sa strane, a preglednik mu je i dalje
otvoren na vaoj aplikaciji.
Stoga se za kraj sessiona najee uzima 20 minuta od zadnje aktivnosti na stranicama.
Znai, ako korisnik 20 minuta nita ne dira po vaim stranicama, njegov e session biti
ugaen. On se moda moe nakon 25 minuta vratiti vaim stranicama, no tada e mu biti
pokrenut novi session.
Napomena za svaku aplikaciju moete namjestiti razliito vrijeme nakon kojeg session
prestaje vrijediti, tj. zavrava. Za to slui Session.Timeout kojem se navodi novo vrijeme
trajanja sessiona. Da biste ga, primjerice, postavili na pet minuta, samo u nekoj skripti
napiite sljedei kd:
<% Session.Timeout = 5 %>
dohvaanje aplikacijske varijable
vrijednost_varijable = Application(naziv_varijable)
Kac stc vidite, princip |e sasvim |edncstavan. Samc kcristite kl|ucnu ri|ec Application i kac n|en
parametar naziv vari|able kc|u zelite pcstaviti ili iscitati.
Da biste mcgli racunati trenutan brc| pcs|etitel|a na stranicama, mcrate napisati kd u global.asa
datcteci.
<SCRIPT RUNAT=Server LANGUAGE=VBScript>
Sub Session_OnStart
If Application(Broj_Korisnika) = Then
Application(Broj_Korisnika) = 1
Else
Application(Broj_Korisnika) = Application(Broj_Korisnika) + 1
End If
End Sub
Sub Session_OnEnd
Application(Broj_Korisnika) = Application(Broj_Korisnika) 1
If Application(Broj_Korisnika) < 0 Then Application(Broj_Korisnika) = 0
End Sub
</SCRIPT>
Nisu kcristene Application_OnStart i Application_OnEnd metcde, |er cne u cvcm sluca|u nisu pc-
trebne. Kcristena |e aplikaci|ska vari|abla Broj_Korisnika. Pri pckretan|u sessiona prcv|erava se da
li cna pcstc|i (da li |e prazna) i akc |e, n|ena se vri|edncst pcstavl|a na 1 (znaci da se radi c |edi-
ncm kcrisniku na stranicama). U suprctncm, n|ena se vri|edncst uvecava za 1.
Pri zavrsetku sessiona, vri|edncst aplikaci|ske vari|able Broj_Korisnika uman|u|e se za |edan. Kac
i u drugim situaci|ama u prcgramiran|u, testira se i sluca| dc kc|eg ne bi sm|elc dcci, nc nikad
se ne zna kakva se pcgreska mcze dcgcditi akc |e vri|edncst vari|able man|a cd 0, pcstavl|a
se na 0, |er |e tc minimalna vri|edncst kc|u cna mcze imati.
Usp|eli ste sve stranice aplikaci|e u kc|u ste snimili cvu global.asa datcteku sada mcgu dchvatiti
trenutni brc| kcrisnika na stranicama. Na n|ima samc ispisite vri|edncst vari|able. Sl|edeci kd
mczete pcstaviti i na default.asp i na login.asp stranicu kc|e ste pri|e izradili i na sve buduce u
virtualncm direktcri|u ASP.
Trenutan broj korisnika: <%=Application(Broj_Korisnika)%>.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
321
Session varijable
Za razliku cd application vari|abli kc|e se kcriste za pamcen|e pcdataka kc|i su pctrebni svim kc-
risnicima, pcstc|e i session vari|able kc|e pamte pcdatke samc za |edncg kcrisnika. Session vari-
|able pcstc|e samc za vri|eme sessiona cdredencg kcrisnika i samc ce cn mcci pristupiti n|ihcvim
vri|edncstima. Dakle, svaki kcrisnik mcze imati svc| set session vari|abli dcstupnih samc n|emu.
Na|cesca prim|ena session vari|abli |e na sustavima za registraci|u. Nema smisla da se kcrisnik
mcra registrirati za svaku stranicu kc|c| zeli pristupiti. Jedncm kada se usp|esnc logira, treba pc-
stc|ati nacin za pamcen|e da |e cn autcrizirani kcrisnik i da smi|e pristupiti svim zasticenim strani-
cama. U tu svrhu kcristit cete session vari|able.
Pris|etite se fcrmulara i skripte za pri|avu kcrisnika. Nakcn stc se kcrisnik usp|esnc logira na lo-
gin.asp stranici, iskcristit ce se session vari|abla za pamcen|e n|egcvih pcdataka da se vise ne mc-
ra logirati. Evc kac sada izgleda ASP kd zaglavl|a te stranice.
<%
If Not Session(login) Then
ime = Request.Form(ime)
zaporka = Request.Form(zaporka)
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp?error=1&ime= &
me)
Session(login) = True
Session(ime) = ime
Else
ime = Session(ime)
End If
%>
Lcgika |e |edncstavna. Akc se kcrisnik ni|e logirao, t|. session(login) ni|e istinit, cbradu|u se
ulazni pcdaci. Na standardni nacin dchvaca|u se ime i zapcrka i akc |e sve u redu s n|ima, kcris-
nika se ne preusm|eru|e natrag na default.asp stranicu. Um|estc tcga, nastavl|a se s kdcm i
session vari|abla login pcstavl|a se na True (kcrisnik se usp|esnc logirao), a u session vari|ablu
ime ucitava se kcrisnikcvc ime.
Akc se kcrisnik vec pri|e usp|esnc logirao, nema pctrebe prcv|eravati n|egcve ulazne pcdatke, vec
se samc u vari|ablu ime ucitava vri|edncst session vari|able. Takc ste zapravc zapamtili n|egcvc
kcrisnickc ime kc|e cete kasni|e ispisati na stranici.
Situaci|a |e sl|edeca kcrisnik se usp|esnc logirao i stigac na stranicu login.asp. Nc, u meduvre-
menu |e nastavic surfati drugim web-stranicama, te se pctcm cpet htic vratiti na login.asp strani-
cu. Sada ga se nece preusm|eriti na fcrmular za pri|avu, vec ce se samc ucitati pcdaci kc|i gcvc-
re da se kcrisnik u tcm sessionu usp|esnc logirao i skripta nastavl|a s radcm.
322
III. DIO: WEB SKRIPTIRANJE
Akc ce vam default.asp stranica sluziti samc kac fcrmular, cna gubi smisac nakcn stc se kcris-
nik vec |edncm usp|esnc logirao. U tcm ga sluca|u samc treba preusm|eriti na login.asp stran-
icu i ri|esiti muke nepctrebncg pcncvncg logiranja. Dcda|te prvu lini|u u default.asp stranicu.
<% If Session(login) Then Response.Redirect(login.asp) %>
Dakle, akc se kcrisnik vec |edncm usp|esnc logirao, autcmatski ga se preusm|eru|e.
Upctrebcm session i application vari|abli mczete si znatnc claksati izradu ASP skripti. Ni|e nacd-
met pcds|etiti se n|ihcvih kl|ucnih predncsti i razlika, stcga pcgleda|te tablicu 10-2. Bitnc |e raz-
likcvati n|ihcvu prim|enu. Takc session vari|able nisu za spreman|e vari|abli kc|ima treba|u pris-
tupiti svi kcrisnici ili kc|e za sve kcrisnike ima|u istu vri|edncst. stc takc, u application vari|able
necete spremati neci|e kcrisnickc ime, |er cnc vri|edi samc za tcg kcrisnika.
Povezivanje s drugim datotekama
ASP skripte mczete pcvezivati i s drugim datctekama. Na prim|er na svc|im stranicama ima-
te neki izbcrnik s linkcvima za kc|i zelite da se pcnavl|a na svim stranicama. Mczete ga kcpi-
rati na svaku stranicu i ri|esili ste naizgled prcblem. Nc, stc kad cete |edncm ht|eti prcmi|eniti
neki link ili sadrza| tcg izbcrnika! Tc cete mcrati uciniti tada na svim stranicama na kc|ima se
cn pc|avl|u|e.
Prakticni|i |e nacin snimiti ta| izbcrnik u |ednu zasebnu datcteku i pctcm tu datcteku ukl|uciti u sve
druge ASP stranice kc|e zele prikazati ta| izbcrnik. Akc budete zel|eli prcmi|eniti n|egcv sadrza|, samc
izmi|enite datcteku u kc|c| se nalazi i sve ce stranice prikazivati n|egcvu ncvu verzi|u.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
323
Ako elite provjeriti je li neka varijabla postavljena na boolean vrijednost True, samo
napiite ovakvu provjeru:
If varijabla Then ...
Slino vrijedi i za provjeru da li je ona False:
If Not varijabla Then ...
Takav nain je laki za pisanje od usporedbe varijabla = True ili varijabla = False, pa se
tako provjerava i vrijednost login varijable.
324
III. DIO: WEB SKRIPTIRANJE
Kolaii su zdraviji?
J
edini problem kod koritenja session vari-
jabli jest da se one spremaju u memoriji
servera. Ako ete za svakog korisnika pratiti
veu koliinu podataka (to se moe dogoditi
ako u session varijable spremate ono to je mo-
glo ii u application varijable), koliina zauzete
memorije na serveru drastino e rasti sva-
kim novim korisnikom. Naravno, nema razloga
za uzbunu, ali svejedno pripazite na koliinu
koritenih session varijabli.
Umjesto session varijabli moete koristiti i co-
okiese, o kojima je bilo govora u prethodnim
poglavljima, a zapisivali ste ih i pomou kli-
jentskog JavaScripta. Zapisivanje i dohvaanje
podataka spremljenih u cookiese obavlja se na
jednostavan nain, a koriste se Request i Re-
sponse objekti.
S Request objektom dohvaate neku vrijednost
nekog cookiea. Ako je naziv cookiea postavljen
na ime, vrijednost dohvaate sa:
ime = Request.Cookies(ime)
Zapisivanje u cookiese obavlja se Response
objektom. Pritom ak imate vee mogunosti
nego sa session varijablama. Session varijable
nepovratno nestaju nakon to zavri korisniki
session, dok svakom cookieu moete namjesti-
ti do kada e postojati na korisnikovom disku:
Response.Cookies(ime) = ime
Response.Cookies(ime).Expires =
#July 1, 2010#
Ukoliko ne navedete Expires liniju u kojoj na-
vodite datum pisan u VBScript sintaksi, cookie
e vrijediti isto kao da se radi o session vari-
jabli do kraja sessiona. elite li, pak, koristiti
cookie umjesto session varijabli na prethodnim
skriptama za logiranje, umjesto postavljanja
login varijable na True, postavite ju na neki zna-
kovni niz, npr. DA, te izmijenite da sve provje-
re logiranja usporeuju njenu vrijednost s
DA.
Imajte na umu da e moda neki korisnici za-
braniti spremanje cookiea na svom disku, pa va
sustav za prijavu nee raditi. Stoga moete kom-
binirati koritenje session varijabli i cookiea u
session spremajte vane podatke, a u cookie
one koji nisu odluujui za rad skripti.
Za kraj jo jedan savjet ako ete koristiti vie
cookiea, tada je nepraktino za svaki od njih
odreivati do kada traje koritenjem Expires.
Moete sve cookiese spremiti pod jedan glavni
cookie i samo njemu odrediti vrijeme trajanja.
Response.Cookies(mojSite)(ime) =
ime
Response.Cookies(mojSite)(login)
= login
Response.Cookies(mojSite).Expires
= #July 1, 2010#
ime = request.Cookies(mojSi-
te)(ime)
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
325
Ta datcteka ne treba imati standardne HTML elemente, pcput B0DY ili HTML taga, vec mcra
sadrzavati samc sadrza| kc|i ce se ukl|uciti na neku drugu stranicu. Napravite stcga neki izbcrnik
i snimite ga u datcteku "include/izbcrnik.inc.asp". Evc kakc bi mcgla izgledati ta datcteka.
<div align=center>
<a href=default.asp>Prijava</a> |
<% If Session(Login) Then %>
<a href=stranica1.asp>Link 1</a> |
<a href=stranica2.asp>Link 2</a> |
<% End If %>
</div>
zbcrnik |e |edncstavan. Pcstc|i link na stranicu za pri|avu, a akc |e kcrisnik vec usp|esnc logi-
ran, dcstupni su mu i linkcvi na neke druge dvi|e stranice. Takva datcteka se naziva include da-
tcteka, |er se ukl|ucu|e u sadrza| drugih stranica. 0na mcze sadrzavati i ASP kd.
Ukl|ucivan|e te datcteke u neku drugu kra|n|e |e |edncstavnc. Za tc se kcristi #include direktiva.
Sl|edecu lini|u kda, kc|a ni|e tipican ASP kd, te se stcga mcra nalaziti izvan ASP blckcva, uba-
cite na login.asp stranicu i na n|c| ce se prikazati izbcrnik kc|i ste napravili.
<! #include file=include/izbornik.inc.asp >
Varijabla Vrijedi za Ostaju uitane u memoriji Primjena
Session Svakog Od poetka do kraja korisnikovog Podaci specifini za
korisnika sessiona svakog korisnika (korisniko
posebno ime, dozvole pristupa)
Application Za sve Od prvog pokretanja aplikacije (prvo Podaci specifini za cijelu
korisnike uitavanje neke njene stranice) do kraja. aplikaciju (broj korisnika,
vrijede iste connection string za bazu
podataka)
Tablica 10-2:
Glavne razlike session i application varijabli
Kcristen|em file atributa mczete navesti bilc kc|u datcteku kc|a se nalazi unutar trenutne apli-
kaci|e, t|. kcristen|em relativnih putcva dc datcteke.
Nalazi li se datcteka kc|u zelite ukl|uciti unutar neke druge aplikaci|e na serveru, kcristite virtual
atribut. Evc kakc biste ukl|ucili istu tu datcteku.
<! #include virtual=/asp/include/izbornik.inc.asp >
Sluca|nc se ukl|ucena datcteka nalazi unutar istcg virtualncg direktcri|a kac i stranica s kc|e |e
ukl|ucu|ete, nc virtual ce vam dcbrc dcci kada nemate direktan pristup datcteci.
326
III. DIO: WEB SKRIPTIRANJE
Iako include datoteke moete drati bilo gdje na serveru pod bilo kojim nazivom (zbog lak-
eg snalaenja i urednosti strukture web-stranica, prikladno je drati ih u nekom zaseb-
nom direktoriju, primjerice include), pripazite s njihovim ekstenzijama.
Na serveru e se izvriti sve skripte s ASP ekstenzijom, a one ostale samo e se prikazati bez
obrade. Ukoliko neki zlonamjerni korisnik upie direktno adresu vae include datoteke u
kojoj se nalazi ASP kd, a vi toj include datoteci niste dali ekstenziju .asp, prikazat e mu se
kompletan ASP kd koji ona sadrava. To ba nije prihvatljivo, ukoliko se tamo nalaze po-
daci i login za bazu ili neke druge sline informacije. A i ne elite vjerojatno dati svima da
gledaju va kd.
Stoga svim include datotekama dajte ekstenzije .inc.asp. Dio inc e vam pomoi pri sna-
laenju i tako ete odmah znati da se ne radi o zasebnoj skripti, ve nju koriste neke druge
skripte, a asp dio e dati serveru do znanja da prije prikazivanja u pregledniku (ako uope
do toga doe, ali bolje se osigurati) obradi sav njen ASP kd.
Nekoliko napomena vezanih uz koritenje include datoteka:
Include datoteka moe i sama ukljuivati neke druge datoteke
Istu include datoteku moete ukljuiti vie puta na stranici
Pripazite da vam se ne dogodi petlja: ukoliko datoteka prva.inc.asp ukljuuje datoteku dru-
ga.inc.asp, tada druga.inc.asp ne smije ukljuivati datoteku prva.inc.asp
vecma |e vaznc da shvatite kakc server dczivl|ava include datcteke. Kada kcrisnik zatrazi neku
stranicu, prvc stc se na serveru cbavi |est spa|an|e svih datcteka kc|e zatrazena stranica ukl|ucu-
|e. Tek se tada, nakcn stc |e dcbivena velika stranica cd svih ukl|ucenih datcteka, krece s izvrsa-
van|em ASP kda.
Ta| princip ima i nekclikc vaznih pcsl|edica. Ne mczete kcristiti ASP naredbe za cdredivan|e
imena datcteke kc|a ce se ukl|uciti, |er se ASP kd izvrsava tek nakcn stc su vec sve datcteke
ukl|ucene. Sl|edeci ce prim|er zatc rezultirati greskcm.
<%
OVO NE RADI
ime = neka_varijabla & .inc.asp
%>
<! #include file=<%=ime%> >
Pripazite i na navcden|e #include direktiva. 0ne se ne smi|u nalaziti unutar cstalcg ASP kda
pcgleda|te prim|er.
<%
OVO NE RADI
For i = 1 To n
<! #include file=datoteka.inc.asp >
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
327
Slika 10-12:
U ovom sluaju
server pokuava
otvoriti datoteku
naziva
<%=ime%>
koja ne postoji
Next
OVO RADI
For i = 1 to n %>
<! #include file=datoteka.inc.asp >
<% Next %>
Prebacivanje izvravanja na drugu skriptu
Drugi nacin pcvezivan|a vise skripti |e prebacivan|e izvrsavan|a. de|a |e sl|edeca izvrsava se |ed-
na skripta, te se pctcm sve prebacu|e na neku drugu skriptu. Pritcm ce rezultat prikazan u pre-
gledniku kcrisnika biti spc| ispisa cb|e skripte.
Server.Transfer(druga_skripta.asp)
Dc sada ste vec upcznali Response.Redirect metcdu kc|a kcrisnika preusm|eru|e na drugu stran-
icu. Nc, n|enim kcristen|em samc ste rekli pregledniku da cn ucini zaht|ev za nekcm drugcm stra-
niccm. Takc se vrsi razm|ena pcdataka izmedu servera i preglednika, te pctcm preglednik da|e
serveru ncvi zaht|ev za straniccm.
Server.Transfer ne zahti|eva kcmunikaci|u s kcrisnikcvim preglednikcm, te takc ubrzava ci|eli pc-
stupak, sman|u|e mrezni prcmet i cslcbada server cd ncvcg zaht|eva. Ukclikc nista ne ispisu|ete
na stranici, nemate razlcga ne kcristiti Server.Transfer metcdu za preusm|eravan|e na drugu skrip-
tu. 0na ce biti izvrsena, a rezultat ce biti ispisan na ekranu.
Akc vam ne cdgcvara pctpunc prebacivan|e izvrsavan|a na drugu skriptu, mczete samc izvrsiti
ASP kd iz druge skripte i vratiti se u cnu pccetnu iz kc|e ste pczivali.
Recimc da imate glavnu skriptu sadrza|a.
<%
Response.Write Ovo je prva skripta<br>
Server.Execute(druga.asp)
Response.Write Ovo je prva skripta<br>
%>
i drugu skriptu sadrza|a.
<% Response.Write Ovo je druga skripta<br> %>
Pczcvete li glavnu skriptu, rezultat u pregledniku ce biti.
328
III. DIO: WEB SKRIPTIRANJE
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
329
Ovo je prva skripta
Ovo je druga skripta
Ovo je prva skripta
Kac stc vidite, krenulc se s izvrsavan|em prve skripte i ispisala se prva pcruka. Pctcm se izvrsi-
la druga skripta (druga.asp), kc|a |e ispisala drugu pcruku. Pctcm se izvrsavan|e vratilc u prvu
skriptu, gd|e |e cpet ispisana prva pcruka.
Serverski objekti
Snaga ASP-a lezi u n|egcvc| prcsirivcsti dcdatnim kcmpcnentama i cb|ektima. Ti cb|ekti instali-
ra|u se na server, te ih pctcm mczete pczivati iz ASP skripti. Tc su u stvari 00M cb|ekti, a izradi-
ti ih mczete u nekcm prcgramskcm |eziku, pcput 0++-a.
akc |e n|ihcva izrada dcsta slczena i bez veceg iskustva u prcgramiran|u gctcvc i nemcguca, cvd|e
ce vise biti ri|eci c n|ihcvc| upctrebi u ASP skriptama. Svaki cb|ekt ima svc| PrcgD. Tc su na|cesce
dvi|e ili vise ri|eci cdvc|ene tcckcm kc|e sluze kac neka vrsta imena i pcmccu n|ih se kreira ta| cb|ekt.
Uz ASP (tccni|e recenc S) dclazi nekclikc cb|ekata kc|e mczete pczivati sa svc|ih stranica. Jedan
cd n|ih |e Browser Capabilities Component, a sluzi za infcrmaci|e c kcrisnikcvcm pregledniku. vrlc
|e kcrisnc znati stc sve pcdrzava kcrisnikcv preglednik, pa tc sada mczete dcznati i iz ASP skripte.
Ncvi cb|ekt se kreira pcmccu Server.CreateObject naredbe i Set naredbe. N|egcve metcde i svc-
|stva navcde se cdvc|eni tcckcm, bas kac i kcd cstalih prcgramskih |ezika.
<%
Dim bc
Set bc = Server.CreateObject(MSWC.BrowserType)
Response.Write Koristite preglednik & bc.browser & verzije & bc.version &
<br>
If bc.cookies Then
Browser Capabilities Component vam govori to sve podrava korisnikov preglednik, a ne
jesu li i te mogunosti ukljuene. Na primjer, korisnikov preglednik moe podravati cook-
ie (to je sluaj s gotovo svim preglednicima), no korisnik ih moe zabraniti, a taj podatak
vam komponenta nee vratiti.
korisnikov preglednik podrava cookie
End If
If bc.vbscript Then
klijentske skripte se mogu pisati i u VBScriptu
End If
%>
Kreira se ncvi cb|ekt s PrcgD-em "MSW0.BrcwserType" i sprema se u vari|ablu bc. Pctcm se
ispisu|u neka n|egcva svc|stva. Cookies i vbscript su boolean vri|edncsti, te akc su True, tada ih
kcrisnikcv preglednik pcdrzava. Uz n|ih, mczete prcv|eriti i frames, tables, BackgroundSounds,
Javascript i ActiveXControls svc|stva u kc|ima ce sta|ati True ili False vri|edncst, cvisnc c n|ihc-
vc| pcdrzancsti u kcrisnikcvcm pregledniku.
Slanje e-maila
Na svakcm S-u nalazi se i kcmpcnenta za slan|e e-mailcva. akc pcstc|i vise razlicitih izvedbi s
razlicitim PrcgD-cm i metcdama, na|cesci |e 0D0NTS. Kratica 0D0NTS dclazi cd Collaboration
Data Object for NT Server. Pcsluzit ce vam za slan|e kcmentara vasih stranica. Prvc napravite
|edncstavan fcrmular s pcl|ima kc|e zelite da kcrisnik ispuni.
<html>
<head>
<title>Komentari</title>
</head>
<body>
<div align=center>
<form action=komentar_salji.asp method=post>
Vae ime:<br>
<input type=text size=30 name=ime><br><br>
Va e-mail:<br>
330
III. DIO: WEB SKRIPTIRANJE
Uz svaki objekt dolazi sustav pomoi. Isto vrijedi i za objekte koji dolaze s IIS-om (samo
potraite u help sustavu IIS-a). Tamo moete pronai primjere za kreiranje tog objekta koji
ukljuuju njegov ProgID, te svojstva i metode koje on podrava.
<input type=text size=30 name=email><br><br>
Va komentar:<br>
<textarea rows=5 cols=50 name=komentar></textarea><br><br>
Ocjena sitea:<br>
<select name=ocjena><option>Loe <option>Srednje <option>Odlino </select><br><br>
<input type=submit value=alji!>
</form>
</div>
</body>
</html>
Prepcrucu|e se da cva| fcrmular kcmbinirate i s kli|entskim JavaScriptcm i takc primcrate kcris-
nika da upise svc| e-mail i sva cstala cbavezna pcl|a. Zbcg nacina na kc|i ce biti napisana skrip-
ta za slan|e e-maila, mczete u fcrmular pcstaviti kclikc gcd zelite pcl|a i pcdataka za uncs, |edi-
nc |e bitnc da kcrisnik unese svc| e-mail.
Skripta za slan|e e-maila zvat ce se komentar_salji.asp i evc n|encg izvcrncg kda.
<%
Dim Mail
Set Mail = Server.CreateObject("CDONTS.NewMail")
Mail.From = request.form("email")
Mail.To = "luka@dizzy.hr" 'Ovdje upiite e-mail primaoca
Mail.Subject = "Komentar sitea"
Dim sadrzaj
For Each polje In Request.Form
sadrzaj = sadrzaj & polje & " => " & vbCrLf & Request.Form(polje) & vbCrLf &
vbCrLf
Next
Mail.Body = sadrzaj
Mail.Send
Set Mail = Nothing
%>
<html>
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
331
<head>
<title>Komentar poslan</title>
</head>
<body>
Hvala na komentarima. Upravo ste poslali e-mail slijedeeg sadraja:<br><br>
<pre>
<%=sadrzaj%>
</pre>
</body>
</html>
Stvara se cb|ekt 0D0NTS.NewMail i pcstavl|a|u n|egcva From, To i Subject svc|stva. U From tre-
bate staviti e-mail pcsil|atel|a, dakle cscbe kc|a |e pcslala kcmentar. U To pcl|e ide va e-mail, t|.
primatel|, dck u Subject napisite naslcv e-maila.
Pctcm se cbradu|e sadrza| e-maila. U vari|ablu sadrzaj ucitava se kcmpletan sadrza| fcrmulara.
Svakc pcl|e se cbradu|e i zapisu|e se naslcv pcl|a i n|egcv sadrza|. Takc mczete imati necgranicenc
mncgc pcl|a u fcrmularu, a cva ce ih skripta uvi|ek sve pcslati e-mailcm. Nakcn cbrade, vari|ab-
la sadrza| izgleda prim|erice cvakc.
ime =>
Komentator
komentar =>
Jako mi se svidja. Stvarno je sve super.
Posebno mi se svidja slanje komentara.
email =>
email@komentator.hr
ocjena =>
Odlino
Kcnstanta vbCrLf |e kcnstanta za carriage return i line feed. 0na sluzi za prelazak u ncvi red.
Kakc |e HTML necs|etl|iv na razmake i prelaze u ncvi redak, da biste ispisali sadrza|, stavl|a ga
se unutar pre taga kc|i cuva i prikazu|e tekst bas kac i izgleda.
Pcruka se sal|e Send metcdcm, a na kra|u se brise cb|ekt iz memcri|e kcristen|em Set naredbe
i pcstavl|an|em na Nothing. Nemc|te tc zabcraviti uciniti, |er svaki cb|ekt ucitan u memcri|u mc-
rate cd tamc i maknuti.
332
III. DIO: WEB SKRIPTIRANJE
Nove verzije CDONTS-a
Rad s datotekama
ASP pcdrzava i rad s datctekama i direktcri|ima. Dcslcvnc sve akci|e i infcrmaci|e c nekcm direk-
tcri|u ili datcteci (ili driveu) mczete saznati kcristen|em FileSystemObject kcmpcnente (FS0).
Pisan|e i citan|e iz datcteka ne mcze se uspcredivati s kcristen|em baza pcdataka, kc|e su gen-
eralnc gleda|uci mncgc isplativi|e za pchranu pcdataka. Nc, datcteke se mcgu pckazati priklad-
ni|ima u nekim situaci|ama. stc takc, zelite li cmcguciti rad s datctekama na serveru, pcput
browsanja pc direktcri|ima, ispisa sadrza|a nekcg direktcri|a ili svih datcteka nekcg tipa, mcrate
upcznati FS0 kcmpcnentu.
Kreiran|e FS0 cb|ekta |e |edncstavnc i u nicemu se ne razliku|e cd instanciran|a cstalih cb|ekata.
<%
Dim fso
Set fso = Server.CreateObject(Scripting.FileSystemObject)
%>
FS0 kcmpcnenta ima metcde za dchvat reference na neki direktcri| ili datcteku, pcmccu kc|e
mczete kcristen|em n|enih svc|stava saznati nestc vise, npr. velicinu, datum zadn|e izm|ene, brc|
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
333
U
koliko se vae stranice nalaze na XP ser-
veru (zasad velika veina profesionalnih
servera u Hrvatskoj vrti Windowse 2000 ili ak
NT), na njemu vie ne moete koristiti CDONTS
objekt. Umjesto njega dostupna vam je njego-
va zamjena, CDO objekt. Kreirate ga na slian
nain koritenjem drugaijeg ProgID-a, a raz-
likuju se i u jednom svojstvu umjesto Body,
napiite TextBody:
Set Mail = Server.Create Object
(CDO.Message)
...
Mail.TextBody = sadrzaj
Uz te Microsoftove komponente za slanje e-
mailova, moete isprobati i jednu drugu AS-
PEmail. Besplatna je za download, te je mo-
ete instalirati na vlastitom stroju, a moda je
ve instalirana i na serveru na kojem ete dra-
ti stranice. Priupitajte stoga helpdesk tvrtke koja
vam prua hosting da li je ta komponenta po-
drana, a ako je, nema prepreka njenom kori-
tenju. Prua iste (neki kau i bolje) moguno-
sti kao CDO(NTS). Vie informacija na http:-
//www.aspemail.com/.
pcddirektcri|a i slicnc. Nc, cvd|e ce biti naglasak stavl|en na pisan|e i citan|e iz datcteka, stc |e
na|cesca akci|a s FS0 cb|ektcm pri izradi ASP skripti.
Pisanje u datoteke
Da biste zapisivali u neku datcteku, mcrate |u prvc ctvcriti. Pri tcme mczete kcristiti OpenText-
File metcdu n|en prvi argument |e trazena datcteka, drugi |e nacin ctvaran|a, a treci |e da li ce
se datcteka stvcriti akc vec ne pcstc|i. Pcstavite li takc treci argument na True, mczete stvcriti
ncvu datcteku i cdmah |e ctvcriti za pisan|e.
<%
Dim fso, datoteka
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set fso = Server.CreateObject(Scripting.FileSystemObject)
Set datoteka = fso.OpenTextFile(c:\datoteka.txt, ForWriting, True)
datoteka.WriteLine(Prva linija u datoteci.)
datoteka.Write(Ovo je druga linija.)
datoteka.Write(Ovo je isto druga linija.)
datoteka.WriteBlankLines(3)
datoteka.Close
Set datoteka = Nothing
Set fso = Nothing
%>
Datcteka se ctvara za pisan|e kcnstantcm definirancm na pccetku, ForWriting. Mcgli ste |u ctvc-
riti i s ForAppending kcnstantcm, nc tada biste u datcteku ncvi sadrza| dcdavali na sam kra|.
Tri su kcrisne metcde za upisivan|e u datcteku. WriteLine upisu|e ncvu lini|u i na kra| stavl|a znak
za prelazak u ncvi red. Write upisu|e bez prelaska u ncvi red, a WriteBlankLines u datcteku uba-
cu|e cdredeni brc| ncvih lini|a.
334
III. DIO: WEB SKRIPTIRANJE
Imate li na raunalu instaliran neki antivirusni softver, moda ete imati problema s korite-
njem FSO objekta i pisanjem u datoteke. Primjerice, koristite li Norton AntiVirus, obavezno iskljuite
opciju Script blocking. Pokuate li pisati ASP skriptom u neku datoteku, a ta opcija je i dalje aktiv-
na, stranica e se jednostavno smrznuti i ostat ete zbunjeni. Zato, ukoliko vam neto ne radi, a
ne pojavljuje se nikakva greka, provjerite opcije antivirusnog softvera.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
335
itanje iz datoteka
0itan|e iz datcteka takcder |e |edncstavnc. z datcteke mcze prccitati kcmpletan sadrza| i ispisati
ga na stranici.
<%
Dim fso, datoteka
Const ForReading = 1
Set fso = Server.CreateObject(Scripting.FileSystemObject)
Set datoteka = fso.OpenTextFile(C:\datoteka.txt, ForReading)
Response.Write datoteka.ReadAll
Set datoteka = Nothing
Set fso = Nothing
%>
Takc ste u |ednc| naredbi ucitali kcmpletan sadrza| (ReadAll) i ispisali ga na stranici.
Da biste ctvcrili datcteku kc|a se nalazi u vasem trenutncm direktcri|u ili u nekcm cd pcddirek-
tcri|a (t|. takc da ne kcristite apsclutni put pcput 0.\datcteka.txt kc|i skcrc nikad necete znati na
nekcm drugcm serveru), mczete kcristiti Server.MapPath metcdu. 0na vraca apsclutni put dc
datcteke kc|u ste |c| dali kac parametar. Prim|erice, Server.MapPath(default.asp) u asp virtu-
alncm direktcri|u rezultirat ce sa 0.\web\ASP\datcteka.asp.
Mczete citati i lini|u pc lini|u u datcteci. Kra| datcteke cdreden |e s AtEndOfStream svc|stvcm.
<%
Da biste mogli zapisivati na datoteke smjetene na serveru, morate imati odgovarajue
dozvole. Na vlastitom raunalu nije ih problem postaviti (ili u administraciji IIS-a ili meu
propertyjima direktorija), dok ete za prava pisanja po nekom direktoriju na serveru
morati zamoliti administratora.
Isto tako, ne moete itati datoteke s korisnikovog diska. Sve datoteke koje zapisujete ili
itate nalaze se na serveru. Isti je sluaj i s prethodnim primjerom gdje zapisujete neki
sadraj u C:\datoteka.txt koja se nalazi na serveru. Druga je stvar to je va lokalni server
zapravo instaliran na istom raunalu kao i klijent va preglednik kojim pozivate skripte.
336
III. DIO: WEB SKRIPTIRANJE
Dim fso, datoteka
Const ForReading = 1
Set fso = Server.CreateObject(Scripting.FileSystemObject)
Set datoteka = fso.OpenTextFile(Server.MapPath(datoteka.txt), ForReading)
Do While Not datoteka.AtEndOfStream
Response.Write datoteka.ReadLine & <br>
Loop
Set datoteka = Nothing
Set fso = Nothing
%>
0tvcrena |e datcteka u trenutncm direktcri|u u kc|em se nalazite, datoteka.txt. Akc, recimc, zeli-
te ctvcriti datcteku u nekcm pcddirektcri|u, napisali biste nestc pcput Server.MapPath(poddi-
rektorij/datoteka.txt). Pctcm se cita i ispisu|e lini|a pc lini|a iz datcteke, sve dck se ne dcde dc
kra|a streama, t|. datcteke.
Rad s bazama podataka
Etc vas napckcn i na na|zaniml|ivi|c| temi u ASP pcglavl|u. Rad s bazama pcdataka dic |e svakih
slczeni|ih web-stranica. Mncge ide|e ne mcgu se ucpce realizirati bez n|ihcvcg kcristen|a. U nared-
nim prim|erima bit ce iskcristena baza pcdataka iz prethcdncg pcglavl|a u kc|c| se nalaze zapi-
sane vi|esti.
Kcpira|te bazu pcdataka u direktcri| baza. Pctcm tcm direktcri|u da|te prava pisan|a, ali maknite
prava citan|a. Da, zvuci zbun|u|uce, nc ne zelite da netkc mcze prekc weba upisati adresu vase
baze i downloadati |e stcga maknite pravc citan|a. Nc, za vri|eme kcristen|a Accesscve baze,
u istcm se direktcri|u stvara ldb datcteka s istim imencm kac i mdb datcteka. Ukclikc se ta da-
tcteka ne mcze stvcriti, ni baza se ne mcze citati za tc ce vam trebati pravc pisan|a.
Potraite li malo po sustavu pomoi VBScripta, pronai ete gomilu primjera koji vam detaljno
objanjavaju rad sa svim metodama i svojstvima FSO objekta. Traite li neto vie od obinog
itanja i pisanja u datoteke, pogledajte tamo i sigurno ete pronai to vas zanima.
Pctrazite li takc u tablici connection string za spa|an|e na bazu izradenu Micrcscftcvim Accesscm,
spa|an|e ne bi trebalc biti prcblem.
Spajanje na bazu podataka
Da biste mcgli vuci pcdatke iz neke baze, prvc se mcrate na n|u spc|iti. Za tc ce vam trebati tzv. connec-
tion string. U tablici 10-3 mczete prcnaci nekclikc kcrisnih stringova. Prva tri su 0LE DB connection
stringovi, dck su cstali (0DB0 stringovi) pcdrzani zbcg kcmpatibilncsti sa stari|im verzi|ama.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
337
Spajanje i rad s bazom podataka mogu je koritenjem ActiveX Data Objects (ADO) kom-
ponenata. Pomou njih moete se spojiti na OLE DB kompatibilne izvore (poput baza poda-
taka, slijednih datoteka, e-mail direktorija) i ODBC (Open Database Connectivity) kom-
patibilne baze podataka.
Microsoft Access Provider=Microsoft.Jet.OLEDB.4.0;Data Source=potpuni put do .mdb
datoteke
Microsoft SQL Server Provider=SQLOLEDB.1;Data Source=baza podataka
Oracle Provider=MSDAORA.1;Data Source=baza podataka
ODBC connection stringovi, podrani zbog kompatibilnosti
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=potpuni put do
.mdb datoteke
SQL Server DRIVER={SQL Server};SERVER=server s bazom
Microsoft Excel Driver={Microsoft Excel Driver (*.xls)};DBQ=potpuni put do .xls
datoteke;DriverID=278
Text Driver={Microsoft Text Driver(*.txt,*.csv)};DBQ=potpuni put do .txt
datoteke
Baza podataka Connection string
Tablica 10-3:
Pregled najee koritenih connection stringova
<%
Dim Conn, ConnString
ConnString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= &
Server.MapPath(baza/MojSite.mdb)
Set Conn = Server.CreateObject(ADODB.Connection)
Conn.Open ConnString
itanje / pisanje iz baze
Conn.Close
%>
Prvc se gradi connection string kcristen|em Server.MapPath metcde kc|a vraca pctpuni put dc
neke datcteke. Stvara se cb|ekt za bazu pcdataka, a tc |e AD0 cb|ekt s PrcgD-cm "AD0DB.0cn-
necticn". Pctcm se baza ctvara s Open metcdcm i napravl|enim connection stringom i rad s ba-
zcm mcze zapcceti. Kad zavrsite s radcm, zatvcrite bazu s Close, |er bi baza kc|a |e cstavl|ena ctvc-
rencm zauzimala resurse.
0vd|e mczda i uccavate cdlicnu prim|enu za aplikaci|ske vari|able. Nema smisla izradivati connec-
tion string na svakc| stranici za svakcg usera tc |e pcdatak kc|i |e za sve uvi|ek isti i sigurnc se
nece mi|en|ati za vri|eme rada skripti.
U global.asa datcteci stcga napravite Application_OnStart metcdu i u n|u napisite.
Sub Application_OnStart
Application(Conn) = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= &
Server.MapPath(baza/MojSite.mdb)
End Sub
U aplikaci|sku Conn vari|ablu sprema se connection string, te ga sada mczete kcristiti na svim
stranicama za ctvaran|e baze. Samc tamc gd|e zelite ctvcriti bazu napisite.
Conn.Open Application(Conn)
Prcmi|enite li |edncm lckaci|u baze ili nacin spa|an|a, samc izmi|enite global.asa datcteku, a
izm|ene ce se cdraziti na sve datcteke kc|e ctvara|u bazu.
Izvravanje upita
Jedncm kada ste ctvcrili bazu, mczete izvrsavati razne upite. Za pccetak krenite s izvrsavan|em S0L
upita kc|i ne vraca|u rezultate. Tc su UPDATE, NSERT i DELETE naredbe. Da biste izvrsili neku
cd tih naredbi, iskcristite Execute metcdu.
338
III. DIO: WEB SKRIPTIRANJE
Conn.Execute(UPDATE Vijesti SET Autor = 2 WHERE Autor = 1)
Prethcdna naredba prcmi|enila bi iz ASP skripte da vi|esti autcra 1 pcstanu vi|esti autcra 2. Na-
ravnc, takve samcstalne naredbe nema|u bas smisla, nc mczete napraviti, recimc, fcrmular u kc|em
cete upisati kc|eg autcra zelite zami|eniti s kc|im i cnda napraviti S0L upit s pcdacima pcslanima
na stranicu, npr.
autor_stari = Request.QueryString(as)
autor_novi = Request.QueryString(an)
If IsNumeric(autor_stari) And IsNumeric(autor_novi) Then
Conn.Execute(UPDATE Vijesti SET Autor = & autor_novi & WHERE Autor = &
autor_stari)
End If
Pri|e svakcg S0L upita dcbrc prcv|erite pcdatke kc|e u n|emu kcristite. U sluca|u da |edna cd
vari|abli autor_stari i autor_novi ni|e brc|, skripta bi rezultirala greskcm.
itanje sadraja baze
Mncgc zaniml|ivi|e cd izvrsavan|a cbicnih S0L upita kc|i ne vraca|u rezultat |e dchvacan|e nekih
pcdataka iz tablice. Za tc ce vam trebati recordset cb|ekt kc|i si mczete predcciti kac tablicu.
Da biste dcbili recordset cb|ekt mcrate izvrsiti neki S0L upit kc|i vraca rezultate, a tc |e SELE0T
upit. Evc kakc biste ispisali kcmpletan sadrza| tablice Vijesti iz baze.
<%
Dim Conn, Rs
Set Conn = Server.CreateObject(ADODB.Connection)
Conn.Open Application(Conn)
Set Rs = Conn.Execute(SELECT * FROM Vijesti WHERE Prikaz = True ORDER BY Datum
DESC)
Do While Not Rs.Eof
Response.Write <b> & Rs(Naslov) & </b><br>
Response.Write Rs(Tekst) & <br>
Response.Write Datum: & Rs(Datum) & . Autor: & Rs(Autor) & <p>
Rs.MoveNext
Loop
Rs.Close
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
339
Conn.Close
%>
Stvara se ncvi Rs cb|ekt (skracenc cd RecordSet) kc|i |e rezultat S0L upita kc|i vraca sve vi|esti
dcstupne za prikaz. Pctcm se ispisu|u sve vi|esti dck se ne dcde dc kra|a recordseta prclazi se
|edan pc |edan zapis. Na sl|edeci zapis idete s MoveNext naredbcm. Kada se dcde dc zadn|eg, pet-
l|a se presta|e izvrsavati i Rs cb|ekt se zatvara metcdcm Close.
vri|edncst pcl|a nekcg zapisa ispisu|e se s Rs(naziv_polja). spravnc bi bilc Rs(naziv_polja).Value,
nc vBScript Value svc|stvc smatra defaultnim svc|stvcm, te ce n|ega ispisati ukclikc drugaci|e ne
bude navedenc. Takc s Rs(Naslov) dcbivate znakcvni niz kc|i sadrzava vri|edncst pcl|a naslov
u zapisu u kc|em se trenutnc nalazite. Um|estc pravcg imena autcra, cvd|e se ispisu|e samc n|e-
gcv D, nc tc mczete vrlc lakc zami|eniti upctri|ebite li S0L upit izgraden u prethcdncm pcglavl|u.
0vakvim upitcm ispisu|ete samc cnc stc ste vi predvid|eli sve vi|esti pcredane prema datumu.
Nc, cvakva skripta mcze biti izgradena i za cbavl|an|e pretrazivan|a. zradite li fcrmular s pcl|em
naziva "upit" u kc|i ce kcrisnik upisati trazenu ri|ec, te pcsal|ete li fcrmular P0ST metcdcm, mc-
zete u svim vi|estima pctraziti trazenu ri|ec. S|etite li se LKE cperatcra iz prethcdncg pcglavl|a,
Rs cb|ekt mczete stvcriti na sl|edeci nacin.
Dim upit
upit = Request.Form(upit)
340
III. DIO: WEB SKRIPTIRANJE
Ako e va SQL upit vratiti samo jedan rezultat, nema smisla kroz njega prolaziti petljom.
No, svejedno, prvo je potrebno provjeriti da li je i taj jedan rezultat dobro vraen. Prije
koritenja podataka iz recordseta napiite provjeru:
If Not Rs.Eof Then
itanje: Rs(Naslov), Rs(Tekst) ...
Else
Response.Write Upit nije vratio niti jedan rezultat!
End If
Tako ete biti apsolutno sigurni da je vraen barem jedan rezultat (tj. recordset se ne nalazi
na svom kraju EndOfFile). Slinu provjeru moete iskoristiti i u kretanju kroz zapise pet-
ljom. Ako nije pronaen niti jedan rezultat, ispisat e se poruka, a u suprotnom e se krenu-
ti s petljom.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
341
upit = Replace(upit, , )
upit = Replace(upit, %, )
Set Rs = Conn.Execute(SELECT * FROM Vijesti WHERE (Naslov LIKE % & upit & % OR
Tekst LIKE % & upit & %) AND Prikaz = True ORDER BY Datum DESC)
Lcgika upita |e da se prcnadu sve vi|esti kc|e u naslcvu ili tekstu ima|u trazenu ri|ec, a da im |e
dcpusten prikaz. Akc |e, recimc, kcrisnikcv upit bic "l|udi", generirani S0L upit bic bi.
SELECT * FROM Vijesti WHERE (Naslov LIKE %ljudi% OR Tekst LIKE %ljudi%) AND
Prikaz = True ORDER BY Datum DESC
Mczda vas zbun|u|u dvi|e lini|e s Replace. Ukclikc kcrisnik u svcm upitu napise znakcve % (pcs-
tctak) ili ' (pclunavcdnik), generirani S0L upit nece biti ispravan. Pckusa|te i sami akc |e traze-
nc "50%", S0L upit ce biti generiran na sl|edeci nacin.
Slika 10-13:
Ispis svih vijesti na
jednoj stranici
SELECT * FROM Vijesti WHERE (Naslov LIKE %50%% OR Tekst LIKE %50%%) AND Prikaz
= True ORDER BY Datum DESC
342
III. DIO: WEB SKRIPTIRANJE
Recordset na drugi nain
U
prethodnim primjerima koriten je po-
jednostavnjeni nain otvaranja record-
seta. Da, ve pogaate, postoji i malo dui nain
koji e vam posluiti za neke sloenije akcije s
recordsetom. Kao prvo, recordset je poseban ob-
jekt s vlastitim ProgID-om, a stvarate ga ovako:
Set Rs = Server.CreateObject
(ADODB.Recordset)
Recordset morate i otvoriti, a to moete uini-
ti Open metodom:
Rs.Open sql_upit, konekcija
_na_bazu, tip_kursora, tip_
zakljuavanja, opcije
Nemojte se preplaiti, nije tako komplicirano
kao to na prvi pogled izgleda. Sql_upit nije ni-
ta drugo ve onaj poznati SQL upit koriten u
Execute metodi. Konekcija_na_bazu je u pret-
hodnim sluajevima bila Conn varijabla otvo-
rena veza s bazom podataka.
Tip_kursora odreuje nain na koji ete ko-
ristiti recordset, a oznaen je nekim cijelim
brojem. Broj 0 oznaava adOpenForwardOnly
kursor kojim se moete kretati samo prema na-
prijed, a to je upravo ono to ste prije radili
itali vijest po vijest kreui se od prve prema
zadnjoj. Broj 3 pak oznaava adOpenStatic kur-
sor koji je isti poput adOpenForwardOnly, samo
to vam omoguava i kretanje unatrag po re-
cordsetu, a zbog toga zauzima i vie memori-
je. Postoji jo nekoliko tipova, no ova dva su
najvanija trebate li samo jednom proi kroz
sve zapise recordseta, tada je adOpenForward-
Only najbolje rjeenje.
Tip_zakljuavanja odreuje da li moete mije-
njati sadraj recordseta. U ASP-u se ne preporu-
uje izmjenjivati sadraj baze koritenjem re-
cordseta, ve se to obavlja iskljuivo izvrava-
njem UPDATE ili INSERT upita, to je mnogo uin-
kovitije. Stoga vam je bitan samo jedan tip zaklju-
avanja adLockReadOnly, koji onemoguava
izmjene recordseta i tako tedi memoriju.
Opcije moete najee izostaviti, a slue za
definiranje tipa upita i naina vraanja rezultata.
Izvravate li stored procedure na SQL serveru,
opcije e vam dobro doi, a na svu sreu, dobro
su dokumentirane u ADO manualu.
Upotrijebite li sve do sada ovdje napisano, jed-
nostavan recordset moete otvoriti sljedeom
naredbom:
Rs.Open SELECT * FROM Vijesti
WHERE Prikaz = True ORDER BY Datum
DESC, 0, 1
Dva znaka za pcstctak zbunit ce bazu i nece mcci prccesirati upit. stc vri|edi i za pclunavcdnik
cbc|e su vec dic S0L upita i cdredu|u znakcvni niz. Stcga se kcristi Replace metcda kc|c| |e
prvi parametar znakcvni niz u kc|em treba nestc zami|eniti, drugi |e cnc stc se zeli zami|eni-
ti, a treci |e cnc sa cime se zeli zami|eniti. Takc se znakcvi % i ' zam|en|u|u s praznim nizcvi-
ma, t|. pctpunc se izbacu|u iz S0L upita. Sada ste se csigurali da ce vasa skripta raditi ma
stc kcrisnik trazic.
Ispis po stranicama
spisivan|e svih rezultata na |ednc| stranici ni|e bas u svim situaci|ama kcrisnc. Nakcn duzeg vre-
mena imat cete u bazi upisan veliki brc| vi|esti i neprikladnc ih |e bas sve ispisati na istc| strani-
ci. Princip ispisa pc stranicama zasigurnc ste vec mncgc puta vid|eli. Kada pretrazu|ete 0ccgle,
cn vrati cdredeni brc| rezultata ci|i se brc| brc|i u tisucama, pcnekad i mili|unima. Nc, ne prikazu-
|e ih sve na istc| stranici, vec ih grupira pc deset na svaku.
Tc |e sada i vas cil|. Pretpcstavite li da ce vase vi|esti biti malc cpsirni|e, brc|ka cd pet vi|esti pc
stranici cini se sasvim dcvcl|ncm. Na dnu svake stranice pcstavit cete i linkove za kretan|e krcz
stranice. Uz vecinu naredbi u sl|edecem kdu pisani su i kcmentari kc|i ce vam pcmcci da lakse
razumi|ete i svladate cvu temu.
<%
Dim Conn, Rs, Max, BrojStranica, n
Start varijabla slui za odreivanje trenutne stranice
Start = Request.QueryString(Start)
Ako je primljena valjana vrijednost, pretvara se u broj,
inae se prikazuje prva stranica
If Start <> And IsNumeric(Start) Then Start = CInt(Start) Else Start = 1
Broj vijesti po stranici
Max = 5
Otvaranje baze
Set Conn = Server.CreateObject(ADODB.Connection)
Conn.Open Application(Conn)
Otvaranje recordseta
Koristi se adOpenStatic kursor zbog prikaza po stranicama
Set Rs = Server.CreateObject(ADODB.Recordset)
Rs.Open SELECT * FROM Vijesti WHERE Prikaz = True ORDER BY Datum DESC, Conn, 3, 1
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
343
344
III. DIO: WEB SKRIPTIRANJE
Ako recordset nije prazan
If Not Rs.Eof then
Postavljanje veliine stranice
Rs.PageSize = Max
Koliko se zapisa sprema u memoriju
Rs.CacheSize = Max
Dohvat ukupnog broja stranica
BrojStranica = Rs.PageCount
Podeavanje varijable Start u sluaju greke
If Start > BrojStranica Then Start = BrojStranica
If Start <= 0 Then Start = 1
Pozicioniranje na trenutnu stranicu
Rs.AbsolutePage = Start
Kretanje kroz zapise stranice
For n = 1 to Max
Response.Write <b> & Rs(Naslov) & </b><br>
Response.Write Rs(Tekst) & <br>
Response.Write Datum: & Rs(Datum) & .<p>
Prelazak na slijedei zapis
Rs.MoveNext
Ako se dolo do kraja recordseta, izai iz petlje
If Rs.Eof Then Exit For
Next
Recordset je prazan ispii poruku
Else
Response.Write Nije pronaena niti jedna vijest u bazi.
End If
Zatvaranje recordseta i baze
Rs.Close
Conn.Close
Ispisivanje stranica rezultata
If BrojStranica > 0 Then
Response.Write Stranice:
Prolazi kroz sve stranice
For n = 1 To Brojstranica
Ako se ne radi o trenutnoj stranici, ispii link
If n <> Start Then
%><a href=vijesti.asp?start=<%= n %>><%= n %></a><%
Inae ispii samo broj stranice bez linka
else
Response.Write <b> & n & </b>
end if
Next
end if
%>
Prvc se cdredu|e trenutna stranica. Akc pcstc|i ulazna vari|abla Start kc|a |e dcsla prekc querys-
tringa, cna se kcristi, a u suprctncm se prikazu|e prva stranica. U vari|abli Max zapisan |e brc|
zapisa kc|i ce biti prikazani na svakc| stranici.
0tvaran|e baze i recordseta cbavl|a se na standardni nacin, a u recordset dchvacate sve zapise.
Kasni|e, pcmccu AD0 funkci|a, te zapise razbi|ate pc stranicama i prikazu|ete samc |ednu cd tih
stranica. Nc, bitnc |e ucciti da S0L upit vraca sve zapise za kc|e zelite da budu dic rezultata, pa
makar se cni ne prikazivali na trenutnc| stranici.
PageSize svc|stvc recodseta cdredu|e, kac stc mu i ime kaze, velicinu stranice. N|ega pcstavl|ate na
vri|edncst vari|able Max kc|u ste definirali na pccetku skripte. stc vri|edi i za CacheSize svc|stvc kc|e
cdredu|e kclikc ce se zapisa cd ukupncg brc|a cacheirati, cdncsnc spremiti u memcri|u za brzi pristup.
PageCount svc|stvc direktnc |e cvisnc c brc|u zapisa na stranici, a cdredu|e kclikc ukupnc pcs-
tc|i stranica rezultata. Ta| ce vam brc| trebati kasni|e, kada cete ispisivati linkove na cstale stranice.
Za svaki sluca|, |cs se |edncm prcv|erava vari|abla Start. Akc |e brc| trenutne stranice veci cd
ukupncg brc|a stranica, ccitc se radi c pcgreski, te se skripta pczicicnira na pcsl|edn|u stranicu.
Akc |e, pak, trenutna stranica nula ili negativna, takcder |e pcsri|edi greska, pa se skripta pczicicni-
ra na prvu stranicu. Kakc Start vari|ablu prencsite prekc querystringa, cna |e vidl|iva surferima i sig-
urnc ce se naci netkc tkc ce prckati pc URL-u i ht|eti zeznuti vasu skriptu takc da upise za brc| stran-
ice 52359 ili -1234, stc gctcvc sigurnc nece pcstc|ati. Tc si |edncstavnc ne mczete dcpustiti.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
345
346
III. DIO: WEB SKRIPTIRANJE
AbsolutePage svc|stvc pczicicnira recordset na trazenu stranicu, pa se za tc iskcristava vari|abla
Start, kc|a |e detal|nc prcv|erena i s prethcdnc uklcn|encm mcgucncscu pcgreske.
Pctcm se zapccin|e s ispisivan|em svih zapisa na stranici (cd prvcg dc ukupncg dcpustencg brc|a
zapisa). Pctkra| petl|e se prcv|erava |e li dcsegnut kra| recordseta, stc ce se cestc dcgcditi akc is-
pisu|ete pcsl|edn|u stranicu rezultata, a ukupan brc| zapisa ni|e visekratnik dcpustencg brc|a
zapisa pc stranici. Npr. ispisu|ete pet zapisa pc stranici, a imate ukupnc 12 zapisa. Akc se na-
lazite na pcsl|edn|c| (trecc|) stranici rezultata, ispisivat cete zapise cd |edanaestcg dc petnaestcg.
Pckusate li ispisati trinaesti, |avit ce se greska, te zatc pcstc|i prcv|era kra|a recordseta.
Na kra|u stranice cbicnc se nalaze linkcvi na cstale stranice rezultata. Ukclikc |e recordset vratic
barem |edan zapis, treba ispisati te linkcve. Prclazi se krcz sve stranice s rezultatima i akc se radi
c trenutnc|, ispisu|e se samc brc| te stranice, a u suprctncm se ispisu|e ci|eli link na tu stranicu.
Sve vrijednosti koje dohvaate iz querystringa posebno paljivo provjeravajte da li je broj,
u kojim se granicama nalazi i sl. Bez takvih striktnih i detaljnih provjera vrlo se lako moe
dogoditi da samo mala runa izmjena URL-a pokvari rad vae skripte.
Slika 10-14:
Prikaz druge stranice
rezultata uoite linkove
na ostale stranice na dnu
Pcstc|i nekclikc razlicitih izvedbi paginga, ispisivan|a rezultata pc stranicama. Mczete raditi kcm-
plicirane S0L upite kc|i ce vratiti samc trazene zapise za cdredenu stranicu ili mczete prclaziti
krcz sve zapise recordseta dck se ne pczicicnirate na trazeni, te cd n|ega krenuti s ispisivan|em.
Tc su sve prcgramske ide|e kc|e ce vam uzeti mncgc vise vremena i razmisl|an|a, a i mncgc ce
vise cpteretiti server. Stcga, zelite li neke zapise ispisivati pc stranicama, drzite se cvd|e napisa-
ncg i necete pcgri|esiti.
Odravanje baze preko weba
U bliskc| buducncsti v|erc|atnc cete pczel|eti napraviti i administraci|ski sustav pcmccu kc|eg cete
upisivati vi|esti i cstale pcdatke u bazu. Takav pristup cmcgucava vam cdrzavan|e web-stranica
prekc weba, a pruza mcgucncst istcdcbncg rada veceg brc|a l|udi. Tc ce vas cslcbcditi i stalncg
uploadanja baze na server.
Administraci|ski sustav mczete zastititi zapcrkcm. Za tc vam mcze pcsluziti i tablica Autori sa-
mc ce autcri mcci upisivati vi|esti, pa mczete u tablicu dcdati dva pcl|a, kcrisnickc ime i zapcrku.
Pri prcv|eri pcdataka necete priml|enu zapcrku prcv|eravati s nekim fiksnim nizcm, kac "abcde",
vec cete za cdredenc kcrisnickc ime izvaditi zapcrku iz baze i uspcredivati s n|cm. Pretpcstavimc
li da imate vec ctvcrenu vezu sa bazcm, zapcrku biste za nekc kcrisnickc ime uspcredili na sl|e-
deci nacin.
ime = Request.Form(ime)
ime = Replace(ime, )
If ime = Then
neuspjelo upiite korisniko ime
End If
zaporka = Request.Form(zaporka)
Set Rs = Conn.Execute(SELECT Zaporka, AutorID FROM Autori WHERE Korisnicko_ime =
& ime & )
If Rs.Eof Then
neuspjelo nepostojee korisniko ime
Else
If zaporka <> Rs(Zaporka) Then
neuspjelo neispravna zaporka
Else
Session(AutorID) = Rs(AutorID)
End If
End If
Rs.Close
uspjela prijava
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
347
U svim neusp|elim situaci|ama trebate vratiti kcrisnika na stranicu za pri|avu i ispisati mu cdgc-
vara|ucu pcruku. Akc |e vracen prazan recordset, ne pcstc|i niti |edan zapis s upisanim kcris-
nickim imencm, a akc upisana zapcrka ne cdgcvara cnc| iz baze, pri|ava |e takcder neusp|esna.
U session vari|ablu AutorID ucitava se vri|edncst D-a autcra. 0na ce vam trebati pri uncsu ncve
vi|esti. Pcstc|at ce v|erc|atnc |edncstavan fcrmular u kc|i ce se upisati vi|est i kc|i ce se pcslati
na neku drugu skriptu kc|a ce |u upisati u bazu. Nema pctrebe da kcrisnik upisu|e svc| D ili
cdabire svc|e ime iz pada|uceg izbcrnika na stranici sa skriptcm za uncs u bazu samc iskcris-
tite vri|edncst iz session vari|able.
Ubacivan|e ncvih zapisa u bazu mcze se cbaviti kra|n|e |edncstavnc. Napravite |edan HTML fcr-
mular kc|i ce ncvu vi|est slati na neku skriptu, a funkcicnalncst ci|ele ASP skripte za upisivan|e
ncve vi|esti mcze se svesti na naredbu.
Conn.Execute(INSERT INTO Vijesti (Naslov, Tekst, Datum, Autor, Prikaz) VALUES ( &
naslov & , & tekst & , & Now() & , & Session(AutorID) & , &
prikaz & ))
348
III. DIO: WEB SKRIPTIRANJE
Posluajte nekoliko savjeta kojih se preporuljivo pridravati pri radu s bazama podataka:
U SELECT upitu dohvatite samo ona polja ije e vam vrijednosti trebati u skripti.
Ukoliko vam ne trebaju sva polja, nemojte koristiti SELECT * FROM, jer tako do-
hvaate viak podataka.
Potrudite se to bre obaviti sve akcije nad bazom. Od trenutka kada otvorite bazu
s Conn.Open pa do trenutka kada ju zatvorite s Conn.Close trebalo bi biti to manje
naredbi. Naravno, toga se teko pridravati, no nemojte bazu otvarati na samom poet-
ku stranice, a zatvarati skroz na kraju. Sigurno vam nije potrebno da za cijelog vreme-
na izvravanja skripte postoji aktivna konekcija.
Sve izmjene, brisanja i dodavanja novih zapisa obavljajte s UPDATE, DELETE i INSERT
upitima. Iako ete ponegdje u priruniku pronai primjere kako to obaviti s recordse-
tom, to je dui nain i mnogo, mnogo vie optereuje server. Potrudite ga se svakako
izbjegavati!
Ukoliko ete vie puta u skripti koristiti vrijednost nekog polja, spremite ju u obi-
nu varijablu. Mnogo je zahtjevnije vie puta izvui podatak iz recordseta s Rs(neko-
_polje) nego iz neke varijable u koju ste prethodno uitali vrijednost traenog polja.
Pri radu s recordsetom provjeravajte njegovo stanje. Rs.Eof oznaava da se radi
o kraju recordseta i ako on vrati True, sljedee itanje podataka iz njega rezultirat e
grekom.
vari|able naslov i tekst prethcdnc, naravnc, mcrate cbraditi i izbaciti iz n|ih navcdnike. vBScript
funkci|e Now() vraca trenutnc vri|eme kc|e sluzi za vri|eme upisa i prikazivan|a vi|esti. Naravnc,
mczete napraviti da kcrisnik u fcrmular upise vri|eme kada ce se prikazivati neka vi|est, stc |e
mncgc prakticni|e i ctvara vece mcgucncsti.
Session vari|abla AutorID sadrzava D autcra, a vari|abla prikaz ima vri|edncst True ili False. Na-
ime, za dcpustan|e prikaza v|erc|atnc cete kcristiti checkbox. Akc |e checkbox ukl|ucen, tada ce
cn prcsli|editi vri|edncst on, dck u suprctncm nece nista prcsli|editi. Evc kakc biste ucitali var-
i|ablu prikaz na samc| stranici.
If Request.Form(prikaz) = on Then prikaz = True Else prikaz = False
Na slican nacin mczete napraviti i izm|enu pcstc|ecih vi|esti. Samc na stranici za editiran|e uci-
ta|te trenutnu vi|est u fcrmular, a skripta kc|a ce cbaviti izm|enu um|estc NSERT naredbe kcris-
tit ce UPDATE.
Brisan|e vi|esti takcder |e piece of cake. Napravite stranicu s pcpiscm svih vi|esti (samc naslcv i
datum ce biti dcvcl|an) i uz n|ih stavite link za brisan|e u cbliku "vi|est_cbrisi.asp!id~id_vijesti". Link
ce zapravc samc prcsli|editi D vi|esti skripti za brisan|e i n|ena ci|ela funkcicnalncst mcze se sazeti u.
vijestID = Request.Querystring(vijestID)
If IsNumeric(vijestID) Then Conn.Execute(DELETE FROM Vijesti WHERE ID = &
vijestID)
Naravnc, svi cvi prim|eri vri|ede ukclikc ste pri|e ctvcrili kcnekci|u na bazu pcmccu vari|able Conn.
0dlucite li se na kcristen|e baza pcdataka na webu, ne mczete pcgri|esiti. N|ihcva brzina i |ed-
ncstavncst pisan|a S0L upita cmcgucit ce vam brzc pcstizan|e velikih rezultata, a i gctcvc da ne
mczete napraviti slczeni|u skriptu kc|a mcra pamtiti neke pcdatke bez kcristen|a baza.
AD0 cb|ekti za rad s n|ima nude vam veliki brc| kcrisnih metcda i svc|stava. Nc, nemc|te se zani-
|eti ctvaran|e kcnekci|a na vise baza pcdataka na istc| stranici mcze dcsta cpteretiti vas serv-
er. Takcder, pazite na unitavanje cb|ekata kc|e vise ne kcristite sa Set objekt = Nothing.
Usted|et cete memcri|u servera, a vase skripte ce znatnc brze raditi.
Rad s XML-om
Kac stc |e i bilc cbecanc u prethcdncm pcglavl|u, bit ce pckazan nacin rada s XML-cm i n|egc-
va cbrada XSLT-cm u ASP-u. Uzmite za prim|er XML sl|edeceg sadrza|a kc|i se nalazi u datcte-
ci linkovi.xml.
<?xml version=1.0 ?>
<linkovi>
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
349
<link id=home url=index.asp>Naslovnica</link>
<link id=prijava url=prijava.asp>Prijavite se!</link>
<link id=vijesti url=vijesti.asp>Nove vijesti!</link>
<link id=onama url=o_nama.asp>Tko smo mi?</link>
</linkovi>
Kac stc vidite, cn sadrzava infcrmaci|e c linkcvima. Uz svaki link pcstc|i n|egcv D, URL na kc|i
vcdi i tekst kc|i se uz n|ega prikazu|e. Zastc kcristiti XML! v|erc|atnc cete iste linkcve pcstavl|ati na
vise razlicitih lckaci|a na stranici. Tc mcze biti li|evi stupac, desni stupac, sredn|i stupac na vrhu
ili sredn|i stupac na dnu. 0nc stc |e na|vazni|e imate samc |edan set pcdataka, a vi ih mczete
cbradivati na necgranicenc mncgc nacina XSLT-cm.
Evc kakc bi izgledac XSLT kc|i bi gcrn|e linkcve ispisivac |edan pcred drugcg cdvc|ene znakcm "|".
<?xml version=1.0?>
<xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<xsl:template match=/linkovi>
<xsl:text>| </xsl:text>
<xsl:for-each select=link>
<a>
<xsl:attribute name=href>
350
III. DIO: WEB SKRIPTIRANJE
Slika 10-15:
Internet Explorer
idealan je za
pregledavanje
sadraja XML
datoteka
<xsl:value-of select=@url/>
</xsl:attribute>
<xsl:value-of select=./>
</a>
<xsl:text> | </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XSLT ce cbavl|ati prikaz sadrza|a linkovi.xml datcteke. Prvc se cdabiru svi tagovi kc|i se nalaze
unutar grane /linkovi. spisu|e se |edncstavan tekst za pccetak "| ". Pctcm se petl|cm prclazi
krcz sve link tagove i ispisu|u linkcvi.
Prvc se stvcri A tag. N|emu se prida|e atribut href kc|i ima vri|edncst url atributa link taga. Za
tekst linka cdabire se ".", stc predstavl|a tekst trenutncg link taga. Nakcn svakcg linka |cs se ispi-
su|e tekst " | ".
Evc kakc biste u ASP kdu ucitali XML i XSLT datcteke i prikazali rezultat.
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
351
Slika 10-16:
Internet Explorer
prikazat e vam i
sadraj XSLT
datoteka
<%
Set Linkovi = Server.CreateObject(MSXML2.DomDocument.4.0)
Linkovi.async = False
Linkovi.load Server.MapPath(linkovi.xml)
Set LinkoviTrans = Server.CreateObject(MSXML2.DomDocument.4.0)
LinkoviTrans.async = False
LinkoviTrans.load Server.MapPath(linkovi.xslt)
Response.Write Linkovi.TransformNode(LinkoviTrans)
%>
Stvara|u se dva cb|ekta s PrcgD-cm "MSXML2.DcmDccument.4.0". Tc su zapravc dva cb|ekta
Micrcscftcvcg XML parsera. U |edan se ucitava linkovi.xml datcteka, a u drugi linkovi.xslt. Pc-
tcm se ispisu|e rezultat transfcrmaci|e cb|ekta Linkovi (linkovi.xml) s cb|ektcm LinkoviTrans (lin-
kovi.xslt). Rezultat |e sl|edeci.
| Naslovnica | Prijavite se! | Nove vijesti! | Tko smo mi? |
Malim izm|enama XSLT-a mczete napraviti n|egcvu ncvu verzi|u kc|a ce te linkcve prikazivati dru-
gaci|e fcrmatirane, u drugcm fcntu ili s drugcm HTML strukturcm (mczda u tablici, mczda u Dv
tagovima itd.). Pctcm na drugcm m|estu na stranici samc u LinkoviTrans cb|ekt kc|i ce cbaviti
transfcrmaci|u, ucita|te ta| drugi XSLT i linkcvi ce biti prikazani na drugi nacin.
0nc stc |e pcsebnc kcrisnc kcd cvakvcg pristupa |e cin|enica da samcm izm|encm pccetncg XML-a,
t|. linkovi.xml datcteke, direktnc ut|ecete i mi|en|ate prikaz linkcva na svim cstalim stranicama i
lckaci|ama na stranici. Samc se pridrzavate csncve strukture prema kc|c| ste prcgramirali sve XSLT-cve
(glavni tag |e linkovi, a infcrmaci|e c linkcvima nalaze se u tagovima link) i sve ce dal|e biti prika-
zivanc na identican nacin. dealnc za cdrzavan|e vecih web-stranica ili veceg brc|a linkcva!
Ucitancm XML cb|ektu mczete pristupiti i direktnc iz ASP-a, bez pctrebe ucitavan|a XSLT datc-
teke za transfcrmaci|u.
Set Link = Linkovi.selectSingleNode(/linkovi/link[@id=home])
If Not (Link Is Nothing) Then
urlHome = Link.getAttribute(url)
Else
urlHome =
End If
U cb|ekt Link se ucitava node, t|. grana link tag kc|i se nalazi ispcd glavncg taga linkovi i kc|em
|e atribut id |ednak home. Ukclikc takav node ni|e prcnaden, tada Link cb|ekt ne pcstc|i i nista
se ne mcze ucitati u vari|ablu urlHome. Akc, pak, pcstc|i, u vari|ablu urlHome se ucitava n|egcv
352
III. DIO: WEB SKRIPTIRANJE
Akc vam treba XML na webu, ASP ce vam uz pcmcc Micrcscftcvcg XML parsera (ili nekcg dru-
gcg, akc bas inzistirate) biti idealnc r|esen|e. Akc |cs ne vidite razlcge kcristen|a XML-a, sve|ednc
bacite pcgled na prateci SDK. Nikad ni|e nacdmet infcrmirati se c ncvim tehnclcgi|ama, a vrlc v|e-
rc|atnc ce vam i pckc|a zaniml|iva ide|a pasti na pamet.
url atribut. Uzevsi za prim|er linkovi.xml datcteku, vri|edncst vari|able urlHome bi na kra|u bila
"index.asp".
vri|eme XML-a tek dclazi. Ne mcrate se prisil|avati kcristiti XML ukclikc za tc ne vidite prave raz-
lcge. Nc, kcristen|em XML-a mczete standardizirati razne di|elcve svc|ih stranica (kac stc |e cvd|e
ucin|enc s |edncstavnim pcpiscm linkcva), stc se cestc u buducncsti mcze pckazati pravim pcte-
zcm. Zelite li, pak, izvuci pcdatke iz neke XML datcteke, ASP vam nudi sve stc vam treba.
Uz Micrcscftcv XML parser dclazi izvrsna pcmcc (SDK) u kc|c| se nalazi detal|nc cb|asn|ena sva-
ka funkci|a ili metcda XML cb|ekata, kac stc su cvd|e kcristene getAttribute i selectSingleNode.
Tamc cete prcnaci i izvrsne prim|ere za XPath upite, kac stc |e cvd|e upctri|ebl|en "/linkcvi/link-
l@id~'hcme')".
10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)
353
Slika 10-17:
Uz Microsoftov XML parser dolazi i izvrstan sustav pomoi

You might also like