# Vytvorenie bankovej aplikácie, časť 2: Vytvorenie prihlasovacieho a registračného formulára
## Kvíz pred prednáškou
[Prednáškový kvíz](https://ff-quizzes.netlify.app/web/quiz/43)
Už ste niekedy vyplnili online formulár, ktorý odmietol formát vašej e-mailovej adresy? Alebo ste stratili všetky informácie po kliknutí na tlačidlo odoslať? Všetci sme sa stretli s týmito frustrujúcimi skúsenosťami.
Formuláre sú mostom medzi vašimi používateľmi a funkciami vašej aplikácie. Rovnako ako opatrné protokoly, ktoré používajú leteckí dispečeri na bezpečné navádzanie lietadiel na ich cieľové miesta, dobre navrhnuté formuláre poskytujú jasnú spätnú väzbu a zabraňujú nákladným chybám. Zlé formuláre, na druhej strane, môžu odradiť používateľov rýchlejšie ako nedorozumenie na rušnom letisku.
V tejto lekcii premeníme vašu statickú bankovú aplikáciu na interaktívnu aplikáciu. Naučíte sa vytvárať formuláre, ktoré overujú vstupy používateľov, komunikujú so servermi a poskytujú užitočnú spätnú väzbu. Predstavte si to ako vytvorenie ovládacieho rozhrania, ktoré umožňuje používateľom navigovať funkcie vašej aplikácie.
Na konci budete mať kompletný systém prihlasovania a registrácie s validáciou, ktorý používateľov vedie k úspechu namiesto frustrácie.
## Predpoklady
Predtým, než začneme vytvárať formuláre, uistime sa, že máte všetko správne nastavené. Táto lekcia nadväzuje presne tam, kde sme skončili v predchádzajúcej, takže ak ste preskočili dopredu, možno budete chcieť vrátiť sa späť a najskôr nastaviť základy.
### Požadované nastavenie
| Komponent | Stav | Popis |
|-----------|--------|-------------|
| [HTML šablóny](../1-template-route/README.md) | ✅ Požadované | Základná štruktúra bankovej aplikácie |
| [Node.js](https://nodejs.org) | ✅ Požadované | JavaScript runtime pre server |
| [Bankový API server](../api/README.md) | ✅ Požadované | Backendová služba na ukladanie dát |
> 💡 **Tip pre vývoj**: Budete súčasne spúšťať dva samostatné servery – jeden pre vašu front-end bankovú aplikáciu a druhý pre backendový API. Toto nastavenie odráža reálny vývoj, kde front-end a back-end služby fungujú nezávisle.
### Konfigurácia servera
**Vaše vývojové prostredie bude zahŕňať:**
- **Frontend server**: Poskytuje vašu bankovú aplikáciu (zvyčajne port `3000`)
- **Backend API server**: Spracováva ukladanie a získavanie dát (port `5000`)
- **Oba servery** môžu bežať súčasne bez konfliktov
**Testovanie pripojenia k API:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**Ak vidíte odpoveď s verziou API, môžete pokračovať!**
---
## Pochopenie HTML formulárov a ovládacích prvkov
HTML formuláre sú spôsob, akým používatelia komunikujú s vašou webovou aplikáciou. Predstavte si ich ako telegrafný systém, ktorý spájal vzdialené miesta v 19. storočí – sú to komunikačné protokoly medzi úmyslom používateľa a odpoveďou aplikácie. Keď sú navrhnuté premyslene, zachytávajú chyby, usmerňujú formátovanie vstupov a poskytujú užitočné návrhy.
Moderné formuláre sú oveľa sofistikovanejšie ako základné textové vstupy. HTML5 zaviedlo špecializované typy vstupov, ktoré automaticky spracovávajú validáciu e-mailov, formátovanie čísel a výber dátumov. Tieto vylepšenia prospievajú prístupnosti aj mobilným používateľským skúsenostiam.
### Základné prvky formulára
**Stavebné bloky, ktoré potrebuje každý formulár:**
```html
```
**Čo tento kód robí:**
- **Vytvára** kontajner formulára s jedinečným identifikátorom
- **Určuje** HTTP metódu na odoslanie dát
- **Priraďuje** štítky k vstupom pre prístupnosť
- **Definuje** tlačidlo na odoslanie formulára
### Moderné typy vstupov a atribúty
| Typ vstupu | Účel | Príklad použitia |
|------------|---------|---------------|
| `text` | Všeobecný textový vstup | `` |
| `email` | Validácia e-mailu | `` |
| `password` | Skrytý textový vstup | `` |
| `number` | Číselný vstup | `` |
| `tel` | Telefónne čísla | `` |
> 💡 **Výhoda moderného HTML5**: Používanie špecifických typov vstupov poskytuje automatickú validáciu, vhodné mobilné klávesnice a lepšiu podporu prístupnosti bez dodatočného JavaScriptu!
### Typy tlačidiel a ich správanie
```html
```
**Čo robí každý typ tlačidla:**
- **Tlačidlá na odoslanie**: Spúšťajú odoslanie formulára a posielajú dáta na určený endpoint
- **Tlačidlá na resetovanie**: Obnovujú všetky polia formulára na ich počiatočný stav
- **Bežné tlačidlá**: Neposkytujú žiadne predvolené správanie, vyžadujú vlastný JavaScript na funkčnosť
> ⚠️ **Dôležitá poznámka**: Element `` je samouzatvárací a nevyžaduje uzatváraciu značku. Moderná najlepšia prax je písať `` bez lomky.
### Vytvorenie prihlasovacieho formulára
Teraz vytvoríme praktický prihlasovací formulár, ktorý demonštruje moderné HTML praktiky. Začneme základnou štruktúrou a postupne ju vylepšíme o funkcie prístupnosti a validácie.
```html
Bank App
Login
```
**Rozdelenie toho, čo sa tu deje:**
- **Štruktúruje** formulár pomocou semantických HTML5 prvkov
- **Zoskupuje** súvisiace prvky pomocou `div` kontajnerov s významnými triedami
- **Priraďuje** štítky k vstupom pomocou atribútov `for` a `id`
- **Zahŕňa** moderné atribúty ako `autocomplete` a `placeholder` pre lepší UX
- **Pridáva** `novalidate` na spracovanie validácie pomocou JavaScriptu namiesto predvolených nastavení prehliadača
### Význam správnych štítkov
**Prečo sú štítky dôležité pre 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]
```
**Čo dosahujú správne štítky:**
- **Umožňujú** čítačkám obrazovky jasne oznamovať polia formulára
- **Rozširujú** klikateľnú oblasť (kliknutie na štítok zaostrí vstup)
- **Zlepšujú** mobilnú použiteľnosť s väčšími dotykovými cieľmi
- **Podporujú** validáciu formulára s významnými chybovými správami
- **Zvyšujú** SEO tým, že poskytujú semantický význam prvkom formulára
> 🎯 **Cieľ prístupnosti**: Každý vstup formulára by mal mať priradený štítok. Táto jednoduchá prax robí vaše formuláre použiteľnými pre všetkých, vrátane používateľov so zdravotným postihnutím, a zlepšuje zážitok pre všetkých používateľov.
### Vytvorenie registračného formulára
Registračný formulár vyžaduje podrobnejšie informácie na vytvorenie kompletného používateľského účtu. Vytvorme ho s modernými funkciami HTML5 a vylepšenou prístupnosťou.
```html
Register
```
**V uvedenom kóde sme:**
- **Organizovali** každé pole v kontajnerových divoch pre lepšie štýlovanie a rozloženie
- **Pridali** vhodné atribúty `autocomplete` pre podporu automatického vyplňovania prehliadača
- **Zahrnuli** užitočný text v `placeholder` na usmernenie vstupu používateľa
- **Nastavili** rozumné predvolené hodnoty pomocou atribútu `value`
- **Použili** validačné atribúty ako `required`, `maxlength` a `min`
- **Použili** `type="number"` pre pole zostatku s podporou desatinných čísel
### Preskúmanie typov vstupov a ich správania
**Moderné typy vstupov poskytujú vylepšenú funkčnosť:**
| Funkcia | Výhoda | Príklad |
|---------|---------|----------|
| `type="number"` | Číselná klávesnica na mobilných zariadeniach | Jednoduchšie zadávanie zostatku |
| `step="0.01"` | Kontrola presnosti desatinných čísel | Umožňuje centy v mene |
| `autocomplete` | Automatické vyplňovanie prehliadača | Rýchlejšie vyplňovanie formulára |
| `placeholder` | Kontextové nápovedy | Usmerňuje očakávania používateľa |
> 🎯 **Výzva prístupnosti**: Skúste navigovať formuláre iba pomocou klávesnice! Použite `Tab` na presun medzi poliami, `Space` na zaškrtnutie políčok a `Enter` na odoslanie. Táto skúsenosť vám pomôže pochopiť, ako čítačky obrazovky interagujú s vašimi formulármi.
## Pochopenie metód odosielania formulára
Keď niekto vyplní váš formulár a klikne na odoslanie, tieto dáta musia niekam ísť – zvyčajne na server, ktorý ich uloží. Existuje niekoľko rôznych spôsobov, ako sa to môže stať, a vedieť, ktorý z nich použiť, vám môže ušetriť neskoršie problémy.
Pozrime sa, čo sa vlastne stane, keď niekto klikne na tlačidlo odoslať.
### Predvolené správanie formulára
Najprv si všimnime, čo sa stane pri základnom odoslaní formulára:
**Otestujte svoje aktuálne formuláre:**
1. Kliknite na tlačidlo *Registrovať* vo vašom formulári
2. Sledujte zmeny v adresnom riadku vášho prehliadača
3. Všimnite si, ako sa stránka obnoví a dáta sa zobrazia v URL

### Porovnanie HTTP metód
```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]
```
**Pochopenie rozdielov:**
| Metóda | Použitie | Miesto dát | Úroveň bezpečnosti | Limit veľkosti |
|--------|----------|---------------|----------------|-------------|
| `GET` | Vyhľadávacie dotazy, filtre | Parametre URL | Nízka (viditeľné) | ~2000 znakov |
| `POST` | Používateľské účty, citlivé dáta | Telo požiadavky | Vyššia (skryté) | Žiadny praktický limit |
**Pochopenie základných rozdielov:**
- **GET**: Pridáva dáta formulára do URL ako parametre dotazu (vhodné pre vyhľadávacie operácie)
- **POST**: Zahrňuje dáta do tela požiadavky (nevyhnutné pre citlivé informácie)
- **Obmedzenia GET**: Obmedzenia veľkosti, viditeľné dáta, trvalá história prehliadača
- **Výhody POST**: Veľká kapacita dát, ochrana súkromia, podpora nahrávania súborov
> 💡 **Najlepšia prax**: Používajte `GET` pre vyhľadávacie formuláre a filtre (získavanie dát), používajte `POST` pre registráciu používateľov, prihlasovanie a vytváranie dát.
### Konfigurácia odosielania formulára
Nastavme váš registračný formulár tak, aby správne komunikoval s backendovým API pomocou metódy POST:
```html
```
**Pochopenie vylepšenej validácie:**
- **Kombinuje** indikátory povinných polí s užitočnými popismi
- **Zahŕňa** atribúty `pattern` na validáciu formátu
- **Poskytuje** atribúty `title` pre prístupnosť a tooltipy
- **Pridáva** pomocný text na usmernenie vstupu používateľa
- **Používa** semantickú HTML štruktúru pre lepšiu prístupnosť
### Pokročilé pravidlá validácie
**Čo každé pravidlo validácie dosahuje:**
| Pole | Pravidlá validácie | Výhoda pre používateľa |
|------|--------------------|------------------------|
| Užívateľské meno | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Zabezpečuje platné, unikátne identifikátory |
| Mena | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Akceptuje bežné symboly mien |
| Zostatok | `min="0"`, `step="0.01"`, `type="number"` | Zabraňuje negatívnym zostatkom |
| Popis | `maxlength="100"` | Rozumné limity dĺžky |
### Testovanie správania validácie
**Vyskúšajte tieto scenáre validácie:**
1. **Odošlite** formulár s prázdnymi povinnými poliami
2. **Zadajte** užívateľské meno kratšie ako 3 znaky
3. **Skúste** špeciálne znaky v poli pre užívateľské meno
4. **Zadajte** zápornú hodnotu zostatku

**Čo budete pozorovať:**
- **Prehliadač zobrazuje** natívne správy o validácii
- **Zmeny štýlov** na základe stavov `:valid` a `:invalid`
- **Odoslanie formulára** je zablokované, kým všetky validácie neprejdú
- **Zameranie sa automaticky** presunie na prvé neplatné pole
### Validácia na strane klienta vs na strane servera
```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
```
**Prečo potrebujete obe vrstvy:**
- **Validácia na strane klienta**: Poskytuje okamžitú spätnú väzbu a zlepšuje užívateľský zážitok
- **Validácia na strane servera**: Zabezpečuje bezpečnosť a rieši komplexné obchodné pravidlá
- **Kombinovaný prístup**: Vytvára robustné, užívateľsky prívetivé a bezpečné aplikácie
- **Progresívne vylepšenie**: Funguje aj keď je JavaScript deaktivovaný
> 🛡️ **Bezpečnostná pripomienka**: Nikdy sa nespoliehajte iba na validáciu na strane klienta! Zlomyseľní používatelia môžu obísť kontroly na strane klienta, takže validácia na strane servera je nevyhnutná pre bezpečnosť a integritu dát.
---
---
## Výzva GitHub Copilot Agent 🚀
Použite režim Agent na splnenie nasledujúcej výzvy:
**Popis:** Vylepšite registračný formulár komplexnou validáciou na strane klienta a spätnou väzbou pre používateľa. Táto výzva vám pomôže precvičiť validáciu formulára, spracovanie chýb a zlepšenie užívateľského zážitku pomocou interaktívnej spätnej väzby.
**Úloha:** Vytvorte kompletný systém validácie formulára pre registračný formulár, ktorý zahŕňa: 1) Validáciu v reálnom čase pre každé pole počas písania, 2) Vlastné správy o validácii, ktoré sa zobrazujú pod každým vstupným poľom, 3) Pole na potvrdenie hesla s validáciou zhody, 4) Vizuálne indikátory (ako zelené zaškrtávacie políčka pre platné polia a červené varovania pre neplatné), 5) Tlačidlo odoslania, ktoré sa aktivuje iba vtedy, keď všetky validácie prejdú. Použite HTML5 validačné atribúty, CSS na štýlovanie validačných stavov a JavaScript na interaktívne správanie.
Viac informácií o [režime agent](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) nájdete tu.
## 🚀 Výzva
Zobrazte chybovú správu v HTML, ak užívateľ už existuje.
Tu je príklad, ako môže vyzerať konečná prihlasovacia stránka po menšej úprave štýlov:

## Kvíz po prednáške
[Kvíz po prednáške](https://ff-quizzes.netlify.app/web/quiz/44)
## Prehľad a samostatné štúdium
Vývojári sa stali veľmi kreatívnymi vo svojich snahách o vytváranie formulárov, najmä pokiaľ ide o stratégie validácie. Zistite viac o rôznych prístupoch k formulárom prehliadaním [CodePen](https://codepen.com); nájdete tam zaujímavé a inšpiratívne formuláre?
## Zadanie
[Štylizujte svoju bankovú aplikáciu](assignment.md)
---
**Zrieknutie sa zodpovednosti**:
Tento dokument bol preložený pomocou služby AI prekladu [Co-op Translator](https://github.com/Azure/co-op-translator). Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nenesieme zodpovednosť za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.