HTML5 přidává spoustu nových inputů pro
- email, telefon, URL, datum, čas, číslo, range (MDN)
- nové atributy: required, pattern, min, max, placeholder, autocomplete
Ke každému inputu přidáváme jeho <label>
i když nebude ve výsledku vidět - pro asistivní technologie a z hlediska sémantiky
- přiřadím ho k inputu buď pomocí ID inputu a
for
atributu na labelu - nebo tak, že input obalím daným labelem
Když se dá heslo do type=“password”, tak se do toho PHP souboru posílá v podstatě v plain textu (pokud neproběhne nějaká kontrola na straně klienta před odesláním), takže posílat jenom přes HTTPS
Buttony mají type submit, reset a button (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#type)
Placeholder slouží k UKÁZCE vstupu - není to náhrada za label
Radio buttons
- když jim dám stejný name, prohlížeč zajistí, že může být v jednu dobu aktivní pouze jeden
Checkboxes
- pokud chci odeslat více checkboxů najednou se stejným name, tak ho musím napsat se suffixem: colors[]
Select (výběrové pole)
- pomocí
<select>
a<option value=X>
Odeslání dat
- method=“GET”
- hodí se na vyhledávání a filtrování
- x-www-form-encoded - zakóduje pomocí ’%’ - tedy např. mezera je %20
- nesmí mít vedlejší efekty
- data se připojí k URL (pouze ASCII data a délka URL je omezená)
- method=“POST”
- data se posílají v těle požadavku
- takhle se mohou posílat i binární data
- readonly data se odešlou
- disabled data se neodešlou vůbec
Zpracování formuláře
- identifikovat successful controls
- např. disabled nemůže být successful, zaškrtnutá pole jsou successful atd.
- vytvořit “form data set” (dvojice klíč-hodnota, name=value)
- zakódovat data
- odeslat data na požadovanou URL
- v HTML5 je to mnohem složitější
Data z formuláře by se ideálně měly validovat jak na klientovi, tak i na serveru, ale na serveru určitě!
Jak se řeší vícenásobné odeslání dat
- při načtení stránky s formulářem se vytvoří token, který se uloží do Session a do skrytého pole formuláře
- hodnota toho skrytého pole se pak pošle společně se submitnutím toho formuláře a na serveru se tokeny porovnají, pokud se nerovnají, tak je požadavek neplatný
- poté se token odstraňuje ze Session, tedy druhé odeslání formuláře už bude odmítnuto
- pokud při kontrole token vůbec neexistuje, je požadavek také neplatný