Część 05 kursu PHP pod kątem INF.03: Formularz: odczyt danych metodą GET. Teoria w skrócie i 16 ćwiczeń z automatycznym sprawdzaniem — odczyt parametrów, rzutowanie typów, htmlspecialchars, paginacja w linkach i zapamiętywanie stanu pól formularza.
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.
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>';
}
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>';
}
Gdzie trafiają dane z GET?
Poprawna: d) Parametry GET dopisują się do adresu po znaku zapytania.
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.
$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>';
$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>';
Co sprawdza isset()?
Poprawna: b) isset() mówi, czy zmienna lub klucz istnieje.
Wszystko, co pochodzi od użytkownika, jest niezaufane. Wypisanie takiej wartości bez zabezpieczenia pozwala wstrzyknąć HTML lub skrypt — to atak XSS.
$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>';
$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>';
Przed czym chroni htmlspecialchars()?
Poprawna: c) Zamienia znaki specjalne na bezpieczne encje.