Wykład 2, 23.02
Transkrypt
Wykład 2, 23.02
Wykład 2: Obsługa formularzy w PHP Praca z formularzem (cz. 1) Działający przykład: formularz1.html (dokument statyczny) - naciśnięcie "Wyślij" wysyła dane formularza do serwera przetworz1.php (dokument dynamiczny) - w tym pliku są przetwarzane dane formularza. Generowany jest kod HTML z odczytanymi danymi formularza i odsyłany do przeglądarki Wyjaśnienia 1. Utworzenie przycisku do wysłanie danych formularza na serwer: <input type="submit" value="Wyślij"> Atrybut value - jaki napis będzie na przycisku Przypomnienie z poprzedniego semestru: type="button" - utworzenie zwykłego przycisku 2. Atrybut action elementu form. Tu podajemy nazwę pliku, który będzie przetwarzał dane formularza na serwerze. 3. Atrybut method elementu form. Tu podajemy jaką metodą mają być wysłane dane formularza: GET lub POST (zobacz następny slajd - wyjaśnienie czym się różnią te metody). GET jest domyślna (czyli nie musimy jej podawać jeśli chcemy z tej metody skorzystać). Praca z formularzem (cz. 2) 4. Jak odczytać dane formularza • Dane formularza są zapisane w zmiennych superglobalnych będących tablicami asocjacyjnymi: $_GET lub $_POST w zależności czy były wysłane metodą GET czy POST • Indeksy (klucze) tej tablicy są takie jak wartości atrybutów name poszczególnych pól formularza. • Elementami tej tablicy są wartości atrybutów value poszczególnych pól formularza. W przypadku pól tekstowych elementem tej tablicy będzie napis wprowadzony w polu tekstowym. Czyli: • Tekst jaki wpisał użytkownik w polu tekstowym jest zapisany w $_GET['imie'] • Jeśli użytkownik wybrał grupę 16-30 z pól radio to $_GET['wiek'] ma wartość "od 16 do 30". • Jeśli użytkownik wybrał zainteresowania: Sport i Film to $_GET['zainteresowania'] jest tablicą dwuelementową (indeksowaną liczbami) o wartościach sport i muzyka. Czyli $_GET['zainteresowania'][0] ma wartość "sport" zaś $_GET['zainteresowania'][1] ma wartość "film" Dłuższy przykład: formularz2.html przetworz2.php Metody żądania: GET i POST GET • Dane formularza są wysyłane poprzez dołączenie do adresu URL po znaku zapytania. Czyli w naszym przykładzie, jeśli użytkownik wpisał imię ala, wybrał 0-15, zaznaczył tylko sport to do adresu będzie dołączony ciąg znaków zaznaczony na czerwono: http://localhost/.../przetworz1.php?imie=ala&wiek=do+15&zainteresowania[]=sport POST • Dane formularza są wysyłane w ciele żądania. Jeśli połączenie jest szyfrowane (https) dane są dodatkowo szyfrowane POST /mg/pwi/1516/0102/przetworz1.php HTTP/1.1 Host: localhost ... Content-Type: application/x-www-form-urlencoded Content-Length: 47 imie=ala&wiek=do+15&zainteresowania%5B%5D=sport - ciało żądania, przesłane dane formularza Metody żądania: GET i POST (porównanie) GET • Stosujemy, gdy formularz służy do wyszukiwania (odczytu) danych na serwerze. Ze względu na to, że dane są dołączane do adresu URL wynik wyszukiwania można zapisać jako "ulubione". • Można wysłać ograniczoną ilości danych (W zależności od przeglądarki długość adresu URL jest ograniczona np. do 256 znaków) POST • Stosujemy, gdy formularz służy do zapisania danych na serwerze, np. formularz rejestracji • Stosujemy, gdy formularz służy do zalogowania (gdy trzeba przesłać hasło). Połączenie między klientem a serwerem może być szyfrowane wtedy będzie jeszcze większe bezpieczeństwo. Jeśli hasło zostało by wysłane metodą GET to byłoby jawnie przesłane jako część adresu URL. • Nie ma ograniczeń co do ilości wysyłanych danych. Obejrzenie żądania i odpowiedzi HTTP Za pomocą np. programu Fiddler możemy obejrzeć jak wyglądają żądania wysyłane przez przeglądarkę i jak wyglądają odpowiedzi otrzymywane z serwera. http://www.telerik.com/download/fiddler Po uruchomieniu programu po lewej stronie mamy listę wszystkich żądań. Po wybraniu żądania, po prawej stronie u góry możemy obejrzeć szczegóły żądanie a u dołu odpowiedź (nacisnąć zakładkę "Raw" dla żądania i odpowiedzi) Można również obejrzeć w Firebug-u: zakładka "Sieć". Żądania i odpowiedzi pojawią się poniżej. "+" rozwijamy szczegóły. "Pokaż źródło" - odpowiednik "Raw" Fiddlera Formularz i przetwarzanie danych w jednym pliku Przykład: − dwa pliki: zamowienie.html i przetworzzamowienie.php − w jednym pliku formularz i przetwarzanie: zamowienie.php Wyjaśnienie do przykładu zamowienie.php: 1. Atrybut action - odwołanie do samego siebie. Ten sam plik w którym jest formularz przetwarza też i dane formularza 2. Sprawdzamy czy był naciśnięty przycisk "Zamów". Jeśli był, to zmienna $_GET['wyslij] jest ustawiona i funkcja isset() zwraca true. Jeśli nie był, to ta zmienna nie jest ustawiona i funkcja isset() zwraca false. Dlaczego to sprawdzać? Przy pierwszym otwarciu strony trzeba tylko wyświetlić formularz i nie przetwarzać danych formularza, bo takich jeszcze nie ma. Dane należy przetwarzać wtedy, gdy był naciśnięty przycisk "Zamów". Sprawdzenie formularza przed wysłaniem danych - JavaScript Przykład: zamowienieSpr.php Wyjaśnienie: 1. zdarzenie onsubmit ma miejsce, gdy naciśnięty jest przycisk submit. Jeśli wartość submit jest true to dane formularza zostaną wysłane na serwer, jeśli jest false to nie zostaną 2. funkcja sprawdz() zwraca true jeśli formularz jest dobrze wypełniony, zwraca false jeśli źle. Przypomnij sprawdzanie pól formularza: wykład 6 Podstawy programowania w internecie slajdy 6-7 Uwaga: To jest przykład sprawdzania po stronie przeglądarki, żeby nie wysyłać złych danych na serwer. Ale należy też robić sprawdzanie po stronie serwera, bo przecież użytkownik może wysłać złe dane nie poprzez naciśnięcie przycisku submit, ale np. wpisując odpowiedni adres URL, albo wysyłając żądanie POST za pomocą programu Fiddler. (Do tematu sprawdzania po stronie serwera jeszcze wrócimy).