30 dniowy kurs php – dzień 21 – filtrowanie


Back-end (php, mysql)

Filtrowanie służy głównie walidacji. Jeśli tworzysz jakiś formularz i chcesz aby użytkownicy wpisywali poprawne dane musisz przepuścić go przez filtry walidacyjne. Mówiąc po polsku, php sprawdza czy np. wiek jest liczbą a nie literami. Jeśli napotka jakieś błędy użytkownik dostanie informację o błędzie wpisanych danych.

Przydaje się to bardzo szczególnie przy sprawdzaniu adresów e-mail. Niektórzy na początek wpisują testowy ciąg znaków. Później gdy okazuje się, że muszą potwierdzić założenie konta klikając w link wysyłany mailem zakładają konto raz jeszcze. Tym samym naszą bazę z czasem zaśmiecałyby wpisy fikcyjnych użytkowników.

Pora przejść do konkretów. Spójrz na pierwszy przykład:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Filtrowanie</title>
</head>
<body>

<?php
$liczba = '123';
// lub $liczba = 123;
if(!filter_var($liczba, FILTER_VALIDATE_INT))
{
 echo 'Niepoprawna liczba';
}
else
{
 echo 'Właściwa liczba';
}
?>

</body>
</html>

Funkcja filter_var() filtruje zmienną (variable) przez filtr FILTER_VALIDATE_INT, czyli sprawdzający zgodność z liczbą (int, skrót od integer). W powyższym przykładzie dostaniemy informację „Właściwa liczba”, ale spróbuj tylko podstawić w zmiennej $liczba ciąg zawierający litery, a ujrzysz komunikat „Niepoprawna liczba”.

Kolejny przykład. Tym razem dopisujemy jeszcze parametr opcji. Dzięki niemu sprawdzimy czy podana liczba mieści się w przedziale 0 – 256.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Filtrowanie</title>
</head>
<body>

<?php
$liczba = 300;

// tworzymy tablicę z opcjami zasięgu filtrowania
$opcje = array(
'options'=>array
 (
 'min_range' => 0,
 'max_range' => 256
 )
);

// jeśli fitrlowana zmienna nie mieści się w zasięgu zdefiniowanych opcji
if(!filter_var($liczba, FILTER_VALIDATE_INT, $opcje))
 {
 echo('Liczba nie prawidłowa');
 }
else
 {
 echo('Prawidłowa liczba');
 }
?>

</body>
</html>

Spróbuj zmienić zmienną $liczba na mieszczącą się w zasięgu, a ujrzysz odmienny komunikat.

Walidacja adresu e-mail

Stwórzmy prosty jedno plikowy formularz przesyłany metodą POST. Do tego konstrukcja if sprawdzająca czy przesłany został ukryty element o nazwie submit. Jeśli tak wyświetli się informacja o poprawnym, bądź błędnie podanym adresie e-mail.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Filtrowanie</title>
</head>
<body>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
Wpisz adres e-mail: <input type="text" name="email" />
<input type="submit" value="Dalej" />
<input type="hidden" name="submit" value="1" />
</form>

<?php
if(isset($_POST['submit']))
{
 if(empty($_POST['email']))
 {
 echo('Nie wpisałeś adresu e-mail');
 }
 else
 {
 if (!filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL))
 {
 echo 'Błędny adres e-mail';
 }
 else
 {
 echo 'E-mail poprawny';
 }
 }
}
?>

</body>
</html>

W powyższym przykładzie filtrujemy INPUT_POST o nazwie „email” przez filtr FILTER_VALIDATE_EMAIL.

Inny sposób na osiągnięcie tego samego efektu:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>Filtrowanie</title>
</head>
<body>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
Wpisz adres e-mail: <input type="text" name="email" />
<input type="submit" value="Dalej" />
<input type="hidden" name="submit" value="1" />
</form>

<?php
if(isset($_POST['submit']))
{
$email = $_POST['email'];
 if(empty($email))
 {
 echo('Nie wpisałeś adresu e-mail');
 }
 else
 {
 if (!filter_var($email, FILTER_VALIDATE_EMAIL))
 {
 echo 'Błędny adres e-mail';
 }
 else
 {
 echo 'E-mail poprawny';
 }
 }
}
?>

</body>
</html>

W tej lekcji to wszystko. Na koniec proponuję Ci zapoznać się z szerszą gamą nowo poznanych filtrów. Jak zawsze polecam Ci niezastąpioną podczas nauki dokumentację php: