Nakon ovog poglavlja
Što ćete znati napraviti
- Razlikovati validaciju, normalizaciju i output escaping.
- Prikupiti korisne pogreške po polju.
- Validirani ulaz pretvoriti u tipizirani podatak.
Ne miješajte pojmove
Normaliziraj, validiraj, escapaj
Normalizacija uklanja očekivanu površinsku razliku, primjerice razmake oko e-mail adrese. Validacija odlučuje zadovoljava li vrijednost pravila. Escaping se radi tek pri izlazu i ovisi o kontekstu: HTML tekst, atribut, URL, JavaScript i SQL nisu isti konteksti.
Ne „čistimo“ proizvoljan loš unos dok ne postane valjan jer time možemo promijeniti korisnikovo značenje. Radije odbijemo vrijednost i objasnimo očekivani oblik.
Korisnik mora znati što popraviti
Prikupite sve razumne pogreške
Validacija forme vraća strukturirano polje pogrešaka. Poslovna pravila poput jedinstvenog e-maila ili dopuštenog datuma provjeravaju se uz sintaktička pravila. Poruke trebaju biti konkretne i povezane s poljem.
<?php
$email = trim((string) ($_POST['email'] ?? ''));
$errors = [];
if ($email === '') {
$errors['email'] = 'E-mail je obavezan.';
} elseif (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
$errors['email'] = 'Upišite valjanu e-mail adresu.';
}
Nakon granice
Ostatak aplikacije dobiva poznat oblik
Kada je sirovi unos valjan, pretvaramo ga u int, enum, datum ili DTO. Tako repozitorij i poslovni sloj ne primaju $_POST nego pouzdaniji ugovor. Validacija na klijentu ostaje dodatak za brz odaziv, ne jedina zaštita.
<?php
$rawAge = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if (!is_int($rawAge) || $rawAge < 18 || $rawAge > 120) {
$errors['age'] = 'Dob mora biti između 18 i 120.';
}
if ($errors === []) {
$command = new RegisterUserData($email, $rawAge);
}
Primijenite naučeno
Vježba: Registracijski unos
Validirajte ime, e-mail, dob i prihvat uvjeta korištenja.
- Prikupite poruke po polju bez zaustavljanja na prvoj pogrešci.
- Sačuvajte sigurne unesene vrijednosti nakon pogreške.
- Nakon uspjeha napravite tipizirani DTO.
Za provjeru i nastavak