# Zbuduj aplikację bankową część 2: Zbuduj formularz logowania i rejestracji
```mermaid
journey
title Twoja podróż w tworzeniu formularzy
section Podstawy HTML
Zrozum elementy formularza: 3: Student
Naucz się typów input: 4: Student
Opanuj dostępność: 4: Student
section Integracja JavaScript
Obsłuż przesyłanie formularza: 4: Student
Wdrażaj komunikację AJAX: 5: Student
Przetwarzaj odpowiedzi serwera: 5: Student
section Systemy walidacji
Twórz wielowarstwową walidację: 5: Student
Ulepsz doświadczenie użytkownika: 5: Student
Zapewnij integralność danych: 5: Student
```
## Quiz przed wykładem
[Quiz przed wykładem](https://ff-quizzes.netlify.app/web/quiz/43)
Czy kiedykolwiek wypełniłeś formularz online i formularz odrzucił format Twojego emaila? Albo straciłeś wszystkie informacje po kliknięciu przycisku wyślij? Wszyscy doświadczyliśmy takich frustrujących sytuacji.
Formularze są mostem między Twoimi użytkownikami a funkcjonalnością Twojej aplikacji. Podobnie jak staranne protokoły, których używają kontrolerzy ruchu lotniczego, by bezpiecznie skierować samoloty do celu, dobrze zaprojektowane formularze zapewniają jasną informację zwrotną i zapobiegają kosztownym błędom. Złe formularze potrafią zniechęcić użytkowników szybciej niż nieporozumienie na ruchliwym lotnisku.
W tej lekcji zmienimy Twoją statyczną aplikację bankową w interaktywną aplikację. Nauczysz się tworzyć formularze, które walidują dane użytkownika, komunikują się z serwerem i dostarczają przydatną informację zwrotną. Pomyśl o tym jak o budowie interfejsu kontrolnego, który umożliwia użytkownikom poruszanie się po funkcjach Twojej aplikacji.
Na końcu będziesz mieć kompletny system logowania i rejestracji z walidacją, która prowadzi użytkowników do sukcesu, a nie frustracji.
```mermaid
mindmap
root((Rozwój Formularzy))
HTML Foundation
Elementy Semantyczne
Typy Wprowadzania
Dostępność
Powiązanie Etykiet
User Experience
Informacja Zwrotna Walidacji
Zapobieganie Błędów
Stany Ładowania
Komunikaty Sukcesu
JavaScript Integration
Obsługa Zdarzeń
Komunikacja AJAX
Przetwarzanie Danych
Zarządzanie Błędami
Validation Layers
Walidacja HTML5
Logika Po Stronie Klienta
Bezpieczeństwo Po Stronie Serwera
Progresywne Ulepszanie
Modern Patterns
Fetch API
Async/Await
Form Data API
Obsługa Obietnic
```
## Wymagania wstępne
Zanim zaczniemy budować formularze, upewnijmy się, że wszystko masz poprawnie skonfigurowane. Ta lekcja zaczyna się dokładnie tam, gdzie skończyliśmy poprzednio, więc jeśli przeskoczyłeś dalej, warto wrócić i najpierw uruchomić podstawy.
### Wymagane środowisko
| Komponent | Status | Opis |
|-----------|--------|-------------|
| [Szablony HTML](../1-template-route/README.md) | ✅ Wymagane | Podstawowa struktura aplikacji bankowej |
| [Node.js](https://nodejs.org) | ✅ Wymagane | Środowisko uruchomieniowe JavaScript dla serwera |
| [Serwer API banku](../api/README.md) | ✅ Wymagane | Backend do przechowywania danych |
> 💡 **Wskazówka dla deweloperów**: Będziesz uruchamiać dwa oddzielne serwery jednocześnie – jeden dla frontendu aplikacji bankowej i drugi dla backendowego API. To odzwierciedla realny rozwój, gdzie usługi frontendowe i backendowe działają niezależnie.
### Konfiguracja serwerów
**Twoje środowisko developerskie będzie zawierać:**
- **Serwer frontendowy**: Obsługuje aplikację bankową (zwykle na porcie `3000`)
- **Serwer backend API**: Obsługuje przechowywanie i pobieranie danych (port `5000`)
- **Oba serwery** mogą działać jednocześnie bez konfliktów
**Testowanie połączenia z API:**
```bash
curl http://localhost:5000/api
# Oczekiwana odpowiedź: "Bank API v1.0.0"
```
**Jeśli widzisz odpowiedź z wersją API, możesz przejść dalej!**
---
## Zrozumienie formularzy i elementów HTML
Formularze HTML to sposób, w jaki użytkownicy komunikują się z Twoją aplikacją webową. Pomyśl o nich jak o systemie telegraficznym łączącym odległe miejsca w XIX wieku – są protokołem komunikacji między zamierzeniem użytkownika a odpowiedzią aplikacji. Kiedy są starannie zaprojektowane, wychwytują błędy, kierują formatowaniem danych i dostarczają pomocnych wskazówek.
Nowoczesne formularze są znacznie bardziej zaawansowane niż podstawowe pola tekstowe. HTML5 wprowadził specjalne typy inputów, które automatycznie obsługują weryfikację emaili, formatowanie liczb i wybór daty. Te ulepszenia korzystnie wpływają na dostępność i doświadczenie użytkowników na urządzeniach mobilnych.
### Podstawowe elementy formularza
**Budulce, które każdy formularz powinien zawierać:**
```html
```
**Co robi ten kod:**
- **Tworzy** kontener formularza z unikalnym identyfikatorem
- **Określa** metodę HTTP do przesyłania danych
- **Łączy** etykiety z polami dla dostępności
- **Definiuje** przycisk submit do przetwarzania formularza
### Nowoczesne typy inputów i atrybuty
| Typ inputu | Cel | Przykładowe użycie |
|------------|---------|---------------|
| `text` | Ogólne pole tekstowe | `` |
| `email` | Walidacja emaila | `` |
| `password` | Ukryty wpis tekstowy | `` |
| `number` | Pole numeryczne | `` |
| `tel` | Numery telefonów | `` |
> 💡 **Zaleta nowoczesnego HTML5**: Używanie konkretnych typów inputów zapewnia automatyczną walidację, odpowiednią klawiaturę na urządzeniach mobilnych oraz lepsze wsparcie dostępności bez dodatkowego JavaScript!
### Typy i zachowania przycisków
```html
```
**Co robi każdy typ przycisku:**
- **Przyciski submit**: Wywołują wysłanie formularza i przesyłają dane do wskazanego endpointu
- **Przyciski reset**: Przywracają wszystkie pola formularza do stanu początkowego
- **Zwykłe przyciski**: Nie mają domyślnego zachowania i wymagają własnego JavaScriptu do działania
> ⚠️ **Ważna uwaga**: Element `` jest samodomykający się i nie wymaga tagu zamykającego. Zalecane jest pisanie `` bez ukośnika.
### Tworzenie formularza logowania
Teraz stwórzmy praktyczny formularz logowania, który pokazuje nowoczesne praktyki formularzy HTML. Zaczniemy od podstawowej struktury i stopniowo dodamy funkcje dostępności i walidację.
```html
Bank App
Login
```
**Analiza tego co się dzieje:**
- **Strukturyzuje** formularz za pomocą semantycznych elementów HTML5
- **Grupuje** powiązane elementy używając `div` z opisowymi klasami
- **Łączy** etykiety z polami input za pomocą atrybutów `for` i `id`
- **Zawiera** nowoczesne atrybuty takie jak `autocomplete` i `placeholder` dla lepszego UX
- **Dodaje** `novalidate` aby obsłużyć walidację za pomocą JavaScript, nie domyślną przeglądarkową
### Siła odpowiednich etykiet
**Dlaczego etykiety mają znaczenie w nowoczesnym webdevie:**
```mermaid
graph TD
A[Element Etykiety] --> B[Obsługa Czytnika Ekranu]
A --> C[Rozszerzenie celu kliknięcia]
A --> D[Walidacja formularza]
A --> E[Korzyści SEO]
B --> F[Dostępne dla wszystkich użytkowników]
C --> G[Lepsze doświadczenie mobilne]
D --> H[Wyraźne komunikaty o błędach]
E --> I[Lepsza pozycja w wyszukiwarce]
```
**Co osiągają poprawne etykiety:**
- **Umożliwiają** czytnikom ekranu jasne ogłoszenie pól formularza
- **Poszerzają** obszar klikalny (kliknięcie etykiety ustawia fokus na polu)
- **Poprawiają** obsługę na urządzeniach mobilnych dzięki większym obszarom dotyku
- **Wspierają** walidację formularza przez znaczące komunikaty błędów
- **Ulepszają** SEO przez nadanie semantycznego znaczenia elementom formularza
> 🎯 **Cel dostępności**: Każde pole formularza powinno mieć przypisaną etykietę. Ta prosta praktyka sprawia, że Twoje formularze są użyteczne dla wszystkich, w tym osób z niepełnosprawnościami i poprawia doświadczenie wszystkich użytkowników.
### Tworzenie formularza rejestracji
Formularz rejestracji wymaga bardziej szczegółowych informacji do stworzenia kompletnego konta użytkownika. Stwórzmy go z użyciem nowoczesnych funkcji HTML5 i zwiększonej dostępności.
```html
Register
```
**W powyższym kodzie:**
- **Zorganizowaliśmy** każde pole w osobnych divach dla lepszego stylowania i układu
- **Dodaliśmy** odpowiednie atrybuty `autocomplete` dla wsparcia autofill w przeglądarce
- **Zamieściliśmy** pomocnicze teksty placeholder, które kierują użytkownika
- **Ustawiliśmy** sensowne wartości domyślne za pomocą atrybutu `value`
- **Zastosowaliśmy** atrybuty walidacji takie jak `required`, `maxlength` i `min`
- **Użyliśmy** `type="number"` dla pola salda z obsługą liczb dziesiętnych
### Eksploracja typów inputów i ich zachowań
**Nowoczesne typy inputów oferują zaawansowane funkcje:**
| Funkcja | Korzyść | Przykład |
|---------|---------|----------|
| `type="number"` | Klawiatura numeryczna na urządzeniach mobilnych | Łatwiejsze wpisywanie salda |
| `step="0.01"` | Kontrola precyzji dziesiętnej | Pozwala na wpisywanie groszy |
| `autocomplete` | Autofill w przeglądarce | Szybsze wypełnianie formularza |
| `placeholder` | Podpowiedzi kontekstowe | Ułatwiają zrozumienie oczekiwań |
> 🎯 **Wyzwanie dostępności**: Spróbuj nawigować po formularzach tylko za pomocą klawiatury! Używaj `Tab` do przechodzenia między polami, `Space` do zaznaczania pól wyboru, `Enter` do wysłania. To doświadczenie pozwala zrozumieć, jak użytkownicy czytników ekranu korzystają z formularzy.
### 🔄 **Sprawdzenie pedagogiczne**
**Zrozumienie fundamentów formularzy**: Zanim zaimplementujesz JavaScript, upewnij się, że rozumiesz:
- ✅ Jak semantyczny HTML tworzy dostępne struktury formularzy
- ✅ Dlaczego typy inputów są ważne dla klawiatur mobilnych i walidacji
- ✅ Relację między etykietami a kontrolkami formularza
- ✅ Jak atrybuty formularza wpływają na domyślne zachowanie przeglądarki
**Szybki test wiedzy**: Co się stanie, jeśli wyślesz formularz bez obsługi JavaScript?
*Odpowiedź: Przeglądarka wykona domyślne wysłanie, zwykle przekierowując pod adres akcji*
**Zalety formularzy HTML5**: Nowoczesne formularze zapewniają:
- **Wbudowaną walidację**: Automatyczną kontrolę formatu emaila i liczb
- **Optymalizację mobilną**: Odpowiednie klawiatury dla różnych typów danych
- **Dostępność**: Wsparcie dla czytników ekranu i nawigacji klawiaturą
- **Stopniowe wzbogacanie**: Działają nawet gdy JavaScript jest wyłączony
## Zrozumienie metod wysyłania formularzy
Gdy ktoś wypełni Twój formularz i kliknie wyślij, te dane muszą gdzieś trafić – zazwyczaj na serwer, który je zapisze. Są różne sposoby, aby to zrobić, a wiedza którą metodę wybrać pomoże Ci uniknąć problemów.
Spójrzmy, co tak naprawdę się dzieje, gdy ktoś kliknie przycisk wyślij.
### Domyślne zachowanie formularza
Najpierw obserwujmy, co się dzieje przy podstawowym wysyłaniu formularza:
**Przetestuj swoje aktualne formularze:**
1. Kliknij przycisk *Zarejestruj się* w swoim formularzu
2. Zwróć uwagę na zmiany w pasku adresu przeglądarki
3. Zauważ jak strona odświeża się i dane pojawiają się w URL

### Porównanie metod HTTP
```mermaid
graph TD
A[Przesłanie formularza] --> B{Metoda HTTP}
B -->|GET| C[Dane w URL]
B -->|POST| D[Dane w treści żądania]
C --> E[Widoczne w pasku adresu]
C --> F[Ograniczony rozmiar danych]
C --> G[Możliwe do zakładkowania]
D --> H[Ukryte w URL]
D --> I[Duża pojemność danych]
D --> J[Bardziej bezpieczne]
```
**Zrozumienie różnic:**
| Metoda | Zastosowanie | Lokalizacja danych | Poziom bezpieczeństwa | Limit rozmiaru |
|--------|----------|---------------|----------------|-------------|
| `GET` | Zapytania wyszukiwania, filtry | Parametry w URL | Niski (widoczne) | ~2000 znaków |
| `POST` | Konta użytkowników, dane wrażliwe | Treść zapytania | Wyższy (ukryte) | Brak praktycznego limitu |
**Podstawowe różnice:**
- **GET**: Dołącza dane formularza do URL jako parametry zapytania (odpowiednie dla operacji wyszukiwania)
- **POST**: Zawiera dane w ciele żądania (niezbędne dla danych wrażliwych)
- **Ograniczenia GET**: Limity rozmiaru, widoczne dane, trwała historia w przeglądarce
- **Zalety POST**: Duża pojemność danych, ochrona prywatności, wsparcie dla przesyłania plików
> 💡 **Dobra praktyka**: Używaj `GET` dla formularzy wyszukiwania i filtrów (pobieranie danych), `POST` dla rejestracji, logowania i tworzenia danych.
### Konfiguracja wysyłania formularza
Skonfiguruj swój formularz rejestracji tak, aby poprawnie komunikował się z backendowym API używając metody POST:
```html
```
**Co zapewnia rozszerzona walidacja:**
- **Łączy** wskaźniki pól wymaganych z pomocniczymi opisami
- **Zawiera** atrybuty `pattern` do walidacji formatów
- **Dostarcza** atrybuty `title` dla dostępności i podpowiedzi
- **Dodaje** tekst pomocniczy, który prowadzi użytkownika
- **Wykorzystuje** semantyczną strukturę HTML dla lepszej dostępności
### Zaawansowane reguły walidacji
**Co realizuje każda reguła walidacji:**
| Pole | Reguły walidacji | Korzyść dla użytkownika |
|-------|------------------|------------------------|
| Nazwa użytkownika | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Gwarantuje poprawny, unikalny identyfikator |
| Waluta | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Akceptuje popularne symbole walutowe |
| Saldo | `min="0"`, `step="0.01"`, `type="number"` | Zapobiega ujemnym stanom konta |
| Opis | `maxlength="100"` | Rozsądne ograniczenie długości |
### Testowanie zachowań walidacji
**Wypróbuj te scenariusze walidacji:**
1. **Spróbuj wysłać** formularz z pustymi polami obowiązkowymi
2. **Wprowadź** nazwę użytkownika krótszą niż 3 znaki
3. **Użyj** znaków specjalnych w polu nazwy użytkownika
4. **Wpisz** ujemną kwotę salda

**Co zauważysz:**
- **Przeglądarka wyświetla** natywne komunikaty walidacji
- **Zmiany stylów** wynikające ze stanów `:valid` i `:invalid`
- **Wysyłanie formularza** jest zablokowane, dopóki wszystkie walidacje nie przejdą
- **Automatyczne skupienie** na pierwszym błędnym polu
### Walidacja po stronie klienta vs serwera
```mermaid
graph LR
A[Walidacja po stronie klienta] --> B[Natychmiastowa informacja zwrotna]
A --> C[Lepsze doświadczenie użytkownika]
A --> D[Zmniejszone obciążenie serwera]
E[Walidacja po stronie serwera] --> F[Bezpieczeństwo]
E --> G[Integralność danych]
E --> H[Reguły biznesowe]
A -.-> I[Oba wymagane]
E -.-> I
```
**Dlaczego potrzebujesz obu warstw:**
- **Walidacja klienta**: Zapewnia natychmiastową informację i lepsze UX
- **Walidacja serwera**: Gwarantuje bezpieczeństwo i realizuje złożone reguły biznesowe
- **Połączenie obu**: Tworzy solidne, przyjazne dla użytkownika i bezpieczne aplikacje
- **Progresywne ulepszanie**: Działa także bez JavaScript
> 🛡️ **Przypomnienie o bezpieczeństwie**: Nigdy nie ufaj wyłącznie walidacji po stronie klienta! Złośliwi użytkownicy mogą ją ominąć, więc walidacja po stronie serwera jest kluczowa dla bezpieczeństwa i integralności danych.
### ⚡ **Co możesz zrobić w ciągu następnych 5 minut**
- [ ] Przetestuj formularz za pomocą nieprawidłowych danych, by zobaczyć komunikaty walidacji
- [ ] Spróbuj wysłać formularz z wyłączonym JavaScript, by zobaczyć walidację HTML5
- [ ] Otwórz narzędzia deweloperskie i zanalizuj dane formularza wysyłane do serwera
- [ ] Eksperymentuj z różnymi typami wejść, aby zobaczyć zmiany klawiatury mobilnej
### 🎯 **Co możesz osiągnąć w ciągu najbliższej godziny**
- [ ] Ukończ quiz po lekcji i zrozum koncepcje obsługi formularzy
- [ ] Wdróż kompleksowe wyzwanie walidacji z informacją zwrotną w czasie rzeczywistym
- [ ] Dodaj stylizację CSS, by formularze wyglądały profesjonalnie
- [ ] Stwórz obsługę błędów dla duplikatów nazw użytkowników i błędów serwera
- [ ] Dodaj pola potwierdzania hasła z odpowiednią walidacją
### 📅 **Twoja tygodniowa ścieżka do mistrzostwa w formularzach**
- [ ] Zbuduj pełną aplikację bankową z zaawansowanymi funkcjami formularzy
- [ ] Wdróż możliwość przesyłania plików na zdjęcia profilowe lub dokumenty
- [ ] Dodaj wieloetapowe formularze z wskaźnikami postępu i zarządzaniem stanem
- [ ] Stwórz dynamiczne formularze adaptujące się na podstawie wyborów użytkownika
- [ ] Wdróż automatyczne zapisywanie formularzy i odzyskiwanie danych dla lepszego UX
- [ ] Dodaj zaawansowaną walidację, np. weryfikację emaila i formatowanie numerów telefonów
### 🌟 **Twoja miesięczna droga do mistrzostwa frontendowego**
- [ ] Buduj złożone aplikacje formularzy z logiką warunkową i przepływami pracy
- [ ] Naucz się bibliotek i frameworków formularzy dla szybszego rozwoju
- [ ] Mistrzostwo w zasadach dostępności i inkluzywnego projektowania
- [ ] Wdróż internacjonalizację i lokalizację dla globalnych formularzy
- [ ] Twórz wielokrotnego użytku biblioteki komponentów formularzy i systemy projektowe
- [ ] Wspieraj projekty open source formularzy i dziel się najlepszymi praktykami
## 🎯 Twój harmonogram mistrzostwa w tworzeniu formularzy
```mermaid
timeline
title Rozwój Formularzy i Postępy w Nauce Doświadczenia Użytkownika
section Podstawy HTML (15 minut)
Formularze Semantyczne: Elementy formularza
: Typy pól
: Etykiety i dostępność
: Progresywne ulepszanie
section Integracja JavaScript (25 minut)
Obsługa Zdarzeń: Wysyłanie formularza
: Zbieranie danych
: Komunikacja AJAX
: Wzorce async/await
section Systemy Walidacji (35 minut)
Wielowarstwowe Bezpieczeństwo: Walidacja HTML5
: Logika po stronie klienta
: Weryfikacja po stronie serwera
: Obsługa błędów
section Doświadczenie Użytkownika (45 minut)
Polerowanie Interfejsu: Stany ładowania
: Komunikaty sukcesu
: Odzyskiwanie po błędach
: Funkcje dostępności
section Zaawansowane Wzorce (1 tydzień)
Profesjonalne Formularze: Walidacja dynamiczna
: Wieloetapowe przepływy pracy
: Przesyłanie plików
: Informacja zwrotna w czasie rzeczywistym
section Umiejętności Enterprise (1 miesiąc)
Aplikacje Produkcyjne: Biblioteki formularzy
: Strategie testowania
: Optymalizacja wydajności
: Najlepsze praktyki bezpieczeństwa
```
### 🛠️ Podsumowanie zestawu narzędzi do tworzenia formularzy
Po ukończeniu tej lekcji opanowałeś:
- **Formularze HTML5**: Semantyczna struktura, typy wejść i funkcje dostępności
- **Obsługę formularzy w JavaScript**: Zarządzanie zdarzeniami, zbieranie danych i komunikację AJAX
- **Architekturę walidacji**: Wielowarstwowa walidacja dla bezpieczeństwa i doświadczenia użytkownika
- **Programowanie asynchroniczne**: Nowoczesne Fetch API i wzorce async/await
- **Zarządzanie błędami**: Kompleksowa obsługa błędów i systemy informacji zwrotnej
- **Projektowanie UX**: Stany ładowania, komunikaty sukcesu i odzyskiwanie po błędach
- **Progresywne ulepszanie**: Formularze działające na wszystkich przeglądarkach i platformach
**Zastosowania w praktyce**: Twoje umiejętności tworzenia formularzy mają zastosowanie m.in. w:
- **Aplikacjach e-commerce**: Procesy realizacji zamówień, rejestracja kont i formularze płatności
- **Oprogramowaniu korporacyjnym**: Systemy wprowadzania danych, interfejsy raportów i przepływy pracy
- **Zarządzaniu treścią**: Platformy publikacyjne, treści generowane przez użytkowników, interfejsy administracyjne
- **Aplikacjach finansowych**: Interfejsy bankowe, platformy inwestycyjne, systemy transakcji
- **Systemach opieki zdrowotnej**: Portale pacjentów, umawianie wizyt, formularze medyczne
- **Platformach edukacyjnych**: Rejestracja na kursy, narzędzia oceny, systemy zarządzania nauką
**Zdobyte umiejętności zawodowe**: Potrafisz teraz:
- **Projektować** dostępne formularze działające dla wszystkich użytkowników, w tym niepełnosprawnych
- **Wdrażać** bezpieczną walidację formularzy zapobiegającą błędom i podatnościom
- **Tworzyć** responsywne interfejsy użytkownika z wyraźną informacją zwrotną i wsparciem
- **Debugować** złożone interakcje formularzy za pomocą narzędzi deweloperskich i analizy sieci
- **Optymalizować** wydajność formularzy przez efektywne przetwarzanie danych i walidację
**Opanowane koncepcje frontendowe**:
- **Architektura zdarzeniowa**: Obsługa interakcji użytkownika i reakcji systemu
- **Programowanie asynchroniczne**: Komunikacja z serwerem bez blokowania i obsługa błędów
- **Walidacja danych**: Kontrole bezpieczeństwa i integralności po stronie klienta i serwera
- **Projektowanie doświadczenia użytkownika**: Intuicyjne interfejsy prowadzące do sukcesu
- **Inżynieria dostępności**: Wdrażanie inkluzywnego projektowania dla różnorodnych potrzeb
**Następny poziom**: Jesteś gotowy na eksplorację zaawansowanych bibliotek formularzy, wdrożenie skomplikowanych reguł walidacji lub budowę systemów zbierania danych klasy korporacyjnej!
🌟 **Osiągnięcie odblokowane**: Zbudowałeś kompletny system obsługi formularzy z profesjonalną walidacją, obsługą błędów i wzorcami UX!
---
---
## GitHub Copilot Agent Challenge 🚀
Użyj trybu Agenta, aby ukończyć następujące wyzwanie:
**Opis:** Ulepsz formularz rejestracji, dodając kompleksową walidację po stronie klienta oraz informację zwrotną dla użytkownika. To wyzwanie pozwoli ci poćwiczyć walidację formularzy, obsługę błędów i poprawę doświadczenia użytkownika przez interaktywną informację.
**Prompt:** Stwórz kompletny system walidacji formularza rejestracji, który zawiera: 1) Informacje zwrotne na żywo dla każdego pola podczas wpisywania, 2) Niestandardowe komunikaty walidacyjne, które pojawiają się pod każdym polem, 3) Pole potwierdzenia hasła z walidacją dopasowania, 4) Wskaźniki wizualne (takie jak zielone haczyki dla poprawnych pól i czerwone ostrzeżenia dla niepoprawnych), 5) Przycisk wysyłania, który jest aktywowany tylko wtedy, gdy wszystkie walidacje są poprawne. Użyj atrybutów walidacji HTML5, CSS do stylizacji stanów walidacji oraz JavaScript do interaktywnego działania.
Dowiedz się więcej o [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) tutaj.
## 🚀 Wyzwanie
Pokaż komunikat o błędzie w HTML, jeśli użytkownik już istnieje.
Oto przykład, jak może wyglądać końcowa strona logowania po dodaniu stylów:

## Quiz po wykładzie
[Quiz po wykładzie](https://ff-quizzes.netlify.app/web/quiz/44)
## Przegląd i samodzielna nauka
Twórcy aplikacji wykazali się dużą kreatywnością w budowie formularzy, szczególnie w zakresie strategii walidacji. Poznaj różne przebiegi formularzy, przeglądając [CodePen](https://codepen.com); czy znajdziesz interesujące i inspirujące formularze?
## Zadanie
[Ostylizuj swoją aplikację bankową](assignment.md)
---
**Zastrzeżenie**:
Niniejszy dokument został przetłumaczony przy użyciu usług tłumaczeniowych AI [Co-op Translator](https://github.com/Azure/co-op-translator). Chociaż dokładamy starań, aby tłumaczenie było jak najdokładniejsze, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego języku źródłowym powinien być uważany za źródło autorytatywne. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.