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>';
}
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>';
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>';
Ćwiczenia
- 1Odczyt parametru kategoriaodczyt jednego parametruZadanie i podpowiedzi →
- 2Powitanie z wartością domyślnądomyślne imię GośćZadanie i podpowiedzi →
- 3Bezpieczne wyświetlanie frazyescapowanie frazy z adresuZadanie i podpowiedzi →
- 4Filtr rocznika z GETpuste pole i wartość domyślnaZadanie i podpowiedzi →
- 5Weryfikacja wieku i rzutowanierzutowanie wieku na liczbęZadanie i podpowiedzi →
- 6Rata miesięczna z GETobliczenie z dwóch pólZadanie i podpowiedzi →
- 7Kalkulator rabatu z GETkalkulator rabatu z adresuZadanie i podpowiedzi →
- 8Wybór stronyparametr strony w adresieZadanie i podpowiedzi →
- 9Przełącznik widoku w linkachprzełącznik widoku linkamiZadanie i podpowiedzi →
- 10Wyszukiwanie po literzefiltr po literze z GETZadanie i podpowiedzi →
- 11Zapamiętanie wpisanej frazy (sticky input)zapamiętanie frazy w poluZadanie i podpowiedzi →
- 12Dwie wartości w adresiedwa parametry w adresieZadanie i podpowiedzi →
- 13Formularz przeliczania jednostek z pamięciąprzelicznik metrów na cmZadanie i podpowiedzi →
- 14Wybór sortowania z walidacjąwalidacja wyboru instrukcją ifZadanie i podpowiedzi →
- 15Utrzymaj wybór opcjizaznaczona opcja po wysłaniuZadanie i podpowiedzi →
- 16Kompletna wyszukiwarka z filtrem kategoriiwyszukiwarka z filtremZadanie i podpowiedzi →