Reklama
Wizyt
Dzisiaj: 300Wszystkich: 520577

Formularze

Technikum » PAI » Język PHP » Formularze

 

Dynamiczna strona WWW to strona, która jest generowana na podstawie danych przekazanych m. in. przez użytkownika. Podstawowym sposobem przekazywania danych z przeglądarki internetowej do serwera są formularze HTML. Użytkownik za pomocą formularza wprowadza różne informacje, które są wysyłane do serwera. Dane te są przetwarzane na serwerze za pomocą skryptów PHP.

 


Przykład

Prosty formularz HTML może mieć postać:




Podany w przykładzie formularz składa się z czterech pól do wprowadzania tekstu, pola wyboru typu radio, pola wyboru typu checkbox oraz przycisków typu submit (Wyślij) oraz reset.

Po kliknięciu przycisku Wyślij dane z formularza powinny zostać przesłane na serwer za pomocą metody POST. Parametr action wskazuje nazwę skryptu PHP oraz adres serwera, który zostanie wywołany po zatwierdzeniu formularza. W tym przykładzie zostanie uruchomiony skrypt o nazwie skrypt_form.php, który znajduje się na serwerze lokalnym o adresie http://localhost. Dane wprowadzone do formularza zostaną przekazane do wybranego skryptu. Parametr method określa sposób (metodę) przekazania informacji do wskazanego skryptu. Może przyjąć jedną z dwóch wartości: post i get. Wartością domyślną jest get, ale zaleca się stosowanie metody post.

 

Przekazywanie danych z formularza


Metoda GET jest używana, kiedy parametrów jest niewiele. W tej metodzie parametry są przekazywane za pomocą adresu URL. Schematyczna postać URL wygląda następująco:


Długość adresu URL jest ograniczona, a przekazywane parametry są widoczne w pasku adresu przeglądarki, dlatego metoda ta jest stosowana do przesyłania niedużych ilości danych. Adres skryptu PHP od przesyłanych parametrów oddzielany jest znakiem zapytania. Przesyłane pary parametr=wartość są oddzielane znakiem ampersand (&).

Metoda POST do przekazywania parametrów wykorzystuje nagłówek strony. Metoda ta umożliwia przekazywanie większej ilości parametrów, a parametry nie są widoczne w pasku przeglądarki.

Przesłane wartości parametrów są zapisywane w odpowiednich tablicach asocjacyjnych. Dane przesłane metodą GET są zapisywane w tablicy $_GET, natomiast dane przesłane metodą POST w tablicy $_POST. Tablice $_GET i $_POST są superglobalne. Oznacza to, że są widoczne w każdym miejscu kodu PHP bez konieczności użycia składni globals.

Indeksami tablicy $_GET i $_POST są nazwy pól formularza (wartość atrybutu name w formularzu HTML), do których się odwołujemy.

Odwołanie do elementów tablicy ma postać:

$zmienna = $_GET['nazwapola'];

lub

$zmienna = $_POST['nazwa_pola'];

 

Przykład

W celu sprawdzenia poprawności działania skryptu z poprzedniego przykładu można wykorzystać skrypt PHP (skrypt_form.php) przetwarzający dane przesłane z formularza.




Jeżeli podany kod zostanie zapisany w pliku skrypt_form.php, to po otwarciu formularza, wpisaniu danych i jego wysłaniu przeglądarka powinna wyświetlić przesłane dane.
 



Funkcja isSet

Podczas przetwarzania formularza można wykorzystać funkcję isSet(). Pozwala ona stwierdzić, czy określone pole formularza zostało wypełnione, a dokładniej, czy do skryptu została przekazana wartość danego pola. Funkcja zwraca true, gdy wartość została przekazana, w przeciwnym razie zwraca false.

Przykład

W podanym wcześniej przykładzie formularz oprócz pól tekstowych zawierał również pola typu radio. Są to trzy pola wyboru, gdzie z grupy opcji można zaznaczyć tylko jedną. Kliknięcie wartości powoduje zaznaczenie opcji, ale równocześnie usuwa zaznaczenie innej opcji. Każde z pól tego typu ma taką samą wartość atrybutu name. Atrybut value w tym przypadku jest konieczny i musi być inny dla każdego pola. Przez wartość atrybutu value pola będą identyfikowane w skrypcie.

Umieszczony poniżej skrypt PHP będzie rozpoznawał, która opcja pola typu radio została zaznaczona w formularzu (kod może zostać dołączony do pliku skrypt_form.php).




W podanym skrypcie do sprawdzenia, czy zaznaczone zostało pole opcji, zastosowano instrukcję warunkową if oraz funkcję isSet(). W warunku !isSet($_POST['wykszt']) został użyty operator logicznej negacji !, czyli warunek zwróci wartość true, gdy pole nie zostanie wypełnione, i będzie wysłany komunikat "Proszę zaznaczyć pole Wykształcenie". W przeciwnym razie za pomocą składni $_POST['wykszt'] zostanie odczytana z tablicy $_POST wartość opcji wykszt (będzie to wartość atrybutu value dla znacznika input type="radio").




Funkcja empty

Funkcja empty() sprawdza, czy istniejąca zmienna użyta jako argument jest pusta. Jeżeli zmienna jest pusta, to funkcja zwraca wartość true, w przeciwnym razie zwraca wartość false.

W formularzu może wystąpić pole typu SELECT, które służy do wyświetlania listy wartości i pozwala na wybranie jednej z nich lub kilku.

Przykład



Gdyby utworzona w formularzu lista wyboru wartości została zdefiniowana w postaci select name="języki" multiple, to skrypt obsługujący formularz miałby dostęp tylko do jednej wartości ($_POST["języki"]). Gdy zostaną dodane kwadratowe nawiasy w podany sposób: select name="języki[]", to elementy wybrane przez użytkownika w polu języki[] będą dostępne w tablicy $_POST["języki"].

Należy jeszcze dołączyć skrypt PHP (zapisany w pliku skrypt_form.php) w postaci:



Instrukcja if(!empty($_POST['języki']) sprawdza, czy tablica $_ POST['języki'] jest pusta. Jeżeli nie, to nastąpi wyświetlenie zawartości każdego elementu tablicy. W tablicy znajdują się wartości znacznika option value= . . . wybrane przez użytkownika.

Ta technika może być stosowana do różnych elementów, nie tylko do pól SELECT. Jeżeli kilku polom nadamy taką samą nazwę i nazwa pola będzie kończyła się nawiasem kwadratowym, to PHP połączy wszystkie wartości o tej samej nazwie pola w jedną tablicę.


Po wprowadzonych zmianach kod zawierający formularz HTML będzie wyglądał tak:





Kod zawierający skrypt PHP (plik skrypt_form.php):




Gdy formularz zostanie wysłany, w przeglądarce wyświetli się informacja o pomyślnym zarejestrowaniu.



Przesyłanie plików na serwer



Często zachodzi potrzeba przekazania pliku na serwer. W tym celu należy przygotować formularz, w którym będzie można wskazać plik do wysłania, oraz utworzyć skrypt PHP, który odbierze wysłany plik. Dodatkowo należy odpowiednio przygotować środowisko PHP.

Formularze służące do wysyłania plików w definicji znacznika form muszą zawierać atrybut:

  • enctype — określa sposób kodowania danych; musi zostać podana wartość: enctype="multipart/form-data";
  • action — określa adres skryptu PHP;
  • method — określa metodę wysyłania danych; musi to być metoda POST.


Do wysyłania pliku służy pole input typu file. Można dodać ukryte pole o nazwie max_file_size w celu określenia maksymalnego rozmiaru pliku, który można będzie przesłać na serwer w postaci:




Przykład



Podany skrypt utworzy formularz, za pomocą którego będzie można wysyłać pliki na serwer.


Informacje o plikach, które zostały wysłane, są przechowywane w superglobalnej tablicy asocjacyjnej $_FILES. Indeksami tej tablicy są nazwy pól input typu file pobrane z formularza (wartość atrybutu name w formularzu HTML). Pod indeksem zapisana jest cała informacja o przesłanym pliku w postaci kolejnych indeksów. Są to:

  • $_FILES['nazwa_pliku']['name'] — nazwa przesłanego pliku,
  • $_FILES['nazwa_pliku']['type'] — typ MIME pliku,
  • $_FILES['nazwa_pliku']['size'] — wielkość pliku w bajtach,
  • $_FILES['nazwa_pliku']['tmp_name'] — ścieżka tymczasowa, pod którą plik został zapisany na serwerze,
  • $_FILES['nazwa pliku']['error'] — kod błędu.


Wysłany do serwera plik jest umieszczany w katalogu tymczasowym. Do przeniesienia pliku do właściwej lokalizacji służy funkcja move_uploaded_file(). Przed przeniesieniem pliku do katalogu docelowego można sprawdzić za pomocą funkcji is_uploaded_file(), czy plik tymczasowy istnieje.

Przykład

Kod zapisany w pliku odbierz_plik.php:



Przedstawiony kod służy do odebrania pliku przesłanego przez formularz. Za pomocą funkcji is_uploaded_file() sprawdzamy, czy plik tymczasowy został odebrany od użytkownika. Potem kolejno sprawdzamy informacje na temat wielkości oraz typu pliku. Jeżeli efekty tych działań są pozytywne, plik zostanie przeniesiony za pomocą funkcji move_uploaded_file() w miejsce docelowe. Jeżeli plik o takiej samej nazwie istnieje, to zostanie zastąpiony plikiem odebranym. Aby plik mógł zostać przeniesiony w docelowe miejsce, użytkownik musi mieć odpowiednie prawa dostępu do katalogu docelowego.


 

Zadania

 

  1. Przetestuj działanie skryptów PHP umieszczonych powyżej.
  2. Napisz skrypt obliczający pole prostokąta. Boki prostokąta mają być podawane przez formularz.
  3. Napisz skrypt sprawdzający która z dwóch liczb podanych z klawiatury jest większa.
  4. Napisz skrypt sprawdzający czy użytkownik komputera jest pełnoletni.
  5. Napisz skrypt sprawdzający czy podana liczba jest ujemna, dodatnia lub równa zero.
  6. Napisz skrypt sprawdzający czy podany rok przestępny.
  7. Opracuj formularz przeznaczony do rejestrowania uczniów zapisujących się do szkoły. Określ informacje, które powinny znaleźć się w formularzu, oraz sposób ich wprowadzania. Utwórz skrypt przetwarzający dane przesłane z formularza. W skrypcie powinno być sprawdzane wypełnienie wszystkich pól.
  8. Do opracowanego w poprzednim zadaniu formularza dodaj pole umożliwiające przesyłanie pliku ze zdjęciem. Przyjmij, że przesyłane pliki mogą być w formacie JPG, JPEG lub PNG. Ich rozmiar nie może przekroczyć 900kB. Zmodyfikuj skrypt PHP tak, aby możliwe było odbieranie pliku przesłanego przez formularz.




Reklama