W budowie
Materiał edukacyjny · Informatyka

CZĘŚĆ 05

Formularz: odczyt danych metodą GET

PPrezentacja dla nauczyciela

Dane z formularza są zawsze tekstem i mogą nie istnieć. Bez zabezpieczenia skrypt wywala się na pierwszym pustym polu.

Formularz i metoda GET

Formularz HTML wysyła dane pod adres podany w atrybucie action, a sposób przesyłania określa method. Przy get dane trafiają do adresu po znaku zapytania, więc widać je w pasku przeglądarki.

Każde pole musi mieć atrybut name — to właśnie ta nazwa staje się kluczem w tablicy $_GET po stronie PHP. Pole bez name nie zostanie wysłane.

Metody GET używamy do wyszukiwania i filtrów, bo wynik można dodać do zakładek. Do haseł i danych zmieniających stan służy POST.

echo '<form method="get" action="">';
echo '<input type="text" name="imie" placeholder="Imie">';
echo '<button type="submit">Wyslij</button>';
echo '</form>';

if (isset($_GET['imie'])) {
    echo '<p>Wpisano: ' . htmlspecialchars($_GET['imie']) . '</p>';
}
1. Gdzie trafiają dane z GET?
2. Co musi mieć każde pole?
3. Do czego służy action?

Odczyt danych i isset

Dane z formularza są w tablicy $_GET (lub $_POST). Odwołujemy się do nich nazwą pola: $_GET['imie']. Jeśli pole nie zostało wysłane, PHP zgłosi ostrzeżenie o nieistniejącym kluczu.

Dlatego najpierw sprawdzamy isset(), a przy pustych polach empty(). Wartość domyślną najprościej ustawić operatorem ??: $imie = $_GET['imie'] ?? '';.

Pamiętaj, że przeglądarka wysyła także ukryte pola i przyciski — każdy element z name znajdzie się w tablicy, o ile nie jest wyłączony.

$imie = isset($_GET['imie']) ? trim($_GET['imie']) : '';
$klasa = $_GET['klasa'] ?? 'brak';

if ($imie === '') {
    echo 'Nie podano imienia';
} else {
    echo 'Uczen: ' . htmlspecialchars($imie);
}

echo '<p>Klasa: ' . htmlspecialchars($klasa) . '</p>';
4. Co sprawdza isset()?
5. Co robi operator ??
6. Czym różni się empty od isset?

Bezpieczne wypisanie danych

Wszystko, co pochodzi od użytkownika, jest niezaufane. Wypisanie takiej wartości bez zabezpieczenia pozwala wstrzyknąć HTML lub skrypt — to atak XSS.

Rozwiązaniem jest htmlspecialchars() z flagami ENT_QUOTES i kodowaniem UTF-8: zamienia znaki specjalne na encje, a przeglądarka pokazuje je jako tekst.

Funkcji używamy przy każdym wypisaniu danych z formularza, bazy czy adresu — także w atrybutach HTML, na przykład w value pola.

$komentarz = '<b>Super!</b> <script>alert(1)</script>';

echo '<p>Bez zabezpieczenia:</p>';
echo '<div>' . $komentarz . '</div>';

echo '<p>Po zabezpieczeniu:</p>';
echo '<div>' . htmlspecialchars($komentarz, ENT_QUOTES, 'UTF-8') . '</div>';
7. Przed czym chroni htmlspecialchars()?
8. Który parametr włącza cudzysłowy?
9. Które dane wymagają zabezpieczenia?

Ćwiczenia