Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

Podobne dokumenty
Podstawy JavaScript ćwiczenia

Laboratorium 1 Wprowadzenie do PHP

Przykładowa integracja systemu Transferuj.pl

Wprowadzenie do Internetu Zajęcia 5

Formularze HTML. dr Radosław Matusik. radmat

Szablon główny (plik guestbook.php) będzie miał postać:

SSK - Techniki Internetowe

FORMULARZE Formularz ma formę ankiety, którą można wypełnić na stronie. Taki formularz może być np. przesłany pocztą elektroniczną .

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Przykładowa integracja systemu tpay.com KIP S.A. ul. Św. Marcin 73/ Poznań.

Aplikacje WWW - laboratorium

Aplikacje internetowe - laboratorium

Wykład 03 JavaScript. Michał Drabik

FORMULARZE. G. Przęczek

LABORATORIUM 2 WSTĘP DO SIECI TELEINFORMATYCZNYCH TABELE I FORMULARZE

Zdarzenia Zdarzenia onload i onunload

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Aplikacje WWW - laboratorium

Bazy Danych i Usługi Sieciowe

Formularze w PHP dla początkujących

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Aplikacje internetowe

PHP5. Praktyczny kurs

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Zajęcia 4 - Wprowadzenie do Javascript

Laboratorium 7 Blog: dodawanie i edycja wpisów

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Dokument hipertekstowy

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Aplikacje WWW - laboratorium

Systemy internetowe Wykład 3 PHP

Umieszczanie kodu. kod skryptu

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

INSTALACJA I KONFIGURACJA SERWERA PHP.

Aplikacje WWW - laboratorium

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Zajęcia 10 obsługa formularzy w PHP

JavaScript - wykład 4. Zdarzenia i formularze. Obsługa zdarzeń. Zdarzenia. Mysz. Logiczne. Klawiatura. Beata Pańczyk

Laboratorium 6 Tworzenie bloga w Zend Framework

Programowanie internetowe

Zaawansowane aplikacje internetowe

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Formularze. 1. Formularz HTML

PHP: bloki kodu, tablice, obiekty i formularze

Ćwiczenie: JavaScript Cookies (3x45 minut)

Poszczególne elementy serwisu można umieścić dla porządku w odpowiednio przemyślanym drzewie katalogów, i tak: -

Zmienne i stałe w PHP

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Autor: Joanna Karwowska

Komponent Formularz. Rys. 1. Strona programu Joomla - Rys. 2. Instalacja komponentu

Przedmiot: Programowanie usług internetowych - Delphi Przygotował: K. Strzałkowski Rok V. Semestr IX. Wydział ZiMK

Ćwiczenie 7 - Formularze

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

HTML ciąg dalszy. Listy, formularze

Personal Home Page PHP: Hypertext Preprocessor

Platforma e-learningowa

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

SIECI KOMPUTEROWE I BAZY DANYCH

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Obiektowe bazy danych

Wybrane działy Informatyki Stosowanej

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Dokumentacja Skryptu Mapy ver.1.1

Celem ćwiczenia jest zapoznanie z językiem HTML i JavaScript, zasadami tworzenia stron WWW i umieszczania na nich skryptów w języku JavaScript.

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Aplikacje WWW - laboratorium

SMS Kod Automatyczny

Modele danych walidacja widoki zorientowane na model

Wykład 4. Specyfikacje XHTML, formularze

Internetowe bazy danych

Bazy danych i strony WWW

Napisy w PHP. Drukowanie napisów instrukcją echo

Wysyłanie pliku na serwer. Plik na serwerze.

Programy CGI dla baz danych

Podstawy programowania (PHP/Java)

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Zdarzenia w JavaScript (Zajęcia r.)

Wykład 5: PHP: praca z bazą danych MySQL

14. POZOSTAŁE CIEKAWE FUNKCJE

Odnośniki jeszcze do niedawna odróżniały strony WWW od wszystkich innych dokumentów elektronicznych. Możliwość deklarowania odnośników do innych

Rys.2.1. Drzewo modelu DOM [1]

Instrukcja zarządzania kontem przedsiębiorstwa w serwisie internetowym

2 Podstawy tworzenia stron internetowych

Instrukcja zarządzania kontem jednostki samorządu terytorialnego w serwisie internetowym

Bazy Danych i Usługi Sieciowe

INSTRUKCJA Panel administracyjny

REKRUTACJA DO PRZEDSZKOLI

Platforma e-learningowa

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

JAVAScript w dokumentach HTML (2)

Informatyzacja Przedsiębiorstw

Systemy internetowe HTML

LeftHand Sp. z o. o.

Podstawy technologii WWW

obecnie tabeli nie stosuje się do budowy struktury witryny (stosuje się za to pozycjonowanie elementów i warstwy) faktycznie wymagają

Dokumentacja smsapi wersja 1.4

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Transkrypt:

Tematy: Przygotowanie formularza Przesyłanie danych przez formularz Mechanizm PostBack W rozdziale 1. pojawiła się prosta definicja strony WWW definicja ta określiła dynamiczną stronę WWW jako stronę, która jest generowana na podstawie danych przekazanych m.in. przez użytkownika. Jest to oczywiście prawda, dlatego też w rozdziale tym poruszony zostanie temat przetwarzania danych dostarczanych bezpośrednio przez użytkownika. Podstawowym sposobem interakcji między użytkownikiem a serwisem WWW są formularze HTML. Formularze HTML to specjalna konstrukcja języka HTML, dzięki której przeglądarka generuje zestaw elementów kontrolnych (znanych z okienkowych interfejsów użytkownika), pozwalających użytkownikowi na wprowadzanie danych i podejmowanie działań typu wybór elementu z listy rozwijanej, kliknięcie przycisku itp. Na pewno każdy użytkownik internetu spotkał się podczas surfowania z różnymi rodzajami formularzy od najprostszych, stosowanych w wyszukiwarkach internetowych (jedno pole do wprowadzenia wyszukiwanej frazy i jeden przycisk, zwykle o nazwie Szukaj), do bardziej skomplikowanych, stosowanych na stronach wymagających rejestracji, gdzie należy podać wiele danych o sobie itp. W rozdziale tym zamieszczone zostały informacje na temat tworzenia formularzy HTML, obsługi danych z formularzy za pomocą protokołu HTTP i przetwarzania danych z formularzy w PHP. Przygotowanie formularza Zanim zagłębimy się w kod PHP, spróbujemy utworzyć formularz HTML. Na potrzeby tego rozdziału stworzymy sobie prosty formularz rejestracji, za pomocą którego użytkownik będzie mógł przesłać dane rejestracyjne (imię, nazwisko, zawód, adres email i zgodę na dostarczanie informacji handlowych) do serwisu. Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW. Dokładny opis znaczników (X)HTML, za pomocą których tworzone są formularze, znaleźć można w specyfikacji języka (X)HTML lub w jednym z wielu dobrych kursów tego języka. Ponieważ język (X)HTML nie jest tematem tego kursu, znaczniki (X)HTML nie będą tu szczegółowo opisywane wyjątek stanowić będą tzw. konieczne przypadki, czyli te, które takiego wyjaśnienia będą wymagały. Ogólna postać formularza jest następująca: <form name = "nazwa" target = "okno" action = "url" method = "metoda" enctype = "typ kodowania"> <! tu definicja obiektów składowych> </form> Parametr method wskazuje metodę, która zostanie użyta do przesłania danych do serwera, najczęściej jest to GET lub POST, natomiast action określa adres skryptu, który będzie odbierał dane. Może on być adresem 1 / 14

bezwzględnym, np. http://www.mojadomena.com/skrypt.php, lub względnym, np. /skrypty/skrypt.php. W pierwszym przypadku dane zostaną dostarczone do skryptu skrypt.php znajdującego się w głównym katalogu serwera o adresie http://www.mojadomena.com, natomiast w drugim do skryptu o nazwie skrypt.php znajdującego się w podkatalogu skrypty na serwerze ze stroną WWW zawierającą formularz. Elementami składowymi formularza mogą być: button klasyczny przycisk, checkbox pole wyboru, hidden element ukryty, password pole tekstowe do wpisywania haseł, radio pole wyboru, reset przycisk reset, select lista wyboru, submit przycisk submit, text pole tekstowe, textarea rozszerzone pole tekstowe. Na listingu 5.1 widoczny jest kod HTML przykładowego formularza. Listing 5.1. Kod HTML strony WWW zawierającej przykładowy formularz <!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html lang="pl"> <head> <meta httpequiv="contenttype" content="text/html; charset=utf8"> <title>formularz</title> </head> 2 / 14

<body> <form action="" method="post"> <div> Imię:<br /> <input name="imie" value="" /><br /> Nazwisko:<br /> <input name="nazwisko" value="" /><br /> Zawód:<br /> <input name="zawod" value="" /><br /> Adres email:<br /> <input name="email" value="" /><br /> <input type="checkbox" value="checked" name="mailing" />Chcę otrzymywać informacje handlowe<br /><br /> <input type="submit" value="wyślij" name="submit" /> </div> </form> </body> </html> Po wyświetleniu w przeglądarce WWW formularz będzie wyglądał podobnie, jak przedstawiony na rysunku 5.1. Rysunek 5.1. Przykładowy formularz Nasz formularz składa się z czterech pól do wprowadzania tekstu (zdefiniowanych za pomocą znaczników <input> z atrybutem type ustawionym na text), jednego pola wyboru (zdefiniowanego za pomocą znacznika <input> z atrybutem type ustawionym na checkbox) oraz jednego przycisku (znacznik <input> z atrybutem type ustawionym na submit). Każdy z wymienionych elementów ma atrybut name, któremu przypisana jest nazwa identyfikująca jednoznacznie ten element formularza. Nagłówek formularza (znacznik form) zawiera dwa atrybuty: action i method atrybuty te zostaną w miarę szczegółowo opisane w dalszej części rozdziału. Ostatnim elementem formularza jest przycisk, za pomocą którego dane z formularza zostaną przesłane dalej. Przesyłanie danych przez formularz Nietrudno się domyślić, że po kliknięciu przycisku Wyślij (rysunek 5.1) dane z formularza przesyłane są dalej za 3 / 14

pomocą protokołu HTTP tak jak reszta elementów serwisu. O tym, w jaki sposób dane z formularza są przesyłane dalej, decyduje metoda zdefiniowana w atrybucie method znacznika form w przypadku przykładowego formularza jest to metoda POST protokołu HTTP. Oprócz metody POST można również użyć metody GET, ale musimy pamiętać o jej ograniczeniach: przede wszystkim o tym, że dane z formularza przesyłane są za pomocą adresu URL, czyli w sposób widoczny dla użytkownika (zwykły użytkownik nawet nie zwróci na to uwagi, ale są użytkownicy, dla których informacje zawarte w tak rozbudowanym adresie mogą być bardzo przydatne ). URL będzie miał wtedy schematyczną postać: http://adres.serwera/skrypt.php?parametr1=wartość1&parametr2=wartość2 Dodatkowym ograniczeniem jest długość adresu maksymalnie 255 znaków. W przypadku zastosowania metody POST dane przesyłane przez formularz nie są widoczne dla użytkownika aby je zobaczyć, należałoby użyć dowolnego programu do podglądu danych przesyłanych przez sieć i nie mają takiego ograniczenia co do długości, jak w przypadku zastosowania metody GET. A jak jest z formularzami w PHP? Chyba najlepszym sposobem wyjaśnienia obsługi formularzy w języku PHP będzie analiza przykładu. Listing 5.2 zawiera kod PHP strony generującej przykładowy formularz (jest to modyfikacja kodu HTML z listingu 5.1). Listing 5.2. Strona (skrypt PHP) generująca formularz <!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html lang="pl"> <head> <meta httpequiv="contenttype" content="text/html; charset=utf8"> <title>formularz</title> </head> // Funkcja wyświetlająca formularz function formularz() { <form action="zgloszenie.php" method="post"> <div> Imię:<br /> <input name="imie" value="" /><br /> Nazwisko:<br /> <input name="nazwisko" value="" /><br /> 4 / 14

Zawód:<br /> <input name="zawod" value="" /><br /> Adres email:<br /> <input name="email" value="" /><br /> <input type="checkbox" name="mailing" value="checked" />Chcę otrzymywać informacje handlowe<br /><br /> <input type="submit" value="wyślij" name="submit"/> </div> </form> <body> formularz(); </body> </html> Kod z listingu 5.2 na pierwszy rzut oka wydaje się skomplikowany nie bez racji, ponieważ jest napisany trochę na wyrost (będzie dalej modyfikowany). Zacznijmy jednak od początku. Pierwsza sekcja kodu PHP zawiera definicję funkcji formularz(), której jedynym zadaniem jest wyświetlanie formularza. Funkcja ta nie zwraca żadnych wartości, dlatego nie zawiera słowa kluczowego return. Można jednak w ciele tej funkcji znaleźć pewną ciekawą rzecz: zaraz po nawiasie otwierającym blok ciała funkcji zamykana jest sekcja kodu PHP i dalej widać już tylko kod HTML definiujący formularz. Po znaczniku zamykającym formularz pojawia się znów symbol otwarcia sekcji PHP, po czym zamykane jest ciało funkcji i zamykana jest również sekcja kodu PHP. Mechanizm zastosowany w funkcji formularz() nazywany jest wyskakiwaniem z PHP (opuszczaniem trybu PHP) po prostu kod HTML znajdujący się wewnątrz funkcji zostanie wyświetlony w oknie przeglądarki po wywołaniu tej funkcji. Można by oczywiście nie stosować wyskakiwania, ale wtedy musielibyśmy wypisać kod HTML za pomocą jednej (lub kilku) instrukcji echo lub print. Oczywiście czasem stosowanie wyskakiwania może się nie opłacać (ze względu na nakład pracy) należy zawsze przeanalizować problem i zastanowić się, czy wyskakiwanie ma być stosowane, czy też należy wyświetlać ciąg znaków za pomocą jednej z przeznaczonych do tego instrukcji (funkcji). Sekcja z kodem formularza mogłaby mieć też postać zaprezentowaną na listingu 5.3. Listing 5.3. Alternatywna definicja formularza 5 / 14

// Funkcja wyświetlająca formularz function formularz() { //definicja formularza (składnia heredoc) $form = <<<EOD <form action="zgloszenie.php" method="post"> <div> Imię:<br /> <input name="imie" value="" /><br /> Nazwisko:<br /> <input name="nazwisko" value="" /><br /> Zawód:<br /> <input name="zawod" value="" /><br /> Adres email:<br /> <input name="email" value="" /><br /> <input type="checkbox" name="mailing" value="checked" />Chcę otrzymywać informacje handlowe<br /><br /> <input type="submit" value="wyślij" name="submit"/> </div> </form> EOD; echo $form; <body> Kolejna sekcja kodu PHP (na listingu 5.2) pojawia się wewnątrz znacznika body, czyli w części dokumentu HTML przeznaczonej do wyświetlania, i składa się z wywołania funkcji formularz(). Efekt działania tego skryptu jest praktycznie taki sam jak efekt uzyskany po wyświetleniu przykładowego formularza z listingu 5.1. Znacznik form w przypadku formularza z listingu 5.2, a w przeciwieństwie do formularza z listingu 5.1, zawiera 6 / 14

niepusty atrybut action. W przypadku formularza z listingu 5.2 atrybut ten zawiera adres względny skryptu zgloszenie.php skrypt ten otrzyma dane z formularza po tym, jak użytkownik kliknie przycisk Wyślij. Listing 5.4 zawiera kod skryptu zgloszenie.php (w tym i dalszych przykładach założono, że w opcjach konfiguracyjnych jest włączone rozpoznawanie skróconych znaczników short_open_tag = On). Listing 5.4. Skrypt przyjmujący i przetwarzający dane z formularza <!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html lang="pl"> <head> <meta httpequiv="contenttype" content="text/html; charset=utf8"> <title>zgłoszenie</title> </head> <body> if (isset($_post["submit"])) { // Zostaliśmy przekierowani na stronę z formularza // sprawdzamy, czy wszystkie pola zostały wypełnione if (empty($_post["imie"]) empty($_post["nazwisko"]) empty($_post["zawod"]) empty($_post["email"])) { echo "<p style="color:red">musisz wypełnić wszystkie pola!</p>"; echo "<p><a href="formularz.php">powrót do formularza</a></p>"; else { <h3>dziękujemy za zgłoszenie!</h3> <p>twoje dane:</p> <ul> <li>imię: <b><?= trim($_post["imie"]); </b></li> <li>nazwisko: <b><?= trim($_post["nazwisko"]); </b></li> 7 / 14

<li>zawód: <b><?= trim($_post["zawod"]); </b></li> <li>adres email: <b><?= trim($_post["email"]); </b></li> if (isset($_post["mailing"])) echo "<li>chcesz otrzymywać informacje handlowe.</li>"; else echo "<li>nie chcesz otrzymywać informacji handlowych.</li>"; </ul> else { // Jeśli użytkownik dostał się na tę stronę w sposób inny niż przez formularz // zostaje przekierowany do formularza zgłoszenia header("location: formularz.php"); </body> </html> Skrypt z listingu 5.4 zawiera kilka nowości i trzeba go dokładnie przeanalizować. Sekcja kodu PHP zaczyna się wewnątrz ciała strony (znacznik body). Na samym początku za pomocą instrukcji warunkowej sprawdzamy, czy jest ustawiona wartość pola o kluczu submit tablicy $_POST: if (isset($_post["submit"])) {... To, czy ustawiona jest określona wartość zmiennej (w tym przypadku jest to jeden z elementów tablicy asocjacyjnej), sprawdzamy za pomocą funkcji isset(). Tablica $_POST jest jedną z tablic superglobalnych, dostępnych w każdym miejscu skryptu. $_POST zawiera wszystkie dane, które zostały przesłane do aktualnie przetwarzanego skryptu za pomocą metody HTTP POST. Analogicznie, dane przesłane skryptowi (serwerowi) za pomocą metody HTTP GET dostępne są przez tablicę superglobalną $_GET. Gdyby się okazało, że wartość elementu submit tablicy $_POST w naszym skrypcie nie jest ustawiona, wtedy możemy być pewni, że użytkownik dostał się na tę stronę w inny sposób nie przez formularz (sytuacja opisana w dalszej części punktu). Jeśli przyjrzymy się skryptowi z listingu 5.2 (formularz), to zauważymy, że element submit tabeli $_POST 8 / 14

odpowiada nazwie (atrybut name) przycisku Wyślij formularza oznacza to, że jeżeli wartość elementu submit tablicy $_POST jest ustawiona, kliknięty został przycisk Wyślij formularza. Pozostałe elementy formularza powinny być również dostępne w tablicy $_POST pod indeksami odpowiadającymi ich nazwom (wartościom atrybutów name). Wróćmy do analizy skryptu z listingu 5.4. Jeśli kliknięto przycisk Wyślij formularza (opisywany wyżej warunek jest spełniony), sprawdzamy, czy wszystkie pola formularza zostały zapełnione (wiadomo już, jak odczytać wartość poszczególnych pól formularza), a raczej czy któreś z pól przypadkiem nie pozostało niewypełnione: if (empty($_post["imie"]) empty($_post["nazwisko"]) empty($_post["zawod"]) empty($_post["email"])) { echo "<p style="color:red">musisz wypełnić wszystkie pola!</p>"; echo "<p><a href="formularz.php">powrót do formularza</a></p>"; else {... Instrukcja if zawiera w tym przypadku warunek złożony wyrażenie logiczne będące alternatywą warunków prostych. Każdy z warunków prostych, np. empty($_post["imie"]), składa się z wywołania funkcji empty() z odpowiednim elementem tablicy $_POST jako parametrem. Funkcja ta zwraca wartość true, jeżeli zmienna (element tablicy) jest pusta zmienna istnieje, ale nie przypisano jej wartości, w tym przypadku zmienna zawiera pusty ciąg znaków. Zastosowanie alternatywy (logiczne LUB) powoduje, że jeżeli którekolwiek z pól pozostało puste, skrypt wygeneruje komunikat (wraz z odpowiednim łączem) informujący użytkownika o konieczności wypełnienia formularza. Jeśli wszystkie pola zostały zapełnione, warunek nie jest spełniony, czyli wykonywany jest kod umieszczony po słowie kluczowym else: <h3>dziękujemy za zgłoszenie!</h3> <p>twoje dane:</p> <ul> <li>imię: <b><?= trim($_post["imie"]); </b></li> <li>nazwisko: <b><?= trim($_post["nazwisko"]); </b></li> <li>zawód: <b><?= trim($_post["zawod"]); </b></li> <li>adres email: <b><?= trim($_post["email"]); </b></li> if (isset($_post["mailing"])) echo "<li>chcesz otrzymywać informacje handlowe.</li>"; else 9 / 14

echo "<li>nie chcesz otrzymywać informacji handlowych.</li>"; </ul> Jest to kod HTML (zauważyć można wyskok z PHP) wyświetlający dane z formularza, przy czym w miejscach, gdzie dane powinny być wyświetlone, użyte zostały sekcje wyrażeń zawierające wywołania funkcji trim() z odpowiednim elementem tablicy $_POST jako parametrem funkcja trim() ma za zadanie wyciąć z ciągu znaków wszystkie białe znaki (czyli spacje, tabulatory, znaki końca wiersza) występujące na początku i na końcu ciągu. Dzięki wykorzystaniu funkcji trim() zabezpieczamy się przed ewentualnym nagromadzeniem spacji przed i po napisie. Należy zwrócić uwagę na sekcję kodu PHP dotyczącą obsługi pola wyboru o nazwie mailing. Nazwy pól wyboru wraz z wartościami przesyłane są do skryptu wyznaczonego w atrybucie action formularza tylko wtedy, gdy pola te zostały zaznaczone stąd zastosowanie instrukcji warunkowej i funkcji isset(). Jeżeli użytkownik zaznaczył pole wyboru, element tablicy $_POST o indeksie mailing został utworzony i jest dostępny. Wróćmy teraz do przypadku, gdy użytkownik dostał się na stronę zgloszenie.php inaczej niż przez formularz (warunek sprawdzający, czy kliknięto przycisk Wyślij, wygeneruje wartość false). Sytuację taką można obsłużyć na wiele sposobów. Obecnie preferuje się przekierowywanie użytkownika na stronę formularza, z którego dopiero może się dostać do danej strony. W przypadku skryptu z listingu 5.4 problem ten rozwiązany został przez natychmiastowe przekierowanie użytkownika na stronę formularza przy użyciu funkcji header(): header("location: formularz.php"); Funkcja ta powoduje wysłanie nagłówka HTTP w przypadku skryptu z listingu 5.4 nagłówek zawiera informację o przekierowaniu na stronę o adresie względnym formularz.php. Rysunek 5.2 przedstawia wypełniony formularz, natomiast rysunek 5.3 przedstawia wynik działania skryptu zgloszenie.php, do którego zostały przesłane dane formularza. Rysunek 5.2. Wypełniony formularz Rysunek 5.3. Przetworzone dane z formularza Rysunek 5.4 przedstawia wynik działania skryptu zgloszenie.php w przypadku, gdy użytkownik nie wypełnił któregoś z pól formularza. Rysunek 5.4. Wynik działania skryptu zgloszenie.php w sytuacji, gdy nie zostały wypełnione wszystkie pola formularza Mechanizm PostBack Nie jest koniecznością przetwarzanie danych z formularza w oddzielnym skrypcie. Możemy tak przepisać kod 10 / 14

skryptu realizującego formularz, że będzie on w stanie również przetworzyć dane z tego formularza. Innymi słowy, atrybutowi action formularza przypiszemy adres względny bieżącego skryptu i będziemy sprawdzać, czy odwołanie do strony nastąpiło przez formularz, czy też w sposób bezpośredni. Przekazywanie danych z formularza realizowanego przez skrypt o nazwie np. formularz.php do tego samego skryptu, które jest w stanie również przetworzyć te dane, określane jest mianem PostBack informacje są przesyłane z powrotem do skryptu, który je wygenerował. Przyjrzyjmy się skryptowi z listingu 5.5 (plik formularz.php). Listing 5.5. Skrypt realizujący mechanizm PostBack <!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html lang="pl"> <head> <meta httpequiv="contenttype" content="text/html; charset=utf8"> <title>formularz</title> </head> // Funkcja wyświetlająca formularz function formularz($imie = "", $nazwisko = "", $zawod = "", $email = "", $mailing_checked = false ) { <form action="" method="post"> Imię:<br /> <input name="imie" value="<?= $imie; " /><br /> Nazwisko:<br /> <input name="nazwisko" value="<?= $nazwisko; " /><br /> Zawód:<br /> <input name="zawod" value="<?= $zawod; " /><br /> Adres email:<br /> <input name="email" value="<?= $email; " /><br /> <input type="checkbox" name="mailing" 11 / 14

value="checked" if ($mailing_checked) echo " checked" />Chcę otrzymywać informacje handlowe<br /><br /> <input type="submit" value="wyślij" name="submit"/> </form> <body> if (isset($_post["submit"])) { // Sprawdzamy, czy użytkownik zaznaczył pole wyboru i ustawiamy wartość // odpowiedniej zmiennej $mailing = false; if (isset($_post["mailing"])) $mailing = true; // Wyświetlamy formularz z wpisanymi wartościami poszczególnych pól formularz($_post["imie"], $_POST["nazwisko"], $_POST["zawod"], $_POST["email"], $mailing); // Sprawdzamy, czy wszystkie pola zostały zapełnione if (empty($_post["imie"]) empty($_post["nazwisko"]) empty($_post["zawod"]) empty($_post["email"])) { echo "<p style="color:red">musisz wypełnić wszystkie pola!</p>"; else { echo "<p>dziękujemy za wypełnienie formularza!</p>"; else { // Jeśli strona ładowana pierwszy raz, wyświetlamy pusty formularz formularz(); 12 / 14

</body> </html> Kod przedstawiony na listingu 5.5 nie jest optymalny, ale realizuje dokładnie to, o co nam chodzi. Funkcja formularz() jest tym razem bardziej rozbudowana niż w przypadku z listingu 5.2. Funkcja formularz() z listingu 5.5 zawiera listę parametrów, które wykorzystywane są do wypełnienia odpowiednich pól formularza. Parametry te mają wartości domyślne puste ciągi znaków i wartość false w przypadku parametru, na podstawie którego funkcja generuje pole wyboru domyślnie zaznaczone lub nie. Dokładną analizę tej funkcji warto przeprowadzić w ramach ćwiczenia. W ciele strony WWW (znacznik body) umieszczony został kod PHP, który najpierw sprawdza podobnie jak to miało miejsce w przypadku skryptu z listingu 5.4 czy użytkownik dostał się na stronę przez kliknięcie przycisku Wyślij formularza, czy też w inny sposób. Jeśli użytkownik został przekierowany na tę stronę w wyniku kliknięcia przycisku, najpierw zapamiętywany jest stan pola wyboru (można to zrobić oczywiście prościej) w zmiennej $mailing: $mailing = false; if (isset($_post["mailing"])) $mailing = true; Następnie wyświetlany jest formularz zawierający dokładnie takie dane, jakie zostały przesłane za pomocą POST (jako parametr decydujący o zaznaczeniu pola wyboru przekazujemy zmienną $mailing): formularz($_post["imie"], $_POST["nazwisko"], $_POST["zawod"], $_POST["email"], $mailing); Na koniec następuje sprawdzenie, czy wszystkie pola zostały wypełnione (użytkownik otrzymuje odpowiedni komunikat zwrotny): if (empty($_post["imie"]) empty($_post["nazwisko"]) empty($_post["zawod"]) empty($_post["email"])) { echo "<p style="color:red">musisz wypełnić wszystkie pola!</p>"; else { echo "<p>dziękujemy za wypełnienie formularza!</p>"; Jeśli użytkownik trafił na stronę nie po przekierowaniu z formularza, wywoływana jest funkcja formularz() bez parametrów, co spowoduje wyświetlenie pustego formularza. Rysunek 5.5 przedstawia wynik działania skryptu z listingu 5.5 po przesłaniu wypełnionego formularza, natomiast rysunek 5.6 przedstawia wynik działania skryptu, gdy formularz nie został poprawnie wypełniony. 13 / 14

Rysunek 5.5. Wynik działania skryptu z listingu 5.5 w przypadku kompletnych danych Rysunek 5.6. Wynik działania skryptu z listingu 5.5 w przypadku niekompletnych danych Wiadomo już, jak przetwarzać dane przekazane przez użytkownika za pomocą formularzy HTML. Warto teraz w ramach ćwiczenia zaprogramować obsługę innych pól formularzy HTML. W następnych rozdziałach zostanie m.in. pokazane, w jaki sposób można magazynować dane pobrane z formularzy. 14 / 14