Lekcja 7. Formularze HTML i odbiór danych (GET, POST)
ŚredniPo co się tego uczymy?
Rejestracja, logowanie, wyszukiwarka, dodawanie komentarza — wszystko to zaczyna się od formularza HTML. To jest most między użytkownikiem a Twoim kodem PHP, absolutnie kluczowy dla reszty tego działu (rejestracja, logowanie i koszyk w kolejnych lekcjach bez tego się nie obejdą).
Teoria
Do tej pory dane w skryptach wpisywałeś na sztywno w kodzie. Teraz nauczysz się odbierać dane wpisane przez UŻYTKOWNIKA w formularzu HTML — to jest właśnie moment, w którym strona zaczyna prawdziwie "rozmawiać" z odwiedzającym.
Formularz HTML wysyła dane jedną z dwóch metod:
GET — dane trafiają do adresu URL (widoczne w pasku przeglądarki, np. ?szukaj=matrix). Dobre do wyszukiwania, złe do haseł (widoczne każdemu!).
POST — dane wysyłane są "w tle", niewidoczne w adresie URL. Używany do formularzy logowania, rejestracji, dodawania danych.
W PHP dane z formularza odbierasz przez tablice superglobalne $_GET i $_POST — to zwykłe tablice asocjacyjne, gdzie kluczem jest atrybut name pola formularza.
Ważne: zawsze sprawdzaj funkcją isset(), czy dana w ogóle została przesłana, zanim spróbujesz jej użyć — inaczej PHP zgłosi ostrzeżenie, gdy ktoś wejdzie na stronę bez wypełnienia formularza.
Schemat
Formularz HTML (przeglądarka) PHP (serwer) <input name="email"> <input name="haslo"> ---> $_POST["email"] <button>Zaloguj</button> $_POST["haslo"]
Przykład z życia
Formularz logowania na stronie serwisu filmowego wysyła Twój e-mail i hasło metodą POST do skryptu PHP, który sprawdzi je w bazie danych (nauczysz się tego w Lekcji 15).
Kod (PHP)
<!-- formularz.html lub ten sam plik .php -->
<form action="przetworz.php" method="POST">
<label>Twój e-mail:</label>
<input type="text" name="email"><br>
<label>Wiadomość:</label>
<textarea name="wiadomosc"></textarea><br>
<button type="submit">Wyślij</button>
</form>
// przetworz.php — plik wskazany w action formularza
if (isset($_POST["email"]) && isset($_POST["wiadomosc"])) {
$email = $_POST["email"];
$wiadomosc = $_POST["wiadomosc"];
echo "Dziękujemy, " . $email . "! Otrzymaliśmy wiadomość: " . $wiadomosc;
} else {
echo "Najpierw wypełnij formularz.";
}
Komentarz i wyjaśnienie kodu
Atrybut action="przetworz.php" w formularzu mówi przeglądarce, DOKĄD wysłać dane po kliknięciu przycisku, a method="POST" — JAK je wysłać. Atrybut name="email" na polu tekstowym staje się kluczem w tablicy $_POST po stronie PHP: $_POST["email"]. Warunek isset() na początku pliku przetworz.php sprawdza, czy dane w ogóle dotarły — to zapobiega błędom, gdyby ktoś otworzył ten plik bezpośrednio, bez wypełnienia formularza.
Ćwiczenie samodzielne
Dodaj do formularza trzecie pole (np. "Twój wybrany film") i odbierz jego wartość w pliku przetworz.php.
Zadania do pracy własnej
Stwórz formularz z jednym polem "Twoje imię" i skrypt PHP, który po wysłaniu formularza wypisze "Witaj, [imię]!".
Stwórz formularz wyszukiwania filmów (metoda GET) z jednym polem tekstowym i skrypt PHP, który wypisze "Szukasz filmu: [wpisana fraza]" — zwróć uwagę na pasek adresu przeglądarki po wysłaniu.
Stwórz formularz "Dodaj opinię o filmie" z polami: tytuł filmu, ocena (1-5), treść opinii — i skrypt PHP, który sprawdza (isset) każde pole osobno, a jeśli którekolwiek jest puste, wypisuje komunikat, którego konkretnie pola brakuje.
Typowe błędy
Częsty błąd to niezgodność wartości atrybutu name w formularzu z kluczem użytym w $_POST/$_GET w PHP (literówka sprawia, że dana "nie dociera"). Drugi błąd: użycie $_GET, gdy formularz ma method="POST" (albo odwrotnie) — dane po prostu nie zostaną znalezione. Trzeci: brak sprawdzenia isset() przed użyciem $_POST[...], co powoduje ostrzeżenie przy pierwszym (pustym) wejściu na stronę.
Nawiązanie do egzaminu zawodowego
To bezpośrednia realizacja efektów INF.03.5.3.4 ("definiuje skrypty obsługujące formularze i kontrolki HTML") oraz INF.03.5.4.3-4 ("stosuje metody przesyłania danych z formularza", "programuje wysyłanie danych z formularza HTML") — jeden z najczęściej sprawdzanych elementów w części praktycznej egzaminu INF.03.