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 = 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 |
22: | Else |
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.
Option Explicit |
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
Response.Expires = 0 |
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
<% =tekst %> |
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:
Response.Buffer = TRUE |
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:
Response.Expires = 60 |
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ą:
Response.Clear |
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ę:
Response.Flush |
Kolejne linie:
</BODY> </HTML> |
zostają wysłane do przeglądarki i zamkną dokument HTML.
Inną metodą obiektu Response jest End. Komenda:
Response.End |
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 |
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=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:
Request.Form("imie") |
zaś odczytanie pola z nazwiskiem:
Request.Form("nazwisko") |
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 |
Autor: Krzysztof Stelmach
Strona pochodzi z http://www.asp.z.pl/
Plik został ściągnięty ze strony
www.tymex.prv.pl