# Створення банківського додатку Частина 2: Створення форми входу та реєстрації
```mermaid
journey
title Your Form Development Journey
section HTML Foundation
Understand form elements: 3: Student
Learn input types: 4: Student
Master accessibility: 4: Student
section JavaScript Integration
Handle form submission: 4: Student
Implement AJAX communication: 5: Student
Process server responses: 5: Student
section Validation Systems
Create multi-layer validation: 5: Student
Enhance user experience: 5: Student
Ensure data integrity: 5: Student
```
## Тест перед лекцією
[Тест перед лекцією](https://ff-quizzes.netlify.app/web/quiz/43)
Чи заповнювали ви коли-небудь форму онлайн, яка відхиляла формат вашої електронної пошти? Або втрачали всю інформацію після натискання кнопки "Надіслати"? Ми всі стикалися з такими неприємними ситуаціями.
Форми є мостом між вашими користувачами та функціональністю вашого додатку. Як і ретельні протоколи, які використовують авіадиспетчери для безпечного керування літаками, добре спроектовані форми забезпечують чіткий зворотний зв'язок і запобігають дорогим помилкам. Погано спроектовані форми, навпаки, можуть відштовхнути користувачів швидше, ніж непорозуміння в переповненому аеропорту.
У цьому уроці ми перетворимо ваш статичний банківський додаток на інтерактивний. Ви навчитеся створювати форми, які перевіряють введені дані, взаємодіють із серверами та надають корисний зворотний зв'язок. Уявіть це як створення інтерфейсу управління, який дозволяє користувачам орієнтуватися у функціях вашого додатку.
Наприкінці ви матимете повну систему входу та реєстрації з перевіркою, яка спрямовує користувачів до успіху, а не до розчарування.
```mermaid
mindmap
root((Form Development))
HTML Foundation
Semantic Elements
Input Types
Accessibility
Label Association
User Experience
Validation Feedback
Error Prevention
Loading States
Success Messaging
JavaScript Integration
Event Handling
AJAX Communication
Data Processing
Error Management
Validation Layers
HTML5 Validation
Client-side Logic
Server-side Security
Progressive Enhancement
Modern Patterns
Fetch API
Async/Await
Form Data API
Promise Handling
```
## Передумови
Перш ніж почати створювати форми, переконайтеся, що у вас все налаштовано правильно. Цей урок продовжує попередній, тому якщо ви пропустили його, можливо, вам варто повернутися назад і спочатку налаштувати основи.
### Необхідна підготовка
| Компонент | Статус | Опис |
|-----------|--------|-------------|
| [HTML Шаблони](../1-template-route/README.md) | ✅ Обов'язково | Основна структура банківського додатку |
| [Node.js](https://nodejs.org) | ✅ Обов'язково | JavaScript середовище виконання для сервера |
| [Bank API Server](../api/README.md) | ✅ Обов'язково | Сервіс бекенду для зберігання даних |
> 💡 **Порада для розробки**: Ви будете запускати два окремі сервери одночасно – один для фронтенд банківського додатку, а інший для бекенду API. Така конфігурація відображає реальний процес розробки, коли фронтенд і бекенд працюють незалежно.
### Конфігурація серверів
**Ваше середовище розробки включатиме:**
- **Сервер фронтенду**: Обслуговує ваш банківський додаток (зазвичай порт `3000`)
- **Сервер бекенду API**: Обробляє зберігання та отримання даних (порт `5000`)
- **Обидва сервери** можуть працювати одночасно без конфліктів
**Тестування з'єднання з API:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**Якщо ви бачите відповідь версії API, ви готові продовжувати!**
---
## Розуміння HTML форм та елементів управління
HTML форми – це спосіб, яким користувачі взаємодіють із вашим веб-додатком. Уявіть їх як телеграфну систему, яка з'єднувала віддалені місця у 19 столітті – це протокол зв'язку між намірами користувача та відповіддю додатку. Коли вони спроектовані ретельно, вони ловлять помилки, спрямовують форматування введення та надають корисні підказки.
Сучасні форми значно складніші за базові текстові поля. HTML5 ввів спеціалізовані типи введення, які автоматично обробляють перевірку електронної пошти, форматування чисел та вибір дат. Ці покращення сприяють як доступності, так і мобільному досвіду користувачів.
### Основні елементи форми
**Будівельні блоки, які потрібні кожній формі:**
```html
```
**Що робить цей код:**
- **Створює** контейнер форми з унікальним ідентифікатором
- **Визначає** HTTP метод для надсилання даних
- **Зв'язує** мітки з полями введення для доступності
- **Визначає** кнопку "Надіслати" для обробки форми
### Сучасні типи введення та атрибути
| Тип введення | Призначення | Приклад використання |
|--------------|-------------|-----------------------|
| `text` | Загальне текстове введення | `` |
| `email` | Перевірка електронної пошти | `` |
| `password` | Приховане введення тексту | `` |
| `number` | Числове введення | `` |
| `tel` | Номери телефонів | `` |
> 💡 **Перевага сучасного HTML5**: Використання специфічних типів введення забезпечує автоматичну перевірку, відповідні мобільні клавіатури та кращу підтримку доступності без додаткового JavaScript!
### Типи кнопок та їх поведінка
```html
```
**Що робить кожен тип кнопки:**
- **Кнопки "Надіслати"**: Запускають надсилання форми та передають дані на вказаний кінцевий пункт
- **Кнопки "Скинути"**: Відновлюють всі поля форми до початкового стану
- **Звичайні кнопки**: Не мають стандартної поведінки, вимагають кастомного JavaScript для функціональності
> ⚠️ **Важлива примітка**: Елемент `` є самозакриваючим і не потребує закриваючого тегу. Сучасна найкраща практика – писати `` без слешу.
### Створення форми входу
Тепер давайте створимо практичну форму входу, яка демонструє сучасні практики HTML форм. Ми почнемо з базової структури та поступово покращимо її за допомогою функцій доступності та перевірки.
```html
Bank App
Login
```
**Розбір того, що тут відбувається:**
- **Структурує** форму за допомогою семантичних елементів HTML5
- **Групує** пов'язані елементи за допомогою контейнерів `div` з осмисленими класами
- **Зв'язує** мітки з полями введення за допомогою атрибутів `for` та `id`
- **Включає** сучасні атрибути, такі як `autocomplete` та `placeholder` для покращення UX
- **Додає** `novalidate` для обробки перевірки за допомогою JavaScript замість стандартів браузера
### Сила правильних міток
**Чому мітки важливі для сучасної веб-розробки:**
```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]
```
**Що досягають правильні мітки:**
- **Дозволяють** екранним читачам чітко оголошувати поля форми
- **Розширюють** область кліку (натискання на мітку фокусує поле введення)
- **Покращують** мобільну зручність завдяки більшим зонам для торкання
- **Підтримують** перевірку форми з осмисленими повідомленнями про помилки
- **Покращують** SEO, надаючи семантичне значення елементам форми
> 🎯 **Ціль доступності**: Кожне поле введення форми повинно мати пов'язану мітку. Ця проста практика робить ваші форми доступними для всіх, включаючи користувачів з обмеженими можливостями, і покращує досвід для всіх користувачів.
### Створення форми реєстрації
Форма реєстрації вимагає більш детальної інформації для створення повного облікового запису користувача. Давайте створимо її з використанням сучасних функцій HTML5 та покращеної доступності.
```html
Register
```
**У наведеному вище ми:**
- **Організували** кожне поле в контейнерних div для кращого стилю та макету
- **Додали** відповідні атрибути `autocomplete` для підтримки автозаповнення браузера
- **Включили** корисний текст-підказку для спрямування введення користувача
- **Встановили** розумні значення за замовчуванням за допомогою атрибуту `value`
- **Застосували** атрибути перевірки, такі як `required`, `maxlength` та `min`
- **Використали** `type="number"` для поля балансу з підтримкою десяткових чисел
### Дослідження типів введення та поведінки
**Сучасні типи введення забезпечують розширену функціональність:**
| Функція | Перевага | Приклад |
|---------|----------|---------|
| `type="number"` | Числова клавіатура на мобільних пристроях | Легше введення балансу |
| `step="0.01"` | Контроль десяткової точності | Дозволяє копійки у валюті |
| `autocomplete` | Автозаповнення браузера | Швидше заповнення форми |
| `placeholder` | Контекстні підказки | Спрямовує очікування користувача |
> 🎯 **Виклик доступності**: Спробуйте навігацію формами, використовуючи лише клавіатуру! Використовуйте `Tab` для переміщення між полями, `Space` для встановлення прапорців та `Enter` для надсилання. Цей досвід допоможе вам зрозуміти, як користувачі екранних читачів взаємодіють із вашими формами.
### 🔄 **Педагогічна перевірка**
**Розуміння основ форм**: Перед впровадженням JavaScript переконайтеся, що ви розумієте:
- ✅ Як семантичний HTML створює доступні структури форм
- ✅ Чому типи введення важливі для мобільних клавіатур та перевірки
- ✅ Взаємозв'язок між мітками та елементами управління формою
- ✅ Як атрибути форми впливають на стандартну поведінку браузера
**Швидкий самотест**: Що станеться, якщо ви надішлете форму без обробки JavaScript?
*Відповідь: Браузер виконає стандартне надсилання, зазвичай перенаправляючи на URL дії*
**Переваги HTML5 форм**: Сучасні форми забезпечують:
- **Вбудовану перевірку**: Автоматична перевірка формату електронної пошти та чисел
- **Оптимізацію для мобільних пристроїв**: Відповідні клавіатури для різних типів введення
- **Доступність**: Підтримка екранних читачів та навігації клавіатурою
- **Прогресивне покращення**: Працює навіть коли JavaScript вимкнено
## Розуміння методів надсилання форм
Коли хтось заповнює вашу форму та натискає "Надіслати", ці дані повинні кудись потрапити – зазвичай на сервер, який може їх зберегти. Є кілька способів, як це може статися, і знання, який з них використовувати, може врятувати вас від головного болю в майбутньому.
Давайте розглянемо, що насправді відбувається, коли хтось натискає кнопку "Надіслати".
### Стандартна поведінка форми
Спочатку давайте спостерігати, що відбувається при базовому надсиланні форми:
**Протестуйте ваші поточні форми:**
1. Натисніть кнопку *Реєстрація* у вашій формі
2. Спостерігайте зміни в адресному рядку вашого браузера
3. Зверніть увагу, як сторінка перезавантажується, і дані з'являються в URL

### Порівняння HTTP методів
```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]
```
**Розуміння відмінностей:**
| Метод | Випадок використання | Розташування даних | Рівень безпеки | Ліміт розміру |
|-------|-----------------------|--------------------|----------------|---------------|
| `GET` | Пошукові запити, фільтри | Параметри URL | Низький (видимий) | ~2000 символів |
| `POST` | Облікові записи користувачів, конфіденційні дані | Тіло запиту | Вищий (прихований) | Практично без обмежень |
**Розуміння основних відмінностей:**
- **GET**: Додає дані форми до URL як параметри запиту (підходить для пошукових операцій)
- **POST**: Включає дані в тіло запиту (необхідно для конфіденційної інформації)
- **Обмеження GET**: Обмеження розміру, видимі дані, постійна історія браузера
- **Переваги POST**: Велика місткість даних, захист конфіденційності, підтримка завантаження файлів
> 💡 **Найкраща практика**: Використовуйте `GET` для пошукових форм і фільтрів (отримання даних), використовуйте `POST` для реєстрації користувачів, входу та створення даних.
### Налаштування надсилання форми
Давайте налаштуємо вашу форму реєстрації для правильного спілкування з бекендом API, використовуючи метод POST:
```html
```
**Розуміння покращеної перевірки:**
- **Поєднує** індикатори обов'язкових полів із корисними описами
- **Включає** атрибути `pattern` для перевірки формату
- **Надає** атрибути `title` для доступності та підказок
- **Додає** допоміжний текст для керування введенням користувача
- **Використовує** семантичну структуру HTML для кращої доступності
### Розширені правила перевірки
**Що досягає кожне правило перевірки:**
| Поле | Правила перевірки | Користувацька перевага |
|------|-------------------|-----------------------|
| Ім'я користувача | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Забезпечує дійсні, унікальні ідентифікатори |
| Валюта | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Приймає загальні символи валюти |
| Баланс | `min="0"`, `step="0.01"`, `type="number"` | Запобігає негативним балансам |
| Опис | `maxlength="100"` | Розумні обмеження довжини |
### Тестування поведінки перевірки
**Спробуйте ці сценарії перевірки:**
1. **Надішліть** форму з порожніми обов'язковими полями
2. **Введіть** ім'я користувача коротше 3 символів
3. **Спробуйте** спеціальні символи в полі імені користувача
4. **Введіть** негативну суму балансу

**Що ви спостерігатимете:**
- **Браузер відображає** нативні повідомлення про перевірку
- **Зміни стилізації** на основі станів `:valid` і `:invalid`
- **Надсилання форми** блокується, поки всі перевірки не пройдуть
- **Фокус автоматично** переміщується на перше недійсне поле
### Перевірка на стороні клієнта та сервера
```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
```
**Чому потрібні обидва рівні:**
- **Перевірка на стороні клієнта**: Забезпечує миттєвий зворотний зв'язок і покращує досвід користувача
- **Перевірка на сервері**: Гарантує безпеку та обробляє складні бізнес-правила
- **Комбінований підхід**: Створює надійні, зручні та безпечні додатки
- **Прогресивне покращення**: Працює навіть якщо JavaScript вимкнено
> 🛡️ **Нагадування про безпеку**: Ніколи не довіряйте лише перевірці на стороні клієнта! Зловмисники можуть обійти перевірки на клієнті, тому перевірка на сервері є важливою для безпеки та цілісності даних.
### ⚡ **Що ви можете зробити за наступні 5 хвилин**
- [ ] Протестуйте вашу форму з недійсними даними, щоб побачити повідомлення про перевірку
- [ ] Спробуйте надіслати форму з вимкненим JavaScript, щоб побачити перевірку HTML5
- [ ] Відкрийте DevTools браузера та перевірте дані форми, які надсилаються на сервер
- [ ] Експериментуйте з різними типами введення, щоб побачити зміни клавіатури на мобільних пристроях
### 🎯 **Що ви можете досягти за цю годину**
- [ ] Завершіть тест після уроку та зрозумійте концепти обробки форм
- [ ] Реалізуйте виклик перевірки з реальним зворотним зв'язком
- [ ] Додайте стилізацію CSS для створення професійних форм
- [ ] Створіть обробку помилок для дублювання імен користувачів та помилок сервера
- [ ] Додайте поля підтвердження пароля з перевіркою відповідності
### 📅 **Ваш тижневий шлях до майстерності форм**
- [ ] Завершіть повний банківський додаток із розширеними функціями форм
- [ ] Реалізуйте можливості завантаження файлів для фотографій профілю або документів
- [ ] Додайте багатокрокові форми з індикаторами прогресу та управлінням станом
- [ ] Створіть динамічні форми, які адаптуються на основі вибору користувача
- [ ] Реалізуйте автозбереження форм та відновлення для кращого досвіду користувача
- [ ] Додайте розширену перевірку, як-от перевірку електронної пошти та форматування номерів телефону
### 🌟 **Ваш місячний шлях до майстерності фронтенд-розробки**
- [ ] Створіть складні додатки форм із умовною логікою та робочими процесами
- [ ] Вивчіть бібліотеки та фреймворки форм для швидкої розробки
- [ ] Опануйте рекомендації щодо доступності та принципи інклюзивного дизайну
- [ ] Реалізуйте інтернаціоналізацію та локалізацію для глобальних форм
- [ ] Створіть бібліотеки компонентів форм та системи дизайну
- [ ] Внесіть свій вклад у проекти з відкритим кодом форм та поділіться найкращими практиками
## 🎯 Ваш графік майстерності розробки форм
```mermaid
timeline
title Form Development & User Experience Learning Progression
section HTML Foundation (15 minutes)
Semantic Forms: Form elements
: Input types
: Labels and accessibility
: Progressive enhancement
section JavaScript Integration (25 minutes)
Event Handling: Form submission
: Data collection
: AJAX communication
: Async/await patterns
section Validation Systems (35 minutes)
Multi-layer Security: HTML5 validation
: Client-side logic
: Server-side verification
: Error handling
section User Experience (45 minutes)
Interface Polish: Loading states
: Success messaging
: Error recovery
: Accessibility features
section Advanced Patterns (1 week)
Professional Forms: Dynamic validation
: Multi-step workflows
: File uploads
: Real-time feedback
section Enterprise Skills (1 month)
Production Applications: Form libraries
: Testing strategies
: Performance optimization
: Security best practices
```
### 🛠️ Підсумок вашого інструментарію для розробки форм
Після завершення цього уроку ви опанували:
- **HTML5 форми**: Семантична структура, типи введення та функції доступності
- **Обробка форм JavaScript**: Управління подіями, збір даних та AJAX-комунікація
- **Архітектура перевірки**: Багаторівнева перевірка для безпеки та досвіду користувача
- **Асинхронне програмування**: Сучасний Fetch API та шаблони async/await
- **Управління помилками**: Всеосяжна обробка помилок та
**Запит:** Створіть повну систему перевірки форми реєстрації, яка включає: 1) Миттєвий зворотний зв'язок щодо перевірки кожного поля під час введення користувачем, 2) Користувацькі повідомлення про помилки, які з'являються під кожним полем введення, 3) Поле підтвердження пароля з перевіркою відповідності, 4) Візуальні індикатори (наприклад, зелені галочки для правильних полів і червоні попередження для неправильних), 5) Кнопка "Надіслати", яка стає активною лише тоді, коли всі перевірки пройдені. Використовуйте атрибути перевірки HTML5, CSS для стилізації станів перевірки та JavaScript для інтерактивної поведінки.
Дізнайтеся більше про [режим агента](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) тут.
## 🚀 Виклик
Показати повідомлення про помилку в HTML, якщо користувач вже існує.
Ось приклад того, як може виглядати фінальна сторінка входу після невеликого стилювання:

## Тест після лекції
[Тест після лекції](https://ff-quizzes.netlify.app/web/quiz/44)
## Огляд і самостійне навчання
Розробники стали дуже креативними у своїх зусиллях щодо створення форм, особливо стосовно стратегій перевірки. Дізнайтеся про різні потоки форм, переглядаючи [CodePen](https://codepen.com); чи можете ви знайти цікаві та надихаючі форми?
## Завдання
[Стилізуйте ваш додаток банку](assignment.md)
---
**Відмова від відповідальності**:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу [Co-op Translator](https://github.com/Azure/co-op-translator). Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.