Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

Wprowadzenie do obsługi formularzy w języku PHP

piątek,

Wprowadzenie do obsługi formularzy w języku PHP

Formularze HTML to typowa metoda pobrania danych od użytkownika. Przesłane na serwer informacje może przetworzyć język PHP.

Kod HTML formularza

Dokładniejsze omówienie podstawowych wiadomości o formularzach znajdziesz w materiale „Formularze HTML”. Kluczowe atrybuty znacznika form to method oraz action. Atrybut action określa lokalizację, do której zostanie wysłany formularz, w przypadku jego braku będzie to aktualny adres. Atrybut method definiuje metodę HTTP, która zostanie zastosowana podczas wysyłania. Po pierwsze wybór metody zależy od tego, czego oczekuje serwer. Autor aplikacji może wybrać ją samodzielnie. Metoda POST powinna być wykorzystana przy żądaniach, które wprowadzają trwałe zmiany po stronie serwera, np. przy zakładaniu konta użytkownika wysłane dane zostaną zapisane w bazie danych. Należy z niej korzystać także wtedy, kiedy przesłane dane nie powinny być widoczne w pasku adresu. Druga metoda, GET, to domyślna opcja stosowana przez przeglądarkę, która jest właściwa dla akcji, które nie przynoszą trwałych zmian, np. w formularzu wyszukiwania. Posiada ona ograniczenie związane z maksymalną możliwą długością adresu URL, może zależeć od przeglądarki, oprogramowania i konfiguracji itp. Można założyć, że możliwe jest wysłanie około 150 znaków (trzeba do nich dodać jeszcze adres zasobu).

Z punktu widzenia serwera najważniejszym atrybutem znacznika input jest jego nazwa (name), pozwalająca odebrać dane z właściwego pola.

<form action="" method="get">
  <h3>Obliczanie pola prostokąta</h3>
  <input type="text" name="bokB" placeholder="Bok A">
  <input type="text" name="bokA" placeholder="Bok B">
  <input type="submit" name="t" value="Oblicz">
</form>

Podstawowy kod PHP

Od PHP w wersji PHP 4.1 zmienne przesyłane metodą GET umieszczane są w tablicy superglobalnej o nazwie $_GET. W pierwszej linii kodu skrypt wykrywa czy formularz został przesłany. Jeśli zmienna $_GET['bokA'] istnieje, uruchamiane są instrukcje umieszczone w nawiasie klamrowym.

if(isset($_GET['bokA'])) {
  print_r($_GET);
  echo "Pole powierzni prostokąta wynosi " . $_GET['bokA'] * $_GET['bokB'];
}

Dane odebrane od użytkownika należy bezwzględnie filtrować, jednak materiał stanowi wprowadzenie dla początkujących i w kolejnej przedstawiono jedynie prosty sposób pozwalający zapewnić bezpieczeństwo skryptu. Kod pierwszego przykładu jest odporny na przesyłanie wartości innych niż liczby dzięki operatorowi mnożenia (*), jednak w takim przypadku generuje ostrzeżenia.

Udoskonalony formularz

Nowsze przeglądarki obsługują elementy wprowadzone w HTML5. Nie należy ich traktować jako jakieś zabezpieczenie, łatwo to ominąć, dane z formularza należy sprawdzać po stronie serwera. Do pól formularza dodano atrybut required, blokujący możliwość wysłania niewypełnionego pola. Dodatkowo zmieniono typ pola na number pozwalający wprowadzić jedynie liczby całkowite.

<form action="" method="get">
  <h3>Obliczanie pola prostokąta</h3>
  <input type="number" name="bokB" required placeholder="Bok A">
  <input type="number" name="bokA" required placeholder="Bok B">
  <input type="submit" name="t" value="Oblicz">
</form>
<pre>

Kod PHP został tylko nieznacznie zmodyfikowany. Dzięki zastosowaniu mechanizmu tzw. rzutowania przesłane dane przymusowo konwertowane są na liczby całkowite (zapis (int)$_GET['bokA']). Taka sytuacja nie daje żadnej możliwości wstrzyknięcia niepożądanego kodu. Minusem jest brak informacji dla użytkownika, jeśli błąd zostanie popełniony niechcący, można to przeoczyć. Z drugiej strony pole prostokąta wynoszące zero powinno wzbudzić wątpliwości, jednak użytkownik może uznać, że to błąd skryptu. Lepsze metody radzenia sobie z problemem zapewnienia poprawności danych zostaną przedstawione w kolejnych materiałach.

if(isset($_GET['bokA'])) {
  echo "Pole powierzni prostokąta wynosi " . (int)$_GET['bokA'] * (int)$_GET['bokB'];
}
Artykuł: Zmiana typu pola formularza

Zmiana typu pola formularza

Artykuł: Znacznik label

Znacznik label

Artykuł: Ukrywanie danych wprowadzanych do formularza

Ukrywanie danych wprowadzanych do formularza

Artykuł: Element input typu password

Element input typu password

Artykuł: Zdradziecka ósemka

Zdradziecka ósemka

Artykuł: MS Piłsudski

MS Piłsudski

Nasze technikum

Szkoły dla dorosłych

Pełna oferta edukacyjna