Formularze na stronach internetowych

Formularze na stronach internetowych są tak bardzo wszechobecne, że czasem nawet nie jesteśmy świadomi ich obecność. Tak dla przykładu zobaczmy gdzie możemy spotkać formularze i ich elementy:

  • formularz kontaktowy (najbardziej oczywiste)
  • logowanie do strony i aplikacji 
  • rejestracja użytkowników
  • składanie i finalizowanie zamówień w sklepach internetowych
  • wyszukiwarki internetowe
  • sortowanie i filtrowanie informacji podanej na stronie
  • dodawanie komentarzy
  • często przy interakcji z bazą danych gdy: dodajemy, kasujemy, edytujemy dane
  • wykonując transakcje finansowe online itp

Formularze występują na stronach statycznych jak i dynamicznych. Są powszechne, warto się zastanowić jak działają. 

Poniżej przykład formularza, widok po stronie front endu i back endu:

Front end
Back end

Przejdź trochę głębiej do budowy i zasady działania formularz.

Atrybuty formularza

Atrybuty formularza podajemy w postaci jak poniżej:

<form action="#" method="GET"> …..  </form>

Poniżej lista z krótkim opisem wybranych atrybutów: 

  • accept-charset — określa sposób kodowania znaków przy użyciu formularza
  • action— adres URL gdzie jest kierowany użytkownik po wysyłce formularza
  • autocomplete — domyślne ustawienie auto uzupełniania dla formularza
  • enctype — typ kodowania używany przy wysyłce formularza
  • method — metoda wysyłania formularza
  • name— nazwa formularza używana w document.forms API
  • validate — określa czy formularz ma być walidowany
  • target — określa cel / przesłania formularza
  • rel — służy do określania relacji pomiędzy dokumentem, w którym znajduje się link 

Metody wysyłki formularza 

W atrybucie method możemy określić jakiej metody wysyłki formularza chcemy użyć. Do dyspozycji mamy nastepujące dwie metody:

Metoda GET

<form action="#" method="GET"> …..  </form>

Metody GET używa się kiedy parametrów jest niewiele. Parametry przekazuje się za pomocą adresu URL, którego długość jest ograniczona. np. http://www.naszadomena.pl/strona.php?parametr1=wartość1&parametr2=wartość2

Należy też pamiętać że parametry są widoczne w pasku adresu przeglądarki, więc tej metody nie należy używać jeśli przekazywane są np. hasła. Metodę GET można wykorzystać także przy przekazywaniu parametrów przez odnośnik

Metoda POST

<form action="#" method="POST"> …..  </form>

Metoda POST do przekazywania parametrów wykorzystuje nagłówek. Metoda ta umożliwia przekazywanie dużo więcej parametrów niż metoda GET. Parametry te nie są widoczne w pasku adresu przeglądarki.

Zależnie od metody, zmienne trafiają do odpowiednich tablic asocjacyjnych: $_GET i $_POST. Są to tablice superglobalne, co oznacza, że są widoczne w każdym miejscu kodu PHP.

Pola formularza

Każdy formularz zawiera w sobie pola, które dają możliwość wprowadzenie danych przez użytkownika. Do dyspozycji mamy np:

<input fields type=" ">

Róże typy pola:

  • text — krótki tekst
  • checkbox, radio — pojedyncze lub wielokrotne pole wyboru
  • file — plik
  • email — email
  • url — url
  • number — numer
  • date — data
  • time — czas
  • hidden — ukryte pole może być wykorzystane do przekazania parametrów
  • submit — wyślij
  • reset — kasuj
  • images — graficzny przycisk wyślij
  • datetime, datetime-local — data i czas, data i czas lokalny
  • week, month — tydzień, miesiąc, tel — Telefon, search — wyszukiwarka
  • password — hasło, color — kolor
  • range min=”1” max=”5” — podane liczby z zakresu min / max
  • list – służy do identyfikacji listy predefiniowanych opcji dla elementu w celu zasugerowania użytkownikowi. 

Wartości atrybutów: list: służy do określenia identyfikatora datalist, który zostanie użyty do utworzenia połączenia z elementem wejściowym. Lista jest określona polem datalist

Poniżej przykład jak możemy zrobić opcje wyboru lub podpowiedzi.

<input type="text" list="town">
<datalist id="town">    
  <option value="New York">    
  <option value="Warsaw">    
  <option value="Barcelona">
</datalist> 

Poza polem input mamy do dyspozycji:

  • <textarea> — pole do wprowadzania długiego tekstu,
  • <select>, <select multiple> — pole jednokrotnego / wielokrotnego wyboru.
  • <button type=”button / submit / reset” >

Atrybuty pól formularz

Dla poszczególnych z pół formularza można podać atrybutu, które doprecyzowują konfigurację każdego pola.

Lista wybranych atrybutów:

  • placeholder — tymczasowy tekst dla pól. Placeholder działa tylko dla następujących typów pól: text, search, tel, url, email. Dla pozostałych typów pól jest ignorowana.  
  • autocomplete=”on / off” — włącza / wyłącza auto uzupełnianie dla pól. Atrybut ten jest ignorowany dla pól typu: password, checkbox, radio, file or button.
  • autofocus — ustawia dane pole jako aktywne po załadowaniu strony.
  • checked – sprawdza czy pole jest zaznaczone. Działa tylko dla pól typu: radio, checkbox.
  • mode  – wskazówka dla przeglądarki jaki rodzaj klawiatury ma być wyświetlany. Działa tylko dla pól typu: text, password, email, or url.
  • minlenght / maxlenght – określa min / max wartość jaką użytkownik może wprowadzić. Działa tylko dla pól typu: text, email, search, password, tel, url.
  • multiple – daj możliwość ustwienia więcej niż jednej wartości. Działa tylko dla pól typu: file, email.
  • tabindex – określa pozycję elementu w kolejności nawigacji na kartach dla bieżącego dokumentu.
  • name – nazwa pola, która  identyfikuje dane pole podczas wysyłki formularza.
  • pattern – wyrażenie regularne wykorzystywane do sprawdzania poprawności wypełnienia danych pola. Działa tylko dla pól typu: text, search, tel, url, email.
  • readonly – ten atrybut określa czy użytkownik może zmodyfikować wartość danego pola. Nie działa dla pól typu:: hidden, range, color, checkbox, radio, file.
  • required – atrybut ten określa czy wymagane jest wypełnienie danego pola. Jest ignorowanych dla pól typu: hidden, images.
  • height / width / src – Działa tylko dla pola typu: image.
  • value – definiuje początkowa wartość  Jest ignorowanych dla pól typu: radio and checkbox.
  • datalist atrybut jest ignorowany dla pól typu: hidden, checkbox, radio, file or button.

Aby dostosować wygląd i funkcjonalność formularza możemy grupować jego pola używając elementu fieldset.

<fieldset>
<legend>Title</legend>
            <input type="radio" name="radio" id="radio">
            <label for="radio">Click me</label>
            <input type="radio" name="radio1" id="radio1">
            <label for="radio1">Click</label>
            <input type="radio" name="radio2" id="radio2">
            <label for="radio2">Click</label>
</fieldset>

Więcej informacji znajdziesz pod adresem: https://developer.mozilla.org/pl/

Przesyłanie plików przez formularz

Dodatkową funkcją formularzy jest możliwość przesyłania plików. W tym przypadku warto zwrócić uwagę na następujące rzeczy:

1. Gdy chcemy aby nasz formularz dawał możliwość przesyłania pliku atrybut enctype powinien być ustawiona jak poniżej.

<form action="…" method="POST" enctype="multipart/form-data"> </form>

Wartość domyślna jest: enctype=”application/x-www-form-urlencoded”

2. Do przesyłania pliku lub plików wykorzystujemy pole input z odpowiednion ustawionym typem:

<input type=”file”> wybieranie jednego pliku z dysku lub <input type=”file” multiple> wybieranie plików z dysku,

Możemy korzystać z takich atrybutów jak: name, lastModified, lastModifiedDate, size, accept.

  • accept=”image/png” or accept=”.png” — Accepts PNG files.
  • accept=”image/png, image/jpeg” or accept=”.png, .jpg, .jpeg” — Accept PNG or JPEG files.
  • accept=”image/*” — Accept any file with an image/* MIME type. (Many mobile devices also let the user take a picture with the camera when this is used.)
  • accept=”.doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document” — accept anything that smells like an MS Word document.

3. Przy przesyłaniu plików używamy tablicy $_FILES, która jest superglobalna

Tablica $_FILES zawiera dane pliku wysłanego przez formularz. Co zawiera tablica i jak odczytać z niej dane:

$_FILES['ourfile']['name'] // Oryginalna nazwa wysyłanego pliku. 
$_FILES['ourfile']['type'] // Typ MIME wysyłanego pliku (JPEG, GIF, ...).
$_FILES['ourfile']['size'] // Rozmiar wysyłanego pliku (w bajtach)
$_FILES['ourfile']['tmp_name'] // Tymczasowa nazwa pliku, który został wysłany na serwer. 
$_FILES['ourfile']['error'] // Numer błędu (0 oznacza prawidłowe wysłanie).

4. Bezpieczeństwo formularzy internetowych.

Przesyłanie plików na serwer może być niebezpieczne, dlatego należy odpowiednio się zabezpieczyć. Należy bezwzględnie, za każdym razem sprawdzać poprawność wprowadzonych danych po stronie serwera i odpowiednio to obsłużyć. Przykład sprawdzenia dla pola input

Sprawdzenia pola input - przykład

Walidacja i sanityzacja

Czyli sprawdzenie poprawności wprowadzanych danych do formularza. Jest to istotne zagadnienie o którym należy pamietać.

HTML daje takie możliwości poprzez atrybuty pól formularza np.

<input type="email" required> <!—- możemy wymóc na użytkowniku wypełnienie pola, -—>

<input type="email" pattern="^\d{2}-\d{3}$"> <!—- określamy wzorzec definiując, który określamy jako wyrażenie regularne. np. Kod pocztowy, -—>

Można to także robić przy użyciu javascript, sprawdzając poszczególne pola według zadanych w projekcie warunków.

Tu jest małe ale! Jest to sprawdzenie po stronie przeglądarki. To znaczy że użytkownik z poziomu kodu przeglądarki może zmienić lub wyłączyć sposób walidacji który użyliśmy. 

Dlatego należy bezwzględnie pamiętać aby pola formularza były sprawdzane po stronie serwera np. przy użyciu php i dostępnych w nim metod.

Przykład:

filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed

Wiecej o tym możesz przeczytać tu:

Sprawdzanie wprowadzonych danych to nie tylko walidacja ale także sanityzacja danych, czy ich oczyszczenie z niechcianych elementów / znaczników, które mogą uszkodzić naszą stronę, bazę danych lub spowodować inne nie przewidziane  konsekwencje. Oczywiście wszystko zależy od tego co robimy. Jeśli jesteśmy świadomi to w niektórych przypadkach sama walidacja może wystarczyć a czasami nie. 

Do sanityzacji danych z pomocą przychodzą np. filtry php. Pod linkiem poniżej więcej informacji na ten temat. 

https://www.php.net/manual/en/filter.filters.sanitize.php

Zabezpieczenie formularzy

Warto też powiedzieć o zabezpieczeniu formularza np. przed spamem, botami. Tu mamy różne metody. Przytoczę kilka re Capatha, prhpcaptcha, mathcaptcha, honey pot:

Wysyłka formularza

Samą wysyłkę formularza realizujemy po stronie serwera (back endu), tak dla przykładu używając języka php mamy do dyspozycji np:

Formularze w WordPress

Stosując powyżej przedstawione zasady na stronach z wordpress formularze możemy realizować poprzez: pluginy, cześć motywu (template part – szablony), shortcode, bloki dla Gutenberga. Jak widać mamy kilka możliwości do wyboru.

Podsumowanie

Aby uzyskać formularz na front-end należy go zakodować używając HTML w którym tworzymy strukturę formularza, CSS aby zmodyfikować wygląd oraz javascript, który daje nam dodatkowe możliwości. Natomiast sanityzację i walidację oraz mechanizm wysyłki formularza powinien być realizowany po stronie serwera (back-end) np przy użyciu języka programowania np. php, python. Tak w dużym uproszczeniu.

Dobre praktyki

Tworząc formularze na stronach internetowych trzeba pamiętać o:

  • prawidłowym kodzie HTML
  • walidacji i sanityzacji danych po stronie przeglądarki i serwera. 
  • prawidłowym kodzie obsługującym wysyłkę / dalsze przekazanie danych z formularza
  • zabezpieczeniu formularzy

Mam nadzieję że powyższy artykuł będzie pomocny dla osób zaczynających przygodę z kodowaniem formularzy. Jednakże należy pamiętać że jest to jedynie wstęp do tematu formularzy. Jeśli ten artykuł cię zainteresował i potrzebujesz więcej informacji zachęcam do zgłębiania tematu, dalszego szukania wiedzy oraz eksperymentowania z kodem.

Najnowsze artykuły

WordUp Trójmiasto #18 - WordPress 20th Anniversary Meetup

WordUp Trójmiasto #18

W dniu 22.4.2023 W Gdyni odbył się WordUp Trójmiasto #18 (WordPress 20th Anniversary Meetup) Kolejne spotkanie twórców, użytkowników i pasjonatów […]


Zobacz więcej
css-mediaqueries-variable

Zmienne css / sass / scss w deklaracjach media query.

Przy pisaniu kodu css mamy możliwość używania zmiennych. Korzystanie z nich jest wygodne: daje mniejszą liczbą powtórzeń, większą elastycznością i […]


Zobacz więcej
Woocommerce-aktualizacja_liczby_produktow_w_koszyku_przy_uzyciu_AJAX

WooCommerce – aktualizacja liczby produktów w koszyku przy użyciu AJAX

W tym artykule pokaże w jaki sposób tworząc motyw dla WordPress z WooCommerce możemy dodać funkcjonalność pokazywania ilości produktów w […]


Zobacz więcej
migracja_uslug

Migracja usług: strony www, poczta mail, domeny internetowe

W rozmowach z klientami często wraca temat: domen internetowych, certyfikatów ssl, serwerów oraz poczty mail dla potrzeb ich działalności.  Podnoszone […]


Zobacz więcej
Back to top button