3. Wysy│anie i odbieranie
danych od u┐ytkownika.
3.1 Wysy│anie danych do u┐ytkownika
W tej czΩ╢ci zostanie pokazane jak po│▒czyµ VBScript
z HTML oraz jak umie╢ciµ rezultat
wykonania kodu VBScript w dokumencie HTML wys│anym
do przegl▒darki (klienta). Pos│u┐Ω siΩ przyk│adem,
kt≤ry informuje o godzinie na serwerze oraz o ilo╢ci
godzin w stosunku do dnia 01-01-2000. Przyk│ad
zawiera funkcje operuj▒ce na dacie i czasie.
Przyk│ad.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16: |
<% @LANGUAGE =
VBScript %>
<%
Option Explicit
Response.Expires = 0
Dim czasTeraz, czasZaGodzine, czasRoznica
czasTeraz = Time
czasZaGodzine = DateAdd("h", 1,
czasTeraz)
czasRoznica = ("h", Now,
#1/1/2000#)
%>
<HTML>
<BODY>
Witaj U┐ytkowniku.<BR>
Godzina na serverze: <% =czasTeraz
%>.<BR>
Za godzinΩ czas na serwerze bΩdzie: <% =czasZaGodzine
%>.<BR>
<%
If czasRoznica > 0 Then |
17:
18: |
|
Response.Write
"Jeszcze " & czasRoznica &
" godzin "
Response.Write "do roku 2000.<BR>"
& VbCrLf |
19: |
ElseIf czasRoznica <
0 Then |
20:
21: |
|
Response.Write "Ju┐
" & Abs(czasRoznica) & "
godzin minΩ│o od "
Response.Write "rozpoczΩcia roku
2000.<BR>" & VbCrLf |
23:
24: |
|
Response.Write
"Rok 2000 siΩ w│a╢nie rozpocz▒│.<BR>"
& VbCrLf
Response.Write "<B>SZCZʦLIWEGO
NOWEGO ROKU !</B><BR>"
& VbCrLf |
25:
26:
27:
28: |
End If
%>
</BODY>
</HTML> |
Kiedy zostanie otwarty ten plik w przegl▒darce,
na stronie pojawi siΩ napis podobny do poni┐szego.
Witaj U┐ytkowniku.
Godzina na serverze: 10:17:34 AM.
Za godzinΩ czas na serwerze bΩdzie:
11:17:34 AM.
Ju┐ 8754 godzin minΩ│o od rozpoczΩcia
roku 2000. |
Je╢li podejrzy siΩ ╝r≤d│o, zostanie wy╢wietlony
nastΩpuj▒cy kod:
<HTML>
<BODY>
Witaj U┐ytkowniku.<BR>
Godzina na serverze: 10:17:34 AM.<BR>
Za godzinΩ czas na serwerze bΩdzie:
11:17:34 AM.<BR>
Ju┐ 8754 godzin minΩ│o od rozpoczΩcia
roku 2000.<BR>
</BODY>
</HTML> |
Teraz zostan▒ opisane poszczeg≤lne linie kodu.
Pierwsza z nich to:
<% @LANGUAGE = VBScript
%> |
Dyrektywa @LANGUAGE zosta│a u┐yta
w celu okre╢lenia jΩzyka skryptu dla pliku ASP.
Ta komenda musi znajdowaµ siΩ w pierwszej linii
przed jakimikolwiek innymi blokami kodu. Dyrektywa @LANGUAGE
informuje IIS o u┐ytym jΩzyku w skrypcie. Jej u┐ycie
nie jest konieczne, lecz zalecane, gdy┐ w razie
zmiany w ustawieniach IIS dotycz▒cych u┐ytego jΩzyka
w plikach *.asp, np. z VBScript na
JScript, wszystkie pliki kt≤re bΩd▒ zawiera│y
komendy VBScript, a nie bΩd▒ posiada│y tej
dytrektywy zwr≤c▒ b│Ωdy w sk│adni.
Poni┐ej przedstawiona komenda VBScript nakazuje
deklaracjΩ ka┐dej u┐ytej zmiennej z skrypcie, u┐ywaj▒c
instrukcji Dim, Private, Public
oraz ReDim.
Komenda powinna siΩ znajdowaµ tu┐ po linii
zawieraj▒cej dyrektywΩ @LANGUAGE. Po
jej wpisaniu nale┐y deklarowaµ wszystkie zmienne
przed ich u┐yciem. Takie rozwi▒zanie jest bardzo
pomocne, gdy w skrypcie u┐yje siΩ b│Ωdnie
wpisanej zmiennej poniewa┐ w wyniku otrzyma siΩ b│▒d
w postaci: Variable undefined, w
momencie wywo│ania go spod przegl▒darki. W takim
przypadku bΩdzie wiadomo, ┐e jaka╢ nazwa zmiennej
zosta│a wpisana niepoprawnie. ZaoszczΩdzi to wielu
godzin szukania b│Ωdu. Je╢li siΩ stwierdzi, ┐e
skrypt dzia│a poprawnie mo┐na t▒ liniΩ usun▒µ,
lecz w trakcie tworzenia i modyfikowania skryptu
jest ona niemal nieodzowna. Na przyk│ad je╢li w
programie u┐yta zostanie zmienna nazwa
i w jakim╢ miejscu, przez zupe│ny przypadek,
wpisana zostanie zamiast nazwa np. nawza,
wtedy przy braku tej komendy program potraktuje
zmienn▒ nawza jako now▒ zmienn▒,
sformatuje j▒, czyli ustali jej warto╢µ na 0
lub ci▒g o zerowej d│ugo╢ci, a na stronie nie
pojawi siΩ zamierzona informacja przechowywana w
zmiennej nazwa.
W czwartej linii znajduje siΩ komenda
Informuje ona przegl▒darkΩ po jakim czasie
zawarto╢µ strony traci wa┐no╢µ. Warto╢µ okre╢lana
jest w minutach. W naszym przypadku wynosi ona zero.
Je╢li jest potrzeba okre╢lenia daty up│ywu wa┐no╢ci
nale┐a│oby wpisaµ na przyk│ad nastΩpuj▒c▒
komendΩ:
Response.ExpiresAbsolute = #January
1, 2000 00:00:00# |
W przypadku obu komend musz▒ one znale╝µ siΩ
przed ca│▒ zawarto╢ci▒ dokumentu formatu HTML
oraz komendami Response.Write (chyba,
┐e u┐yto komendy Response.Buffer = TRUE,
ale o tym za chwilΩ). W przeciwnym wypadku przegl▒darka
poka┐e b│▒d w postaci: Response object
error (Header error). B│▒d jest zwi▒zany z
tym, i┐ komenda Response.Expires zosta│a
wys│ana do przegl▒darki po wcze╢niejszym przes│aniu
nag│≤wka HTTP.
Instrukcja
Dim czasTeraz, czasZaGodzine,
czasRoznica |
deklaruje u┐yte w skrypcie zmienne. S▒ one od
siebie oddzielone przecinkiem. Kolenjne linie:
czasTeraz = Time
czasZaGodzine = DateAdd("h", 1,
czasTeraz)
czasRoznica = ("h", Now,
#1/1/2000#) |
okre╢laj▒ warto╢ci zadeklarowanych zmiennych.
Pierwsza linia ustala warto╢µ zmiennej czasTeraz
na warto╢µ aktualnej godziny serwera, druga
ustawia warto╢µ zmiennej czasZaGodzine
na warto╢µ zmiennej czasTeraz zwiΩkszonej
o jedn▒ godzinΩ, za╢ trzecia linia zapisuje do
zmiennej czasRoznica warto╢µ r≤wn▒
r≤┐nicy czasu aktualnego i daty 1/1/2000 okre╢lon▒
w godzinach. Je╢li bie┐▒cy czas jest przed dat▒
1/1/2000 to warto╢µ czasRoznica jest
dodatnia, za╢ je╢li jest po tej dacie - zmienna
przyjmuje warto╢µ ujemn▒.
Zmienne maj▒ ju┐ okre╢lone warto╢ci, teraz nale┐a│oby
je pokazaµ u┐ytkownikowi w oknie przegl▒darki. Do
tego s│u┐y instrukcja
<% Respone.Write(tekst)
%> |
lub inna r≤wnowa┐na, u┐yta w przyk│adzie
Linia 9, tj. %>, zamyka blok kodu
VBScriptu.
Linie 10-14 zawieraj▒ kod HTML z
warto╢ciami zmiennych czasTeraz, czasZaGodzine
oraz czasRoznica. W liniach 16-25 zosta│a
u┐yta instrukcja warunkowa If. Instrukcja Response.Write
wysy│a do przegl▒darki tekst. Mo┐e on zawieraµ
zmienne i │a±cuchy. ú▒czenie tekstu ze zmiennymi
odbywa siΩ za pomoc▒ znaku &. Je╢li
chcemy wys│aµ sygna│ przej╢cia do nastΩpnej
linii nale┐y do│▒czyµ sta│▒ VbCrLf,
np.
Response.Write "Warto╢µ="
& wartosc & ".<BR>"
& VbCrLf |
Buforowanie
Bufor jest magazynem, kt≤ry przechowuje dane
przez pewien czas. U┐ycie buforowania pozwala na
umieszczenie komendy Response.Expires
za kodem HTML lub instrukcj▒ Response.Write.
Przyk│ad przedstawiaj▒cy buforowanie:
<% @LANGUAGE =
VBScript %>
<%
Option Explicit
Response.Buffer = TRUE
Response.Expires = 60
%>
<HTML>
<BODY>
Witaj U┐ytkowniku.<BR>
Teraz widzisz wiadomo╢µ 1.
<%
Response.Clear
Response.Expires = 0
%>
<HTML>
<BODY>
To jest szybkowygasaj▒ca wiadomo╢µ.
<%
Response.Flush
%>
</BODY>
</HTML>
<%
Response.End
%>
Ta linia nigdy nie zostanie wys│ana do
przegl▒darki. |
Kiedy zostanie uruchomiony powy┐szy kod na
ekranie przegl▒darki pojawi siΩ napis:
To jest szybkowygasaj▒ca
wiadomo╢µ. |
Dodatkowo przegl▒darka zostanie poinformowana,
┐e zawarto╢µ strony straci natychmiast wa┐no╢µ.
Linia zawieraj▒ca:
sygnalizuje, ┐e strona bΩdzie buforowana na
serwerze i nie zostanie wys│ana odpowied╝ do
przegl▒darki klienta dop≤ki wszystkie instrukcje z
bie┐▒cej strony ASP nie zostan▒ przes│ane lub
dop≤ki nie zostan▒ wywo│ane metody Flash
lub End obiektu Response.
Komenda Response.Buffer musi znajdowaµ
siΩ przed kodem HTML lub instrukcj▒ Response.Write.
Linia zawieraj▒ca:
okre╢la czas utraty wa┐no╢ci strony po 60
minutach. Takie rozwi▒zanie jest u┐yteczne w
przypadku, gdy zawarto╢µ strony jest zmieniana co
maksymalnie dwie godziny.
Linie zawieraj▒ce:
<HTML>
<BODY>
Witaj U┐ytkowniku.<BR>
Teraz widzisz wiadomo╢µ 1. |
s▒ przechowywane w buforze (Respnse.Buffer
= TRUE), ale nie zostan▒ nigdy wys│ane do
przegl▒darki, poniewa┐ bufor jest czyszczony
komend▒:
Tak┐e w kolejnej linii, tj. Response.Expires=0,
ustawione jest natychmiastowy up│yw wa┐no╢ci
strony.
NastΩpnie, specjalna, szybkowygasaj▒ca wiadomo╢µ
jest przechowywana w buforze. Nale┐y zauwa┐yµ, ┐e
musisz zaopatrzyµ stronΩ we wszystkie znaczniki
takie jak <HTML> lub <BODY>
po tym, jak wyczyszczony zostanie bufor. Je╢li
wymagane jest wys│anie w trybie natychmiastowym
zawarto╢ci bufora do przegl▒darki nale┐y
wykorzystaµ nastΩpuj▒c▒ instrukcjΩ:
Kolejne linie:
zostaj▒ wys│ane do przegl▒darki i zamkn▒
dokument HTML.
Inn▒ metod▒ obiektu Response jest End.
Komenda:
nakazuje serwerowi WWW zako±czyµ przetwarzanie
skryptu i wys│aµ bie┐▒cy rezultat. Wszystkie
linie znajduj▒ce siΩ pod t▒ komend▒ nie zostan▒
wykonane (nie zostan▒ przes│ane do przegl▒darki).
Przekierowanie u┐ytkownika do innej strony
Przekierowanie u┐ytkownika do innej strony mo┐na
zastosowaµ w przypadku:
-autoryzacji |
- |
kiedy u┐ytkownik
nie jest zalogowany, mo┐e zostaµ
przekierowany do strony, na kt≤rej mo┐e siΩ
zalogowaµ. |
-formularza |
- |
kiedy
formularz na stronie ASP jest wys│any sam
sobie i nastΩpuje sprawdzenie poprawno╢ci
wprowadzonych danych. Je╢li dane s▒
niepoprawne, wtedy zostaje wys│any
komunikat o b│Ωdzie wraz z oryginaln▒
form▒ formularza. Je╢li formularz zosta│
wype│niony poprawnie, wtedy u┐ytkownik
zostaje przekierowany do innej strony. |
W celu dokonania przekierowania nale┐y wywo│aµ
metodΩ Redirect obiektu Response.
Przyk│ad:
Response.Redirect
"/katalog/nowastrona.asp" |
lub r≤wnowa┐ne
Response.Redirect("/katalog/nowastrona.asp") |
Uwaga! »adne dane wyj╢ciowe nie
mog▒ znale╝µ siΩ przed metod▒ Redirect.
Formatowanie ustawie± regionalnych
Postaµ daty w r≤┐nych standardach wygl▒da
odmiennie, czy to dla u┐ytkownik≤w anglojΩzycznych,
czy niemieckich. Domy╢lne ustawienia regionalne
serwera s▒ odpowiedzialne za jej wygl▒d.
Ustawienia te mo┐na zmieniaµ korzystaj▒c z w│a╢ciwo╢ci
LCID obiektu Session. Poni┐ej
zosta│a przedstawina tabela z warto╢ciami dla r≤┐nych
ustawie± regionalnych.
Nazwa regionu |
LCID |
Data i czas |
angielski (australijski) |
3081 |
26/01/99 2:37:46 |
angielski (kanadyjski) |
4105 |
26/01/99 2:37:46 AM |
angielski (UK) |
2057 |
26/01/99 02:37:46 |
angielski (ameryka±ski) |
1033 |
1/26/99 2:37:46 AM |
francuski (standard) |
1036 |
26/01/99 02:37:46 |
niemiecki (standard) |
1031 |
26.01.99 02:37:46 |
japo±ski |
1041 |
99/01/26 2:37:46 |
rosyjski |
1049 |
26.01.99 2:37:46 |
hiszpa±ski (wsp≤│czesny) |
3082 |
|
3.2 Odbieranie danych od u┐ytkownika
Zmienne ╢rodowiskowe
Czasem jest potrzeba uzyskania informacji na
temat typu przegl▒darki klienta, adresu IP, itp. W
tym celu mo┐na pos│u┐yµ siΩ grup▒ ServerVariables
obiektu Request. Przyk│adem
wykorzystania (odczytania) zmiennej ╢rodowiskowej
jest poni┐szy zapis:
sciezkaURL =
Request.ServerVariables("SCRIPT_NAME") |
W przyk│adzie do zmiennej sciezkaURL zostanie
zapisana rzeczywista ╢cie┐ka wykonywanego skryptu.
Teraz zostan▒ om≤wione wa┐niejsze zmienne ╢rodowiskowe:
SCRIPT_NAME |
- |
rzeczywista ╢cie┐ka do
wykonywanego skryptu |
CONTENT_LENGTH |
- |
informacje jakie zosta│y
wys│ane od klienta (u┐ytkownika) przy
pomocy metody POST do serwera |
ALL_RAW |
- |
wszystkie nag│≤wki HTTP
wys│ane od przegl▒darki wywo│ane
uruchomieniem skryptu |
HTTP_HeaderName |
- |
nazwa nag│≤wka HTTP |
HTTP_USER_AGENT |
- |
nazwa przegl▒darki, jej
wersja i system operacyjny |
HTTP_ACCEPT_LANGUAGE |
- |
preferowane jΩzyki |
HTTP_REFERER |
- |
adres strony, kt≤ra wywo│a│a
bie┐▒cy skrypt (stronΩ) |
REMOTE_ADDR |
- |
adres IP klienta |
SERVER_NAME |
- |
nazwa domeny serwera (np.
www.nazwa.com), wykorzystywana w przypadku
wielu domen na jednym serwerze |
QUERY_STRING |
- |
zawarto╢µ wype│nionego i
wys│anego formularza |
Formularze
a) Metoda GET
U┐ycie metody GET sprawi, ┐e
wszystkie dane umieszczone w wype│nionym formularzu
zostan▒ do│▒czone do adresu URL i bΩd▒
odczytywalne od strony serwera poprzez u┐ycie grupy
Request.QueryString. Przyk│adowy adres
po wys│aniu formularza, kt≤rego metod▒ jest GET,
mo┐e wygl▒daµ nastΩpuj▒co:
http://www.nazwa.com/plik.asp?pole1=wartosc1&pole2=w2&pole3=w3 |
Warto╢ci▒ zwr≤con▒ poprzez wywo│anie komendy
Request.QueryString("pole2")
bΩdzie wartosc2.
b) Metoda POST
W przeciwie±stwie do metody GET,
metoda POST nie do│▒cza danych z
formularza do adresu URL. Dane od strony serwera s▒
odczytywane przy pomocy zbioru Request.Form.
Przyk│ad odczytania zawatro╢ci pola tekstowego
z formularza, kt≤ry u┐ywa metody POST.
Fragment dokumentu HTML:
<FORM
ACTION="plik.asp"
METHOD="POST">
Podaj imiΩ: <INPUT TYPE="Text"
NAME="imie"><BR>
Podaj nazwisko: <INPUT
TYPE="Text"
NAME="nazwisko"><BR>
<INPUT TYPE="Submit"
NAME="submit"
VALUE="Wyslij">
</FORM> |
Odczytanie pola z imieniem odbywa siΩ poprzez
wpisanie komendy:
za╢ odczytanie pola z nazwiskiem:
Podobnie dzieje siΩ w przypadku metody GET,
z t▒ r≤┐nic▒, ┐e zamiast Request.Form
wpisaµ nale┐y Request.QueryString.
Przydatne funkcje:
Trim(│a±cuch) |
- |
wycina
wszystkie spacje znajduj▒ce siΩ na pocz▒tku
│a±cucha do momentu
napotkania innego znaku |
Replace(│a±cuch,
ci▒g1, ci▒g2) |
- |
zamienia ka┐dy
ciag1 na ciag2
napotkany w │a±cuchu |
isNumeric(dana) |
- |
zwraca warto╢µ
TRUE je╢li dana jest liczb▒,
w przeciwnym wypadku zwraca warto╢µ FALSE |
CInt(liczba) |
- |
konwertuje liczbΩ
na liczbΩ ca│kowit▒ |
CLng(liczba) |
- |
konwertuje liczbΩ
na liczbΩ ca│kowit▒ d│ug▒ |
isDate(dana) |
- |
zwraca warto╢µ
TRUE je╢li dana jest dat▒, w
przeciwnym wypadku zwraca warto╢µ FALSE |
Kurs
pochodzi z serwisu Programowanie wg Stelmika republika.pl/stelmik
|