Formularze HTML i Przesyłanie Danych do PHP

INF.03.7 (2) — Tworzenie interaktywnych aplikacji serwerowych

Klucz Elementy Formularza

Aby formularz HTML wysłał dane do skryptu PHP, wymagane są dwa kluczowe atrybuty tagu <form>:

  • action: Określa ścieżkę do pliku PHP, który ma przetwarzać dane (np. action="przetworz.php").
  • method: Definiuje metodę przesyłania danych (zazwyczaj GET lub POST).
  • Pola: Każde pole formularza (<input>, <select>, <textarea>) musi mieć atrybut name, który stanie się kluczem w tablicy PHP.
<form action="przetworz.php" method="POST">
    Imię: <input type="text" name="imie" required><br>
    Wiek: <input type="number" name="wiek"><br>
    <button type="submit">Wyślij</button>
</form>

PHP Odbieranie Danych (Superglobale)

PHP udostępnia specjalne tablice superglobalne, które automatycznie przechowują dane przesłane przez użytkownika.

1. $_POST

Używane, gdy method="POST". Dane są przesyłane w treści żądania HTTP i nie są widoczne w pasku adresu.

// Plik: przetworz.php
<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        // Pobieramy wartość pola 'imie'
        $imie = $_POST['imie'];
        echo "Witaj, $imie! Twoje dane zostały przesłane bezpiecznie.";
    }
?>

2. $_GET

Używane, gdy method="GET" (lub gdy nie podano metody). Dane są dołączane do adresu URL jako ciąg zapytania.

// Przykładowy URL: index.php?strona=3&sortuj=cena
<?php
    // Pobieramy wartość parametru 'strona'
    $numer_strony = $_GET['strona'];
    echo "Wyświetlam stronę numer $numer_strony.";
?>
Bezpieczeństwo! Nigdy nie ufaj danym przychodzącym od użytkownika. Zawsze używaj htmlspecialchars() przed wyświetleniem danych na stronie, aby zapobiec atakom XSS.

Walidacja Sprawdzanie i Filtrowanie

Walidacja to proces sprawdzania, czy dane przesłane przez użytkownika są poprawne, kompletne i bezpieczne.

1. Sprawdzanie, czy dane istnieją (isset)

Zanim użyjesz zmiennej superglobalnej, upewnij się, że pole zostało przesłane, aby uniknąć błędów.

<?php
    if (isset($_POST['imie'])) {
        $imie_bezpieczne = htmlspecialchars($_POST['imie']);
        echo "Wprowadzono imię: $imie_bezpieczne";
    } else {
        echo "Nie wprowadzono imienia.";
    }
?>

2. Przetwarzanie różnych typów pól (Checkboxy)

Do obsługi wielu zaznaczeń użyj nazwy z nawiasami kwadratowymi, wtedy PHP utworzy tablicę.

<!-- HTML -->
<input type="checkbox" name="zainteresowania[]" value="sport"> Sport
<input type="checkbox" name="zainteresowania[]" value="muzyka"> Muzyka
<input type="checkbox" name="zainteresowania[]" value="technologia"> Technologia

<?php
// PHP - Plik przetwarzający
    if (isset($_POST['zainteresowania'])) {
        $wybrane_zainteresowania = $_POST['zainteresowania'];
        echo "Wybrano: " . implode(", ", $wybrane_zainteresowania);
    } else {
        echo "Nie wybrano żadnych zainteresowań.";
    }
?>

Ćwiczenie Zadania Praktyczne

Zadanie 1: Formularz Logowania (Podstawowe)

Utwórz formularz HTML z polami "login" i "haslo", który wysyła dane do tego samego pliku.

Zadanie 2: Formularz Rejestracji i Walidacja (Ponadpodstawowe)

Utwórz formularz z polami: imię (text), wiek (number), newsletter (checkbox).

Rozwiązania Formularz Logowania i Rejestracji

Rozwiązanie Zadania 1: Formularz Logowania

Przykład jednego pliku login.php, który wyświetla formularz i przetwarza dane po wysłaniu.

<?php
// login.php
$komunikat = "";

if ($_SERVER["REQUEST_METHOD"] === "POST") {
    if (!empty($_POST["login"])) {
        $login_bezpieczny = htmlspecialchars($_POST["login"]);
        $komunikat = "Pomyślnie przesłano dane logowania dla: " . $login_bezpieczny;
    } else {
        $komunikat = "Pole login nie może być puste.";
    }
}
?>




    
    Formularz logowania


    <h2>Formularz logowania</h2>

    <form action="" method="POST">
        Login: <input type="text" name="login"><br>
        Hasło: <input type="password" name="haslo"><br>
        <button type="submit">Zaloguj</button>
    </form>

    <p><?php echo $komunikat; ?></p>

Rozwiązanie Zadania 2: Formularz Rejestracji + Walidacja

Przykład prostego formularza z komunikatami błędów oraz informacją o newsletterze.

<?php
// rejestracja.php
$blad_imie = "";
$blad_wiek = "";
$komunikat_newsletter = "";
$komunikat_sukces = "";

if ($_SERVER["REQUEST_METHOD"] === "POST") {

    // IMIĘ
    if (empty($_POST["imie"])) {
        $blad_imie = "Imię jest wymagane.";
    } else {
        $imie = htmlspecialchars($_POST["imie"]);
    }

    // WIEK
    if (isset($_POST["wiek"]) && $_POST["wiek"] !== "") {
        $wiek = (int) $_POST["wiek"];
        if ($wiek < 18) {
            $blad_wiek = "Musisz być pełnoletni.";
        }
    } else {
        $blad_wiek = "Wiek jest wymagany.";
    }

    // NEWSLETTER
    if (isset($_POST["newsletter"])) {
        $komunikat_newsletter = "Zapisano do newslettera.";
    } else {
        $komunikat_newsletter = "Nie zapisano do newslettera.";
    }

    // Jeśli brak błędów
    if ($blad_imie === "" && $blad_wiek === "") {
        $komunikat_sukces = "Dane poprawne. Użytkownik: " . $imie . " (" . $wiek . " lat).";
    }
}
?>




    
    Formularz rejestracji


    <h2>Formularz rejestracji</h2>

    <form action="" method="POST">
        Imię: <input type="text" name="imie">
        <span style="color:red"><?php echo $blad_imie; ?></span>
        <br>

        Wiek: <input type="number" name="wiek">
        <span style="color:red"><?php echo $blad_wiek; ?></span>
        <br>

        Newsletter: 
        <label>
            <input type="checkbox" name="newsletter"> Chcę otrzymywać newsletter
        </label>
        <br>

        <button type="submit">Zarejestruj</button>
    </form>

    <p><?php echo $komunikat_sukces; ?></p>
    <p><?php echo $komunikat_newsletter; ?></p>

Materiały Narzędzia i Linki

Materiały: Formularze HTML i PHP · Opracowanie na podstawie wymagań INF.03 | Autor: Tomasz Puchała (toloki.pl)