Podstawy PHP i MySQL
Temat 2 - Przekazywanie zmiennych z formularza
metodą GET i POST

Powrót do spisu tematów


W tym rozdziale:

  1. Powtórzenie wiadomości o budowie formularza (HTML)
  2. Odbieranie zmiennych w pliku php przesłanych z formularza
  3. Wyjaśnienie różnic między metodą GET i POST
Przekazywanie zmiennych - uwagi ogólne

Podstawą dynamiczności witryny WWW jest jej interakcja z użytkownikiem. Tak więc użytkownik ma możliwoć wprowadzania wartości, które zostaną przeanalizowane przez skrypt. Program zachowa się odpowiednio do otrzymanych wartości.

Ponieważ analiza wartości wprowadzonych przez użytkownika odbywa się po stornie serwera, potrzebne jest narzędzie umożliwiające przesłanie zmiennych na serwer. Jednym z nich jest formularz.

Budowa formularza (powtórzenie z HTML)

Pliki wyświetlające formularz mogą mieć rozszerzenie html i nie muszą zawierać kodu PHP.
Klasyczny formularz składa się z następujących części

  • Deklaracja (np. <form method="POST" action="plik.php">)

  • Pola (tekstowe, wyboru, obszar tekstowy),

  • Przycisk aktywujący wysłanie formularza (<input type="submit">)

  • Zako?czenie formularza (</form>).

Formularz może wysyłać zmienne korzystając z dwóch metod: POST i GET.

Metoda GET - służy do przesyłania małej ilości zmiennych o krótkiej zawartości.
Nazwy zmiennych oraz ich wartości są widoczne w pasku adresu
stąd metoda ta nie nadaje się do przesyłania informacji niejawnych (np. haseł) !!!!

Metoda POST - nie ma ogranicze? co do ilości zmiennych oraz ich zawartości (teoretycznie).
Przesyłane zmienne i ich wartości nie są umieszczane w widocznym miejscu (np. pasek adresu), co utrudnia (tylko trochę :) ) ich podejrzenie.
Umożliwia przesyłanie plików na serwer.
Minusem tej metody jest utrudniony powrót do strony za pomocą klawisza "wstecz" przeglądarki.

Parametr action określa, do jakiego pliku zostaną wysłane zmienne formularza.

Podstawowe pola formularzy

  1. Pole tekstowe <input type="text" name="nazwa">
    Parametr "name" określa nazwę zmiennej, która zostanie przekazana. Wartość parametru "name" musi więc być podporządkowana regułom nazywania zmiennych w PHP (nie może zaczynać się od cyfry, można wykorzystać tylko litery alfabetu łaci?skiego oraz cyfry).
    Parametr "value" (użycie opcjonalne) - wyświetla domyślny tekst w polu tekstowym, np.
    <input type="text" name="nazwa" value="tekst domyślny">
    Parametr "size" określa wymiary pola tekstowego
    <input type="text" name="T3" size="50">
     

  2. Pole hasła <input type="password" name="nazwa" size="20">
    Jest to takie same pole jak wyżej opisane tekstowe. Jedyna różnica polega na tym, że użytkownik nie widzi wartości wpisanej. Wartość wpisywana w takie pole nie jest również automatycznie zapisywana przez przeglądarkę.
    Pole to stosuje się w miejscach, gdzie wymagane jest podanie hasła.
     

  3. Pole radio <input type="radio" name="nazwa" value="1">
    Parametr "value" (użycie obowiązkowe) określa, jaka zostanie wysłana wartość zmiennej "nazwa", gdy zostanie wybrany ten przycisk formularza.
    Pola radio pracują w grupach, tzn. zaznaczenie jednego z pól z jednej grupy powoduje automatyczne odznaczenie innych pól radio z tej samej grupy, np. pole 1 pole 2
    <input type="radio" name="grupa" value="1">pole 1
    <input type="radio" name="grupa" value="2">pole 2

    Jeżeli chcemy, aby któreś z pól było domyślnie zaznaczone, wyposażamy je w dodatkowy parametr checked
    pole 1 pole 2
    <input type="radio" name="grupa" value="1" checked>pole 1
    <input type="radio" name="grupa" value="2">pole 2
     

  4. Pola checkbox <input type="checkbox" name="nazwa" value="przekazywana wartość">
    Pola checkbox nie pracują w grupie, lecz każde z osobna.
     

  5. Pole rozwijalne
    <select size="1" name="nazwa">
    <option value="wartość przekazana 1">Opcja 1</option>
    <option value="wartość przekazana 2">Opcja 2</option>
    </select>

    Pola te umożliwiają wybór opcji z podanych w polu.
     

  6. Obszar tekstowy
    <textarea name="nazwa" cols="20" rows="2"></textarea>
    Pole tego typu jest przygotowane na odebranie od użytkownika strony większych fragmentów tekstu.
    Parametr cols określa liczbę kolumn (szerokość pola)
    Parametr rows określa liczbę wierszy (wysokość pola)
    Tego typu pole nie ma parametru value.
     

  7. Ukryte pola formularzy
    Pola tego typu przekazują wartość zmiennej, wartości nie są jednak wyświetlane użytkownikowi w sposób jawny.
    <input type="hidden" name="nazwa" value="przekazana wartość">
     

  8. Przycisk kasowania zawartości formularza
    <input type="reset" value="Resetuj" name="nazwa">
    Jeżeli użytkownik chce od nowa wypełnić formularz, można mu to umożliwić umieszczając przycisk kasowania zawartości.
     

  9. Przycisk wysłania zmiennych (zaakceptowania formularza)
    <input type="submit" value="Prześlij" name="nazwa">
    Gdy użytkownik wypełni formularz, klika w przycisk. Dane (zmienne i ich wartości) zostają wysłane do pliku, który jest określony w nagłówku formularza <form action="plik.php" .... >

Odebranie zmiennych wysyłanych przez formularz

Zmienne wysyłane z formularza należy odebrać z tablicy superglobalnej.
Jeżeli formularz wysyłał zmienne metodą POST:
$nazwa_zmiennej = $_POST['nazwa_zmiennej'];
Jeżeli formularz wysyłał zmienne metodą GET:
$nazwa_zmiennej = $_GET['nazwa_zmiennej'];

Przystąpimy więc do zbudowania prostego formularza oraz przygotujemy skrypt wyświetlający zmienną przesłaną przez formularz.
Przygotujemy dwa pliki:
02_01.php


Rys. 2_1 - Przykład prostego formularza z jednym polem tekstowym

Powyższy formularz przesyła zmienną o nazwie "nazwisko" do pliku 02_01a.php z użyciem metody POST.
Przygotujmy więc skrypt, który odbierze wartość przekazanej zmiennej, następnie wyświetli ją.


Rys. 2_2 - Skrypt odbierający zmienną z formularza i wyświetlający jej wartość

ćwiczenie 2_1 - Prosty formularz przekazujący wartość zmiennej z pola tekstowego

  1. Należy umieścić na swoim koncie WWW plik 02_01.php i 02_01a.php (do pobrania tutaj 02_01.zip).
  2. Po sprawdzeniu poprawności działania skryptu należy w pliku 02_01.php zmienić metodę przesyłania zmiennych z POST na GET. Skrypt w pliku 02_01a.php należy tak zmodyfikować, aby odebrana została zmienna przesyłana metodą GET.
    Należy wypełnić pole tekstowe i zaakceptować formularz. Czy coś zmieniło się w pasku adresu?


Rys. 2_3 - Efekt w pasku adresu przesyłania zmiennej metodą GET

Zadanie 1 - Test z wybranego przedmiotu

  • Należy przygotować pliki o nazwie zadanie01.php i zadanie01a.php.

  • Pierwszy plik powinien wyświetlać formularz. Tematem formularza jest test z przedmiotu, który Pani/Pan uczy. Należy wykorzystać wszystkie rodzaje pól formularza (prócz pola hasła). Pytania, w których odpowiedzi udzielane będą z wykorzystaniem pól checkbox, powinny mieć kilka poprawnych odpowiedzi.

  • Celem usprawnienia nawigacji strona wyświetlająca efekt działania skryptu powinna być wyposażona w link powrotu do głównej strony ćwicze? (index.html).


Rys. 2_4 - Przykład formularza

  • Po przesłaniu formularza powinny pojawić się wyniki: skrypt powinien wyświetlić poprawną odpowied? oraz odpowied? oczekiwaną.


Rys. 2_5 - Przykład działania skryptu sprawdzającego odpowiedzi

Należy przygotować powyższe zadanie w taki sposób, aby nadawało się ono do wykorzystania na lekcjach prowadzonych przez Panią/Pana.

Wskazówki:

  • Jeżeli użytkownik nie zaznaczy niektórych pól, nie zostanie wygenerowana (zdefiniowana) odpowiednia zmienna. Gdy będziemy próbowali w pliku zadanie01a.php odwołać się do tej zmiennej (np. wyświetlić jej wartość), może pojawić się komunikat o błędzie. Warto więc po zako?czeniu pracy zablokować generowanie informacji o błędach (jak to zrobić - opisano w poprzednim rozdziale).
  • Przykładowy (prosty w budowie, bez formatowania treści) test z plikiem wyświetlającym odpowiedzi znajduje się tutaj (02_02.zip).

Do zapamiętania

  1. Wykorzystujemy dwie metody przesyłania zmiennych z formularza: GET i POST
  2. Metoda POST jest bezpieczniejsza i może przekazać więcej zmiennych (ilość zmiennych i ich wartości)
  3. Skrypt PHP, do którego są wysyłane zmienne, musi je najpierw odebrać, pó?niej może przeprowadzać dalsze operacje na tych zmiennych.

 


Powrót do spisu tematów