22 Część VII Udostępnianie baz danych w sieci WWW Podsta


#503
Część VII
Udostępnianie baz danych w sieci WWW

#504
Rozdział 22.
Podstawy programowania sieciowego

Pod pewnymi względami relacyjne bazy danych oraz sieć WWW zostały wręcz stworzone dla siebie. Sieć WWW oparta jest na idei uniwersalnego klienta posiadającego dostęp do danych, natomiast technologią dominującą w przechowywaniu i udostępnianiu danych są relacyjne bazy danych. Tworząc interfejs pomiędzy bazą danych, a przeglądarką WWW można w łatwy i szybki sposób zapewnić dostęp do danych niewyobrażalnie dużej liczbie użytkowników, bez zmuszania ich do nauki języka SQL lub instalowania dodatkowego oprogramowania na ich własnych komputerach.
Kluczowe znaczenie przy budowie aplikacji baz danych współpracujących z siecią WWW ma oprogramowanie warstwy pośredniczącej (ang. middleware), która zapewnia komunikację pomiędzy serwerem WWW, a relacyjną bazą danych. Ponieważ oprogramowanie to ma istotne znaczenie dla całej technologii dostępu do baz danych poprzez sieć WWW, jego produkcją zajęło się wiele różnych firm. Powstała cała masa serwerów umożliwiających tworzenie aplikacji WWW przy użyciu dowolnej technologii przeznaczonej dla sieci.
Przed przystąpieniem do omawiania poszczególnych serwerów aplikacji wyjaśnimy ogólne zasady działania sieci WWW, komunikacji między przeglądarką, a serwerem WWW, a także wpływ tych rozwiązań na budowę aplikacji współpracujących z bazami danych. Przedstawione zostaną również podstawowe informacje z zakresu języka HTML, bez których nie sposób mówić o tworzeniu oprogramowania dla sieci WWW.

Podstawy architektury sieci WWW

Omawianie szczegółów działania sieci WWW wykracza poza zakres tej książki, dlatego ograniczymy się jedynie do podania najbardziej podstawowych informacji na ten temat. Jak wiadomo, WWW jest jedną z usług oferowaną w ramach Internetu. Sieć WWW to nic innego jak system klient-serwer - klientami są przeglądarki WWW, natomiast serwerami oprogramowanie oferujące zbiory dokumentów do przeglądania.
#506
W przypadku integracji aplikacji sieciowej z relacyjną bazą danych, opisana para klient-serwer powiększa się o dodatkowy serwer aplikacji. Serwer aplikacji przetwarza żądania wysyłane do niego przez serwer WWW, po czym odsyła serwerowi WWW odpowiedź, którą ten z kolei przekazuje przeglądarce. Komunikacja pomiędzy serwerem WWW, a przeglądarką realizowana jest przy użyciu protokołu HTTP (Hypertext Transfer Protocol).
Szczegóły techniczne dotyczące tego protokołu opisane zostały w dokumentach RFC 1945 (HTTP 1.0) oraz 2068 (HTTP 1.1). Dodatkowe informacje na temat zasad działania protokołu HTTP znaleźć można pod następującymi adresami:

* http://www.cis.ohio-state.edu/htbin/rfc/rfc1945.html.
* http://www.cis.ohio-state.edu/htbin/rfc/rfc2068.html.

HTML

Język HTML jest pojęciem zbyt szerokim, aby można go było tutaj omówić w całości, dlatego ograniczymy się jedynie do informacji najistotniejszych, natomiast osoby zainteresowane tym tematem odsyłamy do innych książek. Język HTML oparty jest na znacznikach służących do formatowania tekstu oraz innych elementów strony. Od momentu jego powstania, został wzbogacony o dodatkowe elementy, umożliwiające tworzenie formularzy przypominających swoim wyglądem interfejs zwykłej aplikacji. Większość przeglądarek została również wyposażona w JavaScript, prosty język skryptowy umożliwiający programistom tworzenie interaktywnych elementów stron bez potrzeby kontaktowania się z serwerem.
Kolejną cechą języka HTML, przydatną dla programistów tworzących witryny WWW współpracujące z bazami danych, jest możliwość prezentowania informacji w formie tabel. Ma to szczególne znaczenie w przypadku baz relacyjnych ponieważ, jak wiadomo, przechowywane w nich dane mają również formę tabel.
Źródłem informacji na temat języka HTML, oprócz materiałów drukowanych, jest także sama sieć WWW. Oto kilka stron, z których skorzystać mogą osoby zainteresowane nauką tego języka:

* http://www.htmlhelp.com.
* http://www.wdvl.com.
* http://www.webreference.com.

Warto również zajrzeć do jednej z następujących książek:

* Laura Lemay, "HTML 4 Vademecum profesjonalisty", Wydawnictwo HELION 1999.
* Wojciech Romowicz, "HTML i JavaScript", Wydawnictwo HELION 1998.
* Arman Danesh, "JavaScript", Wydawnictwo HELION 1997.
#507
Formularze HTML

Tworzone przy użyciu znaczników HTML formularze składają się z różnego rodzaju elementów, do których zaliczają się między innymi: pola tekstowe, przyciski opcji, pola wyboru i listy rozwijane. Polom przypisywane są nazwy, które identyfikują wartości zwracane serwerowi (w formie par nazwa-wartość) przez przeglądarkę po zatwierdzeniu formularza przez użytkownika.
Formularze są w stanie doskonale odzwierciedlić zapytania kierowane do bazy danych. Np. wartość pola "Szukaj" pasuje jako warunek klauzuli WHERE lub ORDER BY wyrażenia SELECT. Jeśli formularz rejestruje nowych użytkowników, jego wartości użyte zostaną zapewne w wyrażeniu INSEKT. Kiedy omawiane będą kolejne pola formularzy, spróbuj zastanowić się, jaką rolę każde z nich może pełnić w bazie danych.
Tworząc strony formularzy należy pamiętać, że wygląd poszczególnych jego pól będzie, taki jak wygląd standardowych pól tego typu używanych na platformie, na której przeglądana jest dana strona. Zatem, jeśli używamy komputera Macintosh, elementy formularza wyglądają tak jak standardowe obiekty kontrolne tego systemu, z kolei w Windows ich wygląd jest zgodny z kontrolkami używanymi w tym środowisku. W chwili pisania niniejszej książki nie istnieje jeszcze metoda pozwalająca wpływać na wygląd formularzy poprzez kod strony ich wygląd jest zawsze standardowy, co nie jest wcale złym rozwiązaniem, ponieważ pozwala użytkownikom odróżnić pola formularza od reszty strony WWW.
Przed utworzeniem pól formularza trzeba zdefiniować sam formularza. Do tego celu służą dwa znaczniki otwierający i zamykający :


... Tutaj umieszczane są pola formularza ....


Znacznik
posiada szereg atrybutów. Zanim jednak do nich dotrzemy, omówimy jego domyślne zachowanie. Jeżeli nie zdefiniujemy żadnego atrybutu znacznika , przyjęte są następujące założenia:
* Formularz przekazywany jest samemu sobie. W przypadku statycznych stron HTML, efekt przekazania jest zerowy. Metoda taka ma sens, jeżeli strona generowana jest przez program, który przetwarza dane z formularza. W ten sposób często sprawdza się poprawność danych wprowadzonych przez użytkownika (jeżeli w danych wykryty zostanie błąd, formularz zwracany jest użytkownikowi do poprawy).
* Formularz używa metody get. Po zatwierdzeniu formularza pobrane z niego pary nazwa-wartość są kodowane i dołączane do adresu URL, skąd można je odczytać poprzez zmienną środowiskową QUERY_STRING.
* Domyślną metodą kodowania znaków specjalnych użytych w danych formularza jest application/x-www-form-urlencoded. Metoda ta jest w zupełności wystarczająca, o ile formularz nie zawiera pola przesyłającego pliki.
#508
Do zmiany adresu URL, pod który wysłany zostanie formularz, służy atrybut ac-tion. Na przykład poniższy znacznik wysyła formularz do skryptu CGI o nazwie
form_prog.cgi:



Przekazanie formularza spowoduje uruchomienie skryptu f orm_prog. cgi w katalogu cgi-bin serwera WWW."Nic nie stoi na przeszkodzie w wysyłaniu formularzy do programów rezydujących na różnych serwerach WWW, wystarczy umieścić w atrybucie a c t i on pełny adres URL programu przetwarzającego formularz.
Formularze mogą być przekazywane dwoma różnymi sposobami: get i post. Metoda get (stosowana domyślnie) przekazuje wszystkie wartości poprzez łańcuch dołączany do adresu URL, który wyspecyfikowany został w atrybucie action. Metoda post przekazuje dane formularza w ciele żądania wysyłanego do serwera WWW. Po dotarciu do serwera obie metody przetwarzane są w różny sposób.

Wybór między get i post

Co decyduje o wyborze jednej z metod przekazywania danych get lub post? Na ogół stosowana jest metoda post, istnieją jednak sytuacje, w których bardzo użyteczna okazuje się metoda get.
Metoda get powinna być używana kiedy zależy nam na możliwości korzystania z wyników zapytania, bez potrzeby ponownego wypełniania formularza przez użytkownika. Na przykład stworzyliśmy stronę, która wyświetla prognozę pogody dla danego obszaru kraju na podstawie kodu pocztowego wprowadzonego przez użytkownika. Jeżeli zastosowana została metoda get, użytkownik może utworzyć zakładkę dla wygenerowanej strony w swojej przeglądarce i powracać do niej w przyszłości ilekroć zechce, ponieważ jego kod pocztowy będzie pamiętany jako część adresu URL strony z prognozą pogody. Adres ten mógłby wyglądać następująco:

http://\vww.progpogody.com.pl/cgi-bin/pogoda.cgi?kodpoczt=45-502

W przypadku metody post, kod pocztowy zostałby zapisany w ciele żądania wysłanego do serwera WWW, natomiast adres URL przyjąłby formę następującą:

http://www.progpogody.com.pl/cgi-bin/pogoda.cgi

Jeżeli użytkownik chciałby powrócić do strony z prognozą pogody dla swojego regionu, otrzymałby w odpowiedzi stronę z formularzem do wypełnienia i odesłania serwerowi.
Niektóre strony wymagają możliwości uruchamiania skryptów bez pośrednictwa formularza. W takich przypadkach mniej lub bardziej przydatna okazuje się metoda get. Program korzystający z metody post musi zostać wywołany poprzez formularz, natomiast program używający metody get może zostać uruchomiony zwykłym odnośnikiem, np. takim jak ten:

Pokaż wszystkie rekordy.
#509
Kliknięcie na odnośnik spowoduje uruchomienie skryptu czytaj . cgi i przekazanie mu pary (nazwa-wartość) zakres=wszystkie.
Jeżeli formularz składa się z wielu pól, zastosowanie metody get może znacznie wydłużyć adres URL - w takich przypadkach preferowana jest metoda post.
Do zmiany metody kodowania służy atrybut enctype. Domyślne ustawienie tego atrybutu jest w zupełności wystarczające, o ile formularz nie zawiera w sobie pól przesyłających pliki, o czym będzie mowa w dalszej części rozdziału.
Pozostałe atrybuty są istotne głównie z punktu widzenia JavaScript. Np. jeśli zachodzi potrzeba odwołania się do formularza z wnętrza skryptu, można mu nadać nazwę używając atrybutu name.
Utworzenie samego formularza to jeszcze nie koniec, teraz trzeba wypełnić go treścią, czyli polami danych. Opis poszczególnych elementów formularza znajduje się w kolejnym podrozdziale.

Pola formularzy - znacznik

Większość pól formularzy tworzona jest przy użyciu znacznika . Ich wygląd i działanie zależy od ustawienia atrybutu type. Wspólną cechą wszystkich pól formularzy jest konieczność nadawania im nazw przy użyciu atrybutu name, które identyfikują dane formularza po stronie serwera. Polu można również przypisać wartość posługując się atrybutem value.
Spróbujmy rozważyć sposób realizacji wyrażenia UPDATE poprzez formularz HTML. Pola formularzy posiadają atrybut name (określający nazwę pola) oraz atrybut value, który przechowuje wartość domyślną pola, zastępowaną wartością wprowadzaną przez użytkownika z klawiatury. Załóżmy dla przykładu, że formularz jest interfejsem wyrażenia UPDATE realizowanego na tabeli Movies. Jednym z pól formularza jest zatem pole tekstowe umożliwiające zmianę nazwy filmu. Przed wyświetleniem formularza, następuje wypełnienie jego pól poleceniem SELECT. W atrybutach value umieszczane są istniejące wartości pól rekordu, dzięki czemu użytkownik widzi to, co za chwilę będzie zmieniał. Nazwy pól formularza odpowiadają nazwom pól w tabeli Movies, dzięki czemu programista może w bardzo prosty sposób skonstruować wyrażenie UPDATE. Po przekazaniu formularza do serwera odpowiednie wartości umieszczane są w wyrażeniu UPDATE, które uaktualnia rekord.

Pole tekstowe

Pole tekstowe jest powszechnie stosowanym obiektem kontrolnym, umożliwiającym użytkownikowi wpisywanie dowolnych treści z klawiatury. Rozmiar pola oraz maksymalna liczba znaków możliwa do wpisania z klawiatury są ustalane poprzez odpowiednie atrybuty. Przyjmuje się, iż rozmiar pola tekstowego formularza nie
#510
powinien przekraczać rozmiaru odpowiadającego mu pola w bazie danych. Przyczyną częstego stosowania pól tekstowych jest ich zdolność do akceptowania danych w niemal dowolnym formacie. Przykładowe pola tekstowe widoczne są na rysunku 22.1.
-------------------------
Rysunek 22.1. Formularz HTML
-------------------------
Poniżej znajduje się przykładowy znacznik tworzący pole tekstowe:



O tym, że znacznik reprezentuje pole tekstowe (lub inny rodzaj pola formularza) decyduje jego atrybut type (którego wartością w tym przypadku jest text). Atrybut value jest opcjonalny, jeżeli jednak zostanie określony, jego wartość zostanie umieszczona w polu tekstowym po wyświetleniu strony formularza w oknie przeglądarki. Atrybut size decyduje o rozmiarze pola, natomiast maxlength o ilości znaków, jakie można wprowadzić do tego pola z klawiatury.
W rzeczywistości wszystkie atrybuty znacznika są opcjonalne. Np. przeglądarka Netscape Communicator zinterpretuje sam znacznik jako pole tekstowe o długości 20 znaków, bez nazwy i wartości domyślnej. Ponieważ jednak pole to nie posiada nazwy, wpisana w nie wartość nie zostanie dołączona do danych przekazywanych serwerowi w chwili zatwierdzenia formularza. Nierozsądnym rozwiązaniem jest również opuszczenie atrybutów type i size - ich jawne określenie daje nam pewność co do rodzaju i rozmiaru poszczególnych pól na stronie.

Pole hasła

Pole hasła (ang. password) wygląda i zachowuje się niemal identycznie jak zwykłe pole tekstowe. Jedyna różnica polega na tym, że wszystkie znaki wpisywane w to pole są maskowane podczas wyświetlania na ekranie komputera. Ma to za zadanie uniemożliwić osobom postronnym odczytanie wpisywanej informacji (np. spojrzeniem przez ramię osoby wprowadzającej prywatne hasło z klawiatury).
#511
Pole password posiada taki sam zestaw atrybutów, jak pole tekstowe. Poniższy znacznik tworzy pole hasła widoczne na rysunku 22.1:


=======================
Uwaga
Maska nakładana na tekst wpisywany w pole hasła chroni go jedynie przed przypadkowym (a czasem również celowym) odczytaniem przez osoby do tego nieupoważnione. Wartość pola password wysyłana jest do serwera WWW tekstem otwartym. Jeżeli zatem zamierzamy przechowywać hasła w bazie danych, warto zakodować je w jakiś sposób, aby zyskać pewność, że prawa dostępu nałożone na bazę danych uniemożliwią ich odczytanie przez nieautoryzowanych użytkowników.
======================

Pola wyboru

Pola wyboru przyjmują jedną z dwóch wartości: włączone lub wyłączone (rysunek 22.1). Do utworzenia pola służy następujący znacznik:



Aby utworzyć pole wyboru, trzeba nadać atrybutowi value wartość checkbox. Pole wyboru, tak jak dwa poprzednie, posiada atrybuty name i value. Mimo, że checkkbox może przyjmować jeden z dwóch możliwych stanów (włączony lub wyłączony), jest z nim skojarzona tylko jedna wartość (atrybut value). Aby obejść ten potencjalny problem, para nazwa-wartość pola checkbox jest przekazywana do serwera WWW tylko wtedy, jeżeli pole to jest ustawione (w przeciwnym wypadku żadna wartość skojarzona z tym polem nie jest wysyłana do serwera). W takim podejściu wartość pola nie ma żadnego znaczenia. Pisząc program wystarczy sprawdzić, czy pole wyboru jest zdefiniowane w odpowiedzi. Jeśli nie jest, oznacza to, że nie zostało zaznaczone przez użytkownika. Atrybut checked nadaje polu stan "włączony" (pominięcie tego atrybutu sprawia, że pole jest domyślnie nieustawione).
===================
Rada
Pola wyboru odpowiadają polom bazy przechowującym wartości bo-olowskie. Jeżeli w tabeli znajduje się pole typu BIT, najlepszym jego odpowiednikiem w formularzu HTML jest właśnie pole wyboru.
==================

Przyciski opcji

Przyciski opcji umożliwiają użytkownikowi wybór jednej spośród kilku opcji. Są one na ogół tworzone przez grupę znaczników [Pojedynczy znacznik tego typu działałby dokładnie tak samo jak pole wyboru (przyp. thim.)]. W danej chwili zaznaczony może być tylko jeden przycisk opcji (wybranie nowego przycisku powoduje odznaczenie

#512
bieżącego). Na rysunku 22.1 widoczna jest grupa trzech przycisków opcji, do ich utworzenia użyty został następujący fragment kodu:

wartość pierwsza

wartość druga

wartość trzecia


Parametrem grupującym przyciski jest ich nazwa. Wszystkie przyciski o tej samej nazwie należą do jednej grupy. Jeżeli jeden z trzech przycisków jest zaznaczony, kliknięcie innego spowoduje jego automatyczne odznaczenie. Atrybut checked zaznacza dany przycisk w chwili ładowania strony formularza. Nadawanie go więcej niż jednemu przyciskowi opcji mija się z celem, można za to pominąć ten atrybut we wszystkich przyciskach, co sprawi, że po załadowaniu formularza żaden z nich nie będzie zaznaczony. Jeżeli użytkownik zatwierdzi formularz bez zaznaczenia któregokolwiek przycisku opcji, para nazwa-wartość dla całej grupy przycisków zostanie pominięta w danych wysyłanych do serwera.

Pole załącznika pliku

Pole tego typu umożliwia dołączenie do formularza pliku, który razem z nim wysłany zostanie do serwera. Pole załącznika pliku składa się z pola tekstowego oraz przycisku o nazwie Browse.... Nazwę pliku można wpisać w polu tekstowym lub wybrać poprzez systemowe okno wyboru pliku otwierane przyciskiem Browse. Pole załącznika znajduje się na samym dole przykładu z rysunku 22.1, znacznik użyty do jego stworzenia wygląda następująco:


===================
Uwaga
Istnieje kilka metod kodowania formularzy, z których domyślnie stosowana jest następująca:

application/x-www-form-urlencoded

Aby pomyślnie przesłać plik razem z formularzem HTML, należy użyć następującego schematu kodowania:

multipart/form-data

Wybór metody kodowania umożliwia atrybut enctype znacznika . Typy kodowania zostaną wyjaśnione dokładniej przy okazji omawiania zasad przetwarzania danych formularza.
=====================

Plik wyspecyfikowany w polu załącznika jest wysyłany w całości po zatwierdzeniu formularza. To, w jaki sposób zostanie on przetworzony, zależy od programu będącego jego odbiorcą.
Po odebraniu pliku przez serwer może on zostać obsłużony na wiele różnych sposobów. Najprostszym z nich jest po prostu zapisanie pliku na dysku i umieszczenie jego ścieżki dostępu w polu znakowym bazy danych. Innym rozwiązaniem jest zapisanie całego pliku w odpowiednio dużym polu bazy danych.
#513
Pola ukryte

Kolejnym elementem formularza tworzonym przy użyciu znacznika jest pole ukryte. Powstaje ono przez nadanie atrybutowi type wartości hidden. Pola tego typu nie można pokazać na przykładzie, ponieważ nie jest ono wyświetlane w oknie przeglądarki. Pole ukryte może zostać utworzone z pominięciem atrybutu value, ale bez niego będzie po prostu bezużyteczne (wartość pola ukrytego jest niewidoczna i nie może być modyfikowana). Pole ukryte tworzone jest następującym znacznikiem:



=====================
Ostrzażenie
Mimo, że pola ukryte nie są wyświetlane w oknie przeglądarki, użytkownik może bardzo łatwo sprawdzić ich zawartość wyświetlając kod źródłowy strony, na której pole takie występuje. Ponadto istnieje metoda pozwalająca na faktyczną zmianę wartości pól ukrytych. Wystarczy, że użytkownik zapisze lokalnie kod źródłowy strony, zmodyfikuje pola ukryte, a następnie z tak przygotowanej strony wyśle wypełniony formularz do serwera. Nie należy zatem umieszczać w polach ukrytych danych poufnych lub bazować na mylnym założeniu, iż użytkownicy nie są w stanie zmieniać wartości w polach ukrytych formularzy. Formularze HTML są z natury niezabezpieczone, a to oznacza, że nie można z góry zakładać, iż wysyłane za ich pośrednictwem dane spełniają jakiekolwiek kryteria bezpieczeństwa.
=====================

Pola ukryte stosowane są na ogół do przechowywania pewnego stanu aplikacji. Załóżmy dla przykładu, że celem strony WWW jest wstawianie nowych rekordów do tablicy składającej się z 30 kolumn. Jedno z możliwych rozwiązań takiej aplikacji polega na utworzeniu formularza zawierającego 30 pól i wymagającego sporej ilości czasu do wypełnienia. Inny sposób realizacji tego zadania polega na podzieleniu formularza na dwie części i umożliwienie użytkownikowi wypełnienie każdej z nich przed faktycznym wstawieniem rekordu do bazy danych. Tworzone są zatem dwa oddzielne formularze HTML. Po przesłaniu pierwszego formularza do serwera WWW, użytkownik otrzymuje do wypełnienia drugi z nich, składający się z pól przeznaczonych dla kolejnych danych oraz z pól ukrytych przechowujących informacje wprowadzone poprzednio. Po zatwierdzeniu drugiego formularza serwer otrzymuje w całości wszystkie dane niezbędne do wstawienia nowego rekordu i może je użyć w wyrażeniu INSEKT.

Przycisk SUBMIT

Po wypełnieniu formularza trzeba go przesłać do serwera w celu przetworzenia. Jeżeli formularz składa się z dokładnie jednego pola tekstowego, można zatwierdzić go naciśnięciem klawisza Enter w chwili, gdy w polu obecny jest kursor. Jeżeli formularz składa się z więcej niż jednego pola tekstowego (lub w ogóle nie posiada takich pól), do jego wysłania potrzebny jest specjalny przycisk.
#514
===================
Uwaga
Do wysłania formularza można posłużyć się językiem JavaScript, na ogół jednak stosowany jest przycisk SUBMIT. Formularz wyposażony w przycisk SUBMIT jest bardziej czytelny i może być również używany w przeglądarkach nie obsługujących języka JavaScript.
====================

Przycisk SUBMIT tworzony jest na formularzu znacznikiem z atrybutem type="submit". Przykładowy przycisk tego typu widoczny na rysunku 22.2, utworzony został następującym znacznikiem:



------------------------
Rysunek 22.2. Przyciski przekazania oraz resetowania formularza
Przycisk Submit
Przycisk Reset
Prześlij pytanie
nieczytelny
------------------------

Podstawowym zadaniem przycisku SUBMIT jest wysłanie zawartości formularza pod adres URL wyspecyfikowany w atrybucie action znacznika . Do zmiany etykiety przycisku służy atrybut value (w przypadku jego braku używana jest etykieta domyślna dla przeglądarki). Dla przeglądarki Internet Explorer 4.0 PL wartością domyślną etykiety przycisku SUBMIT jest "Prześlij pytanie" (rysunek 22.2). Jeżeli w znaczniku przycisku umieszczone zostaną atrybuty name i va-lue, para ta zostanie wysłana do serwera razem z innymi danymi formularza. Cecha taka jest przydatna, jeżeli tworzymy formularz z kilkoma przyciskami przekazania, generującymi inną formę wyników. Można nadać różne nazwy przyciskom, a następnie sprawdzać wartość tego pola po stronie serwera lub nazwać wszystkie przyciski tak samo i użyć innych wartości atrybutu value. Do serwera przesyłana jest jedynie para nazwa-wartość przycisku, który został klinięty.

Przycisk RESET

Przycisk reset, tworzony znacznikiem z atrybutem type="reset", powoduje przywrócenie formularza do stanu, jaki posiadał on w chwili załadowania strony. Przywracane są wszystkie wartości domyślne wynikające z istnienia atrybutów chec-ked oraz value. Przycisk reset tworzony jest następującym fragmentem kodu:


#515
Podobnie jak w przypadku przycisku submit, zmianę etykiety przycisku reset umożliwia atrybut value. Żadna informacja związana z przyciskiem reset nie jest wysyłana do serwera w chwili zatwierdzenia formularza, nawet jeśli wyspecyfikowany został jego atrybut name. Przykład przycisku reset widoczny jest na rysunku 22.2.

Rysunki jako przyciski SUBMIT

Szata graficzna niektórych stron WWW kłóci się z klasycznym wyglądem przycisku przekazania formularza. W takich przypadkach można skorzystać z typu image znacznika , aby zastąpić zwykły przycisk odpowiednio przygotowanym rysunkiem. Ten szczególny element formularza powstał ze skrzyżowania znacznika , służącego do umieszczania rysunków w dokumentach HTML, ze znacznikiem . Ikona przedstawiająca tekst "Prześlij pytanie" na rysunku 22.2 jest właśnie polem formularza typu image, które stworzone zostało następującym znacznikiem:



Pole typu image może korzystać ze wszystkich atrybutów znacznika , np.:



Większość użytych powyżej atrybutów odnosi się do rysunku. Height i width określają odpowiednio jego wysokość i szerokość, natomiast hspace i vspace wyznaczają margines wokół rysunku. Atrybut alt definiuje tekst wyświetlany w przeglądarce, gdy rysunek nie został załadowany lub strona przeglądana jest w trybie tekstowym, a bor-der tworzy ramkę wokół rysunku o wyspecyfikowanej grubości (w pikselach).
Jeżeli polu image nadana zostanie wartość atrybutu name, do serwera wysyłane są współrzędne x i y miejsca rysunku, w które użytkownik kliknął myszą.

Listy

Listy, kolejny typ często stosowanych elementów formularza, dzielą się na dwa różne rodzaje, przedstawione na rysunku 22.3. Oba rodzaje tworzone są tym samym znacznikiem