Stanowią interfejs użytkownika umożliwiający wprowadzanie danych i przekazywanie ich do skryptów CGI - obsługa po stronie serwera. Możliwe jest także ich ulepszenie przy pomocy Java Script. Zwiększa się wówczas możliwość obsługi po stronie klienta. Przykładowo za pomocą JS możemy sprawdzać poprawność danych oraz aktualizować pola, reagując na działania użytkownika w sposób natychmiastowy. Formularze są używane do zbierania danych, przyjmowania poleceń CGI, a także do sterowania działaniem aplikacji.
Wysyłanie danych do serweraAby dane z formularza HTML mogły zostać przetworzone, przeglądarka wysyła je poprzez żądanie HTTP. Skrypt CGI analizuje dane dopiero po ich dotarciu do serwera.
Elementy generowane przez formularz umieszczane są w łańcuchu zapytania, który jest częścią URL-a przekazywanego w wierszu żądania.
Elementy generowane przez formualrz umieszczane są w treści żądania HTTP.
Zanim przeglądarka wyśle do serwera dane z elementami formularza, musi je
zakodować. Obecnie istnieją dwie różne formy kodowania:
1 -
application/x-www-form-urlencoded - kodowanie domyślne,
2 -
multipart/form-data - używana głównie z formularzami umożliwiającymi
wysyłanie pliku do serwera Web.
Każdy element formularza HTML ma dwa atrybuty: nazwę i wartość.
Kodowanie application/x-www-form-urlencoded
a - przeglądarka
odczytuje nazwy i wartości każdego elementu formularza.
b - koduje
zebrane pary wg reguł kodowania w URL'ach, np. "To kot Ali!" zakodowany będzie
"To+kot+Ali%21".
c - przeglądarka łączy każdą parę nazwa-wartość
znakiem równości, natomiast poszczególne pary znakiem "&".
Przykładowy formularz umieszczony na stronie WWW.
<FORM ACTION="/cgi/register" METHOD="POST">
<P>
Imie i nazwisko:
<INPUT TYPE="TEXT"
NAME="naz_imie"><BR>
Adres e-mail: <INPUT TYPE="TEXT" NAME="email"<BR>
</P>
<INPUT TYPE="SUBMIT"
VALUE="Zarejestruj">
</FORM>
Po naciśnięciu przycisku zlecenia wysyłki - Zarejestruj, przeglądarka koduje
elementy tego formularza dla danych JakiesImie, JakiesNazwisko oraz ktos@gdziestam.com w
postaci:
naz_imie=JakiesImie+JakiesNazwisko&email=ktos%40gdziestam.com
Ze względu na użytą metodę POST łańcuch zostałby dołączony do
żądania HTTP jako treść wiadomosci wyglądającej następująco:
POST
/cgi/register HTTP/1.1
Host: AdresSerweraWeb
Content-Length:
62
Content-Type:
application/x-www-form-urlencoded
naz_imie=JakiesImie+JakiesNazwisko&email=ktos%40gdziestam.com
Jeżeli metodą byłoby GET, to żądanie zostałoby sformułowane
następująco:
GET
/cgi/register?naz_imie=JakiesImie+JakiesNazwisko&email=ktos%40gdziestam.com
HTTP/1.1
host: AdresSerweraWeb
Znacznik formularza i obowiązkowa składnia | Opis |
<FORM ACTION="url_do_CGI/jakas_akcja" METHOD="POST/GET"> | początek formularza |
<INPUT TYPE="text" NAME="nazwa" VALUE="wartosc" SIZE="rozmiar"> | pole tekstowe |
<INPUT TYPE="password" NAME="nazwa" VALUE="wartosc" SIZE="rozmiar"> | pole hasła |
<INPUT TYPE="hidden" NAME="nazwa" VALUE="wartosc"> | pole ukryte |
<INPUT TYPE="checkbox" NAME="nazwa" VALUE="wartosc"> | pole wyboru |
<INPUT TYPE="radio" NAME="nazwa" VALUE="wartosc"> | przycisk opcji |
<INPUT TYPE="submit" NAME="nazwa" VALUE="wartosc"> | przycisk zlecania wysylki |
<INPUT TYPE="reset" VALUE="wartosc"> | przycisk zerowania do ustawien domyślnych |
<INPUT TYPE="image" SRC="url_obrazka" NAME="nazwa" VALUE="wartosc"> | przycisk graficzny |
<INPUT TYPE="button" NAME="nazwa" VALUE="wartosc"> | zwykły przycisk |
<SELECT NAME="nazwa"
SIZE=1> <OPTION SELECTED>Pierwszy</OPTION> <OPTION>Drugi</OPTION> : </SELECT> |
lista rozwijana |
<SELECT NAME="nazwa" SIZE=n
MULTIPLE> <OPTION SELECTED>Pierwszy</OPTION> <OPTION>Drugi</OPTION> : </SELECT> |
lista zwykła (pole listy) |
<TEXTAREA ROWS=yy COLS=xx
NAME="nazwa"> : </TEXTAREA> |
wielowierszowe pole tekstowe |
</FORM> | koniec formularza |
Między nimi umieszczamy wszystkie pozostałe elementy formularza.
METHOD: Metoda żądania HTTP - GET/POST. Wielkość liter nie ma znaczenia.
Domyślnie przyjmowana wartość GET, jeśli nie podana.
ACTION: Określa
zazwyczaj URL skryptu CGI, który powinien odebrać żądanie HTTP.
ENCTYPE:
Atrybut ten ma znaczenie tylko dla metody POST (żądania GET nie mają części
zasadniczej). Standardowo i domyślnie application/x-www-form-urlencoded.
Jedynie do wysyłania plików używany jest
multipart/form-data.
onSubmit: Dotyczy obsługi zdarzeń i określa kod
JavaScriptu, który powinien być wykonany podczas zlecania wysyłania
formularza.
UWAGA: Dokument może zawierać wiele formularzy, ale nie można zagnieżdżać ich jeden w drugim!
<INPUT TYPE="typ" NAME="nazwa" VALUE="wartosc"> - schemat ogólny wspólny dla wszystkich typów.
TYPE: Typ elementu formularza.
NAME: Nazwa elementu. Bardzo istotna, gdyż
skrypt CGI sięga do wartości poprzez nazwę.
VALUE: Wartość zależna od typu
elementu.
Jest to typ domyślny. Pominięcie atrybutu TYPE da nam właśnie ten typ pola.
Dodatkowe atrybuty:
VALUE: Określa tekst wyświetlany w
polu tekstowym. Domyślnie pusty łańcuch.
SIZE: Określa szerokość w znakach
pola tekstowego. Domyślnie 20. Przeglądarki różnie interpretują to w zależności
od wybranej czcionki.
MAXLENGTH: Maksymalna liczba znaków pola. Domyslnie bez
ograniczeń.
onFocus, onBlur, onChange: Procedury JScriptowe obsługi
wywoływane podczas tych zdarzeń.
Podobny do pola tekstowego, te same atrybuty. Zamiast znaków wyświetla gwiazdki. Zabezpiecza jedynie przed podejrzeniem. Wartość nie jest szyfrowana podczas transferu do serwera WWW, hasła jawnie wchodzą w skład łańcucha zapytania żądania GET.
Niewidoczne dla użytkownika. Nie zapewniają jednak bezpieczeństwa - wystarczy edytować źródło HTML. Przydatne przy przesyłaniu informacji pomiędzy formularzami. Pola te mają atrybuty tylko NAME i VALUE.
Służą do wskazania przez użytkownika danej możliwości wyboru. Jeśli nie jest
zaznaczone, to ani jego nazwa ani wartość nie są zwracane. Możliwe jest użycie
kilku pól o tej samej nazwie.
Atreybuty pól wyboru:
VALUE:
Określa wartość, która jest włączana do żądania, gdy pole wyboru jest
zaznaczone. Jeśli atrybut nie zostanie podany, wartością zwróconą przez pole
jest "ON". Jeśli pole nie zostanie zaznaczone, to nie zostaną wysłane ani nazwa,
ani jego wartość.
CHECKED: Wskazuje, że pole wyboru powinno być domyślnie
zaznaczone. Atrybut pominięty - pole nie zaznaczone.
onCheck: Atrybut obsługi
JScript wskazujący kod w JS, który powinien zostać wykonany po zaznaczeniu
pola.
Podobne do pól wyboru, ale działają niezależnie, mają te same atrybuty co pola wyboru. Jeżeli jedno jest zaznaczone (CHECKED) - pozostałe odznaczone. Pomicięcie VALUE nie ma sensu, bo skrypt CGI nie będzie w stanie rozróżnić, który z grupy przycisków opcji jest "ON" - wszystkie zwrócą tą wartość. Użycie CHECKED w kilku przyciskach opcji o tej samej nazwie nie jest poprawne.
Służy do wysyłania zawartości formularza. Po kliknięciu na przycisk,
przeglądarka uruchamia skojarzoną z przyciskiem JScriptową procedurę obsługoi
OnSubmit, formatuje żądanie HTTP, a następnie wysyła je do URL podanego w
atrybucie ACTION formularza. Przy wysyłaniu formularza uwzględniana jest nazwa i
wartość tylko klikniętego przycisku - jeśli jest ich więcej niż jeden tego
typu.
Atrybuty:
VALUE: Określa tekst, który powinien zostać
wyświetlony na przycisku oraz wartość przypisywaną do elementu wysyłanego
zwrotnie z formularzem. Jeśli wartość zostanie pominięta, przeglądarka oparza
przycisk etykietą domyślną "Wyślij" lub "Submit" i nie wyśle jego nazwy
ani wartości.
onClick: JScriptowa procedura obsługi wykonywana po kliknięciu
przycisku. Zwrócenie przez kod false powoduje anulowanie wysyłania.
Umożliwia przywrócenie domyślnych wartości wszystkich pól formularza. Użycie
go nie pociąga za sobą reakcji ze strony skryptów. Umieszczenie na jednym
formularzu kilku takich przycisków nie jest błędem, ale jest
zbyteczne.
Atrybuty:
NAME: Ani nazwa, ani wartość nie są
przekazywane. Zastosowanie wyłącznie w JS.
VALUE: Etykieta
tekstowa.
onClick: Określa kod w JScripcie wykonywany po kliknięciu nań.
Zwrócenie false powoduje anulowanie operacji zerowania.
Funkcję przycisków mogą pełnić obrazki. Działanie nie różni się od działania
przycisków zlecania wysyłki. Dają większą swobodę co do wyglądu
przycisku.
Atrybuty:
VALUE: Wysyłany przez przeglądarki
tekstowe jako wartość elementu.
SRC: Określa URL obrazka.
onClick: Określa
kod w JScripcie wykonywany po kliknięciu nań. Zwrócenie false powoduje
anulowanie operacji zerowania.
Brak specjalnychfunkcji.
Atrybuty:
NAME: Określa nazwę
przycisku, ale nigdy nie jest włączany do wysyłanego żądania, więc zastosowanie
ogranicza się do JScript.
VALUE: Określa napis na przycisku.
onClick:
Określa kod JS uruchomiony po kliknięciu. Wartość zwracana przez ten kod nie
pociąga za sobą żadnych skutków.
Nowym elementem HTML 4 jest znacznik BUTTON, który jest podobny do klasycznego INPUT, ale pozwala wprowadzić do "klikalngo" przycisku znacznie więcej elementów. <BUTTON>Treść przycisku</BUTTON>
SELECT służy do tworzenia list, gdzie użytkownicy mogą wybierać spośród określonych pozycji. Można utworzyć listę przewijaną oraz listę rozwijaną. W przypadku list przewijanych można umożliwić wybór kilku pozycji naraz. Pozycje kodowane są jako osobne pary nazwa-wartość jakby były określone za pomocą kilku osobnych elementów formularza.
SIZE: Liczba widocznych wierszy listy. 1 oznacza postać listy
rozwijanej.
MULTIPLE: Umożliwia zaznaczenie kilku pozycji jednocześnie.
Możliwe gdy wartość SIZE jest większa niż 1.
Znacznik <SELECT> nie ma atrybutu VALUE. Każdą ewentualną wartość
należy objąć znacznikiem <OPTION>.
Atrybuty:
SELECTED:
Dana pozycja jest pozycją domyślną, zaznaczoną. Nieobowiązkowy. Podczas
wysyłania formularza, razem z wartością utworzoną przez zaznaczone opcje
wysyłana jest także nazwa znacznika <SELECT>.
VALUE: Określa wartość
przekazywaną wtedy, gdy dana opcja jest zaznaczona. Jeśli atrybut pominięty,
domyslnie tekst zawarty między znacznikami <OPTION> i </OPTION>
Umożliwia wprowadzanie kilku wierszy tekstu. Obszar tekstowy zdefiniowany między znacznikiem otwierającym i zamykającym. Brak jest atrybutu VALUE. Tekst domyślny umieszcza się między znacznikiem otwierającym i zamykającym. Inaczej niż w przypadku innych znaczników, białe znaki (spacje, przejście do nowego wiersza) nie są ignorowane.
COLUMNS: Szerokość obszaru tekstowego w znakach. Interpretowany różnie, w
zależności od przeglądarki i wyboru czcionki.
ROWS: Liczba wierszy
wyświetlanych w obszarze tekstowym.
WRAP: Nie jest ujęty w HTML4. Co ma
zrobić przeglądarka gdy tekst dojdzie do prawej krawędzi pola (zawijać, czy
nie). Nadanie wartości "virtual" - zawijanie w obszarze tekstowym, wysyłany bez
znaków podziału wiersza, "physical" - zawijanie ale z wysyłaniem znaków podziału
wiersza, "none" - przewijanie w poziomie, domyślne.