# Jenga Programu ya Benki Sehemu ya 2: Unda Fomu ya Kuingia na Kusajili
## Maswali ya Awali ya Somo
[Maswali ya awali ya somo](https://ff-quizzes.netlify.app/web/quiz/43)
Umewahi kujaza fomu mtandaoni na ikakataa muundo wa barua pepe yako? Au kupoteza taarifa zako zote ulipobofya kitufe cha kutuma? Sote tumewahi kukutana na uzoefu wa kukatisha tamaa kama huu.
Fomu ni daraja kati ya watumiaji wako na utendaji wa programu yako. Kama taratibu za makini zinazotumiwa na waongoza ndege kuongoza ndege kufika salama, fomu zilizoundwa vizuri hutoa maoni wazi na kuzuia makosa ya gharama kubwa. Fomu mbaya, kwa upande mwingine, zinaweza kuwafukuza watumiaji haraka kuliko mawasiliano mabaya katika uwanja wa ndege wenye shughuli nyingi.
Katika somo hili, tutabadilisha programu yako ya benki isiyobadilika kuwa programu ya maingiliano. Utajifunza jinsi ya kujenga fomu zinazothibitisha maingizo ya watumiaji, kuwasiliana na seva, na kutoa maoni ya msaada. Fikiria kama kujenga kiolesura cha kudhibiti kinachowawezesha watumiaji kuvinjari vipengele vya programu yako.
Mwisho wa somo, utakuwa na mfumo kamili wa kuingia na kusajili wenye uthibitishaji unaowaongoza watumiaji kuelekea mafanikio badala ya kukatishwa tamaa.
## Mahitaji ya Awali
Kabla ya kuanza kujenga fomu, hebu tuhakikishe kuwa kila kitu kimewekwa vizuri. Somo hili linaendelea pale tulipoishia katika somo la awali, kwa hivyo kama uliruka mbele, huenda ukahitaji kurudi nyuma na kuhakikisha misingi inafanya kazi kwanza.
### Vifaa Vinavyohitajika
| Sehemu | Hali | Maelezo |
|--------|------|---------|
| [HTML Templates](../1-template-route/README.md) | โ Inahitajika | Muundo wa msingi wa programu yako ya benki |
| [Node.js](https://nodejs.org) | โ Inahitajika | Mazingira ya JavaScript kwa seva |
| [Bank API Server](../api/README.md) | โ Inahitajika | Huduma ya nyuma kwa hifadhi ya data |
> ๐ก **Kidokezo cha Maendeleo**: Utakuwa unaendesha seva mbili tofauti kwa wakati mmoja โ moja kwa programu yako ya benki ya mbele na nyingine kwa API ya nyuma. Mpangilio huu unaakisi maendeleo halisi ya ulimwengu ambapo huduma za mbele na nyuma zinafanya kazi kwa uhuru.
### Usanidi wa Seva
**Mazingira yako ya maendeleo yatakuwa na:**
- **Seva ya mbele**: Inahudumia programu yako ya benki (kawaida bandari `3000`)
- **Seva ya API ya nyuma**: Inashughulikia hifadhi ya data na ufuatiliaji (bandari `5000`)
- **Seva zote mbili** zinaweza kuendeshwa kwa wakati mmoja bila migogoro
**Kupima muunganisho wa API yako:**
```bash
curl http://localhost:5000/api
# Expected response: "Bank API v1.0.0"
```
**Ukiona majibu ya toleo la API, uko tayari kuendelea!**
---
## Kuelewa Fomu za HTML na Vidhibiti
Fomu za HTML ni jinsi watumiaji wanavyowasiliana na programu yako ya wavuti. Fikiria kama mfumo wa telegrafu uliounganisha maeneo ya mbali katika karne ya 19 โ ni itifaki ya mawasiliano kati ya nia ya mtumiaji na majibu ya programu. Zinapoundwa kwa umakini, zinakamata makosa, kuongoza muundo wa maingizo, na kutoa mapendekezo ya msaada.
Fomu za kisasa ni za hali ya juu zaidi kuliko maingizo ya maandishi ya msingi. HTML5 ilianzisha aina maalum za maingizo zinazoshughulikia uthibitishaji wa barua pepe, muundo wa namba, na uteuzi wa tarehe moja kwa moja. Maboresho haya yanawanufaisha watumiaji wa vifaa vya mkononi na pia yanaboresha upatikanaji.
### Vipengele Muhimu vya Fomu
**Vipengele vya msingi ambavyo kila fomu inahitaji:**
```html
```
**Hii ndiyo kazi ya msimbo huu:**
- **Inaunda** kontena la fomu lenye kitambulisho cha kipekee
- **Inabainisha** njia ya HTTP kwa kutuma data
- **Inahusisha** lebo na maingizo kwa upatikanaji
- **Inafafanua** kitufe cha kutuma ili kushughulikia fomu
### Aina za Maingizo ya Kisasa na Sifa
| Aina ya Maingizo | Kusudi | Mfano wa Matumizi |
|------------------|--------|-------------------|
| `text` | Maingizo ya maandishi ya jumla | `` |
| `email` | Uthibitishaji wa barua pepe | `` |
| `password` | Maingizo ya maandishi yaliyofichwa | `` |
| `number` | Maingizo ya namba | `` |
| `tel` | Namba za simu | `` |
> ๐ก **Faida ya HTML5 ya Kisasa**: Kutumia aina maalum za maingizo kunatoa uthibitishaji wa moja kwa moja, kibodi sahihi kwa vifaa vya mkononi, na msaada bora wa upatikanaji bila JavaScript ya ziada!
### Aina za Vitufe na Tabia
```html
```
**Hii ndiyo kazi ya kila aina ya kitufe:**
- **Vitufe vya kutuma**: Vinazindua kutuma fomu na kutuma data kwa sehemu iliyobainishwa
- **Vitufe vya kuweka upya**: Vinarejesha maingizo yote ya fomu katika hali yao ya awali
- **Vitufe vya kawaida**: Havina tabia ya msingi, vinahitaji JavaScript maalum kwa utendaji
> โ ๏ธ **Kumbuka Muhimu**: Kipengele cha `` kinajifunga chenyewe na hakihitaji tagi ya kufunga. Mazoea bora ya kisasa ni kuandika `` bila slash.
### Kujenga Fomu ya Kuingia
Sasa hebu tuunde fomu ya kuingia ya vitendo inayodhihirisha mazoea ya kisasa ya fomu za HTML. Tutaanza na muundo wa msingi na kuiboresha hatua kwa hatua kwa vipengele vya upatikanaji na uthibitishaji.
```html
Bank App
Login
```
**Kufafanua kinachotokea hapa:**
- **Inaunda** fomu kwa vipengele vya semantic vya HTML5
- **Inapanga** vipengele vinavyohusiana kwa kutumia kontena za `div` zenye madarasa yenye maana
- **Inahusisha** lebo na maingizo kwa kutumia sifa za `for` na `id`
- **Inajumuisha** sifa za kisasa kama `autocomplete` na `placeholder` kwa UX bora
- **Inaongeza** `novalidate` kushughulikia uthibitishaji kwa JavaScript badala ya chaguo-msingi za kivinjari
### Nguvu ya Lebo Sahihi
**Kwa nini lebo ni muhimu kwa maendeleo ya wavuti ya kisasa:**
```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]
```
**Kazi ya lebo sahihi:**
- **Inawawezesha** wasomaji wa skrini kutangaza maingizo ya fomu kwa uwazi
- **Inapanua** eneo linaloweza kubofya (kubofya lebo kunalenga maingizo)
- **Inaboresha** matumizi ya vifaa vya mkononi kwa malengo makubwa ya kugusa
- **Inasaidia** uthibitishaji wa fomu kwa ujumbe wa makosa wenye maana
- **Inaboresha** SEO kwa kutoa maana ya semantic kwa vipengele vya fomu
> ๐ฏ **Lengo la Upatikanaji**: Kila maingizo ya fomu yanapaswa kuwa na lebo inayohusiana. Zoezi hili rahisi hufanya fomu zako zitumike na kila mtu, ikiwa ni pamoja na watumiaji wenye ulemavu, na kuboresha uzoefu kwa watumiaji wote.
### Kujenga Fomu ya Usajili
Fomu ya usajili inahitaji maelezo ya kina zaidi ili kuunda akaunti kamili ya mtumiaji. Hebu tuijenge kwa vipengele vya kisasa vya HTML5 na upatikanaji ulioboreshwa.
```html
Register
```
**Katika msimbo hapo juu, tumefanya:**
- **Kupanga** kila uwanja katika kontena za div kwa mitindo bora na mpangilio
- **Kuongeza** sifa za `autocomplete` kwa msaada wa kujaza fomu kiotomatiki
- **Kujumuisha** maandishi ya mwongozo ya `placeholder` kusaidia maingizo ya watumiaji
- **Kuweka** chaguo-msingi za busara kwa kutumia sifa ya `value`
- **Kutumia** sifa za uthibitishaji kama `required`, `maxlength`, na `min`
- **Kutumia** `type="number"` kwa uwanja wa salio na msaada wa desimali
### Kuchunguza Aina za Maingizo na Tabia
**Aina za maingizo ya kisasa hutoa utendaji ulioboreshwa:**
| Kipengele | Faida | Mfano |
|-----------|-------|-------|
| `type="number"` | Kibodi ya namba kwenye vifaa vya mkononi | Rahisi kuingiza salio |
| `step="0.01"` | Udhibiti wa usahihi wa desimali | Inaruhusu senti kwenye sarafu |
| `autocomplete` | Kujaza fomu kiotomatiki na kivinjari | Kukamilisha fomu haraka |
| `placeholder` | Vidokezo vya muktadha | Kuongoza matarajio ya mtumiaji |
> ๐ฏ **Changamoto ya Upatikanaji**: Jaribu kuvinjari fomu kwa kutumia kibodi pekee! Tumia `Tab` kuhamia kati ya maingizo, `Space` kuangalia visanduku, na `Enter` kutuma. Uzoefu huu unakusaidia kuelewa jinsi watumiaji wa wasomaji wa skrini wanavyoshirikiana na fomu zako.
## Kuelewa Njia za Kutuma Fomu
Wakati mtu anajaza fomu yako na kubofya kutuma, data hiyo inahitaji kwenda mahali โ kawaida kwa seva inayoweza kuihifadhi. Kuna njia kadhaa tofauti za kufanya hivyo, na kujua ipi ya kutumia inaweza kukuokoa kutoka kwa matatizo baadaye.
Hebu tuangalie kinachotokea wakati mtu anabofya kitufe cha kutuma.
### Tabia ya Kawaida ya Fomu
Kwanza, hebu tuangalie kinachotokea na kutuma fomu ya msingi:
**Jaribu fomu zako za sasa:**
1. Bofya kitufe cha *Sajili* kwenye fomu yako
2. Angalia mabadiliko kwenye upau wa anwani wa kivinjari chako
3. Tambua jinsi ukurasa unavyopakia upya na data inaonekana kwenye URL

### Ulinganisho wa Njia za 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]
```
**Kuelewa tofauti:**
| Njia | Matumizi | Eneo la Data | Kiwango cha Usalama | Kiwango cha Ukubwa |
|------|----------|-------------|---------------------|--------------------|
| `GET` | Maswali ya utafutaji, vichujio | Vigezo vya URL | Chini (inaonekana) | ~2000 herufi |
| `POST` | Akaunti za watumiaji, data nyeti | Mwili wa ombi | Juu (imefichwa) | Hakuna kikomo cha vitendo |
**Kuelewa tofauti za msingi:**
- **GET**: Inaongeza data ya fomu kwenye URL kama vigezo vya maswali (inayofaa kwa operesheni za utafutaji)
- **POST**: Inajumuisha data kwenye mwili wa ombi (muhimu kwa taarifa nyeti)
- **Mipaka ya GET**: Vizuizi vya ukubwa, data inayoonekana, historia ya kivinjari inayodumu
- **Faida za POST**: Uwezo mkubwa wa data, ulinzi wa faragha, msaada wa kupakia faili
> ๐ก **Mazoea Bora**: Tumia `GET` kwa fomu za utafutaji na vichujio (kupata data), tumia `POST` kwa usajili wa watumiaji, kuingia, na kuunda data.
### Usanidi wa Kutuma Fomu
Hebu tusanidi fomu yako ya usajili ili kuwasiliana vizuri na API ya nyuma kwa kutumia njia ya POST:
```html
```
**Kuelewa uthibitishaji ulioboreshwa:**
- **Inachanganya** viashiria vya sehemu za lazima na maelezo ya msaada
- **Inajumuisha** sifa za `pattern` kwa uthibitishaji wa muundo
- **Inatoa** sifa za `title` kwa upatikanaji na vidokezo
- **Inaongeza** maandishi ya msaada kuongoza ingizo la mtumiaji
- **Inatumia** muundo wa HTML wa kimantiki kwa upatikanaji bora
### Kanuni za Uthibitishaji wa Juu
**Kile kila kanuni ya uthibitishaji inakamilisha:**
| Sehemu | Kanuni za Uthibitishaji | Faida kwa Mtumiaji |
|--------|--------------------------|--------------------|
| Jina la mtumiaji | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Inahakikisha vitambulisho halali, vya kipekee |
| Sarafu | `required`, `maxlength="3"`, `pattern="[A-Z$โฌยฃยฅโน]+"` | Inakubali alama za sarafu za kawaida |
| Mizani | `min="0"`, `step="0.01"`, `type="number"` | Huzuia mizani hasi |
| Maelezo | `maxlength="100"` | Vikomo vya urefu vinavyofaa |
### Kupima Tabia ya Uthibitishaji
**Jaribu hali hizi za uthibitishaji:**
1. **Wasilisha** fomu na sehemu za lazima tupu
2. **Ingiza** jina la mtumiaji lenye herufi chini ya 3
3. **Jaribu** herufi maalum kwenye sehemu ya jina la mtumiaji
4. **Ingiza** kiasi cha mizani hasi

**Unachotazama:**
- **Kivinjari kinaonyesha** ujumbe wa uthibitishaji wa asili
- **Mabadiliko ya mitindo** kulingana na hali za `:valid` na `:invalid`
- **Uwasilishaji wa fomu** unazuiwa hadi uthibitishaji wote upite
- **Umakini unahamia** kiotomatiki kwenye sehemu ya kwanza isiyo sahihi
### Uthibitishaji wa Upande wa Mteja dhidi ya Upande wa Seva
```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
```
**Kwa nini unahitaji tabaka zote mbili:**
- **Uthibitishaji wa upande wa mteja**: Hutoa maoni ya haraka na kuboresha uzoefu wa mtumiaji
- **Uthibitishaji wa upande wa seva**: Huhakikisha usalama na hushughulikia sheria ngumu za biashara
- **Njia ya pamoja**: Huunda programu thabiti, rafiki kwa mtumiaji, na salama
- **Uboreshaji wa maendeleo**: Hufanya kazi hata wakati JavaScript imezimwa
> ๐ก๏ธ **Kumbusho la Usalama**: Kamwe usitegemee uthibitishaji wa upande wa mteja pekee! Watumiaji wenye nia mbaya wanaweza kupitisha ukaguzi wa upande wa mteja, kwa hivyo uthibitishaji wa upande wa seva ni muhimu kwa usalama na uadilifu wa data.
---
---
## Changamoto ya Wakala wa GitHub Copilot ๐
Tumia hali ya Wakala kukamilisha changamoto ifuatayo:
**Maelezo:** Boresha fomu ya usajili kwa uthibitishaji wa kina wa upande wa mteja na maoni ya mtumiaji. Changamoto hii itakusaidia kufanya mazoezi ya uthibitishaji wa fomu, ushughulikiaji wa makosa, na kuboresha uzoefu wa mtumiaji kwa maoni ya maingiliano.
**Kichocheo:** Unda mfumo kamili wa uthibitishaji wa fomu kwa fomu ya usajili unaojumuisha: 1) Maoni ya uthibitishaji wa wakati halisi kwa kila sehemu wakati mtumiaji anaandika, 2) Ujumbe wa uthibitishaji maalum unaoonekana chini ya kila sehemu ya ingizo, 3) Sehemu ya uthibitishaji wa nenosiri na uthibitishaji wa kufanana, 4) Viashiria vya kuona (kama alama za kijani kwa sehemu halali na maonyo mekundu kwa sehemu zisizo halali), 5) Kitufe cha kuwasilisha kinachowezeshwa tu wakati uthibitishaji wote unapita. Tumia sifa za uthibitishaji wa HTML5, CSS kwa kupamba hali za uthibitishaji, na JavaScript kwa tabia ya maingiliano.
Jifunze zaidi kuhusu [hali ya wakala](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) hapa.
## ๐ Changamoto
Onyesha ujumbe wa kosa kwenye HTML ikiwa mtumiaji tayari yupo.
Hapa kuna mfano wa jinsi ukurasa wa mwisho wa kuingia unaweza kuonekana baada ya kuongeza mitindo kidogo:

## Jaribio la Baada ya Somo
[Jaribio la baada ya somo](https://ff-quizzes.netlify.app/web/quiz/44)
## Mapitio na Kujisomea
Watengenezaji wamekuwa wabunifu sana kuhusu juhudi zao za kujenga fomu, hasa kuhusu mikakati ya uthibitishaji. Jifunze kuhusu mtiririko tofauti wa fomu kwa kuangalia [CodePen](https://codepen.com); unaweza kupata fomu za kuvutia na za kuhamasisha?
## Kazi
[Pamba programu yako ya benki](assignment.md)
---
**Kanusho**:
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kwa usahihi, tafadhali fahamu kuwa tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati ya asili katika lugha yake ya awali inapaswa kuzingatiwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii.