Aplikacje WWW - laboratorium

Podobne dokumenty
Aplikacje internetowe - laboratorium

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

SSK - Techniki Internetowe

Wprowadzenie do Internetu Zajęcia 5

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Aplikacje WWW - laboratorium

Zaawansowane aplikacje internetowe

Aplikacje WWW - laboratorium

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

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Zajęcia 4 - Wprowadzenie do Javascript

Laboratorium 1 Wprowadzenie do PHP

Aplikacje WWW - laboratorium

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Aplikacje WWW - laboratorium

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Systemy internetowe Wykład 3 PHP

Aplikacje internetowe i rozproszone - laboratorium

Dokonaj analizy poniŝszego kodu i na jego podstawie wyświetl w oknie przeglądarki swoje Imię oraz Nazwisko przy uŝyciu instrukcji echo i print

Podstawy technologii WWW

Rozdział 4 KLASY, OBIEKTY, METODY

Ilość cyfr liczby naturalnej

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Funkcje i instrukcje języka JavaScript

Język PHP. Studium Podyplomowe Sieci Komputerowe i Aplikacje Internetowe. v1.7, 2007/11/23

INSTALACJA I KONFIGURACJA SERWERA PHP.

Należy ściągnąć oprogramowanie Apache na platformę

Programowanie obiektowe

Formularze w PHP dla początkujących

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

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

PHP: bloki kodu, tablice, obiekty i formularze

Web Services (SOAP) Ćwiczenie 1

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

WYMAGANIA EDUKACYJNE. Programowanie Aplikacji Internetowych klasa III

Zaawansowane aplikacje internetowe

Języki skryptowe - PHP. Podstawy PHP. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Zajęcia 11 wykorzystanie MySQL w PHP

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

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

Podstawy JavaScript ćwiczenia

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

Projektowani Systemów Inf.

Aplikacje WWW - laboratorium

Formularze HTML. dr Radosław Matusik. radmat

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Laboratorium 6 Tworzenie bloga w Zend Framework

PHP 5 język obiektowy

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

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

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

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

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: Tablice w PHP 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA

Internetowe bazy danych

Projektowanie aplikacji internetowych laboratorium

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Programowanie obiektowe

Ćwiczenie: JavaScript Cookies (3x45 minut)

Bazy danych i strony WWW

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Dokumentacja Skryptu Mapy ver.1.1

Laboratorium 7 Blog: dodawanie i edycja wpisów

Ćwiczenie 1. Wprowadzenie do programu Octave

WOJEWÓDZTWO PODKARPACKIE

Ćwiczenie 1. Wprowadzenie do programu Octave

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

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

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Materiały do zajęć III

Aplikacje w środowisku Java

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Zajęcia 10 obsługa formularzy w PHP

Zaawansowane aplikacje internetowe laboratorium

PHP + MySQL w laboratorium (1)

Przykładowa integracja systemu Transferuj.pl

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

Instrukcje dołączania plików

Aplikacje WWW - laboratorium

Instrukcja składania wniosku o dofinansowanie w systemie informatycznym IP na potrzeby konkursu nr 1/1.1.1/2015

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

Generatory pomocy multimedialnych

Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod

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

Przetwarzanie sygnałów

Projekt strony internetowej firmy organizującej przyjęcia

Wykład 03 JavaScript. Michał Drabik

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 2).

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

Zaawansowane aplikacje internetowe - laboratorium

Wybrane działy Informatyki Stosowanej

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Wprowadzenie do programowania

Transkrypt:

Aplikacje WWW - laboratorium Język PHP Celem ćwiczenia jest przygotowanie prostej aplikacji internetowej zaimplementowanej w języku PHP. Aplikacja ilustruje takie mechanizmy jak: obiektowość w PHP, obsługa formularzy oraz obsługa zmiennych sesyjnych. Ćwiczenia można wykonać na dowolnym serwerze, na którym zainstalowano serwer HTTP (np. Apache) z obsługą PHP. Skrypty PHP należy zapisać w odpowiednim katalogu na serwerze jako pliki z rozszerzeniem.php. Do edycji plików należy wykorzystać dowolny edytor tekstowy. W ćwiczeniu jako przykładowe środowisko wykorzystano środowisko XAMPP (http://www.apachefriends.org/en/xampp.html) 1. Uruchom panel sterujący środowiska XAMPP i uruchom serwer Apache. 2. W katalogu $XAMPP_HOME/htdocs utwórz plik php_info.php i umieść w nim poniższy kod. <title>moja pierwsza strona w PHP</title> phpinfo(); 3. Otwórz w przeglądarce adres http://localhost/php_info.php i przeanalizuj wyniki działania skryptu. Zapoznaj się ze środowiskiem. Zwróć szczególną uwagę na listę zmiennych środowiskowych udostępnianych przez serwer skryptowi PHP (sekcja Apache Environment) i listę nagłówków HTTP zawartych w żądaniu i odpowiedzi (HTTP Headers Information).

4. W pierwszej kolejności zapoznamy się z listą zmiennych udostępnianych skryptowi przez serwer. Zwróć uwagę na charakterystyczne dla PHP użycie tablicy asocjacyjnej $_SERVER oraz sposób iteracji po elementach takiej tablicy. Utwórz nowy plik file01.php i umieść w nim poniższy kod. <h1>zmienne serwera</h1> <ul> foreach ($_SERVER as $zmienna => $wartosc) echo "<li><b>".$zmienna."</b> : ".$wartosc."</li>"; </ul>

6. Kolejnym krokiem będzie przejęcie danych z prostego formularza i wyliczenie sumy liczb. Utwórz plik file02.php i umieść w nim poniższy kod. <form action="file02.php" method="get"> Podaj wartość x: <input type="text" name="x"/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> $x = $_GET['x']; $suma = 0; for ($i=0; $i<$x; $i++) $suma += $i; echo "suma liczb od 1 do ".$x." wynosi: ".$suma; 7. Kod w pliku file02.php jest niepoprawny, ponieważ wykorzystuje wartość zmiennej przekazanej przez użytkownika bez jakiejkolwiek walidacji poprawności. Zmodyfikuj główny fragment skryptu PHP w poniższy sposób i przetestuj poprawność rozwiązania. Czy potrafisz wykonać to samo obliczenie bez użycia pętli? $x = $_GET['x']; if (is_numeric($x)) $suma = 0; for ($i=0; $i<$x; $i++) $suma += $i; echo "suma liczb od 1 do ".$x." wynosi: ".$suma; echo "<div style=\"color: red\">proszę podać poprawną liczbę</div>";

8. W następnym kroku zaimplementujemy algorytm Euklidesa i wykorzystamy do walidacji poprawności danych mechanizm filtrów. Zwróć uwagę na sposób walidacji. Utwórz plik file03.php i umieść w nim poniższy kod. <form action="file03.php" method="get"> Podaj wartość x: <input type="text" name="x"/> Podaj wartość y: <input type="text" name="y"/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> $int_options = array("options" => array("min_range" => 1,"max_range" => 1000000)); $x = filter_var($_get['x'], FILTER_VALIDATE_INT, $int_options); $y = filter_var($_get['y'], FILTER_VALIDATE_INT, $int_options); if ($x && $y) while ($x!= $y) if ($x > $y) $x -= $y; $y -= $x; echo "największy wspólny dzielnik tych liczb to ".$x; echo "<div style=\"color: red\">podaj poprawne liczby</div>";

9. Podobnie jak w przypadku języka JavaScript, jednym z najwygodniejszych mechanizmów walidacji danych wejściowych są wyrażenia regularne. Poniższy przykład pokazuje, w jaki sposób można wykorzystać język wyrażeń regularnych do przeprowadzenia walidacji formatu karty kredytowej. Numer karty kredytowej to cztery grupy czterocyfrowe opcjonalnie rozdzielone spacją lub myślnikiem, a data ważności to dwie grupy dwucyfrowe rozdzielone znakiem /. Utwórz plik file04.php i umieść w nim poniższy kod. <form action="file04.php" method="get"> Podaj numer karty: <input type="text" maxlength="19" size="19" name="numer_karty" /> Podaj datę ważności: <input type="text" maxlength="5" size="5" name="data_waznosci" /> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> $numer_karty = $_GET['numer_karty']; $data_waznosci = $_GET['data_waznosci']; if (!preg_match("/^(\d4[\s\-]?)4$/",$numer_karty)) echo "<div style=\"color: red\">podaj poprawny numer karty</div>"; if (!preg_match("/^\d2\/\d2$/",$data_waznosci)) echo "<div style=\"color: red\">podaj poprawną datę</div>"; echo "podano poprawny numer karty kredytowej"; 10. Kod w pliku file04.php ma dwie wady. Po pierwsze, wyrażenie regularne zaakceptuje łańcuch 16 cyfr zakończony spacją. Zmodyfikuj wyrażenie regularne w taki sposób, aby na końcu numeru karty kredytowej nie mogła się pojawić spacja. Po drugie, w przypadku popełnienia błędu zawartość formularza jest tracona stanowi to bardzo poważną niedogodność dla użytkownika. Zmodyfikuj kod tworzący formularz HTML w taki sposób, aby nie tracić wartości wprowadzanych do pól formularza. <form action="file04.php" method="get"> Podaj numer karty: <input type="text" maxlength="19" size="19" name="numer_karty" value=" echo $_GET['numer_karty']; "/> Podaj datę ważności: <input type="text" maxlength="5" size="5" name="data_waznosci" value=" echo $_GET['data_waznosci']; "/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/>

11. Kolejny przykład obrazuje sposób wykorzystania funkcji i obiektów w PHP. Rozpocznij od utworzenia pliku file05.php i umieszczenia w nim poniższego kodu. <form action="file05.php" method="get"> Podaj długość: <input type="text" size="4" name="x"/> Podaj szerokość: <input type="text" size="4" name="y"/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> function pole($a,$b) return $a * $b; $int_options = array("options"=>array("min_range"=>1)); $x = filter_var($_get['x'], FILTER_VALIDATE_INT, $int_options); $y = filter_var($_get['y'], FILTER_VALIDATE_INT, $int_options); if ($x && $y) echo "pole prostokąta o wymiarach $x x $y wynosi ".pole($x,$y); echo "<div style=\"color: red\">podaj poprawne wymiary</div>";

12. Następnym krokiem będzie przepisanie powyższego skryptu w taki sposób, aby korzystał z opcji obiektowej. Zamień główny kod PHP na poniższy kod i przetestuj aplikację. class prostokat public $dlugosc; public $szerokosc; function pole() return $this->dlugosc * $this->szerokosc; $int_options = array("options"=>array("min_range"=>1)); $x = filter_var($_get['x'], FILTER_VALIDATE_INT, $int_options); $y = filter_var($_get['y'], FILTER_VALIDATE_INT, $int_options); if ($x && $y) $moj_prostokat = new prostokat; $moj_prostokat->dlugosc = $x; $moj_prostokat->szerokosc = $y; echo "pole prostokąta o wymiarach ".$x."x".$y." wynosi ".$moj_prostokat->pole(); echo "<div style=\"color: red\">podaj poprawne wymiary</div>";

13. Powyższy kod łamie zasadę hermetyczności i nie wykorzystuje konstruktorów. Napraw klasę prostokat w następujący sposób. class prostokat private $dlugosc; private $szerokosc; function prostokat($dlugosc, $szerokosc) $this->dlugosc = $dlugosc; $this->szerokosc = $szerokosc; function pole() return $this->dlugosc * $this->szerokosc; $int_options = array("options"=>array("min_range"=>1)); $x = filter_var($_get['x'], FILTER_VALIDATE_INT, $int_options); $y = filter_var($_get['y'], FILTER_VALIDATE_INT, $int_options); if ($x && $y) $moj_prostokat = new prostokat($x,$y); echo "pole prostokąta o wymiarach ".$x."x".$y." wynosi ".$moj_prostokat->pole(); echo "<div style=\"color: red\">podaj poprawne wymiary</div>";

14. Programując w PHP mamy również do dyspozycji mechanizm dziedziczenia. Poniższy przykład obrazuje sposób wykorzystania dziedziczenia do wyliczenia objętości prostopadłościanu. Zwróć szczególną uwagę na sposób wywołania konstruktora nadklasy wewnątrz konstruktora klasy. Umieść poniższy kod w pliku file06.php. <form action="file06.php" method="get"> Podaj długość: <input type="text" size="4" name="x"/> Podaj szerokość: <input type="text" size="4" name="y"/> Podaj wysokość: <input type="text" size="4" name="z"/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> class prostokat private $dlugosc; private $szerokosc; function prostokat($dlugosc, $szerokosc) $this->dlugosc = $dlugosc; $this->szerokosc = $szerokosc; function pole() return $this->dlugosc * $this->szerokosc; class prostopadloscian extends prostokat private $wysokosc; function prostopadloscian($dlugosc, $szerokosc, $wysokosc) parent::prostokat($dlugosc, $szerokosc); $this->wysokosc = $wysokosc; function objetosc() return parent::pole() * $this->wysokosc; $int_options = array("options"=>array("min_range"=>1)); $x = filter_var($_get['x'], FILTER_VALIDATE_INT, $int_options); $y = filter_var($_get['y'], FILTER_VALIDATE_INT, $int_options); $z = filter_var($_get['z'], FILTER_VALIDATE_INT, $int_options);

if ($x && $y && $z) $moj_prostopadloscian = new prostopadloscian($x,$y,$z); echo "objętość prostopadłościanu o wymiarach ".$x."x".$y."x".$z." wynosi ".$moj_prostopadloscian->objetosc(); echo "<div style=\"color: red\">podaj poprawne wymiary</div>"; 15. Język PHP pozwala użytkownikowi na elastyczne raportowanie i obsługiwanie błędów pojawiających się w programie. Następny przykład obrazuje koncepcję własnej funkcji obsługi błędu. Zmodyfikuj kod w pliku file06.php w następujący sposób. Dodaj definicję funkcji custom_error_handler(). function custom_error_handler($error_code, $error_message) echo "<div style=\"position: absolute; left: 10px; bottom: 100px; color: red\" >"; echo "<hr><b>error:</b> [$error_code] $error_message</div>"; die(); a następnie, tuż przed walidacją zmiennych z formularza, wskaż przygotowaną przez siebie funkcję jako domyślną funkcję obsługi błędów: set_error_handler("custom_error_handler"); W ostatnim kroku zamień wyświetlenie komunikatu o błędnych wymiarach na jawne wywołanie błędu: trigger_error("proszę podać poprawne wymiary");

16. Poza obsługą błędów język PHP umożliwia także zgłaszanie i przechwytywanie wyjątków. Utwórz plik file07.php i umieść w nim poniższy kod <form action="file07.php" method="get"> Podaj wartość: <input type="text" name="wartosc"/> <input type="submit" value="wyślij"/> <input type="reset" value="wyczyść"/> $wartosc = $_GET['wartosc']; try if (is_numeric($wartosc)) throw new Exception("wartość numeryczna"); if (is_string($wartosc)) throw new Exception("wartość znakowa"); catch(exception $e) echo "Wystąpił wyjątek: ".$e->getmessage();

17. Istnieje także możliwość definiowania własnych wyjątków jako klas potomnych dziedziczących z klasy Exception. W poniższym przykładzie przygotujemy specjalizowaną klasę NumericException służącą do obsługi sytuacji, w której użytkownik podaje zmienną liczbową. Umieść w pliku file07.php poniższy kod. class NumericException extends Exception function errormessage() $msg = "Błąd w linii ".$this->getline()." w pliku ". $this->getfile().":".$this->getmessage(); return $msg; $wartosc = $_GET['wartosc']; try if (is_numeric($wartosc)) throw new NumericException("wartość numeryczna"); if (is_string($wartosc)) throw new Exception("wartość znakowa"); catch(numericexception $e) echo $e->errormessage(); catch(exception $e) echo "Wystąpił wyjątek: ".$e->getmessage(); 18. Ostatnie trzy ćwiczenia mają na celu przybliżenie studentom podstawowych mechanizmów wykorzystywanych w prostych aplikacjach internetowych. Pierwszy przykład obrazuje działanie mechanizmu ciasteczek (ang. cookies). Utwórz plik file08.php i umieść w nim poniższy kod. Zwróć uwagę, że ciasteczka są przesyłane w nagłówku pakietu http, a zatem polecenie przesłania ciasteczka musi się pojawić zanim wygenerowane zostanie ciało pakietu http (w tym przypadku dokument HTML). Po uruchomieniu skryptu odśwież kilkukrotnie stronę w przeglądarce. setcookie("last_visit",time(),time()+3600); if (isset($_cookie['last_visit'])) $last_visit = $_COOKIE['last_visit']; echo "Ostatnia wizyta :".date("d M Y H:i:s",$last_visit); echo "To Twoja pierwsza wizyta";

19. Drugim popularnym mechanizmem wykorzystywanym w aplikacjach internetowych jest emulowana sesja http. Poniżej znajduje się prosta implementacja gry w orzełreszka wykorzystująca sesję do zapamiętania stanu gry. Zwróć uwagę na sposób inicjalizacji obiektów sesyjnych oraz sposób przenoszenia stanu gry pomiędzy kolejnymi żądaniami. Utwórz plik file09.php i umieść w nim poniższy kod. session_start(); class heads_tails public $heads; public $tails; function heads_tails() $this->heads = 0; $this->tails = 0; function add_head() $this->heads++; function add_tail() $this->tails++; <form action="file09.php" method="post"> <input type="submit" value="rzuć monetą"/> $result = rand() % 2; if (!isset($_session['state'])) $state = new heads_tails; $state = $_SESSION['state']; switch($result) case 0: $state->add_head(); break; case 1: $state->add_tail(); break; ; $_SESSION['state'] = $state; echo "<h2>dotychczasowy wynik</h2>"; echo "<ul>"; echo "<li>orzełek: ".$state->heads."</li>"; echo "<li>reszka: ".$state->tails."</li>"; echo "</ul>";

20. Ostatni przykład pokazuje proste wymuszenie zalogowania użytkownika oraz wskazuje, w jaki sposób szybko i wygodnie można osadzić w kodzie PHP statyczną zawartość. Utwórz plik file10.php i umieść w nim poniższy kod. Przetestuj działanie aplikacji. if ($_SERVER['PHP_AUTH_USER']!= "scott" $_SERVER['PHP_AUTH_PW']!= "tiger") header('www-authenticate: Basic realm="logowanie"'); header('http/1.0 401 Unauthorized'); echo "<h1>brak autoryzacji</h1>"; exit(); print<<<koniec <h1>nie pieprz wieprza...</h1> <p>"nie pieprz, Pietrze, pieprzem wieprza, Wtedy szynka będzie lepsza." <p>"właśnie po to wieprza pieprzę, Żeby mięso było lepsze." <p>"ależ będzie gorsze, Pietrze, Kiedy w wieprza pieprz się wetrze!" KONIEC;