You are on page 1of 64

Pregled sadraja

Predgovor
Uvod

xxi
xxv

I. DIO: OSNOVNI POJMOVI


1. poglavlje:
2. poglavlje:
3. poglavlje:

Osnove weba i izrade stranica


HTML
CSS

II. DIO: VIZUALNI PRISTUP WEB-STRANICAMA


4. poglavlje:
5. poglavlje:
6. poglavlje:

Dizajn web-stranica
Vizualna izrada HTML stranica
Izrada animacija

III. DIO: WEB SKRIPTIRANJE


7.
8.
9.
10.
11.
12.

poglavlje:
poglavlje:
poglavlje:
poglavlje:
poglavlje:
poglavlje:

Klijentsko i serversko skriptiranje


JavaScript i DHTML
Baze podataka
Active Server Pages (ASP)
ASP.NET
PHP

IV. DIO: DODACI


DODATAK
DODATAK
DODATAK
DODATAK
DODATAK

Rjenik
Kazalo

A:
B:
C:
D:
E:

1
3
23
67

87
89
119
161

183
185
203
267
293
355
371

405
Smjetanje web-stranica
Prijava na trailice
Besplatni resursi
WAP stranice
Koritenje CD-a

407
433
449
459
477

489
495

10.

POGLAVLJE

Active Server Pages


(ASP)
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

ctive Server Pages je Microsoftova tehnologija za izradu dinamikih stranica. Programiranje u ASP-u smatra se serverskim programiranjem, jer se sve ASP skripte
izvravaju na serveru. Posjetitelj koji je zatraio neku web-stranicu za koju ak ni
ne mora znati da je u stvari ASP skripta, dobit e isti HTML kd koji je generirala skripta. Taj HTML kd potom e se prikazati u njegovom pregledniku, a jedino po emu korisnik moe zakljuiti da je dobio rezultat neke ASP skripte je ekstenzija zatraene webstranice (.asp umjesto .html).

No, prije nego to se upustite u istraivanje i uenje ASP-a, poeljno je dobro znanje HTMLa i JavaScripta. Tek kada shvaate nain funkcioniranja web-stranica i interakciju preglednika s web serverom, moi ete izraivati kvalitetne ASP skripte.

III. DIO: WEB SKRIPTIRANJE

Primjerice, mnoga jednostavna raunanja mogu se obaviti u samom JavaScriptu. Ako imate webstranicu koja slui kao cjenik na kojoj su izlistani proizvodi i njihove cijene, i elite ponuditi korisniku raunanje ukupne cijene svih odabranih proizvoda, ne trebate koristiti ASP, iako se ti podaci
moda i vade iz neke baze podataka. Klijentsko skriptiranje bre e obaviti stvar, korisnik nee
morati zahtijevati novu web-stranicu s podacima o odabranim proizvodima, a vae stranice e
biti mnogo uinkovitije.
S druge strane, elite li izmjenjivati sadraj neke web-stranice, ovisno o primljenim podacima od
korisnika ili ispisivati podatke iz neke baze podataka, serverske skripte su jedino rjeenje. ASP vam
omoguuje izradu veoma sloenih aplikacija, a suelje za njih ima svaki korisnik Interneta preglednik. Takoer, va ASP kd nevidljiv je posjetiteljima stranica, koji mogu vidjeti samo izlazni HTML
kd. Rairenost serverskih aplikacija svakim je danom sve vea i one osvajaju sve vee trite.
Odlikuje ih velika raznolikost primjene (npr. razmjena lanaka i tekstova meu suradnicima, praenje rada svakog zaposlenika tvrtke, itd.), instalacija i odravanje na samo jednom mjestu serveru,
te grafiko suelje u HTML-u koje mogu koristiti svi korisnici s instaliranim preglednikom.

Pozadina ASP-a

ASP skripta je obina tekstualna datoteka u kojoj se ispreplee ASP i HTML kd. Kad korisnik
zatrai tu datoteku, server e izvriti sve ASP dijelove kda na stranici i kao rezultat vratiti isti
HTML. Takav princip rada zahtijeva da se svaka ASP skripta kompilira pri svakom pozivanju. Kada izmijenite ASP skriptu, samo ju uploadajte na server umjesto starije verzije i ona e se ubudue izvravati kad ju korisnik pozove.

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 mogli isprobavati ASP skripte na vlastitom raunalu, trebat ete instalirati server. Nemojte se preplaiti radi se o instalaciji programa koji e vaem raunalu dati odlike servera

294

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

moi ete pokretati serverske skripte, kreirati vlastite direktorije, pregledavati sve stranice u pregledniku i ako elite, omoguiti pristup na njega preko Interneta. Moda ga ve i imate instaliranog na raunalu.

Internet Information Services


Ako ASP skripte planirate izraivati na Windowsima 2000 ili XP, trebat e vam Professional verzije.
Na njihovom instalacijskom CD-u moete pronai IIS (Internet Information Services), Microsoftov
server koji moe izvravati ASP skripte. Ako ga ve nemate instaliranog, to moete uiniti preko
Control Panel Add or Remove Programs Add/Remove Windows Components. U popisu pronaite Internet Information Services (IIS), oznaite ga i instalirajte.

Slika 10-1:
Instalacija Internet
Information Services
servera

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.

Kliknete li, pak, na Details gumb, moete odabrati koje e se njegove komponente instalirati. Ako
nije oznaena, svakako se preporuuje odabiranje instaliranja dokumentacije (Documentation)
koja e vam pomoi pri radu sa IIS-om, a sadri i pomo za neke komponente ASP-a.

295

III. DIO: WEB SKRIPTIRANJE

Slika 10-2:
Provjerite i koje e
se komponente IIS-a
instalirati

IIS takoer moete pronai u sklopu Windows NT 4.0 Option Packa, pa tako svoje ASP skripte
moete isprobavati i na NT platformi.

Manja verzija IIS-a

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 slabijoj verziji IIS-a, ali s istom funkcionalnosti
web server na kojem moete isprobavati svoje
ASP skripte.

Naravno, PWS (Personal Web Services) pogodan je iskljuivo za osobnu upotrebu i testiranje skripti. elite li svoje raunalo iskoristiti za
pokazivanje stranica javnosti, te oekujete poveani broj posjeta i zahtjeva za stranicama
smjetenima na njemu, razmislite o IIS-u i instalaciji novijeg operacijskog sustava.

Nakon to ste instalirali IIS, njegovu ikonu za administracijsko suelje moete pronai u Control
Panel Administrative Tools (ili All programs Administrative Tools). Kliknete li na svoje raunalo, Web Sites te potom na Default Web Site moi ete vidjeti strukturu svog lokalnog servera
popis svih direktorija i datoteka dostupnih na njemu.

296

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Slika 10-3:
Administracijsko
suelje IIS-a

Nemicrosoftova rjeenja

ko na raspolaganju nemate neki Microsoftov operacijski sustav, ve radite na nekom Unixu ili Linuxu, umjesto ASP-a jednostavno
nauite PHP. No, ako ba morate razvijati ASP
skripte, na raspolaganju vam je posebno rjeenje ChiliASP (http://www.chilisoft.asp). Ova
aplikacija omoguit e vam testiranje i isprobavanje 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 skripte, jer je to jednostavno neisplativo. Na Unix serverima PHP ima apsolutnu prednost.

Virtualni direktoriji
Nakon to ste instalirali web server koji e vam omoguiti isprobavanje ASP skripti, provjerite da
li on uope radi. Otvorite preglednik i u njega upiite adresu http://localhost, dakle bez ikakvih
www ili com. To je adresa vaeg raunala, tj. servera instaliranog na njemu.

297

III. DIO: WEB SKRIPTIRANJE

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 otvoriti poetna stranica na serveru instaliranom na tom istom raunalu. Tako moete umjesto
http://localhost upisivati i http://127.0.0.1, rezultat je isti.

Kada zatraite svoj localhost, on e otvoriti web-stranice smjetene u C:\Inetpub\wwwroot direktoriju. To je va poetni ili home direktorij. U njega smjestite sve skripte i direktorije za koje elite
da budu dostupni preko web servera.
No, svaki server moe imati i direktorije, npr: http://localhost/direktorij1. Ako ete razvijati vie
razliitih skripti i aplikacija, a gotovo sigurno hoete, tada vam se ne isplati sve skripte stavljati
u home direktorij. Mnogo je isplativije iskoristiti mogunosti virtualnih direktorija.
Virtualni direktoriji su direktoriji na vaem serveru koji nisu spremljeni unutar C:\Inetpub\wwwroot direktorija, ve negdje drugdje na vaem raunalu. Za svaki virtualni direktorij bitna su dakle,
dva podatka: lokalni direktorij na vaem raunalu u kojem se nalaze skripte i direktorij na serveru
pomou kojeg mu je mogue pristupiti.
Da biste mogli isprobati kako rade virtualni direktoriji, stvorite ga. Odaberite neki proizvoljni direktorij na svojem raunalu u kojem ve imate neke gotove stranice (moe i obine .html datoteke).
Otvorite administracijsko suelje IIS-a (Control Panel Administrative Tools Internet Information
Services) i desnim gumbom mia na Default Web Site odaberite New Virtual Directory.

Slika 10-4:
Kroz postupak stvaranja
novog virtualnog direktorija vodit e vas wizard

298

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Otvorit e vam se mali wizard koji e vas voditi kroz postupak dodavanja novog virtualnog direktorija. Alias je zapravo ime pomou kojeg ete mu pristupiti na serveru, dakle, imat e adresu
http://localhost/alias. U alias napiite to god elite, to ak ne mora biti ime lokalnog direktorija u kojem su trenutno smjetene stranice.
U sljedeem koraku morate upisati lokalno ime direktorija u kojem ete smjestiti (ili su ve smjetene) vae stranice. Kliknite na Browse i pronaite ga na disku. U posljednjem koraku moete
postaviti dozvole za taj direktorij. Preporuuje se ostavljanje defaultnih postavki, tj. samo prve
dvije opcije ukljuene. Kliknite na Next i va virtualni direktorij je kreiran.
Koritenje virtualnih direktorija je veoma dobro za organizaciju i odravanje web-stranica. Mnogo
je lake imati poseban direktorij na odgovarajuem mjestu, nego sve drati unutar jednog unaprijed definiranog (C:\Inetpub\wwwroot) direktorija. No, svaki virtualni direktorij je i zasebna aplikacija, zajedno sa svim pogodnostima to to donosi. Vie o aplikacijama i njihovim mogunostima moi ete proitati kasnije.
Vano je jo samo spomenuti da, ukoliko vam se ukae potreba, moete poetni direktorij servera
postaviti na neki drugi lokalni direktorij. Kliknete li desnim gumbom mia na Default Web Site,
te potom na Properties, otvorit e se prozor sa svim postavkama stranica. Na tabu Home Directory moete definirati drugi direktorij kojem ete tada moi pristupati preko http://localhost adrese. To je pogodno ukoliko imate vrlo vane skripte s kojima svaki dan radite jednostavnije ih
je drati u glavnom direktoriju web-stranica, a opet ne pomijeati ih s postojeim sadrajem C:\Inetpub\wwwroot direktorija.
U poetku, kako budete uili ASP, preporuuje se definiranje virtualnog direktorija za testiranje i isprobavanje. Moete ga namjestiti kako god elite, ali kako e se on kasnije u poglavlju spominjati, recimo
da se radi u C:\web\ASP direktoriju s aliasom asp (pristupate mu preko http://localhost/asp adrese).

VBScript i JScript
ASP skripte moete pisati u dva jezika VBScript i JScript. VBScript je skriptni jezik s Basic sintaksom koja se koristi i u Visual Basicu. JScript je, pak, Microsoftova verzija JavaScripta sa sintaksom slinom programskom jeziku C.
Oba programska jezika imaju sline mogunosti, no naravno, programski kd pisan u njima
veoma je razliit. VBScript se smatra standardom za pisanje ASP skripti. Podrava klase i u njemu je openito mnogo lake pisati, jer ne morate paziti na velika i mala slova pri koritenju varijabli, naziva objekata i imena funkcija.
S druge strane, JScript je moda malo moniji skriptni jezik zbog boljeg hvatanja pogreaka u skriptama i mogunosti nasljeivanja objekata. Ako ste ve doma u JavaScriptu i ne elite uiti neku
drugu, Basic sintaksu, JScript e vam biti lagan za svladati, jer koristi veinu funkcija dostupnih u
klijentskom JavaScriptu.

299

III. DIO: WEB SKRIPTIRANJE

No, ukoliko ste poetnik, preporuuje se koritenje VBScripta. U njemu ete veoma brzo postii
rezultate, a koristi ga velika veina ASP programera. Neete se trebati muiti s velikim i malim
slovima (to vam esto moe prouzrokovati glavobolje pri traenju problema u skripti), a i mnogo
je jednostavnije pisati skripte u njemu. Stoga e se u ovom poglavlju koristiti prvenstveno VBScript
za izradu ASP skripti. JavaScript ste ve nauili u prethodnim poglavljima i ne bi vam trebao biti
problem, ako to ba elite, pisati ASP skripte u njemu. No, za poetak krenite s VBScriptom.

Osnove VBScripta

VBScript je skraenica za Microsoftov Visual Basic Scripting Edition. Skripte pisane u VBScriptu
moete koristiti kao ASP skripte ili na klijentskoj strani, ba kao i JavaScript. Imajte pritom na umu
da e se klijentske VBScript skripte izvravati samo u Internet Exploreru. No, ovo poglavlje nee
se baviti s klijentskim VBScriptom, ve njegovim koritenjem za pisanje ASP skripti.
Prvo ete nauiti openite osnove VBScripta koje moete primijeniti i na klijentske i na serverske
skripte. Kasnije ete to znanje iskoristiti za pisanje ASP skripti. Stoga, na posao!

Osnovna pravila
Sintaksa VBScripta veoma je jednostavna i mnogo laka za nauiti od, recimo, JScript (ili JavaScript) sintakse. Ako ste moda davnih dana programirali u QBasicu ili ste poeli s Visual Basicom, neete imati nikakvih problema.
U VBScriptu, kao to je ve reeno, ne trebate se brinuti oko malih i velikih slova. Primjerice, varijable var1 i VAR1 su jedna te ista varijabla. Isto tako, kada budete itali VBScriptovu pomo (koju
moete downloadati s Microsoftovih web-stranica ili pronai na CD-u uz knjigu), ne trebate pamtiti
velika i mala slova u nazivima funkcijama. Iako je dobra programerska praksa tih se konvencija pridravati (npr. pisati poziv funkcije s IsNumeric umjesto s isnumeric), one nee uzrokovati greku.

Varijable
Vjerojatno najvanija odlika VBScripta je postojanje samo jednog tipa varijabli. Variant je posebni tip podataka koji moe sadravati razliite tipove informacija, ovisno kako se koristi. To u praksi znai da pri deklariranju varijabli u VBScriptu ne trebate navesti kojeg je ona tipa, a u nju
moete spremati brojeve i izvravati matematike operacije, datume i raditi s datumima, znakovne
nizove i izvlaiti podnizove, itd.
Dim varijabla, ispis
varijabla = Danas je lijep dan.
ispis = left(varijabla, 5)

300

= Danas

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

varijabla = 1500
ispis = varijabla * 2

= 3000

varijabla = Now()
ispis = Day(Now)

= trenutni dan u mjesecu

Kao to vidite, nigdje niste morali ponovno definirati varijablu varijabla (osim na poetku s naredbom Dim), iako ste joj naizgled mijenjali tip podatka.
Variant ima nekoliko razliitih podtipova podataka. Tako se interno prvo pojavljivanje varijable varijabla smatra znakovnim nizom, drugo pojavljivanje brojem, a tree datumom. Konverzija meu podtipovima obavlja se automatski, iako postoje funkcije za konverziju. Pogledajte primjer:
Dim var1, var2, ispis
var1 = 150
var2 = 150
ispis = var1 + var2

= 300

ispis = CInt(var1) + var2

= 300

ispis = var1 & var2

= 150150

U oba sluaja e varijabla ispis imati vrijednost 300. U prvom sluaju se zbrajaju var1 i var2, i
iako je var1 znakovni niz, ona se automatski konvertira i zbrajanje se obavlja. U drugom sluaju obavljate konverziju sa za to predvienom funkcijom.
Za razliku od JavaScripta u kojem je znak + imao dualno znaenje zbrajao je brojane vrijednosti i spajao znakovne nizove, u VBScriptu znak + ima iskljuivo svrhu zbrajanja brojeva.
elite li spojiti dva niza, iskoristit ete operator &. U treem se sluaju tako varijabla var2 automatski konvertira u znakovni podtip, jer & radi samo sa znakovima.
U VBScriptu postoje funkcije za konverziju u bilo koji podtip podataka. Sve one za ulaz primaju
varijablu koju treba konvertirati u odreeni tip. Tako ete sa CInt() obaviti konverziju u integer
(cijeli broj), a sa CDate() u datum. Na raspolaganju imate jo dodatnih funkcija za konverziju,
no ove su najee koritene.
Prethodni primjer sadri potencijalnu greku. Ako se varijabla var1 ne moe pretvoriti u broj (npr.
ima vrijednost abcde), skripta e javiti greku. Stoga se preporuuje prije svake konverzije tipova provjeriti da li je ta konverzija mogua.
Dim var1, var2, ispis
var1 = abcde

301

III. DIO: WEB SKRIPTIRANJE

var2 = 150
If IsNumeric(var1) Then ispis = CInt(var1) + var2

Funkcija IsNumeric vraa informaciju da li se neka varijabla moe pretvoriti u broj. Na slian nain
radi i funkcija IsDate koja vraa podatak da li se varijabla moe pretvoriti u datum. Ukoliko ete
raditi s varijablama za koje neete sa stopostotnom sigurnou znati kojeg su podtipa (primjerice,
unio ih je korisnik), a htjet ete sa njima raditi kao da su brojevi ili datumi, obavezno koristite
ove funkcije i izbjegnite mogue greke.

U svim isjecima kda u ovom poglavlju sve e varijable biti eksplicitno deklarirane koritenjem 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 grekama. 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.

Komentari
U prethodnim primjerima, kao i u ostalim u ovom poglavlju, bili su napisani komentari. Oni se
oznaavaju drugaije nego u JavaScriptu. Znak (polunavodnik) oznaava da je tekst do kraja
retka komentar.
U VBScriptu nemate mogunost komentiranja veeg broja linija, ve ete to morati napraviti tako
da na poetak svake linije stavite polunavodnik.
Kod za racunanje zbroja
Zbrajaju se dvije varijable
Dim a, b, zbroj
a = 100

302

Deklariranje varijabli

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

b = 200
zbroj = a + b

Zbrajanje varijabli

Prethodni primjer je besmislen, ali dobro pokazuje upotrebu komentara. Svoj kd obavezno komentirajte, jer pogledate li ga nakon nekoliko tjedana odmora, neete se u njemu lako snai. To je takoer
dobra programerska praksa ako nekom drugom date vlastiti source kd, ta osoba bi se trebala
odmah u njemu snai.

Naredbe
Iako naredbi (i pogotovo funkcija) u VBScriptu ima napretek, slijede samo one najvanije koje
morate znati i ako vas usred noi probude. To su naredbe za odluivanje (if naredba) i petlje za
ponavljanje istog dijela kda.

Odluke
S osnovnim konceptom if naredbe upoznali ste se ve u JavaScriptu. No, za razliku od JavaScripta, VBScript ne koristi znakove { i } za oznaavanje nekog bloka kda. Poetak bloka
se u VBScriptu ne treba oznaavati, a za kraj se koristi kljuna rije End. Pogledajte kako bi
izgledala obina if naredba:
If var1 = 150 Then
neke naredbe
var1 = var1 + 50
End If

Kao uvjet se u ovom sluaju provjerava da li je vrijednost varijable var1 jednaka 150. U if naredbi u VBScriptu ne trebate koristiti zagrade, a i provjera jednakosti se obavlja sa samo jednim
znakom = (sjetite se opet JavaScripta). Naravno, vae provjere mogu biti i mnogo sloenije i
koristiti neke logike operatore, a if naredba se moe sastojati od samo jedne naredbe u istom
retku, pri emu ne treba koristiti End If:
If var1 > 100 AND NOT (var1 = 132) Then var1 = var1 + 50

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

303

III. DIO: WEB SKRIPTIRANJE

If naredbe mogu biti i mnogo sloenije ako im dodate jo koju provjeru, 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

Prethodni primjer izvrava se na sljedei nain: ako je varijabla var1 jednaka 100, ispis je jednak Varijabla je 100!. Ako var1 nije 100, prelazi se na sljedeu provjeru (var1 = 150), a ako
ni ta nije zadovoljena, pokuava se s treom (var1 = 200). Ako niti jedna provjera nije ispunjena, izvrava se Else dio.
Pri koritenju If naredbi pripazite da uvjet uvijek vrati logiku (boolean) vrijednost True ili False.
Pri tome se moete sluiti raznim operatorima usporedbe: manje od (<), vee od (>), jednako
(=), razliito (<>), manje ili jednako od (<=), vee ili jednako od (>=) i logikim operatorima
(AND, OR, NOT, XOR).

Petlje
Kao i u JavaScriptu, dva su osnovna tipa petlji for i do. For petlja ima malo drugaiju sintaksu i njen kraj se oznaava s Next koji obavlja uveavanje varijable brojaa:
zbroj = 0
For i = 1 to 100
zbroj = zbroj + i
Next

Tako se obavlja zbrajanje prvih sto brojeva. Broja je varijabla i koja ide od vrijednosti 1 do vrijednosti 100. Kraj bloka naredbi for petlje oznaen je s Next.
Korisna je i For Each petlja. Njome prolazite kroz sve elemente neke kolekcije za poetak slijedi primjer s poljem, a kasnije i s drugim ASP kolekcijama. Pogledajte kako moete zbrojiti sve lanove
nekog polja. U primjer je ukljuena i deklaracija polja:
polje = new Array(1,6,2,8,9)
zbroj = 0
For Each element In polje

304

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

zbroj = zbroj + element


Next

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.

Kao to ete vidjeti kasnije, For Each petlja korisna je u sluajevima kada ne znate koliko lanova ima neka kolekcija ili se jednostavno ne elite zamarati obinom For petljom.
Do petlje imaju nekoliko oblika, kao i u JavaScriptu. Petlju moete izvravati sve dok je neki uvjet
istinit (Do While uvjet ... Loop i Do ... Loop While uvjet) i sve dok uvjet ne postane istinit (Do
Until uvjet ... Loop i Do ... Loop Until uvjet). U prvim sintaksama u oba sluaja uvjet se provjerava na poetku, pri ulazu u petlju (i ako nije ispunjen, petlja se niti jednom ne izvrava), dok se u
drugim sintaksama uvjet provjerava nakon prolaza petlje, te se tako petlja izvrava barem jednom.
Slino kao to For petlja ima Next, Do petlja zavrava s Loop. Do petlju moete prekinuti usred
njenog izvravanja i to s Exit Do naredbom, npr:
brojac = 1
Do While brojac > 0
brojac = brojac + 1
If brojac > 10 Then Exit Do
Loop

Iako bi se gornji primjer trebao beskonano izvravati (beskonana petlja) jer je varijabla brojac
uvijek vea od 0, u trenutku kada ona pree vrijednost 10, petlja se prekida i nastavlja se s
izvoenjem prve sljedee naredbe poslije Loop.
Izlazak iz petlje moete primijeniti i u for petljama samo napiite Exit For naredbu.

305

III. DIO: WEB SKRIPTIRANJE

Funkcije
Kao i svaki drugi jezik, i VBScript podrava funkcije. Postoje dva tipa funkcija u VBScriptu one
koje vraaju neku vrijednost (oznaene s Function) i one koje ne vraaju vrijednost (oznaene sa
Sub). Zavretak funkcija se oznaava s kljunom rijei End (End Function ili End Sub).
Pogledajte kako bi izgledala funkcija koja vraa kvadrat nekog broja:
Function kvadrat (broj)
kvadrat = broj * broj
End Function

Da bi neka funkcija vratila vrijednost, tu vrijednost unutar nje morate pridijeliti varijabli s istim imenom kao i naziv funkcije. U gornjem sluaju imate funkciju kvadrat koja prima varijablu broj. Vrijednost
koju ona vraa sprema se u varijablu nazvanu kvadrat. Evo kako bismo tu funkciju pozvali:
Dim a, rezultat
a = 2
rezultat = kvadrat(a)

= 4

Za razliku od funkcija, procedure oznaene sa Sub ne vraaju nikakve vrijednosti. One izvravaju neki dio kda ili mijenjaju vrijednosti globalnih varijabli.

Za VBScript i globalne / lokalne varijable vrijede ista pravila kao i za JavaScript (odn. JScript),
te stoga tome nee ovdje biti posveeno previe teksta.

Evo kako bi izgledala jedna procedura za izraunavanje sume prvih 10 brojeva (u komentarima
je napisano radi li se o lokalnoj ili globalnoj varijabli):
Sub suma10()
Dim i

deklaracija lokalne varijable

For i = 1 to 10
zbroj = zbroj + i
Next
End Sub

306

koritenje globalne varijable zbroj

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Dim zbroj

deklaracija globalne varijable

zbroj = 0
suma10()

pozivanje procedure

izmijenjena globalna varijabla zbroj sada ima vrijednost 55

Pozivanje procedura ima jednu malu sitnicu koju morate zapamtiti. Ukoliko vaa procedura ima
samo jedan parametar, moete ju pozvati s nazivProcedure(parametar), odn. stavljanjem parametra u zagradu, kao to je obiaj i s JavaScriptom. No, ukoliko procedura ima vie parametara,
onda ne moete koristiti zagrade, ve ih samo odvajate zarezom:
nazivProcedure parametar1, parametar2, parametar3 itd.

Moete koristiti i Call naredbu kojom pozivate neku proceduru, a tada smijete sve parametre
staviti u zagrade:
Call nazivProcedure(parametar1, parametar2, parametar3)

Upravo steeno znanje predstavljat e odlinu podlogu na kojoj ete nadograditi znanje ASP-a.
Naravno, ovakav kratki uvod u VBScript slui za osnovno upoznavanje s njegovim mogunostima, a ukoliko negdje zapnete, preporuuje se itanje slubene VBScript dokumentacije. Kasnije
na ASP primjerima dobit ete praktino znanje i uvid u svakodnevne primjene VBScripta.

ASP programiranje

I eto vas napokon na pravim stvarima. Napokon ete napisati svoju prvu ASP skriptu i isprobati
ju u pregledniku. Do sada je spominjano da su ASP skripte obine tekstualne datoteke koje
sadre ASP i HTML kd. Moete to gledati i na drugaiji nain. To su zapravo HTML datoteke u
koje je umetnut ASP kd.
Prije nego to ponete sa izradom, jedan dobar savjet. Napravite li pogreku u pisanju skripti,
Internet Explorer e vam po defaultu prikazati vlastitu poruku o greki. Ta poruka ne sadrava
uzrok pogreke koja se dogodila na serveru, ve je to tzv. prijateljska poruka koja se prikazuje
da ne bi zbunila neiskusnog surfera kad naie na neispravnu skriptu.
Takav opis pogreke ne pomae vam puno i zapravo nemate pojma to se uope dogodilo. Moete traiti i traiti po skripti, a tko zna da li ete vidjeti ono to je prouzroilo greku. Stoga se preporuuje iskljuivanje poruka Internet Explorera. Kliknite na Tools Internet Options Advanced
Browsing Show friendly HTTP error messages i iskljuite tu opciju.

307

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 pokuate uitati neku neispravnu skriptu, na ekranu e vam se pokazati tip pogreke
i redak u kojem se ona pojavila. To e vam omoguiti njeno lake pronalaenje i uklanjanje.

Slika 10-6:
Opcija Internet Explorera
za iskljuivanje tzv. prijateljskih poruka

ASP kd je oznaen sa <% i %> to su poetni i zavrni tagovi. Evo kako bi izgledala ASP
skripta koja bi deset puta ispisala Dobar dan!.
<html>
<head>

308

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

<title>Prva ASP stranica</title>


</head>
<body>
<%
For i = 1 to 10
Response.Write Dobar dan!<br>
Next
%>
</body>
</html>

Slika 10-7:
Detaljan opis greke
mnogo je korisniji pri
izradi ASP skripti

Kao to vidite, radi se o naizgled obinoj stranici unutar koje je ubaen jedan ASP blok oznaen sa
<% i %>. Sve unutar tih tagova izvrit e se na serveru prije slanja stranice posjetitelju. Isprobajte
kako ona radi napiite ju, spremite pod imenom default.asp u direktorij C:\web\ASP (to je onaj
virtualni direktorij koji ste napravili za potrebe testiranja) i u pregledniku napiite http://localhost/asp/.

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.

309

III. DIO: WEB SKRIPTIRANJE

Kao rezultat dobit ete obinu HTML stranicu na kojoj je deset puta ispisano Dobar dan! s prelascima u novi red. Pogledate li source te stranice (View Source) vidjet ete sljedee:
<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 shvaate kako rade ASP skripte. U prethodnom primjeru, prvo se izvrio kd unutar ASP blokova (<% ... %>), to je rezultiralo s ponavljanjem deset puta Dobar dan!<br>. Tako generirana HTML stranica potom se alje posjetitelju. Njegov preglednik interpretira dobiveni HTML
kd i prikazuje stranicu. Vrlo je bitno uoiti da ASP skriptama moete generirati i HTML kd, kao
to je gore uinjeno s jednostavnim BR tagom.

Slika 10-8:
Source kd
generirane
HTML stranice
prikazan u
Notepadu

Za ispisivanje u ASP skriptama se koristi Response.Write metoda. Response je objekt koji ete
kasnije jo susretati, a Write je metoda kojom se ispisuje neki tekst, koji naravno, moe
sadravati HTML tagove, klijentski JavaScript kd, CSS definicije i sve ostalo to se ne procesira
na serveru, ve u korisnikovom pregledniku.
Za Response.Write postoji i kratica, a to je <%= neki_tekst %> tag. Kako je takav nain ispisivanja zasebni ASP blok kda, potrebno je prethodno zatvoriti otvoreni ASP blok, te ga poslije
opet otvoriti. Pogledajte primjer:
<html>
<head>

310

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

<title>Prva ASP stranica</title>


</head>
<body>
<% For i = 1 to 10 %>
<div align=center><%= i %>. put Dobar dan!</div>
<% Next %>
</body>
</html>

Iako se For naredba ne nalazi unutar jednog ASP bloka, sve to je izmeu njenog poetka i kraja
oznaenog s Next smatra se njenim naredbama. Izvan ASP kda napisan je HTML kd i to DIV
tag. Unutar njega ispisuje se o kojem se prolazu u petlji radi i to koritenjem <%= ... %> naredbe koja ispisuje vrijednost brojaa, varijable i. Bitno je primijetiti da se izvrava sve unutar
For petlje, iako to nije ASP kd, ve obian HTML koji se stoga samo ispisuje.

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 interno 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.

Rad s formularima
Jedan od temelja izrade svake serverske aplikacije je prenoenje nekih podataka s jedne stranice na drugu. To moe biti korisniko ime i zaporka pri logiranju, narudba iz kataloga ili formular za slanje e-maila.

GET metoda
Napravite jednostavan formular i snimite ga kao ASP stranicu (ako ete koristiti iskljuivo HTML
kd bez ASP-a, moete stranicu snimiti i s HTML ekstenzijom). Recimo da elite napraviti login
sustav korisnik se mora logirati svojim korisnikim imenom i zaporkom da bi pristupio zatienim
dijelovima web-stranica, kao to je recimo sustav za unos vijesti u bazu podataka.
<html>
<head>

311

III. DIO: WEB SKRIPTIRANJE

<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>

Ovu stranicu snimite pod imenom default.asp. Ona se sastoji od dva polja za unos podataka
jedno za korisniko ime, a drugo za zaporku, te od submit gumba koji alje formular. Najvanije
je da primijetite kako svako polje ima svoj naziv naveden pod atributom name, ime i zaporka. Ta imena e vam trebati da dohvatite njihov sadraj.

Slika 10-9:
Jednostavan izgled formulara na stranici za
prijavu za dizajn se
pobrinite sami

312

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Action atribut formulara postavljen je na login.asp stranicu. Na njoj e se obavljati provjera zaporke i doputati ulaz zatienom dijelu stranica. Zbog jednostavnosti primjera bit e doputena
samo jedna zaporka (abcde), dok ete u stvarnim situacijama ili predvidjeti po jednu zaporku
za svako korisniko ime ili te podatke itati iz baze podataka, to je daleko prikladnije.
<%
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 samom poetku login.asp stranice, prije HTML kda, uitava se sadraj formulara. Koristi se
Request.QueryString metoda kojoj proslijedite ime elementa formulara iju vrijednost elite uitati u neku varijablu. Tako se u varijablu ime uitava element polja s nazivom ime, a u zaporka
element s nazivom zaporka. Iako e pri unosu zaporke u formular u polje tipa password ona
biti skrivena od pogleda, ASP skriptom moete bez problema dohvatiti njenu vrijednost.
Potom se provjerava ispravnost zaporke. Ako je njena vrijednost razliita od abcde, tada ete korisnika natrag vratiti na default.asp na kojoj se nalazi formular za prijavu. To se moe napraviti
koritenjem Response.Redirect metode, te navoenjem adrese na koju korisnika elite preusmjeriti. Tako, ako biste eljeli korisnika negdje iz ASP skripte preusmjeriti na neke druge stranice ili
skriptu, samo biste, primjerice, napisali:
Response.Redirect(http://www.bug.hr/)

Vi, naravno, moete dodati malo sloenije If provjere i provjeravanje veeg broja zaporki, no za ovaj
primjer ovo je sasvim dovoljno.
Razmislite o sljedeem to ako korisnik sluajno ima ukljuen Caps Lock i sve pie velikim slovima? U tom sluaju bi napisao zaporku ABCDE, ali ona svejedno ne bi bila prihvaena.
Korisno je predvidjeti takve sluajeve i odmah usporeivati velika slova. Funkcija UCase() pretvara
neki znakovni niz u velika slova, dok suprotno od nje radi LCase() (zapamtite ih po UpperCASE i

313

III. DIO: WEB SKRIPTIRANJE

LowerCASE). Sasvim je svejedno provjeravate li mala ili velika slova, no evo kako bi ta provjera
izgledala koritenjem velikih slova:
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp)

Sadraj varijable zaporka pretvara se u velika slova koja se usporeuju s ABCDE. Sada je apsolutno svejedno da li je korisnik upisao abcde ili ABCDE, obje zaporke e biti prihvaene, tj.
nee biti vraen na stranicu za prijavu.
Kada se upie tona zaporka, bez obzira na korisniko ime, bit e prikazana login.asp stranica,
tj. njen HTML kd. Na njoj se ispisuje jednostavna poruka Dobro doao i upisano korisniko
ime. Svakako je korisno prethodno provjeriti da li je korisniko ime uope upisano na stranici za
prijavu. To moete napraviti zajedno s provjerom zaporke:
If UCase(zaporka) <> ABCDE OR ime = Then Response.Redirect(default.asp)

Obratite pozornost na adresu prikazanu u pregledniku kada se nalazite na login.asp stranici. Ona
izgleda neto poput ovog (naravno, ovisi koje ste korisniko ime ili lozinku napisali, te da li svojim skriptama pristupate preko virtualnog direktorija nazvanog asp):
http://localhost/asp/login.asp?ime=luka&zaporka=abcde

Uzrok ovakve adrese nalazi se u metodi slanja formulara s default.asp stranice. Koritena je GET
metoda koja sve elemente formulara alje preko URL-a. Slanjem nekog podatka preko URL-a
moete napraviti i jedan trik. Bilo bi dobro da se korisniku, kada upie pogrenu zaporku, na formularu ispie poruka o tome. Predvidite to u svojoj redirekciji:
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp?error=1)

Ako korisnik upie pogrenu zaporku, preusmjerujete ga na default.asp?error=1. Uinak takve


redirekcije mogli biste postii i da napravite formular koji se alje GET metodom s elementom naziva error u koji je upisano 1. Naravno, to je besmisleno i puno je lake slati podatke ovako, runo napisavi URL.
Na default.asp predvidite mogunost netonog upisivanja zaporke, pa neka ona izgleda ovako:
<html>
<head>
<title>Prijava</title>
</head>
<body>

314

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

<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>

Kljuan je ASP kd na poetku formulara. Ako je varijabla error poslana preko URL-a i njena je
vrijednost 1, tada e se ispisati poruka Upiite tonu zaporku!.

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 vratiti 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 vrijednost. To je jedini ispravni nain da sloenije znakovne nizove prenesete na drugu stranicu.

315

III. DIO: WEB SKRIPTIRANJE

Idite i korak dalje na sljedeem featureu korisnici e vam biti zahvalni. Nakon to je korisnik
upisao pogrenu zaporku, na stranicu s formularom proslijedite i njegovo upisano korisniko ime.
Preciznije bi bilo rei vratite mu, jer e upisano korisniko ime putovati od formulara preko
login.asp stranice natrag do formulara. Evo na to se misli:
If UCase(zaporka) <> ABCDE Then Response.Redirect(default.asp?error=1&ime= & ime)

Kao to ste mogli vidjeti u adresi login.asp stranice nakon uspjenog logiranja, varijable u URLu se odvajaju znakom &. Tako ete vi sada natrag na stranicu default.asp slati poruku o pogreki i varijablu ime koja e sadravati upisano korisniko ime. Podsjetite se znakom & se u ASPu takoer obavlja spajanje nizova. Prethodna redirekcija bi za korisniko ime luka korisnika
preusmjerila na adresu:
http://localhost/asp/default.asp?error=1&ime=luka

Jo vam je samo preostalo na stranici s formularom uitati vraeno ime i prikazati ga kao vrijednost polja za upis korisnikog imena. Ono e sada izgledati ovako:
<input type=text name=ime size=30 maxlength=50
value=<%=Request.QueryString(ime)%>>

U atribut value uitava se vrijednost varijable ime poslane preko URL-a. Ako ona ne postoji, tj.
ili nije poslana, ili je korisnik tek prvi put uitao stranicu bez da je prije pogrijeio zaporku, polje
e ostati prazno.

Slika 10-10:
Izgled stranice za
prijavu s ukljuenim svim korisnim
trikovima

316

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

POST metoda
Problem kod koritenja GET metode je to su podaci vidljivi u URL-u. Nije ba prikladno zaporku
prenositi preko URL-a. Posjetiteljev suradnik ili prijatelj moe samo baciti pogled na njegov preglednik i uoiti zaporku u adresi login.asp stranice. Isto tako, koritenjem GET metode ogranieni
ste na 4.096 bajtova, tj. sadraj vei od toga nee proi.
Drugi nain prenoenja podataka iz formulara je koritenjem POST metode. Razlike u HTML kdu
stranice nema, osim meu atributima FORM taga. Umjesto method=get stavite method=post.
<form method=post action=login.asp>

Kako je Request.QueryString metoda sluila za dohvaanje podataka prenesenih preko URL-a,


ona vam nee posluiti u ovom sluaju. Podatke prenesene POST metodom dohvaate s Request.Form metodom. Prve dvije ASP linije login.asp stranice stoga mijenjaju svoj oblik:
ime = Request.Form(ime)
zaporka = Request.Form(zaporka)

Sve ostalo radi kako treba. Varijable su sakrivene i ne vide se u URL-u, a poruke o pogreki i dalje se prenose preko URL-a. Naime, ne moete poslati POST metodom neto iz ASP skripte. elite li vriti redirekcije na druge stranice s nekim parametrima, primorani ste koristiti GET i parametre u URL-u.

Tablica 10-1:
Zapamtite glavne razlike GET i POST metode slanja formulara pri koritenju u ASP skriptama
METODA SLANJA

ASP METODA ZA DOHVAT

PRENOSI SE URL-om

GET

Request.QueryString

DA

POST

Request.Form

NE

Ispitivanje parametara
Naravno, kao i u svakom drugom vidu programiranja, pogreke su mogue. Ako ste zbunjeni ili vam
skripta u kojoj itate varijable poslane GET-om ili POST-om ne radi, moe vam pomoi ispis svih
ulaznih varijabli. Samo ispiite kompletan sadraj Request.QueryString, odnosno Request.Form
kolekcije:

317

III. DIO: WEB SKRIPTIRANJE

<%
Ispis QueryString kolekcije
Response.Write(Request.QueryString)
Ispis Form kolekcije
Response.Write(Request.Form)
%>

Upotrijebite li ovaj kd na login.asp stranici (naravno, ovisno koju ste metodu slanja koristili),
trebali biste dobiti neto poput:
ime=luka&zaporka=abcde

Kad se jednom nakupi vie podataka ili varijabli u tim kolekcijama, nee ba biti lagano iitati sve
iz njih. U tom sluaju upotrijebite For Each petlju koja e proi kroz sve primljene podatke i prikladno vam ih ispisati. Evo kako biste ju upotrijebili za QueryString kolekciju:
For Each podatak In Request.QueryString
Response.Write podatak & = & Request.QueryString(podatak) & <br>
Next

Zapnete li jednom, nemojte paniariti. Upotrijebite jednu od ove dvije tehnike i sigurno ete pronai pogreku u ulaznim podacima. Ono to ove metode na nekoj stranici ne ispiu, zasigurno nije
ni stiglo do te stranice. Pogreku u tom sluaju potraite u formularu i nainu slanja podataka.

ASP aplikacija
ASP aplikacijom smatraju se sve skripte unutar jednog virtualnog direktorija. Kada kreirate virtualni direktorij na nekom serveru, on u poetku nee biti smatran samostalnom aplikacijom, ve
e biti smatran dijelom glavne aplikacije cijelog servera. U samostalnu ga, pak, aplikaciju moete
pretvoriti otvorite li Properties stranicu virtualnog direktorija u IIS administraciji i kliknete Create
gumb, kao to je prikazano na slici 10-11.
to dobivate koritenjem aplikacija? Sve skripte jedne aplikacije, a to su one u virtualnom direktoriju i svim njenim poddirektorijima, mogu koristiti zajednike varijable. Bez aplikacije nemate
nikakve mogunosti prenijeti podatke od jednog korisnika do drugog. Koritenjem aplikacije
spremite u zajedniku memoriju podatke koje je napravio samo jedan korisnik i oni postaju dostupni svim korisnicima koji koriste tu aplikaciju.
Aplikaciju odreuje global.asa datoteka koja se nalazi u njenom glavnom direktoriju, tj. u vaem
sluaju C:\Web\ASP direktoriju. Pogledajte kako izgleda primjer global.asa datoteke:
<SCRIPT RUNAT=Server LANGUAGE=VBScript>

318

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Slika 10-11:
Kliknite na Create da
biste virtualni direktorij pretvorili u zasebnu aplikaciju

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>

Prije nego to e biti objanjen sadraj global.asa datoteke, vrijeme za jo jedan novi pojam session.
Sve vrijeme koje korisnik provede na svim podstranicama vaih web-stranica, dakle od uitavanja
prve stranice koja je njen dio, pa sve do kraja rada, naziva se session.

319

III. DIO: WEB SKRIPTIRANJE

Na poetku sessiona, odnosno pri uitavanju prve stranice iz aplikacije, izvrava se Session_OnStart
metoda u global.asa datoteci. Ona se izvrava jedanput na poetku za svakog korisnika koji posjeti vae stranice.

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 %>

Slino kao i Session_OnStart metoda, Session_OnEnd se izvrava pri zavretku korisnikovog sessiona. Nemojte se pouzdati u precizno izvravanje te metode ba u trenutku kad korisnik otie s
vaih stranica, kao to je i objanjeno u zasebnom okviru.
Za razliku od Session metoda koje se pokreu za svakog korisnika koji posjeti stranice, Application_OnStart i Application_OnEnd se pokreu samo jednom. Application_OnStart se pokree pri
uitavanju aplikacije kada prvi korisnik posjeti bilo koju stranicu iz te aplikacije.

Application varijable
Najei primjer koritenja varijabli na razini aplikacije je raunanje trenutnog broja korisnika koji
surfa stranicama. Ideja je jednostavna svaki put kada korisnik posjeti vae stranice, pokree se
Session_OnStart metoda. U njoj samo poveajte jednu varijablu na razini aplikacije. Kada se session zavri i korisnik ode s vaih stranica, tu varijablu smanjite za jedan.
Rad s varijablama na razini cijele aplikacije omoguuje vam Application kolekcija. Da biste nekoj
aplikacijskoj varijabli postavili vrijednost ili iz nje iitali tu vrijednost, koristite sljedee naredbe:
postavljanje aplikacijske varijable
Application(naziv_varijable) = vrijednost_varijable

320

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

dohvaanje aplikacijske varijable


vrijednost_varijable = Application(naziv_varijable)

Kao to vidite, princip je sasvim jednostavan. Samo koristite kljunu rije Application i kao njen
parametar naziv varijable koju elite postaviti ili iitati.
Da biste mogli raunati trenutan broj posjetitelja na stranicama, morate napisati kd u global.asa
datoteci:
<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 koritene Application_OnStart i Application_OnEnd metode, jer one u ovom sluaju nisu potrebne. Koritena je aplikacijska varijabla Broj_Korisnika. Pri pokretanju sessiona provjerava se da
li ona postoji (da li je prazna) i ako je, njena se vrijednost postavlja na 1 (znai da se radi o jedinom korisniku na stranicama). U suprotnom, njena se vrijednost uveava za 1.
Pri zavretku sessiona, vrijednost aplikacijske varijable Broj_Korisnika umanjuje se za jedan. Kao
i u drugim situacijama u programiranju, testira se i sluaj do kojeg ne bi smjelo doi, no nikad
se ne zna kakva se pogreka moe dogoditi ako je vrijednost varijable manja od 0, postavlja
se na 0, jer je to minimalna vrijednost koju ona moe imati.
Uspjeli ste sve stranice aplikacije u koju ste snimili ovu global.asa datoteku sada mogu dohvatiti
trenutni broj korisnika na stranicama. Na njima samo ispiite vrijednost varijable. Sljedei kd
moete postaviti i na default.asp i na login.asp stranicu koje ste prije izradili i na sve budue u
virtualnom direktoriju ASP.
Trenutan broj korisnika: <%=Application(Broj_Korisnika)%>.

321

III. DIO: WEB SKRIPTIRANJE

Session varijable
Za razliku od application varijabli koje se koriste za pamenje podataka koji su potrebni svim korisnicima, postoje i session varijable koje pamte podatke samo za jednog korisnika. Session varijable postoje samo za vrijeme sessiona odreenog korisnika i samo e on moi pristupiti njihovim
vrijednostima. Dakle, svaki korisnik moe imati svoj set session varijabli dostupnih samo njemu.
Najea primjena session varijabli je na sustavima za registraciju. Nema smisla da se korisnik
mora registrirati za svaku stranicu kojoj eli pristupiti. Jednom kada se uspjeno logira, treba postojati nain za pamenje da je on autorizirani korisnik i da smije pristupiti svim zatienim stranicama. U tu svrhu koristit ete session varijable.
Prisjetite se formulara i skripte za prijavu korisnika. Nakon to se korisnik uspjeno logira na login.asp stranici, iskoristit e se session varijabla za pamenje njegovih podataka da se vie ne mora logirati. Evo kao sada izgleda ASP kd zaglavlja 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
%>

Logika je jednostavna. Ako se korisnik nije logirao, tj. session(login) nije istinit, obrauju se
ulazni podaci. Na standardni nain dohvaaju se ime i zaporka i ako je sve u redu s njima, korisnika se ne preusmjeruje natrag na default.asp stranicu. Umjesto toga, nastavlja se s kdom i
session varijabla login postavlja se na True (korisnik se uspjeno logirao), a u session varijablu
ime uitava se korisnikovo ime.
Ako se korisnik ve prije uspjeno logirao, nema potrebe provjeravati njegove ulazne podatke, ve
se samo u varijablu ime uitava vrijednost session varijable. Tako ste zapravo zapamtili njegovo
korisniko ime koje ete kasnije ispisati na stranici.
Situacija je sljedea korisnik se uspjeno logirao i stigao na stranicu login.asp. No, u meuvremenu je nastavio surfati drugim web-stranicama, te se potom opet htio vratiti na login.asp stranicu. Sada ga se nee preusmjeriti na formular za prijavu, ve e se samo uitati podaci koji govore da se korisnik u tom sessionu uspjeno logirao i skripta nastavlja s radom.

322

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Ako e vam default.asp stranica sluiti samo kao formular, ona gubi smisao nakon to se korisnik ve jednom uspjeno logirao. U tom ga sluaju samo treba preusmjeriti na login.asp stranicu i rijeiti muke nepotrebnog ponovnog logiranja. Dodajte prvu liniju u default.asp stranicu:
<% If Session(login) Then Response.Redirect(login.asp) %>

Dakle, ako se korisnik ve jednom uspjeno logirao, automatski ga se preusmjeruje.

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.

Upotrebom session i application varijabli moete si znatno olakati izradu ASP skripti. Nije naodmet podsjetiti se njihovih kljunih prednosti i razlika, stoga pogledajte tablicu 10-2. Bitno je razlikovati njihovu primjenu. Tako session varijable nisu za spremanje varijabli kojima trebaju pristupiti svi korisnici ili koje za sve korisnike imaju istu vrijednost. Isto tako, u application varijable
neete spremati neije korisniko ime, jer ono vrijedi samo za tog korisnika.

Povezivanje s drugim datotekama


ASP skripte moete povezivati i s drugim datotekama. Na primjer na svojim stranicama imate neki izbornik s linkovima za koji elite da se ponavlja na svim stranicama. Moete ga kopirati na svaku stranicu i rijeili ste naizgled problem. No, to kad ete jednom htjeti promijeniti
neki link ili sadraj tog izbornika? To ete morati uiniti tada na svim stranicama na kojima se
on pojavljuje.
Praktiniji je nain snimiti taj izbornik u jednu zasebnu datoteku i potom tu datoteku ukljuiti u sve
druge ASP stranice koje ele prikazati taj izbornik. Ako budete eljeli promijeniti njegov sadraj, samo
izmijenite datoteku u kojoj se nalazi i sve e stranice prikazivati njegovu novu verziju.

323

III. DIO: WEB SKRIPTIRANJE

Kolaii su zdraviji?
edini problem kod koritenja session varijabli 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 moglo ii u application varijable), koliina zauzete
memorije na serveru drastino e rasti svakim novim korisnikom. Naravno, nema razloga
za uzbunu, ali svejedno pripazite na koliinu
koritenih session varijabli.

Ukoliko ne navedete Expires liniju u kojoj navodite datum pisan u VBScript sintaksi, cookie
e vrijediti isto kao da se radi o session varijabli 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 znakovni niz, npr. DA, te izmijenite da sve provjere logiranja usporeuju njenu vrijednost s
DA.

Umjesto session varijabli moete koristiti i cookiese, o kojima je bilo govora u prethodnim
poglavljima, a zapisivali ste ih i pomou klijentskog JavaScripta. Zapisivanje i dohvaanje
podataka spremljenih u cookiese obavlja se na
jednostavan nain, a koriste se Request i Response objekti.

Imajte na umu da e moda neki korisnici zabraniti spremanje cookiea na svom disku, pa va
sustav za prijavu nee raditi. Stoga moete kombinirati koritenje session varijabli i cookiea u
session spremajte vane podatke, a u cookie
one koji nisu odluujui za rad skripti.

S Request objektom dohvaate neku vrijednost


nekog cookiea. Ako je naziv cookiea postavljen
na ime, vrijednost dohvaate sa:

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.

ime = Request.Cookies(ime)
Response.Cookies(mojSite)(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 namjestiti do kada e postojati na korisnikovom disku:

ime
Response.Cookies(mojSite)(login)
= login
Response.Cookies(mojSite).Expires
= #July 1, 2010#
ime = request.Cookies(mojSite)(ime)

Response.Cookies(ime) = ime
Response.Cookies(ime).Expires =
#July 1, 2010#

324

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Tablica 10-2:
Glavne razlike session i application varijabli
Varijabla

Vrijedi za

Ostaju uitane u memoriji

Primjena

Session

Svakog

Od poetka do kraja korisnikovog

Podaci specifini za

korisnika

sessiona

svakog korisnika (korisniko

Za sve

Od prvog pokretanja aplikacije (prvo

Podaci specifini za cijelu

korisnike

uitavanje neke njene stranice) do kraja.

aplikaciju (broj korisnika,

posebno
Application

ime, dozvole pristupa)

vrijede iste

connection string za bazu


podataka)

Ta datoteka ne treba imati standardne HTML elemente, poput BODY ili HTML taga, ve mora
sadravati samo sadraj koji e se ukljuiti na neku drugu stranicu. Napravite stoga neki izbornik
i snimite ga u datoteku include/izbornik.inc.asp. Evo kako bi mogla izgledati ta datoteka:
<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>

Izbornik je jednostavan. Postoji link na stranicu za prijavu, a ako je korisnik ve uspjeno logiran, dostupni su mu i linkovi na neke druge dvije stranice. Takva datoteka se naziva include datoteka, jer se ukljuuje u sadraj drugih stranica. Ona moe sadravati i ASP kd.
Ukljuivanje te datoteke u neku drugu krajnje je jednostavno. Za to se koristi #include direktiva.
Sljedeu liniju kda, koja nije tipian ASP kd, te se stoga mora nalaziti izvan ASP blokova, ubacite na login.asp stranicu i na njoj e se prikazati izbornik koji ste napravili.
<! #include file=include/izbornik.inc.asp >

325

III. DIO: WEB SKRIPTIRANJE

Iako include datoteke moete drati bilo gdje na serveru pod bilo kojim nazivom (zbog lakeg snalaenja i urednosti strukture web-stranica, prikladno je drati ih u nekom zasebnom 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 podaci 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 snalaenju 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.

Koritenjem file atributa moete navesti bilo koju datoteku koja se nalazi unutar trenutne aplikacije, tj. koritenjem relativnih putova do datoteke.
Nalazi li se datoteka koju elite ukljuiti unutar neke druge aplikacije na serveru, koristite virtual
atribut. Evo kako biste ukljuili istu tu datoteku:
<! #include virtual=/asp/include/izbornik.inc.asp >

Sluajno se ukljuena datoteka nalazi unutar istog virtualnog direktorija kao i stranica s koje je
ukljuujete, no virtual e vam dobro doi kada nemate direktan pristup datoteci.

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 druga.inc.asp, tada druga.inc.asp ne smije ukljuivati datoteku prva.inc.asp

326

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Veoma je vano da shvatite kako server doivljava include datoteke. Kada korisnik zatrai neku
stranicu, prvo to se na serveru obavi jest spajanje svih datoteka koje zatraena stranica ukljuuje. Tek se tada, nakon to je dobivena velika stranica od svih ukljuenih datoteka, kree s izvravanjem ASP kda.
Taj princip ima i nekoliko vanih posljedica. Ne moete koristiti ASP naredbe za odreivanje
imena datoteke koja e se ukljuiti, jer se ASP kd izvrava tek nakon to su ve sve datoteke
ukljuene. Sljedei e primjer zato rezultirati grekom:
<%
OVO NE RADI
ime = neka_varijabla & .inc.asp
%>
<! #include file=<%=ime%> >

Slika 10-12:
U ovom sluaju
server pokuava
otvoriti datoteku
naziva
<%=ime%>
koja ne postoji

Pripazite i na navoenje #include direktiva. One se ne smiju nalaziti unutar ostalog ASP kda
pogledajte primjer.
<%
OVO NE RADI
For i = 1 To n
<! #include file=datoteka.inc.asp >

327

III. DIO: WEB SKRIPTIRANJE

Next
OVO RADI
For i = 1 to n %>
<! #include file=datoteka.inc.asp >
<% Next %>

Prebacivanje izvravanja na drugu skriptu


Drugi nain povezivanja vie skripti je prebacivanje izvravanja. Ideja je sljedea izvrava se jedna skripta, te se potom sve prebacuje na neku drugu skriptu. Pritom e rezultat prikazan u pregledniku korisnika biti spoj ispisa obje skripte.
Server.Transfer(druga_skripta.asp)

Do sada ste ve upoznali Response.Redirect metodu koja korisnika preusmjeruje na drugu stranicu. No, njenim koritenjem samo ste rekli pregledniku da on uini zahtjev za nekom drugom stranicom. Tako se vri razmjena podataka izmeu servera i preglednika, te potom preglednik daje
serveru novi zahtjev za stranicom.
Server.Transfer ne zahtijeva komunikaciju s korisnikovim preglednikom, te tako ubrzava cijeli postupak, smanjuje mreni promet i oslobaa server od novog zahtjeva. Ukoliko nita ne ispisujete
na stranici, nemate razloga ne koristiti Server.Transfer metodu za preusmjeravanje na drugu skriptu. Ona e biti izvrena, a rezultat e biti ispisan na ekranu.
Ako vam ne odgovara potpuno prebacivanje izvravanja na drugu skriptu, moete samo izvriti
ASP kd iz druge skripte i vratiti se u onu poetnu iz koje ste pozivali.
Recimo da imate glavnu skriptu sadraja:
<%
Response.Write Ovo je prva skripta<br>
Server.Execute(druga.asp)
Response.Write Ovo je prva skripta<br>
%>

i drugu skriptu sadraja:


<% Response.Write Ovo je druga skripta<br> %>

Pozovete li glavnu skriptu, rezultat u pregledniku e biti:

328

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Ovo je prva skripta


Ovo je druga skripta
Ovo je prva skripta

Kao to vidite, krenulo se s izvravanjem prve skripte i ispisala se prva poruka. Potom se izvrila druga skripta (druga.asp), koja je ispisala drugu poruku. Potom se izvravanje vratilo u prvu
skriptu, gdje je opet ispisana prva poruka.

Serverski objekti
Snaga ASP-a lei u njegovoj proirivosti dodatnim komponentama i objektima. Ti objekti instaliraju se na server, te ih potom moete pozivati iz ASP skripti. To su u stvari COM objekti, a izraditi ih moete u nekom programskom jeziku, poput C++-a.
Iako je njihova izrada dosta sloena i bez veeg iskustva u programiranju gotovo i nemogua, ovdje
e vie biti rijei o njihovoj upotrebi u ASP skriptama. Svaki objekt ima svoj ProgID. To su najee
dvije ili vie rijei odvojene tokom koje slue kao neka vrsta imena i pomou njih se kreira taj objekt.
Uz ASP (tonije reeno IIS) dolazi nekoliko objekata koje moete pozivati sa svojih stranica. Jedan
od njih je Browser Capabilities Component, a slui za informacije o korisnikovom pregledniku. Vrlo
je korisno znati to sve podrava korisnikov preglednik, pa to sada moete doznati i iz ASP skripte.

Browser Capabilities Component vam govori to sve podrava korisnikov preglednik, a ne


jesu li i te mogunosti ukljuene. Na primjer, korisnikov preglednik moe podravati cookie (to je sluaj s gotovo svim preglednicima), no korisnik ih moe zabraniti, a taj podatak
vam komponenta nee vratiti.

Novi objekt se kreira pomou Server.CreateObject naredbe i Set naredbe. Njegove metode i svojstva navode se odvojeni tokom, ba kao i kod ostalih programskih jezika.
<%
Dim bc
Set bc = Server.CreateObject(MSWC.BrowserType)
Response.Write Koristite preglednik & bc.browser & verzije & bc.version &
<br>
If bc.cookies Then

329

III. DIO: WEB SKRIPTIRANJE

korisnikov preglednik podrava cookie


End If
If bc.vbscript Then
klijentske skripte se mogu pisati i u VBScriptu
End If
%>

Kreira se novi objekt s ProgID-em MSWC.BrowserType i sprema se u varijablu bc. Potom se


ispisuju neka njegova svojstva. Cookies i vbscript su boolean vrijednosti, te ako su True, tada ih
korisnikov preglednik podrava. Uz njih, moete provjeriti i frames, tables, BackgroundSounds,
Javascript i ActiveXControls svojstva u kojima e stajati True ili False vrijednost, ovisno o njihovoj podranosti u korisnikovom pregledniku.

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.

Slanje e-maila
Na svakom IIS-u nalazi se i komponenta za slanje e-mailova. Iako postoji vie razliitih izvedbi s
razliitim ProgID-om i metodama, najei je CDONTS. Kratica CDONTS dolazi od Collaboration
Data Object for NT Server. Posluit e vam za slanje komentara vaih stranica. Prvo napravite
jednostavan formular s poljima koje elite da korisnik 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

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

<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>

Preporuuje se da ovaj formular kombinirate i s klijentskim JavaScriptom i tako primorate korisnika da upie svoj e-mail i sva ostala obavezna polja. Zbog naina na koji e biti napisana skripta za slanje e-maila, moete u formular postaviti koliko god elite polja i podataka za unos, jedino je bitno da korisnik unese svoj e-mail.
Skripta za slanje e-maila zvat e se komentar_salji.asp i evo njenog izvornog 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>

331

III. DIO: WEB SKRIPTIRANJE

<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 objekt CDONTS.NewMail i postavljaju njegova From, To i Subject svojstva. U From trebate staviti e-mail poiljatelja, dakle osobe koja je poslala komentar. U To polje ide va e-mail, tj.
primatelj, dok u Subject napiite naslov e-maila.
Potom se obrauje sadraj e-maila. U varijablu sadrzaj uitava se kompletan sadraj formulara.
Svako polje se obrauje i zapisuje se naslov polja i njegov sadraj. Tako moete imati neogranieno
mnogo polja u formularu, a ova e ih skripta uvijek sve poslati e-mailom. Nakon obrade, varijabla sadraj izgleda primjerice ovako:
ime =>
Komentator
komentar =>
Jako mi se svidja. Stvarno je sve super.
Posebno mi se svidja slanje komentara.
email =>
email@komentator.hr
ocjena =>
Odlino

Konstanta vbCrLf je konstanta za carriage return i line feed. Ona slui za prelazak u novi red.
Kako je HTML neosjetljiv na razmake i prelaze u novi redak, da biste ispisali sadraj, stavlja ga
se unutar pre taga koji uva i prikazuje tekst ba kao i izgleda.
Poruka se alje Send metodom, a na kraju se brie objekt iz memorije koritenjem Set naredbe
i postavljanjem na Nothing. Nemojte to zaboraviti uiniti, jer svaki objekt uitan u memoriju morate od tamo i maknuti.

332

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Nove verzije CDONTS-a

koliko se vae stranice nalaze na XP serveru (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 njegova zamjena, CDO objekt. Kreirate ga na slian
nain koritenjem drugaijeg ProgID-a, a razlikuju 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 emailova, moete isprobati i jednu drugu ASPEmail. Besplatna je za download, te je moete instalirati na vlastitom stroju, a moda je
ve instalirana i na serveru na kojem ete drati stranice. Priupitajte stoga helpdesk tvrtke koja
vam prua hosting da li je ta komponenta podrana, a ako je, nema prepreka njenom koritenju. Prua iste (neki kau i bolje) mogunosti kao CDO(NTS). Vie informacija na http://www.aspemail.com/.

Rad s datotekama

ASP podrava i rad s datotekama i direktorijima. Doslovno sve akcije i informacije o nekom direktoriju ili datoteci (ili driveu) moete saznati koritenjem FileSystemObject komponente (FSO).
Pisanje i itanje iz datoteka ne moe se usporeivati s koritenjem baza podataka, koje su generalno gledajui mnogo isplativije za pohranu podataka. No, datoteke se mogu pokazati prikladnijima u nekim situacijama. Isto tako, elite li omoguiti rad s datotekama na serveru, poput
browsanja po direktorijima, ispisa sadraja nekog direktorija ili svih datoteka nekog tipa, morate
upoznati FSO komponentu.
Kreiranje FSO objekta je jednostavno i u niemu se ne razlikuje od instanciranja ostalih objekata:
<%
Dim fso
Set fso = Server.CreateObject(Scripting.FileSystemObject)
%>

FSO komponenta ima metode za dohvat reference na neki direktorij ili datoteku, pomou koje
moete koritenjem njenih svojstava saznati neto vie, npr. veliinu, datum zadnje izmjene, broj

333

III. DIO: WEB SKRIPTIRANJE

poddirektorija i slino. No, ovdje e biti naglasak stavljen na pisanje i itanje iz datoteka, to je
najea akcija s FSO objektom pri izradi ASP skripti.

Imate li na raunalu instaliran neki antivirusni softver, moda ete imati problema s koritenjem 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 aktivna, 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.

Pisanje u datoteke
Da biste zapisivali u neku datoteku, morate ju prvo otvoriti. Pri tome moete koristiti OpenTextFile metodu njen prvi argument je traena datoteka, drugi je nain otvaranja, a trei je da li e
se datoteka stvoriti ako ve ne postoji. Postavite li tako trei argument na True, moete stvoriti
novu datoteku i odmah je otvoriti za pisanje.
<%
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
%>

Datoteka se otvara za pisanje konstantom definiranom na poetku, ForWriting. Mogli ste ju otvoriti i s ForAppending konstantom, no tada biste u datoteku novi sadraj dodavali na sam kraj.
Tri su korisne metode za upisivanje u datoteku. WriteLine upisuje novu liniju i na kraj stavlja znak
za prelazak u novi red. Write upisuje bez prelaska u novi red, a WriteBlankLines u datoteku ubacuje odreeni broj novih linija.

334

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

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.

itanje iz datoteka
itanje iz datoteka takoer je jednostavno. Iz datoteke moe proitati kompletan sadraj 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
%>

Tako ste u jednoj naredbi uitali kompletan sadraj (ReadAll) i ispisali ga na stranici.
Da biste otvorili datoteku koja se nalazi u vaem trenutnom direktoriju ili u nekom od poddirektorija (tj. tako da ne koristite apsolutni put poput C:\datoteka.txt koji skoro nikad neete znati na
nekom drugom serveru), moete koristiti Server.MapPath metodu. Ona vraa apsolutni put do
datoteke koju ste joj dali kao parametar. Primjerice, Server.MapPath(default.asp) u asp virtualnom direktoriju rezultirat e sa C:\web\ASP\datoteka.asp.
Moete itati i liniju po liniju u datoteci. Kraj datoteke odreen je s AtEndOfStream svojstvom:
<%

335

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
%>

Otvorena je datoteka u trenutnom direktoriju u kojem se nalazite, datoteka.txt. Ako, recimo, elite otvoriti datoteku u nekom poddirektoriju, napisali biste neto poput Server.MapPath(poddirektorij/datoteka.txt). Potom se ita i ispisuje linija po linija iz datoteke, sve dok se ne doe do
kraja streama, tj. datoteke.

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.

Rad s bazama podataka

Eto vas napokon i na najzanimljivijoj temi u ASP poglavlju. Rad s bazama podataka dio je svakih
sloenijih web-stranica. Mnoge ideje ne mogu se uope realizirati bez njihovog koritenja. U narednim primjerima bit e iskoritena baza podataka iz prethodnog poglavlja u kojoj se nalaze zapisane vijesti.
Kopirajte bazu podataka u direktorij baza. Potom tom direktoriju dajte prava pisanja, ali maknite
prava itanja. Da, zvui zbunjujue, no ne elite da netko moe preko weba upisati adresu vae
baze i downloadati je stoga maknite pravo itanja. No, za vrijeme koritenja Accessove baze,
u istom se direktoriju stvara ldb datoteka s istim imenom kao i mdb datoteka. Ukoliko se ta datoteka ne moe stvoriti, ni baza se ne moe itati za to e vam trebati pravo pisanja.

336

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Spajanje i rad s bazom podataka mogu je koritenjem ActiveX Data Objects (ADO) komponenata. Pomou njih moete se spojiti na OLE DB kompatibilne izvore (poput baza podataka, slijednih datoteka, e-mail direktorija) i ODBC (Open Database Connectivity) kompatibilne baze podataka.

Spajanje na bazu podataka


Da biste mogli vui podatke iz neke baze, prvo se morate na nju spojiti. Za to e vam trebati tzv. connection string. U tablici 10-3 moete pronai nekoliko korisnih stringova. Prva tri su OLE DB connection
stringovi, dok su ostali (ODBC stringovi) podrani zbog kompatibilnosti sa starijim verzijama.

Tablica 10-3:
Pregled najee koritenih connection stringova
Baza podataka

Connection string

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

Potraite li tako u tablici connection string za spajanje na bazu izraenu Microsoftovim Accessom,
spajanje ne bi trebalo biti problem:

337

III. DIO: WEB SKRIPTIRANJE

<%
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
%>

Prvo se gradi connection string koritenjem Server.MapPath metode koja vraa potpuni put do
neke datoteke. Stvara se objekt za bazu podataka, a to je ADO objekt s ProgID-om ADODB.Connection. Potom se baza otvara s Open metodom i napravljenim connection stringom i rad s bazom moe zapoeti. Kad zavrite s radom, zatvorite bazu s Close, jer bi baza koja je ostavljena otvorenom zauzimala resurse.
Ovdje moda i uoavate odlinu primjenu za aplikacijske varijable. Nema smisla izraivati connection string na svakoj stranici za svakog usera to je podatak koji je za sve uvijek isti i sigurno se
nee mijenjati za vrijeme rada skripti.
U global.asa datoteci stoga napravite Application_OnStart metodu i u nju napiite:
Sub Application_OnStart
Application(Conn) = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= &
Server.MapPath(baza/MojSite.mdb)
End Sub

U aplikacijsku Conn varijablu sprema se connection string, te ga sada moete koristiti na svim
stranicama za otvaranje baze. Samo tamo gdje elite otvoriti bazu napiite:
Conn.Open Application(Conn)

Promijenite li jednom lokaciju baze ili nain spajanja, samo izmijenite global.asa datoteku, a
izmjene e se odraziti na sve datoteke koje otvaraju bazu.

Izvravanje upita
Jednom kada ste otvorili bazu, moete izvravati razne upite. Za poetak krenite s izvravanjem SQL
upita koji ne vraaju rezultate. To su UPDATE, INSERT i DELETE naredbe. Da biste izvrili neku
od tih naredbi, iskoristite Execute metodu.

338

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Conn.Execute(UPDATE Vijesti SET Autor = 2 WHERE Autor = 1)

Prethodna naredba promijenila bi iz ASP skripte da vijesti autora 1 postanu vijesti autora 2. Naravno, takve samostalne naredbe nemaju ba smisla, no moete napraviti, recimo, formular u kojem
ete upisati kojeg autora elite zamijeniti s kojim i onda napraviti SQL upit s podacima poslanima
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

Prije svakog SQL upita dobro provjerite podatke koje u njemu koristite. U sluaju da jedna od
varijabli autor_stari i autor_novi nije broj, skripta bi rezultirala grekom.

itanje sadraja baze


Mnogo zanimljivije od izvravanja obinih SQL upita koji ne vraaju rezultat je dohvaanje nekih
podataka iz tablice. Za to e vam trebati recordset objekt koji si moete predoiti kao tablicu.
Da biste dobili recordset objekt morate izvriti neki SQL upit koji vraa rezultate, a to je SELECT
upit. Evo kako biste ispisali kompletan sadraj 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

339

III. DIO: WEB SKRIPTIRANJE

Conn.Close
%>

Stvara se novi Rs objekt (skraeno od RecordSet) koji je rezultat SQL upita koji vraa sve vijesti
dostupne za prikaz. Potom se ispisuju sve vijesti dok se ne doe do kraja recordseta prolazi se
jedan po jedan zapis. Na sljedei zapis idete s MoveNext naredbom. Kada se doe do zadnjeg, petlja se prestaje izvravati i Rs objekt se zatvara metodom Close.

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 petljom. Ako nije pronaen niti jedan rezultat, ispisat e se poruka, a u suprotnom e se krenuti s petljom.

Vrijednost polja nekog zapisa ispisuje se s Rs(naziv_polja). Ispravno bi bilo Rs(naziv_polja).Value,


no VBScript Value svojstvo smatra defaultnim svojstvom, te e njega ispisati ukoliko drugaije ne
bude navedeno. Tako s Rs(Naslov) dobivate znakovni niz koji sadrava vrijednost polja naslov
u zapisu u kojem se trenutno nalazite. Umjesto pravog imena autora, ovdje se ispisuje samo njegov ID, no to moete vrlo lako zamijeniti upotrijebite li SQL upit izgraen u prethodnom poglavlju.
Ovakvim upitom ispisujete samo ono to ste vi predvidjeli sve vijesti poredane prema datumu.
No, ovakva skripta moe biti izgraena i za obavljanje pretraivanja. Izradite li formular s poljem
naziva upit u koji e korisnik upisati traenu rije, te poaljete li formular POST metodom, moete u svim vijestima potraiti traenu rije. Sjetite li se LIKE operatora iz prethodnog poglavlja,
Rs objekt moete stvoriti na sljedei nain:
Dim upit
upit = Request.Form(upit)

340

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

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)

Slika 10-13:
Ispis svih vijesti na
jednoj stranici

Logika upita je da se pronau sve vijesti koje u naslovu ili tekstu imaju traenu rije, a da im je
doputen prikaz. Ako je, recimo, korisnikov upit bio ljudi, generirani SQL upit bio bi:
SELECT * FROM Vijesti WHERE (Naslov LIKE %ljudi% OR Tekst LIKE %ljudi%) AND
Prikaz = True ORDER BY Datum DESC

Moda vas zbunjuju dvije linije s Replace. Ukoliko korisnik u svom upitu napie znakove % (postotak) ili (polunavodnik), generirani SQL upit nee biti ispravan. Pokuajte i sami ako je traeno 50%, SQL upit e biti generiran na sljedei nain:

341

III. DIO: WEB SKRIPTIRANJE

SELECT * FROM Vijesti WHERE (Naslov LIKE %50%% OR Tekst LIKE %50%%) AND Prikaz
= True ORDER BY Datum DESC

Recordset na drugi nain

prethodnim primjerima koriten je pojednostavnjeni nain otvaranja recordseta. Da, ve pogaate, postoji i malo dui nain
koji e vam posluiti za neke sloenije akcije s
recordsetom. Kao prvo, recordset je poseban objekt s vlastitim ProgID-om, a stvarate ga ovako:

sor koji je isti poput adOpenForwardOnly, samo


to vam omoguava i kretanje unatrag po recordsetu, a zbog toga zauzima i vie memorije. Postoji jo nekoliko tipova, no ova dva su
najvanija trebate li samo jednom proi kroz
sve zapise recordseta, tada je adOpenForwardOnly najbolje rjeenje.

Set Rs = Server.CreateObject
(ADODB.Recordset)

Recordset morate i otvoriti, a to moete uiniti 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 nita drugo ve onaj poznati SQL upit koriten u
Execute metodi. Konekcija_na_bazu je u prethodnim sluajevima bila Conn varijabla otvorena veza s bazom podataka.
Tip_kursora odreuje nain na koji ete koristiti recordset, a oznaen je nekim cijelim
brojem. Broj 0 oznaava adOpenForwardOnly
kursor kojim se moete kretati samo prema naprijed, 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-

342

Tip_zakljuavanja odreuje da li moete mijenjati sadraj recordseta. U ASP-u se ne preporuuje izmjenjivati sadraj baze koritenjem recordseta, ve se to obavlja iskljuivo izvravanjem UPDATE ili INSERT upita, to je mnogo uinkovitije. Stoga vam je bitan samo jedan tip zakljuavanja 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, jednostavan recordset moete otvoriti sljedeom
naredbom:
Rs.Open SELECT * FROM Vijesti
WHERE Prikaz = True ORDER BY Datum
DESC, 0, 1

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Dva znaka za postotak zbunit e bazu i nee moi procesirati upit. Isto vrijedi i za polunavodnik
oboje su ve dio SQL upita i odreuju znakovni niz. Stoga se koristi Replace metoda kojoj je
prvi parametar znakovni niz u kojem treba neto zamijeniti, drugi je ono to se eli zamijeniti, a trei je ono sa ime se eli zamijeniti. Tako se znakovi % i zamjenjuju s praznim nizovima, tj. potpuno se izbacuju iz SQL upita. Sada ste se osigurali da e vaa skripta raditi ma
to korisnik traio.

Ispis po stranicama
Ispisivanje svih rezultata na jednoj stranici nije ba u svim situacijama korisno. Nakon dueg vremena imat ete u bazi upisan veliki broj vijesti i neprikladno ih je ba sve ispisati na istoj stranici. Princip ispisa po stranicama zasigurno ste ve mnogo puta vidjeli. Kada pretraujete Google,
on vrati odreeni broj rezultata iji se broj broji u tisuama, ponekad i milijunima. No, ne prikazuje ih sve na istoj stranici, ve ih grupira po deset na svaku.
To je sada i va cilj. Pretpostavite li da e vae vijesti biti malo opirnije, brojka od pet vijesti po
stranici ini se sasvim dovoljnom. Na dnu svake stranice postavit ete i linkove za kretanje kroz
stranice. Uz veinu naredbi u sljedeem kdu pisani su i komentari koji e vam pomoi da lake
razumijete i svladate ovu 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

343

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

344

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

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
%>

Prvo se odreuje trenutna stranica. Ako postoji ulazna varijabla Start koja je dola preko querystringa, ona se koristi, a u suprotnom se prikazuje prva stranica. U varijabli Max zapisan je broj
zapisa koji e biti prikazani na svakoj stranici.
Otvaranje baze i recordseta obavlja se na standardni nain, a u recordset dohvaate sve zapise.
Kasnije, pomou ADO funkcija, te zapise razbijate po stranicama i prikazujete samo jednu od tih
stranica. No, bitno je uoiti da SQL upit vraa sve zapise za koje elite da budu dio rezultata, pa
makar se oni ne prikazivali na trenutnoj stranici.
PageSize svojstvo recodseta odreuje, kao to mu i ime kae, veliinu stranice. Njega postavljate na
vrijednost varijable Max koju ste definirali na poetku skripte. Isto vrijedi i za CacheSize svojstvo koje
odreuje koliko e se zapisa od ukupnog broja cacheirati, odnosno spremiti u memoriju za bri pristup.
PageCount svojstvo direktno je ovisno o broju zapisa na stranici, a odreuje koliko ukupno postoji stranica rezultata. Taj e vam broj trebati kasnije, kada ete ispisivati linkove na ostale stranice.
Za svaki sluaj, jo se jednom provjerava varijabla Start. Ako je broj trenutne stranice vei od
ukupnog broja stranica, oito se radi o pogreki, te se skripta pozicionira na posljednju stranicu.
Ako je, pak, trenutna stranica nula ili negativna, takoer je posrijedi greka, pa se skripta pozicionira na prvu stranicu. Kako Start varijablu prenosite preko querystringa, ona je vidljiva surferima i sigurno e se nai netko tko e prkati po URL-u i htjeti zeznuti vau skriptu tako da upie za broj stranice 52359 ili -1234, to gotovo sigurno nee postojati. To si jednostavno ne moete dopustiti.

345

III. DIO: WEB SKRIPTIRANJE

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.

AbsolutePage svojstvo pozicionira recordset na traenu stranicu, pa se za to iskoritava varijabla


Start, koja je detaljno provjerena i s prethodno uklonjenom mogunou pogreke.
Potom se zapoinje s ispisivanjem svih zapisa na stranici (od prvog do ukupnog doputenog broja
zapisa). Potkraj petlje se provjerava je li dosegnut kraj recordseta, to e se esto dogoditi ako ispisujete posljednju stranicu rezultata, a ukupan broj zapisa nije viekratnik doputenog broja
zapisa po stranici. Npr: ispisujete pet zapisa po stranici, a imate ukupno 12 zapisa. Ako se nalazite na posljednjoj (treoj) stranici rezultata, ispisivat ete zapise od jedanaestog do petnaestog.
Pokuate li ispisati trinaesti, javit e se greka, te zato postoji provjera kraja recordseta.

Slika 10-14:
Prikaz druge stranice
rezultata uoite linkove
na ostale stranice na dnu

Na kraju stranice obino se nalaze linkovi na ostale stranice rezultata. Ukoliko je recordset vratio
barem jedan zapis, treba ispisati te linkove. Prolazi se kroz sve stranice s rezultatima i ako se radi
o trenutnoj, ispisuje se samo broj te stranice, a u suprotnom se ispisuje cijeli link na tu stranicu.

346

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Postoji nekoliko razliitih izvedbi paginga, ispisivanja rezultata po stranicama. Moete raditi komplicirane SQL upite koji e vratiti samo traene zapise za odreenu stranicu ili moete prolaziti
kroz sve zapise recordseta dok se ne pozicionirate na traeni, te od njega krenuti s ispisivanjem.
To su sve programske ideje koje e vam uzeti mnogo vie vremena i razmiljanja, a i mnogo e
vie opteretiti server. Stoga, elite li neke zapise ispisivati po stranicama, drite se ovdje napisanog i neete pogrijeiti.

Odravanje baze preko weba


U bliskoj budunosti vjerojatno ete poeljeti napraviti i administracijski sustav pomou kojeg ete
upisivati vijesti i ostale podatke u bazu. Takav pristup omoguava vam odravanje web-stranica
preko weba, a prua mogunost istodobnog rada veeg broja ljudi. To e vas osloboditi i stalnog
uploadanja baze na server.
Administracijski sustav moete zatititi zaporkom. Za to vam moe posluiti i tablica Autori samo e autori moi upisivati vijesti, pa moete u tablicu dodati dva polja, korisniko ime i zaporku.
Pri provjeri podataka neete primljenu zaporku provjeravati s nekim fiksnim nizom, kao abcde,
ve ete za odreeno korisniko ime izvaditi zaporku iz baze i usporeivati s njom. Pretpostavimo
li da imate ve otvorenu vezu sa bazom, zaporku biste za neko korisniko ime usporedili na sljedei nain:
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

347

III. DIO: WEB SKRIPTIRANJE

U svim neuspjelim situacijama trebate vratiti korisnika na stranicu za prijavu i ispisati mu odgovarajuu poruku. Ako je vraen prazan recordset, ne postoji niti jedan zapis s upisanim korisnikim imenom, a ako upisana zaporka ne odgovara onoj iz baze, prijava je takoer neuspjena.
U session varijablu AutorID uitava se vrijednost ID-a autora. Ona e vam trebati pri unosu nove
vijesti. Postojat e vjerojatno jednostavan formular u koji e se upisati vijest i koji e se poslati
na neku drugu skriptu koja e ju upisati u bazu. Nema potrebe da korisnik upisuje svoj ID ili
odabire svoje ime iz padajueg izbornika na stranici sa skriptom za unos u bazu samo iskoristite vrijednost iz session varijable.

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 dohvaate 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 poetku stranice, a zatvarati skroz na kraju. Sigurno vam nije potrebno da za cijelog vremena 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 recordsetom, 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 obinu 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.

Ubacivanje novih zapisa u bazu moe se obaviti krajnje jednostavno. Napravite jedan HTML formular koji e novu vijest slati na neku skriptu, a funkcionalnost cijele ASP skripte za upisivanje
nove vijesti moe se svesti na naredbu:
Conn.Execute(INSERT INTO Vijesti (Naslov, Tekst, Datum, Autor, Prikaz) VALUES ( &
naslov & , & tekst & , & Now() & , & Session(AutorID) & , &
prikaz & ))

348

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

Varijable naslov i tekst prethodno, naravno, morate obraditi i izbaciti iz njih navodnike. VBScript
funkcije Now() vraa trenutno vrijeme koje slui za vrijeme upisa i prikazivanja vijesti. Naravno,
moete napraviti da korisnik u formular upie vrijeme kada e se prikazivati neka vijest, to je
mnogo praktinije i otvara vee mogunosti.
Session varijabla AutorID sadrava ID autora, a varijabla prikaz ima vrijednost True ili False. Naime, za doputanje prikaza vjerojatno ete koristiti checkbox. Ako je checkbox ukljuen, tada e
on proslijediti vrijednost on, dok u suprotnom nee nita proslijediti. Evo kako biste uitali varijablu prikaz na samoj stranici:
If Request.Form(prikaz) = on Then prikaz = True Else prikaz = False

Na slian nain moete napraviti i izmjenu postojeih vijesti. Samo na stranici za editiranje uitajte trenutnu vijest u formular, a skripta koja e obaviti izmjenu umjesto INSERT naredbe koristit e UPDATE.
Brisanje vijesti takoer je piece of cake. Napravite stranicu s popisom svih vijesti (samo naslov i
datum e biti dovoljan) i uz njih stavite link za brisanje u obliku vijest_obrisi.asp?id=id_vijesti. Link
e zapravo samo proslijediti ID vijesti skripti za brisanje i njena cijela funkcionalnost moe se saeti u:
vijestID = Request.Querystring(vijestID)
If IsNumeric(vijestID) Then Conn.Execute(DELETE FROM Vijesti WHERE ID = &
vijestID)

Naravno, svi ovi primjeri vrijede ukoliko ste prije otvorili konekciju na bazu pomou varijable Conn.
Odluite li se na koritenje baza podataka na webu, ne moete pogrijeiti. Njihova brzina i jednostavnost pisanja SQL upita omoguit e vam brzo postizanje velikih rezultata, a i gotovo da ne
moete napraviti sloeniju skriptu koja mora pamtiti neke podatke bez koritenja baza.
ADO objekti za rad s njima nude vam veliki broj korisnih metoda i svojstava. No, nemojte se zanijeti otvaranje konekcija na vie baza podataka na istoj stranici moe dosta opteretiti va server. Takoer, pazite na unitavanje objekata koje vie ne koristite sa Set objekt = Nothing.
Utedjet ete memoriju servera, a vae skripte e znatno bre raditi.

Rad s XML-om

Kao to je i bilo obeano u prethodnom poglavlju, bit e pokazan nain rada s XML-om i njegova obrada XSLT-om u ASP-u. Uzmite za primjer XML sljedeeg sadraja koji se nalazi u datoteci linkovi.xml:
<?xml version=1.0 ?>
<linkovi>

349

III. DIO: WEB SKRIPTIRANJE

<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>

Kao to vidite, on sadrava informacije o linkovima. Uz svaki link postoji njegov ID, URL na koji
vodi i tekst koji se uz njega prikazuje. Zato koristiti XML? Vjerojatno ete iste linkove postavljati na
vie razliitih lokacija na stranici. To moe biti lijevi stupac, desni stupac, srednji stupac na vrhu
ili srednji stupac na dnu. Ono to je najvanije imate samo jedan set podataka, a vi ih moete
obraivati na neogranieno mnogo naina XSLT-om.

Slika 10-15:
Internet Explorer
idealan je za
pregledavanje
sadraja XML
datoteka

Evo kako bi izgledao XSLT koji bi gornje linkove ispisivao jedan pored drugog odvojene znakom |:
<?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

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

<xsl:value-of select=@url/>
</xsl:attribute>
<xsl:value-of select=./>
</a>
<xsl:text> | </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

XSLT e obavljati prikaz sadraja linkovi.xml datoteke. Prvo se odabiru svi tagovi koji se nalaze
unutar grane /linkovi. Ispisuje se jednostavan tekst za poetak | . Potom se petljom prolazi
kroz sve link tagove i ispisuju linkovi.

Slika 10-16:
Internet Explorer
prikazat e vam i
sadraj XSLT
datoteka

Prvo se stvori A tag. Njemu se pridaje atribut href koji ima vrijednost url atributa link taga. Za
tekst linka odabire se ., to predstavlja tekst trenutnog link taga. Nakon svakog linka jo se ispisuje tekst | .
Evo kako biste u ASP kdu uitali XML i XSLT datoteke i prikazali rezultat:

351

III. DIO: WEB SKRIPTIRANJE

<%
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)
%>

Stvaraju se dva objekta s ProgID-om MSXML2.DomDocument.4.0. To su zapravo dva objekta


Microsoftovog XML parsera. U jedan se uitava linkovi.xml datoteka, a u drugi linkovi.xslt. Potom se ispisuje rezultat transformacije objekta Linkovi (linkovi.xml) s objektom LinkoviTrans (linkovi.xslt). Rezultat je sljedei:
| Naslovnica | Prijavite se! | Nove vijesti! | Tko smo mi? |

Malim izmjenama XSLT-a moete napraviti njegovu novu verziju koja e te linkove prikazivati drugaije formatirane, u drugom fontu ili s drugom HTML strukturom (moda u tablici, moda u DIV
tagovima itd.). Potom na drugom mjestu na stranici samo u LinkoviTrans objekt koji e obaviti
transformaciju, uitajte taj drugi XSLT i linkovi e biti prikazani na drugi nain.
Ono to je posebno korisno kod ovakvog pristupa je injenica da samom izmjenom poetnog XML-a,
tj. linkovi.xml datoteke, direktno utjeete i mijenjate prikaz linkova na svim ostalim stranicama i
lokacijama na stranici. Samo se pridravate osnove strukture prema kojoj ste programirali sve XSLT-ove
(glavni tag je linkovi, a informacije o linkovima nalaze se u tagovima link) i sve e dalje biti prikazivano na identian nain. Idealno za odravanje veih web-stranica ili veeg broja linkova!
Uitanom XML objektu moete pristupiti i direktno iz ASP-a, bez potrebe uitavanja XSLT datoteke za transformaciju.
Set Link = Linkovi.selectSingleNode(/linkovi/link[@id=home])
If Not (Link Is Nothing) Then
urlHome = Link.getAttribute(url)
Else
urlHome =
End If

U objekt Link se uitava node, tj. grana link tag koji se nalazi ispod glavnog taga linkovi i kojem
je atribut id jednak home. Ukoliko takav node nije pronaen, tada Link objekt ne postoji i nita
se ne moe uitati u varijablu urlHome. Ako, pak, postoji, u varijablu urlHome se uitava njegov

352

10. POGLAVLJE: ACTIVE SERVER PAGES (ASP)

url atribut. Uzevi za primjer linkovi.xml datoteku, vrijednost varijable urlHome bi na kraju bila
index.asp.
Vrijeme XML-a tek dolazi. Ne morate se prisiljavati koristiti XML ukoliko za to ne vidite prave razloge. No, koritenjem XML-a moete standardizirati razne dijelove svojih stranica (kao to je ovdje
uinjeno s jednostavnim popisom linkova), to se esto u budunosti moe pokazati pravim potezom. elite li, pak, izvui podatke iz neke XML datoteke, ASP vam nudi sve to vam treba.
Uz Microsoftov XML parser dolazi izvrsna pomo (SDK) u kojoj se nalazi detaljno objanjena svaka funkcija ili metoda XML objekata, kao to su ovdje koritene getAttribute i selectSingleNode.
Tamo ete pronai i izvrsne primjere za XPath upite, kao to je ovdje upotrijebljen /linkovi/link[@id=home].

Slika 10-17:
Uz Microsoftov XML parser dolazi i izvrstan sustav pomoi
Ako vam treba XML na webu, ASP e vam uz pomo Microsoftovog XML parsera (ili nekog drugog, ako ba inzistirate) biti idealno rjeenje. Ako jo ne vidite razloge koritenja XML-a, svejedno
bacite pogled na pratei SDK. Nikad nije naodmet informirati se o novim tehnologijama, a vrlo vjerojatno e vam i pokoja zanimljiva ideja pasti na pamet.

353

You might also like