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 = DateDiff("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 serwerze: 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 serwerze: 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 dyrektywy 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 Flush 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 (Response.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 przedstawiona 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 |
|
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=wartosc2&pole3=wartosc3 |
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 zawartoś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 |
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ą |
CStr(łańcuch) |
- |
konwertuje łańcuch na łańcuch (ciąg znaków) |
isDate(dana) |
- |
zwraca wartość TRUE jeśli dana jest datą, w przeciwnym wypadku zwraca wartość FALSE |
Replace(łańcuch, ciąg1, ciąg2) |
- |
zamienia każdy ciag1 na ciag2 napotkany w łańcuchu | |