# Vytvoření bankovní aplikace, část 2: Vytvoření přihlašovacího a registračního formuláře
## Kvíz před lekcí
[Kvíz před lekcí](https://ff-quizzes.netlify.app/web/quiz/43)
Už jste někdy vyplnili online formulář, který odmítl formát vaší e-mailové adresy? Nebo jste při kliknutí na tlačítko odeslat ztratili všechna data? Tyto frustrující situace zažil snad každý.
Formuláře jsou mostem mezi uživateli a funkcionalitou vaší aplikace. Stejně jako pečlivé protokoly, které používají dispečeři letového provozu k bezpečnému navádění letadel, dobře navržené formuláře poskytují jasnou zpětnou vazbu a předcházejí nákladným chybám. Špatně navržené formuláře naopak mohou uživatele odradit rychleji než špatná komunikace na rušném letišti.
V této lekci proměníme vaši statickou bankovní aplikaci v interaktivní aplikaci. Naučíte se vytvářet formuláře, které ověřují uživatelský vstup, komunikují se servery a poskytují užitečnou zpětnou vazbu. Přemýšlejte o tom jako o vytvoření ovládacího rozhraní, které umožní uživatelům navigovat funkcemi vaší aplikace.
Na konci budete mít kompletní systém přihlášení a registrace s validací, který uživatele povede k úspěchu místo frustrace.
## Předpoklady
Než začneme vytvářet formuláře, ujistěte se, že máte vše správně nastaveno. Tato lekce navazuje přesně tam, kde jsme skončili v předchozí, takže pokud jste přeskočili, možná budete chtít se vrátit a nejprve si nastavit základní funkce.
### Požadované nastavení
| Komponenta | Stav | Popis |
|------------|------|-------|
| [HTML šablony](../1-template-route/README.md) | ✅ Požadováno | Základní struktura bankovní aplikace |
| [Node.js](https://nodejs.org) | ✅ Požadováno | JavaScript runtime pro server |
| [Bank API Server](../api/README.md) | ✅ Požadováno | Backendová služba pro ukládání dat |
> 💡 **Tip pro vývoj**: Budete současně spouštět dva samostatné servery – jeden pro front-end bankovní aplikaci a druhý pro backendové API. Toto nastavení odráží reálný vývoj, kde front-end a back-end služby fungují nezávisle.
### Konfigurace serveru
**Vaše vývojové prostředí bude zahrnovat:**
- **Frontend server**: Poskytuje vaši bankovní aplikaci (obvykle port `3000`)
- **Backend API server**: Zpracovává ukládání a načítání dat (port `5000`)
- **Oba servery** mohou běžet současně bez konfliktů
**Testování připojení k API:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**Pokud vidíte odpověď s verzí API, můžete pokračovat!**
---
## Porozumění HTML formulářům a ovládacím prvkům
HTML formuláře jsou způsobem, jak uživatelé komunikují s vaší webovou aplikací. Přemýšlejte o nich jako o telegrafním systému, který v 19. století spojoval vzdálená místa – jsou to komunikační protokoly mezi záměrem uživatele a reakcí aplikace. Když jsou navrženy promyšleně, zachytí chyby, usměrní formátování vstupu a poskytnou užitečné návrhy.
Moderní formuláře jsou mnohem sofistikovanější než základní textové vstupy. HTML5 přineslo specializované typy vstupů, které automaticky zpracovávají validaci e-mailů, formátování čísel a výběr dat. Tyto vylepšení přinášejí výhody jak v oblasti přístupnosti, tak v mobilním uživatelském prostředí.
### Základní prvky formuláře
**Stavební kameny, které každý formulář potřebuje:**
```html
```
**Co tento kód dělá:**
- **Vytváří** kontejner formuláře s jedinečným identifikátorem
- **Určuje** HTTP metodu pro odeslání dat
- **Spojuje** popisky s vstupy pro lepší přístupnost
- **Definuje** tlačítko odeslání pro zpracování formuláře
### Moderní typy vstupů a atributy
| Typ vstupu | Účel | Příklad použití |
|------------|------|-----------------|
| `text` | Obecný textový vstup | `` |
| `email` | Validace e-mailu | `` |
| `password` | Skrytý textový vstup | `` |
| `number` | Číselný vstup | `` |
| `tel` | Telefonní čísla | `` |
> 💡 **Výhoda moderního HTML5**: Použití specifických typů vstupů poskytuje automatickou validaci, vhodné mobilní klávesnice a lepší podporu přístupnosti bez nutnosti dalšího JavaScriptu!
### Typy tlačítek a jejich chování
```html
```
**Co dělá každý typ tlačítka:**
- **Tlačítka odeslání**: Spouští odeslání formuláře a posílají data na určený endpoint
- **Tlačítka resetování**: Obnovují všechna pole formuláře do jejich počátečního stavu
- **Obyčejná tlačítka**: Nemají žádné výchozí chování, vyžadují vlastní funkčnost pomocí JavaScriptu
> ⚠️ **Důležitá poznámka**: Element `` je samouzavírací a nevyžaduje koncový tag. Moderní nejlepší praxe je psát `` bez lomítka.
### Vytvoření přihlašovacího formuláře
Nyní vytvoříme praktický přihlašovací formulář, který demonstruje moderní praktiky HTML formulářů. Začneme základní strukturou a postupně ji vylepšíme o funkce pro přístupnost a validaci.
```html
Bank App
Login
```
**Rozbor toho, co se zde děje:**
- **Strukturuje** formulář pomocí sémantických HTML5 prvků
- **Skupinuje** související prvky pomocí `div` kontejnerů s významnými třídami
- **Spojuje** popisky s vstupy pomocí atributů `for` a `id`
- **Zahrnuje** moderní atributy jako `autocomplete` a `placeholder` pro lepší uživatelskou zkušenost
- **Přidává** `novalidate` pro zpracování validace pomocí JavaScriptu místo výchozích nastavení prohlížeče
### Síla správných popisků
**Proč jsou popisky důležité pro moderní webový vývoj:**
```mermaid
graph TD
A[Label Element] --> B[Screen Reader Support]
A --> C[Click Target Expansion]
A --> D[Form Validation]
A --> E[SEO Benefits]
B --> F[Accessible to all users]
C --> G[Better mobile experience]
D --> H[Clear error messaging]
E --> I[Better search ranking]
```
**Co správné popisky umožňují:**
- **Umožňují** čtečkám obrazovky jasně oznamovat pole formuláře
- **Rozšiřují** klikací oblast (kliknutí na popisek zaostří vstup)
- **Zlepšují** mobilní použitelnost díky větším dotykovým cílům
- **Podporují** validaci formuláře s významnými chybovými zprávami
- **Zvyšují** SEO díky sémantickému významu prvků formuláře
> 🎯 **Cíl přístupnosti**: Každý vstup formuláře by měl mít přidružený popisek. Tato jednoduchá praxe činí vaše formuláře použitelné pro všechny, včetně uživatelů s postižením, a zlepšuje zkušenost pro všechny uživatele.
### Vytvoření registračního formuláře
Registrační formulář vyžaduje podrobnější informace pro vytvoření kompletního uživatelského účtu. Vytvořme ho s moderními funkcemi HTML5 a vylepšenou přístupností.
```html
Register
```
**V uvedeném jsme:**
- **Organizovali** každé pole do kontejnerových divů pro lepší stylování a rozvržení
- **Přidali** vhodné atributy `autocomplete` pro podporu automatického vyplňování prohlížeče
- **Zahrnuli** užitečný text placeholderu pro vedení uživatelského vstupu
- **Nastavili** rozumné výchozí hodnoty pomocí atributu `value`
- **Použili** validační atributy jako `required`, `maxlength` a `min`
- **Použili** `type="number"` pro pole zůstatku s podporou desetinných míst
### Zkoumání typů vstupů a jejich chování
**Moderní typy vstupů poskytují rozšířenou funkčnost:**
| Funkce | Výhoda | Příklad |
|--------|--------|---------|
| `type="number"` | Číselná klávesnice na mobilu | Snadnější zadávání zůstatku |
| `step="0.01"` | Kontrola přesnosti desetinných míst | Umožňuje centy v měně |
| `autocomplete` | Automatické vyplňování prohlížeče | Rychlejší vyplňování formuláře |
| `placeholder` | Kontextové nápovědy | Usměrňuje očekávání uživatele |
> 🎯 **Výzva přístupnosti**: Zkuste navigovat formuláři pouze pomocí klávesnice! Použijte `Tab` pro přechod mezi poli, `Space` pro zaškrtnutí políček a `Enter` pro odeslání. Tato zkušenost vám pomůže pochopit, jak uživatelé čteček obrazovky interagují s vašimi formuláři.
## Porozumění metodám odesílání formulářů
Když někdo vyplní váš formulář a klikne na odeslání, tato data musí někam jít – obvykle na server, který je může uložit. Existuje několik různých způsobů, jak se to může stát, a vědět, který použít, vám může ušetřit spoustu problémů později.
Podívejme se, co se skutečně stane, když někdo klikne na tlačítko odeslání.
### Výchozí chování formuláře
Nejprve si všimněme, co se stane při základním odeslání formuláře:
**Otestujte své aktuální formuláře:**
1. Klikněte na tlačítko *Registrovat* ve vašem formuláři
2. Sledujte změny v adresním řádku vašeho prohlížeče
3. Všimněte si, jak se stránka znovu načte a data se objeví v URL

### Porovnání HTTP metod
```mermaid
graph TD
A[Form Submission] --> B{HTTP Method}
B -->|GET| C[Data in URL]
B -->|POST| D[Data in Request Body]
C --> E[Visible in address bar]
C --> F[Limited data size]
C --> G[Bookmarkable]
D --> H[Hidden from URL]
D --> I[Large data capacity]
D --> J[More secure]
```
**Porozumění rozdílům:**
| Metoda | Použití | Umístění dat | Úroveň zabezpečení | Limit velikosti |
|--------|---------|--------------|--------------------|-----------------|
| `GET` | Vyhledávací dotazy, filtry | Parametry URL | Nízká (viditelná) | ~2000 znaků |
| `POST` | Uživatelské účty, citlivá data | Tělo požadavku | Vyšší (skrytá) | Žádný praktický limit |
**Porozumění základním rozdílům:**
- **GET**: Připojuje data formuláře k URL jako parametry dotazu (vhodné pro vyhledávací operace)
- **POST**: Zahrnuje data do těla požadavku (nezbytné pro citlivé informace)
- **Omezení GET**: Omezení velikosti, viditelná data, trvalá historie prohlížeče
- **Výhody POST**: Velká kapacita dat, ochrana soukromí, podpora nahrávání souborů
> 💡 **Nejlepší praxe**: Používejte `GET` pro vyhledávací formuláře a filtry (získávání dat), používejte `POST` pro registraci uživatelů, přihlášení a vytváření dat.
### Konfigurace odesílání formuláře
Nakonfigurujme váš registrační formulář tak, aby správně komunikoval s backendovým API pomocí metody POST:
```html
```
**Porozumění vylepšené validaci:**
- **Kombinuje** indikátory povinných polí s užitečnými popisy
- **Zahrnuje** atributy `pattern` pro validaci formátu
- **Poskytuje** atributy `title` pro přístupnost a nápovědu
- **Přidává** pomocný text pro vedení uživatelského vstupu
- **Používá** semantickou strukturu HTML pro lepší přístupnost
### Pokročilá pravidla validace
**Co každé pravidlo validace dosahuje:**
| Pole | Pravidla validace | Výhoda pro uživatele |
|------|-------------------|----------------------|
| Uživatelské jméno | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Zajišťuje platné, jedinečné identifikátory |
| Měna | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Přijímá běžné symboly měn |
| Zůstatek | `min="0"`, `step="0.01"`, `type="number"` | Zabraňuje záporným zůstatkům |
| Popis | `maxlength="100"` | Rozumné limity délky |
### Testování chování validace
**Vyzkoušejte tyto scénáře validace:**
1. **Odešlete** formulář s prázdnými povinnými poli
2. **Zadejte** uživatelské jméno kratší než 3 znaky
3. **Zkuste** speciální znaky v poli pro uživatelské jméno
4. **Zadejte** zápornou částku zůstatku

**Co budete pozorovat:**
- **Prohlížeč zobrazí** nativní zprávy o validaci
- **Změny stylování** na základě stavů `:valid` a `:invalid`
- **Odeslání formuláře** je zabráněno, dokud všechny validace neprojdou
- **Zaměření se automaticky** přesune na první neplatné pole
### Validace na straně klienta vs na straně serveru
```mermaid
graph LR
A[Client-Side Validation] --> B[Instant Feedback]
A --> C[Better UX]
A --> D[Reduced Server Load]
E[Server-Side Validation] --> F[Security]
E --> G[Data Integrity]
E --> H[Business Rules]
A -.-> I[Both Required]
E -.-> I
```
**Proč potřebujete obě vrstvy:**
- **Validace na straně klienta**: Poskytuje okamžitou zpětnou vazbu a zlepšuje uživatelský zážitek
- **Validace na straně serveru**: Zajišťuje bezpečnost a zpracovává složitá obchodní pravidla
- **Kombinovaný přístup**: Vytváří robustní, uživatelsky přívětivé a bezpečné aplikace
- **Progresivní vylepšení**: Funguje i v případě, že je JavaScript deaktivován
> 🛡️ **Bezpečnostní připomínka**: Nikdy se nespoléhejte pouze na validaci na straně klienta! Zlomyslní uživatelé mohou obejít kontroly na straně klienta, takže validace na straně serveru je nezbytná pro bezpečnost a integritu dat.
---
---
## Výzva GitHub Copilot Agent 🚀
Použijte režim Agent k dokončení následující výzvy:
**Popis:** Vylepšete registrační formulář komplexní validací na straně klienta a zpětnou vazbou pro uživatele. Tato výzva vám pomůže procvičit validaci formulářů, zpracování chyb a zlepšení uživatelského zážitku pomocí interaktivní zpětné vazby.
**Zadání:** Vytvořte kompletní systém validace formuláře pro registrační formulář, který zahrnuje: 1) Zpětnou vazbu v reálném čase pro každé pole během psaní, 2) Vlastní zprávy o validaci, které se objeví pod každým vstupním polem, 3) Pole pro potvrzení hesla s validací shody, 4) Vizuální indikátory (jako zelené zaškrtnutí pro platná pole a červená varování pro neplatná), 5) Tlačítko odeslání, které se aktivuje pouze tehdy, když všechny validace projdou. Použijte atributy validace HTML5, CSS pro stylování stavů validace a JavaScript pro interaktivní chování.
Zjistěte více o [režimu agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) zde.
## 🚀 Výzva
Zobrazte chybovou zprávu v HTML, pokud uživatel již existuje.
Zde je příklad, jak může vypadat konečná přihlašovací stránka po troše stylování:

## Kvíz po přednášce
[Kvíz po přednášce](https://ff-quizzes.netlify.app/web/quiz/44)
## Přehled & Samostudium
Vývojáři byli velmi kreativní při vytváření formulářů, zejména pokud jde o strategie validace. Zjistěte více o různých formátových tocích prohlížením [CodePen](https://codepen.com); najdete nějaké zajímavé a inspirativní formuláře?
## Úkol
[Stylujte svou bankovní aplikaci](assignment.md)
---
**Prohlášení**:
Tento dokument byl přeložen pomocí služby AI pro překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu.