Walidacja danych z formularza

Walidacja danych z formularza w PHP ma na celu sprawdzenie poprawności wprowadzonych informacji oraz zabezpieczenie aplikacji przed niepożądanymi danymi (np. atakami XSS, SQL Injection). Warto stosować odpowiednie filtrowanie, sprawdzanie formatów i funkcje takie jak htmlspecialchars.


Kluczowe aspekty walidacji i funkcja htmlspecialchars

  • Filtrowanie i sprawdzanie formatu
    • Sprawdź, czy pola nie są puste. Jeśli pole jest obowiązkowe, zwróć błąd, gdy brak danych.
    • W przypadku emaila możesz użyć filter_var($email, FILTER_VALIDATE_EMAIL).
    • Dla liczb filter_var($liczba, FILTER_VALIDATE_INT) lub is_numeric().
  • Zabezpieczenie przed XSS (Cross-Site Scripting)
    • Funkcja htmlspecialchars($dane) konwertuje znaczniki HTML (np. <, >, &) do encji, uniemożliwiając wstrzyknięcie złośliwego kodu.
    • Stosuj ją przy wyświetlaniu danych z formularza – np. echo htmlspecialchars($login);.
  • Obsługa błędów i komunikatów
    • Warto zbierać błędy w tablicy (np. $errors) i wyświetlać je użytkownikowi, jeśli walidacja nie przejdzie.
Przykład
<h3>Formularz rejestracji</h3>
<form action="" method="post">
  <label>Login: <input type="text" name="login"></label><br>
  <label>E-mail: <input type="text" name="email"></label><br>
  <button type="submit">Wyślij</button>
</form>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $login = $_POST['login'] ?? '';
  $email = $_POST['email'] ?? '';
  $errors = [];

  // Sprawdzenie pustych pól
  if (empty($login)) {
    $errors[] = "Pole Login nie może być puste.";
  }
  if (empty($email)) {
    $errors[] = "Pole E-mail nie może być puste.";
  }

  // Walidacja e-maila
  if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = "Podano niepoprawny adres e-mail.";
  }

  // Wyświetlanie wyników
  if ($errors) {
    echo "<ul style='color:red;'>";
    foreach ($errors as $err) {
      echo "<li>$err</li>";
    }
    echo "</ul>";
  } else {
    // Używamy htmlspecialchars przy wyświetlaniu
    $safeLogin = htmlspecialchars($login);
    $safeEmail = htmlspecialchars($email);
    echo "<p>Login: $safeLogin</p>";
    echo "<p>E-mail: $safeEmail</p>";
  }
}
?>
Zwrócona zawartość
[Formularz rejestracji]
Po wypełnieniu:
- W razie błędów: Lista w kolorze czerwonym
- W razie sukcesu: Wyświetlony login i email w bezpiecznej formie

Przykładowe zastosowania walidacji

  • Rejestracja/logowanie użytkownika
    • Sprawdzanie poprawnego formatu emaila, unikanie pustych pól, filtrowanie znaków.
  • Formularze kontaktowe
    • Weryfikacja, czy podano adres email, temat, treść, użycie htmlspecialchars przy wyświetlaniu podsumowania.
  • System komentarzy
    • Zapobieganie wstrzykiwaniu skryptów (XSS) i sprawdzanie długości wiadomości.

Podsumowanie

  • Walidacja formularzy w PHP pozwala uniknąć niepoprawnych czy złośliwych danych.
  • Funkcje takie jak filter_var czy is_numeric pomagają sprawdzać format.
  • Stosowanie htmlspecialchars przy wyświetlaniu chroni przed atakami XSS.
  • Warto zbierać błędy w tablicy i wyświetlać użytkownikowi w czytelny sposób.