Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Pobierz archiwum ZIP z plikami niezbędnymi do wykonania zadań przedstawionych w tym e‑materiale:

R16fq4nAIvCTh

Przycisk do pobrania pliku ZIP z bazą danych.

Plik ZIP o rozmiarze 2.71 KB w języku polskim

Rozważmy bazę danych obsługującą internetowy dziennik elektroniczny. W skład bazy o nazwie dziennik wchodzą trzy tabele:

  • klasa, o atrybutach: id (INT), nazwa (TINYTEXT),

  • uczen, o atrybutach: id (INT), Nazwisko (TINYTEXT), Imie (TINYTEXT), id_klasy (INT),

  • wychowawca, o atrybutach: id (INT), imie (TINYTEXT), nazwisko (TINYTEXT), id_klasy (INT).

Możemy wyróżnić następujące powiązania (relacje) istniejące między atrybutami:

  • atrybut klasa.id (klucz główny) pozostaje w relacji do pola uczen.id_klasy (klucz obcy),

  • atrybut klasa.id (klucz główny) pozostaje w relacji do pola wychowawca.id_klasy (klucz obcy).

Strukturę tabel składowych, powiązań pomiędzy atrybutami oraz opis plików źródłowych wchodzących w skład projektu pokazano w filmie:

RujZoBU3PHNTD1
Film samouczek przedstawia współpracę bazy danych ze stroną internetową

Formularze w języku HTML

Formularze służą użytkownikom do wprowadzania danych wejściowych do bazy danych (za pośrednictwem interfejsu witryny) w celu ich przetworzenia. Przykładem może być formularz rejestracji, który pozwala wprowadzić nowego użytkownika do bazy albo formularz logowania, dzięki któremu sprawdzana jest zgodność identyfikatora (loginu) i hasła ze wzorcami umieszczonymi w bazie danych.

Cały opis formularza zamykamy w parze znaczników <form></form>, zaś pomiędzy nimi umieszczamy dowolny zestaw predefiniowanych w języku HTML kontrolek formularza. Są one różne; mogą to być: pola tekstowe, przyciski, pola do zaznaczenia, listy wyboru itd.

Linia 1. otwórz nawias ostrokątny form action znak równości cudzysłów index kropka php cudzysłów method znak równości cudzysłów post cudzysłów zamknij nawias ostrokątny. Linia 2. otwórz nawias ostrokątny wykrzyknik minus minus Tutaj wybrane kontrolki formularza minus minus zamknij nawias ostrokątny. Linia 3. otwórz nawias ostrokątny prawy ukośnik form zamknij nawias ostrokątny.

Atrybut action określa jednoznacznie, który plik zajmie się przetwarzaniem danych otrzymanych z formularza. Jako wartość podajemy ścieżkę względną do przygotowanego skryptu PHP. Przeznaczenie atrybutu method omówiono niżej.

Metody przesyłania informacji z formularza na serwer

Atrybut method w znaczniku <form> określa sposób dostarczenia informacji z formularza na serwer. Istnieją dwie klasyczne metody komunikacji z serwerem:

  • method="get" – dane zostaną wysłane w postaci jawnej – wartości podane w formularzu zostaną dołączone („doklejone”) do adresu witryny pokazywanego w pasku adresu przeglądarki;

  • method="post" – dane zostaną wysłane w postaci niejawnej – wartości podane w formularzu nie zmieniają adresu witryny w przeglądarce.

Ciekawostka

W przypadku braku deklaracji atrybutu method wewnątrz znacznika <form> wykorzystana zostanie metoda get, ponieważ jest to wartość domyślna w standardzie HTML.

Pole tekstowe, etykieta pola

Wiele kontrolek formularzy określamy za pomocą znacznika <input> (ang. „wejście”). Rodzaj elementu, którego chcemy użyć, deklarujemy, używając atrybutu type (typ definiowanej kontrolki). Klasyczne pole tekstowe, znane z systemu Windows albo ze stron internetowych, wstawimy do formularza w następujący sposób:

Linia 1. otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów name znak równości cudzysłów klasa cudzysłów zamknij nawias ostrokątny.

Ważnym elementem standardu HTML, o którym nie należy zapominać w formularzu, jest etykieta pola – do jej zdefiniowania służą znaczniki <label> </label>. Jest to nie tylko słowny opis przeznaczenia pola – etykieta reaguje na kliknięcie użytkownika – powiązana z nią kontrolka formularza zyska aktywność. W przypadku pola tekstowego kliknięcie etykiety spowoduje pokazanie klawiatury na ekranie urządzenia mobilnego oraz ustawienie kursora wewnątrz pola. A zatem prawidłowo powiązany z kontrolką znacznik <label> sprzyja tzw. dostępnościdostępnośćdostępności formularza.

Istnieją dwa sposoby przypisania etykiety do kontrolki formularza:

  • Wewnątrz etykiety znajduje się zarówno opis pola, jak i sam znacznik <input>:

Linia 1. otwórz nawias ostrokątny label zamknij nawias ostrokątny. Linia 2. Podaj nazwę klasy dwukropek otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów name znak równości cudzysłów klasa cudzysłów zamknij nawias ostrokątny. Linia 3. otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny.
  • Etykieta zamknięta jest przed polem tekstowym, ale pojawia się dodatkowo atrybut for (ang. „dla”), określający, dla którego elementu jest to etykieta. Wartością atrybutu for jest identyfikator, podany także w atrybucie id wewnątrz znacznika <input>. Obydwa identyfikatory oczywiście muszą być identyczne: właśnie na ich podstawie dochodzi do logicznego powiązania pomiędzy kontrolką formularza i jego etykietą:

Linia 1. otwórz nawias ostrokątny label for znak równości cudzysłów klasa cudzysłów zamknij nawias ostrokątny Podaj nazwę klasy dwukropek otwórz nawias ostrokątny prawy ukośnik label zamknij nawias ostrokątny. Linia 2. otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów name znak równości cudzysłów klasa cudzysłów id znak równości cudzysłów klasa cudzysłów zamknij nawias ostrokątny.

Przyciski podsumowujące formularz

Istnieją trzy podstawowe sposoby definiowania przycisków w języku HTML. Jednak tylko dwa umożliwiają podsumowanie formularza:

  • Klasyczny przycisk dokonujący operacji submit, czyli podsumowania całego formularza – dane zostaną wysłane na serwer. Napis na przycisku określamy atrybutem value (ang. „wartosć”): <input type="submit" value="Wyślij">

  • Podwójny znacznik <button></button> zamiast pojedynczego znacznika <input>. Również nastąpi podsumowanie formularza. W tej wersji napis na przycisku umieszczamy po prostu pomiędzy tagami: <button>Wyślij</button>

Ciekawostka

Dlaczego dano nam możliwość zapisywania przycisku w takiej uwspółcześnionej wersji, skoro zdarzenie submit i tak następuje dla klasycznego przycisku? Wynika to z faktu, że znacznik <button> jest podwójny – ma tag otwierający oraz zamykający, w przeciwieństwie do pojedynczego <input>. To z kolei sprawia, że pomiędzy znacznikami <button></button> można w języku HTML wskazać dodatkowy element (na przykład grafikę – <img>).

  1. Znacznik definiujący „zwykły”, „niegorący” przycisk: jego kliknięcie nie podsumowuje formularza, tak jak to miało miejsce dla dwóch wcześniejszych kontrolek:

Linia 1. otwórz nawias ostrokątny input type znak równości cudzysłów button cudzysłów value znak równości cudzysłów Kliknij cudzysłów zamknij nawias ostrokątny.
Ciekawostka

Nie każdy przycisk powinien podsumować formularz – zdarzają się sytuacje, w których kliknięcie powinno być obsłużone jedynie po stronie klienta (w języku JavaScript) – na przykład przycisk przywołujący w animowany sposób menu główne witryny na ekran.

Wykonanie przykładowego formularza

Pora wykorzystać w praktyce zdobyte informacje. W filmie‑samouczku zrealizujemy podstronę dziennika elektronicznego, umożliwiającą wypisanie listy uczniów wskazanej w formularzu klasy:

RzdJmfqdnY3OU1
Film samouczek przedstawia współpracę bazy danych ze stroną internetową oraz tworzenie formularzy
Polecenie 1

Tuż pod tabelą zawierającą wypisanie imion i nazwisk uczniów należących do wybranej klasy powinna się pojawić także informacja (odczytana z bazy danych) o tym, kto jest wychowawcą tej grupy uczniów.

Odczytywanie w skrypcie PHP wartości przysłanej z formularza

Wartość podaną przez użytkownika w formularzu można odebrać w skrypcie PHP w specjalnej, globalnie widocznej tablicy, w której indeks jest taki sam, jak wartość atrybutu name danej kontrolki formularza**. W zależności od wybranego w atrybucie method sposobu przesyłania informacji, operacja odczytu wygląda następująco:

Linia 1. otwórz nawias ostrokątny wykrzyknik minus minus Kontrolka formularza minus minus zamknij nawias ostrokątny. Linia 2. otwórz nawias ostrokątny input type znak równości cudzysłów text cudzysłów name znak równości cudzysłów nazwa podkreślnik pola cudzysłów zamknij nawias ostrokątny. Linia 4. otwórz nawias ostrokątny znak zapytania php. Linia 6. prawy ukośnik prawy ukośnik Odczyt przecinek jeśli wybrano dla formularza metodę POST. Linia 7. $wartosc znak równości $ podkreślnik POST otwórz nawias kwadratowy cudzysłów nazwa podkreślnik pola cudzysłów zamknij nawias kwadratowy średnik. Linia 9. prawy ukośnik prawy ukośnik Odczyt przecinek jeśli wybrano dla formularza metodę GET. Linia 10. $wartosc znak równości $ podkreślnik GET otwórz nawias kwadratowy cudzysłów nazwa podkreślnik pola cudzysłów zamknij nawias kwadratowy średnik. Linia 12. znak zapytania zamknij nawias ostrokątny.
Ciekawostka

Zwróć uwagę, że atrybut name kontrolki formularza służy właśnie do przesłania wartości wyjętej z formularza do skryptu PHP na serwerze. Atrybut id najczęściej przydaje się z kolei w przypadku chęci uchwycenia kontrolki w języku JavaScript (lub ewentualnie do ustanowienia logicznego powiązania elementu z etykietą). Stąd niejednokrotnie spotkamy w formularzach HTML kontrolki mające obydwa wspomniane atrybuty.

Odebranie wartości z globalnej tablicy $POST lub $GET powinno nastąpić po uprzednim upewnieniu się, że użytkownik przesłał formularz – potrzebna jest do tego dodatkowa instrukcja warunkowa. W przeciwnym razie pierwsze wejście użytkownika do dokumentu spowoduje pokazanie następującego ostrzeżenia:

Linia 1. Notice dwukropek Undefined index nazwa podkreślnik pola.

Nie mieliśmy jeszcze możliwości wpisania czegokolwiek do pola tekstowego, stąd nie ma sensu dokonywać odczytu wartości, ani tym bardziej łączenia się z bazą danych, aby nieistniejącej wartości użyć w kwerendzie! Przyjrzymy się zatem możliwości sprawdzenia instrukcją warunkową sensu dokonywania aktu odczytu.

Sprawdzenie, czy formularz został wysłany

Do zrealizowania testu podsumowania formularza przez użytkownika, możemy wykorzystać dwa rodzaje instrukcji warunkowych:

  • Sprawdzenie funkcją PHP o nazwie isset() (ang. „istnieje, jest ustawione”), czy podany indeks w tablicy globalnej został zarezerwowany w pamięci RAM serwera:

Linia 1. if otwórz nawias okrągły isset otwórz nawias okrągły $ podkreślnik POST otwórz nawias kwadratowy cudzysłów nazwa podkreślnik pola cudzysłów zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy kropka kropka kropka zamknij nawias klamrowy.
Ciekawostka

Metody PHP isset() nie można zastąpić popularną funkcją empty(), ponieważ indeks w tablicy musi istnieć, ale może zawierać pustą wartość. Z tego powodu funkcja empty() doskonale nada się do sprawdzenia, czy użytkownik nie zapomniał w ogóle wpisać do pola wartości.

  • Weryfikacja wartości indeksu REQUEST_METHOD w globalnej tablicy $_SERVER. Ta metoda jest niezależna od ewentualnych pomyłek programisty w wartościach atrybutu name, ponieważ atrybuty te nie zostają w ogóle użyte wewnątrz warunku:

Linia 1. if otwórz nawias okrągły $ podkreślnik SERVER otwórz nawias kwadratowy cudzysłów REQUEST podkreślnik METHOD cudzysłów zamknij nawias kwadratowy znak równości znak równości cudzysłów POST cudzysłów zamknij nawias okrągły otwórz nawias klamrowy kropka kropka kropka zamknij nawias klamrowy.
Ciekawostka

Druga metoda zachowa się poprawnie tylko dla metody POST. Zastosowanie jej z wykorzystaniem żądania GET spełni warunek zapisany w instrukcji nawet wtedy, gdy nie przesłano formularza. Dzieje się tak dlatego, iż nawet zwykłe wejście na stronę internetową bez wypełnienia formularza stanowi żądanie GET w protokole HTTP.

Słownik

dostępność
dostępność

(ang. accessibility) ogół zasad projektowania interfejsów komunikacji człowieka z komputerem, których nadrzędnym celem jest zapewnienie komfortowego dostępu do funkcji serwisów internetowych jak największemu gronu osób (w tym także ludziom narażonym na wykluczenie cyfrowe z powodu niepełnosprawności, wieku, braku wykształcenia lub wskutek ograniczeń technologicznych)

sanityzacja kodu
sanityzacja kodu

proces mający doprowadzić do wyeliminowania z danych wejściowych możliwie największej liczby znaków sterujących i operatorów, które mogą mieć wpływ na zmianę sposobu działania aplikacji

wstrzykiwanie SQL
wstrzykiwanie SQL

(ang. SQL injection) metoda ataku na witrynę internetową komunikującą się z bazą danych, polegająca na przemyceniu fragmentu zapytania SQL poprzez odpowiednio spreparowaną wartość wprowadzaną w formularzu