Formularze i kontrolki standardowe

Formularze i kontrolki standardowe

Wstęp teoretyczny

W poprzedniej lekcji nauczyliśmy się tworzyć proste formularze oraz odbierać dane w PHP. W tej części zajmiemy się:

  1. Walidacją danych – sprawdzaniem, czy dane zostały poprawnie wprowadzone.
  2. Filtrowaniem danych – oczyszczaniem danych z niepożądanych znaków.
  3. Bezpieczeństwem – ochrona przed atakami (np. XSS).
  4. Udoskonalonymi kontrolkami – np. select, textarea, file upload.

Dlaczego to ważne?

  • Użytkownik może popełnić błąd (np. wpisać tekst zamiast liczby).
  • Niektórzy użytkownicy mogą próbować „oszukać” formularz, aby uszkodzić stronę lub uzyskać dostęp do poufnych danych.
  • Bezpieczna i poprawna obsługa formularzy to podstawa w każdej aplikacji internetowej.

Walidacja danych w PHP

PHP umożliwia sprawdzanie, czy dane są poprawne.

1. Sprawdzenie, czy pole nie jest puste i czy istnieje

<?php
if (empty($_POST['imie'])) {
    echo "Pole 'Imię' nie może być puste!";
}
?>
<?php
if (isset($_POST['imie'])) {

} else {
     echo "Pole 'Imię' nie może być puste!";
}
?>

2. Walidacja liczby

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

if (filter_var($wiek, FILTER_VALIDATE_INT)) {
    echo "Twój wiek: $wiek";
} else {
    echo "Podaj poprawny wiek (liczba całkowita)!";
}
?>

3. Walidacja adresu e-mail

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

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "Adres e-mail poprawny: $email";
} else {
    echo "Błędny adres e-mail!";
}
?>

Filtrowanie danych (oczyszczanie)

Aby zabezpieczyć stronę przed atakami (np. XSS – Cross Site Scripting), dane wprowadzone przez użytkownika trzeba filtrować:

<?php
$imie = htmlspecialchars($_POST['imie']); 
echo "Twoje imię: $imie";
?>

htmlspecialchars() zamienia np. script na , dzięki czemu nie uruchomi się złośliwy kod.


Dodatkowe kontrolki formularzy

1. Select (lista rozwijana)

<form action="odbierz.php" method="post">
    Wybierz kraj:
    <select name="kraj">
        <option value="PL">Polska</option>
        <option value="DE">Niemcy</option>
        <option value="FR">Francja</option>
    </select>
    <input type="submit" value="Wyślij">
</form>

2. Textarea (pole wielowierszowe)

<form action="odbierz.php" method="post">
    Napisz coś o sobie:<br>
    <textarea name="opis" rows="5" cols="40"></textarea><br>
    <input type="submit" value="Wyślij">
</form>

3. Upload pliku

<form action="odbierz.php" method="post" enctype="multipart/form-data">
    Wybierz plik: 
    <input type="file" name="plik"><br>
    <input type="submit" value="Wyślij">
</form>

Odbieranie w PHP:

<?php
if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
    echo "Plik został przesłany: " . $_FILES['plik']['name'];
} else {
    echo "Błąd przy przesyłaniu pliku.";
}
?>

Zadania dla uczniów

Zadanie 1. Stwórz formularz rejestracyjny z polami: imię, e-mail, hasło. Następnie w PHP:

  • sprawdź, czy pola nie są puste,
  • sprawdź, czy e-mail jest poprawny,
  • jeśli wszystko jest poprawne, wyświetl komunikat: „Rejestracja zakończona sukcesem”.

Zadanie 2. Stwórz formularz, w którym użytkownik wybiera:

  • ulubiony język programowania (lista rozwijana),
  • krótką opinię o programowaniu (textarea),
  • przesyła plik (np. zdjęcie).

Napisz skrypt PHP, który:

  • wyświetli podane dane,
  • sprawdzi, czy przesłano plik,
  • w razie braku pliku wyświetli komunikat „Nie wybrano pliku”.