Bazy danych i strony WWW
Obsługa baz danych poprzez strony WWW Niezbędne narzędzia: serwer baz danych np. MySQL serwer stron WWW np. Apache przeglądarka stron WWW interpretująca język HTML język skryptowy (parser) wyposażony w możliwości współpracy z systemem zarządzania bazą danych
MySQL MySQL jest relacyjnym systemem zarządzania bazami danych klasy Open Source stworzony i rozwijany przez firmę MySQL AB http://www.mysql.com/) MySQL jest serwerem baz danych - pozwala korzystać z zasobów danych wielu użytkownikom (klientom)
MySQL monitor
Apache Najpowszechniej stosowany serwer stron WWW Zarządza plikami, kieruje je do przeglądarek i parserów Zarządza klientami i ich uprawnieniami
PHP PHP (akronim rekursywny "PHP: Hypertext Preprocessor"), jest szeroko używanym językiem skryptowym ogólnego zastosowania, tworzonym na zasadach Open Source, dopasowanym do potrzeb aplikacji WWW, z możliwością zagnieżdżania w HTML
PHP PHP jest rozwijane pod kątem pisania skryptów server-side PHP potrafi odbierać dane z formularzy, generować dynamicznie zawartość strony, odbierać i wysyłać ciasteczka
PHP PHP jest parserem czyli analizatorem składni, który analizuje podany w źródle tekst i w oparciu o niego tworzy kod programowy w konkretnym języku (w tym przypadku HTML)
HTML i XHTML http://kurshtml.boo.pl/ XHTML to skrót od Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania. Reformuje on zasady języka HTML 4 w taki sposób, aby były zgodne z XML (Extensible Markup Language - Rozszerzalny Język Oznaczania)
Struktura dokumentu XHTML
Edytowanie i przeglądanie dokumentów HTML Dokumenty HTML mogą być edytowane przez proste edytory tekstowe lub tzw. edytory znaczników np. ezHTML Zaawansowane edytory tekstowe np. Word widzą dokumenty HTML tak jak przeglądarki Przeglądarki internetowe pokazują dokumenty HTML także w trybie off line
Word
Notatnik
ezHTML
przeglądarka w trybie off line przeglądarka za pośrednictwem serwera stron www
Style CSS - Cascading Style Sheets (z ang. Kaskadowe Arkusze Stylów) język opracowany w celu stworzenia możliwości bardziej elastycznego zarządzania sposobem formatowania (wyglądem) elementów znajdujących się w dokumentach elektronicznych CSS nie może istnieć samodzielnie, gdyż jest ściśle powiązane z językiem opisu struktury dokumentów takim jak (X)HTML Style formatujące są wbudowane w praktycznie każdy bardziej zaawansowany edytor tekstu np. MS Word i Open Office
Style i znaczniki
Formularze Formularz w HTML stwarza użytkownikowi (klientowi) możliwość wprowadzania informacji do systemu i przekazywania ich dalej Formularz uruchamia akcję zapisaną jako argument parametru „action”
Akcje formularza Akcje uruchamiane przez formularz są obsługiwane przez przeglądarkę Jedną z możliwych akcji jest wysłanie wiadomości pocztowej
Obsługa programowa akcji Użytkownik może sam definiować akcje Do definiowania akcji wykonywanych przez przeglądarkę klienta służyć mogą skrypty wykonywane po stronie klienta (np.: JavaScript lub Visual Basic - VBScript) Mogą być one wykonywane przed wysłaniem strony ale nie potrafią zapamiętywać danych
JavaScript
Akcje po stronie serwera Przetwarzanie danych przesłanych przez klienta jest możliwe dzięki skryptom wykonywanym po stronie serwera (np. PHP i CGI) Argumentem action znacznika form jest wtedy adres dokumentu zawierającego odpowiedni skrypt Argument method określa sposób przesyłania danych
Przykład Przeglądarka WWW żąda dokumentu: dodawacz.html
po naciśnięciu przycisku „Dodaj” otwierany jest dokument „Dodaj.php”
Akcja po stronie serwera Serwer WWW rozpoznaje rozszerzenie (.php) i kieruje dokument do parsera PHP Parser interpretuje kod poczynając od symbolu <? i kończąc na znakach ?>
Akcja po stronie serwera Parser wykonuje kod, a uzyskane wyniki umieszcza w pliku w miejscu uprzednio zajmowanym przez polecenia print lub echo
Powrót do klienta Nowy plik jest przesyłany do serwera WWW Serwer przesyła plik do przeglądarki Przeglądarka interpretuje kod HTML i wyświetla wyniki
Formularze - pole opcji
Formularze - pole opcji
Skrypt PHP i wynik jego działania
Widok z przeglądarki
Formularze – pole wyboru
Formularze – pole wyboru
Skrypt PHP i wynik jego działania
Widok z przeglądarki
Formularze – lista rozwijalna
Formularze – lista rozwijalna
Skrypt PHP i wynik jego działania
Widok z przeglądarki
PHP i baza danych
Efekt działania skryptu
Pobieranie danych z bazy
Efekt działania skryptu
Internetowy system sprzedaży Zamówienia składane są poprzez stronę WWW Przedmiotem sprzedaży są rury stalowe i złączki do rur System umożliwia przyjmowanie i edycję zamówień Efektem działania systemu są zestawienia ilości zamówionych produktów
Diagram ERD (baza danych Sprzedaż)
Tworzenie tabeli JednostkiMiary Create table sprzedaz.jednostkimiary ( IdJednostki Int(11) NOT NULL AUTO_INCREMENT, JednostkaMiary Char(20), UNIQUE (JednostkaMiary), Primary Key (IdJednostki)) ENGINE = MyISAM ROW_FORMAT = Fixed;
Tworzenie tabeli Klient Create table sprzedaz.Klient ( IdKlienta Int(11) NOT NULL AUTO_INCREMENT, NazwaKlienta Char(50), Adres Char(50), Primary Key (IdKlienta)) ENGINE = MyISAM ROW_FORMAT = Fixed;
Tworzenie tabeli Towary Create table sprzedaz.Towary ( IdTowaru Int(11) NOT NULL AUTO_INCREMENT, NazwaTowaru Char(50), Primary Key (IdTowaru)) ENGINE = MyISAM ROW_FORMAT = Fixed;
Tworzenie tabeli Zamowienie Create table sprzedaz.Zamowienie ( IdKlienta Int NOT NULL, IdZamowienia Int(11) NOT NULL AUTO_INCREMENT, DataZamowienia Date, NrZamowienia Char(20), Primary Key (IdZamowienia)) ENGINE = MyISAM ROW_FORMAT = Fixed;
Tworzenie tabeli Specyfikacja Create table sprzedaz.Specyfikacja ( IdTowaru Int NOT NULL, IdJednostki Int NOT NULL, IdZamowienia Int NOT NULL, Ilosc Float, Primary Key (IdTowaru,IdJednostki,IdZamowienia)) ENGINE = MyISAM ROW_FORMAT = Fixed;
Ustawianie więzów integralności Alter table sprzedaz.specyfikacja add Foreign Key (IdJednostki) references sprzedaz.jednostkimiary (IdJednostki) on delete restrict on update restrict; Alter table sprzedaz.zamowienie add Foreign Key (IdKlienta) references sprzedaz.klient (IdKlienta) on delete restrict on update restrict; Alter table sprzedaz.specyfikacja add Foreign Key (IdTowaru) references sprzedaz.towary (IdTowaru) on delete restrict on update restrict; Alter table sprzedaz.specyfikacja add Foreign Key (IdZamowienia) references sprzedaz.zamowienie (IdZamowienia) on delete restrict on update restrict;
Strona startowa Do utworzenia strony sterującej systemem wystarczy kod HTML Menu tworzymy wykorzystując znacznik listy <ul> Odpowiednie moduły uruchamiane są odnośnikiem do dokumentu <li><a href="NoweZamowienie.php">Nowe zamówienie</a></li>
Dodawanie klienta Proste dodawanie rekordu do tabeli wymaga użycia strony utworzonej w HTML Formularz utworzony kodem <FORM METHOD="post" ACTION="dodajklienta.php"> pozwala pobrać dane i przekazać je w bloku POST do dokumentu dodajklienta.php
Dodawanie klienta Dokument dodajklienta.php jest interpretowany przez parser PHP Część kodowa dokumentu wykonuje połączenie z bazą danych i realizuje polecenie SQL Dane przekazywane są ze strony dodajklienta.html jako zmienne PHP (tabela $_PHP[nazwa_pola])
sprawdzamy czy wprowadzono nazwę klienta INSERT INTO klient (NazwaKlienta, Adres) VALUES ('Fabryka wózków dziecięcych' , 'Krzeszowice ul, Krakowska 5')
Dodawanie klienta W tym samym dokumencie umieszczono kod HTML Kod HTML wyświetla wprowadzone dane i przekierowuje użytkownika do strony startowej lub strony dodawania klienta
Kontrola błędów W tabeli JednostkiMiary zdefiniowano pole JednostkaMiary jako UNIQUE Próba wprowadzenie jednostki miary, która jest już w tabeli spowoduje błąd Błąd ten identyfikowany jest funkcją mysql_error
jeśli nie wystąpił błąd czy wystąpił błąd? jeśli nie wystąpił błąd
Wprowadzanie zamówienia Plik NoweZamowienie.php składa się z części kodowej oznaczonej znacznikami <? i ?> oraz kodu HTML Pierwsza część kodu PHP pobiera listę klientów i umieszcza ją w tabeli blok_opcji_ZA za pośrednictwem tabeli wiersz
odpowiednik use sprzedaz połączenie z bazą danych na komputerze macierzystym dla użytkownika root bez hasła odpowiednik use sprzedaz
Pobieranie listy klientów Tak wyglądają kolejne realizacje wiersza $wiersz 5 Fabryka Mebli 4 Fabryka Rowerów 7 Fabryka wózków dziecięcych 1 Firma 3 Firma Kruk 6 Hurtownia Materiałów Budowlanych 2 Sklep Ogólny
Przygotowanie formularza Kod HTML powodujący wyświetlenie formularza do wprowadzania danych o nagłówku zamówienia umieszczany jest w tablicowej zmiennej tekstowej blok Do formularza włączana jest lista klientów ze zmiennej tekstowej blok_opcji_ZA
od tego momentu wszelkie zmienne definiowane przez name= będą widoczne w DodajSpecyfikacje.php jako zmienne PHP ($POST_...)
Wyświetlenie formularza Druga część pliku NoweZamówienie.php zawiera kod HTML i wstawkę PHP powodującą wyświetlenie formularza
Dopisywanie specyfikacji Polecenie submit uruchamia akcję wyzwalającą dokument DodajSpecyfikacje.php Pierwsza część kodu PHP powoduje zapisanie nowego zamówienia do bazy
pobranie identyfikatora dopisanego rekordu INSERT INTO zamowienie (IdKlienta, DataZamowienia, NrZamowienia) VALUES ('7' , '2005-04-02', '2005/876') pobranie identyfikatora dopisanego rekordu
Przygotowanie formularza Następnie do tabeli blok_opcji_TO pobierana jest lista towarów i lista jednostek miary (tabela blok_opcji_JM)
Definicja formularza W zmiennej l zapamiętujemy liczbę pozycji Formularz zostaje związany z plikiem ZatwierdzSpecyfikacje.php liczba pozycji oraz indeks wprowadzanego zamówienia zapisywane są do ukrytych zmiennych zbioru POST (Indeks i Lp)
Definicja formularza W pętli przygotowywane są kolejne wiersze formularza Na zakończenie wpisywane są instrukcje zamykające formularz
Wyświetlanie formularza Kod HTML i wstawka PHP powoduję wyświetlenie formularza
Dopisanie specyfikacji Polecenie submit przekazuje sterowanie do ZatwierdzSpecyfikacje.php W pętli dopisywane są kolejne rekordy do tablicy specyfikacja
INSERT INTO specyfikacja (IdZamowienia, IdTowaru, Ilosc, IdJednostki) VALUES ('70' , '2', '150','1') ....
Zakończenie dopisywania Kod HTML dołączony do pliku ZatwierdzSpecyfikacje.php potwierdza zapisanie danych i umożliwia przejście do strony głównej lub do kolejnego zamówienia
Zestawianie zamówionych towarów Plik ZestawienieTowarow.html zawiera kod HTML otwierający formularz do określenia zakreus czasowego zestwienia
Zestawianie zamówionych towarów Plik Zestawienie.php zawiera kod PHP realizujący zapytanie oparte na tabelach: zamowienie, specyfikacja, JednostkiMiary i towary
Tak wygląda zapytanie SELECT zamowienie.datazamowienia, Towary.NazwaTowaru, SUM( Specyfikacja.Ilosc ) AS Suma, JednostkiMiary.JednostkaMiary FROM zamowienie INNER JOIN ( Towary INNER JOIN (JednostkiMiary INNER JOIN Specyfikacja ON JednostkiMiary.IdJednostki = Specyfikacja.IdJednostki ) ON Towary.IdTowaru = Specyfikacja.IdTowaru ) ON zamowienie.IdZamowienia = Specyfikacja.IdZamowienia GROUP BY Towary.NazwaTowaru, JednostkiMiary.JednostkaMiary HAVING zamowienie.dataZamowienia >= 2005-03-01 AND dayofyear(zamowienie.dataZamowienia)<=dayofyear('2005-03-31') AND year(zamowienie.dataZamowienia)<=year('2005-03-31') ORDER BY Towary.NazwaTowaru
Przygotowanie listy W pętli wykonywanej dopóty dopóki zwracane są niepuste wiersze ze złączenia przygotowywane są kolejne linie zestawienia Kolejne linie umieszczane są w tabeli formularza
Wyświetlanie zestawienia Dołączony do pliku Zestawienie.php kod HTML wraz ze wstawkami PHP powoduje wyświetlenie formularza i umożliwia powrót do strony głównej
Edycja specyfikacji zamówienia Plik EdycjaZamowienia.php przygotowuje formularz do wyboru zamówienia Lista zamówień przenoszona jest do tablicy blok_opcji_ZA
Wyświetlanie listy zamówień Dołączony do pliku EdycjaZamowienia.php kod HTML oraz wstawki PHP powodują wyświetlenie listy do wyboru zamówienia
Przygotowanie do edycji specyfikacji W pliku Edycja.php przygotowuje się listy opcji do wyświetlania towarów i jednostek miar Pobrane z odpowiednich tablic wiersze przechowywane są w tablicach IdT[], TW[], IdJ[] i JK[]
liczba zwróconych wierszy
Przygotowanie formularza Dane opisujące specyfikację pobierane są z tabel Specyfikacja, Towary i JednostkiMiary Identyfikator zamówienia i liczba pozycji w specyfikacji są pamiętane jako zmienne ukryte typu POST (Indeks i Lp)
SELECT Specyfikacja. IdZamowienia, Towary. IdTowaru, JednostkiMiary SELECT Specyfikacja.IdZamowienia, Towary.IdTowaru, JednostkiMiary.IdJednostki, Towary.NazwaTowaru, Specyfikacja.Ilosc, JednostkiMiary.JednostkaMiary FROM Towary INNER JOIN (JednostkiMiary INNER JOIN Specyfikacja ON JednostkiMiary.IdJednostki = Specyfikacja.IdJednostki) ON Towary.IdTowaru = Specyfikacja.IdTowaru WHERE Specyfikacja.IdZamowienia = 70
Przygotowanie formularza W pętli pobierane są kolejne wiersze specyfikacji Dla każdego wiersza ustalana jest lista opcji do wyboru towaru i jednostki miary Lista ta ustawiana jest na pozycji odpowiadającej wcześniejszemu wyborowi Zmienna cb będzie rejestrować żądanie usunięcia rekordu
indeks wiersza w specyfikacji cb0 cb1 cb2 cb3 indeks wiersza w liście towarów indeks wiersza w liście jedn. miary
Przygotowanie formularza Przygotowane są listy wyboru towarów i jednostek miar oraz zmienna do wprowadzania ilości przyjmująca dotychczasową wartość Dołączane jest pole kontrolne (checkbox) do rejestrowania żądań usunięcia rekordu
Wyświetlanie formularza Dołączony do pliku Edycja.php kod HTML oraz wstawki PHP powodują wyświetlenie formularza edycji specyfikacji
Zatwierdzanie poprawek Plik ZatwierdzEdycje.php zawiera kod służący do usunięcia pierwotnych zapisów oraz wprowadzenia nowych Zapisywane są tylko te wiersze, dla których zmienna tworzona przez pole kontrolne nie jest ustawiona (jej wartość jest różna od on)
DELETE FROM specyfikacja WHERE IdZamowienia='70' INSERT INTO specyfikacja (IdZamowienia, IdTowaru, Ilosc, IdJednostki) VALUES ('70' , '1', '250','1') INSERT INTO specyfikacja .......
Wyświetlanie potwierdzenia Dołączony do pliku ZatwierdzEdycje.php kod HTML oraz wstawki PHP powodują wyświetlenie potwierdzenia zmian i umożliwia przejście do kolejnego zamówienia lub do strony głównej
Przeglądanie zamówienia Poprawione zamówienie można przeglądać dzięki opcji Przeglądanie zamówień
Funkcje MySQL w PHP mysql_affected_rows -- Zwraca ilość wierszy przetworzonych w poprzedniej operacji MySQL mysql_change_user -- Zmienia użytkownika zalogowanego w aktywnym połączeniu mysql_close -- Zamyka połączenie z serwerem MySQL mysql_connect -- Otwiera połączenie z serwerem MySQL mysql_create_db -- Tworzy bazę MySQL mysql_data_seek -- Przesuwa wewnętrzny wskaźnik wyniku mysql_db_name -- Pobiera dane wynikowe mysql_db_query -- Wysyła zapytanie do bazy MySQL mysql_drop_db -- Usuwa bazę MySQL mysql_errno -- Zwraca numer komunikatu błędu z ostatniej operacji MySQL
Funkcje MySQL w PHP mysql_error -- Zwraca tekst komunikatu błędu z ostatniej operacji MySQL mysql_escape_string -- Dodaje znaki unikowe na użytek mysql_query mysql_fetch_array -- Zapisuje wiersz wyniku w tablicy asocjacyjnej, numerycznej lub w obu mysql_fetch_assoc -- Zapisuje wiersz wyniku w tablicy asocjacyjnej mysql_fetch_field -- Pobiera z wyniku informacje o kolumnie i zwraca jako obiekt mysql_fetch_lengths -- Pobiera długość każdego pola w wierszu wyniku