Programovßnφ ASP strßnek - 4. dφl

V dneÜnφm zßv∞reΦnΘm dφle vßm CHIP vysv∞tlφ zp∙sob prßce s prom∞nn²mi a jejich p°enos mezi ASP strßnkami. Podφvßme se takΘ na u₧iteΦnΘ tipy a triky.

D°φve ne₧ se pustφme do podrobnΘho v²kladu dneÜnφ tΘmatu , dlu₧φme vßm omluvu. P°i grafickΘ ·prav∞ Φlßnk∙ doÜlo ve v²pisech programovΘho k≤du k automatickΘ konverzi prvnφch hornφch uvozovek na dolnφ uvozovky tak, jak je tomu v ΦeÜtin∞, a nßsledkem toho mohou b²t doslova p°epsanΘ ukßzky zdrojov²ch k≤d∙ nefunkΦnφ. Opisovat ale nemusφte, na Chip CD 5/99 uvedeme cel² Φty°dφln² serißl o ASP v HTML podob∞ a umφstφme zde takΘ zdrojovΘ texty vÜech ASP strßnek, kterΘ jsme v jednotliv²ch dφlech uvßd∞li.

Prom∞nnΘ v ASP

Stejn∞ jako u jin²ch jazyk∙ (Pascal, C, C++) takΘ u ASP stßnek se setkßvßme s pojmem lokßlnφch a globßlnφch prom∞nn²ch. JistΘ odliÜnosti zde vÜak p°eci jen existujφ. Zatφmco p°i programovßnφ n∞jakΘ aplikace pφÜete °ßdky programovΘho k≤du a postupn∞ tak vytvß°φte jeden ucelen² aplikaΦnφ celek, webovΘ aplikace jsou pouze soustavou skript∙ (ASP strßnek). Lokßlnφ prom∞nnΘ se vytvß°ejφ v₧dy v rßmci jednoho konkrΘtnφho skriptu. Jakmile je tento skript proveden a v²slednß podoba strßnky v HTML vygenerovßna, lokßlnφ prom∞nnΘ jsou automaticky zruÜeny. Tento postup by se dal analogicky p°irovnat k lokßlnφm prom∞nn²m uvnit° procedur a funkcφ klasickΘ softwarovΘ aplikace.

A₧ dosud je vÜe jednoduchΘ, ale problΘm nastßvß v okam₧iku, kdy pot°ebujete n∞kterΘ lokßlnφ prom∞nnΘ p°enΘst z jednΘ strßnky (nap°φklad ze strßnky registrace u₧ivatele) do druhΘ (t°eba do strßnky, kterß registraΦnφ ·daje zpracovßvß). P°i tvorb∞ softwarovΘ aplikace je to pom∞rn∞ jednoduchΘ. Z procedury, kterß m∞la za ·kol vykonat urΦitou Φinnost, jednoduÜe ud∞lßme funkci, kterß vracφ nßmi po₧adovanou hodnotu. V p°φpad∞ ASP strßnek vÜak musφme postupovat trochu odliÜn²m zp∙sobem. Krom∞ implementace globßlnφch prom∞nn²ch (o t∞ch si povφme za chvφli) existujφ jeÜt∞ dva dalÜφ zp∙soby, jak dosßhnout stejnΘho efektu. Lokßlnφ prom∞nnou m∙₧eme p°enΘst z jednΘ strßnky na druhou prost°ednictvφm URL adresy nebo pomocφ vstupnφho formulß°e. V prvnφm p°φpad∞ bude vypadat URL adresa dalÜφ strßnky nßsledujφcφm zp∙sobem:

vypis.asp?id=150&s=Jmeno

Na strßnce se bude tato sekvence nejΦast∞ji objevovat jako odkaz na dalÜφ strßnku, a to v nßsledujφcφ form∞:

<A href="vypis.asp?id=2&s=Jmeno">V²pis zam∞stnanc∙</A>





Obr 1. P°enos parametr∙ mezi strßnkami pomocφ URL adresy.


Jde o HTML p°φkaz, kter² odkazuje na ASP strßnku (skript) vypis.asp. Pokud si vzpomφnßte, v minulΘm dφle tohoto serißlu jsem pou₧φvali strßnku vypis.asp pro v²pis seznamu zam∞stnanc∙ z databßze. VÜechny ostatnφ znaky (sekvence ?id=2&s=Jmeno), kterΘ se nachßzejφ za nßzvem tΘto strßnky, slou₧φ pro p°enos lokßlnφch parametr∙ z p°edchozφ strßnky. Jako odd∞lovacφ znak je zde pou₧ito otaznφku (?) a nßsleduje nßzev pomocnΘ p°enosovΘ prom∞nnΘ id, do kterΘ p°i°adφme hodnotu naÜφ lokßlnφ prom∞nnΘ (=150). DalÜφ pomocnß prom∞nnß ji₧ nenφ odd∞lena otaznφkem (ten se pou₧φvß jen bezprost°edn∞ za jmΘnem skriptu), ale znakem (&). Za tφmto znakem op∞t nßsleduje pomocnß prom∞nnß a hodnota druhΘ lokßlnφ prom∞nnΘ (s=Jmeno). V naÜem p°φpad∞ id oznaΦuje Φφslo v²pisu zam∞stnanc∙ a klφΦ, podle kterΘho bude v²pis se°azen. Ob∞ prom∞nnΘ naΦteme do nßsledujφcφ strßnky pomocφ p°φkazu Request.QueryString. V naÜem konkrΘtnφm p°φpad∞:

<%
' *** naΦte vstupnφ ·daje ***
vypis_cislo = Request.QueryString("id")
seradit_dle = Request.QueryString("s")
%>

Jak vidφte, do prom∞nn²ch vypis_cislo a seradit_dle jsme naΦetli hodnoty lokßlnφch prom∞nn²ch z p°edchßzejφcφ strßnky. K jejich p°enosu jsme vyu₧ili URL adresy strßnky a pomocn²ch prom∞nn²ch id a s.

Existuje dalÜφ zp∙sob - p°enos hodnot pomocφ formulß°e a metody POST. Tento postup vyu₧φvßme pro strßnky s formulß°em (nap°φklad pro vlo₧enφ novΘho zam∞stnance do registru) a nßsledn² p°enos parametr∙ pro zpracovßnφ v dalÜφ ASP strßnce. ╪ekn∞me, ₧e pro nßÜ p°φpad budeme vklßdat data prost°ednictvφm strßnky formular.asp a zapisovat do databßze v ASP strßnce vloz.asp. Pro zjednoduÜenφ p°edpoklßdejme, ₧e formulß° na strßnce formular.asp bude obsahovat vstupnφ polφΦka pouze pro jmΘno a p°φjmenφ (prom∞nnΘ jmeno, prijmeni).

<FORM action="vloz.asp" METHOD="POST" name="vkladani">
<INPUT name="jmeno" type="TEXT" maxlength="20" SIZE="20">
<INPUT name="prijmeni" type="TEXT" maxlength="40" SIZE="40">
<INPUT name="OK" type="SUBMIT" VALUE=" OK ">
</FORM>

Jakmile vlo₧φ dotyΦnß osoba do formulß°e po₧adovanΘ ·daje a stiskne tlaΦφtko OK, dojde k volßnφ ASP strßnky vloz.asp a p°edßnφ parametr∙ z formulß°e. Tyto ·daje naΦteme pomocφ p°φkazu Request.Form do prom∞nn²ch zam_jmeno a zam_prijmeni. Programov² skript pro napln∞nφ t∞chto prom∞nn²ch bude vypadat nßsledovn∞:

<%
' *** naΦte vstupnφ ·daje z formulß°e na p°edchozφ stran∞ ***
zam_jmeno = Request.Form("jmeno")
zam_prijmeni = Request.Form("prijmeni")
%>





Obr 2. P°enos parametr∙ mezi strßnkami prost°ednictvφm formulß°e a metody POST.


T°etφm mo₧n²m zp∙sobem p°enosu prom∞nn²ch mezi jednotliv²mi ASP strßnkami jsou globßlnφ prom∞nnΘ. Jde o prom∞nnΘ, do kter²ch m∙₧e b²t zapisovßno nebo z nich Φteno v libovolnΘ ASP strßnce. Tyto prom∞nnΘ nejsou po vygenerovßnφ ASP strßnky "zahozeny", tak jako lokßlnφ prom∞nnΘ, ale svou hodnotu si po urΦitou dobu uchovßvajφ. Nejsou vÜak "globßlnφ" pro vÜechny u₧ivatele, kte°φ se ve stejnou chvφli nachßzejφ na stejnΘm serveru a Φtou stejnΘ strßnky. Globßlnφ prom∞nnΘ se vytvß°ejφ v pam∞ti serveru zvlßÜ¥ pro ka₧dΘho u₧ivatele. Impulyzem pro inicializaci prostoru, kde se budou tyto prom∞nnΘ uklßdat (ten se jmenuje Session), je prvnφ vstup u₧ivatele na server. Po n∞m je aktivovßn soubor global.asa, kter² se nachßzφ ve stejnΘm adresß°i jako ASP strßnky serveru. Teprve po tΘto inicializaci dochßzφ k zaslßnφ prvnφ strßnky. Pokud si u₧ivatel vy₧ßdß dalÜφ stßnku, inicializace se ji₧ neopakuje a globßlnφ prom∞nnΘ se udr₧ujφ v pam∞ti po dobu, kdy si u₧ivatel prochßzφ jednotlivΘ strßnky serveru. B∞hem tΘto doby je mo₧nΘ z prom∞nn²ch libovoln∞ Φφst, zapisovat do nich, nebo dokonce vytvß°et prom∞nnΘ novΘ (viz nßsledujφcφ p°φklad).

<%
' *** do prom∞nnΘ moje_jmeno naΦte hodnotu globßlnφ prom∞nnΘ JMENO ***
moje_jmeno = Session ("jmeno")

' *** do globßlnφ prom∞nnΘ VEK zapφÜe novou hodnotu ***
Session("vek") = 30
%>

Globßlnφ prom∞nnΘ se v²born∞ hodφ tam, kde pracujeme s urΦitou mφrou zabezpeΦenφ. Nap°φklad pro p°ihlaÜovacφ formulß° obsahujφcφ jmΘno a heslo pou₧ijeme nejprve p°enos parametr∙ do dalÜφ strßnky metodou POST a potΘ ji₧ ob∞ hodnoty p°enßÜφme mezi jednotliv²mi strßnkami pomocφ globßlnφch prom∞nn²ch. Naopak v jin²ch situacφch se m∙₧e vφce hodit p°enos parametr∙ prost°ednictvφm URL adresy (obzvlßÜt∞ tam, kde se nep°enßÜφ citlivΘ ·daje), nebo¥ pro n∞ nemusφme zbyteΦn∞ vytvß°et globßlnφ prom∞nnΘ; Üet°φme tak mφsto v pam∞ti.

Tipy, triky

Chcete mφt na konci vÜech WWW strßnek d∙le₧it² odkaz nebo logo. Pou₧ijte p°φkaz INCLUDE, jeho₧ pomocφ lze do ASP strßnek vklßdat celΘ kusy textu nebo skript∙, kterΘ jsou umφst∞ny ve zvlßÜtnφm souboru.

<!--#INCLUDE FILE="nßzev vklßdanΘho souboru"-->

Tφmto zp∙sobem si m∙₧ete vytvo°it jedno standardnφ zßpatφ WWW strßnek. Pokud bude v budoucnu zapot°ebφ p°idat nov² odkaz nebo zm∞nit logo, postaΦφ provΘst zm∞nu ve vklßdanΘm souboru.

DalÜφ tip. Jak jist∞ vφte, na internetu se nachßzφ celß °ada proxy server∙, kterΘ obsah WWW strßnek uklßdajφ do svΘ vyrovnßvacφ pam∞ti a tφm Üet°φ kapacitu linky. Dφky takovΘmu proxy serveru nemusφ u₧ivatel poka₧dΘ vid∞t aktußlnφ verzi vaÜich WWW strßnek. Proti tomu se m∙₧ete brßnit tak, ₧e do hlaviΦky ka₧dΘ ASP strßnky umφstφte nßsledujφcφ p°φkaz:

<% Response.Expires = 0 %>

Ten zp∙sobφ, ₧e strßnka bude okam₧it∞ po naΦtenφ a zobrazenφ na monitoru poΦφtaΦe oznaΦena za starou a ji₧ neaktußlnφ. Prohlφ₧eΦ si poka₧dΘ "sßhne" pro jejφ novou verzi p°φmo k vßm na server. Je nutno dodat, ₧e ani tato metoda nemusφ b²t 100% ·Φinnß, proto₧e n∞kterΘ Üpatn∞ nakonfigurovanΘ proxy servery p°φkaz Response.Expires = 0 prost∞ ignorujφ.

DalÜφ tip: Pokud konvertujete v ASP strßnkßch n∞kterΘ hodnoty do prom∞nnΘ integer, nezapome≥te si ohlφdat dv∞ v∞ci, p°i kter²ch m∙₧e dochßzet k chybßm. Tou prvnφ je snaha o konverzi °et∞zce, kter² obsahuje krom∞ Φφslic i jinΘ znaky (a sprßvn∞ by nem∞l). V takovΘm p°φpad∞ se skript zastavφ a u₧ivateli zobrazφ chybovΘ hlßÜenφ. Pokud se toho chcete vyvarovat, vypφnejte p°ed ka₧dou konverzφ kontrolu chyb p°φkazem On Error Resume Next. Samoz°ejm∞ nezapome≥te zkontrolovat hodnotu parametru Err.Number, a pokud se jejφ hodnota liÜφ od nuly, upozorn∞te u₧ivatele na to, ₧e danou hodnotu zadal z°ejm∞ ve ÜpatnΘm tvaru.

<%
On Error Resume Next
zam_vek = CInt(vek)
If Err.Number <> 0 Then
vypiÜte chybovΘ hlßÜenφ
End If
%>

Druhou notoricky znßmou, ale p°esto Φasto opomφjenou chybou je "p°eteΦenφ" prom∞nnΘ typu integer, ke kterΘmu dochßzφ p°i celoΦφseln²ch hodnotßch v∞tÜφch ne₧ +/-32768.

Tip na zßv∞r: Zajφmß vßs IP adresa poΦφtaΦe, ze kterΘho u₧ivatel p°istupuje na vaÜe ASP strßnky? Hodφ se t°eba v p°φpadech, kdy chcete n∞komu zakßzat p°φstup na vaÜe strßnky, velmi dob°e lze tohoto p°φkazu vyu₧φt takΘ pro tvorbu statistiky nßvÜt∞vnosti. Syntaxe je nßsledujφcφ:

<% IP_adresa_uzivatele = Request.ServerVariables("REMOTE_ADDR") %>

Zßv∞rem

Cel² serißl nynφ p°evßdφme do HTML podoby a p°ipravujeme pro Chip CD 5/99. Krom∞ jednotliv²ch dφl∙ serißlu zde naleznete takΘ ASP skripty a mal² internetov² server Microsoft Personal Web Server, jeho₧ pomocφ lze tvo°it a spouÜt∞t ASP strßnky i pod Windows 95. DalÜφ rady u₧ musφte hledat v odbornΘ literatu°e; neuÜkodφ, ani pokud nahlΘdnete do serißlu o SQL, kter² v Chipu pravideln∞ vychßzφ.

NßÜ krßtk² serißl o programovßnφ ASP strßnek je u konce. Ve Φty°ech dφlech jsme se vßs sna₧ili obeznßmit se zßkladnφmi vlastnostmi ASP strßnek a jejich programovßnφm. Doufßme, ₧e se vßm nßÜ serißl lφbil; hodn∞ zdaru p°i tvorb∞ a pevnΘ nervy p°eje autor serißlu

Martin Dvo°ßΦek



Obsah