0Pricing
PHP Academy · Lekcja

Techniki walidacji danych wejściowych

Sprawdzaj wymagane pola, typy i długości przed przetwarzaniem

Techniki walidacji danych wejściowych to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Dlaczego należy walidować dane wejściowe

Nigdy nie należy ufać danym od użytkowników. Walidacja zapewnia, że dane spełniają wymagania, zanim zostaną przetworzone. Zapobiega:

  • błędom bazy danych wynikającym z nieprawidłowych typów
  • błędom logiki biznesowej spowodowanym nieoczekiwanymi wartościami
  • lukom w zabezpieczeniach wynikającym ze złośliwych danych wejściowych

Sprawdzanie wymaganych pól

Należy sprawdzić, czy wymagane pola nie są puste po usunięciu białych znaków:

<?php
$errors = [];
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');

if (empty($name)) {
    $errors['name'] = 'Name is required';
}
if (empty($email)) {
    $errors['email'] = 'Email is required';
}

if (!empty($errors)) {
    // show errors
}

Walidacja typów

Przed użyciem wartości należy sprawdzić, czy mają oczekiwany typ:

<?php
$age = $_POST['age'] ?? '';

// Method 1: filter_var
$validAge = filter_var($age, FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 1, 'max_range' => 120]
]);

if ($validAge === false) {
    $errors[] = 'Age must be a number between 1 and 120';
}

Walidacja adresów e-mail

Adresy e-mail należy walidować za pomocą filtra FILTER_VALIDATE_EMAIL:

<?php
$email = trim($_POST['email'] ?? '');

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Invalid email address';
}

// Also check domain has MX record for extra validation
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    [$user, $domain] = explode('@', $email);
    if (!checkdnsrr($domain, 'MX')) {
        $errors[] = 'Email domain not found';
    }
}

Walidacja długości ciągu znaków

Należy wymusić minimalną i maksymalną długość ciągów znaków:

<?php
$username = trim($_POST['username'] ?? '');

$len = mb_strlen($username);

if ($len < 3) {
    $errors[] = 'Username must be at least 3 characters';
}
if ($len > 30) {
    $errors[] = 'Username must be at most 30 characters';
}

Walidacja na podstawie listy dozwolonych wartości

Należy sprawdzać dane względem dozwolonego zestawu wartości (listy dozwolonych wartości), zamiast próbować blokować nieprawidłowe wartości:

<?php
$allowedRoles  = ['admin', 'editor', 'viewer'];
$allowedSorts  = ['name', 'date', 'price'];

$role = $_POST['role'] ?? '';
$sort = $_GET['sort']  ?? 'name';

if (!in_array($role, $allowedRoles, true)) {
    $errors[] = 'Invalid role selected';
}

// Default to 'name' if sort value invalid
if (!in_array($sort, $allowedSorts, true)) {
    $sort = 'name';
}

Walidacja adresów URL i IP

Adresy URL i adresy IP należy walidować za pomocą wbudowanych filtrów:

<?php
$url = $_POST['website'] ?? '';
$ip  = $_POST['ip']      ?? '';

if (!filter_var($url, FILTER_VALIDATE_URL)) {
    $errors[] = 'Invalid URL';
}

if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
    $errors[] = 'Invalid IPv4 address';
}

Walidacja wzorca za pomocą wyrażeń regularnych

Do walidacji niestandardowego formatu należy użyć funkcji preg_match():

<?php
$phone = preg_replace('/[^0-9+]/', '', $_POST['phone'] ?? '');

// Validate format: +1234567890
if (!preg_match('/^\+?[0-9]{7,15}$/', $phone)) {
    $errors[] = 'Invalid phone number';
}

// Validate date format YYYY-MM-DD
$date = $_POST['date'] ?? '';
if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) {
    $errors[] = 'Date must be in YYYY-MM-DD format';
}

Walidacja daty

Należy sprawdzić, czy ciąg znaków reprezentuje rzeczywistą datę kalendarzową:

<?php
function isValidDate(string $date, string $format = 'Y-m-d'): bool {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) === $date;
}

var_dump(isValidDate('2024-02-29'));  // true (2024 is leap year)
var_dump(isValidDate('2023-02-29'));  // false (not a leap year)
var_dump(isValidDate('2024-13-01'));  // false (no month 13)

Walidacja przesyłanych plików

Przesyłane pliki należy walidować pod kątem typu, rozmiaru i kodu błędu:

<?php
$file = $_FILES['photo'] ?? null;

if ($file) {
    if ($file['error'] !== UPLOAD_ERR_OK) {
        $errors[] = 'Upload failed with error: ' . $file['error'];
    } elseif ($file['size'] > 2 * 1024 * 1024) {
        $errors[] = 'File exceeds 2MB limit';
    } elseif (!in_array(mime_content_type($file['tmp_name']), ['image/jpeg', 'image/png'])) {
        $errors[] = 'Only JPEG and PNG files allowed';
    }
}

Wyświetlanie błędów walidacji

Błędy należy wyświetlać bezpośrednio obok pól formularza, zachowując jednocześnie wartości wprowadzone przez użytkownika:

<?php
// Preserve entered values:
$name = htmlspecialchars($_POST['name'] ?? '');
?>
<form method="POST">
    <input name="name" value="<?= $name ?>">
    <?php if (isset($errors['name'])): ?>
        <p class="error"><?= htmlspecialchars($errors['name']) ?></p>
    <?php endif; ?>
    <button type="submit">Submit</button>
</form>

Szybkie sprawdzenie

Na czym polega podejście oparte na liście dozwolonych wartości?

Podsumowanie: walidacja danych wejściowych

Najlepsze praktyki walidacji:

  • sprawdzanie wymaganych pól po użyciu trim()
  • używanie filter_var() do walidacji typu i formatu
  • umieszczanie dozwolonych wartości na liście za pomocą in_array()
  • używanie preg_match() do niestandardowych wzorców
  • walidowanie przesyłanych plików: kodu błędu, rozmiaru i typu MIME
  • zachowywanie danych użytkownika podczas ponownego wyświetlania formularzy z błędami

Często zadawane pytania

Czy lekcja „Techniki walidacji danych wejściowych” jest bezpłatna?

Tak — pełny tekst „Techniki walidacji danych wejściowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Techniki walidacji danych wejściowych”?

Sprawdzaj wymagane pola, typy i długości przed przetwarzaniem Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Techniki walidacji danych wejściowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. GET a POST: kiedy używać każdej metody
  2. Odczytywanie danych formularza za pomocą superglobalnych
  3. Techniki walidacji danych wejściowych
  4. Oczyszczanie danych wejściowych użytkownika
← Powrót do PHP Academy