Tag <form> to jeden z najpotężniejszych i najczęściej używanych elementów HTML. Jest on fundamentem interaktywnych aplikacji webowych, umożliwiając zbieranie danych od użytkowników i ich przesyłanie na serwer.
Bez formularzy nie byłoby rejestracji, logowania, wyszukiwania ani kontaktu — nowoczesny internet stałby się znacznie mniej funkcjonalny.
Co to jest tag <form>?
Element <form> to kontener dla interaktywnych elementów sterujących służących do przesyłania informacji. Każdy formularz zawiera pola, w które użytkownik może wpisywać dane, wybierać opcje lub klikać przyciski. Wszystkie te elementy muszą być zagnieżdżone wewnątrz znacznika <form>, aby stanowiły spójną całość funkcjonalną.
Struktura podstawowa
Najprościej strukturę formularza można przedstawić następująco:
<form action="/url-do-przetwarzania" method="post">
<!-- elementy formularza tutaj -->
</form>
Znacznik <form> jest elementem blokowym — zajmuje całą dostępną szerokość i automatycznie przerywa linię. Znacznik zamykający jest obowiązkowy.
Kluczowe atrybuty tagu <form>
action
Atrybut action określa adres URL, na który mają zostać wysłane dane formularza. Bez niego formularz nie będzie miał dokąd wysłać informacje. Oto prosty przykład konfiguracji adresu docelowego:
<form action="/procesor_formularza.php" method="post">
<!-- zawartość -->
</form>
method
Atrybut method definiuje metodę HTTP używaną do przesyłania danych. Dwie główne opcje to GET i POST. Przykład użycia metody GET:
<form action="procesor_formularza.php" method="get">
<label>Google: <input type="search" name="q"></label>
<input type="submit" value="Szukaj...">
</form>
Dla większej przejrzystości poniżej porównanie metod w praktyce:
| Metoda | Lokalizacja danych | Typowe zastosowanie | Pamięć podręczna/zakładki | Ograniczenia rozmiaru |
|---|---|---|---|---|
| GET | w URL (widoczne parametry) | wyszukiwanie, filtrowanie, linki do wyników | można buforować i dodawać do zakładek | tak (ograniczenie długości URL) |
| POST | w ciele żądania (niewidoczne w URL) | logowanie, rejestracja, przesyłanie formularzy z danymi wrażliwymi | nie nadaje się do zakładek | praktycznie brak ograniczeń po stronie URL |
enctype
Atrybut enctype określa sposób kodowania danych przed wysłaniem. Najczęstsze wartości to:
application/x-www-form-urlencoded– wartość domyślna,multipart/form-data– do przesyłania plików,text/plain– zwykły tekst (rzadko używany).
Przykład użycia atrybutu enctype z wysyłką jako zwykły tekst:
<form action="mailto:[email protected]" method="post" enctype="text/plain">
<!-- zawartość -->
</form>
Typy pól formularza
Pola tekstowe
Pole jednoliniowe (text) — najbardziej uniwersalne. Przykład prostego pola:
<label for="imie">Imię:</label>
<input type="text" id="imie" name="imie">
To samo pole z dodatkowymi atrybutami kontrolującymi rozmiar:
<input type="text" id="imie" name="imie" size="30" maxlength="20" placeholder="Podaj swoje imię" />
Najczęściej stosowane atrybuty dla pól tekstowych to:
size– szerokość wyświetlanego pola,maxlength– maksymalna liczba znaków, które można wpisać,placeholder– tekst podpowiedzi wyświetlany w polu.
Pole hasła (password) — maskuje wpisywane znaki. Przykład:
<label for="haslo">Hasło:</label>
<input type="password" id="haslo" name="haslo">
Pole email (email) — waliduje format adresu email:
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
Pole numeryczne (number) — do wprowadzania liczb z ograniczeniami zakresu:
<label for="wiek">Wiek:</label>
<input type="number" id="wiek" name="wiek" min="0" max="120">
Pole telefonu (tel) — do wpisywania numeru telefonu:
<label for="telefon">Telefon:</label>
<input type="tel" id="telefon" name="telefon">
Obszar tekstowy (textarea)
Do wprowadzania dłuższych tekstów na wiele wierszy użyj <textarea>. Przykład:
<label>Wiadomość:</label>
<textarea name="wiadomosc" rows="4" cols="50"></textarea>
Atrybut rows definiuje liczbę widocznych wierszy, a cols — szerokość w znakach.
Pola wyboru
Radio buttons — do wyboru jednej opcji z grupy. Przykład:
<p>Podaj swoją płeć:</p>
<label>
<input type="radio" name="plec" value="Kobieta"> Kobieta
</label>
<label>
<input type="radio" name="plec" value="Mężczyzna"> Mężczyzna
</label>
Wszystkie przyciski typu radio w jednej grupie muszą mieć tę samą wartość atrybutu name.
Checkboxy — do wyboru wielu opcji. Przykład:
<p>Jaką lubisz muzykę?</p>
<label>
<input type="checkbox" name="muzyka" value="Rock"> Rock
</label>
<label>
<input type="checkbox" name="muzyka" value="Pop"> Pop
</label>
<label>
<input type="checkbox" name="muzyka" value="Techno"> Techno
</label>
Listy rozwijane (select)
Lista podstawowa z jedną opcją domyślną wygląda tak:
<label for="przegladarka">Jakiej przeglądarki używasz?</label>
<select name="przegladarka" id="przegladarka">
<option selected>Chrome</option>
<option>Firefox</option>
<option>Opera</option>
<option>Edge</option>
</select>
Lista rozszerzona umożliwia wybór wielu opcji:
<label for="systemy">Jakie znasz systemy operacyjne?</label>
<select name="systemy" id="systemy" multiple size="3">
<option selected>Windows</option>
<option>Linux</option>
<option>macOS</option>
</select>
Atrybut multiple pozwala wybrać kilka opcji (np. z klawiszem Ctrl), a size określa liczbę widocznych pozycji listy. Jeśli <option> nie ma atrybutu value, za wartość przyjmowany jest jej tekst wewnętrzny.
Etykiety (<label>)
Tag <label> jest kluczowy dla dostępności i użyteczności formularza. Łączy się z polem formularza na dwa sposoby.
Sposób 1 — zagnieżdżenie pola wewnątrz etykiety:
<label>Imię <input type="text" name="imie"></label>
Sposób 2 — połączenie przez atrybut for i id:
<label for="email">Email:</label>
<input type="email" id="email" name="email">
Drugi sposób jest bardziej semantyczny i zalecany — atrybut for w etykiecie musi odpowiadać atrybutowi id pola formularza.
Grupowanie elementów formularza
<fieldset> i <legend>
Dla bardziej skomplikowanych formularzy warto grupować elementy semantycznie. Oto przykład grupy pól z podpisem:
<fieldset>
<legend>Twoje ulubione gatunki muzyki</legend>
<label>
<input type="checkbox" name="gatunek" value="rock"> Rock
</label>
<label>
<input type="checkbox" name="gatunek" value="jazz"> Jazz
</label>
<label>
<input type="checkbox" name="gatunek" value="klasyka"> Muzyka poważna
</label>
</fieldset>
<fieldset> grupuje powiązane elementy i dodaje ramkę, a <legend> stanowi opis tej grupy.
Elementy <fieldset> można zagnieżdżać w sobie, aby tworzyć czytelną hierarchię sekcji:
<fieldset>
<legend>Twoje ulubione:</legend>
<fieldset>
<legend>Który uczeń jest twoim faworytem?</legend>
<!-- opcje radio buttons -->
</fieldset>
</fieldset>
Walidacja formularza
Atrybut required
Atrybut required wymusza wypełnienie pola przed wysłaniem formularza. Przykład prostego formularza z wymaganymi polami:
<form action="/submit-form" method="post">
<label for="imie">Imię:</label>
<input type="text" id="imie" name="imie" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<input type="submit" value="Wyślij">
</form>
Atrybut pattern
pattern pozwala zdefiniować wyrażenie regularne dla weryfikacji formatu danych. Oto przykłady walidacji dla nazwy użytkownika i numeru telefonu:
<form action="/submit-form" method="post">
<label for="uzytkownik">Nazwa użytkownika (tylko litery i cyfry):</label>
<input type="text" id="uzytkownik" name="uzytkownik" pattern="[A-Za-z0-9]+" required>
<label for="telefon">Numer telefonu (xxx-xxx-xxxx):</label>
<input type="tel" id="telefon" name="telefon" pattern="\d{3}-\d{3}-\d{4}" required>
<input type="submit" value="Wyślij">
</form>
Przyciski formularza
Submit (type="submit")
Przycisk typu submit wysyła formularz na serwer:
<input type="submit" value="Wyślij formularz">
Reset (type="reset")
Przycisk reset czyści wszystkie pola formularza i przywraca wartości domyślne:
<input type="reset" value="Wyczyść dane">
Przykład kompletnego formularza
Oto praktyczny przykład łączący wiele elementów w jedną, czytelną strukturę:
<form action="mailto:[email protected]" method="post" enctype="text/plain">
<fieldset>
<legend>Dane Osobowe</legend>
<label for="imie">Imię:</label>
<input type="text" id="imie" name="imie" required>
<label for="nazwisko">Nazwisko:</label>
<input type="text" id="nazwisko" name="nazwisko" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
</fieldset>
<fieldset>
<legend>Dodatkowe Informacje</legend>
<p>Ile masz lat?</p>
<label><input type="radio" name="wiek" value="18-25"> 18-25 lat</label>
<label><input type="radio" name="wiek" value="26-35"> 26-35 lat</label>
<label><input type="radio" name="wiek" value="36+"> 36+ lat</label>
<label for="przegladarka">Preferowana przeglądarka:</label>
<select name="przegladarka" id="przegladarka">
<option selected>Chrome</option>
<option>Firefox</option>
<option>Safari</option>
</select>
</fieldset>
<fieldset>
<legend>Wiadomość</legend>
<label for="komentarz">Twój komentarz:</label>
<textarea id="komentarz" name="komentarz" rows="5" cols="50" placeholder="Wpisz swoją wiadomość..."></textarea>
</fieldset>
<input type="submit" value="Wyślij formularz">
<input type="reset" value="Wyczyść dane">
</form>
Najczęstsze przypadki użycia
Formularze HTML stosuje się w następujących sytuacjach:
- logowaniu i rejestracji użytkowników,
- wyszukiwaniu informacji na stronie,
- wysyłaniu wiadomości (formularze kontaktowe),
- ankietach i zbieraniu opinii,
- edycji profilu użytkownika,
- procesach zakupowych.