SlideShare a Scribd company logo
1 of 49
Download to read offline
IDZ DO
         PRZYK£ADOWY ROZDZIA£
                                         PHP i MySQL. Dynamiczne
                           SPIS TREŒCI
                                         strony WWW. Szybki start.
           KATALOG KSI¥¯EK               Wydanie II
                                         Autor: Larry Ullman
                      KATALOG ONLINE     T³umaczenie: Jaromir Senczyk i Grzegorz Werner
                                         na podstawie t³umaczenia Micha³a Dadana i Piotra Pilcha
       ZAMÓW DRUKOWANY KATALOG           ISBN: 83-246-0207-0
                                         Tytu³ orygina³u: PHP and MySQL for Dynamic
                                         Web Sites: Visual QuickPro Guide (2nd Edition)
              TWÓJ KOSZYK                Format: B5, stron: 688

                    DODAJ DO KOSZYKA               B³yskawiczny kurs tworzenia dynamicznych serwisów internetowych
                                         Dynamiczne strony WWW spotykamy codziennie, korzystaj¹c z internetu. Portale,
                                         sklepy internetowe, gry sieciowe — wszystkie te witryny korzystaj¹ z baz danych
         CENNIK I INFORMACJE             i skryptów wykonywanych po stronie serwera. Technologii umo¿liwiaj¹cych realizacjê
                                         tego typu witryn WWW jest kilka. Wœród nich zas³u¿on¹ popularnoœci¹ cieszy siê
                   ZAMÓW INFORMACJE      „duet” o ogromnych mo¿liwoœciach — jêzyk skryptowy PHP i baza danych MySQL.
                     O NOWOŒCIACH        Te dostêpne nieodp³atnie narzêdzia wykorzystywane s¹ przez tysi¹ce twórców witryn
                                         WWW. Do³¹cz do nich!
                       ZAMÓW CENNIK      Ksi¹¿ka „PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II” to kolejna
                                         edycja doskona³ego przewodnika po tajnikach tworzenia witryn internetowych
                                         za pomoc¹ tych technologii. Znajdziesz w niej wszystkie informacje niezbêdne
                 CZYTELNIA               do rozpoczêcia projektowania w³asnych dynamicznych stron WWW — od podstaw
                                         programowania i korzystania z baz danych, poprzez wykorzystywanie sesji i plików
          FRAGMENTY KSI¥¯EK ONLINE
                                         cookie, a¿ do zaawansowanych technik autoryzowania u¿ytkowników i budowania
                                         aplikacji e-commerce. Ka¿de zagadnienie jest przedstawione na praktycznym
                                         przyk³adzie, co doskonale pomo¿e Ci w przyswojeniu wiedzy.
                                             • Podstawowe elementy skryptów PHP
                                             • Obs³uga formularzy HTML
                                             • Tworzenie i stosowanie funkcji
                                             • Projektowanie baz danych
                                             • Operacje na danych
                                             • Wykrywanie i usuwanie b³êdów w skryptach
                                             • £¹czenie skryptów PHP z baz¹ danych
                                             • Stosowanie plików cookie i mechanizmów zarz¹dzania sesjami
Wydawnictwo Helion                           • Zabezpieczanie i szyfrowanie danych
ul. Chopina 6                                • Zarz¹dzanie treœci¹ strony
44-100 Gliwice                               • Autoryzowanie u¿ytkowników
tel. (32)230-98-63                           • Projektowanie sklepów internetowych
e-mail: helion@helion.pl
Spis treści



                                                                                   Spis treści


              Wprowadzenie                                                                                                   9
Rozdział 1.   Wprowadzenie do PHP                                                                                            19
              Podstawy składni ......................................................................................20
              Przesyłanie danych do przeglądarki internetowej ....................................24
              PHP, HTML i „białe odstępy” .................................................................28
              Wstawianie komentarzy ...........................................................................33
              Co to są zmienne? ....................................................................................36
              Łańcuchy ..................................................................................................39
              Liczby .......................................................................................................43




                                                                                                                                   Spis treści
              Stałe ..........................................................................................................47
              Apostrof kontra cudzysłów ......................................................................50
Rozdział 2.   Programowanie w PHP                                                                                      53
              Tworzenie formularza w języku HTML ..................................................54
              Obsługa formularza HTML ......................................................................58
              Zarządzanie opcją Magic Quotes ...............................................................61
              Wyrażenia warunkowe i operatory ...........................................................64
              Weryfikacja danych pochodzących z formularza .....................................68
              Co to są tablice? .......................................................................................73
              Pętle for i while ........................................................................................91
Rozdział 3.   Tworzenie dynamicznych stron WWW                                                                       95
              Wykorzystywanie plików zewnętrznych ..................................................96
              Wyświetlanie i obsługa formularza przez jeden skrypt ............................105
              Tworzenie formularzy z pamięcią ..........................................................109
              Tworzenie i wywoływanie własnych funkcji .........................................112
              Zasięg zmiennej ......................................................................................124
              Funkcje daty i czasu ...............................................................................128
              Wysyłanie poczty elektronicznej ............................................................132

                                                                                                                             5
Spis treści

              Rozdział 4.   Wprowadzenie do SQL i MySQL                                                                               139
                            Wybór typu kolumny .............................................................................140
                            Wybór innych właściwości kolumn .......................................................144
                            Korzystanie z monitora mysqla ..............................................................146
                            Tworzenie baz danych i tabel .................................................................150
                            Wprowadzanie rekordów .......................................................................153
                            Wybieranie danych .................................................................................156
                            Wyrażenia warunkowe ...........................................................................158
                            Stosowanie LIKE i NOT LIKE ..............................................................162
                            Sortowanie wyników zapytania ..............................................................164
                            Ograniczanie wyników zapytania ..........................................................166
                            Uaktualnianie danych .............................................................................169
                            Usuwanie danych ...................................................................................171
                            Funkcje ...................................................................................................173
              Rozdział 5.   Zaawansowany SQL i MySQL                                                                                  183
                            Projekt bazy danych ...............................................................................184
                            Złączenia ................................................................................................200
Spis treści




                            Grupowanie wyników zapytania ............................................................204
                            Indeksy ...................................................................................................206
                            Stosowanie różnych typów tabeli ...........................................................209
                            Wyszukiwanie FULLTEXT ...................................................................212
                            Optymalizacja bazy danych ....................................................................219
              Rozdział 6.   Obsługa i usuwanie błędów                                                                   225
                            Ogólne typy błędów i ich usuwanie .......................................................226
                            Wyświetlanie błędów PHP .....................................................................232
                            Sterowanie raportowaniem błędów PHP ................................................233
                            Tworzenie własnych funkcji obsługi błędów .........................................236
                            Zapis komunikatów o błędach PHP do dziennika ..................................240
                            Techniki usuwania błędów z PHP .............................................................243
                            Techniki usuwania błędów SQL i MySQL ............................................246
              Rozdział 7.   PHP i MySQL                                                                                     249
                            Modyfikacja szablonu ............................................................................250
                            Łączenie się z MySQL-em i wybieranie bazy ........................................251
                            Wykonywanie prostych zapytań ............................................................255
                            Odczytywanie wyników zapytania .........................................................263

              6
Spis treści

                   Bezpieczeństwo ......................................................................................267
                   Zliczanie zwróconych rekordów ............................................................273
                   Uaktualnianie rekordów w PHP ...............................................................279
Rozdział 8.        Tworzenie aplikacji internetowych                                                                 287
                   Dopasowanie zachowania aplikacji do konfiguracji serwera .................288
                   Przekazywanie wartości do skryptu .......................................................291
                   Stosowanie ukrytych pól formularza ......................................................295
                   Edycja istniejących rekordów ................................................................301
                   Stronicowanie wyników zapytań ............................................................308
                   Wyświetlanie tabel z możliwością sortowania .......................................316
                   Nagłówki HTTP .....................................................................................323
Rozdział 9.        Sesje i „ciasteczka”                                                                                        333
                   Posługiwanie się ciasteczkami ...............................................................334
                   Sesje .......................................................................................................351
                   Sesje a „ciasteczka” ................................................................................367
                   Zwiększanie bezpieczeństwa sesji ..........................................................375




                                                                                                                                      Spis treści
Rozdział 10. Zabezpieczenia                                                                                   381
             Bezpieczniejsza walidacja formularzy ...................................................382
             Obsługa kodu HTML .............................................................................393
             Walidacja danych według typu ..............................................................397
             Walidacja formularza przy użyciu JavaScriptu .......................................401
             Wyrażenia regularne ..............................................................................408
             Zabezpieczanie baz danych i szyfrowanie .............................................420
Rozdział 11. Zagadnienia dodatkowe                                                                            425
             Obsługa przesyłania plików ...................................................................426
             Skrypty PHP i JavaScript .......................................................................437
             Buforowanie wyjścia ..............................................................................445
             Korzystanie z funkcji Improved MySQL Extension ..............................453
             Nowe funkcje MySQL ...........................................................................457
             Zastosowanie pakietu PEAR ..................................................................466
Rozdział 12. Zarządzanie zawartością strony — przykład                                                         471
             Tworzenie szablonu ................................................................................472
             Tworzenie zwykłych stron internetowych .............................................476
             Zarządzanie adresami URL ....................................................................480
             Zarządzanie plikami ...............................................................................508

                                                                                                                                7
Spis treści

              Rozdział 13. Rejestrowanie użytkowników — przykład                                                                    521
                           Tworzenie szablonów .............................................................................522
                           Tworzenie skryptów konfiguracyjnych ..................................................526
                           Tworzenie strony głównej ......................................................................533
                           Rejestracja ..............................................................................................535
                           Aktywacja konta .....................................................................................544
                           Logowanie i wylogowywanie się .............................................................548
                           Zarządzanie hasłami ...............................................................................555
              Rozdział 14. Sklep internetowy — przykład                                                                              565
                           Tworzenie bazy danych ..........................................................................566
                           Część administracyjna aplikacji .............................................................571
                           Tworzenie szablonu części publicznej aplikacji .....................................586
                           Katalog produktów .................................................................................590
                           Koszyk ....................................................................................................602
                           Rejestrowanie zamówień ........................................................................612
              Dodatek A           Instalacja                                                                                         617
Spis treści




                                  Instalacja w systemie Windows .............................................................618
                                  Definiowanie uprawnień MySQL ..........................................................624
                                  Testowanie instalacji ..............................................................................630
                                  Konfigurowanie PHP .............................................................................634
              Dodatek B           Przewodnik                                                                                             637
                                  Język PHP ..............................................................................................638
                                  Serwer MySQL ......................................................................................643
              Dodatek C           Zasoby internetowe                                                                                     651
                                  Język PHP ..............................................................................................652
                                  Serwer MySQL ......................................................................................656
                                  Język SQL ..............................................................................................658
                                  Bezpieczeństwo ......................................................................................659
                                  Inne strony internetowe ..........................................................................660
                                  Skorowidz                                                                                           663




              8
3
                                          Tworzenie dynamicznych
                                                                          Tworzenie dynamicznych stron WWW



                                                      stron WWW

Rozdział 3. Tworzenie dynamicznych stron WWW




                                                  Teraz, gdy opanowałeś już podstawy PHP, czas rozpocząć
                                                  tworzenie naprawdę dynamicznych stron WWW. W porównaniu
                                                  ze stronami statycznymi, które dominowały na początku istnienia
                                                  internetu, są one łatwiejsze do utrzymania i bardziej interaktywne,
                                                  a ich wygląd może się zmieniać w zależności od sytuacji.
                                                  W tym rozdziale omawiam bardzo wiele rozwiązań,
                                                  które wykorzystuje się do budowy dynamicznych aplikacji
                                                  internetowych. Piszę między innymi o plikach zewnętrznych,




                                                                                                                        Tworzenie dynamicznych stron WWW
                                                  obsłudze formularzy innymi sposobami, pisaniu
                                                  i wykorzystywaniu własnych funkcji, wysyłaniu poczty
                                                  elektronicznej i stosowaniu funkcji date(). Wszystkie
                                                  wymienione elementy są wykorzystywane przez bardziej
                                                  zaawansowane aplikacje internetowe.




                                                                                                                  95
Rozdział 3.


                                      Wykorzystywanie
                                      plików zewnętrznych
                                      Wszystkie zaprezentowane dotychczas skrypty
                                      miały postać pojedynczych plików, w których
                                      zapisany był cały kod HTML i PHP. Gdy
                                      zaczniesz tworzyć bardziej rozbudowane
                                      witryny, zorientujesz się, że takie podejście ma
                                      wiele ograniczeń. Na szczęście PHP obsługuje
                                      pliki zewnętrzne, co pozwala Ci rozbić kod na
                                      kilka części. Dzięki temu będziesz mógł oddzielić
                                      kod HTML od kodu PHP i wyodrębnić ze skryptu
                                      tę jego część, która odpowiada za najczęściej
                                      wykonywane operacje.
Wykorzystywanie plików zewnętrznych




                                      PHP ma cztery funkcje obsługujące pliki
                                      zewnętrzne: include(), include_once(),
                                      require() i require_once(). Stosuje się je,
                                      umieszczając w skrypcie PHP instrukcje
                                      tego typu:
                                        include_once("nazwapliku.php");
                                        require('/ścieżka/do/pliku/nazwapliku.html');

                                      Działają one w ten sposób, że biorą całą            Rysunek 3.1. Dwa wywołania funkcji include()
                                      zawartość pliku o podanej nazwie i wstawiają        zakończone niepowodzeniem
                                      ją do oryginalnego skryptu w miejscu swego
                                      wystąpienia. PHP zakłada, że kod występujący
                                      w plikach zewnętrznych jest kodem HTML
                                      i że powinien zostać przesłany bezpośrednio
                                      do przeglądarki (chyba że jest on otoczony
                                      znacznikami oznaczającymi kod PHP).
                                      W poprzednich wersjach PHP funkcję
                                      include() stosowało się w nieco innych
                                      okolicznościach niż require(). Obecnie ich
                                                                                          Rysunek 3.2. Przy pierwszym niepowodzeniu
                                      zastosowanie jest takie samo, choć różnią się       funkcji require() skrypt zostanie zatrzymany,
                                      one swym zachowaniem w sytuacjach awaryjnych.       a w przeglądarce pojawi się komunikat o błędzie
                                      Jeżeli z jakichś względów funkcja include()
                                      nie będzie mogła wczytać pliku, w przeglądarce
                                      internetowej zostanie wyświetlony komunikat
                                      o błędzie (rysunek 3.1), ale skrypt będzie
                                      w dalszym ciągu wykonywany. Jeżeli natomiast
                                      załadowanie pliku nie uda się funkcji require(),
                                      po wyświetleniu informacji o błędzie skrypt
                                      zostanie zatrzymany (rysunek 3.2).




                                      96
Tworzenie dynamicznych stron WWW

                                       Obie funkcje mają też odmianę _once(), która
                                       gwarantuje, że dany plik zewnętrzny zostanie dołączony
                                       do skryptu tylko jeden raz, nawet jeśli programista
                                       popełni błąd i umieści w skrypcie kilka poleceń
                                       dołączających.
                                         require_once('nazwapliku.html');

                                       Czas na pierwszy przykład. Oddzielę w nim kod HTML
                                       odpowiedzialny za formatowanie tekstu od kodu PHP,
                                       wykorzystując mechanizm dołączania plików. Dzięki
                                       temu wszystkie kolejne przykłady w tym rozdziale będą
                                       mogły zwracać wyniki w tej samej postaci, a ja nie będę
                                       musiał przepisywać za każdym razem tych samych
                                       fragmentów kodu. Powstanie w ten sposób system
                                       szablonów zapewniający spójność i łatwe zarządzanie




                                                                                                      Wykorzystywanie plików zewnętrznych
                                       rozbudowanymi aplikacjami. W przykładach
                                       skoncentruję się na kodzie PHP. Powinieneś również
                                       przeczytać informacje umieszczone w ramce „Struktura
                                       witryny”, dzięki którym zrozumiesz schemat organizacji
                                       plików. Jeśli będziesz mieć pytania dotyczące CSS
                                       (Cascading Style Sheets) lub (X)HTML używanych
                                       w przykładach, to skorzystaj z odnośników podanych
                                       w dodatku C, „Zasoby internetowe”.



                                   Struktura witryny
Gdy zaczynasz wykorzystywać w swych aplikacjach internetowych pliki zewnętrzne,
całościowa struktura witryny nabiera większego znaczenia. Projektując serwis internetowy,
powinieneś brać pod uwagę trzy czynniki:
    łatwość utrzymywania,
    bezpieczeństwo,
    łatwość poruszania się po witrynie.
Wykorzystanie plików zewnętrznych do przechowywania standardowych procedur PHP,
CSS, JavaScript i HTML bardzo upraszcza utrzymywanie witryny, ponieważ cały wspólny
kod jest przechowywany tylko w jednym miejscu. W kolejnych przykładach będę często
tworzył specjalne katalogi na pliki zewnętrzne i trzymał je odrębnie od zasadniczych skryptów.
W przypadku dokumentów niezawierających poufnych danych, takich jak szablony HTML,
zalecam stosowanie rozszerzenia .inc lub .html, natomiast pliki wymagające większego
bezpieczeństwa (przechowujące na przykład informacje potrzebne do połączenia się
z bazą danych) powinny mieć rozszerzenia .php. Używaj nawet obu rozszerzeń (czyli .inc
i .html lub .php), aby wskazać, że dany plik jest plikiem zewnętrznym określonego typu.
Powinieneś też projektować swoje witryny w taki sposób, aby użytkownicy mogli się po nich
łatwo poruszać i to zarówno posługując się łączami, jak i ręcznie wpisywanymi adresami URL.
Staraj się nie tworzyć zbyt wielu poziomów folderów i nie używać trudnych do zapamiętania
nazw plików i katalogu. Nie mieszaj też wielkich liter z małymi i nie stosuj w nazwach znaków
przestankowych.



                                                                                                 97
Rozdział 3.

                                      Aby wykorzystać pliki zewnętrzne:
                                      1. Stwórz w edytorze tekstów lub programie
                                           typu WYSIWYG projekt strony HTML
                                           (listing 3.1 i rysunek 3.3).
                                           Na początek zaprojektuję wygląd mojej aplikacji
                                           HTML (jest on całkowicie niezależny od kodu
                                           PHP). Za pomocą komentarzy oznaczę tę część
                                           projektu, która będzie inna dla każdej strony.
                                           Uwaga: aby zaoszczędzić miejsca, nie
                                           zamieściłem pliku CSS, który decyduje
                                           o wyglądzie strony. Możesz go ściągnąć
                                           razem z kodami przykładów z serwera ftp
                                           lub uruchamiać przykład bez tego pliku
                                           (szablon będzie działać, ale jego wygląd
Wykorzystywanie plików zewnętrznych




                                           nie będzie zbyt estetyczny).
                                                                                             Rysunek 3.3. Projekt strony HTML oglądany
                                                                                             w przeglądarce internetowej (wykorzystujący
                                                                                             HTML i CSS, ale jeszcze nie PHP)


                                      Listing 3.1. Szablon stron WWW generowanych w tym rozdziale


                                        1  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
                                        2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                                        3  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
                                        4  <head>
                                        5    <meta h1ttp-equiv="content-type" content="text/html; charset=iso-8859-2" />
                                        6    <title>Witamy w naszej witrynie!</title>
                                        7    <style type="text/css" media="all">@import "./includes/layout.css";</style>
                                        8  </head>
                                        9  <body>
                                        10 <div id="wrapper"><!-- Zgodnie ze stylem CSS. -->
                                        11
                                        12   <div id="content"><!-- Zgodnie ze stylem CSS. -->
                                        13
                                        14     <div id="nav"><!-- Sekcja łączy -->
                                        15       <h3>Menu</h3>
                                        16       <ul>
                                        17       <li class="navtop"><a href="index.php" title="Przejdź do strony domowej">Strona
                                                 domowa</a></li>
                                        18       <li><a href="kalkulator.php" title="Użyj kalkulatora">Kalkulator</a></li>
                                        19       <li><a href="kalendarz.php" title="Wypróbuj działanie formularza wyboru
                                                 daty">Kalendarz</a></li>
                                        20       <li><a href="rejestracja.php" title="Zarejestruj się">Zarejestruj się</a></li>
                                        21       </ul>
                                        22     </div>
                                        23
                                        24     <!-- Początek treści specyficznej dla danej strony. -->
                                        25     <h1 id="mainhead">Nagłówek</h1>
                                        26     <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p>
                                        27     <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p>
                                        28     <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p>


                                      98
Tworzenie dynamicznych stron WWW

Listing 3.1. Szablon stron WWW generowanych     2. Skopiuj wszystko, począwszy od pierwszego
w tym rozdziale — ciąg dalszy                     wiersza aż do początku kodu specyficznego
                                                  dla danej strony i wklej to do nowego
  29   <p>Tutaj umieścisz podstawową treść        dokumentu (listing 3.2).
       strony, inną dla każdej strony.</p>
                                                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
  30   <h2>Nagłówek niższego rzędu</h2>
                                                    Transitional//EN"
  31   <p>Tutaj umieścisz podstawową treść
       strony, inną dla każdej strony.</p>          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  32   <p>Tutaj umieścisz podstawową treść          transitional.dtd">
       strony, inną dla każdej strony.</p>          <html xmlns="http://www.w3.org/1999/xhtml"
  33   <p>Tutaj umieścisz podstawową treść          xml:lang="en" lang="en">
       strony, inną dla każdej strony.</p>          <head>
  34   <p>Tutaj umieścisz podstawową treść            <meta http-equiv="content-type"
       strony, inną dla każdej strony.</p>            content="text/html; charset=iso-8859-2" />
  35   <!-- Koniec treści specyficznej dla            <title><?php echo $page_title; ?></title>
       danej strony. -->                              <style type="text/css" media="all">@import
  36                                                  "./includes/layout.css";</style>
  37      </div><!-- Koniec DIV "treści". -->       </head>




                                                                                                     Wykorzystywanie plików zewnętrznych
  38                                                <body>
  39    <div id="footer"><p>&copy; Copyright        <div id="wrapper">
       2005 by Larry E. Ullman                        <div id="content">
       &amp;DMCInsights,                                <div id="nav">
       Inc.</p></div>                                     <h3>Menu</h3>
  40                                                      <ul>
  41   </div><!-- Koniec DIV "obudowy". -->               <li class="navtop"><a href="index.php"
  42   </body>                                            title="Przejdź do strony domowej">Strona
  43   </html>                                            domowa</a></li>
                                                          <li><a href="kalkulator.php" title="Użyj
                                                          kalkulatora">Kalkulator</a></li>
                                                          <li><a href="kalendarz.php"
Listing 3.2. Początek każdej strony będzie                title="Wypróbuj działanie formularza
przechowywany w pliku nagłówkowym                         wyboru daty">Kalendarz</a></li>
                                                          <li><a href="rejestracja.php"
                                                          title="Zarejestruj się">Zarejestruj
  1    <!DOCTYPE html PUBLIC "-//W3C//DTD                 się</a></li>
       XHTML 1.0 Transitional//EN"                        </ul>
  2      "http://www.w3.org/TR/xhtml1/DTD/          </div>
          xhtml1-transitional.dtd">                 <!-- Skrypt 3.2 - naglowek.html -->
  3    <html
       xmlns="http://www.w3.org/1999/xhtml"       Pierwszy plik będzie zawierał początkowe
       xml:lang="en" lang="en">                   znaczniki HTML (od DOCTYPE, przez head,
  4    <head>                                     aż do początku „ciała” strony).
  5      <meta http-equiv="content-type"
           content="text/html;
           charset=iso-8859-2" />




                                                                                               99
Rozdział 3.

                                      3. Zmień wiersz zawierający tytuł strony na:      Listing 3.2. Początek każdej strony będzie
                                                                                        przechowywany w pliku nagłówkowym — ciąg dalszy
                                            <title><?php echo $page_title; ?></title>

                                         Chcę, aby tytuł strony (pojawiający się          6      <title><?php echo $page_title;
                                         na górze w przeglądarce internetowej;                     ?></title>
                                         patrz rysunek 3.3) był na każdej stronie         7      <style type="text/css" media="all">
                                         inny. Dlatego też będę przypisywał go                   @import "./includes/layout.css";
                                         do zmiennej, której zawartość będzie                    </style>
                                                                                          8    </head>
                                         wyświetlana przez PHP.                           9    <body>
                                      4. Zapisz plik pod nazwą naglowek.html.             10   <div id="wrapper"><!-- Zgodnie ze
                                                                                                  stylem CSS. -->
                                         Nazwy plików zewnętrznych mogą mieć              11
                                         całkowicie dowolne rozszerzenia. Niektórzy       12     <div id="content"><!-- Zgodnie ze
                                                                                                    stylem CSS. -->
                                         programiści preferują rozszerzenie .inc,
                                                                                          13
                                         ponieważ sugeruje ono, że mamy do czynienia      14       <div id="nav"><!-- Sekcja łączy -->
Wykorzystywanie plików zewnętrznych




                                         z plikiem dołączanym (ang. included file).       15         <h3>Menu</h3>
                                         W tym przypadku mógłbyś również użyć             16         <ul>
                                         rozszerzenia .inc.html, wskazującego,            17         <li class="navtop"><a href=
                                         że dołączany plik zawiera kod HTML                          "index.php" title="Przejdź do
                                                                                                     strony domowej">
                                         (a nie PHP).                                                Strona domowa</a></li>
                                                                                          18         <li><a href="kalkulator.php"
                                                                                                     title="Użyj kalkulatora">
                                                                                                     Kalkulator</a></li>
                                                                                          19         <li><a href="kalendarz.php"
                                                                                                     title="Wypróbuj działanie
                                                                                                     formularza wyboru daty">
                                                                                                     Kalendarz</a></li>
                                                                                          20         <li><a href="rejestracja.php"
                                                                                                     title="Zarejestruj się">
                                                                                                     Zarejestruj się</a></li>
                                                                                          21         </ul>
                                                                                          22       </div>
                                                                                          23       <!-- Skrypt 3.2 - naglowek.html -->
                                                                                          24       <!-- Początek treści specyficznej
                                                                                                   dla danej strony. -->




                                      100
Tworzenie dynamicznych stron WWW

Listing 3.3. Zakończenie każdej strony          5. Przejdź do oryginalnego szablonu strony
będzie przechowywane w pliku stopki               i skopiuj wszystko od końca części
                                                  specyficznej dla konkretnej strony do końca
  1          <!-- Koniec treści specyficznej      pliku. Następnie wklej to do nowego pliku
             dla danej strony. -->                (listing 3.3).
  2        <!-- Skrypt 3.3 - stopka.html -->
                                                    <!-- Skrypt 3.3 - stopka.html -->
  3      </div><!-- Koniec DIV "treści". -->
                                                    </div><!-- Koniec DIV "treści". -->
  4
                                                      <div id="footer"><p>&copy; Copyright
  5      <div id="footer"><p>&copy; Copyright
                                                      2005 by Larry E. Ullman &amp;
         2005 by Larry E. Ullman &amp;
                                                      DMCInsights, Inc.</p></div>
         DMCInsights, Inc.</p></div>
                                                    </div><!-- Koniec DIV "obudowy". -->
  6
                                                    </body>
  7    </div><!-- Koniec DIV "obudowy". -->
                                                    </html>
  8    </body>
  9    </html>                                    Plik stopki zawiera ostatnie znaczniki
                                                  formatujące i znaczniki zamykające
                                                  dokument HTML.




                                                                                                   Wykorzystywanie plików zewnętrznych
                                                6. Zapisz plik pod nazwą stopka.html.
Listing 3.4. Ten skrypt tworzy stronę WWW,
                                                7. Utwórz w edytorze tekstów nowy
wykorzystując szablon przechowywany
w plikach zewnętrznych                            dokument PHP (listing 3.4).
                                                    <?php # Skrypt 3.4 - index.php
  1    <?php # Skrypt 3.4 - index.php             Ponieważ większość znaczników
  2    $page_title = 'Witamy w naszej             formatujących znajduje się w plikach
          witrynie!';
  3    include ('./includes/naglowek.html');
                                                  zewnętrznych, możemy rozpocząć
  4    ?>                                         dokument od znaczników PHP, a nie HTML.
  5    <h1 id="mainhead">Nagłówek</h1>
                                                8. Nadaj zmiennej $page_title odpowiednią
  6    <p>Tutaj umieścisz podstawową treść
       strony, inną dla każdej strony.</p>        wartość i dołącz nagłówek HTML.
  7    <p>Tutaj umieścisz podstawową treść          $page_title = 'Witaj!';
       strony, inną dla każdej strony.</p>          include ('./includes/naglowek.inc');
  8    <p>Tutaj umieścisz podstawową treść
       strony, inną dla każdej strony.</p>        Dzięki zmiennej $page_title każda strona
  9    <p>Tutaj umieścisz podstawową treść        wygenerowana z wykorzystaniem tego
       strony, inną dla każdej strony.</p>        szablonu może mieć inny tytuł. Ponieważ jej
  10   <h2>Nagłówek niższego rzędu</h2>
  11   <p>Tutaj umieścisz podstawową treść
                                                  wartość jest określana przed dołączeniem
       strony, inną dla każdej strony.</p>        pliku nagłówkowego, dostęp do niej ma ten
  12   <p>Tutaj umieścisz podstawową treść        ostatni. Pamiętaj, że efektem wykonania
       strony, inną dla każdej strony.</p>        wiersza kodu zawierającego wywołanie
  13   <p>Tutaj umieścisz podstawową treść        funkcji include() jest umieszczenie zamiast
       strony, inną dla każdej strony.</p>
                                                  niego całej zawartości dołączanego pliku.
  14   <p>Tutaj umieścisz podstawową treść
       strony, inną dla każdej strony.</p>
  15   <?php
  16   include ('./includes/stopka.html');
  17   ?>




                                                                                             101
Rozdział 3.

                                       9. Pozamykaj znaczniki PHP i skopiuj z szablonu
                                          stron kod specyficzny dla danej strony.
                                            ?>
                                            <h1 id="mainhead">Nagłówek</h1>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <h2>Nagłówek niższego rzędu</h2>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
Wykorzystywanie plików zewnętrznych




                                            <p>Tutaj umieścisz podstawową treść   strony,
                                            inną dla każdej strony.</p>
                                            <p>Tutaj umieścisz podstawową treść   strony,
                                                                                            Rysunek 3.4. Tym razem do uzyskania tego
                                            inną dla każdej strony.</p>
                                                                                            samego wyglądu strony (patrz rysunek 3.3)
                                          Te informacje można też przesłać                  wykorzystałem pliki zewnętrzne PHP
                                          do przeglądarki za pośrednictwem funkcji
                                          echo(), ale ponieważ nie występują w nich
                                          żadne treści generowane dynamicznie,
                                          szybszym i wydajniejszym rozwiązaniem
                                          jest chwilowe opuszczenie znaczników PHP.
                                      10. Stwórz w kodzie ostatnią sekcję PHP
                                          i dołącz plik stopki.
                                            <?php
                                            include ('./includes/stopka.inc');
                                            ?>

                                      11. Zapisz dokument pod nazwą index.php,
                                          wgraj go na serwer razem z plikiem
                                          stopka.html.
                                      12. Utwórz podkatalog includes w tym samym
                                          katalogu, w którym znajduje się index.php.
                                          Następnie umieść w katalogu includes pliki
                                          naglowek.html, stopka.html i layout.css
                                          (załadowany z serwera ftp).
                                      13. Przetestuj szablon ładując index.php
                                          w przeglądarce internetowej (rysunek 3.4).




                                      102
Tworzenie dynamicznych stron WWW

                                                     Strona index.php stanowi końcowy
                                                     rezultat zastosowania systemu szablonu.
                                                     Nie musimy bezpośrednio odwoływać się
                                                     do dołączanych plików, ponieważ skrypt
                                                     index.php sam dołączy ich zawartość.
                                                 14. Jeśli chcesz, możesz obejrzeć źródło
                                                     strony HTML (rysunek 3.5).




Rysunek 3.5. Wygenerowany kod źródłowy w języku HTML powinien być wierną kopią kodu występującego   Wykorzystywanie plików zewnętrznych
w pierwotnym szablonie stron (patrz listing 3.1)




                                                                                             103
Rozdział 3.

                                      Wskazówki
                                         W pliku php.ini występuje ustawienie
                                         include_path. Dzięki niemu możesz
                                         określić, które pliki zewnętrzne mogą
                                         być dołączane, a które nie.
                                         W rozdziale 7., „PHP i MySQL”, przekonasz
                                         się, że wszystkie pliki zawierające poufne
                                         dane (takie jak na przykład informacje
                                         potrzebne do połączenia się z bazą danych),
                                         powinny być przechowywane w innym
                                         katalogu niż pozostałe dokumenty witryny.
                                         Odwołując się do plików znajdujących się
                                         w tym samym katalogu co plik bieżący,
                                         powinieneś zawsze stosować składnię
Wykorzystywanie plików zewnętrznych




                                         ./nazwapliku. Z kolei do plików znajdujących
                                         się w katalogu wyższego poziomu odwołuj
                                         się, pisząc ../nazwapliku, a do plików
                                         z katalogu niższego poziomu — pisząc           Rysunek 3.6. Wygląd strony HTML bez użycia
                                         .katalog/nazwapliku.                           pliku CSS (porównaj z rysunkiem 3.4)

                                         Dołączając pliki, możesz posługiwać się
                                         ścieżkami względnymi (tak jak ja)
                                         lub bezwzględnymi: include ('/ścieżka/
                                         do/pliku/nazwapliku');
                                         W przypadku gdy nie uda się dołączyć pliku
                                         zewnętrznego, funkcja require() ma większy
                                         wpływ na funkcjonowanie skryptu niż
                                         funkcja include(). Dlatego też powinno się
                                         ją stosować jedynie tam, gdzie dołączenie
                                         danego pliku ma kluczowe znaczenie
                                         (na przykład wówczas, gdy jest to plik
                                         odpowiedzialny za nawiązanie połączenia
                                         z bazą danych), a w przypadku dołączania
                                         kodu wpływającego jedynie na kosmetykę
                                         strony należy posługiwać się funkcją
                                         include(). Wersje _once() przydają się
                                         w skomplikowanych aplikacjach, ale
                                         w przypadku prostej witryny ich stosowanie
                                         nie jest konieczne.
                                         CSS działa w taki sposób, że jeśli nie
                                         użyjesz pliku CSS lub nie wczyta go
                                         przeglądarka, to strona będzie nadal działać
                                         poprawnie, ale jej wygląd będzie mniej
                                         estetyczny (patrz rysunek 3.6).



                                      104
Tworzenie dynamicznych stron WWW


Wyświetlanie i obsługa                            Aby obsługiwać formularze HTML:
formularza przez jeden skrypt                     1. Utwórz w edytorze tekstów nowy
                                                    dokument PHP (listing 3.5).
We wszystkich dotychczasowych przykładach
                                                      <?php # Skrypt 3.5 - kalkulator.php
do obsługi formularzy HTML wykorzystywałem            $page_title = 'Kalkulator kosztów';
dwa niezależne skrypty. Jeden wyświetlał              include ('./includes/naglowek.html');
formularz, a drugi odbierał wysłane z niego
dane. Choć nie ma w tym nic złego, czasem           Ten, i wszystkie pozostałe przykłady
wygodnie jest realizować obie te funkcje za         w bieżącym rozdziale, będą używać tego
pośrednictwem jednego skryptu. Gdy ta sama          samego szablonu co strona index.php.
strona ma jednocześnie wyświetlać i obsługiwać      Dlatego też składnia początku każdej
formularz, trzeba zastosować wyrażenie              strony będzie taka sama, różne będą
warunkowe.                                          jedynie tytuły.
  if (/*   wysłano dane z formularza */) {        2. Napisz wyrażenie warunkowe obsługujące
      //   Obsłuż je.                               formularz.
  } else   {




                                                                                                  Wyświetlanie i obsługa formularza
      //   Wyświetl formularz.                        if (isset($_POST['submitted'])) {
  }                                                 Jak wcześniej wspomniałem, to, że
Chcąc dowiedzieć się, czy dane z formularza         zmienna $_POST['submitted'] ma jakąś
zostały już wysłane, sprawdzam, czy zmiennej        wartość, oznacza, że dane z formularza
$_POST przypisano jakąś wartość (zakładając, że     zostały już przesłane i można je obsłużyć.
formularz używa metody POST). Mogę na przykład      Zmienna ta będzie tworzona przez ukryte
sprawdzić zmienną $_POST['wyslany'], gdzie          pole formularza służące tylko jako
wysłany jest nazwą ukrytego pola formularza.        wskaźnik jego wysłania.
  if (isset($_POST['wyslany'])) {                 3. Zweryfikuj wprowadzone dane.
      // Obsłuż formularz.
                                                      if ( is_numeric($_POST['quantity'])
  } else {
                                                        && is_numeric($_POST['price']) &&
      // Wyświetl formularz.
                                                        is_numeric($_POST['tax']) ) {
  }

Jeśli chcesz, aby skrypt obsłużył formularz,        Weryfikacja jest w tym przypadku bardzo
a następnie wyświetlił go ponownie (bo chcesz       prosta i polega na sprawdzeniu, czy
na przykład dodać kolejny rekord do bazy            wartości trzech zmiennych są numeryczne.
danych), użyj konstrukcji:                          Można ją rozbudować na przykład
                                                    o sprawdzenie, czy pierwsza z nich
  if (isset($_POST['wyslany'])) {                   ma wartość całkowitą (w rozdziale 10.,
      // Obsłuż dane.
                                                    „Zabezpieczenia” pojawi się wersja
  }
  // Wyświetl formularz.                            tego skryptu wykonująca taką kontrolę).

Ta wersja skryptu wyświetla formularz przy          Jeśli weryfikacja zakończy się pomyślnie,
każdym załadowaniu strony i obsługuje go,           obliczenia zostaną wykonane.
jeżeli zostały z niego wysłane jakieś dane.         W przeciwnym razie użytkownik
                                                    zostanie poproszony o ponowne
Aby zademonstrować tę ważną technikę,               wprowadzenie danych.
stworzę teraz kalkulator sprzedaży. W dalszej
części tego rozdziału użyję tej samej metody,
tworząc stronę rejestracji.



                                                                                            105
Rozdział 3.

                                    Listing 3.5. Ten skrypt zarówno wyświetla, jak i obsługuje formularz rejestracyjny


                                      1    <?php # Skrypt 3.5 - kalkulator.php
                                      2    $page_title = 'Kalkulator kosztów';
                                      3    include
                                           ('./includes/naglowek.html');
                                      4
                                      5    // Sprawdź czy formularz został wysłany.
                                      6    if (isset($_POST['submitted'])) {
                                      7
                                      8      // Podstawowa weryfikacja danych we formularzu.
                                      9      if ( is_numeric($_POST['quantity']) && is_numeric($_POST['price']) &&
                                             is_numeric($_POST['tax']) ) {
                                      10
                                      11       // Wylicz wyniki.
                                      12       $taxrate = $_POST['tax'] / 100; // Zamień 5% na .05.
                                      13       $total = ($_POST['quantity'] * $_POST['price']) * ($taxrate + 1);
                                      14
                                      15       // Wyświetl wyniki.
Wyświetlanie i obsługa formularza




                                      16       echo '<h1 id="mainhead">Całkowity koszt</h1>
                                      17       <p>Kupujesz ' . $_POST['quantity'] . ' sztuk w cenie ' . number_format ($_POST['price'],
                                               2) . 'zł za egzemplarz. Po uwzględnieniu podatku ' . $_POST['tax'] . '%, daje to
                                               całkowity koszt ' . number_format ($total, 2) . '.</p><p><br /></p>';
                                      18
                                      19     } else { // Wprowadzono niepoprawne dane.
                                      20       echo '<h1 id="mainhead">Błąd!</h1>
                                      21       <p class="error">Wprowadź poprawną liczbę egzemplarzy, cenę i podatek.</p><p><br
                                               /></p>';
                                      22     }
                                      23
                                      24   } // Koniec głównego IF.
                                      25
                                      26   // Koniec sekcji PHP i początek formularza HTML.
                                      27   ?>
                                      28   <h2>Kalkulator kosztów</h2>
                                      29   <form action="calculator.php" method="post">
                                      30      <p>Liczba egzemplarzy: <input type="text" name="quantity" size="5"   maxlength="10"
                                              /></p>
                                      31      <p>Cena: <input type="text" name="price" size="5" maxlength="10" /> </p>
                                      32      <p>Podatek:</b> <input type="text" name="tax" size="5" maxlength="10" /></p>
                                      33      <p><input type="submit" name="submit" value="Oblicz!" /></p>
                                      34      <input type="hidden" name="submitted" value="TRUE" />
                                      35   </form>
                                      36   <?php
                                      37   include ('./includes/stopka.html');
                                      38   ?>




                                    106
Tworzenie dynamicznych stron WWW

4. Wykonaj obliczenia.                           7. Wyświetl formularz HTML.
    $taxrate = $tax / 100;                           <h2>Kalkulator kosztów</h2>
    $total = ($_POST['quantity'] *                   <form action="kalkulator.php"
    $_POST['price']) * ($taxrate + 1);               method="post">
                                                       <p>Liczba egzemplarzy: <input
  Pierwszy wiersz zamienia wartość wyrażoną            type="text" name="quantity" size="5"
  w procentach (np. 5%) na ułamek dziesiętny           maxlength="10" /></p>
  (0.05) używany w dalszych obliczeniach.              <p>Cena: <input type="text"
  W drugim wierszu liczba egzemplarzy                  name="price" size="5" maxlength="10"
                                                     /></p>
  mnożona jest przez cenę jednostkową.
                                                       <p>Podatek (%): <input type="text"
  Następnie mnoży się ją przez wartość                  name="tax" size="5" maxlength="10"
  podatku (0.05) powiększoną o 1 (1.05).                /></p>
  To najszybszy sposób wyznaczenia wartości            <p><input type="submit" name="submit"
  powiększonej o podatek.                              value="Oblicz!" /></p>
                                                       <input type="hidden" name="submitted"
5. Wyświetl wyniki.                                    value="TRUE" />
                                                     </form>
    echo '<h1 id="mainhead"




                                                                                                Wyświetlanie i obsługa formularza
      Całkowity koszt</h1>                         Formularz jest dość prosty, zawiera
      <p>Kupujesz ' . {$_POST                      jedynie dwie nowe sztuczki. Po pierwsze,
      ['quantity'] . ' sztuk w cenie ' .
      number_format($_POST['price'], 2) .
                                                   atrybut action używa nazwy skryptu,
      ' zł za egzemplarz. Po uwzględnieniu         dzięki czemu wysłanie formularza
      podatku' . $_POST['price'] . '% daje         powoduje powrót do tej samej strony
      to ' . number_format($total,2) . '           zamiast przejście do innej. Po drugie,
      zł.</p><p><br /></p>';                       formularz zawiera ukryte pole o nazwie
  Wyświetlone są wszystkie wartości, a cena        submitted i wartości TRUE. Pole to spełnia
  i całkowity koszt zostają dodatkowo              rolę znacznika, którego istnienie jest
  sformatowane za pomocą funkcji                   sprawdzane, aby ustalić, czy formularz
  number_format().                                 wymaga obsługi (patrz główne wyrażenie
                                                   warunkowe).
6. Dokończ główne wyrażenie warunkowe
  i zamknij znacznik PHP.
         } else {
           echo '<h1 id="mainhead">Błąd!</h1>
           <p class="error"> Wprowadź poprawną
           liczbę egzemplarzy, cenę i
           podatek.</p><p><br /></p>';
         }
    }
    ?>

  Klauzula else zamyka wyrażenie warunkowe
  weryfikacji, wyświetlając komunikat
  o błędzie (jeśli wprowadzone wartości nie
  są numeryczne). Ostatni nawias klamrowy
  zamyka natomiast wyrażenie warunkowe
  isset($_POST['submitted']). Następnie
  zamykana jest sekcja PHP, dzięki czemu
  formularz będzie można utworzyć bez
  stosowania funkcji print() lub echo().


                                                                                          107
Rozdział 3.

                                    8. Dołącz plik stopki.
                                          <?php
                                          include ('./includes/stopka.html');
                                          ?>

                                    9. Zapisz plik pod nazwą kalkulator.php,
                                       wgraj go na serwer i przetestuj
                                       w przeglądarce internetowej
                                       (rysunek 3.7, 3.8 i 3.9).

                                    Wskazówki
                                       Aby zbadać, czy dane z formularza zostały
                                                                                       Rysunek 3.7. Pierwsze wyświetlenie formularza
                                       już wysłane, możesz to też sprawdzić,           HTML
                                       określając, czy zmienna przycisku Wyślij
                                       dane ($_POST['submit']) ma wartość.
                                       Metoda ta nie zadziała, jeśli użytkownik
                                       wyśle formularz używając klawisza Enter.
Wyświetlanie i obsługa formularza




                                       Jeśli będziesz chciał użyć grafiki jako
                                       przycisku wysyłania danych formularza,
                                       formularz będzie musiał zawierać ukryte
                                       pole umożliwiające sprawdzenie, czy został
                                       on wysłany.
                                       Powrót do tego samego formularza po jego
                                       wysłaniu możliwy jest także za pomocą
                                       PHP. Można to zrobić, umieszczając
                                       nazwę bieżącego skryptu przechowywaną
                                       przez zmienną $_SERVER['PHP_SELF']
                                       jako wartość atrybutu action:                   Rysunek 3.8. Strona wykonuje obliczenia,
                                          <form action="<?php echo                     prezentuje wyniki i ponownie wyświetla formularz
                                          $_SERVER['PHP_SELF']; ?> "
                                          method="post">

                                       Zaletą tego rozwiązania jest to, że formularz
                                       będzie powracać do tej samej strony nawet
                                       wtedy, gdy zmienimy później nazwę skryptu.




                                                                                       Rysunek 3.9. Jeżeli jedna z wprowadzonych
                                                                                       wartości nie jest numeryczna, zostaje wyświetlony
                                                                                       komunikat o błędzie


                                    108
Tworzenie dynamicznych stron WWW


Tworzenie formularzy                            Aby utworzyć formularz z pamięcią:
z pamięcią                                      1. Otwórz w edytorze tekstów plik
                                                  kalkulator.php (patrz listing 3.5).
Na pewno zetknąłeś się już z formularzami
z pamięcią, nawet jeśli nie wiesz, że właśnie   2. Zmień definicję pola wejściowego
tak się je nazywa. Są to zwykłe formularze         quantity (listing 3.6):
HTML, które zapamiętują wszystko, co do nich        <p>Nazwisko: <input type="text"
wpisałeś. Z punktu widzenia użytkownika               name="quantity" size="5"
końcowego jest to bardzo przydatne,                   maxlength="10" value="<?php if
                                                     (isset($_POST['quantity'])) echo
zwłaszcza gdy trzeba ponownie wypełnić                $_POST['quantity']; ?>" /></p>
ten sam formularz.
                                                  Po pierwsze, dodałem do pola
Aby określić początkową wartość widniejącą        wejściowego atrybut value. Następnie
w tekstowym polu wejściowym, wprowadź             przesłałem do przeglądarki wartość
atrybut value:                                    zmiennej $_POST['quantity']. Muszę
  <input type="text" name="city" size="20"        jednak najpierw upewnić się, czy ma




                                                                                                 Tworzenie formularzy z pamięcią
    value="Innsbruck" />                          ona w ogóle jakąś wartość. W tym celu
Jeśli chcesz, aby to PHP określił tę wartość,     zastosowałem następujący fragment kodu:
użyj po prostu polecenia echo() dla                 <?php
odpowiedniej zmiennej:                              if (isset($_POST['quantity'])) {
                                                        echo $_POST['quantity'];
  <input type="text" name="city" size="20"          }
    value="<?php echo $city; ?>" />                 ?>
Zmodyfikuję teraz skrypt kalkulator.php           Kod ten zapisałem w skrypcie maksymalnie
w taki sposób, aby zapamiętywał on                zwięźle (korzystając z tego, że jeśli blok
wprowadzane dane.                                 wyrażenia warunkowego zawiera tylko
                                                  jedną instrukcję, to można pominąć
                                                  nawiasy klamrowe).
                                                3. Powtórz te operacje dla ceny i podatku.
                                                    <p>Cena: <input type="text"
                                                      name="price" size="5"
                                                      maxlength="10" value="<?php if
                                                      (isset($_POST['price'])) echo
                                                      $_POST['price']; ?>" /> </p>
                                                    <p>Podatek:</b> <input type="text"
                                                      name="tax" size="5" maxlength="10"
                                                      value="<?php if (isset($_POST
                                                      ['tax'])) echo $_POST['tax'];
                                                    ?>" /></p>




                                                                                           109
Rozdział 3.

                                  Listing 3.6. Formularz kalkulatora zapamiętuje teraz informacje wprowadzane przez użytkownika


                                    1    <?php # Script 3.6 - calculator.php
                                    2    $page_title = 'Kalkulator kosztów';
                                    3    include ('./includes/naglowek.html');
                                    4
                                    5    // Sprawdź czy formularz został wysłany.
                                    6    if (isset($_POST['submitted'])) {
                                    7
                                    8    // Podstawowa weryfikacja danych we formularzu.
                                    9    if ( is_numeric($_POST['quantity']) && is_numeric($_POST['price']) &&
                                         is_numeric($_POST['tax']) ) {
                                    10
                                    11     // Wylicz wyniki.
                                    12     $taxrate = $_POST['tax'] / 100; // Zamień 5% na .05.
                                    13     $total = ($_POST['quantity'] * $_POST['price']) * ($taxrate + 1);
                                    14
                                    15     // Wyświetl wyniki.
                                    16     echo '<h1 id="mainhead">Całkowity koszt</h1>
Tworzenie formularzy z pamięcią




                                    17     <p>Kupujesz ' . $_POST['quantity'] . ' sztuk w cenie ' . number_format ($_POST['price'],
                                    2)
                                           . 'zł za egzemplarz. Po uwzględnieniu podatku ' . $_POST['tax'] . '%, daje to całkowity
                                           koszt ' . number_format ($total, 2) . '.</p><p><br /></p>';
                                    18
                                    19     } else { // Wprowadzono niepoprawne dane.
                                    20         echo '<h1 id="mainhead">Błąd!</h1>
                                    21         <p class="error">Wprowadź poprawną liczbę egzemplarzy, cenę i podatek.</p><p><br
                                               /></p>';
                                    22     }
                                    23
                                    24   } // Koniec głównego IF.
                                    25
                                    26   // Koniec sekcji PHP i początek formularza HTML.
                                    27   ?>
                                    28   <h2>Kalkulator kosztów</h2>
                                    29   <form action="calculator.php" method="post">
                                    30      <p>Liczba egzemplarzy: <input type="text" name="quantity" size="5"   maxlength="10"
                                            value="<?php if (isset($_POST['quantity'])) echo $_POST['quantity']; ?>" /></p>
                                    31      <p>Cena: <input type="text" name="price" size="5" maxlength="10" value="<?php if
                                            (isset($_POST['price'])) echo $_POST['price']; ?>" /> </p>
                                    32      <p>Podatek:</b> <input type="text" name="tax" size="5" maxlength="10" value="<?php if
                                            (isset($_POST ['tax'])) echo $_POST['tax'];?>" /></p>
                                    33      <p><input type="submit" name="submit" value="Oblicz!" /></p>
                                    34      <input type="hidden" name="submitted" value="TRUE" />
                                    35   </form>
                                    36   <?php
                                    37   include ('./includes/stopka.html');
                                    38   ?>




                                  110
Tworzenie dynamicznych stron WWW

                                                 4. Zapisz plik pod nazwą kalkulator.php,
                                                   wgraj go na serwer i przetestuj w przeglądarce
                                                   internetowej (rysunek 3.10 i 3.11).

                                                 Wskazówki
                                                   Ponieważ w tym przykładzie kod PHP
                                                   występuje również jako wartość atrybutu
                                                   HTML o nazwie value, to komunikaty
                                                   o błędach mogą wydawać się niezrozumiałe.
                                                   W przypadku takich problemów, sprawdź
                                                   w kodzie źródłowym HTML, czy błędy PHP
                                                   są wyświetlane wewnątrz atrybutu value.
                                                   Wartości atrybutów HTML powinieneś
Rysunek 3.10. Ta wersja formularza zapamiętuje     zawsze umieszczać w cudzysłowach.
informacje wprowadzone poprzednim razem…           Dotyczy to zwłaszcza atrybutu value.
                                                   W przeciwnym razie wartość złożona




                                                                                                    Tworzenie formularzy z pamięcią
                                                   z kilku słów, na przykład Jan Kowalski,
                                                   pojawi się w przeglądarce jako Jan.
                                                   Jeśli serwer używa opcji Magic Quotes,
                                                   to zanim wyświetlisz zmienne łańcuchowe
                                                   jako wartości pól wejściowych, powinieneś
                                                   zastosować funkcję stripslashes():
                                                     <input type="text" name="last_name"
                                                       size="20" value="<?php if (isset
                                                      ($_POST['last_name'])) echo
                                                       stripslashes($_POST['last_name']);
                                                     ?>" />
                                                   Ze względu na ograniczenia wynikające
                                                   ze sposobu działania języka HTML nie
                                                   można określić początkowej wartości
Rysunek 3.11. … niezależnie od tego czy
formularz został wypełniony w całości.             pola wejściowego typu password.
                                                   Aby wstępnie zaznaczyć wybrane przyciski
                                                   opcji i pola wyboru, wprowadź do
                                                   definiujących je znaczników atrybut
                                                   checked="checked".
                                                     <input type="checkbox"
                                                       name="interests" value="Narty"
                                                       checked="checked" />
   Aby wstępnie wybrać pozycję menu,                 <input type="radio"
   użyj atrybutu selected:                             name="gender" value="Kobieta"
                                                       checked="checked" />
     <select name="year">
     <option value= "2005">2005</option>           Aby określić początkową zawartość obszaru
     <option value= "2006"                         tekstowego, umieść ją między znacznikami
     selected="selected">2006</option>             textarea:
     </select>
                                                     <textarea name="comments"
   Przykład takiego rozwiązania pokażę                 rows="10" cols="50"><?php echo
   pod koniec rozdziału.                               $_POST['comments']; ?></textarea>


                                                                                             111
Rozdział 3.


                                  Tworzenie i wywoływanie                           Listing 3.7. Ta funkcja przydaje się przy tworzeniu
                                                                                    większej liczby menu rozwijalnych
                                  własnych funkcji
                                                                                      1    <?php # Skrypt 3.7 - kalendarz.php
                                  Jak zdążyłeś się już przekonać, PHP ma              2    $page_title = 'Kalendarz';
                                  bardzo wiele wbudowanych funkcji zdolnych           3    include ('./includes/naglowek.html');
                                  zaspokoić niemal każde potrzeby. Ważniejsze         4
                                  jest jednak to, że możesz tworzyć własne            5    // Funkcja tworząca trzy menu rozwijalne
                                  funkcje realizujące określone przez Ciebie               wyboru miesięcy, dni i lat.
                                  zadania. Tworząc funkcje, posługujemy się           6    function make_calendar_pulldowns() {
                                                                                      7
                                  następującą składnią:                               8     // Utwórz tablicę miesięcy.
                                    function nazwa_funkcji() {                        9     $months = array (1 => 'Styczeń', 'Luty',
                                      // Kod funkcji.                                      'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
                                    }                                                      'Lipiec', 'Sierpień', 'Wrzesień',
                                                                                           'Październik', 'Listopad', 'Grudzień');
                                  Nazwa Twojej funkcji może być dowolną               10
                                  kombinacją liter, cyfr i znaków                     11    // Utwórz menu miesięcy.
                                  podkreślenia, przy czym nie może zaczynać           12    echo '<select name="month">';
Tworzenie i wywoływanie funkcji




                                                                                      13    foreach ($months as $key => $value) {
                                  się od cyfry. Nie możesz również używać             14      echo "<option value="$key
                                  nazw funkcji, które już istnieją (print, echo,              ">$value</option>n";
                                  isset itp.).                                        15    }
                                                                                      16    echo '</select>';
                                  W rozdziale 1. wspominałem już, że PHP              17
                                  nie rozróżnia w nazwach funkcji małych              18    // Utwórz menu dni.
                                  i wielkich liter (zatem inaczej niż w przypadku     19    echo '<select name="day">';
                                  zmiennych), w związku z czym zdefiniowaną           20    for ($day = 1; $day <= 31; $day++) {
                                  powyżej funkcję można wywołać, pisząc:              21      echo "<option value="$day">
                                                                                              $day</option>n";
                                  nazwa_funkcji(), nazwa_Funkcji(),
                                                                                      22    }
                                  NAZWA_FUNKCJI() itp.                                23    echo '</select>';
                                                                                      24
                                  Kod występujący w ciele funkcji może                25    // Utwórz menu lat.
                                  wykonywać niemal dowolne operacje,                  26    echo '<select name="year">';
                                  począwszy od generowania kodu HTML,                 27    for ($year = 2005; $year <= 2015; $year++) {
                                  na przeprowadzaniu obliczeń skończywszy.            28      echo "<option value="$year
                                  Właśnie takie czynności będą wykonywały                     ">$year</option>n";
                                  funkcje, które zdefiniuję w tym rozdziale.          29    }
                                                                                      30    echo '</select>';
                                  Aby utworzyć własną funkcję:                        31
                                                                                      32   } // Koniec definicji funkcji.
                                  1. Utwórz w edytorze tekstów nowy                   33
                                     dokument PHP (listing 3.7).                      34   // Utwórz znaczniki formularza
                                                                                      35   echo '<h1 id="mainhead">Wybierz datę:</h1>
                                        <?php # Skrypt 3.7 - formularzdaty.php        36   <p><br /></p><form action="kalendarz.php"
                                        $page_title = 'Formularz Kalendarza';              method="post">';
                                        include ('./includes/naglowek.html');         37
                                                                                      38 // Wywołaj funkcję.
                                     Strona ta będzie wykorzystywała                  39 make_calendar_pulldowns();
                                     ten sam szablon co dwie poprzednie.              40
                                                                                      41 echo '</form><p><br /></p>'; // Koniec
                                                                                         formularza.
                                                                                      42
                                                                                      43 include ('./includes/stopka.html');
                                                                                      44 ?>


                                  112
Tworzenie dynamicznych stron WWW

                                                    2. Zacznij od zdefiniowania nowej funkcji.
                                                         function make_calendar_pulldowns() {

                                                       Funkcja, którą napiszę, będzie generowała
                                                       menu rozwijalne dla dni, miesięcy i lat,
                                                       podobnie jak skrypt kalendarz.php (patrz
                                                       listing 2.12). Nazwa, którą nadałem funkcji,
                                                       jednoznacznie określa jej przeznaczenie1.
                                                       Chociaż nie jest to wymagane, definicje
                                                       funkcji umieszcza się zwykle na początku
                                                       skryptu lub w osobnym pliku.
                                                    3. Wygeneruj menu rozwijalne.
                                                         $months = array (1 => 'Styczeń', 'Luty',
                                                         'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
                                                         'Lipiec', 'Sierpień', 'Wrzesień',
                                                         'Październik', 'Listopad', 'Grudzień');




                                                                                                            Tworzenie i wywoływanie funkcji
                                                         echo <select name="month">';
                                                         foreach ($months as $key => $value) {
                                                           echo "<option value="$key">
                                                             $value</option>n";
                                                         }
                                                         echo '</select>
                                                         echo'<select name="day">';
                                                         for ($day = 1; $day <= 31; $day++) {
                                                           echo "<option value="$day">
                                                             $day</option>n";
                                                         }
                                                         echo '</select>
                                                         <select name="year">';
                                                         for ($year=2003; $year <= 2010;
                                                           $year++) {
                                                           echo "<option value="$year">
                                                             $year</option>n";
                                                           }
                                                         echo '</select>';

                                                       Jest to dokładnie ten sam kod co w oryginalnym
                                                       skrypcie, z tym że teraz umieściliśmy go w ciele
                                                       funkcji. Jedyna drobna zmiana polega na użyciu
                                                       pętli for do stworzenia menu rozwijalnego
                                                       lat (poprzednio wykorzystaliśmy w tym celu
                                                       pętlę while).
                                                    4. Zamknij definicję funkcji.
                                                         } // Koniec definicji funkcji.

                                                       Gdy kod jest dość skomplikowany,
                                                       warto wstawiać na końcu definicji funkcji
                                                       komentarze, ponieważ dzięki nim wiadomo,
                                                       gdzie definicja się kończy, a gdzie zaczyna.

1
    make callendar pulldown to po angielsku „utwórz menu rozwijalne kalendarza” — przyp. tłum.

                                                                                                      113
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II

More Related Content

What's hot

Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...
Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...
Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...Wydawnictwo Helion
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIWydawnictwo Helion
 
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWitryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWydawnictwo Helion
 
mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoraWydawnictwo Helion
 
Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceWydawnictwo Helion
 
Kurs tworzenia stron internetowych
Kurs tworzenia stron internetowychKurs tworzenia stron internetowych
Kurs tworzenia stron internetowychWydawnictwo Helion
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIWydawnictwo Helion
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieWydawnictwo Helion
 
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznik
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznikAdobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznik
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznikWydawnictwo Helion
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerWydawnictwo Helion
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychWydawnictwo Helion
 
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.plARBOinteractive Polska
 
Internet. Ilustrowany przewodnik
Internet. Ilustrowany przewodnikInternet. Ilustrowany przewodnik
Internet. Ilustrowany przewodnikWydawnictwo Helion
 
PHP 5 i MySQL. Zastosowania e-commerce
PHP 5 i MySQL. Zastosowania e-commercePHP 5 i MySQL. Zastosowania e-commerce
PHP 5 i MySQL. Zastosowania e-commerceWydawnictwo Helion
 
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebook
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebookLicencja na używanie znaku towarowego. Studium prawnoporównawcze - ebook
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebooke-booksweb.pl
 

What's hot (20)

Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...
Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...
Pozycjonowanie i optymalizacja stron WWW. Jak się to robi. Wydanie II poprawi...
 
PHP5. Praktyczny kurs
PHP5. Praktyczny kursPHP5. Praktyczny kurs
PHP5. Praktyczny kurs
 
Po prostu FrontPage 2003 PL
Po prostu FrontPage 2003 PLPo prostu FrontPage 2003 PL
Po prostu FrontPage 2003 PL
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
 
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWitryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
 
mod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratoramod_rewrite. Podręcznik administratora
mod_rewrite. Podręcznik administratora
 
Tworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyceTworzenie stron WWW w praktyce
Tworzenie stron WWW w praktyce
 
Kurs tworzenia stron internetowych
Kurs tworzenia stron internetowychKurs tworzenia stron internetowych
Kurs tworzenia stron internetowych
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie II
 
Po prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie IIIPo prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie III
 
Serwisy internetowe. Programowanie
Serwisy internetowe. ProgramowanieSerwisy internetowe. Programowanie
Serwisy internetowe. Programowanie
 
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznik
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznikAdobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznik
Adobe Dreamweaver CS3 z ASP, ColdFusion i PHP. Oficjalny podręcznik
 
Profesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputerProfesjonalne programowanie. Część 1. Zrozumieć komputer
Profesjonalne programowanie. Część 1. Zrozumieć komputer
 
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danychPHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
PHP, Microsoft IIS i SQL Server. Projektowanie i programowanie baz danych
 
JavaScript i DHTML. Receptury
JavaScript i DHTML. RecepturyJavaScript i DHTML. Receptury
JavaScript i DHTML. Receptury
 
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl
2007.01 Efektywne i intuicyjne serwisy www - Kurs usability webusability.pl
 
Internet. Ilustrowany przewodnik
Internet. Ilustrowany przewodnikInternet. Ilustrowany przewodnik
Internet. Ilustrowany przewodnik
 
PHP 5 i MySQL. Zastosowania e-commerce
PHP 5 i MySQL. Zastosowania e-commercePHP 5 i MySQL. Zastosowania e-commerce
PHP 5 i MySQL. Zastosowania e-commerce
 
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebook
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebookLicencja na używanie znaku towarowego. Studium prawnoporównawcze - ebook
Licencja na używanie znaku towarowego. Studium prawnoporównawcze - ebook
 
Tworzenie stron WWW. Kurs
Tworzenie stron WWW. KursTworzenie stron WWW. Kurs
Tworzenie stron WWW. Kurs
 

Viewers also liked

Modele utrzymania środowisk IT w drodze do SaaS
Modele utrzymania środowisk IT w drodze do SaaSModele utrzymania środowisk IT w drodze do SaaS
Modele utrzymania środowisk IT w drodze do SaaSOPITZ CONSULTING Polska
 
Case study: TUI i Divante w eCommerce
Case study: TUI i Divante w eCommerceCase study: TUI i Divante w eCommerce
Case study: TUI i Divante w eCommerceTomasz Karwatka
 
2009.03 Portret Internauty - Raport CBOS i Gazeta.pl
2009.03 Portret Internauty - Raport CBOS i Gazeta.pl2009.03 Portret Internauty - Raport CBOS i Gazeta.pl
2009.03 Portret Internauty - Raport CBOS i Gazeta.plARBOinteractive Polska
 
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDIC
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDICLICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDIC
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDICBalota Dragos
 
Katalog osaa 2013 c
Katalog osaa 2013   cKatalog osaa 2013   c
Katalog osaa 2013 cJacek Hanysz
 
валецький туберкульоз 2014. конф.01.07.
валецький туберкульоз 2014. конф.01.07.валецький туберкульоз 2014. конф.01.07.
валецький туберкульоз 2014. конф.01.07.Благомед Луцк
 
Media relations w firmach i samorządach
Media relations w firmach i samorządachMedia relations w firmach i samorządach
Media relations w firmach i samorządachWitold Sokołowski
 
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...e-booksweb.pl
 
Metody natryskiwania cieplnego
Metody natryskiwania cieplnegoMetody natryskiwania cieplnego
Metody natryskiwania cieplnegoAqurat Akurat
 
франція в Xix початку xx століття
франція в Xix   початку xx століттяфранція в Xix   початку xx століття
франція в Xix початку xx століттяMaximko97
 
Dr dereń international security polish v
Dr dereń international security polish vDr dereń international security polish v
Dr dereń international security polish vJerzy Deren
 
Modele polityki personalnej e z
Modele  polityki personalnej e zModele  polityki personalnej e z
Modele polityki personalnej e zelanatalia
 

Viewers also liked (20)

Modele utrzymania środowisk IT w drodze do SaaS
Modele utrzymania środowisk IT w drodze do SaaSModele utrzymania środowisk IT w drodze do SaaS
Modele utrzymania środowisk IT w drodze do SaaS
 
Raport ewaluacyjny Dilettante 2012
Raport ewaluacyjny Dilettante 2012Raport ewaluacyjny Dilettante 2012
Raport ewaluacyjny Dilettante 2012
 
Case study: TUI i Divante w eCommerce
Case study: TUI i Divante w eCommerceCase study: TUI i Divante w eCommerce
Case study: TUI i Divante w eCommerce
 
2009.03 Portret Internauty - Raport CBOS i Gazeta.pl
2009.03 Portret Internauty - Raport CBOS i Gazeta.pl2009.03 Portret Internauty - Raport CBOS i Gazeta.pl
2009.03 Portret Internauty - Raport CBOS i Gazeta.pl
 
Fundusze unijne-i-europejskie
Fundusze unijne-i-europejskieFundusze unijne-i-europejskie
Fundusze unijne-i-europejskie
 
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDIC
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDICLICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDIC
LICENTA_BALOTĂDRAGOS_EAI1_MODELUL NORDIC
 
Katalog osaa 2013 c
Katalog osaa 2013   cKatalog osaa 2013   c
Katalog osaa 2013 c
 
валецький туберкульоз 2014. конф.01.07.
валецький туберкульоз 2014. конф.01.07.валецький туберкульоз 2014. конф.01.07.
валецький туберкульоз 2014. конф.01.07.
 
Budżet Suwałk 2015
Budżet Suwałk 2015Budżet Suwałk 2015
Budżet Suwałk 2015
 
Media relations w firmach i samorządach
Media relations w firmach i samorządachMedia relations w firmach i samorządach
Media relations w firmach i samorządach
 
Planificarea
PlanificareaPlanificarea
Planificarea
 
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...
Prawo penitencjarne. Kodeks karny wykonawczy z przepisami wykonawczymi i zwią...
 
Kratki Koza AB
Kratki Koza ABKratki Koza AB
Kratki Koza AB
 
Metody natryskiwania cieplnego
Metody natryskiwania cieplnegoMetody natryskiwania cieplnego
Metody natryskiwania cieplnego
 
франція в Xix початку xx століття
франція в Xix   початку xx століттяфранція в Xix   початку xx століття
франція в Xix початку xx століття
 
Dr dereń international security polish v
Dr dereń international security polish vDr dereń international security polish v
Dr dereń international security polish v
 
Temat
TematTemat
Temat
 
Modele polityki personalnej e z
Modele  polityki personalnej e zModele  polityki personalnej e z
Modele polityki personalnej e z
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
2007 plan generalny_synteza
2007 plan generalny_synteza2007 plan generalny_synteza
2007 plan generalny_synteza
 

Similar to PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II

PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIWydawnictwo Helion
 
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startPHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawWydawnictwo Helion
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIWydawnictwo Helion
 
ASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaWydawnictwo Helion
 
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać nią
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać niąCMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać nią
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać niąWydawnictwo Helion
 
Po prostu JavaScript i Ajax. Wydanie VI
Po prostu JavaScript i Ajax. Wydanie VIPo prostu JavaScript i Ajax. Wydanie VI
Po prostu JavaScript i Ajax. Wydanie VIWydawnictwo Helion
 
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowePHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanoweWydawnictwo Helion
 
Java. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIJava. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIWydawnictwo Helion
 

Similar to PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II (18)

PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie III
 
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki startPHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
PHP6 i MySQL 5. Dynamiczne strony WWW. Szybki start
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstaw
 
PHP. Rozmówki
PHP. RozmówkiPHP. Rozmówki
PHP. Rozmówki
 
Flash i PHP5. Podstawy
Flash i PHP5. PodstawyFlash i PHP5. Podstawy
Flash i PHP5. Podstawy
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie II
 
PHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzeniePHP. Praktyczne wprowadzenie
PHP. Praktyczne wprowadzenie
 
Dreamweaver MX
Dreamweaver MXDreamweaver MX
Dreamweaver MX
 
Contribute 2. Szybki start
Contribute 2. Szybki startContribute 2. Szybki start
Contribute 2. Szybki start
 
ASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązania
 
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać nią
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać niąCMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać nią
CMS. Jak szybko i łatwo stworzyć stronę WWW i zarządzać nią
 
MySQL. Szybki start
MySQL. Szybki startMySQL. Szybki start
MySQL. Szybki start
 
Dreamweaver MX 2004
Dreamweaver MX 2004Dreamweaver MX 2004
Dreamweaver MX 2004
 
Pajączek 5 NxG
Pajączek  5 NxGPajączek  5 NxG
Pajączek 5 NxG
 
Po prostu JavaScript i Ajax. Wydanie VI
Po prostu JavaScript i Ajax. Wydanie VIPo prostu JavaScript i Ajax. Wydanie VI
Po prostu JavaScript i Ajax. Wydanie VI
 
Po prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxGPo prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxG
 
PHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowePHP i MySQL. Aplikacje bazodanowe
PHP i MySQL. Aplikacje bazodanowe
 
Java. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIIIJava. Techniki zaawansowane. Wydanie VIII
Java. Techniki zaawansowane. Wydanie VIII
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 

PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ PHP i MySQL. Dynamiczne SPIS TREŒCI strony WWW. Szybki start. KATALOG KSI¥¯EK Wydanie II Autor: Larry Ullman KATALOG ONLINE T³umaczenie: Jaromir Senczyk i Grzegorz Werner na podstawie t³umaczenia Micha³a Dadana i Piotra Pilcha ZAMÓW DRUKOWANY KATALOG ISBN: 83-246-0207-0 Tytu³ orygina³u: PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide (2nd Edition) TWÓJ KOSZYK Format: B5, stron: 688 DODAJ DO KOSZYKA B³yskawiczny kurs tworzenia dynamicznych serwisów internetowych Dynamiczne strony WWW spotykamy codziennie, korzystaj¹c z internetu. Portale, sklepy internetowe, gry sieciowe — wszystkie te witryny korzystaj¹ z baz danych CENNIK I INFORMACJE i skryptów wykonywanych po stronie serwera. Technologii umo¿liwiaj¹cych realizacjê tego typu witryn WWW jest kilka. Wœród nich zas³u¿on¹ popularnoœci¹ cieszy siê ZAMÓW INFORMACJE „duet” o ogromnych mo¿liwoœciach — jêzyk skryptowy PHP i baza danych MySQL. O NOWOŒCIACH Te dostêpne nieodp³atnie narzêdzia wykorzystywane s¹ przez tysi¹ce twórców witryn WWW. Do³¹cz do nich! ZAMÓW CENNIK Ksi¹¿ka „PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie II” to kolejna edycja doskona³ego przewodnika po tajnikach tworzenia witryn internetowych za pomoc¹ tych technologii. Znajdziesz w niej wszystkie informacje niezbêdne CZYTELNIA do rozpoczêcia projektowania w³asnych dynamicznych stron WWW — od podstaw programowania i korzystania z baz danych, poprzez wykorzystywanie sesji i plików FRAGMENTY KSI¥¯EK ONLINE cookie, a¿ do zaawansowanych technik autoryzowania u¿ytkowników i budowania aplikacji e-commerce. Ka¿de zagadnienie jest przedstawione na praktycznym przyk³adzie, co doskonale pomo¿e Ci w przyswojeniu wiedzy. • Podstawowe elementy skryptów PHP • Obs³uga formularzy HTML • Tworzenie i stosowanie funkcji • Projektowanie baz danych • Operacje na danych • Wykrywanie i usuwanie b³êdów w skryptach • £¹czenie skryptów PHP z baz¹ danych • Stosowanie plików cookie i mechanizmów zarz¹dzania sesjami Wydawnictwo Helion • Zabezpieczanie i szyfrowanie danych ul. Chopina 6 • Zarz¹dzanie treœci¹ strony 44-100 Gliwice • Autoryzowanie u¿ytkowników tel. (32)230-98-63 • Projektowanie sklepów internetowych e-mail: helion@helion.pl
  • 2. Spis treści Spis treści Wprowadzenie 9 Rozdział 1. Wprowadzenie do PHP 19 Podstawy składni ......................................................................................20 Przesyłanie danych do przeglądarki internetowej ....................................24 PHP, HTML i „białe odstępy” .................................................................28 Wstawianie komentarzy ...........................................................................33 Co to są zmienne? ....................................................................................36 Łańcuchy ..................................................................................................39 Liczby .......................................................................................................43 Spis treści Stałe ..........................................................................................................47 Apostrof kontra cudzysłów ......................................................................50 Rozdział 2. Programowanie w PHP 53 Tworzenie formularza w języku HTML ..................................................54 Obsługa formularza HTML ......................................................................58 Zarządzanie opcją Magic Quotes ...............................................................61 Wyrażenia warunkowe i operatory ...........................................................64 Weryfikacja danych pochodzących z formularza .....................................68 Co to są tablice? .......................................................................................73 Pętle for i while ........................................................................................91 Rozdział 3. Tworzenie dynamicznych stron WWW 95 Wykorzystywanie plików zewnętrznych ..................................................96 Wyświetlanie i obsługa formularza przez jeden skrypt ............................105 Tworzenie formularzy z pamięcią ..........................................................109 Tworzenie i wywoływanie własnych funkcji .........................................112 Zasięg zmiennej ......................................................................................124 Funkcje daty i czasu ...............................................................................128 Wysyłanie poczty elektronicznej ............................................................132 5
  • 3. Spis treści Rozdział 4. Wprowadzenie do SQL i MySQL 139 Wybór typu kolumny .............................................................................140 Wybór innych właściwości kolumn .......................................................144 Korzystanie z monitora mysqla ..............................................................146 Tworzenie baz danych i tabel .................................................................150 Wprowadzanie rekordów .......................................................................153 Wybieranie danych .................................................................................156 Wyrażenia warunkowe ...........................................................................158 Stosowanie LIKE i NOT LIKE ..............................................................162 Sortowanie wyników zapytania ..............................................................164 Ograniczanie wyników zapytania ..........................................................166 Uaktualnianie danych .............................................................................169 Usuwanie danych ...................................................................................171 Funkcje ...................................................................................................173 Rozdział 5. Zaawansowany SQL i MySQL 183 Projekt bazy danych ...............................................................................184 Złączenia ................................................................................................200 Spis treści Grupowanie wyników zapytania ............................................................204 Indeksy ...................................................................................................206 Stosowanie różnych typów tabeli ...........................................................209 Wyszukiwanie FULLTEXT ...................................................................212 Optymalizacja bazy danych ....................................................................219 Rozdział 6. Obsługa i usuwanie błędów 225 Ogólne typy błędów i ich usuwanie .......................................................226 Wyświetlanie błędów PHP .....................................................................232 Sterowanie raportowaniem błędów PHP ................................................233 Tworzenie własnych funkcji obsługi błędów .........................................236 Zapis komunikatów o błędach PHP do dziennika ..................................240 Techniki usuwania błędów z PHP .............................................................243 Techniki usuwania błędów SQL i MySQL ............................................246 Rozdział 7. PHP i MySQL 249 Modyfikacja szablonu ............................................................................250 Łączenie się z MySQL-em i wybieranie bazy ........................................251 Wykonywanie prostych zapytań ............................................................255 Odczytywanie wyników zapytania .........................................................263 6
  • 4. Spis treści Bezpieczeństwo ......................................................................................267 Zliczanie zwróconych rekordów ............................................................273 Uaktualnianie rekordów w PHP ...............................................................279 Rozdział 8. Tworzenie aplikacji internetowych 287 Dopasowanie zachowania aplikacji do konfiguracji serwera .................288 Przekazywanie wartości do skryptu .......................................................291 Stosowanie ukrytych pól formularza ......................................................295 Edycja istniejących rekordów ................................................................301 Stronicowanie wyników zapytań ............................................................308 Wyświetlanie tabel z możliwością sortowania .......................................316 Nagłówki HTTP .....................................................................................323 Rozdział 9. Sesje i „ciasteczka” 333 Posługiwanie się ciasteczkami ...............................................................334 Sesje .......................................................................................................351 Sesje a „ciasteczka” ................................................................................367 Zwiększanie bezpieczeństwa sesji ..........................................................375 Spis treści Rozdział 10. Zabezpieczenia 381 Bezpieczniejsza walidacja formularzy ...................................................382 Obsługa kodu HTML .............................................................................393 Walidacja danych według typu ..............................................................397 Walidacja formularza przy użyciu JavaScriptu .......................................401 Wyrażenia regularne ..............................................................................408 Zabezpieczanie baz danych i szyfrowanie .............................................420 Rozdział 11. Zagadnienia dodatkowe 425 Obsługa przesyłania plików ...................................................................426 Skrypty PHP i JavaScript .......................................................................437 Buforowanie wyjścia ..............................................................................445 Korzystanie z funkcji Improved MySQL Extension ..............................453 Nowe funkcje MySQL ...........................................................................457 Zastosowanie pakietu PEAR ..................................................................466 Rozdział 12. Zarządzanie zawartością strony — przykład 471 Tworzenie szablonu ................................................................................472 Tworzenie zwykłych stron internetowych .............................................476 Zarządzanie adresami URL ....................................................................480 Zarządzanie plikami ...............................................................................508 7
  • 5. Spis treści Rozdział 13. Rejestrowanie użytkowników — przykład 521 Tworzenie szablonów .............................................................................522 Tworzenie skryptów konfiguracyjnych ..................................................526 Tworzenie strony głównej ......................................................................533 Rejestracja ..............................................................................................535 Aktywacja konta .....................................................................................544 Logowanie i wylogowywanie się .............................................................548 Zarządzanie hasłami ...............................................................................555 Rozdział 14. Sklep internetowy — przykład 565 Tworzenie bazy danych ..........................................................................566 Część administracyjna aplikacji .............................................................571 Tworzenie szablonu części publicznej aplikacji .....................................586 Katalog produktów .................................................................................590 Koszyk ....................................................................................................602 Rejestrowanie zamówień ........................................................................612 Dodatek A Instalacja 617 Spis treści Instalacja w systemie Windows .............................................................618 Definiowanie uprawnień MySQL ..........................................................624 Testowanie instalacji ..............................................................................630 Konfigurowanie PHP .............................................................................634 Dodatek B Przewodnik 637 Język PHP ..............................................................................................638 Serwer MySQL ......................................................................................643 Dodatek C Zasoby internetowe 651 Język PHP ..............................................................................................652 Serwer MySQL ......................................................................................656 Język SQL ..............................................................................................658 Bezpieczeństwo ......................................................................................659 Inne strony internetowe ..........................................................................660 Skorowidz 663 8
  • 6. 3 Tworzenie dynamicznych Tworzenie dynamicznych stron WWW stron WWW Rozdział 3. Tworzenie dynamicznych stron WWW Teraz, gdy opanowałeś już podstawy PHP, czas rozpocząć tworzenie naprawdę dynamicznych stron WWW. W porównaniu ze stronami statycznymi, które dominowały na początku istnienia internetu, są one łatwiejsze do utrzymania i bardziej interaktywne, a ich wygląd może się zmieniać w zależności od sytuacji. W tym rozdziale omawiam bardzo wiele rozwiązań, które wykorzystuje się do budowy dynamicznych aplikacji internetowych. Piszę między innymi o plikach zewnętrznych, Tworzenie dynamicznych stron WWW obsłudze formularzy innymi sposobami, pisaniu i wykorzystywaniu własnych funkcji, wysyłaniu poczty elektronicznej i stosowaniu funkcji date(). Wszystkie wymienione elementy są wykorzystywane przez bardziej zaawansowane aplikacje internetowe. 95
  • 7. Rozdział 3. Wykorzystywanie plików zewnętrznych Wszystkie zaprezentowane dotychczas skrypty miały postać pojedynczych plików, w których zapisany był cały kod HTML i PHP. Gdy zaczniesz tworzyć bardziej rozbudowane witryny, zorientujesz się, że takie podejście ma wiele ograniczeń. Na szczęście PHP obsługuje pliki zewnętrzne, co pozwala Ci rozbić kod na kilka części. Dzięki temu będziesz mógł oddzielić kod HTML od kodu PHP i wyodrębnić ze skryptu tę jego część, która odpowiada za najczęściej wykonywane operacje. Wykorzystywanie plików zewnętrznych PHP ma cztery funkcje obsługujące pliki zewnętrzne: include(), include_once(), require() i require_once(). Stosuje się je, umieszczając w skrypcie PHP instrukcje tego typu: include_once("nazwapliku.php"); require('/ścieżka/do/pliku/nazwapliku.html'); Działają one w ten sposób, że biorą całą Rysunek 3.1. Dwa wywołania funkcji include() zawartość pliku o podanej nazwie i wstawiają zakończone niepowodzeniem ją do oryginalnego skryptu w miejscu swego wystąpienia. PHP zakłada, że kod występujący w plikach zewnętrznych jest kodem HTML i że powinien zostać przesłany bezpośrednio do przeglądarki (chyba że jest on otoczony znacznikami oznaczającymi kod PHP). W poprzednich wersjach PHP funkcję include() stosowało się w nieco innych okolicznościach niż require(). Obecnie ich Rysunek 3.2. Przy pierwszym niepowodzeniu zastosowanie jest takie samo, choć różnią się funkcji require() skrypt zostanie zatrzymany, one swym zachowaniem w sytuacjach awaryjnych. a w przeglądarce pojawi się komunikat o błędzie Jeżeli z jakichś względów funkcja include() nie będzie mogła wczytać pliku, w przeglądarce internetowej zostanie wyświetlony komunikat o błędzie (rysunek 3.1), ale skrypt będzie w dalszym ciągu wykonywany. Jeżeli natomiast załadowanie pliku nie uda się funkcji require(), po wyświetleniu informacji o błędzie skrypt zostanie zatrzymany (rysunek 3.2). 96
  • 8. Tworzenie dynamicznych stron WWW Obie funkcje mają też odmianę _once(), która gwarantuje, że dany plik zewnętrzny zostanie dołączony do skryptu tylko jeden raz, nawet jeśli programista popełni błąd i umieści w skrypcie kilka poleceń dołączających. require_once('nazwapliku.html'); Czas na pierwszy przykład. Oddzielę w nim kod HTML odpowiedzialny za formatowanie tekstu od kodu PHP, wykorzystując mechanizm dołączania plików. Dzięki temu wszystkie kolejne przykłady w tym rozdziale będą mogły zwracać wyniki w tej samej postaci, a ja nie będę musiał przepisywać za każdym razem tych samych fragmentów kodu. Powstanie w ten sposób system szablonów zapewniający spójność i łatwe zarządzanie Wykorzystywanie plików zewnętrznych rozbudowanymi aplikacjami. W przykładach skoncentruję się na kodzie PHP. Powinieneś również przeczytać informacje umieszczone w ramce „Struktura witryny”, dzięki którym zrozumiesz schemat organizacji plików. Jeśli będziesz mieć pytania dotyczące CSS (Cascading Style Sheets) lub (X)HTML używanych w przykładach, to skorzystaj z odnośników podanych w dodatku C, „Zasoby internetowe”. Struktura witryny Gdy zaczynasz wykorzystywać w swych aplikacjach internetowych pliki zewnętrzne, całościowa struktura witryny nabiera większego znaczenia. Projektując serwis internetowy, powinieneś brać pod uwagę trzy czynniki: łatwość utrzymywania, bezpieczeństwo, łatwość poruszania się po witrynie. Wykorzystanie plików zewnętrznych do przechowywania standardowych procedur PHP, CSS, JavaScript i HTML bardzo upraszcza utrzymywanie witryny, ponieważ cały wspólny kod jest przechowywany tylko w jednym miejscu. W kolejnych przykładach będę często tworzył specjalne katalogi na pliki zewnętrzne i trzymał je odrębnie od zasadniczych skryptów. W przypadku dokumentów niezawierających poufnych danych, takich jak szablony HTML, zalecam stosowanie rozszerzenia .inc lub .html, natomiast pliki wymagające większego bezpieczeństwa (przechowujące na przykład informacje potrzebne do połączenia się z bazą danych) powinny mieć rozszerzenia .php. Używaj nawet obu rozszerzeń (czyli .inc i .html lub .php), aby wskazać, że dany plik jest plikiem zewnętrznym określonego typu. Powinieneś też projektować swoje witryny w taki sposób, aby użytkownicy mogli się po nich łatwo poruszać i to zarówno posługując się łączami, jak i ręcznie wpisywanymi adresami URL. Staraj się nie tworzyć zbyt wielu poziomów folderów i nie używać trudnych do zapamiętania nazw plików i katalogu. Nie mieszaj też wielkich liter z małymi i nie stosuj w nazwach znaków przestankowych. 97
  • 9. Rozdział 3. Aby wykorzystać pliki zewnętrzne: 1. Stwórz w edytorze tekstów lub programie typu WYSIWYG projekt strony HTML (listing 3.1 i rysunek 3.3). Na początek zaprojektuję wygląd mojej aplikacji HTML (jest on całkowicie niezależny od kodu PHP). Za pomocą komentarzy oznaczę tę część projektu, która będzie inna dla każdej strony. Uwaga: aby zaoszczędzić miejsca, nie zamieściłem pliku CSS, który decyduje o wyglądzie strony. Możesz go ściągnąć razem z kodami przykładów z serwera ftp lub uruchamiać przykład bez tego pliku (szablon będzie działać, ale jego wygląd Wykorzystywanie plików zewnętrznych nie będzie zbyt estetyczny). Rysunek 3.3. Projekt strony HTML oglądany w przeglądarce internetowej (wykorzystujący HTML i CSS, ale jeszcze nie PHP) Listing 3.1. Szablon stron WWW generowanych w tym rozdziale 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 4 <head> 5 <meta h1ttp-equiv="content-type" content="text/html; charset=iso-8859-2" /> 6 <title>Witamy w naszej witrynie!</title> 7 <style type="text/css" media="all">@import "./includes/layout.css";</style> 8 </head> 9 <body> 10 <div id="wrapper"><!-- Zgodnie ze stylem CSS. --> 11 12 <div id="content"><!-- Zgodnie ze stylem CSS. --> 13 14 <div id="nav"><!-- Sekcja łączy --> 15 <h3>Menu</h3> 16 <ul> 17 <li class="navtop"><a href="index.php" title="Przejdź do strony domowej">Strona domowa</a></li> 18 <li><a href="kalkulator.php" title="Użyj kalkulatora">Kalkulator</a></li> 19 <li><a href="kalendarz.php" title="Wypróbuj działanie formularza wyboru daty">Kalendarz</a></li> 20 <li><a href="rejestracja.php" title="Zarejestruj się">Zarejestruj się</a></li> 21 </ul> 22 </div> 23 24 <!-- Początek treści specyficznej dla danej strony. --> 25 <h1 id="mainhead">Nagłówek</h1> 26 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> 27 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> 28 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> 98
  • 10. Tworzenie dynamicznych stron WWW Listing 3.1. Szablon stron WWW generowanych 2. Skopiuj wszystko, począwszy od pierwszego w tym rozdziale — ciąg dalszy wiersza aż do początku kodu specyficznego dla danej strony i wklej to do nowego 29 <p>Tutaj umieścisz podstawową treść dokumentu (listing 3.2). strony, inną dla każdej strony.</p> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 30 <h2>Nagłówek niższego rzędu</h2> Transitional//EN" 31 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> "http://www.w3.org/TR/xhtml1/DTD/xhtml1- 32 <p>Tutaj umieścisz podstawową treść transitional.dtd"> strony, inną dla każdej strony.</p> <html xmlns="http://www.w3.org/1999/xhtml" 33 <p>Tutaj umieścisz podstawową treść xml:lang="en" lang="en"> strony, inną dla każdej strony.</p> <head> 34 <p>Tutaj umieścisz podstawową treść <meta http-equiv="content-type" strony, inną dla każdej strony.</p> content="text/html; charset=iso-8859-2" /> 35 <!-- Koniec treści specyficznej dla <title><?php echo $page_title; ?></title> danej strony. --> <style type="text/css" media="all">@import 36 "./includes/layout.css";</style> 37 </div><!-- Koniec DIV "treści". --> </head> Wykorzystywanie plików zewnętrznych 38 <body> 39 <div id="footer"><p>&copy; Copyright <div id="wrapper"> 2005 by Larry E. Ullman <div id="content"> &amp;DMCInsights, <div id="nav"> Inc.</p></div> <h3>Menu</h3> 40 <ul> 41 </div><!-- Koniec DIV "obudowy". --> <li class="navtop"><a href="index.php" 42 </body> title="Przejdź do strony domowej">Strona 43 </html> domowa</a></li> <li><a href="kalkulator.php" title="Użyj kalkulatora">Kalkulator</a></li> <li><a href="kalendarz.php" Listing 3.2. Początek każdej strony będzie title="Wypróbuj działanie formularza przechowywany w pliku nagłówkowym wyboru daty">Kalendarz</a></li> <li><a href="rejestracja.php" title="Zarejestruj się">Zarejestruj 1 <!DOCTYPE html PUBLIC "-//W3C//DTD się</a></li> XHTML 1.0 Transitional//EN" </ul> 2 "http://www.w3.org/TR/xhtml1/DTD/ </div> xhtml1-transitional.dtd"> <!-- Skrypt 3.2 - naglowek.html --> 3 <html xmlns="http://www.w3.org/1999/xhtml" Pierwszy plik będzie zawierał początkowe xml:lang="en" lang="en"> znaczniki HTML (od DOCTYPE, przez head, 4 <head> aż do początku „ciała” strony). 5 <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> 99
  • 11. Rozdział 3. 3. Zmień wiersz zawierający tytuł strony na: Listing 3.2. Początek każdej strony będzie przechowywany w pliku nagłówkowym — ciąg dalszy <title><?php echo $page_title; ?></title> Chcę, aby tytuł strony (pojawiający się 6 <title><?php echo $page_title; na górze w przeglądarce internetowej; ?></title> patrz rysunek 3.3) był na każdej stronie 7 <style type="text/css" media="all"> inny. Dlatego też będę przypisywał go @import "./includes/layout.css"; do zmiennej, której zawartość będzie </style> 8 </head> wyświetlana przez PHP. 9 <body> 4. Zapisz plik pod nazwą naglowek.html. 10 <div id="wrapper"><!-- Zgodnie ze stylem CSS. --> Nazwy plików zewnętrznych mogą mieć 11 całkowicie dowolne rozszerzenia. Niektórzy 12 <div id="content"><!-- Zgodnie ze stylem CSS. --> programiści preferują rozszerzenie .inc, 13 ponieważ sugeruje ono, że mamy do czynienia 14 <div id="nav"><!-- Sekcja łączy --> Wykorzystywanie plików zewnętrznych z plikiem dołączanym (ang. included file). 15 <h3>Menu</h3> W tym przypadku mógłbyś również użyć 16 <ul> rozszerzenia .inc.html, wskazującego, 17 <li class="navtop"><a href= że dołączany plik zawiera kod HTML "index.php" title="Przejdź do strony domowej"> (a nie PHP). Strona domowa</a></li> 18 <li><a href="kalkulator.php" title="Użyj kalkulatora"> Kalkulator</a></li> 19 <li><a href="kalendarz.php" title="Wypróbuj działanie formularza wyboru daty"> Kalendarz</a></li> 20 <li><a href="rejestracja.php" title="Zarejestruj się"> Zarejestruj się</a></li> 21 </ul> 22 </div> 23 <!-- Skrypt 3.2 - naglowek.html --> 24 <!-- Początek treści specyficznej dla danej strony. --> 100
  • 12. Tworzenie dynamicznych stron WWW Listing 3.3. Zakończenie każdej strony 5. Przejdź do oryginalnego szablonu strony będzie przechowywane w pliku stopki i skopiuj wszystko od końca części specyficznej dla konkretnej strony do końca 1 <!-- Koniec treści specyficznej pliku. Następnie wklej to do nowego pliku dla danej strony. --> (listing 3.3). 2 <!-- Skrypt 3.3 - stopka.html --> <!-- Skrypt 3.3 - stopka.html --> 3 </div><!-- Koniec DIV "treści". --> </div><!-- Koniec DIV "treści". --> 4 <div id="footer"><p>&copy; Copyright 5 <div id="footer"><p>&copy; Copyright 2005 by Larry E. Ullman &amp; 2005 by Larry E. Ullman &amp; DMCInsights, Inc.</p></div> DMCInsights, Inc.</p></div> </div><!-- Koniec DIV "obudowy". --> 6 </body> 7 </div><!-- Koniec DIV "obudowy". --> </html> 8 </body> 9 </html> Plik stopki zawiera ostatnie znaczniki formatujące i znaczniki zamykające dokument HTML. Wykorzystywanie plików zewnętrznych 6. Zapisz plik pod nazwą stopka.html. Listing 3.4. Ten skrypt tworzy stronę WWW, 7. Utwórz w edytorze tekstów nowy wykorzystując szablon przechowywany w plikach zewnętrznych dokument PHP (listing 3.4). <?php # Skrypt 3.4 - index.php 1 <?php # Skrypt 3.4 - index.php Ponieważ większość znaczników 2 $page_title = 'Witamy w naszej formatujących znajduje się w plikach witrynie!'; 3 include ('./includes/naglowek.html'); zewnętrznych, możemy rozpocząć 4 ?> dokument od znaczników PHP, a nie HTML. 5 <h1 id="mainhead">Nagłówek</h1> 8. Nadaj zmiennej $page_title odpowiednią 6 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> wartość i dołącz nagłówek HTML. 7 <p>Tutaj umieścisz podstawową treść $page_title = 'Witaj!'; strony, inną dla każdej strony.</p> include ('./includes/naglowek.inc'); 8 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> Dzięki zmiennej $page_title każda strona 9 <p>Tutaj umieścisz podstawową treść wygenerowana z wykorzystaniem tego strony, inną dla każdej strony.</p> szablonu może mieć inny tytuł. Ponieważ jej 10 <h2>Nagłówek niższego rzędu</h2> 11 <p>Tutaj umieścisz podstawową treść wartość jest określana przed dołączeniem strony, inną dla każdej strony.</p> pliku nagłówkowego, dostęp do niej ma ten 12 <p>Tutaj umieścisz podstawową treść ostatni. Pamiętaj, że efektem wykonania strony, inną dla każdej strony.</p> wiersza kodu zawierającego wywołanie 13 <p>Tutaj umieścisz podstawową treść funkcji include() jest umieszczenie zamiast strony, inną dla każdej strony.</p> niego całej zawartości dołączanego pliku. 14 <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> 15 <?php 16 include ('./includes/stopka.html'); 17 ?> 101
  • 13. Rozdział 3. 9. Pozamykaj znaczniki PHP i skopiuj z szablonu stron kod specyficzny dla danej strony. ?> <h1 id="mainhead">Nagłówek</h1> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <h2>Nagłówek niższego rzędu</h2> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> Wykorzystywanie plików zewnętrznych <p>Tutaj umieścisz podstawową treść strony, inną dla każdej strony.</p> <p>Tutaj umieścisz podstawową treść strony, Rysunek 3.4. Tym razem do uzyskania tego inną dla każdej strony.</p> samego wyglądu strony (patrz rysunek 3.3) Te informacje można też przesłać wykorzystałem pliki zewnętrzne PHP do przeglądarki za pośrednictwem funkcji echo(), ale ponieważ nie występują w nich żadne treści generowane dynamicznie, szybszym i wydajniejszym rozwiązaniem jest chwilowe opuszczenie znaczników PHP. 10. Stwórz w kodzie ostatnią sekcję PHP i dołącz plik stopki. <?php include ('./includes/stopka.inc'); ?> 11. Zapisz dokument pod nazwą index.php, wgraj go na serwer razem z plikiem stopka.html. 12. Utwórz podkatalog includes w tym samym katalogu, w którym znajduje się index.php. Następnie umieść w katalogu includes pliki naglowek.html, stopka.html i layout.css (załadowany z serwera ftp). 13. Przetestuj szablon ładując index.php w przeglądarce internetowej (rysunek 3.4). 102
  • 14. Tworzenie dynamicznych stron WWW Strona index.php stanowi końcowy rezultat zastosowania systemu szablonu. Nie musimy bezpośrednio odwoływać się do dołączanych plików, ponieważ skrypt index.php sam dołączy ich zawartość. 14. Jeśli chcesz, możesz obejrzeć źródło strony HTML (rysunek 3.5). Rysunek 3.5. Wygenerowany kod źródłowy w języku HTML powinien być wierną kopią kodu występującego Wykorzystywanie plików zewnętrznych w pierwotnym szablonie stron (patrz listing 3.1) 103
  • 15. Rozdział 3. Wskazówki W pliku php.ini występuje ustawienie include_path. Dzięki niemu możesz określić, które pliki zewnętrzne mogą być dołączane, a które nie. W rozdziale 7., „PHP i MySQL”, przekonasz się, że wszystkie pliki zawierające poufne dane (takie jak na przykład informacje potrzebne do połączenia się z bazą danych), powinny być przechowywane w innym katalogu niż pozostałe dokumenty witryny. Odwołując się do plików znajdujących się w tym samym katalogu co plik bieżący, powinieneś zawsze stosować składnię Wykorzystywanie plików zewnętrznych ./nazwapliku. Z kolei do plików znajdujących się w katalogu wyższego poziomu odwołuj się, pisząc ../nazwapliku, a do plików z katalogu niższego poziomu — pisząc Rysunek 3.6. Wygląd strony HTML bez użycia .katalog/nazwapliku. pliku CSS (porównaj z rysunkiem 3.4) Dołączając pliki, możesz posługiwać się ścieżkami względnymi (tak jak ja) lub bezwzględnymi: include ('/ścieżka/ do/pliku/nazwapliku'); W przypadku gdy nie uda się dołączyć pliku zewnętrznego, funkcja require() ma większy wpływ na funkcjonowanie skryptu niż funkcja include(). Dlatego też powinno się ją stosować jedynie tam, gdzie dołączenie danego pliku ma kluczowe znaczenie (na przykład wówczas, gdy jest to plik odpowiedzialny za nawiązanie połączenia z bazą danych), a w przypadku dołączania kodu wpływającego jedynie na kosmetykę strony należy posługiwać się funkcją include(). Wersje _once() przydają się w skomplikowanych aplikacjach, ale w przypadku prostej witryny ich stosowanie nie jest konieczne. CSS działa w taki sposób, że jeśli nie użyjesz pliku CSS lub nie wczyta go przeglądarka, to strona będzie nadal działać poprawnie, ale jej wygląd będzie mniej estetyczny (patrz rysunek 3.6). 104
  • 16. Tworzenie dynamicznych stron WWW Wyświetlanie i obsługa Aby obsługiwać formularze HTML: formularza przez jeden skrypt 1. Utwórz w edytorze tekstów nowy dokument PHP (listing 3.5). We wszystkich dotychczasowych przykładach <?php # Skrypt 3.5 - kalkulator.php do obsługi formularzy HTML wykorzystywałem $page_title = 'Kalkulator kosztów'; dwa niezależne skrypty. Jeden wyświetlał include ('./includes/naglowek.html'); formularz, a drugi odbierał wysłane z niego dane. Choć nie ma w tym nic złego, czasem Ten, i wszystkie pozostałe przykłady wygodnie jest realizować obie te funkcje za w bieżącym rozdziale, będą używać tego pośrednictwem jednego skryptu. Gdy ta sama samego szablonu co strona index.php. strona ma jednocześnie wyświetlać i obsługiwać Dlatego też składnia początku każdej formularz, trzeba zastosować wyrażenie strony będzie taka sama, różne będą warunkowe. jedynie tytuły. if (/* wysłano dane z formularza */) { 2. Napisz wyrażenie warunkowe obsługujące // Obsłuż je. formularz. } else { Wyświetlanie i obsługa formularza // Wyświetl formularz. if (isset($_POST['submitted'])) { } Jak wcześniej wspomniałem, to, że Chcąc dowiedzieć się, czy dane z formularza zmienna $_POST['submitted'] ma jakąś zostały już wysłane, sprawdzam, czy zmiennej wartość, oznacza, że dane z formularza $_POST przypisano jakąś wartość (zakładając, że zostały już przesłane i można je obsłużyć. formularz używa metody POST). Mogę na przykład Zmienna ta będzie tworzona przez ukryte sprawdzić zmienną $_POST['wyslany'], gdzie pole formularza służące tylko jako wysłany jest nazwą ukrytego pola formularza. wskaźnik jego wysłania. if (isset($_POST['wyslany'])) { 3. Zweryfikuj wprowadzone dane. // Obsłuż formularz. if ( is_numeric($_POST['quantity']) } else { && is_numeric($_POST['price']) && // Wyświetl formularz. is_numeric($_POST['tax']) ) { } Jeśli chcesz, aby skrypt obsłużył formularz, Weryfikacja jest w tym przypadku bardzo a następnie wyświetlił go ponownie (bo chcesz prosta i polega na sprawdzeniu, czy na przykład dodać kolejny rekord do bazy wartości trzech zmiennych są numeryczne. danych), użyj konstrukcji: Można ją rozbudować na przykład o sprawdzenie, czy pierwsza z nich if (isset($_POST['wyslany'])) { ma wartość całkowitą (w rozdziale 10., // Obsłuż dane. „Zabezpieczenia” pojawi się wersja } // Wyświetl formularz. tego skryptu wykonująca taką kontrolę). Ta wersja skryptu wyświetla formularz przy Jeśli weryfikacja zakończy się pomyślnie, każdym załadowaniu strony i obsługuje go, obliczenia zostaną wykonane. jeżeli zostały z niego wysłane jakieś dane. W przeciwnym razie użytkownik zostanie poproszony o ponowne Aby zademonstrować tę ważną technikę, wprowadzenie danych. stworzę teraz kalkulator sprzedaży. W dalszej części tego rozdziału użyję tej samej metody, tworząc stronę rejestracji. 105
  • 17. Rozdział 3. Listing 3.5. Ten skrypt zarówno wyświetla, jak i obsługuje formularz rejestracyjny 1 <?php # Skrypt 3.5 - kalkulator.php 2 $page_title = 'Kalkulator kosztów'; 3 include ('./includes/naglowek.html'); 4 5 // Sprawdź czy formularz został wysłany. 6 if (isset($_POST['submitted'])) { 7 8 // Podstawowa weryfikacja danych we formularzu. 9 if ( is_numeric($_POST['quantity']) && is_numeric($_POST['price']) && is_numeric($_POST['tax']) ) { 10 11 // Wylicz wyniki. 12 $taxrate = $_POST['tax'] / 100; // Zamień 5% na .05. 13 $total = ($_POST['quantity'] * $_POST['price']) * ($taxrate + 1); 14 15 // Wyświetl wyniki. Wyświetlanie i obsługa formularza 16 echo '<h1 id="mainhead">Całkowity koszt</h1> 17 <p>Kupujesz ' . $_POST['quantity'] . ' sztuk w cenie ' . number_format ($_POST['price'], 2) . 'zł za egzemplarz. Po uwzględnieniu podatku ' . $_POST['tax'] . '%, daje to całkowity koszt ' . number_format ($total, 2) . '.</p><p><br /></p>'; 18 19 } else { // Wprowadzono niepoprawne dane. 20 echo '<h1 id="mainhead">Błąd!</h1> 21 <p class="error">Wprowadź poprawną liczbę egzemplarzy, cenę i podatek.</p><p><br /></p>'; 22 } 23 24 } // Koniec głównego IF. 25 26 // Koniec sekcji PHP i początek formularza HTML. 27 ?> 28 <h2>Kalkulator kosztów</h2> 29 <form action="calculator.php" method="post"> 30 <p>Liczba egzemplarzy: <input type="text" name="quantity" size="5" maxlength="10" /></p> 31 <p>Cena: <input type="text" name="price" size="5" maxlength="10" /> </p> 32 <p>Podatek:</b> <input type="text" name="tax" size="5" maxlength="10" /></p> 33 <p><input type="submit" name="submit" value="Oblicz!" /></p> 34 <input type="hidden" name="submitted" value="TRUE" /> 35 </form> 36 <?php 37 include ('./includes/stopka.html'); 38 ?> 106
  • 18. Tworzenie dynamicznych stron WWW 4. Wykonaj obliczenia. 7. Wyświetl formularz HTML. $taxrate = $tax / 100; <h2>Kalkulator kosztów</h2> $total = ($_POST['quantity'] * <form action="kalkulator.php" $_POST['price']) * ($taxrate + 1); method="post"> <p>Liczba egzemplarzy: <input Pierwszy wiersz zamienia wartość wyrażoną type="text" name="quantity" size="5" w procentach (np. 5%) na ułamek dziesiętny maxlength="10" /></p> (0.05) używany w dalszych obliczeniach. <p>Cena: <input type="text" W drugim wierszu liczba egzemplarzy name="price" size="5" maxlength="10" /></p> mnożona jest przez cenę jednostkową. <p>Podatek (%): <input type="text" Następnie mnoży się ją przez wartość name="tax" size="5" maxlength="10" podatku (0.05) powiększoną o 1 (1.05). /></p> To najszybszy sposób wyznaczenia wartości <p><input type="submit" name="submit" powiększonej o podatek. value="Oblicz!" /></p> <input type="hidden" name="submitted" 5. Wyświetl wyniki. value="TRUE" /> </form> echo '<h1 id="mainhead" Wyświetlanie i obsługa formularza Całkowity koszt</h1> Formularz jest dość prosty, zawiera <p>Kupujesz ' . {$_POST jedynie dwie nowe sztuczki. Po pierwsze, ['quantity'] . ' sztuk w cenie ' . number_format($_POST['price'], 2) . atrybut action używa nazwy skryptu, ' zł za egzemplarz. Po uwzględnieniu dzięki czemu wysłanie formularza podatku' . $_POST['price'] . '% daje powoduje powrót do tej samej strony to ' . number_format($total,2) . ' zamiast przejście do innej. Po drugie, zł.</p><p><br /></p>'; formularz zawiera ukryte pole o nazwie Wyświetlone są wszystkie wartości, a cena submitted i wartości TRUE. Pole to spełnia i całkowity koszt zostają dodatkowo rolę znacznika, którego istnienie jest sformatowane za pomocą funkcji sprawdzane, aby ustalić, czy formularz number_format(). wymaga obsługi (patrz główne wyrażenie warunkowe). 6. Dokończ główne wyrażenie warunkowe i zamknij znacznik PHP. } else { echo '<h1 id="mainhead">Błąd!</h1> <p class="error"> Wprowadź poprawną liczbę egzemplarzy, cenę i podatek.</p><p><br /></p>'; } } ?> Klauzula else zamyka wyrażenie warunkowe weryfikacji, wyświetlając komunikat o błędzie (jeśli wprowadzone wartości nie są numeryczne). Ostatni nawias klamrowy zamyka natomiast wyrażenie warunkowe isset($_POST['submitted']). Następnie zamykana jest sekcja PHP, dzięki czemu formularz będzie można utworzyć bez stosowania funkcji print() lub echo(). 107
  • 19. Rozdział 3. 8. Dołącz plik stopki. <?php include ('./includes/stopka.html'); ?> 9. Zapisz plik pod nazwą kalkulator.php, wgraj go na serwer i przetestuj w przeglądarce internetowej (rysunek 3.7, 3.8 i 3.9). Wskazówki Aby zbadać, czy dane z formularza zostały Rysunek 3.7. Pierwsze wyświetlenie formularza już wysłane, możesz to też sprawdzić, HTML określając, czy zmienna przycisku Wyślij dane ($_POST['submit']) ma wartość. Metoda ta nie zadziała, jeśli użytkownik wyśle formularz używając klawisza Enter. Wyświetlanie i obsługa formularza Jeśli będziesz chciał użyć grafiki jako przycisku wysyłania danych formularza, formularz będzie musiał zawierać ukryte pole umożliwiające sprawdzenie, czy został on wysłany. Powrót do tego samego formularza po jego wysłaniu możliwy jest także za pomocą PHP. Można to zrobić, umieszczając nazwę bieżącego skryptu przechowywaną przez zmienną $_SERVER['PHP_SELF'] jako wartość atrybutu action: Rysunek 3.8. Strona wykonuje obliczenia, <form action="<?php echo prezentuje wyniki i ponownie wyświetla formularz $_SERVER['PHP_SELF']; ?> " method="post"> Zaletą tego rozwiązania jest to, że formularz będzie powracać do tej samej strony nawet wtedy, gdy zmienimy później nazwę skryptu. Rysunek 3.9. Jeżeli jedna z wprowadzonych wartości nie jest numeryczna, zostaje wyświetlony komunikat o błędzie 108
  • 20. Tworzenie dynamicznych stron WWW Tworzenie formularzy Aby utworzyć formularz z pamięcią: z pamięcią 1. Otwórz w edytorze tekstów plik kalkulator.php (patrz listing 3.5). Na pewno zetknąłeś się już z formularzami z pamięcią, nawet jeśli nie wiesz, że właśnie 2. Zmień definicję pola wejściowego tak się je nazywa. Są to zwykłe formularze quantity (listing 3.6): HTML, które zapamiętują wszystko, co do nich <p>Nazwisko: <input type="text" wpisałeś. Z punktu widzenia użytkownika name="quantity" size="5" końcowego jest to bardzo przydatne, maxlength="10" value="<?php if (isset($_POST['quantity'])) echo zwłaszcza gdy trzeba ponownie wypełnić $_POST['quantity']; ?>" /></p> ten sam formularz. Po pierwsze, dodałem do pola Aby określić początkową wartość widniejącą wejściowego atrybut value. Następnie w tekstowym polu wejściowym, wprowadź przesłałem do przeglądarki wartość atrybut value: zmiennej $_POST['quantity']. Muszę <input type="text" name="city" size="20" jednak najpierw upewnić się, czy ma Tworzenie formularzy z pamięcią value="Innsbruck" /> ona w ogóle jakąś wartość. W tym celu Jeśli chcesz, aby to PHP określił tę wartość, zastosowałem następujący fragment kodu: użyj po prostu polecenia echo() dla <?php odpowiedniej zmiennej: if (isset($_POST['quantity'])) { echo $_POST['quantity']; <input type="text" name="city" size="20" } value="<?php echo $city; ?>" /> ?> Zmodyfikuję teraz skrypt kalkulator.php Kod ten zapisałem w skrypcie maksymalnie w taki sposób, aby zapamiętywał on zwięźle (korzystając z tego, że jeśli blok wprowadzane dane. wyrażenia warunkowego zawiera tylko jedną instrukcję, to można pominąć nawiasy klamrowe). 3. Powtórz te operacje dla ceny i podatku. <p>Cena: <input type="text" name="price" size="5" maxlength="10" value="<?php if (isset($_POST['price'])) echo $_POST['price']; ?>" /> </p> <p>Podatek:</b> <input type="text" name="tax" size="5" maxlength="10" value="<?php if (isset($_POST ['tax'])) echo $_POST['tax']; ?>" /></p> 109
  • 21. Rozdział 3. Listing 3.6. Formularz kalkulatora zapamiętuje teraz informacje wprowadzane przez użytkownika 1 <?php # Script 3.6 - calculator.php 2 $page_title = 'Kalkulator kosztów'; 3 include ('./includes/naglowek.html'); 4 5 // Sprawdź czy formularz został wysłany. 6 if (isset($_POST['submitted'])) { 7 8 // Podstawowa weryfikacja danych we formularzu. 9 if ( is_numeric($_POST['quantity']) && is_numeric($_POST['price']) && is_numeric($_POST['tax']) ) { 10 11 // Wylicz wyniki. 12 $taxrate = $_POST['tax'] / 100; // Zamień 5% na .05. 13 $total = ($_POST['quantity'] * $_POST['price']) * ($taxrate + 1); 14 15 // Wyświetl wyniki. 16 echo '<h1 id="mainhead">Całkowity koszt</h1> Tworzenie formularzy z pamięcią 17 <p>Kupujesz ' . $_POST['quantity'] . ' sztuk w cenie ' . number_format ($_POST['price'], 2) . 'zł za egzemplarz. Po uwzględnieniu podatku ' . $_POST['tax'] . '%, daje to całkowity koszt ' . number_format ($total, 2) . '.</p><p><br /></p>'; 18 19 } else { // Wprowadzono niepoprawne dane. 20 echo '<h1 id="mainhead">Błąd!</h1> 21 <p class="error">Wprowadź poprawną liczbę egzemplarzy, cenę i podatek.</p><p><br /></p>'; 22 } 23 24 } // Koniec głównego IF. 25 26 // Koniec sekcji PHP i początek formularza HTML. 27 ?> 28 <h2>Kalkulator kosztów</h2> 29 <form action="calculator.php" method="post"> 30 <p>Liczba egzemplarzy: <input type="text" name="quantity" size="5" maxlength="10" value="<?php if (isset($_POST['quantity'])) echo $_POST['quantity']; ?>" /></p> 31 <p>Cena: <input type="text" name="price" size="5" maxlength="10" value="<?php if (isset($_POST['price'])) echo $_POST['price']; ?>" /> </p> 32 <p>Podatek:</b> <input type="text" name="tax" size="5" maxlength="10" value="<?php if (isset($_POST ['tax'])) echo $_POST['tax'];?>" /></p> 33 <p><input type="submit" name="submit" value="Oblicz!" /></p> 34 <input type="hidden" name="submitted" value="TRUE" /> 35 </form> 36 <?php 37 include ('./includes/stopka.html'); 38 ?> 110
  • 22. Tworzenie dynamicznych stron WWW 4. Zapisz plik pod nazwą kalkulator.php, wgraj go na serwer i przetestuj w przeglądarce internetowej (rysunek 3.10 i 3.11). Wskazówki Ponieważ w tym przykładzie kod PHP występuje również jako wartość atrybutu HTML o nazwie value, to komunikaty o błędach mogą wydawać się niezrozumiałe. W przypadku takich problemów, sprawdź w kodzie źródłowym HTML, czy błędy PHP są wyświetlane wewnątrz atrybutu value. Wartości atrybutów HTML powinieneś Rysunek 3.10. Ta wersja formularza zapamiętuje zawsze umieszczać w cudzysłowach. informacje wprowadzone poprzednim razem… Dotyczy to zwłaszcza atrybutu value. W przeciwnym razie wartość złożona Tworzenie formularzy z pamięcią z kilku słów, na przykład Jan Kowalski, pojawi się w przeglądarce jako Jan. Jeśli serwer używa opcji Magic Quotes, to zanim wyświetlisz zmienne łańcuchowe jako wartości pól wejściowych, powinieneś zastosować funkcję stripslashes(): <input type="text" name="last_name" size="20" value="<?php if (isset ($_POST['last_name'])) echo stripslashes($_POST['last_name']); ?>" /> Ze względu na ograniczenia wynikające ze sposobu działania języka HTML nie można określić początkowej wartości Rysunek 3.11. … niezależnie od tego czy formularz został wypełniony w całości. pola wejściowego typu password. Aby wstępnie zaznaczyć wybrane przyciski opcji i pola wyboru, wprowadź do definiujących je znaczników atrybut checked="checked". <input type="checkbox" name="interests" value="Narty" checked="checked" /> Aby wstępnie wybrać pozycję menu, <input type="radio" użyj atrybutu selected: name="gender" value="Kobieta" checked="checked" /> <select name="year"> <option value= "2005">2005</option> Aby określić początkową zawartość obszaru <option value= "2006" tekstowego, umieść ją między znacznikami selected="selected">2006</option> textarea: </select> <textarea name="comments" Przykład takiego rozwiązania pokażę rows="10" cols="50"><?php echo pod koniec rozdziału. $_POST['comments']; ?></textarea> 111
  • 23. Rozdział 3. Tworzenie i wywoływanie Listing 3.7. Ta funkcja przydaje się przy tworzeniu większej liczby menu rozwijalnych własnych funkcji 1 <?php # Skrypt 3.7 - kalendarz.php Jak zdążyłeś się już przekonać, PHP ma 2 $page_title = 'Kalendarz'; bardzo wiele wbudowanych funkcji zdolnych 3 include ('./includes/naglowek.html'); zaspokoić niemal każde potrzeby. Ważniejsze 4 jest jednak to, że możesz tworzyć własne 5 // Funkcja tworząca trzy menu rozwijalne funkcje realizujące określone przez Ciebie wyboru miesięcy, dni i lat. zadania. Tworząc funkcje, posługujemy się 6 function make_calendar_pulldowns() { 7 następującą składnią: 8 // Utwórz tablicę miesięcy. function nazwa_funkcji() { 9 $months = array (1 => 'Styczeń', 'Luty', // Kod funkcji. 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', } 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'); Nazwa Twojej funkcji może być dowolną 10 kombinacją liter, cyfr i znaków 11 // Utwórz menu miesięcy. podkreślenia, przy czym nie może zaczynać 12 echo '<select name="month">'; Tworzenie i wywoływanie funkcji 13 foreach ($months as $key => $value) { się od cyfry. Nie możesz również używać 14 echo "<option value="$key nazw funkcji, które już istnieją (print, echo, ">$value</option>n"; isset itp.). 15 } 16 echo '</select>'; W rozdziale 1. wspominałem już, że PHP 17 nie rozróżnia w nazwach funkcji małych 18 // Utwórz menu dni. i wielkich liter (zatem inaczej niż w przypadku 19 echo '<select name="day">'; zmiennych), w związku z czym zdefiniowaną 20 for ($day = 1; $day <= 31; $day++) { powyżej funkcję można wywołać, pisząc: 21 echo "<option value="$day"> $day</option>n"; nazwa_funkcji(), nazwa_Funkcji(), 22 } NAZWA_FUNKCJI() itp. 23 echo '</select>'; 24 Kod występujący w ciele funkcji może 25 // Utwórz menu lat. wykonywać niemal dowolne operacje, 26 echo '<select name="year">'; począwszy od generowania kodu HTML, 27 for ($year = 2005; $year <= 2015; $year++) { na przeprowadzaniu obliczeń skończywszy. 28 echo "<option value="$year Właśnie takie czynności będą wykonywały ">$year</option>n"; funkcje, które zdefiniuję w tym rozdziale. 29 } 30 echo '</select>'; Aby utworzyć własną funkcję: 31 32 } // Koniec definicji funkcji. 1. Utwórz w edytorze tekstów nowy 33 dokument PHP (listing 3.7). 34 // Utwórz znaczniki formularza 35 echo '<h1 id="mainhead">Wybierz datę:</h1> <?php # Skrypt 3.7 - formularzdaty.php 36 <p><br /></p><form action="kalendarz.php" $page_title = 'Formularz Kalendarza'; method="post">'; include ('./includes/naglowek.html'); 37 38 // Wywołaj funkcję. Strona ta będzie wykorzystywała 39 make_calendar_pulldowns(); ten sam szablon co dwie poprzednie. 40 41 echo '</form><p><br /></p>'; // Koniec formularza. 42 43 include ('./includes/stopka.html'); 44 ?> 112
  • 24. Tworzenie dynamicznych stron WWW 2. Zacznij od zdefiniowania nowej funkcji. function make_calendar_pulldowns() { Funkcja, którą napiszę, będzie generowała menu rozwijalne dla dni, miesięcy i lat, podobnie jak skrypt kalendarz.php (patrz listing 2.12). Nazwa, którą nadałem funkcji, jednoznacznie określa jej przeznaczenie1. Chociaż nie jest to wymagane, definicje funkcji umieszcza się zwykle na początku skryptu lub w osobnym pliku. 3. Wygeneruj menu rozwijalne. $months = array (1 => 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'); Tworzenie i wywoływanie funkcji echo <select name="month">'; foreach ($months as $key => $value) { echo "<option value="$key"> $value</option>n"; } echo '</select> echo'<select name="day">'; for ($day = 1; $day <= 31; $day++) { echo "<option value="$day"> $day</option>n"; } echo '</select> <select name="year">'; for ($year=2003; $year <= 2010; $year++) { echo "<option value="$year"> $year</option>n"; } echo '</select>'; Jest to dokładnie ten sam kod co w oryginalnym skrypcie, z tym że teraz umieściliśmy go w ciele funkcji. Jedyna drobna zmiana polega na użyciu pętli for do stworzenia menu rozwijalnego lat (poprzednio wykorzystaliśmy w tym celu pętlę while). 4. Zamknij definicję funkcji. } // Koniec definicji funkcji. Gdy kod jest dość skomplikowany, warto wstawiać na końcu definicji funkcji komentarze, ponieważ dzięki nim wiadomo, gdzie definicja się kończy, a gdzie zaczyna. 1 make callendar pulldown to po angielsku „utwórz menu rozwijalne kalendarza” — przyp. tłum. 113