Dzisiaj:
empty() sprawdza, czy pole formularza zostało wypełnionefilter_var() z FILTER_VALIDATE_EMAIL sprawdza, czy adres e-mail ma poprawną formęcontact.php o te dwa sprawdzeniamethod="get" od method="post"?$_POST?empty()Na poprzedniej lekcji contact.php ufał każdemu, kto wyśle formularz - nawet pustemu. Funkcja empty() sprawdza, czy zmienna nie istnieje albo ma wartość traktowaną jak „pusta” (pusty tekst, 0, null). Zwraca true albo false i, co ważne, nie zgłasza ostrzeżenia, gdy zmienna w ogóle nie istnieje.
filter_var() z FILTER_VALIDATE_EMAILempty() sprawdza tylko, czy coś w polu w ogóle jest - nie sprawdza, czy to, co jest, ma sensowną formę. Do adresu e-mail służy filter_var(): dostaje wartość i filtr FILTER_VALIDATE_EMAIL. Gdy adres ma poprawną formę, zwraca ten adres. Gdy forma jest zła, zwraca false.
Ciekawostka z PHP Manual: filter_var() z FILTER_VALIDATE_EMAIL tylko sprawdza dane, nigdy ich nie zmienia. PHP ma osobno filtry sanitujące, np. FILTER_SANITIZE_EMAIL - on usuwa z adresu niedozwolone znaki, ale nie sprawdza, czy wynik jest poprawnym e-mailem. To dwie różne operacje w tym samym rozszerzeniu filter.
false przy niepowodzeniu · php.net/manual/en/function.filter-var.php · ciekawostka: PHP Manual, „A validation filter is used to check if the data meets certain criteria. […] it will never alter the input data” i „Sanitization […] may alter the input data by adding or removing characters. […] the sanitized data is not validated to check if it is a valid email address” · php.net/manual/en/book.filter.phpOba sprawdzenia łączymy w jednym pliku contact.php: najpierw empty() dla imienia, potem filter_var() dla e-maila. Dopiero gdy oba przejdą, skrypt pokazuje podziękowanie - w każdym innym przypadku pokazuje komunikat błędu i kończy.
contact.php// contact.html: dochodzi trzecie pole
<input type="email" name="userEmail">
// contact.php
if (empty($_POST["userName"])) {
echo "Pole \"Imię\" jest wymagane.";
} else {
$email = filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL);
if ($email === false) {
echo "Podaj poprawny adres e-mail.";
} else {
echo "Dziękujemy, " . $_POST["userName"] . "! Odpiszemy na " . $email;
}
}
// puste userName: Pole "Imię" jest wymagane.
// zły e-mail: Podaj poprawny adres e-mail.
// poprawne dane: Dziękujemy, Jan! Odpiszemy na jan@example.com
1. if (empty($_POST["name"])) { $nameErr = "Name is required"; } Przedstawiony fragment kodu PHP służy do obsługi
2. Witryna internetowa wysyła dane poufne za pomocą formularza do kodu PHP. Która metoda wysłania jest najbardziej bezpieczna?
contact.html dodaj trzecie pole: <input type="email" name="userEmail">.contact.php dodaj empty() dla każdego z trzech pól (userName, userMessage, userEmail) - każde puste pole ma dać osobny komunikat błędu.filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL) - gdy adres jest niepoprawny, pokaż komunikat błędu zamiast dziękowania.@), poprawne dane.Ma się pojawić: przy pustym polu albo złym e-mailu - komunikat błędu; przy poprawnych danych - „Dziękujemy, [imię]! Odpiszemy na [e-mail]”.
// contact.php
if (empty($_POST["userName"])) {
echo "Pole \"Imię\" jest wymagane.";
} elseif (empty($_POST["userMessage"])) {
echo "Pole \"Wiadomość\" jest wymagane.";
} else {
$email = filter_var($_POST["userEmail"], FILTER_VALIDATE_EMAIL);
if ($email === false) {
echo "Podaj poprawny adres e-mail.";
} else {
echo "Dziękujemy, " . $_POST["userName"] . "! Odpiszemy na " . $email;
}
}
// przy userName="", userEmail=jan@example.com: Pole "Imię" jest wymagane.
// przy userName=Jan, userEmail=janek-at-example: Podaj poprawny adres e-mail.
// przy userName=Jan, userEmail=jan@example.com: Dziękujemy, Jan! Odpiszemy na jan@example.com
empty($field), gdy zmienna $field w ogóle nie istnieje?filter_var($e, FILTER_VALIDATE_EMAIL), gdy $e ma niepoprawną formę?empty() musi być przed dalszym przetwarzaniem danych, nie po nim?To była druga i ostatnia lekcja tematu formularzy.
| Na lekcji | W produkcji | Status |
|---|---|---|
empty() i filter_var() wywołane ręcznie, jedno po drugim | Frameworki (np. Laravel) mają gotowe klasy walidacji z regułami typu required, email, deklarowanymi w jednym miejscu zamiast ciągu if. | zastępowane (frameworkiem) |
Komunikat błędu wypisany przez echo jako sam tekst | Formularz po błędzie zwykle wraca z podświetlonym polem i komunikatem obok niego, z zachowaniem tego, co użytkownik już wpisał. | nadal w użyciu (rozbudowane o UX) |
| Sprawdzana tylko forma adresu e-mail | Poprawna forma nie znaczy, że skrzynka istnieje - do tego służy osobno wysłany e-mail z linkiem potwierdzającym. | nadal w użyciu (jako dodatkowy krok) |