IDZ DO
         PRZYK£ADOWY ROZDZIA£
                                         PHP i MySQL.
                           SPIS TRE CI   Dynamiczne strony
           KATALOG KSI¥¯EK
                                         WWW. Szybki start
                                         Autor: Larry Ullman
                      KATALOG ONLINE     T³umaczenie: Micha³ Dadan (rozdz. 1 – 7),
                                         Piotr Pilch (rozdz. 8 – 13, dod. A – D)
       ZAMÓW DRUKOWANY KATALOG           ISBN: 83-7361-157-6
                                         Tytu³ orygina³u: PHP and MySQL for Dynamic Web Sites VQPG
                                         Format: B5, stron: 580
              TWÓJ KOSZYK                Przyk³ady na ftp: 352 kB

                    DODAJ DO KOSZYKA     Coraz wiêcej serwisów internetowych sk³ada siê nie tylko z atrakcyjnego interfejsu
                                         u¿ytkownika, ale tak¿e z rozbudowanych aplikacji dzia³aj¹cych na serwerze. S¹ one
                                         najczê ciej oparte o bazy danych, które przechowuj¹ dane i zapewniaj¹ szybki do nich
         CENNIK I INFORMACJE             dostêp. Je li chcesz w krótkim czasie nauczyæ siê tworzyæ takie aplikacje, znalaz³e
                                         w³a ciw¹ ksi¹¿kê.
                   ZAMÓW INFORMACJE      „PHP i MySQL. Dynamiczne strony WWW” nauczy Ciê tworzenia dynamicznych
                     O NOWO CIACH        serwisów internetowych z wykorzystaniem PHP i MySQL-a. Ksi¹¿ka przeka¿e Ci wiedzê
                                         niezbêdn¹ dla projektantów rozwi¹zañ internetowych. Wszystkie zagadnienia opisane
                       ZAMÓW CENNIK      s¹ „krok po kroku”, ka¿demu z nich towarzyszy te¿ odpowiedni rysunek. Przyk³ady
                                         odzwierciedlaj¹ problemy, z którymi projektanci stron internetowych spotykaj¹ siê
                                         na co dzieñ.
                 CZYTELNIA               Ksi¹¿ka opisuje:
          FRAGMENTY KSI¥¯EK ONLINE          • Podstawy programowania w PHP
                                            • Tworzenie dynamicznych stron internetowych z u¿yciem PHP
                                            • Zasady projektowanie baz danych
                                            • Jêzyk SQL
                                            • Korzystanie z systemu zarz¹dzania bazami danych MySQL
                                            • £¹czenie PHP z systemem MySQL
                                            • U¿ycie sesji
                                            • Zabezpieczanie stron internetowych przed dostêpem nieuprawnionych osób
                                            • Przyk³adowe aplikacje: rejestracja u¿ytkowników i sklep internetowy
                                         Tre æ ksi¹¿ki uzupe³niaj¹ dodatki opisuj¹ce sposób instalacji omawianych w niej
                                         narzêdzi oraz dodatkowe, przydatne aplikacje.
Wydawnictwo Helion                       Je li chcesz w szybko nauczyæ siê programowania dynamicznych serwisów
ul. Chopina 6                            internetowych, ta ksi¹¿ka bêdzie Twoim intensywnym kursem. Ju¿ po przeczytaniu
44-100 Gliwice                           kilku rozdzia³ów bêdziesz w stanie pisaæ pierwsze programy w PHP korzystaj¹ce z bazy
tel. (32)230-98-63                       MySQL, a po przeczytaniu ca³ej ksi¹¿ki poradzisz sobie równie¿ z tworzeniem bardziej
e-mail: helion@helion.pl                 rozbudowanych aplikacji.
Spis treści



                                                                                   Spis treści


              Wprowadzenie                                                                                                 9
              Czym są dynamiczne strony WWW?........................................................10
              Czym jest PHP?.........................................................................................11
              Co to jest MySQL?....................................................................................14
              Co będzie Ci potrzebne .............................................................................16
              O tej ksią ce ..............................................................................................16
Rozdział 1.   Wprowadzenie do PHP                                                                                             19
              Podstawy składni.......................................................................................20
              Przesyłanie danych do przeglądarki internetowej .....................................23




                                                                                                                                   Spis treści
              PHP, HTML i „białe odstępy” ..................................................................26
              Wstawianie komentarzy ............................................................................31
              Co to są zmienne? .....................................................................................34
              Łańcuchy ...................................................................................................37
              Liczby........................................................................................................41
              Stałe...........................................................................................................45
              Apostrof kontra cudzysłów .......................................................................48
Rozdział 2.   Programowanie w PHP                                                                                        51
              Tworzenie formularza w języku HTML ..................................................52
              Obsługa formularza HTML.......................................................................56
              Zarządzanie opcją Magic Quotes ................................................................59
              Wyra enia warunkowe i operatory............................................................61
              Weryfikacja danych pochodzących z formularza......................................65
              Ręczne przesyłanie wartości do skryptu ...................................................69
              Co to są tablice? ........................................................................................74
              Pętle for i while .........................................................................................92




                                                                                                                             5
Spis treści

              Rozdział 3.   Tworzenie dynamicznych stron WWW                                                                       95
                            Wykorzystywanie plików zewnętrznych...................................................96
                            Tworzenie i wywoływanie własnych funkcji ..........................................105
                            Zasięg zmiennej.......................................................................................115
                            Wyświetlanie i obsługa formularza przez jeden skrypt.............................118
                            Wysyłanie poczty elektronicznej...............................................................122
                            Nagłówki HTTP ......................................................................................125
                            Tworzenie formularzy z pamięcią...........................................................130
                            Funkcje daty i czasu ................................................................................133
              Rozdział 4.   Wprowadzenie do SQL i MySQL                                                                         137
                            Projektowanie tabel .................................................................................138
                            Korzystanie z monitora mysqla...............................................................142
                            Tworzenie baz danych i tabel..................................................................146
                            Wprowadzanie rekordów ........................................................................149
                            Wybieranie danych..................................................................................152
                            Wyra enia warunkowe ............................................................................154
Spis treści




                            Stosowanie LIKE i NOT LIKE ..............................................................158
                            Sortowanie wyników zapytania .................................................................160
                            Ograniczanie wyników zapytania ...........................................................163
                            Uaktualnianie danych ..............................................................................165
                            Usuwanie danych ....................................................................................167
              Rozdział 5.   Zaawansowany SQL i MySQL                                                                                   169
                            Projekt bazy danych ................................................................................170
                            Złączenia .................................................................................................185
                            Funkcje ....................................................................................................189
                            Indeksy ....................................................................................................201
              Rozdział 6.   PHP i MySQL                                                                                         205
                            Tworzenie szablonu.................................................................................206
                            Łączenie się z MySQL-em i wybieranie bazy.........................................211
                            Obsługa błędów.......................................................................................215
                            Wykonywanie prostych zapytań ................................................................218
                            Odczytywanie wyników zapytania..........................................................228
                            Bezpieczeństwo.......................................................................................232
                            Korzystanie z funkcji mysql_num_rows() ..............................................238
                            Uaktualnianie rekordów w PHP ................................................................244

              6
Spis treści

Rozdział 7.         Sesje i „ciasteczka”                                                                                         251
                    Posługiwanie się ciasteczkami ................................................................252
                    Sesje ........................................................................................................271
                    Sesje a „ciasteczka”.................................................................................287
Rozdział 8.         Zabezpieczenia                                                                                    295
                    Autoryzacja HTTP ..................................................................................296
                    Walidacja formularza przy u yciu skryptu JavaScript .............................302
                    Wyra enia regularne ...............................................................................309
                    Zabezpieczenia bazy danych ...................................................................321
Rozdział 9.         Tworzenie aplikacji internetowych                                                          325
                    Metody debugowania kodu źródłowego skryptu PHP ............................326
                    Metody debugowania zapytań SQL i serwera MySQL...........................329
                    Obsługa błędów w języku PHP.................................................................335
                    Obsługa błędów serwera MySQL..............................................................339
                    Zwiększanie wydajności aplikacji internetowych ...................................342
Rozdział 10. Zagadnienia dodatkowe                                                                            347




                                                                                                                                        Spis treści
             Buforowanie wyjścia...............................................................................348
             Buforowanie stron HTML.......................................................................355
             Określanie typu przeglądarki internetowej.............................................357
             Skrypty PHP i JavaScript ........................................................................361
             Zastosowanie pakietu PEAR ...................................................................369
Rozdział 11. Zarządzanie zawartością strony — przykład                                                          377
             Tworzenie szablonu.................................................................................378
             Tworzenie zwykłych stron internetowych ..............................................383
             Zarządzanie adresami URL .....................................................................385
             Zarządzanie plikami ................................................................................402
Rozdział 12. Rejestrowanie użytkowników — przykład                                                                     417
             Tworzenie szablonów..............................................................................418
             Tworzenie skryptów konfiguracyjnych...................................................422
             Tworzenie strony głównej .......................................................................428
             Rejestracja ...............................................................................................430
             Logowanie i wylogowywanie się ..............................................................440
             Zarządzanie hasłami ................................................................................446
             Część administracyjna aplikacji ..............................................................457

                                                                                                                                  7
Spis treści

              Rozdział 13. Sklep internetowy — przykład                                                                       473
                           Tworzenie bazy danych...........................................................................474
                           Część administracyjna aplikacji ..............................................................478
                           Tworzenie szablonu części publicznej aplikacji......................................491
                           Katalog produktów ..................................................................................495
                           Koszyk zakupów .....................................................................................504
              Dodatek A          Instalacja                                                                                515
                                 Instalacja pod systemem Windows............................................................516
                                 Definiowanie uprawnień serwera MySQL..............................................522
                                 Sprawdzanie poprawności instalacji ......................................................528
              Dodatek B          Aplikacje dodatkowe                                                                                  531
                                 Narzędzie phpMyAdmin .........................................................................532
                                 Systemy szablonów .................................................................................533
                                 Oprogramowanie obsługujące fora dyskusyjne.......................................534
                                 Zarządzanie zawartością..........................................................................535
                                 Handel elektroniczny...............................................................................536
Spis treści




                                 Wyszukiwarki..........................................................................................537
                                 Biblioteki kodów źródłowych .................................................................538
              Dodatek C          Odsyłacz                                                                                                539
                                 Język PHP ...............................................................................................540
                                 Serwer MySQL .......................................................................................547
              Dodatek D          Zasoby internetowe                                                                                      553
                                 Język PHP ...............................................................................................554
                                 Serwer MySQL .......................................................................................557
                                 Język SQL ...............................................................................................559
                                 Zabezpieczenia ........................................................................................560
                                 Inne strony internetowe ...........................................................................561
                                 Skorowidz                                                                                            565




              8
Zarządzanie zawartością strony — przykład
Zarządzanie zawartością
     strony — przykład
          Rozdział 11. Zarządzanie zawartością strony — przykład

           Pierwszy przykład aplikacji zamieszczony w niniejszej
           ksią ce będzie dotyczył zarządzania zawartością strony.
           Aplikacja będzie zarządzała zarówno adresami URL,
           jak i plikami, które u ytkownicy będą mogli dodawać,
           wyświetlać i przetwarzać. Co prawda w tym przypadku
           nie zostanie uwzględniona administracyjna część aplikacji,
           ale zostaną dołączone informacje pozwalające na jej
           wykonanie.
           Chocia w tym rozdziale skupimy się na konkretnym
           przykładzie, to jednak wspomnimy równie o kilku




                                                                        Zarządzanie zawartością strony
           nowych funkcjach i metodach. Do funkcji tych nale y
           zaliczyć O[USNAKPUGTVAKF
 i NKUV
. Wspomnimy tak e,
           w jaki sposób zrealizować operację umieszczania plików
           na serwerze.




                                                                377
Rozdział 11.


                     Tworzenie szablonu
                     W pierwszym etapie projektowania aplikacji
                     zostanie utworzony systemowy szablon,
                     którego zadaniem będzie wspomaganie procesu
                     przygotowywania strony HTML. Strona
                     w ostatecznej postaci (rysunek 11.1)
                     będzie korzystała z tabel i kilku arkuszy
                     stylów CSS (ang. Cascading Style Sheets).

                     Aby utworzyć plik naglowek.html,                     Rysunek 11.1. Domyślny wygląd strony
                                                                          aplikacji omawianej w tym rozdziale
                     należy wykonać następujące kroki:
                     1. W edytorze tekstu utworzyć nową stronę
                        HTML (listing 11.1).
                            1%6;2' JVON 27$.+% 9%6
                           å:*6/.  6TCPUKVKQPCN'0
                                    JVVRYYYYQTI64
                                    å4'%ZJVON6
                                    åZJVONVTCPUKVKQPCNFVF
Tworzenie szablonu




                           JVON ZONPU JVVRYYYYQTIZJVON
                           åZONNCPI GP NCPI GP
                           JGCF
                             OGVC JVVRGSWKX EQPVGPVV[RG EQPVGPV
                             å VGZVJVON EJCTUGVKUQ 
                           VKVNG !RJR GEJQ RCIGAVKVNG ! VKVNG

                     1. Napisać kod arkusza stylów CSS.
                           UV[NG V[RG VGZVEUU OGFKC UETGGP
                           DQF[ ] DCEMITQWPFEQNQT HHHHHH _

                           EQPVGPV ]
                             DCEMITQWPFEQNQT HHH
                             RCFFKPIVQR RZ RCFFKPITKIJV RZ
                             åRCFFKPIDQVVQO RZ RCFFKPINGHV RZ
                             åOCTIKPVQR RZ OCTIKPTKIJV RZ
                             åOCTIKPDQVVQO RZ OCTIKPNGHV RZ
                           _




                     378
Zarządzanie zawartością strony — przykład

Listing 11.1. Plik naglowek.html rozpoczyna się od kodu formatującego stronę HTML i zawiera wymagany
kod arkusza stylów CSS


       1%6;2' JVON 27$.+% 9%6 :*6/.  6TCPUKVKQPCN'0
            JVVRYYYYQTI644'%ZJVON6ZJVONVTCPUKVKQPCNFVF
      JVON ZONPU JVVRYYYYQTIZJVON ZONNCPI GP NCPI GP
      JGCF
           OGVC JVVRGSWKX EQPVGPVV[RG EQPVGPV VGZVJVON EJCTUGVKUQ 
      VKVNG !RJR GEJQ RCIGAVKVNG ! VKVNG
      UV[NG V[RG VGZVEUU OGFKC UETGGP
      DQF[ ] DCEMITQWPFEQNQT HHHHHH _
      EQPVGPV ]
       DCEMITQWPFEQNQT HHH
       RCFFKPIVQR RZ RCFFKPITKIJV RZ RCFFKPIDQVVQO RZ RCFFKPINGHV RZ
       OCTIKPVQR RZ OCTIKPTKIJV RZ OCTIKPDQVVQO RZ OCTIKPNGHV RZ
     _
     CPCXNKPMNKPM ] EQNQT  VGZVFGEQTCVKQP PQPG _
     CPCXNKPMXKUKVGF ] EQNQT  VGZVFGEQTCVKQP PQPG _
     CPCXNKPMJQXGT ] EQNQT EEEEEE VGZVFGEQTCVKQP PQPG _
     VF ]
       HQPVHCOKN[ 8GTFCPC #TKCN *GNXGVKEC UCPUUGTKH HQPVUKG RZ
       XGTVKECNCNKIP VQR




                                                                                                       Tworzenie szablonu
     _
     VKVNG ]
       HQPVUKG RZ HQPVYGKIJV PQTOCN EQNQT HHHHHH
       OCTIKPVQR RZ OCTIKPDQVVQO RZ OCTIKPNGHV RZ
       RCFFKPIVQR RZ RCFFKPIDQVVQO RZ RCFFKPINGHV RZ
     _
     UV[NG
     JGCF
     DQF[
  
     VCDNG YKFVJ  DQTFGT  EGNNURCEKPI  EGNNRCFFKPI 
       CNKIP EGPVGT
     VT
       VF EQNURCP  DIEQNQT  R ENCUU VKVNG CTæFCPKG CYCTVQ EKæ UVTQPR VF
     VT
     VT
       VF XCNKIP VQR PQYTCR PQYTCR
     D C JTGH KPFGZRJR ENCUU PCXNKPM 5VTQPC I ÎYPCC DT 
     C JTGH XKGYAWTNURJR ENCUU PCXNKPM 2TGINæFCL CFTGU[ 74.C DT 
     C JTGH CFFAWTNRJR ENCUU PCXNKPM QFCL CFTGU 74.C DT 
     C JTGH XKGYAHKNGURJR ENCUU PCXNKPM 2TGINæFCL RNKMKC DT 
     C JTGH CFFAHKNGRJR ENCUU PCXNKPM QFCL RNKMC D
       VF
  
       VF XCNKIP VQR ENCUU EQPVGPV
         .KUVKPI   PCINQYGMJVON 




                                                                                                 379
Rozdział 11.

                           CPCXNKPMNKPM ] EQNQT 
                           åVGZVFGEQTCVKQP PQPG _
                           CPCXNKPMXKUKVGF ] EQNQT 
                           åVGZVFGEQTCVKQP PQPG _
                           CPCXNKPMJQXGT ] EQNQT EEEEEE
                           åVGZVFGEQTCVKQP PQPG _
                           VF ]
                             HQPVHCOKN[ 8GTFCPC #TKCN *GNXGVKEC
                             åUCPUUGTKH HQPVUKG RZ
                             XGTVKECNCNKIP VQR
                           _
                           VKVNG ]
                             HQPVUKG RZ HQPVYGKIJV             Rysunek 11.2. Wygląd strony, na której w celu
                             åPQTOCN EQNQT HHHHHH                   wyró nienia wierszy i kolumn tabeli zastosowano
                             OCTIKPVQR RZ OCTIKPDQVVQO RZ      obwódki
                             åOCTIKPNGHV RZ
                             RCFFKPIVQR RZ RCFFKPIDQVVQO RZ
                             åRCFFKPINGHV RZ
                           _
                           UV[NG

                        W przypadku omawianej aplikacji zostanie
                        wykorzystany arkusz stylów CSS, który
Tworzenie szablonu




                        posłu y do sformatowania tekstu. Ze względu
                        na niewielką objętość kodu arkusza stylów
                        CSS, zamiast w oddzielnym pliku zostanie
                        on umieszczony bezpośrednio w sekcji *'#
                        strony HTML.
                     3. Zakończyć pisanie kodu nagłówka strony
                        HTML i utworzyć pierwszy wiersz tytułu.
                           JGCF
                           DQF[
                           VCDNG YKFVJ  DQTFGT 
                           åEGNNURCEKPI  EGNNRCFFKPI 
                           åCNKIP EGPVGT
                             VT
                               VF EQNURCP  DIEQNQT 
                               åR ENCUU VKVNG CTæFCPKG
                               åCYCTVQ EKæ UVTQPR VF
                             VT
                             VT

                        Podstawowa strona HTML będzie zawierała
                        tabelę zło oną z trzech wierszy — tytułu,
                        wiersza przechowującego odnośniki
                        i zawartość strony oraz wiersza, w którym
                        będą umieszczone informacje o prawach
                        autorskich (rysunek 11.2).




                     380
Zarządzanie zawartością strony — przykład

                                                  4. Utworzyć sekcję powiązaną z odnośnikami
                                                    i rozpocząć definiowanie komórek
                                                    przechowujących zawartość strony.
                                                      VF XCNKIP VQR PQYTCR PQYTCR
                                                      D C JTGH KPFGZRJR ENCUU
                                                      å PCXNKPM 5VTQPC I ÎYPCC DT 
                                                      C JTGH XKGYAWTNURJR
                                                      åENCUU PCXNKPM 2TGINæFCL CFTGU[
                                                      å74.C DT 
                                                      C JTGH CFFAWTNRJR ENCUU
                                                      å PCXNKPM åQFCL CFTGU 74.C DT 
                                                      C JTGH XKGYAHKNGURJR ENCUU
                                                      å PCXNKPM 2TGINæFCL RNKMKC DT 
                                                      C JTGH CFFAHKNGRJR
                                                      åENCUU PCXNKPM QFCL RNKMC D
                                                      VF
                                                      VF XCNKIP VQR ENCUU EQPVGPV
                                                        .KUVKPI   PCINQYGMJVON 

                                                  5. Zapisać plik pod nazwą naglowek.html
Rysunek 11.3. Struktura aplikacji internetowej,     i umieścić go na serwerze WWW
której katalogiem głównym jest katalog html         (w katalogu includes).




                                                                                                   Tworzenie szablonu
                                                    Na rysunku 11.3 przedstawiono strukturę
                                                    katalogów zawierających pliki aplikacji.

                                                  Wskazówka
                                                    W przykładzie zamieszczonym w następnym
                                                    przykładzie zostanie zastosowany bardziej
                                                    zło ony arkusz stylów CSS, który będzie
                                                    zapisany w oddzielnym pliku dołączonym
                                                    do pliku naglowek.html.




                                                                                             381
Rozdział 11.

                     Aby utworzyć plik stopka.html,                    Listing 11.2. Plik stopka.html zawiera pozostałe
                                                                       definicje wyglądu strony HTML
                     należy wykonać następujące kroki:
                     1. W edytorze tekstu utworzyć nową stronę
                                                                               .KUVKPI   UVQRMCJVON 
                        HTML (listing 11.2).                                   -QPKGE CYCTVQ EK UVTQP[ 
                             .KUVKPI   UVQRMCJVON                     VF
                                                                               VT
                     2. Zakończyć kod środkowego wiersza tabeli.         
                                                                               VT
                              VF
                                                                                 VF PDURVF
                            VT
                                                                                 VF CNKIP EGPVGT EQR[
                        Cała zawartość strony będzie przechowywana                 .CTT[ '7NNOCP CPF /%
                                                                                  +PUKIJVU +PEVF
                        w środkowym wierszu tabeli, którego                   VT
                        definicja zaczyna się w pliku naglowek.html.     
                        Powy szy kod kończy definicję wiersza,              VCDNG
                        po którym zostanie umieszczony trzeci               DQF[
                        i ostatni wiersz.                                   JVON

                     3. Zdefiniować ostatni wiersz i zakończyć
                        tworzenie strony HTML.
Tworzenie szablonu




                             VT
                               VF PDURVF
                               VF CNKIP EGPVGT EQR[  .CTT[ '
                               å7NNOCP CPF /% +PUKIJVU +PEVF
                             VT
                           VCDNG
                           DQF[
                           JVON

                     4. Zapisać plik pod nazwą stopka.html
                        i umieścić go na serwerze WWW
                        (w katalogu includes).




                     382
Zarządzanie zawartością strony — przykład

Listing 11.3. Główna strona aplikacji
(w razie potrzeby nale y umieścić na niej     Tworzenie zwykłych
bardziej wartościowe informacje)              stron internetowych
                                              Zanim zajmiemy się najwa niejszą częścią
    !RJR .KUVKPI   KPFGZRJR           aplikacji internetowej (samym mechanizmem
     ) ÎYPC UVTQPC UGTYGTC 999
                                              zarządzania zawartością stron) konieczne będzie
     7UVCYKGPKG V[VW W UVTQP[
     K FQ æEGPKG PCI ÎYMC *6/.              stworzenie jeszcze dwóch stron HTML. Jedna
     RCIGAVKVNG  CTæFCPKG                z nich o nazwie index.php będzie spełniała rolę
     CYCTVQ EKæ UVTQP                       głównej strony aplikacji. Z kolei druga o nazwie
   KPENWFGAQPEG                              mysql_connect.php jest skryptem, którego
     
 KPENWFGUPCINQYGMJVON               zadaniem jest połączenie z serwerem MySQL
   !
    R 5RCO URCO URCO URCO URCO URCO
                                              i wybranie wymaganej bazy danych (w celu
     URCO URCO URCO URCOR                  uzyskania dodatkowych informacji na jej temat
    R 5RCO URCO URCO URCO URCO URCO         nale y zapoznać się z zawartością ramki Schemat




                                                                                                  Tworzenie zwykłych stron internetowych
     URCO URCO URCO URCOR                  bazy danych zawartej w następnym podrozdziale).
   !RJR  Q æEGPKG UVQRMK *6/.
   KPENWFGAQPEG 
 KPENWFGUUVQRMCJVON 
   !
                                              Aby utworzyć główną stronę,
                                              należy wykonać następujące kroki:
                                              1. W edytorze tekstu utworzyć nowy skrypt PHP
                                                 (listing 11.3).
                                                   !RJR    .KUVKPI   KPFGZRJR

                                              2. Określić tytuł strony i dołączyć plik
                                                 nagłówka HTML.
                                                    RCIGAVKVNG  CTæFCPKG CYCTVQ EKæ
                                                   åUVTQP 
                                                   KPENWFGAQPEG 
 KPENWFGUPCINQYGMJVON 
                                                   !

                                              3. Wypełnić stronę tekstem.
Rysunek 11.4. Główna strona
                                                     R 5RCO URCO URCO URCO URCO URCO URCO
                                                     åURCO URCO URCOR
                                                     R 5RCO URCO URCO URCO URCO URCO URCO
                                                     åURCO URCO URCOR

                                                 Co prawda posłu yłem się tego typu treścią
                                                 (słowo URCO), ale oczywiście na stronie
                                                 głównej mo na umieścić bardziej wartościowe
                                                 informacje.
                                              4. Dołączyć stopkę HTML.
                                                   !RJR
                                                   KPENWFGAQPEG 
 KPENWFGUUVQRMCJVON 
                                                   !

                                              5. Zapisać plik pod nazwą index.php, umieścić go
                                                 na serwerze WWW i przetestować przy u yciu
                                                 przeglądarki internetowej (rysunek 11.4).


                                                                                            383
Rozdział 11.

                                         Aby utworzyć skrypt                                  Listing 11.4. Skrypt łączy z serwerem MySQL
                                                                                              i wybiera bazę danych content
                                         mysql_connect.php,
                                         należy wykonać następujące kroki:
                                                                                                  !RJR .KUVKPI  O[USNAEQPPGEVRJR
                                         1. W edytorze tekstu utworzyć nowy skrypt PHP             9 RNKMW CYCTVQ RCTCOGVT[
                                            (listing 11.4).                                        Y[OCICPG FQ W[UMCPKC FQUVúRW
                                                                                                   FQ DC[ FCP[EJ 2NKM LGUV
                                               !RJR    .KUVKPI   O[USNAEQPPGEVRJR           W [YCP[ VCM G RT[ æEGPKW UKú
                                            Skrypt jest taki sam jak jego poprzednie wersje         UGTYGTGO /[53. K Y[DKGTCPKGO
                                                                                                   DC[ FCP[EJ
                                            wykorzystane w poprzednich rozdziałach                7UVCYKGPKG LCMQ UVC [EJ
                                            (z wyjątkiem nazwy u ytkownika i jego hasła            RCTCOGVTÎY WFKGNCLæE[EJ FQUVúRW
                                            oraz konfiguracji bazy danych). Skrypt mo e            FQ DC[ FCP[EJ
                                            zostać stworzony od podstaw lub poprzez              FGHKPG 
 $A75'4  WUGTPCOG 
                                            odpowiednią modyfikację poprzedniej wersji.          FGHKPG 
 $A2#55914 
                                                                                                    RCUUYQTF 
Tworzenie zwykłych stron internetowych




                                         2. Określić konfigurację bazy danych w postaci          FGHKPG 
 $A*156  NQECNJQUV 
                                            stałych.                                             FGHKPG 
 $A0#/'  EQPVGPV 
                                                                                                  0CYKæCPKG RQ æEGPKC
                                               FGHKPG   
   $A75'4  WUGTPCOG                    UGTYGTGO K Y[DTCPKG DC[ FCP[EJ
                                               FGHKPG   
   $A2#55914  RCUUYQTF             FDE  O[USNAEQPPGEV 
$A*156
                                               FGHKPG   
   $A*156  NQECNJQUV                  $A75'4 $A2#55914 14 FKG
                                               FGHKPG   
   $A0#/'  EQPVGPV                    
 0KG D[ Q OQ NKYG RQ æEGPKG
                                                                                                    UGTYGTGO /[53.  O[USNAGTTQT
 
                                            Mając na względzie kwestię zabezpieczeń              O[USNAUGNGEVAFD 
$A0#/' 14 FKG
                                            u ytkownik łączący się z serwerem MySQL                
 0KG D[ Q OQ NKYG Y[DTCPKG DC[
                                            powinien na potrzeby omawianej aplikacji               FCP[EJ  O[USNAGTTQT
 
                                            dysponować mo liwością wykonywania tylko             !
                                            takich poleceń jak +05'46, 5'.'%6, '.'6'
                                            i dodatkowo wyłącznie dla bazy danych
                                            content.
                                         3. Połączyć się z serwerem MySQL i wybrać
                                            bazę danych.
                                                FDE  O[USNAEQPPGEV 
$A*156 $A75'4
                                               å$A2#55914 14 FKG 
 0KG D[ Q OQ NKYG
                                               åRQ æEGPKG  UGTYGTGO /[53. 
                                               åO[USNAGTTQT
 
                                               O[USNAUGNGEVAFD 
$A0#/' 14 FKG
                                               å
 0KG D[ Q OQ NKYG Y[DTCPKG DC[ FCP[EJ
                                               å åO[USNAGTTQT
 
                                                                                              Wskazówki
                                            Aplikacja dysponuje podstawowym
                                            mechanizmem obsługi błędów realizowanym                 W następnym rozdziale zostanie omówiony
                                            przez funkcję O[USNAGTTQT
. Więcej                     przykład, w którym zostaną wykorzystane
                                            informacji na ten temat zawarto w rozdziale 6.          bardziej zaawansowane metody obsługi
                                                                                                    błędów. Poza tym zamieszczono w nim
                                         4. Zakończyć skrypt PHP.                                   zmodyfikowaną wersję skryptu
                                               !                                                    mysql_connect.php.
                                         5. Zapisać plik pod nazwą mysql_connect.php                W celu uzyskania dodatkowych informacji
                                            i umieścić go na serwerze WWW poza                      na temat praw dostępu do serwera MySQL
                                            katalogiem głównym (rysunek 11.3).                      nale y zapoznać się z zawartością dodatku A.


                                         384
Zarządzanie zawartością strony — przykład


Zarządzanie adresami URL
Kolejne dwie strony HTML, które zostaną
stworzone, umo liwią u ytkownikom dodawanie
adresów URL i przeglądanie ju dołączonych.
Ta część aplikacji bazuje na trzech tabelach
bazy danych — WTNU, WTNAV[RGU i WTNAVKVNGU.
Aby uzyskać dodatkowe informacje, nale y
zapoznać się z zawartością ramki Schemat
bazy danych.

Dodawanie adresów URL
Skrypt add_url.php prawdopodobnie jest
najbardziej zło onym wśród wszystkich
wchodzących w skład aplikacji. Wynika to
z zastosowania znormalizowanej struktury
bazy danych. Formularz zawarty w skrypcie
pobiera adres URL, jego tytuł (lub nazwę), opis




                                                   Zarządzanie adresami URL
i maksymalnie trzy kategorie. Po wypełnieniu
formularza (adres URL, jego tytuł, opis) dane
zostaną umieszczone w tabeli WTNAVKVNGU.
Następnie w celu dodania do tabeli WTNU
od jednego do trzech rekordów (w zale ności
od ilości kategorii wybranych przez u ytkownika)
zostanie zastosowany klucz główny tabeli
VKVNGAKF wraz z wartościami pola V[RGAKF.
W celu określenia wartości pola VKVNGAKF dla
dodanego adresu URL zostanie wykorzystana
funkcja O[USNAKPUGTVAKF
, która do tej pory
nie była omawiana. Ka dorazowo, gdy na tabeli
zawierającej pole o automatycznie zwiększanej
wartości (zazwyczaj jest nim klucz główny)
zostanie wykonane zapytanie, wtedy dla pola
serwer MySQL u yje następnej wartości.
Funkcja O[USNAKPUGTVAKF
 zwróci tę wartość.
W przeciwnym razie nie byłoby mo liwe jej
uzyskanie.




                                            385
Rozdział 11.



                                                              Schemat bazy danych
                              W niniejszym rozdziale zastosowano bazę danych o nazwie content, którą utworzono
                              w rozdziale 5. W tamtym rozdziale zdefiniowano trzy znormalizowane tabele na potrzeby
                              obsługi adresów URL (zło ona struktura pozwala na zaklasyfikowanie adresów URL
                              do wielu typów). W tym rozdziale zostanie stworzona tabela WRNQCFU wykorzystywana
                              przy zarządzaniu plikami. Całkowita struktura bazy danych mo e zostać ponownie
                              zdefiniowana z wykorzystaniem poni szych poleceń:
                                 %4'#6' 6#$.' WRNQCFU 
WRNQCFAKF KPV 
 705+)0' 016 07.. #761A+0%4'/'06
                                 åHKNGAPCOG 8#4%*#4
 016 07.. HKNGAUKG +06
 705+)0' 016 07.. HKNGAV[RG
                                 å8#4%*#4
 016 07.. FGUETKRVKQP 8#4%*#4
 '(#7.6 07.. WRNQCFAFCVG
                                 å#6'6+/' 016 07.. 24+/#4; -'; 
WRNQCFAKF -'; HKNGAPCOG 
HKNGAPCOG
                                 %4'#6' 6#$.' WTNAVKVNGU 
VKVNGAKF 5/#..+06
 705+)0' 016 07.. #761A+0%4'/'06
                                 åWTN 8#4%*#4
 016 07.. VKVNG 8#4%*#4
 016 07.. FGUETKRVKQP 6+0;6':6 016
                                 å07.. 24+/#4; -'; 
VKVNGAKF 70+37' -'; WTN 
WTN
                                 %4'#6' 6#$.' WTNAV[RGU 
V[RGAKF 6+0;+06
 705+)0' 016 07.. #761A+0%4'/'06
                                 åV[RG 8#4%*#4
 016 07.. 24+/#4; -'; 
V[RGAKF 70+37' -'; V[RG 
V[RG
                                 %4'#6' 6#$.' WTNU 
WTNAKF 5/#..+06
 705+)0' 016 07.. #761A+0%4'/'06
                                 åVKVNGAKF 5/#..+06
 705+)0' 016 07.. V[RGAKF 6+0;+06
 705+)0' 016 07..
                                 åCRRTQXGF %*#4
 '(#7.6 0  FCVGAUWDOKVVGF 6+/'56#/2
 016 07.. 24+/#4;
Zarządzanie adresami URL




                                 å-'; 
WTNAKF -'; VKVNGAKF 
VKVNGAKF -'; V[RGAKF 
V[RGAKF -';
                                 åFCVGAUWDOKVVGF 
FCVGAUWDOKVVGF

                              W celu sprawdzenia struktury bazy danych zawsze mo na u yć poni szych poleceń języka SQL
                              (rysunek 11.5).
                                 5*19 6#$.'5
                                 '5%4+$' nazwa_tabeli




                              Rysunek 11.5. Sprawdzenie struktury bazy danych




                           386
Zarządzanie zawartością strony — przykład

Aby utworzyć skrypt add_url.php,                       Podobnie jak w poprzednich rozdziałach,
należy wykonać następujące kroki:                      funkcja GUECRGAFCVC
 gwarantuje poprawność
                                                       przesyłanych danych niezale nie od tego, czy
1. W edytorze tekstu utworzyć nowy skrypt              uaktywniono funkcję Magic Quotes, czy nie.
   PHP (listing 11.5).
                                                     3. Przeprowadzić walidację wprowadzonego
       !RJR .KUVKPI   CFFAWTNRJR                adresu URL i jego tytułu.
        RCIGAVKVNG  QFCYCPKG CFTGUÎY 74. 
       KPENWFG 
 KPENWFGUPCINQYGMJVON                   KH 
 GORV[
 A2156= WTN ? ]
       TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR                   W  GUECRGAFCVC
 A2156= WTN ?
                                                            _ GNUG ]
2. Sprawdzić, czy formularz został wypełniony                W  (#.5'
   i zastosować funkcję GUECRGAFCVC
.                      GEJQ R HQPV EQNQT TGF 2TQUú RQFCè
                                                            åCFTGU 74. HQPV R  _
       KH 
KUUGV
 A2156= UWDOKV ? ]                       KH 
 GORV[
 A2156= VKVNG ? ]
       å 1DU WIC HQTOWNCTC                                 V  GUECRGAFCVC
 A2156= VKVNG ?
         HWPEVKQP GUECRGAFCVC 
 FCVC ]                     _ GNUG ]
           INQDCN FDE                                         V  (#.5'
           KH 
KPKAIGV
 OCIKEASWQVGUAIRE  ]                 GEJQ R HQPV EQNQT TGF
              FCVC  UVTKRUNCUJGU
 FCVC                     å2TQUú RQFCè PCYú CFTGUW
           _                                                  å74.VKVNG HQPV R  _
           TGVWTP O[USNATGCNAGUECRGAUVTKPI




                                                                                                      Zarządzanie adresami URL
           å
VTKO 
 FCVC FDE
         _


Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych


       !RJR .KUVKPI   CFFAWTNRJR
        5VTQPC RQYCNC W [VMQYPKMQO FQFCè CFTGU[ 74. FQ DC[ FCP[EJ
        7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/.
        RCIGAVKVNG  QFCYCPKG CFTGUÎY 74. 
       KPENWFG 
 KPENWFGUPCINQYGMJVON 
       TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR   2Q æEGPKG  DCæ FCP[EJ
       KH 
KUUGV
 A2156= UWDOKV ? ]  1DU WIC HQTOWNCTC
          (WPMELC WUWYCLæEC PCM  K QDEKPCLæEC FCPG YRTQYCFQPG Y HQTOWNCTW
         HWPEVKQP GUECRGAFCVC 
 FCVC ]
          INQDCN FDE
          KH 
KPKAIGV
 OCIKEASWQVGUAIRE  ]
             FCVC  UVTKRUNCUJGU
 FCVC
          _
          TGVWTP O[USNATGCNAGUECRGAUVTKPI 
VTKO 
 FCVC FDE
        _  -QPKGE UGMELK HWPMELK GUECRGAFCVC





                                                                                              387
Rozdział 11.

                              W tym przykładzie zostanie dokonane
                              sprawdzenie, czy wprowadzono wartości.
                              W celu zwiększenia dokładności mo na
                              oczywiście zastosować wyra enia proste
                              (tak naprawdę w rozdziale 8. zawarto skrypt
                              przeprowadzający walidację adresów URL).
                              Jeśli jakieś pole nie zostanie wypełnione,
                              pojawi się komunikat błędu widoczny
                              na rysunku 11.6.
                           4. Sprawdzić, czy w polu FGUETKRVKQP
                              podano wartość.
                                  KH 
 GORV[
 A2156= FGUETKRVKQP ? ]
                                     F  GUECRGAFCVC
                                    å
 A2156= FGUETKRVKQP ?
                                                                                 Rysunek 11.6. Jeśli u ytkownik nie poda adresu
                                  _ GNUG ]                                       URL lub jego tytułu, zostanie wyświetlony
                                     F   _                                     komunikat błędu

                              Ze względu na to, e w polu FGUETKRVKQP
                              tabeli WTNAVKVNGU nie trzeba wstawiać wartości,
Zarządzanie adresami URL




                              będzie ona przetwarzana, ale tylko wtedy,
                              gdy zostanie wprowadzona w formularzu.
                              Jeśli w polu FGUETKRVKQP nie zostanie
                              wstawiona adna wartość, zmiennej F
                              stosowanej w zapytaniu będzie przypisywany
                              pusty łańcuch.

                           Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy


                                   5RTCYFGPKG CFTGUW 74.
                                  KH 
 GORV[
 A2156= WTN ? ]
                                   W  GUECRGAFCVC
 A2156= WTN ?
                                  _ GNUG ]
                                     W  (#.5'
                                    GEJQ R HQPV EQNQT TGF 2TQUú RQFCè CFTGU 74. HQPV R  _
                                   5RTCYFGPKG PCY[ CFTGUW 74.
                                  KH 
 GORV[
 A2156= VKVNG ? ]
                                     V  GUECRGAFCVC
 A2156= VKVNG ?
                                  _ GNUG ]
                                     V  (#.5'
                                    GEJQ R HQPV EQNQT TGF 2TQUú RQFCè PCYú CFTGUW 74.VKVNG HQPV R  _
                                   5RTCYFGPKG YCTVQ EK RQNC FGUETKRVKQP 
PKG LGUV Y[OCICPG
                                  KH 
 GORV[
 A2156= FGUETKRVKQP ? ]
                                     F  GUECRGAFCVC
 A2156= FGUETKRVKQP ?
                                  _ GNUG ]
                                     F   _




                           388
Zarządzanie zawartością strony — przykład

                                                     5. Sprawdzić wybraną kategorię.
                                                            KH 

 A2156= V[RG ?  14
                                                            å
 A2156= V[RG ?  14
                                                            å
 A2156= V[RG ?  ]
                                                               V[RG  647'
                                                            _ GNUG ]
                                                               V[RG  (#.5'
                                                              GEJQ R HQPV EQNQT TGF
                                                              å2TQUú RQFCè EQ PCLOPKGL LGFPæ
                                                              åMCVGIQTKú HQPV R  _

                                                        U ytkownik, mając do dyspozycji zbiór
                                                        typów zawartych w tabeli WTNAV[RGU, mo e
                                                        przypisać wprowadzanemu adresowi URL
                                                        maksymalnie trzy kategorie. Zakłada się,
Rysunek 11.7. U ytkownik musi wybrać co najmniej         e u ytkownik wybierze kategorię przy
jedną kategorię dla wprowadzonego adresu URL            u yciu pierwszego menu rozwijanego
                                                        (V[RG). Niezale nie od tego instrukcja
                                                        warunkowa sprawdzi, czy skorzystano
                                                        z przynajmniej jednego menu rozwijanego.




                                                                                                      Zarządzanie adresami URL
                                                        Jeśli tak nie będzie, zostanie wyświetlony
                                                        komunikat błędu (rysunek 11.7).

Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy


        5RTCYFGPKG MCVGIQTKK
       KH 

 A2156= V[RG ?  14 
 A2156= V[RG ?  14 
 A2156= V[RG ?  ]
          V[RG  647'
       _ GNUG ]
          V[RG  (#.5'
         GEJQ R HQPV EQNQT TGF 2TQUú RQFCè EQ PCLOPKGL LGFPæ MCVGIQTKú HQPV R  _
       KH 
 W     V     V[RG ]  ,G NK YU[UVMQ LGUV Y RQTæFMW
          QFCYCPKG CFTGUW 74. FQ VCDGNK WTNAVKVNGU
          SWGT[  +05'46 +061 WTNAVKVNGU 
WTN VKVNG FGUETKRVKQP 8#.7'5
           
 W  V  F  
          TGUWNV  O[USNASWGT[ 
 SWGT[  9[MQPCPKG CR[VCPKC
          VKF  O[USNAKPUGTVAKF
  2QDTCPKG KFGPV[HKMCVQTC V[VW W
  
         KH 
 VKF  ]  ,G NK QUVC Q Y[MQPCPG RTCYKF QYQ
            6YQTGPKG CR[VCPKC
            SWGT[  +05'46 +061 WTNU 
VKVNGAKF V[RGAKF CRRTQXGF FCVGAUWDOKVVGF 8#.7'5     
           KH 
 A2156= V[RG ?  ]
              SWGT[  
 VKF ] A2156= V[RG ?_ ;  019
  _




                                                                                                389
Rozdział 11.

                           6. Dodać adres URL do tabeli WTNAVKVNGU.               7. Utworzyć główne zapytanie.
                                  KH 
 W     V     V[RG ]                                 KH 
 VKF    ]
                                     QFCYCPKG CFTGUW 74. FQ VCDGNK
                                    åWTNAVKVNGU                                               SWGT[  +05'46 +061 WTNU
                                     SWGT[  +05'46 +061 WTNAVKVNGU 
WTN                    å
VKVNGAKF V[RGAKF CRRTQXGF
                                    åVKVNG FGUETKRVKQP 8#.7'5 
 W                         åFCVGAUWDOKVVGF 8#.7'5 
                                    å V  F                                                KH 
 A2156= V[RG ?  ]
                                     TGUWNV  O[USNASWGT[ 
 SWGT[                             SWGT[  
 VKF
                                     VKF  O[USNAKPUGTVAKF
                                  å] A2156= V[RG ?_ ; 
                                                                                                å019
 
                              Ze względu na strukturę bazy danych, adres                     _
                              URL musi zostać dodany do tabeli WTNAVKVNGU                    KH 
 A2156= V[RG ?  ]
                              zanim będzie mo liwa modyfikacja tabeli                            SWGT[  
 VKF ] A2156
                              WTNU. Powy sze zapytanie doda adres URL,                          å= V[RG ?_ ;  019
 
                                                                                             _
                              a następnie przy u yciu funkcji O[USN
                                                                                             KH 
 A2156= V[RG ?  ]
                              AKPUGTVAKF
 zwróci wartość pola VKVNGAKF                          SWGT[  
 VKF
                              (klucz główny tabeli o automatycznie                              å] A2156= V[RG ?_ ; 
                              zwiększanej wartości). Uzyskana wartość                           å019
 
                              mo e następnie zostać wykorzystana                             _
                                                                                               SWGT[  UWDUVT 
 SWGT[  
Zarządzanie adresami URL




                              w drugim zapytaniu (krok 7.).

                           Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy


                                        KH 
 A2156= V[RG ?  ]
                                            SWGT[  
 VKF ] A2156= V[RG ?_ ;  019
              _
                                        KH 
 A2156= V[RG ?  ]
                                            SWGT[  
 VKF ] A2156= V[RG ?_ ;  019
 
                                        _
                                          SWGT[  UWDUVT 
 SWGT[    7UWPKúEKG QUVCVPKGIQ RTGEKPMC K URCELK
                                         9[MQPCPKG CR[VCPKC
                                          TGUWNV  O[USNASWGT[ 
 SWGT[
                                        KH 
 TGUWNV ]
                                           GEJQ R D KúMWLGO[ C RTGU CPKG FCP[EJ D R 
                                            A2156  CTTC[

                                        _ GNUG ]  ,G NK Y[UVæRKæ RTQDNGO[
                                           GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG PKG OQI Q
                                             QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R 
                                        _
                                      _ GNUG ]  ,G NK Y[UVæRKæ RTQDNGO[
                                   GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG
                                     PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R 
                                   _




                           390
Zarządzanie zawartością strony — przykład

   Jeśli zostanie pobrana wartość zmiennej VKF,       8. Wykonać zapytanie, wprowadzić komunikaty
   bez obaw mo na przejść do wykonywania                 informujące o jego wyniku i uzupełnić
   głównego zapytania (dodanie rekordu do                instrukcje warunkowe.
   tabeli WTNU). Aby tak postąpić, na początku                    TGUWNV  O[USNASWGT[ 
 SWGT[
   nale y zdefiniować zapytanie i przypisać                      KH 
 TGUWNV ]
   jego początkową część zmiennej SWGT[.                           GEJQ R D KúMWLGO[ C
   Po sprawdzeniu, czy wybrano kategorie                           åRTGU CPKG FCP[EJ D R 
   (przy u yciu menu rozwijanych), dla ka dej                    _ GNUG ]  ,G NK Y[UVæRKæ RTQDNGO[
                                                                   GEJQ R HQPV EQNQT TGF
   z nich dodano rekord przy u yciu zapytania.
                                                                   å0C UMWVGM D úFW U[UVGOQYGIQ
   Na końcu w celu usunięcia z zapytania                           åY[U CPG CR[VCPKG PKG OQI Q
   ostatnich dwóch znaków (przecinek i znak                        åQUVCè RTGVYQTQPG
   spacji) zostanie u yta funkcja UWDUVT
.                        å2TGRTCUCO[ C CKUVPKC æ
   Jeśli wystąpią problemy ze składnią zapytania                   åPKGFQIQFPQ èHQPV R 
   nale y nakazać interpreterowi języka PHP                      _
   wyświetlenie wartości zmiennej SWGT[,                 Powy sze instrukcje warunkowe
   dzięki czemu mo na stwierdzić, co będzie              wyświetlą odpowiednie komunikaty
   przetwarzane przez serwer MySQL.                      związane z przesyłanymi danymi.




                                                                                                        Zarządzanie adresami URL
Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy


        _ GNUG ]  ,G NK LGFPC  QRGTCELK URTCYFGPKC FCP[EJ UKú PKG RQYKGFKG
          GEJQ R HQPV EQNQT TGF 2TQUú URTÎDQYCè RQPQYPKGHQPV R 
        _
     _  -QPKGE KPUVTWMELK YCTWPMQYGL QDU WIWLæEGL FCPG YRTQYCFCPG Y HQTOWNCTW
       (QTOWNCT Y[ YKGVNCLæE[ FCPG
      6YQTGPKG OGPW TQYKLCPGIQ
      SWGT[  5'.'%6
(41/ WTNAV[RGU 14'4 $; V[RG #5% 
      TGUWNV  O[USNASWGT[ 
 SWGT[
       RWNNFQYP  QRVKQP 9[DKGT LGFPæ RQ[ELúQRVKQP 
     YJKNG 
 TQY  O[USNAHGVEJACTTC[ 
 TGUWNV /;53.A#551% ]
         RWNNFQYP  QRVKQP XCNWG ] TQY= V[RGAKF ?_ ] TQY= V[RG ?_QRVKQP P 
     _
     !
     HQTO CEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? ! OGVJQF RQUV
     HKGNFUGV NGIGPF 9 EGNW RTGU CPKC CFTGUW 74. PCNG [ Y[RG PKè HQTOWNCT
       
OQ PC Y[DTCè OCMU[OCNPKG  MCVGIQTKGNGIGPF
     R D #FTGU 74.D KPRWV V[RG VGZV PCOG WTN UKG  OCZNGPIVJ 
       XCNWG !RJR KH 
KUUGV
 A2156= WTN ? GEJQ A2156= WTN ? !  DT
         UOCNN 0KG FQ æECL KFGPV[HKMCVQTC K JVVRK UOCNN R
      _ GNUG ]
       GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG
         PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R 
      _

      _ GNUG ]
      GEJQ R HQPV EQNQT TGF 2TQUú URTÎDQYCè RQPQYPKGHQPV R 
      _
      _




                                                                                                 391
Rozdział 11.

                           9. Utworzyć stronę HTML, na której zostaną
                              umieszczone menu rozwijane umo liwiające
                              wybranie typu adresów URL.
                                    SWGT[  5'.'%6
(41/ WTNAV[RGU 14'4 $;
                                   åV[RG #5% 
                                    TGUWNV  O[USNASWGT[ 
 SWGT[
                                    RWNNFQYP  QRVKQP 9[DKGT LGFPæ
                                   åRQ[ELúQRVKQP
                                    
                                   YJKNG 
 TQY  O[USNAHGVEJACTTC[ 
 TGUWNV
                                   å/;53.A#551% ]
                                      RWNNFQYP  QRVKQP
                                     åXCNWG ] TQY= V[RGAKF ?_ ] TQY
                                     å= V[RG ?_QRVKQP P 
                                   _


                           Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy
Zarządzanie adresami URL




                                  R D 0CYCV[VW CFTGUW 74.D KPRWV V[RG VGZV PCOG VKVNG UKG 
                                    OCZNGPIVJ  XCNWG !RJR KH 
KUUGV
 A2156= VKVNG ? GEJQ A2156= VKVNG ? !         R
                             
                                  R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP EQNU  TQYU  !RJR KH
                                    
KUUGV
 A2156= FGUETKRVKQP ? GEJQ A2156= FGUETKRVKQP ? ! VGZVCTGC R
                             
                                  R D -CVGIQTKC D UGNGEV PCOG V[RG
                                  !RJR GEJQ RWNNFQYP !
                                  UGNGEV R
                             
                                  R D -CVGIQTKC D UGNGEV PCOG V[RG
                                  !RJR GEJQ RWNNFQYP !
                                 UGNGEV R
                             
                                 R D -CVGIQTKC D UGNGEV PCOG V[RG
                                 !RJR GEJQ RWNNFQYP !
                                 UGNGEV R
                             
                                 HKGNFUGV
                             
                                 FKX CNKIP EGPVGT KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL  FKX
                             
                                 HQTO   -QPKGE HQTOWNCTC
                                 !RJR
                                 O[USNAENQUG
  COMPKúEKG RQ æEGPKC  DCæ FCP[EJ
                                 KPENWFG 
 KPENWFGUUVQRMCJVON   Q æEGPKG UVQRMK *6/.
                                 !




                           392
Zarządzanie zawartością strony — przykład

                                            Formularz będzie zawierał trzy menu rozwijane,
                                            z których ka de będzie dysponowało listą
                                            dostępnych typów adresów URL pobranych
                                            z bazy danych. Ze względu na to, e zale y
                                            mi na wyświetleniu trzech kopii tego typu
                                            informacji, bardziej efektywnym będzie
                                            przypisanie wyników zmiennej ni wielokrotne
                                            wysyłanie zapytania do bazy danych.
                                            Na rysunku 11.8 pokazano kod źródłowy
                                            strony zawierającej menu rozwijane.
                                         10. Utworzyć formularz na stronie HTML.
                                              HQTO CEVKQP !RJR GEJQ
                                               A5'48'4= 2*2A5'.( ? ! OGVJQF RQUV
                                              HKGNFUGV NGIGPF 9 EGNW RTGU CPKC CFTGUW
                                              å74. PCNG [ Y[RG PKè HQTOWNCT 
OQ PC
                                              åY[DTCè OCMU[OCNPKG  MCVGIQTKGNGIGPF

                                              R D #FTGU 74.D KPRWV V[RG VGZV
                                              åPCOG WTN UKG  OCZNGPIVJ 




                                                                                              Zarządzanie adresami URL
                                              åXCNWG !RJR KH 
KUUGV
 A2156= WTN ?
Rysunek 11.8. Kod źródłowy strony HTML        åGEJQ A2156= WTN ? !  DT
dynamicznie generujący menu rozwijane         å UOCNN å0KG FQ æECL KFGPV[HKMCVQTC
                                              åK JVVRK UOCNN R

                                              R D 0CYCV[VW CFTGUW 74.D KPRWV
                                              åV[RG VGZV PCOG VKVNG UKG 
                                              åOCZNGPIVJ  XCNWG !RJR KH
                                              å
KUUGV
 A2156= VKVNG ? GEJQ
                                              å A2156= VKVNG ? !  R

                                              R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP
                                              åEQNU  TQYU  !RJR KH
                                              å
KUUGV
 A2156= FGUETKRVKQP ? GEJQ
                                              å A2156= FGUETKRVKQP ? ! VGZVCTGC R

                                              R D -CVGIQTKC D UGNGEV PCOG V[RG
                                              !RJR GEJQ RWNNFQYP !
                                              UGNGEV R
                                              R D -CVGIQTKC D UGNGEV PCOG V[RG
                                              !RJR GEJQ RWNNFQYP !
                                              UGNGEV R
                                              R D -CVGIQTKC D UGNGEV PCOG V[RG
                                              !RJR GEJQ RWNNFQYP !
                                              UGNGEV R
                                              HKGNFUGV
                                              FKX CNKIP EGPVGT KPRWV V[RG UWDOKV
                                              åPCOG UWDOKV XCNWG 9[ NKL  FKX
                                              HQTO




                                                                                        393
Rozdział 11.

                              Formularz (rysunek 11.9) pozwala wprowadzić
                              do pól tekstowych kilka wartości i zapamiętać je.
                           11. Zakończyć skrypt PHP.
                                 !RJR
                                 O[USNAENQUG

                                 KPENWFG 
 KPENWFGUUVQRMCJVON 
                                 !

                           12. Zapisać plik pod nazwą add_url.php, umieścić
                              go na serwerze WWW i przetestować przy u yciu
                              przeglądarki internetowej (rysunek 11.10).




                                                                                  Rysunek 11.9. Formularz słu ący do dodawania
                                                                                  adresów URL
Zarządzanie adresami URL




                                                                                  Rysunek 11.10. Po przesłaniu wprowadzonych
                                                                                  danych zostanie wyświetlony komunikat
                                                                                  i formularz będzie widoczny ponownie
                                                                                  (z poprzednio wstawionymi wartościami)




                           394
Zarządzanie zawartością strony — przykład

Wskazówki                                        W zastosowanym przykładzie mo na było
                                                 te stworzyć kontrolki, które posłu yłyby
  W celu zablokowania mo liwości                 do wybierania maksymalnie trzech kategorii.
  stosowania znaczników języka HTML
  we wprowadzanych wartościach nale y            Po uaktywnieniu funkcji Magic Quotes,
  posłu yć się funkcją UVTKRAVCIU
.             wartości wprowadzone do formularza przed
  Funkcja ta usuwa wszystkie znaczniki           przesłaniem do przeglądarki muszą zostać
  nie tylko języka HTML, ale te PHP.             przetworzone przez funkcję UVTKRUNCUJGU
.
  Aby wyświetlić znaczniki języka HTML           W przytoczonym przykładzie po poprawnym
  (w postaci, w jakiej występują w kodzie        przesłaniu wstawionych wartości formularz
  źródłowym) bez ich uaktywniania nale y         zostanie ponownie wyświetlony wraz
  skorzystać z funkcji JVONURGEKCNEJCTU
        z poprzednio wprowadzonymi danymi.
  i JVONGPVKVKGU
.                              Aby to zmienić, nale y zrezygnować
                                                 z wyświetlania formularza lub wyczyścić
  Funkcja O[USNAKPUGTVAKF
 jest powiązana       zawartość zmiennej tablicowej A2156
  z ka dą pojedynczą sesją (interakcja z bazą    po udanym wykonaniu zapytania na bazie
  danych). Z tego te powodu nie nale y           danych.
  się przejmować tym, e zwrócono
  nieprawidłową wartość nawet wtedy,             Funkcja języka PHP o nazwie O[USNAKPUGTV





                                                                                                Zarządzanie adresami URL
  gdy skrypt jednocześnie został wykonany        jest odpowiednikiem funkcji .#56A+05'46A+

  przez kilku ró nych u ytkowników.              oferowanej przez serwer MySQL.
  W przypadku korzystania ze skryptów
  PHP i stron HTML mo na stosować
  rozwiązanie zapamiętujące, jakie pozycje
  zostały wybrane z menu rozwijanego,
  ale jest to związane z większą ilością kodu
  źródłowego, a ponadto w przytoczonym
  przykładzie niezbyt dobrze współpracuje
  ze zmienną RWNNFQYP.




                                                                                         395
Rozdział 11.

                           Przeglądanie wysłanych adresów URL
                           Skrypt umo liwiający przeglądanie adresów URL
                           będzie się składał z dwóch części — górnej
                           i dolnej. W pierwszej z nich zostanie wyświetlone
                           menu rozwijane z dostępnymi typami adresów,
                           natomiast w drugiej wszystkie odnośniki dla
                           wybranego typu. Gdy u ytkownik wyświetli
                           stronę po raz pierwszy, wtedy nie zostanie
                           wyświetlony aden adres URL. Po wybraniu
                           przez niego typu i przesłaniu danych
                           wprowadzonych do formularza, strona zostanie
                           wyświetlona ponownie wraz z listą adresów
                           URL dla wybranego typu (niezale nie
                           od tego menu rozwijane w dalszym ciągu
                           będzie widoczne).
Zarządzanie adresami URL




                                                              Nowe funkcje i metody
                              Skrypt view_urls.php wprowadza dwa nowe rozwiązania. Jednym z nich jest rzutowanie,
                              czyli narzucanie zmiennej konkretnego typu (całkowitoliczbowy, łańcuchowy itp.).
                              Aby zrzutować zmienną, nale y przed jej nazwą w nawiasach określić ostateczny jej typ.
                              Oto przykład:
                                 XCT    V[R C EWEJQY[
                                 XCT  
KPV XCT V[R EC MQYKVQNKEDQY[
                              Do dostępnych typów zmiennych (w niektórych przypadkach wiele określeń dotyczy tego
                              samego typu) nale y zaliczyć takie typy jak KPV i KPVGIGT, DQQN i DQQNGCP, HNQCV, FQWDNG,
                              TGCN, UVTKPI, CTTC[ i QDLGEV. Interpreter języka PHP w oparciu o początkową wartość
                              rzutowanej zmiennej zmieni jej typ i przypisze jej odpowiadającą mu wartość logiczną
                              (w celu uzyskania szczegółowych informacji z tym związanych nale y zajrzeć do
                              dokumentacji języka PHP). Przy u yciu funkcji KPVXCN
 mo na te zmienić typ zmiennej
                              na typ całkowitoliczbowy (co zostanie pokazane w kolejnym skrypcie). Z kolei poprzez
                              umieszczenie wartości w znakach cudzysłowu mo na zamienić typ zmiennej na łańcuchowy.
                              Drugim nowym rozwiązaniem zastosowanym w skrypcie jest funkcja NKUV
. Funkcja
                              pobiera wartości zmiennej tablicowej i przypisuje je oddzielnym zmiennym. Oto przykład:
                                  XCT  CTTC[ 
 ,CP  0QYCM 
                                 NKUV 
 HKTUV NCUV  XCT
                              Powy szym zmiennym HKTUV i NCUV zostaną przypisane odpowiednio wartości Jan i Nowak.
                              Podobna funkcjonalność mo e być równie uzyskana przy u yciu funkcji GZVTCEV
 podobnej
                              do funkcji NKUV
.




                           396
Zarządzanie zawartością strony — przykład

                                                    Aby utworzyć skrypt view_urls.php,
                                                    należy wykonać poniższe kroki:
                                                     1. W edytorze tekstu utworzyć nowy skrypt PHP
                                                        (listing 11.6).
                                                          !RJR .KUVKPI   XKGYAWTNURJR
                                                           RCIGAVKVNG  2TGINæFCPKG CFTGUÎY 74. 
                                                          KPENWFGAQPEG 
 KPENWFGUPCINQYGMJVON 
                                                          TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR 
Rysunek 11.11. Menu rozwijane                        2. Rozpocząć definiowanie formularza
                                                        zawartego na stronie HTML.
                                                          GEJQ FKX CNKIP EGPVGT
                                                          HQTO OGVJQF IGV CEVKQP XKGYAWTNURJR
                                                          UGNGEV PCOG V[RG
                                                          QRVKQP XCNWG 07.. 9[DKGT
                                                          åMCVGIQTKúQRVKQP
                                                           

                                                        Po pierwszym wyświetleniu strony HTML




                                                                                                       Zarządzanie adresami URL
                                                        będzie na niej widoczny formularz składający
                                                        się z menu rozwijanego i przycisku Wyślij
                                                        (rysunek 11.11). W tym miejscu zawarto
                                                        początek definicji formularza umieszczonego
                                                        na stronie HTML.

Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL,
jak i z adresami dla konkretnej kategorii


      !RJR .KUVKPI   XKGYAWTNURJR
       5VTQPC RQYCNC Y[ YKGVNKè CFTGU[ 74. CRKUCPG Y DCKG FCP[EJ
       7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/.
       RCIGAVKVNG  2TGINæFCPKG CFTGUÎY 74. 
      KPENWFGAQPEG 
 KPENWFGUPCINQYGMJVON 
      TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR   2Q æEGPKG  DCæ FCP[EJ
       6YQTGPKG HQTOWNCTC RQYCNCLæEGIQ W [VMQYPKMQYK Y[DTCPKG CFTGUW 74.
       MVÎT[ QUVCPKG Y[ YKGVNQP[
      GEJQ FKX CNKIP EGPVGT
      HQTO OGVJQF IGV CEVKQP XKGYAWTNURJR
     UGNGEV PCOG V[RG
     QRVKQP XCNWG 07.. 9[DKGT MCVGIQTKúQRVKQP
      




                                                                                                 397
Rozdział 11.

                           3. Pobrać wszystkie dostępne typy adresów URL
                              i dołączyć je do menu rozwijanego.
                                   SWGT[  5'.'%6
(41/ WTNAV[RGU
                                  å14'4 $; V[RG #5% 
                                   TGUWNV  O[USNASWGT[ 
 SWGT[
                                  YJKNG 
 TQY  O[USNAHGVEJACTTC[
                                  å
 TGUWNV /;53.A07/ ]
                                    GEJQ QRVKQP XCNWG  TQY=?        
                                    åUVTKRUNCUJGU
 TQY=? QRVKQP
                                   
                                  _                                              Rysunek 11.12. Dynamicznie wygenerowany kod
                                                                                 źródłowy formularza zawartego na stronie HTML
                              Powy szy kod pobiera z tabeli WTNAV[RGU
                              ka dy typ adresu URL i na podstawie
                              zwróconych rekordów generuje kod źródłowy
                              menu rozwijanego umieszczonego na stronie
                              HTML (rysunek 11.12).

                           Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL,
Zarządzanie adresami URL




                           jak i z adresami dla konkretnej kategorii — ciąg dalszy


                                  2QDTCPKG K Y[ YKGVNGPKG FQUVúRP[EJ V[RÎY
                                  SWGT[  5'.'%6
(41/ WTNAV[RGU 14'4 $; V[RG #5% 
                                  TGUWNV  O[USNASWGT[ 
 SWGT[
                                 YJKNG 
 TQY  O[USNAHGVEJACTTC[ 
 TGUWNV /;53.A07/ ]
                                    GEJQ QRVKQP XCNWG  TQY=?        UVTKRUNCUJGU
 TQY=? QRVKQP
                                  
                                 _
                             
                                  CMQ EGPKG HQTOWNCTC
                                 GEJQ UGNGEV
                                 KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL
                                 HQTO
                                 FKX
                                  
                             
                                  2QDTCPKG CFTGUÎY 74. QMTG NQPGIQ V[RW 
LG NK IQ RQFCPQ
                                 KH 
KUUGV
 A)'6= V[RG ? ]
                             
                                    V  KPVXCN
 A)'6= V[RG ?  5RTCYFGPKG E[ V[R LGUV EC MQYKVQNKEDQY[
                             
                                    2QDTCPKG PCY[ CMVWCNPKG Y[DTCPGIQ V[RW
                                    SWGT[  5'.'%6 V[RG (41/ WTNAV[RGU 9*'4' V[RGAKF V 
                                    TGUWNV  O[USNASWGT[ 
 SWGT[
                                   NKUV 
 V[RG  O[USNAHGVEJACTTC[ 
 TGUWNV /;53.A07/
                             
                                   GEJQ JT  FKX CNKIP EGPVGT D V[RG QFPQ PKMÎYD DT 
                                 UOCNN 
9U[UVMKG QFPQ PKMK DúFæ MQT[UVC [  Y CUPGIQ QMPC 0CLRKGTY
                                   QUVCPæ Y[ YKGVNQPG QUVCVPKQ FQFCPG QFPQ PKMKUOCNN FKX P 




                           398
Zarządzanie zawartością strony — przykład

4. Zakończyć definicję formularza                       Jeśli typ został ju wybrany (w takim
   umieszczonego na stronie HTML.                       przypadku zostanie dołączony do adresu
       GEJQ UGNGEV
                                                        URL i udostępniony przy u yciu zmiennej
       KPRWV V[RG UWDOKV PCOG UWDOKV                 tablicowej A)'6), powiązane z nim adresy
       åXCNWG 9[ NKL                                   URL powinny być pobrane.
       HQTO
       FKX                                            Pierwsza operacja będzie polegała
                                                       na zastosowaniu funkcji KPVXCN
 w celu
                                                        sprawdzenia, czy wybrany typ, który zostanie
5. Sprawdzić, czy został wybrany typ adresu             zastosowany w zapytaniu jest typem
   URL i czy pobrano informacje na jego temat.          całkowitoliczbowym. W dalszej kolejności
       KH 
KUUGV
 A)'6= V[RG ? ]                      przy u yciu funkcji NKUV
 zostanie pobrana
                                                        nazwa typu i wyświetlona na stronie w roli
          V  KPVXCN
 A)'6= V[RG ?                    nagłówka. Więcej informacji na temat funkcji
                                                        KPVXCN
 i NKUV
 mo na znaleźć w ramce
         SWGT[  5'.'%6 V[RG (41/ WTNAV[RGU
        å9*'4' V[RGAKF V                              Nowe funkcje i metody lub w dokumentacji
         TGUWNV  O[USNASWGT[ 
 SWGT[                 języka PHP.
        NKUV 
 V[RG  O[USNAHGVEJACTTC[
        å
 TGUWNV /;53.A07/                       6. Zainicjalizować zmienną HKTUV i wysłać




                                                                                                       Zarządzanie adresami URL
                                                        zapytanie do bazy danych.
         GEJQ JT  FKX
                                                           HKTUV  647'
         åCNKIP EGPVGT D V[RG
                                                           SWGT[  5'.'%6 WTN VKVNG FGUETKRVKQP
         åQFPQ PKMÎYD DT 
                                                          å(41/ WTNU #5 W WTNAVKVNGU #5 WV 9*'4'
       UOCNN 
9U[UVMKG QFPQ PKMK DúFæ
                                                          åWVVKVNGAKF  WVKVNGAKF #0 WV[RGAKF V
       åMQT[UVC [  Y CUPGIQ QMPC 0CLRKGTY
                                                          å#0 WCRRTQXGF  ; 14'4 $;
       åQUVCPæ Y[ YKGVNQPG QUVCVPKQ FQFCPG
                                                          åFCVGAUWDOKVVGF FGUE 
       åQFPQ PKMKUOCNN FKX P 
                                                           TGUWNV  O[USNASWGT[ 
 SWGT[


Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL,
jak i z adresami dla konkretnej kategorii — ciąg dalszy


         HKTUV  647'  +PKELCNKCELC OKGPPGL
         9[MQPCPKG CR[VCPKC PC DCKG FCP[EJ
         SWGT[  5'.'%6 WTN VKVNG FGUETKRVKQP (41/ WTNU #5 W WTNAVKVNGU #5 WV
          9*'4' WVVKVNGAKF  WVKVNGAKF #0 WV[RGAKF V #0 WCRRTQXGF  ;
          14'4 $; FCVGAUWDOKVVGF FGUE 
         TGUWNV  O[USNASWGT[ 
 SWGT[
         9[ YKGVNGPKG YU[UVMKEJ CFTGUÎY 74.
        YJKNG 
 TQY  O[USNAHGVEJACTTC[ 
 TGUWNV /;53.A#551% ]
           ,G NK LGUV VQ RKGTYU[ TGMQTF YVGF[ QUVCPKG WVYQTQPC VCDGNC JGCFGT
        KH 
 HKTUV ]
          GEJQ VCDNG DQTFGT  YKFVJ  EGNNURCEKPI  EGNNRCFFKPI  CNKIP EGPVGT
        VT
          VF CNKIP TKIJV YKFVJ  HQPV UKG 
 1FPQ PKMHQPV VF
          VF CNKIP NGHV YKFVJ  HQPV UKG 
 1RKUHQPV VF
        VT 
          _  -QPKGE RúVNK YCTWPMQYGL G OKGPPæ HKTUV




                                                                                                399
Rozdział 11.

                              Zmienna HKTUV zostanie wykorzystana                      _
                              na dwa sposoby. Pierwszy z nich będzie                   GEJQ      VT
                                                                                               VF CNKIP TKIJV C
                              polegał na tym, e zmienna wska e, e przed                        åJTGH JVVR] TQY= WTN ?_
                              wyświetleniem pierwszego rekordu na stronie                      åVCTIGV APGY     UVTKRUNCUJGU
                              HTML powinna zostać utworzona tabela.                            å
 TQY= VKVNG ?  C VF
                              W drugim przypadku zmienna posłu y                               VF CNKIP NGHV ] TQY
                              do sprawdzenia, czy w wyniku wykonanego                          å= FGUETKRVKQP ?_VF
                              zapytania zostały zwrócone jakiekolwiek                        VT P 
                              adresy URL.                                                     HKTUV  (#.5'
                           7. Wyświetlić wszystkie zwrócone rekordy.
                                                                                         _
                                   YJKNG 
 TQY  O[USNAHGVEJACTTC[
                                   å
 TGUWNV /;53.A#551% ]                        Pętla YJKNG zwróci wszystkie rekordy
                                                                                     pobrane w wyniku wykonanego zapytania.
                                     KH 
 HKTUV ]                                   Przed wyświetleniem pierwszego rekordu
                                       GEJQ VCDNG DQTFGT  YKFVJ               do przeglądarki internetowej zostanie
                                       åEGNNURCEKPI  EGNNRCFFKPI 
                                                                                     wysłana tabela i jej nagłówek
                                       åCNKIP EGPVGT
                                   VT                                               (rysunek11.13).
                                     VF CNKIP TKIJV YKFVJ  HQPV
Zarządzanie adresami URL




                                     åUKG 
 1FPQ PKMHQPV VF
                                     VF CNKIP NGHV YKFVJ  HQPV
                                     åUKG 
 1RKUHQPV VF
                                   VT 


                           Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL,
                           jak i z adresami dla konkretnej kategorii — ciąg dalszy


                                      9[ YKGVNC YU[UVMKG TGMQTF[
                                     GEJQ    VT
                                       VF CNKIP TKIJV C JTGH JVVR] TQY= WTN ?_ VCTIGV APGY        
                                       UVTKRUNCUJGU
 TQY= VKVNG ?  C VF
                                       VF CNKIP NGHV ] TQY= FGUETKRVKQP ?_VF
                                     VT P 
                                      HKTUV  (#.5'  YTÎEQPQ LGFGP TGMQTF
                                  _  -QPKGE RúVNK YJKNG
                                   ,G NK PKG Y[ YKGVNQPQ CFPGIQ TGMQTFW
                                  KH 
 HKTUV ]
                                    GEJQ FKX CNKIP EGPVGT #MVWCNPKG FNC Y[DTCPGL MCVGIQTKK PKG KUVPKGLG
                                       CFGP QFPQ PKMFKX 
                                  _ GNUG ]
                                    GEJQ VCDNG   COMPKúEKG VCDGNK
                                  _
                                _  -QPKGE KPVUVTWMELK YCTWPMQYGL A)'6= V[RG ?
                                O[USNAENQUG
  COMPKúEKG RQ æEGPKC  DCæ FCP[EJ
                                KPENWFGAQPEG 
 KPENWFGUUVQRMCJVON   Q æEGPKG UVQRMK *6/.
                                !




                           400
Zarządzanie zawartością strony — przykład

                                              8. Wyświetlić komunikat, jeśli nie został
                                                 zwrócony aden adres URL i zakończyć
                                                 kod głównej instrukcji warunkowej.
                                                     KH 
 HKTUV ]
                                                       GEJQ FKX CNKIP EGPVGT #MVWCNPKG FNC
                                                       åY[DTCPGL MCVGIQTKK PKG KUVPKGLG CFGP
                                                       åQFPQ PKMFKX 
                                                     _ GNUG ]
                                                       GEJQ VCDNG 
                                                     _ _

                                                 Jeśli zostaną zwrócone jakiekolwiek wiersze,
                                                 zmienna HKTUV znajdująca się wewnątrz
                                                 pętli YJKNG przyjmie wartość (#.5'. A zatem,
                                                 jeśli wartością zmiennej HKTUV nadal będzie
                                                 647', oznacza to, e nie zwrócono adnych
Rysunek 11.13. Lista adresów URL                 rekordów i powinien zostać wyświetlony
dla wybranego typu                               komunikat podobny do pokazanego na
                                                 rysunku 11.14. W przeciwnym razie powinna




                                                                                                  Zarządzanie adresami URL
                                                 zostać wygenerowana kompletna tabela.
                                              9. Zakończyć kod źródłowy strony HTML.
                                                   O[USNAENQUG

                                                   KPENWFGAQPEG 
 KPENWFGUUVQRMCJVON  !

                                             10. Zapisać plik pod nazwą view_urls.php, umieścić
                                                 go na serwerze WWW i przetestować przy
                                                 u yciu przeglądarki internetowej.

                                             Wskazówki
                                                 W rozdziale 12. zamieszczono skrypt
                                                 demonstrujący, w jaki sposób wyświetlać
Rysunek 11.14. Wygląd strony w przypadku,
                                                 rekordy na wielu stronach (zapoznaj się
gdy z wybranym typem nie powiązano jeszcze
 adnych adresów URL                              z zawartością ostatniego skryptu tego
                                                 rozdziału o nazwie view_users.php).
                                                 Przykłady zawarte w następnym rozdziale
                                                 dotyczą równie operacji rejestracji
                                                 i autoryzacji u ytkownika. Jeśli zale y Ci
                                                 na ochronie zarządzanych informacji,
                                                 obie operacje powinny zostać zastosowane
                                                 w aplikacji omawianej w niniejszym rozdziale.
                                                 W razie potrzeby w stosunku do pola
                                                 FGUETKRVKQP mo na zastosować funkcję
                                                 PNDT
 (skrót od słów newline to break).
                                                 Funkcja zamieni ka dy znak nowego wiersza
                                                 — tworzony poprzez wciśnięcie klawisza
                                                 Return lub Enter — na znacznik języka
                                                 (X)HTML postaci DT .


                                                                                          401
Rozdział 11.


                      Zarządzanie plikami
                      Ostatnia część omawianej aplikacji internetowej
                      słu y do zarządzania plikami dowolnego typu.
                      Odpowiednie skrypty pozwolą u ytkownikom
                      przy u yciu przeglądarki internetowej umieścić
                      na serwerze pliki przechowywane na ich
                      komputerach (rysunek 11.15). Dodatkowo
                      do bazy danych zostanie dodany rekord
                      powiązany z wykonaną operacją.

                      Umieszczanie plików na serwerze
                                                                         Rysunek 11.15. U ytkownicy będą mogli wybrać
                      Podobnie jak w przypadku przetwarzania             plik, który zostanie umieszczony na serwerze
                      przy u yciu skryptu PHP dowolnego formularza
                      zawartego na stronie HTML, równie operacja
                      umieszczania plików na serwerze składa się
                      z dwóch etapów. Najpierw musi zostać               Rysunek 11.16. Definicja typu file tworzy
                      wyświetlony formularz zawarty na stronie HTML      na formularzu zawartym na stronie HTML
                      umo liwiający umieszczanie plików na serwerze.     przycisk podobny do pokazanego powy ej
Zarządzanie plikami




                      Po przesłaniu danych wprowadzonych
                      do formularza skrypt PHP musi skopiować
                      plik w odpowiednie miejsce na serwerze.
                      Wymagana składnia kodu źródłowego
                      definiującego formularz umo liwiający
                      umieszczenie pliku na serwerze składa się
                      z trzech części:
                        HQTO GPEV[RG OWNVKRCTVHQTOFCVC
                        åCEVKQP UETKRVRJR OGVJQF RQUV
                        KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+'
                        åXCNWG 
                        (KNG KPRWV V[RG HKNG PCOG WRNQCF 

                      Atrybut GPEV[RG zawarty w pierwszej parze
                      znaczników kodu formularza oznacza,
                        e powinien być w stanie obsłu yć wiele typów
                      danych, włączając w to pliki. Nale y równie
                      zauwa yć, e formularz musi korzystać z metody
                      2156. Wartość ukrytego pola /#:A(+.'A5+'
                      spełnia w formularzu rolę ograniczenia wielkości
                      przetwarzanego pliku (wyra onej w bajtach)
                      i musi znajdować się przed definicją pola HKNG,
                      które słu y do utworzenia na formularzu
                      odpowiedniego przycisku (rysunek 11.16).




                      402
Zarządzanie zawartością strony — przykład

Tabela 11.1. Dane dotyczące pliku umieszczanego       Począwszy od wersji 4.1 języka PHP, dostęp
na serwerze mogą zostać uzyskane przy u yciu          do pliku umieszczonego na serwerze mo e być
powy szych elementów tablicy                          uzyskany przy u yciu zmiennej superglobalnej
Zmienna tablicowa $_FILES                              A(+.'5. W przypadku wcześniejszych wersji
                                                      (jeśli uaktywniono parametr TGIKUVGTAINQDCNU)
Indeks     Znaczenie
                                                      nale ało skorzystać ze zmiennej tablicowej
PCOG       Oryginalna nazwa pliku (przechowywanego     *662A2156A(+.'5 lub po prostu ze zmiennej
           na komputerze u ytkownika).
                                                       WRNQCF, powiązanej z nazwą pola HKNG.
V[RG       Typ MIME pliku określony
           przez przeglądarkę.                        Zmiennej plikowej zostaną przypisane wartości
UKG       Wielkość pliku umieszczanego na serwerze   tablicy wymienione w tabeli 11.1.
           (wyra ona w bajtach).
VORAPCOG   Tymczasowa nazwa pliku po umieszczeniu     Po pobraniu pliku przez skrypt PHP funkcja
           na serwerze.                               OQXGAWRNQCFGFAHKNG
 mo e go przenieść
                                                      z katalogu tymczasowego w jego docelowe
                                                      poło enie.
                                                        OQXGAWRNQCFGFAHKNG
 PCYCARNKMWAV[OECUQYGIQ 
                                                        å PCYCARNKMWAFQEGNQYGIQ 

                                                      Po wywołaniu funkcji zakończonym powodzeniem
                                                      tymczasowa wersja pliku zostanie usunięta




                                                                                                         Zarządzanie plikami
                                                      z serwera. Aby jednak tak było, serwer WWW
                                                      musi dysponować prawem zapisu do katalogu,
                                                      w którym zostanie umieszczony plik.
                                                      Mając to na uwadze, na początku dokonam
                                                      modyfikacji pliku konfiguracyjnego języka
                                                      PHP o nazwie php.ini tak, aby mo liwe było
                                                      umieszczanie plików na serwerze, a następnie
                                                      zostanie stworzony sam skrypt realizujący
                                                      to zadanie.




                                                                                                   403
Rozdział 11.

                      Aby przygotować serwer,                              3. Zapisać plik i ponownie uruchomić
                      należy wykonać następujące kroki:                      serwer WWW (rysunek 11.18).
                                                                                CRCEJGEVN ITCEGHWN
                      1. W edytorze tekstu otworzyć plik php.ini.
                                                                             Powy sze polecenie słu y do ponownego
                      2. W File Uploads zmodyfikować poni sze
                                                                             uruchomienia serwera Apache działającego
                         parametry (rysunek 11.17):
                                                                             pod systemem operacyjnym UNIX.
                            HKNGAWRNQCFU  1P                                U ytkownicy systemu Mac OS X
                            WRNQCFAVORAFKT  VOR
                                                                             w celu ponownego uruchomienia serwera
                            WRNQCFAOCZAHKNGUKG  /
                                                                             mogą u yć panelu Sharing, natomiast
                         Pierwszy parametr pozwala na umieszczanie           w przypadku systemu Windows nale y
                         plików na serwerze lub blokuje taką mo liwość.      posłu yć się apletem Usługi znajdującym
                         Drugi parametr pozwala określić miejsce,            się w Panelu sterowania lub innym
                         w którym tymczasowo będą przechowywane              narzędziem współpracującym
                         pliki umieszczane na serwerze. W przypadku          z serwerem WWW.
                         większości systemów operacyjnych przed
                         parametrem tym mo na bez większych obaw           4. Utworzyć nowy katalog o nazwie uploads
                         umieścić znak komentarza (znak średnika).           znajdujący się poza strukturą katalogową
                         U ytkownicy systemów Mac OS X i UNIX                serwera WWW. Katalog ten będzie spełniał
                         zazwyczaj dla parametru ustawiają katalog           rolę docelowego miejsca, w którym będą
Zarządzanie plikami




                         /tmp, natomiast w przypadku systemu                 umieszczane pliki na serwerze. Ze względu
                         Windows powinni korzystać z katalogu                na zabezpieczenia katalog nie powinien
                         określonego ście ką C:PHPuploadtemp.              być częścią struktury katalogowej
                                                                             serwera WWW.
                         Ostatni z wymienionych parametrów słu y
                         do określenia maksymalnej wielkości plików
                         (wyra onej w megabajtach) umieszczanych
                         na serwerze.




                                                                      Rysunek 11.17. Sekcja File Uploads pliku
                                                                      php.ini odpowiedzialna za obsługę plików
                                                                      umieszczanych na serwerze




                         Rysunek 11.18. Aby zmiany dokonane w pliku konfiguracyjnym języka PHP
                         zostały uwzględnione, konieczne jest ponowne uruchomienie serwera WWW



                      404
Zarządzanie zawartością strony — przykład

                                              5. Ustawić dla katalogu uploads takie uprawnienia,
                                                aby serwer WWW mógł w nim umieszczać pliki.
                                                Pewna, ale mniej bezpieczna metoda polega na
                                                wykonaniu polecenia EJOQF  WRNQCFU
                                                (systemy UNIX i Mac OS X). W przypadku
                                                systemu Windows nale y kliknąć katalog
                                                prawym przyciskiem myszy, a następnie wybrać
                                                pozycję Udostępnianie. Spowoduje to
                                                wyświetlenie okna zawierającego kartę
                                                Udostępnianie (rysunek 11.19).
                                                W zale ności od stosowanego systemu
                                                operacyjnego mo e się okazać, e będzie
                                                mo liwe umieszczanie plików na serwerze bez
                                                konieczności wykonywania tego kroku. Aby się
                                                o tym przekonać, przed modyfikacją uprawnień
Rysunek 11.19. Karta Udostępnianie              nale y wykonać poni szy skrypt. Jeśli zostaną
w systemie Windows pozwala na określenie,       wyświetlone komunikaty podobne do pokazanego
kto będzie dysponował dostępem do katalogu      na rysunku 11.20, nale y dokonać zmiany
                                                w uprawnieniach.




                                                                                                     Zarządzanie plikami
                                              Wskazówki
                                                Wartość pola /#:A(+.'A5+' ogranicza
                                                w przeglądarce wielkość pliku. Plik konfiguracyjny
                                                języka PHP dysponuje własnymi ograniczeniami.
                                                Mo na równie przeprowadzić walidację wielkości
                                                pliku umieszczonego na serwerze przy u yciu
                                                skryptu PHP.
                                                Parametr RQUVAOCZAUKG zawarty w pliku php.ini
                                                słu y do określenia maksymalnej ilości danych
                                                (wyra onej w megabajtach), które mogą zostać
Rysunek 11.20. Jeśli uprawnienia nie            umieszczone na serwerze przy u yciu jednego
zostaną poprawnie zdefiniowane, pojawią się     skryptu. Domyślnie jest to 8 MB.
komunikaty błędów podobne do pokazanego
                                                W języku PHP w wersji 4.2 nowością jest indeks
                                                błędów zmiennej tablicowej A(+.'5. Jego
                                                zadaniem jest przechowywanie dowolnych
                                                informacji dotyczących błędów powiązanych
                                                z plikiem umieszczanym na serwerze.
   Ze względu na czas wymagany                  Jeśli mamy na uwadze kwestię zabezpieczeń,
   do umieszczenia du ego pliku                 przechowywanie plików umieszczanych
   na serwerze mo e być konieczna               na serwerze poza strukturą katalogów serwera
   modyfikacja wartości parametru               WWW jest bardziej wskazane. Dzięki temu
   OCZAGZGEWVKQPAVKOG zawartego                 uniemo liwi się u ytkownikom uzyskanie
   w pliku php.ini lub tymczasowe               bezpośredniego dostępu do plików i uniknie się
   przekazanie jej do skryptu przy              zagro enia związanego z umieszczaniem katalogu
   u yciu funkcji UGVAVKOGANKOKV
.             dysponującego mało restrykcyjnymi uprawnieniami
                                                w miejscu publicznie dostępnym.

                                                                                             405
Rozdział 11.

                      Aby utworzyć skrypt add_file.php,                             KH 
 GORV[
 A2156= FGUETKRVKQP ? ]
                                                                                         F  GUECRGAFCVC
                      należy wykonać następujące kroki:                                 å
 A2156= FGUETKRVKQP ?
                                                                                      _ GNUG ]
                      1. W edytorze tekstu utworzyć nowy skrypt PHP                      F  
                         (listing 11.7).                                              _
                             !RJR .KUVKPI   CFFAHKNGRJR                   Podobnie jak w przypadku omawianego
                              RCIGAVKVNG  7OKGUECPKG RNKMW
                                                                                 wcześniej skryptu add_url.php, dla pola
                             åPC UGTYGTG 
                             KPENWFG 
 KPENWFGUPCINQYGMJVON                  FGUETKRVKQP zostanie przeprowadzana
                                                                                 najprostsza walidacja. Ze względu na to,
                      2. Sprawdzić, czy wypełniono formularz                      e pozostałe pola formularza nie wymagają
                         i przeprowadzić walidację wartości pola                 sprawdzenia, zastosowano tylko jedną
                         FGUETKRVKQP.                                            instrukcję warunkową.
                             KH 
KUUGV
 A2156= UWDOKV ? ]                      W celu określenia, czy rozmiar pliku
                               TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR 
                               HWPEVKQP GUECRGAFCVC 
 FCVC ]
                                                                                 umieszczanego na serwerze zawiera się
                                 INQDCN FDE                                     w zało onym przedziale mo na równie
                                 KH 
KPKAIGV
 OCIKEASWQVGUAIRE  ]              sprawdzić jego wielkość.
                                    FCVC  UVTKRUNCUJGU
 FCVC
                                 _
                                 TGVWTP O[USNATGCNAGUECRGAUVTKPI
Zarządzanie plikami




                                 å
VTKO 
 FCVC FDE
                               _


                      Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze


                            !RJR .KUVKPI   CFFAHKNGRJR
                             5VTQPC RQYCNC W [VMQYPKMQO WOKG EKè RNKMK PC UGTYGTG
                             7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/.
                             RCIGAVKVNG  7OKGUECPKG RNKMW PC UGTYGTG 
                            KPENWFG 
 KPENWFGUPCINQYGMJVON 
                            KH 
KUUGV
 A2156= UWDOKV ? ]  1DU WIC HQTOWNCTC
                              TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR   2Q æEGPKG  DCæ FCP[EJ
                               (WPMELC WUWYCLæEC PCM  K QDEKPCLæEC FCPG YRTQYCFQPG Y HQTOWNCTW
                              HWPEVKQP GUECRGAFCVC 
 FCVC ]
                               INQDCN FDE
                               KH 
KPKAIGV
 OCIKEASWQVGUAIRE  ]
                                  FCVC  UVTKRUNCUJGU
 FCVC
                               _
                               TGVWTP O[USNATGCNAGUECRGAUVTKPI 
VTKO 
 FCVC FDE
                             _  -QPKGE UGMELK HWPMELK GUECRGAFCVC





                      406
Zarządzanie zawartością strony — przykład

3. Wstawić do bazy danych rekord powiązany            4. Utworzyć nowy plik.
   z plikiem umieszczanym na serwerze.                     KH 
 TGUWNV ]
        SWGT[  +05'46 +061 WRNQCFU 
HKNGAPCOG               GZVGPUKQP  GZRNQFG 
  
       åHKNGAUKG HKNGAV[RG FGUETKRVKQP                   å A(+.'5= WRNQCF ?= PCOG ?
       åWRNQCFAFCVG 8#.7'5                                   WKF  O[USNAKPUGTVAKF

       å
 ] A(+.'5= WRNQCF ?= PCOG ?_                        HKNGPCOG  WKF    GZVGPUKQP=?
       å] A(+.'5= WRNQCF ?= UKG ?_
       å ] A(+.'5= WRNQCF ?= V[RG ?_ 
                                                         Plik zostanie zapisany na serwerze pod nową
       å F  019
                                     nazwą. Takie rozwiązanie jest o wiele bardziej
        TGUWNV  O[USNASWGT[ 
 SWGT[                  bezpieczne ni w przypadku posługiwania się
                                                         oryginalną nazwą nadaną przez u ytkownika.
   Informacja o ka dym pliku umieszczonym
                                                         Nazwa pliku będzie zło ona z wartości
   na serwerze zostanie zapisana w bazie
                                                         bazodanowego pola WRNQCFAKF (pobranej
   danych. W tym celu zostanie zastosowana
                                                         przy u yciu funkcji O[USNAKPUGTVAKF
),
   wielowymiarowa zmienna tablicowa
                                                         za którą zostanie wstawiona kropka
     A(+.'5, która będzie przechowywała
                                                         i rozszerzenie oryginalnego pliku (uzyskanego
   oryginalną nazwę pliku, jego wielkość
                                                         poprzez rozkład jego nazwy). Przykładowo,
   i typ MIME. Wszystkie te dane zostaną
                                                         dokument o nazwie chapter.doc mo e przyjąć
   pobrane z przeglądarki internetowej.
                                                         nazwę 231.doc, natomiast plik imagename.jpg
   Dodatkowo zostanie zapisany opis
                                                         zostanie zapisany jako 49.jpg.
   oraz aktualna data i godzina.




                                                                                                          Zarządzanie plikami
Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy


        5RTCYFGPKG QDGEPQ EK QRKUW 
PKG LGUV Y[OCICPG
       KH 
 GORV[
 A2156= FGUETKRVKQP ? ]
          F  GUECRGAFCVC
 A2156= FGUETKRVKQP ?
       _ GNUG ]
          F  
       _
  
        QFCPKG TGMQTFW FQ DC[ FCP[EJ
        SWGT[  +05'46 +061 WRNQCFU 
HKNGAPCOG HKNGAUKG HKNGAV[RG
         FGUETKRVKQP WRNQCFAFCVG 8#.7'5 
 ] A(+.'5= WRNQCF ?= PCOG ?_ 
         ] A(+.'5= WRNQCF ?= UKG ?_ ] A(+.'5= WRNQCF ?= V[RG ?_  F  019
 
        TGUWNV  O[USNASWGT[ 
 SWGT[
  
       KH 
 TGUWNV ]
  
          7VYQTGPKG PCY[ RNKMW
          GZVGPUKQP  GZRNQFG 
   A(+.'5= WRNQCF ?= PCOG ?
          WKF  O[USNAKPUGTVAKF
  +FGPV[HKMCVQT RNKMW WOKGUECPGIQ PC
           UGTYGTG
          HKNGPCOG  WKF    GZVGPUKQP=?
  
          2TGPQUGPKG RNKMW
         KH 
OQXGAWRNQCFGFAHKNG
 A(+.'5= WRNQCF ?= VORAPCOG ?
            WRNQCFU HKNGPCOG  ]
           GEJQ R 2NKM QUVC WOKGUEQP[ PC UGTYGTG R 




                                                                                                  407
Rozdział 11.

                      5. Skopiować plik w docelowe miejsce                       W celu przeniesienia pliku tymczasowego
                         na serwerze.                                            w docelowe miejsce (katalog uploads,
                                KH 
OQXGAWRNQCFGFAHKNG
 A(+.'5
                                                                                 gdzie plik uzyska nową nazwę) nale y
                                å= WRNQCF ?= VORAPCOG ? WRNQCFU             u yć funkcji OQXGAWRNQCFGFAHKNG
.
                                å HKNGPCOG  ]                                  Jeśli przeniesienie pliku nie będzie
                                  GEJQ R 2NKM QUVC WOKGUEQP[                 mo liwe (rysunek 11.20), z bazy danych
                                  åPC UGTYGTG R                              zostanie usunięty rekord i pojawi się
                                _ GNUG ]
                                                                                 komunikat błędu.
                                  GEJQ R HQPV EQNQT TGF
                                  å2TGPKGUKGPKG RNKMW PKG D[ Q               6. Dokończyć tworzenie instrukcji
                                  åOQ NKYGHQPV R                           warunkowej i skryptu PHP.
                                   SWGT[  '.'6' (41/ WRNQCFU 9*'4'
                                  åWRNQCFAKF  WKF                                    _ GNUG ]
                                   TGUWNV  O[USNASWGT[ 
 SWGT[                       GEJQ R HQPV EQNQT TGF 0C UMWVGM
                                _                                                        åD úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG
                                                                                         åPKG OQI Q QUVCè RTGVYQTQPG
                                                                                         å2TGRTCUCO[ C CKUVPKC æ
                                                                                         åPKGFQIQFPQ èHQPV R 
                                                                                       _
                                                                                       O[USNAENQUG

                                                                                   _
                                                                                   !
Zarządzanie plikami




                      Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy


                               _ GNUG ]
                                 GEJQ R HQPV EQNQT TGF 2TGPKGUKGPKG RNKMW PKG D[ Q OQ NKYGHQPV R 
                        
                                   7UWPKúEKG TGMQTFW  DC[ FCP[EJ
                                   SWGT[  '.'6' (41/ WRNQCFU 9*'4' WRNQCFAKF  WKF 
                                   TGUWNV  O[USNASWGT[ 
 SWGT[
                              _
                        
                            _ GNUG ]  ,G NK CR[VCPKG PC DCKG FCP[EJ PKG QUVCPKG Y[MQPCPG RTCYKF QYQ
                              GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG
                                PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R 
                            _
                        
                           O[USNAENQUG
  COMPKúEKG RQ æEGPKC  DCæ FCP[EJ
                        
                           _  -QPKGE KPUVTWMELK YCTWPMQYGL QDU WIWLæEGL FCPG YRTQYCFCPG Y HQTOWNCTW
                           !
                        
                           HQTO GPEV[RG OWNVKRCTVHQTOFCVC CEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? !
                             OGVJQF RQUV
                        
                         KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+' XCNWG 




                      408
Zarządzanie zawartością strony — przykład

7. Zdefiniować formularz zawarty                         Co prawda formularz jest bardzo prosty,
   na stronie HTML.                                      ale zawiera trzy niezbędne elementy
       HQTO GPEV[RG OWNVKRCTVHQTOFCVC
                                                         związane z umieszczaniem plików
       åCEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ?          na serwerze — atrybut GPEV[RG,
       å! OGVJQF RQUV                                   ukryte pole /#:A(+.'A5+' i pole HKNG.

       KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+'        8. Zakończyć tworzenie skryptu PHP.
       åXCNWG                                       !RJR
                                                           KPENWFG 
 KPENWFGUUVQRMCJVON 
       HKGNFUGV NGIGPF 9 EGNW WOKGUEGPKC               !
       åRNKMW PC UGTYGTG PCNG [ Y[RG PKè
       åHQTOWNCTNGIGPF

       R D 2NKMD KPRWV V[RG HKNG
       åPCOG WRNQCF  R

       R D 1RKUD VGZVCTGC
       åPCOG FGUETKRVKQP EQNU 
       åTQYU  VGZVCTGC R

       HKGNFUGV




                                                                                                         Zarządzanie plikami
       FKX CNKIP EGPVGT KPRWV V[RG UWDOKV
       åPCOG UWDOKV XCNWG 9[ NKL  FKX

       HQTO


Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy


     HKGNFUGV NGIGPF 9 EGNW WOKGUEGPKC RNKMW PC UGTYGTG PCNG [ Y[RG PKè HQTOWNCTNGIGPF
  
     R D 2NKMD KPRWV V[RG HKNG PCOG WRNQCF  R
  
     R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP EQNU  TQYU  VGZVCTGC R
  
     HKGNFUGV
  
     FKX CNKIP EGPVGT KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL  FKX
  
     HQTO   -QPKGE HQTOWNCTC
  
     !RJR
     KPENWFG 
 KPENWFGUUVQRMCJVON   Q æEGPKG UVQRMK *6/.
     !




                                                                                                   409
Rozdział 11.

                      9. Zapisać plik pod nazwą add_file.php,
                         umieścić go na serwerze WWW
                         i przetestować przy u yciu przeglądarki
                         internetowej (rysunki 11.21 i 11.22).

                      Wskazówki
                         Obecność pliku umieszczonego na serwerze
                         mo e równie zostać sprawdzona przy u yciu
                         funkcji KUAWRNQCFGFAHKNG
.
                         W celu odwołania się do katalogów
                         u ytkownicy systemu Windows muszą
                         skorzystać ze znaku  lub , a zatem
                         zamiast ście ki C: nale y u yć C:/               Rysunek 11.21. Formularz słu ący
                         lub C:. Wynika to stąd, e w języku              do umieszczania plików na serwerze
                         PHP znak  jest wykorzystywany
                         przez funkcję GUECRGAFCVC
.
                         Jeśli jest wykorzystywana starsza wersja
                         języka PHP, mo e nie być mo liwe
Zarządzanie plikami




                         zastosowanie zmiennej tablicowej
                          A(+.'5. Na skutek tego zamiast funkcji
                         OQXGAWRNQCFGFAHKNG
 konieczne będzie
                         u ycie funkcji EQR[
.
                         Jeśli oba pliki mają taką samą nazwę,
                         funkcja OQXGAWRNQCFGFAHKNG
 nadpisze
                         istniejący plik bez wcześniejszego ostrze enia.
                         Po przygotowaniu ostatecznej wersji
                         produkcyjnej skryptu w celu wyeliminowania        Rysunek 11.22. Wygląd strony po udanym
                                                                           umieszczeniu pliku na serwerze
                         w przyszłości wszelkich komunikatów
                         błędów nale y przed wywołaniami funkcji
                         OQXGAWRNQCFGFAHKNG
 wstawić znak .




                      410
Zarządzanie zawartością strony — przykład

                                          Przeglądanie i pobieranie plików
     Moduł administracyjny
                                          Ostatnie dwa skrypty omawianej aplikacji pozwolą
           aplikacji
                                          u ytkownikom przeglądnąć pliki umieszczone
Chocia w przypadku omawianej              na serwerze, a następnie je pobrać (w danej
aplikacji nie stworzono jej części        chwili tylko jeden). Skrypt słu ący do przeglądania
administracyjnej, to jednak nie jest
                                          plików jest dość prosty, natomiast skrypt
to zadanie trudne do zrealizowania.
Na początku nale y do tabeli WRNQCFU      umo liwiający ich pobieranie wymaga częstego
dodać pole CRRTQXGF. Następnie            stosowania funkcji języka PHP o nazwie JGCFGT
.
nale y tak zmodyfikować zarówno           W celu stworzenia skryptu view_files.php
plik add_url.php, jak i add_file.php,     nale y wykonać następujące kroki:
aby domyślnie wartość pola
CRRTQXGF wynosiła N. Z myślą o części     1. W edytorze tekstu utworzyć nowy skrypt PHP
administracyjnej aplikacji nale y            (listing 11.8).
stworzyć stronę, na której zostaną
wyświetlone wszystkie elementy, które          !RJR .KUVKPI   XKGYAHKNGURJR
jeszcze nie zatwierdzono. W celu                RCIGAVKVNG  2TGINæFCPKG RNKMÎY 
                                               KPENWFGAQPEG 
 KPENWFGUPCINQYGMJVON 
zaakceptowania dowolnego elementu
nale y dla odpowiedniego rekordu
                                               TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR 
tabeli wykonać polecenie 72#6'
i zmienić wartość pola CRRTQXGF na Y.            HKTUV  647'




                                                                                                Zarządzanie plikami
Jedną z zalet systemu słu ącego
do umieszczania plików na serwerze           Zmienna HKTUV spełnia taką samą rolę jak
jest łatwość kojarzenia plików z danymi      w skrypcie view_urls.php. Zmienna zostanie
na ich temat przechowywanymi w bazie         wykorzystana przy tworzeniu nagłówka
danych (gdy do tworzenia nazw plików         i w celu określenia, czy będzie mo liwe
jest wykorzystywana wartość pola             przeglądanie niektórych plików.
WRNQCFAKF). Jeśli zostanie utworzony
skrypt administracyjny słu ący do         2. Pobrać z bazy danych informacje
usuwania plików z serwera (z katalogu        o wszystkich plikach.
uploads), mo na równie usunąć z tabeli          SWGT[  5'.'%6 WRNQCFAKF HKNGAPCOG
powiązany z nim rekord.                        å4170
HKNGAUKG #5 HU FGUETKRVKQP
                                               å#6'A(14/#6
WRNQCFAFCVG / G ;  #5 F
                                               å(41/ WRNQCFU 14'4 $; WRNQCFAFCVG '5% 
                                                TGUWNV  O[USNASWGT[ 
 SWGT[

                                             Powy sze zapytanie zwróci dla ka dego
                                             pliku umieszczonego na serwerze wartości
                                             przechowywane w polach WRNQCFAKF,
                                             HKNGAPCOG, FGUETKRVKQP, a ponadto
                                             sformatowaną datę. Na początku zostaną
                                             wyświetlone informacje dotyczące
                                             najnowszych plików. Jednocześnie
                                             zapytanie pozwoli na uzyskanie
                                             wielkości plików (wyra onej w kilobajtach),
                                             co będzie mo liwe poprzez podzielenie
                                             przechowywanej wartości przez 1024,
                                             a następnie zaokrąglenie otrzymanej liczby.




                                                                                        411
Rozdział 11.

                      Listing 11.8. Skrypt view_files.php wyświetla pliki umieszczone na serwerze wraz z ich opisem,
                      wielkością i datą wykonania operacji


                            !RJR .KUVKPI   XKGYAHKNGURJR
                             5VTQPC RQYCNC W [VMQYPKMQO RTGINæFCè RNKMK WOKGUEQPG PC UGTYGTG
                             7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/.
                             RCIGAVKVNG  2TGINæFCPKG RNKMÎY 
                            KPENWFGAQPEG 
 KPENWFGUPCINQYGMJVON 
                        
                            TGSWKTGAQPEG 
 O[USNAEQPPGEVRJR   2Q æEGPKG  DCæ FCP[EJ
                        
                              HKTUV  647'  +PKELCNKCELC OKGPPGL
                            9[U CPKG CR[VCPKC FQ DC[ FCP[EJ
                             SWGT[  5'.'%6 WRNQCFAKF HKNGAPCOG 4170
HKNGAUKG #5 HU
                             FGUETKRVKQP #6'A(14/#6
WRNQCFAFCVG / G ;  #5 F (41/ WRNQCFU 14'4 $; WRNQCFAFCVG '5% 
                            TGUWNV  O[USNASWGT[ 
 SWGT[
                            9[ YKGVNGPKG YU[UVMKEJ CFTGUÎY 74.
                           YJKNG 
 TQY  O[USNAHGVEJACTTC[ 
 TGUWNV /;53.A#551% ]
                               ,G NK LGUV VQ RKGTYU[ TGMQTF QUVCPKG WVYQTQPC VCDGNC JGCFGT
                              KH 
 HKTUV ]
                                GEJQ VCDNG DQTFGT  YKFVJ  EGNNURCEKPI  EGNNRCFFKPI  CNKIP EGPVGT
                              VT
Zarządzanie plikami




                                VF CNKIP NGHV YKFVJ  HQPV UKG 
 0CYC RNKMWHQPV VF
                                VF CNKIP NGHV YKFVJ  HQPV UKG 
 1RKUHQPV VF
                                VF CNKIP EGPVGT YKFVJ  HQPV UKG 
 4QOKCT RNKMWHQPV VF
                                VF CNKIP NGHV YKFVJ  HQPV UKG 
 CVC WOKGUEGPKC RNKMW PC
                                  UGTYGTGHQPV VF
                              VT 
                              _  -QPKGE RúVNK YCTWPMQYGL G OKGPPæ HKTUV
                               9[ YKGVNC YU[UVMKG TGMQTF[
                              GEJQ    VT
                                VF CNKIP NGHV C JTGH  FQYPNQCFAHKNGRJR!WKF] TQY= WRNQCFAKF ?_
                                   ] TQY = HKNGAPCOG ?_C VF
                                VF CNKIP NGHV      UVTKRUNCUJGU
 TQY= FGUETKRVKQP ?  VF
                                VF CNKIP EGPVGT ] TQY= HU ?_MDVF
                                VF CNKIP NGHV ] TQY= F ?_VF
                              VT P 
                               HKTUV  (#.5'  YTÎEQPQ LGFGP TGMQTF
                           _  -QPKGE RúVNK YJKNG
                            ,G NK PKG Y[ YKGVNQPQ CFPGIQ TGMQTFW
                           KH 
 HKTUV ]
                              GEJQ FKX CNKIP EGPVGT #MVWCNPKG PKG OC CFPGIQ RNKMWFKX 
                           _ GNUG ]
                              GEJQ VCDNG   COMPKúEKG VCDGNK
                           _
                           O[USNAENQUG
  COMPKúEKG RQ æEGPKC  DCæ FCP[EJ
                           KPENWFGAQPEG 
 KPENWFGUUVQRMCJVON   Q æEGPKG UVQRMK *6/.
                           !




                      412

PHP i MySQL. Dynamiczne strony WWW. Szybki start

  • 1.
    IDZ DO PRZYK£ADOWY ROZDZIA£ PHP i MySQL. SPIS TRE CI Dynamiczne strony KATALOG KSI¥¯EK WWW. Szybki start Autor: Larry Ullman KATALOG ONLINE T³umaczenie: Micha³ Dadan (rozdz. 1 – 7), Piotr Pilch (rozdz. 8 – 13, dod. A – D) ZAMÓW DRUKOWANY KATALOG ISBN: 83-7361-157-6 Tytu³ orygina³u: PHP and MySQL for Dynamic Web Sites VQPG Format: B5, stron: 580 TWÓJ KOSZYK Przyk³ady na ftp: 352 kB DODAJ DO KOSZYKA Coraz wiêcej serwisów internetowych sk³ada siê nie tylko z atrakcyjnego interfejsu u¿ytkownika, ale tak¿e z rozbudowanych aplikacji dzia³aj¹cych na serwerze. S¹ one najczê ciej oparte o bazy danych, które przechowuj¹ dane i zapewniaj¹ szybki do nich CENNIK I INFORMACJE dostêp. Je li chcesz w krótkim czasie nauczyæ siê tworzyæ takie aplikacje, znalaz³e w³a ciw¹ ksi¹¿kê. ZAMÓW INFORMACJE „PHP i MySQL. Dynamiczne strony WWW” nauczy Ciê tworzenia dynamicznych O NOWO CIACH serwisów internetowych z wykorzystaniem PHP i MySQL-a. Ksi¹¿ka przeka¿e Ci wiedzê niezbêdn¹ dla projektantów rozwi¹zañ internetowych. Wszystkie zagadnienia opisane ZAMÓW CENNIK s¹ „krok po kroku”, ka¿demu z nich towarzyszy te¿ odpowiedni rysunek. Przyk³ady odzwierciedlaj¹ problemy, z którymi projektanci stron internetowych spotykaj¹ siê na co dzieñ. CZYTELNIA Ksi¹¿ka opisuje: FRAGMENTY KSI¥¯EK ONLINE • Podstawy programowania w PHP • Tworzenie dynamicznych stron internetowych z u¿yciem PHP • Zasady projektowanie baz danych • Jêzyk SQL • Korzystanie z systemu zarz¹dzania bazami danych MySQL • £¹czenie PHP z systemem MySQL • U¿ycie sesji • Zabezpieczanie stron internetowych przed dostêpem nieuprawnionych osób • Przyk³adowe aplikacje: rejestracja u¿ytkowników i sklep internetowy Tre æ ksi¹¿ki uzupe³niaj¹ dodatki opisuj¹ce sposób instalacji omawianych w niej narzêdzi oraz dodatkowe, przydatne aplikacje. Wydawnictwo Helion Je li chcesz w szybko nauczyæ siê programowania dynamicznych serwisów ul. Chopina 6 internetowych, ta ksi¹¿ka bêdzie Twoim intensywnym kursem. Ju¿ po przeczytaniu 44-100 Gliwice kilku rozdzia³ów bêdziesz w stanie pisaæ pierwsze programy w PHP korzystaj¹ce z bazy tel. (32)230-98-63 MySQL, a po przeczytaniu ca³ej ksi¹¿ki poradzisz sobie równie¿ z tworzeniem bardziej e-mail: helion@helion.pl rozbudowanych aplikacji.
  • 2.
    Spis treści Spis treści Wprowadzenie 9 Czym są dynamiczne strony WWW?........................................................10 Czym jest PHP?.........................................................................................11 Co to jest MySQL?....................................................................................14 Co będzie Ci potrzebne .............................................................................16 O tej ksią ce ..............................................................................................16 Rozdział 1. Wprowadzenie do PHP 19 Podstawy składni.......................................................................................20 Przesyłanie danych do przeglądarki internetowej .....................................23 Spis treści PHP, HTML i „białe odstępy” ..................................................................26 Wstawianie komentarzy ............................................................................31 Co to są zmienne? .....................................................................................34 Łańcuchy ...................................................................................................37 Liczby........................................................................................................41 Stałe...........................................................................................................45 Apostrof kontra cudzysłów .......................................................................48 Rozdział 2. Programowanie w PHP 51 Tworzenie formularza w języku HTML ..................................................52 Obsługa formularza HTML.......................................................................56 Zarządzanie opcją Magic Quotes ................................................................59 Wyra enia warunkowe i operatory............................................................61 Weryfikacja danych pochodzących z formularza......................................65 Ręczne przesyłanie wartości do skryptu ...................................................69 Co to są tablice? ........................................................................................74 Pętle for i while .........................................................................................92 5
  • 3.
    Spis treści Rozdział 3. Tworzenie dynamicznych stron WWW 95 Wykorzystywanie plików zewnętrznych...................................................96 Tworzenie i wywoływanie własnych funkcji ..........................................105 Zasięg zmiennej.......................................................................................115 Wyświetlanie i obsługa formularza przez jeden skrypt.............................118 Wysyłanie poczty elektronicznej...............................................................122 Nagłówki HTTP ......................................................................................125 Tworzenie formularzy z pamięcią...........................................................130 Funkcje daty i czasu ................................................................................133 Rozdział 4. Wprowadzenie do SQL i MySQL 137 Projektowanie tabel .................................................................................138 Korzystanie z monitora mysqla...............................................................142 Tworzenie baz danych i tabel..................................................................146 Wprowadzanie rekordów ........................................................................149 Wybieranie danych..................................................................................152 Wyra enia warunkowe ............................................................................154 Spis treści Stosowanie LIKE i NOT LIKE ..............................................................158 Sortowanie wyników zapytania .................................................................160 Ograniczanie wyników zapytania ...........................................................163 Uaktualnianie danych ..............................................................................165 Usuwanie danych ....................................................................................167 Rozdział 5. Zaawansowany SQL i MySQL 169 Projekt bazy danych ................................................................................170 Złączenia .................................................................................................185 Funkcje ....................................................................................................189 Indeksy ....................................................................................................201 Rozdział 6. PHP i MySQL 205 Tworzenie szablonu.................................................................................206 Łączenie się z MySQL-em i wybieranie bazy.........................................211 Obsługa błędów.......................................................................................215 Wykonywanie prostych zapytań ................................................................218 Odczytywanie wyników zapytania..........................................................228 Bezpieczeństwo.......................................................................................232 Korzystanie z funkcji mysql_num_rows() ..............................................238 Uaktualnianie rekordów w PHP ................................................................244 6
  • 4.
    Spis treści Rozdział 7. Sesje i „ciasteczka” 251 Posługiwanie się ciasteczkami ................................................................252 Sesje ........................................................................................................271 Sesje a „ciasteczka”.................................................................................287 Rozdział 8. Zabezpieczenia 295 Autoryzacja HTTP ..................................................................................296 Walidacja formularza przy u yciu skryptu JavaScript .............................302 Wyra enia regularne ...............................................................................309 Zabezpieczenia bazy danych ...................................................................321 Rozdział 9. Tworzenie aplikacji internetowych 325 Metody debugowania kodu źródłowego skryptu PHP ............................326 Metody debugowania zapytań SQL i serwera MySQL...........................329 Obsługa błędów w języku PHP.................................................................335 Obsługa błędów serwera MySQL..............................................................339 Zwiększanie wydajności aplikacji internetowych ...................................342 Rozdział 10. Zagadnienia dodatkowe 347 Spis treści Buforowanie wyjścia...............................................................................348 Buforowanie stron HTML.......................................................................355 Określanie typu przeglądarki internetowej.............................................357 Skrypty PHP i JavaScript ........................................................................361 Zastosowanie pakietu PEAR ...................................................................369 Rozdział 11. Zarządzanie zawartością strony — przykład 377 Tworzenie szablonu.................................................................................378 Tworzenie zwykłych stron internetowych ..............................................383 Zarządzanie adresami URL .....................................................................385 Zarządzanie plikami ................................................................................402 Rozdział 12. Rejestrowanie użytkowników — przykład 417 Tworzenie szablonów..............................................................................418 Tworzenie skryptów konfiguracyjnych...................................................422 Tworzenie strony głównej .......................................................................428 Rejestracja ...............................................................................................430 Logowanie i wylogowywanie się ..............................................................440 Zarządzanie hasłami ................................................................................446 Część administracyjna aplikacji ..............................................................457 7
  • 5.
    Spis treści Rozdział 13. Sklep internetowy — przykład 473 Tworzenie bazy danych...........................................................................474 Część administracyjna aplikacji ..............................................................478 Tworzenie szablonu części publicznej aplikacji......................................491 Katalog produktów ..................................................................................495 Koszyk zakupów .....................................................................................504 Dodatek A Instalacja 515 Instalacja pod systemem Windows............................................................516 Definiowanie uprawnień serwera MySQL..............................................522 Sprawdzanie poprawności instalacji ......................................................528 Dodatek B Aplikacje dodatkowe 531 Narzędzie phpMyAdmin .........................................................................532 Systemy szablonów .................................................................................533 Oprogramowanie obsługujące fora dyskusyjne.......................................534 Zarządzanie zawartością..........................................................................535 Handel elektroniczny...............................................................................536 Spis treści Wyszukiwarki..........................................................................................537 Biblioteki kodów źródłowych .................................................................538 Dodatek C Odsyłacz 539 Język PHP ...............................................................................................540 Serwer MySQL .......................................................................................547 Dodatek D Zasoby internetowe 553 Język PHP ...............................................................................................554 Serwer MySQL .......................................................................................557 Język SQL ...............................................................................................559 Zabezpieczenia ........................................................................................560 Inne strony internetowe ...........................................................................561 Skorowidz 565 8
  • 6.
    Zarządzanie zawartością strony— przykład Zarządzanie zawartością strony — przykład Rozdział 11. Zarządzanie zawartością strony — przykład Pierwszy przykład aplikacji zamieszczony w niniejszej ksią ce będzie dotyczył zarządzania zawartością strony. Aplikacja będzie zarządzała zarówno adresami URL, jak i plikami, które u ytkownicy będą mogli dodawać, wyświetlać i przetwarzać. Co prawda w tym przypadku nie zostanie uwzględniona administracyjna część aplikacji, ale zostaną dołączone informacje pozwalające na jej wykonanie. Chocia w tym rozdziale skupimy się na konkretnym przykładzie, to jednak wspomnimy równie o kilku Zarządzanie zawartością strony nowych funkcjach i metodach. Do funkcji tych nale y zaliczyć O[USNAKPUGTVAKF i NKUV . Wspomnimy tak e, w jaki sposób zrealizować operację umieszczania plików na serwerze. 377
  • 7.
    Rozdział 11. Tworzenie szablonu W pierwszym etapie projektowania aplikacji zostanie utworzony systemowy szablon, którego zadaniem będzie wspomaganie procesu przygotowywania strony HTML. Strona w ostatecznej postaci (rysunek 11.1) będzie korzystała z tabel i kilku arkuszy stylów CSS (ang. Cascading Style Sheets). Aby utworzyć plik naglowek.html, Rysunek 11.1. Domyślny wygląd strony aplikacji omawianej w tym rozdziale należy wykonać następujące kroki: 1. W edytorze tekstu utworzyć nową stronę HTML (listing 11.1). 1%6;2' JVON 27$.+% 9%6 å:*6/. 6TCPUKVKQPCN'0 JVVRYYYYQTI64 å4'%ZJVON6 åZJVONVTCPUKVKQPCNFVF Tworzenie szablonu JVON ZONPU JVVRYYYYQTIZJVON åZONNCPI GP NCPI GP JGCF OGVC JVVRGSWKX EQPVGPVV[RG EQPVGPV å VGZVJVON EJCTUGVKUQ VKVNG !RJR GEJQ RCIGAVKVNG ! VKVNG 1. Napisać kod arkusza stylów CSS. UV[NG V[RG VGZVEUU OGFKC UETGGP DQF[ ] DCEMITQWPFEQNQT HHHHHH _ EQPVGPV ] DCEMITQWPFEQNQT HHH RCFFKPIVQR RZ RCFFKPITKIJV RZ åRCFFKPIDQVVQO RZ RCFFKPINGHV RZ åOCTIKPVQR RZ OCTIKPTKIJV RZ åOCTIKPDQVVQO RZ OCTIKPNGHV RZ _ 378
  • 8.
    Zarządzanie zawartością strony— przykład Listing 11.1. Plik naglowek.html rozpoczyna się od kodu formatującego stronę HTML i zawiera wymagany kod arkusza stylów CSS 1%6;2' JVON 27$.+% 9%6 :*6/. 6TCPUKVKQPCN'0 JVVRYYYYQTI644'%ZJVON6ZJVONVTCPUKVKQPCNFVF JVON ZONPU JVVRYYYYQTIZJVON ZONNCPI GP NCPI GP JGCF OGVC JVVRGSWKX EQPVGPVV[RG EQPVGPV VGZVJVON EJCTUGVKUQ VKVNG !RJR GEJQ RCIGAVKVNG ! VKVNG UV[NG V[RG VGZVEUU OGFKC UETGGP DQF[ ] DCEMITQWPFEQNQT HHHHHH _ EQPVGPV ] DCEMITQWPFEQNQT HHH RCFFKPIVQR RZ RCFFKPITKIJV RZ RCFFKPIDQVVQO RZ RCFFKPINGHV RZ OCTIKPVQR RZ OCTIKPTKIJV RZ OCTIKPDQVVQO RZ OCTIKPNGHV RZ _ CPCXNKPMNKPM ] EQNQT VGZVFGEQTCVKQP PQPG _ CPCXNKPMXKUKVGF ] EQNQT VGZVFGEQTCVKQP PQPG _ CPCXNKPMJQXGT ] EQNQT EEEEEE VGZVFGEQTCVKQP PQPG _ VF ] HQPVHCOKN[ 8GTFCPC #TKCN *GNXGVKEC UCPUUGTKH HQPVUKG RZ XGTVKECNCNKIP VQR Tworzenie szablonu _ VKVNG ] HQPVUKG RZ HQPVYGKIJV PQTOCN EQNQT HHHHHH OCTIKPVQR RZ OCTIKPDQVVQO RZ OCTIKPNGHV RZ RCFFKPIVQR RZ RCFFKPIDQVVQO RZ RCFFKPINGHV RZ _ UV[NG JGCF DQF[ VCDNG YKFVJ DQTFGT EGNNURCEKPI EGNNRCFFKPI CNKIP EGPVGT VT VF EQNURCP DIEQNQT R ENCUU VKVNG CTæFCPKG CYCTVQ EKæ UVTQPR VF VT VT VF XCNKIP VQR PQYTCR PQYTCR D C JTGH KPFGZRJR ENCUU PCXNKPM 5VTQPC I ÎYPCC DT C JTGH XKGYAWTNURJR ENCUU PCXNKPM 2TGINæFCL CFTGU[ 74.C DT C JTGH CFFAWTNRJR ENCUU PCXNKPM QFCL CFTGU 74.C DT C JTGH XKGYAHKNGURJR ENCUU PCXNKPM 2TGINæFCL RNKMKC DT C JTGH CFFAHKNGRJR ENCUU PCXNKPM QFCL RNKMC D VF VF XCNKIP VQR ENCUU EQPVGPV .KUVKPI PCINQYGMJVON 379
  • 9.
    Rozdział 11. CPCXNKPMNKPM ] EQNQT åVGZVFGEQTCVKQP PQPG _ CPCXNKPMXKUKVGF ] EQNQT åVGZVFGEQTCVKQP PQPG _ CPCXNKPMJQXGT ] EQNQT EEEEEE åVGZVFGEQTCVKQP PQPG _ VF ] HQPVHCOKN[ 8GTFCPC #TKCN *GNXGVKEC åUCPUUGTKH HQPVUKG RZ XGTVKECNCNKIP VQR _ VKVNG ] HQPVUKG RZ HQPVYGKIJV Rysunek 11.2. Wygląd strony, na której w celu åPQTOCN EQNQT HHHHHH wyró nienia wierszy i kolumn tabeli zastosowano OCTIKPVQR RZ OCTIKPDQVVQO RZ obwódki åOCTIKPNGHV RZ RCFFKPIVQR RZ RCFFKPIDQVVQO RZ åRCFFKPINGHV RZ _ UV[NG W przypadku omawianej aplikacji zostanie wykorzystany arkusz stylów CSS, który Tworzenie szablonu posłu y do sformatowania tekstu. Ze względu na niewielką objętość kodu arkusza stylów CSS, zamiast w oddzielnym pliku zostanie on umieszczony bezpośrednio w sekcji *'# strony HTML. 3. Zakończyć pisanie kodu nagłówka strony HTML i utworzyć pierwszy wiersz tytułu. JGCF DQF[ VCDNG YKFVJ DQTFGT åEGNNURCEKPI EGNNRCFFKPI åCNKIP EGPVGT VT VF EQNURCP DIEQNQT åR ENCUU VKVNG CTæFCPKG åCYCTVQ EKæ UVTQPR VF VT VT Podstawowa strona HTML będzie zawierała tabelę zło oną z trzech wierszy — tytułu, wiersza przechowującego odnośniki i zawartość strony oraz wiersza, w którym będą umieszczone informacje o prawach autorskich (rysunek 11.2). 380
  • 10.
    Zarządzanie zawartością strony— przykład 4. Utworzyć sekcję powiązaną z odnośnikami i rozpocząć definiowanie komórek przechowujących zawartość strony. VF XCNKIP VQR PQYTCR PQYTCR D C JTGH KPFGZRJR ENCUU å PCXNKPM 5VTQPC I ÎYPCC DT C JTGH XKGYAWTNURJR åENCUU PCXNKPM 2TGINæFCL CFTGU[ å74.C DT C JTGH CFFAWTNRJR ENCUU å PCXNKPM åQFCL CFTGU 74.C DT C JTGH XKGYAHKNGURJR ENCUU å PCXNKPM 2TGINæFCL RNKMKC DT C JTGH CFFAHKNGRJR åENCUU PCXNKPM QFCL RNKMC D VF VF XCNKIP VQR ENCUU EQPVGPV .KUVKPI PCINQYGMJVON 5. Zapisać plik pod nazwą naglowek.html Rysunek 11.3. Struktura aplikacji internetowej, i umieścić go na serwerze WWW której katalogiem głównym jest katalog html (w katalogu includes). Tworzenie szablonu Na rysunku 11.3 przedstawiono strukturę katalogów zawierających pliki aplikacji. Wskazówka W przykładzie zamieszczonym w następnym przykładzie zostanie zastosowany bardziej zło ony arkusz stylów CSS, który będzie zapisany w oddzielnym pliku dołączonym do pliku naglowek.html. 381
  • 11.
    Rozdział 11. Aby utworzyć plik stopka.html, Listing 11.2. Plik stopka.html zawiera pozostałe definicje wyglądu strony HTML należy wykonać następujące kroki: 1. W edytorze tekstu utworzyć nową stronę .KUVKPI UVQRMCJVON HTML (listing 11.2). -QPKGE CYCTVQ EK UVTQP[ .KUVKPI UVQRMCJVON VF VT 2. Zakończyć kod środkowego wiersza tabeli. VT VF VF PDURVF VT VF CNKIP EGPVGT EQR[ Cała zawartość strony będzie przechowywana .CTT[ '7NNOCP CPF /% +PUKIJVU +PEVF w środkowym wierszu tabeli, którego VT definicja zaczyna się w pliku naglowek.html. Powy szy kod kończy definicję wiersza, VCDNG po którym zostanie umieszczony trzeci DQF[ i ostatni wiersz. JVON 3. Zdefiniować ostatni wiersz i zakończyć tworzenie strony HTML. Tworzenie szablonu VT VF PDURVF VF CNKIP EGPVGT EQR[ .CTT[ ' å7NNOCP CPF /% +PUKIJVU +PEVF VT VCDNG DQF[ JVON 4. Zapisać plik pod nazwą stopka.html i umieścić go na serwerze WWW (w katalogu includes). 382
  • 12.
    Zarządzanie zawartością strony— przykład Listing 11.3. Główna strona aplikacji (w razie potrzeby nale y umieścić na niej Tworzenie zwykłych bardziej wartościowe informacje) stron internetowych Zanim zajmiemy się najwa niejszą częścią !RJR .KUVKPI KPFGZRJR aplikacji internetowej (samym mechanizmem ) ÎYPC UVTQPC UGTYGTC 999 zarządzania zawartością stron) konieczne będzie 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. stworzenie jeszcze dwóch stron HTML. Jedna RCIGAVKVNG CTæFCPKG z nich o nazwie index.php będzie spełniała rolę CYCTVQ EKæ UVTQP głównej strony aplikacji. Z kolei druga o nazwie KPENWFGAQPEG mysql_connect.php jest skryptem, którego KPENWFGUPCINQYGMJVON zadaniem jest połączenie z serwerem MySQL ! R 5RCO URCO URCO URCO URCO URCO i wybranie wymaganej bazy danych (w celu URCO URCO URCO URCOR uzyskania dodatkowych informacji na jej temat R 5RCO URCO URCO URCO URCO URCO nale y zapoznać się z zawartością ramki Schemat Tworzenie zwykłych stron internetowych URCO URCO URCO URCOR bazy danych zawartej w następnym podrozdziale). !RJR Q æEGPKG UVQRMK *6/. KPENWFGAQPEG KPENWFGUUVQRMCJVON ! Aby utworzyć główną stronę, należy wykonać następujące kroki: 1. W edytorze tekstu utworzyć nowy skrypt PHP (listing 11.3). !RJR .KUVKPI KPFGZRJR 2. Określić tytuł strony i dołączyć plik nagłówka HTML. RCIGAVKVNG CTæFCPKG CYCTVQ EKæ åUVTQP KPENWFGAQPEG KPENWFGUPCINQYGMJVON ! 3. Wypełnić stronę tekstem. Rysunek 11.4. Główna strona R 5RCO URCO URCO URCO URCO URCO URCO åURCO URCO URCOR R 5RCO URCO URCO URCO URCO URCO URCO åURCO URCO URCOR Co prawda posłu yłem się tego typu treścią (słowo URCO), ale oczywiście na stronie głównej mo na umieścić bardziej wartościowe informacje. 4. Dołączyć stopkę HTML. !RJR KPENWFGAQPEG KPENWFGUUVQRMCJVON ! 5. Zapisać plik pod nazwą index.php, umieścić go na serwerze WWW i przetestować przy u yciu przeglądarki internetowej (rysunek 11.4). 383
  • 13.
    Rozdział 11. Aby utworzyć skrypt Listing 11.4. Skrypt łączy z serwerem MySQL i wybiera bazę danych content mysql_connect.php, należy wykonać następujące kroki: !RJR .KUVKPI O[USNAEQPPGEVRJR 1. W edytorze tekstu utworzyć nowy skrypt PHP 9 RNKMW CYCTVQ RCTCOGVT[ (listing 11.4). Y[OCICPG FQ W[UMCPKC FQUVúRW FQ DC[ FCP[EJ 2NKM LGUV !RJR .KUVKPI O[USNAEQPPGEVRJR W [YCP[ VCM G RT[ æEGPKW UKú Skrypt jest taki sam jak jego poprzednie wersje UGTYGTGO /[53. K Y[DKGTCPKGO DC[ FCP[EJ wykorzystane w poprzednich rozdziałach 7UVCYKGPKG LCMQ UVC [EJ (z wyjątkiem nazwy u ytkownika i jego hasła RCTCOGVTÎY WFKGNCLæE[EJ FQUVúRW oraz konfiguracji bazy danych). Skrypt mo e FQ DC[ FCP[EJ zostać stworzony od podstaw lub poprzez FGHKPG $A75'4 WUGTPCOG odpowiednią modyfikację poprzedniej wersji. FGHKPG $A2#55914 RCUUYQTF Tworzenie zwykłych stron internetowych 2. Określić konfigurację bazy danych w postaci FGHKPG $A*156 NQECNJQUV stałych. FGHKPG $A0#/' EQPVGPV 0CYKæCPKG RQ æEGPKC FGHKPG $A75'4 WUGTPCOG UGTYGTGO K Y[DTCPKG DC[ FCP[EJ FGHKPG $A2#55914 RCUUYQTF FDE O[USNAEQPPGEV $A*156 FGHKPG $A*156 NQECNJQUV $A75'4 $A2#55914 14 FKG FGHKPG $A0#/' EQPVGPV 0KG D[ Q OQ NKYG RQ æEGPKG UGTYGTGO /[53. O[USNAGTTQT Mając na względzie kwestię zabezpieczeń O[USNAUGNGEVAFD $A0#/' 14 FKG u ytkownik łączący się z serwerem MySQL 0KG D[ Q OQ NKYG Y[DTCPKG DC[ powinien na potrzeby omawianej aplikacji FCP[EJ O[USNAGTTQT dysponować mo liwością wykonywania tylko ! takich poleceń jak +05'46, 5'.'%6, '.'6' i dodatkowo wyłącznie dla bazy danych content. 3. Połączyć się z serwerem MySQL i wybrać bazę danych. FDE O[USNAEQPPGEV $A*156 $A75'4 å$A2#55914 14 FKG 0KG D[ Q OQ NKYG åRQ æEGPKG UGTYGTGO /[53. åO[USNAGTTQT O[USNAUGNGEVAFD $A0#/' 14 FKG å 0KG D[ Q OQ NKYG Y[DTCPKG DC[ FCP[EJ å åO[USNAGTTQT Wskazówki Aplikacja dysponuje podstawowym mechanizmem obsługi błędów realizowanym W następnym rozdziale zostanie omówiony przez funkcję O[USNAGTTQT . Więcej przykład, w którym zostaną wykorzystane informacji na ten temat zawarto w rozdziale 6. bardziej zaawansowane metody obsługi błędów. Poza tym zamieszczono w nim 4. Zakończyć skrypt PHP. zmodyfikowaną wersję skryptu ! mysql_connect.php. 5. Zapisać plik pod nazwą mysql_connect.php W celu uzyskania dodatkowych informacji i umieścić go na serwerze WWW poza na temat praw dostępu do serwera MySQL katalogiem głównym (rysunek 11.3). nale y zapoznać się z zawartością dodatku A. 384
  • 14.
    Zarządzanie zawartością strony— przykład Zarządzanie adresami URL Kolejne dwie strony HTML, które zostaną stworzone, umo liwią u ytkownikom dodawanie adresów URL i przeglądanie ju dołączonych. Ta część aplikacji bazuje na trzech tabelach bazy danych — WTNU, WTNAV[RGU i WTNAVKVNGU. Aby uzyskać dodatkowe informacje, nale y zapoznać się z zawartością ramki Schemat bazy danych. Dodawanie adresów URL Skrypt add_url.php prawdopodobnie jest najbardziej zło onym wśród wszystkich wchodzących w skład aplikacji. Wynika to z zastosowania znormalizowanej struktury bazy danych. Formularz zawarty w skrypcie pobiera adres URL, jego tytuł (lub nazwę), opis Zarządzanie adresami URL i maksymalnie trzy kategorie. Po wypełnieniu formularza (adres URL, jego tytuł, opis) dane zostaną umieszczone w tabeli WTNAVKVNGU. Następnie w celu dodania do tabeli WTNU od jednego do trzech rekordów (w zale ności od ilości kategorii wybranych przez u ytkownika) zostanie zastosowany klucz główny tabeli VKVNGAKF wraz z wartościami pola V[RGAKF. W celu określenia wartości pola VKVNGAKF dla dodanego adresu URL zostanie wykorzystana funkcja O[USNAKPUGTVAKF , która do tej pory nie była omawiana. Ka dorazowo, gdy na tabeli zawierającej pole o automatycznie zwiększanej wartości (zazwyczaj jest nim klucz główny) zostanie wykonane zapytanie, wtedy dla pola serwer MySQL u yje następnej wartości. Funkcja O[USNAKPUGTVAKF zwróci tę wartość. W przeciwnym razie nie byłoby mo liwe jej uzyskanie. 385
  • 15.
    Rozdział 11. Schemat bazy danych W niniejszym rozdziale zastosowano bazę danych o nazwie content, którą utworzono w rozdziale 5. W tamtym rozdziale zdefiniowano trzy znormalizowane tabele na potrzeby obsługi adresów URL (zło ona struktura pozwala na zaklasyfikowanie adresów URL do wielu typów). W tym rozdziale zostanie stworzona tabela WRNQCFU wykorzystywana przy zarządzaniu plikami. Całkowita struktura bazy danych mo e zostać ponownie zdefiniowana z wykorzystaniem poni szych poleceń: %4'#6' 6#$.' WRNQCFU WRNQCFAKF KPV 705+)0' 016 07.. #761A+0%4'/'06 åHKNGAPCOG 8#4%*#4 016 07.. HKNGAUKG +06 705+)0' 016 07.. HKNGAV[RG å8#4%*#4 016 07.. FGUETKRVKQP 8#4%*#4 '(#7.6 07.. WRNQCFAFCVG å#6'6+/' 016 07.. 24+/#4; -'; WRNQCFAKF -'; HKNGAPCOG HKNGAPCOG %4'#6' 6#$.' WTNAVKVNGU VKVNGAKF 5/#..+06 705+)0' 016 07.. #761A+0%4'/'06 åWTN 8#4%*#4 016 07.. VKVNG 8#4%*#4 016 07.. FGUETKRVKQP 6+0;6':6 016 å07.. 24+/#4; -'; VKVNGAKF 70+37' -'; WTN WTN %4'#6' 6#$.' WTNAV[RGU V[RGAKF 6+0;+06 705+)0' 016 07.. #761A+0%4'/'06 åV[RG 8#4%*#4 016 07.. 24+/#4; -'; V[RGAKF 70+37' -'; V[RG V[RG %4'#6' 6#$.' WTNU WTNAKF 5/#..+06 705+)0' 016 07.. #761A+0%4'/'06 åVKVNGAKF 5/#..+06 705+)0' 016 07.. V[RGAKF 6+0;+06 705+)0' 016 07.. åCRRTQXGF %*#4 '(#7.6 0 FCVGAUWDOKVVGF 6+/'56#/2 016 07.. 24+/#4; Zarządzanie adresami URL å-'; WTNAKF -'; VKVNGAKF VKVNGAKF -'; V[RGAKF V[RGAKF -'; åFCVGAUWDOKVVGF FCVGAUWDOKVVGF W celu sprawdzenia struktury bazy danych zawsze mo na u yć poni szych poleceń języka SQL (rysunek 11.5). 5*19 6#$.'5 '5%4+$' nazwa_tabeli Rysunek 11.5. Sprawdzenie struktury bazy danych 386
  • 16.
    Zarządzanie zawartością strony— przykład Aby utworzyć skrypt add_url.php, Podobnie jak w poprzednich rozdziałach, należy wykonać następujące kroki: funkcja GUECRGAFCVC gwarantuje poprawność przesyłanych danych niezale nie od tego, czy 1. W edytorze tekstu utworzyć nowy skrypt uaktywniono funkcję Magic Quotes, czy nie. PHP (listing 11.5). 3. Przeprowadzić walidację wprowadzonego !RJR .KUVKPI CFFAWTNRJR adresu URL i jego tytułu. RCIGAVKVNG QFCYCPKG CFTGUÎY 74. KPENWFG KPENWFGUPCINQYGMJVON KH GORV[ A2156= WTN ? ] TGSWKTGAQPEG O[USNAEQPPGEVRJR W GUECRGAFCVC A2156= WTN ? _ GNUG ] 2. Sprawdzić, czy formularz został wypełniony W (#.5' i zastosować funkcję GUECRGAFCVC . GEJQ R HQPV EQNQT TGF 2TQUú RQFCè åCFTGU 74. HQPV R _ KH KUUGV A2156= UWDOKV ? ] KH GORV[ A2156= VKVNG ? ] å 1DU WIC HQTOWNCTC V GUECRGAFCVC A2156= VKVNG ? HWPEVKQP GUECRGAFCVC FCVC ] _ GNUG ] INQDCN FDE V (#.5' KH KPKAIGV OCIKEASWQVGUAIRE ] GEJQ R HQPV EQNQT TGF FCVC UVTKRUNCUJGU FCVC å2TQUú RQFCè PCYú CFTGUW _ å74.VKVNG HQPV R _ TGVWTP O[USNATGCNAGUECRGAUVTKPI Zarządzanie adresami URL å VTKO FCVC FDE _ Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych !RJR .KUVKPI CFFAWTNRJR 5VTQPC RQYCNC W [VMQYPKMQO FQFCè CFTGU[ 74. FQ DC[ FCP[EJ 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. RCIGAVKVNG QFCYCPKG CFTGUÎY 74. KPENWFG KPENWFGUPCINQYGMJVON TGSWKTGAQPEG O[USNAEQPPGEVRJR 2Q æEGPKG DCæ FCP[EJ KH KUUGV A2156= UWDOKV ? ] 1DU WIC HQTOWNCTC (WPMELC WUWYCLæEC PCM K QDEKPCLæEC FCPG YRTQYCFQPG Y HQTOWNCTW HWPEVKQP GUECRGAFCVC FCVC ] INQDCN FDE KH KPKAIGV OCIKEASWQVGUAIRE ] FCVC UVTKRUNCUJGU FCVC _ TGVWTP O[USNATGCNAGUECRGAUVTKPI VTKO FCVC FDE _ -QPKGE UGMELK HWPMELK GUECRGAFCVC 387
  • 17.
    Rozdział 11. W tym przykładzie zostanie dokonane sprawdzenie, czy wprowadzono wartości. W celu zwiększenia dokładności mo na oczywiście zastosować wyra enia proste (tak naprawdę w rozdziale 8. zawarto skrypt przeprowadzający walidację adresów URL). Jeśli jakieś pole nie zostanie wypełnione, pojawi się komunikat błędu widoczny na rysunku 11.6. 4. Sprawdzić, czy w polu FGUETKRVKQP podano wartość. KH GORV[ A2156= FGUETKRVKQP ? ] F GUECRGAFCVC å A2156= FGUETKRVKQP ? Rysunek 11.6. Jeśli u ytkownik nie poda adresu _ GNUG ] URL lub jego tytułu, zostanie wyświetlony F _ komunikat błędu Ze względu na to, e w polu FGUETKRVKQP tabeli WTNAVKVNGU nie trzeba wstawiać wartości, Zarządzanie adresami URL będzie ona przetwarzana, ale tylko wtedy, gdy zostanie wprowadzona w formularzu. Jeśli w polu FGUETKRVKQP nie zostanie wstawiona adna wartość, zmiennej F stosowanej w zapytaniu będzie przypisywany pusty łańcuch. Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy 5RTCYFGPKG CFTGUW 74. KH GORV[ A2156= WTN ? ] W GUECRGAFCVC A2156= WTN ? _ GNUG ] W (#.5' GEJQ R HQPV EQNQT TGF 2TQUú RQFCè CFTGU 74. HQPV R _ 5RTCYFGPKG PCY[ CFTGUW 74. KH GORV[ A2156= VKVNG ? ] V GUECRGAFCVC A2156= VKVNG ? _ GNUG ] V (#.5' GEJQ R HQPV EQNQT TGF 2TQUú RQFCè PCYú CFTGUW 74.VKVNG HQPV R _ 5RTCYFGPKG YCTVQ EK RQNC FGUETKRVKQP PKG LGUV Y[OCICPG KH GORV[ A2156= FGUETKRVKQP ? ] F GUECRGAFCVC A2156= FGUETKRVKQP ? _ GNUG ] F _ 388
  • 18.
    Zarządzanie zawartością strony— przykład 5. Sprawdzić wybraną kategorię. KH A2156= V[RG ? 14 å A2156= V[RG ? 14 å A2156= V[RG ? ] V[RG 647' _ GNUG ] V[RG (#.5' GEJQ R HQPV EQNQT TGF å2TQUú RQFCè EQ PCLOPKGL LGFPæ åMCVGIQTKú HQPV R _ U ytkownik, mając do dyspozycji zbiór typów zawartych w tabeli WTNAV[RGU, mo e przypisać wprowadzanemu adresowi URL maksymalnie trzy kategorie. Zakłada się, Rysunek 11.7. U ytkownik musi wybrać co najmniej e u ytkownik wybierze kategorię przy jedną kategorię dla wprowadzonego adresu URL u yciu pierwszego menu rozwijanego (V[RG). Niezale nie od tego instrukcja warunkowa sprawdzi, czy skorzystano z przynajmniej jednego menu rozwijanego. Zarządzanie adresami URL Jeśli tak nie będzie, zostanie wyświetlony komunikat błędu (rysunek 11.7). Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy 5RTCYFGPKG MCVGIQTKK KH A2156= V[RG ? 14 A2156= V[RG ? 14 A2156= V[RG ? ] V[RG 647' _ GNUG ] V[RG (#.5' GEJQ R HQPV EQNQT TGF 2TQUú RQFCè EQ PCLOPKGL LGFPæ MCVGIQTKú HQPV R _ KH W V V[RG ] ,G NK YU[UVMQ LGUV Y RQTæFMW QFCYCPKG CFTGUW 74. FQ VCDGNK WTNAVKVNGU SWGT[ +05'46 +061 WTNAVKVNGU WTN VKVNG FGUETKRVKQP 8#.7'5 W V F TGUWNV O[USNASWGT[ SWGT[ 9[MQPCPKG CR[VCPKC VKF O[USNAKPUGTVAKF 2QDTCPKG KFGPV[HKMCVQTC V[VW W KH VKF ] ,G NK QUVC Q Y[MQPCPG RTCYKF QYQ 6YQTGPKG CR[VCPKC SWGT[ +05'46 +061 WTNU VKVNGAKF V[RGAKF CRRTQXGF FCVGAUWDOKVVGF 8#.7'5 KH A2156= V[RG ? ] SWGT[ VKF ] A2156= V[RG ?_ ; 019 _ 389
  • 19.
    Rozdział 11. 6. Dodać adres URL do tabeli WTNAVKVNGU. 7. Utworzyć główne zapytanie. KH W V V[RG ] KH VKF ] QFCYCPKG CFTGUW 74. FQ VCDGNK åWTNAVKVNGU SWGT[ +05'46 +061 WTNU SWGT[ +05'46 +061 WTNAVKVNGU WTN å VKVNGAKF V[RGAKF CRRTQXGF åVKVNG FGUETKRVKQP 8#.7'5 W åFCVGAUWDOKVVGF 8#.7'5 å V F KH A2156= V[RG ? ] TGUWNV O[USNASWGT[ SWGT[ SWGT[ VKF VKF O[USNAKPUGTVAKF å] A2156= V[RG ?_ ; å019 Ze względu na strukturę bazy danych, adres _ URL musi zostać dodany do tabeli WTNAVKVNGU KH A2156= V[RG ? ] zanim będzie mo liwa modyfikacja tabeli SWGT[ VKF ] A2156 WTNU. Powy sze zapytanie doda adres URL, å= V[RG ?_ ; 019 _ a następnie przy u yciu funkcji O[USN KH A2156= V[RG ? ] AKPUGTVAKF zwróci wartość pola VKVNGAKF SWGT[ VKF (klucz główny tabeli o automatycznie å] A2156= V[RG ?_ ; zwiększanej wartości). Uzyskana wartość å019 mo e następnie zostać wykorzystana _ SWGT[ UWDUVT SWGT[ Zarządzanie adresami URL w drugim zapytaniu (krok 7.). Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy KH A2156= V[RG ? ] SWGT[ VKF ] A2156= V[RG ?_ ; 019 _ KH A2156= V[RG ? ] SWGT[ VKF ] A2156= V[RG ?_ ; 019 _ SWGT[ UWDUVT SWGT[ 7UWPKúEKG QUVCVPKGIQ RTGEKPMC K URCELK 9[MQPCPKG CR[VCPKC TGUWNV O[USNASWGT[ SWGT[ KH TGUWNV ] GEJQ R D KúMWLGO[ C RTGU CPKG FCP[EJ D R A2156 CTTC[ _ GNUG ] ,G NK Y[UVæRKæ RTQDNGO[ GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R _ _ GNUG ] ,G NK Y[UVæRKæ RTQDNGO[ GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R _ 390
  • 20.
    Zarządzanie zawartością strony— przykład Jeśli zostanie pobrana wartość zmiennej VKF, 8. Wykonać zapytanie, wprowadzić komunikaty bez obaw mo na przejść do wykonywania informujące o jego wyniku i uzupełnić głównego zapytania (dodanie rekordu do instrukcje warunkowe. tabeli WTNU). Aby tak postąpić, na początku TGUWNV O[USNASWGT[ SWGT[ nale y zdefiniować zapytanie i przypisać KH TGUWNV ] jego początkową część zmiennej SWGT[. GEJQ R D KúMWLGO[ C Po sprawdzeniu, czy wybrano kategorie åRTGU CPKG FCP[EJ D R (przy u yciu menu rozwijanych), dla ka dej _ GNUG ] ,G NK Y[UVæRKæ RTQDNGO[ GEJQ R HQPV EQNQT TGF z nich dodano rekord przy u yciu zapytania. å0C UMWVGM D úFW U[UVGOQYGIQ Na końcu w celu usunięcia z zapytania åY[U CPG CR[VCPKG PKG OQI Q ostatnich dwóch znaków (przecinek i znak åQUVCè RTGVYQTQPG spacji) zostanie u yta funkcja UWDUVT . å2TGRTCUCO[ C CKUVPKC æ Jeśli wystąpią problemy ze składnią zapytania åPKGFQIQFPQ èHQPV R nale y nakazać interpreterowi języka PHP _ wyświetlenie wartości zmiennej SWGT[, Powy sze instrukcje warunkowe dzięki czemu mo na stwierdzić, co będzie wyświetlą odpowiednie komunikaty przetwarzane przez serwer MySQL. związane z przesyłanymi danymi. Zarządzanie adresami URL Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy _ GNUG ] ,G NK LGFPC QRGTCELK URTCYFGPKC FCP[EJ UKú PKG RQYKGFKG GEJQ R HQPV EQNQT TGF 2TQUú URTÎDQYCè RQPQYPKGHQPV R _ _ -QPKGE KPUVTWMELK YCTWPMQYGL QDU WIWLæEGL FCPG YRTQYCFCPG Y HQTOWNCTW (QTOWNCT Y[ YKGVNCLæE[ FCPG 6YQTGPKG OGPW TQYKLCPGIQ SWGT[ 5'.'%6
  • 21.
    (41/ WTNAV[RGU 14'4$; V[RG #5% TGUWNV O[USNASWGT[ SWGT[ RWNNFQYP QRVKQP 9[DKGT LGFPæ RQ[ELúQRVKQP YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV /;53.A#551% ] RWNNFQYP QRVKQP XCNWG ] TQY= V[RGAKF ?_ ] TQY= V[RG ?_QRVKQP P _ ! HQTO CEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? ! OGVJQF RQUV HKGNFUGV NGIGPF 9 EGNW RTGU CPKC CFTGUW 74. PCNG [ Y[RG PKè HQTOWNCT OQ PC Y[DTCè OCMU[OCNPKG MCVGIQTKGNGIGPF R D #FTGU 74.D KPRWV V[RG VGZV PCOG WTN UKG OCZNGPIVJ XCNWG !RJR KH KUUGV A2156= WTN ? GEJQ A2156= WTN ? ! DT UOCNN 0KG FQ æECL KFGPV[HKMCVQTC K JVVRK UOCNN R _ GNUG ] GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R _ _ GNUG ] GEJQ R HQPV EQNQT TGF 2TQUú URTÎDQYCè RQPQYPKGHQPV R _ _ 391
  • 22.
    Rozdział 11. 9. Utworzyć stronę HTML, na której zostaną umieszczone menu rozwijane umo liwiające wybranie typu adresów URL. SWGT[ 5'.'%6
  • 23.
    (41/ WTNAV[RGU 14'4$; åV[RG #5% TGUWNV O[USNASWGT[ SWGT[ RWNNFQYP QRVKQP 9[DKGT LGFPæ åRQ[ELúQRVKQP YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV å/;53.A#551% ] RWNNFQYP QRVKQP åXCNWG ] TQY= V[RGAKF ?_ ] TQY å= V[RG ?_QRVKQP P _ Listing 11.5. Skrypt pozwala u ytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy Zarządzanie adresami URL R D 0CYCV[VW CFTGUW 74.D KPRWV V[RG VGZV PCOG VKVNG UKG OCZNGPIVJ XCNWG !RJR KH KUUGV A2156= VKVNG ? GEJQ A2156= VKVNG ? ! R R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP EQNU TQYU !RJR KH KUUGV A2156= FGUETKRVKQP ? GEJQ A2156= FGUETKRVKQP ? ! VGZVCTGC R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R HKGNFUGV FKX CNKIP EGPVGT KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL FKX HQTO -QPKGE HQTOWNCTC !RJR O[USNAENQUG COMPKúEKG RQ æEGPKC DCæ FCP[EJ KPENWFG KPENWFGUUVQRMCJVON Q æEGPKG UVQRMK *6/. ! 392
  • 24.
    Zarządzanie zawartością strony— przykład Formularz będzie zawierał trzy menu rozwijane, z których ka de będzie dysponowało listą dostępnych typów adresów URL pobranych z bazy danych. Ze względu na to, e zale y mi na wyświetleniu trzech kopii tego typu informacji, bardziej efektywnym będzie przypisanie wyników zmiennej ni wielokrotne wysyłanie zapytania do bazy danych. Na rysunku 11.8 pokazano kod źródłowy strony zawierającej menu rozwijane. 10. Utworzyć formularz na stronie HTML. HQTO CEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? ! OGVJQF RQUV HKGNFUGV NGIGPF 9 EGNW RTGU CPKC CFTGUW å74. PCNG [ Y[RG PKè HQTOWNCT OQ PC åY[DTCè OCMU[OCNPKG MCVGIQTKGNGIGPF R D #FTGU 74.D KPRWV V[RG VGZV åPCOG WTN UKG OCZNGPIVJ Zarządzanie adresami URL åXCNWG !RJR KH KUUGV A2156= WTN ? Rysunek 11.8. Kod źródłowy strony HTML åGEJQ A2156= WTN ? ! DT dynamicznie generujący menu rozwijane å UOCNN å0KG FQ æECL KFGPV[HKMCVQTC åK JVVRK UOCNN R R D 0CYCV[VW CFTGUW 74.D KPRWV åV[RG VGZV PCOG VKVNG UKG åOCZNGPIVJ XCNWG !RJR KH å KUUGV A2156= VKVNG ? GEJQ å A2156= VKVNG ? ! R R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP åEQNU TQYU !RJR KH å KUUGV A2156= FGUETKRVKQP ? GEJQ å A2156= FGUETKRVKQP ? ! VGZVCTGC R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R R D -CVGIQTKC D UGNGEV PCOG V[RG !RJR GEJQ RWNNFQYP ! UGNGEV R HKGNFUGV FKX CNKIP EGPVGT KPRWV V[RG UWDOKV åPCOG UWDOKV XCNWG 9[ NKL FKX HQTO 393
  • 25.
    Rozdział 11. Formularz (rysunek 11.9) pozwala wprowadzić do pól tekstowych kilka wartości i zapamiętać je. 11. Zakończyć skrypt PHP. !RJR O[USNAENQUG KPENWFG KPENWFGUUVQRMCJVON ! 12. Zapisać plik pod nazwą add_url.php, umieścić go na serwerze WWW i przetestować przy u yciu przeglądarki internetowej (rysunek 11.10). Rysunek 11.9. Formularz słu ący do dodawania adresów URL Zarządzanie adresami URL Rysunek 11.10. Po przesłaniu wprowadzonych danych zostanie wyświetlony komunikat i formularz będzie widoczny ponownie (z poprzednio wstawionymi wartościami) 394
  • 26.
    Zarządzanie zawartością strony— przykład Wskazówki W zastosowanym przykładzie mo na było te stworzyć kontrolki, które posłu yłyby W celu zablokowania mo liwości do wybierania maksymalnie trzech kategorii. stosowania znaczników języka HTML we wprowadzanych wartościach nale y Po uaktywnieniu funkcji Magic Quotes, posłu yć się funkcją UVTKRAVCIU . wartości wprowadzone do formularza przed Funkcja ta usuwa wszystkie znaczniki przesłaniem do przeglądarki muszą zostać nie tylko języka HTML, ale te PHP. przetworzone przez funkcję UVTKRUNCUJGU . Aby wyświetlić znaczniki języka HTML W przytoczonym przykładzie po poprawnym (w postaci, w jakiej występują w kodzie przesłaniu wstawionych wartości formularz źródłowym) bez ich uaktywniania nale y zostanie ponownie wyświetlony wraz skorzystać z funkcji JVONURGEKCNEJCTU z poprzednio wprowadzonymi danymi. i JVONGPVKVKGU . Aby to zmienić, nale y zrezygnować z wyświetlania formularza lub wyczyścić Funkcja O[USNAKPUGTVAKF jest powiązana zawartość zmiennej tablicowej A2156 z ka dą pojedynczą sesją (interakcja z bazą po udanym wykonaniu zapytania na bazie danych). Z tego te powodu nie nale y danych. się przejmować tym, e zwrócono nieprawidłową wartość nawet wtedy, Funkcja języka PHP o nazwie O[USNAKPUGTV Zarządzanie adresami URL gdy skrypt jednocześnie został wykonany jest odpowiednikiem funkcji .#56A+05'46A+ przez kilku ró nych u ytkowników. oferowanej przez serwer MySQL. W przypadku korzystania ze skryptów PHP i stron HTML mo na stosować rozwiązanie zapamiętujące, jakie pozycje zostały wybrane z menu rozwijanego, ale jest to związane z większą ilością kodu źródłowego, a ponadto w przytoczonym przykładzie niezbyt dobrze współpracuje ze zmienną RWNNFQYP. 395
  • 27.
    Rozdział 11. Przeglądanie wysłanych adresów URL Skrypt umo liwiający przeglądanie adresów URL będzie się składał z dwóch części — górnej i dolnej. W pierwszej z nich zostanie wyświetlone menu rozwijane z dostępnymi typami adresów, natomiast w drugiej wszystkie odnośniki dla wybranego typu. Gdy u ytkownik wyświetli stronę po raz pierwszy, wtedy nie zostanie wyświetlony aden adres URL. Po wybraniu przez niego typu i przesłaniu danych wprowadzonych do formularza, strona zostanie wyświetlona ponownie wraz z listą adresów URL dla wybranego typu (niezale nie od tego menu rozwijane w dalszym ciągu będzie widoczne). Zarządzanie adresami URL Nowe funkcje i metody Skrypt view_urls.php wprowadza dwa nowe rozwiązania. Jednym z nich jest rzutowanie, czyli narzucanie zmiennej konkretnego typu (całkowitoliczbowy, łańcuchowy itp.). Aby zrzutować zmienną, nale y przed jej nazwą w nawiasach określić ostateczny jej typ. Oto przykład: XCT V[R C EWEJQY[ XCT KPV XCT V[R EC MQYKVQNKEDQY[ Do dostępnych typów zmiennych (w niektórych przypadkach wiele określeń dotyczy tego samego typu) nale y zaliczyć takie typy jak KPV i KPVGIGT, DQQN i DQQNGCP, HNQCV, FQWDNG, TGCN, UVTKPI, CTTC[ i QDLGEV. Interpreter języka PHP w oparciu o początkową wartość rzutowanej zmiennej zmieni jej typ i przypisze jej odpowiadającą mu wartość logiczną (w celu uzyskania szczegółowych informacji z tym związanych nale y zajrzeć do dokumentacji języka PHP). Przy u yciu funkcji KPVXCN mo na te zmienić typ zmiennej na typ całkowitoliczbowy (co zostanie pokazane w kolejnym skrypcie). Z kolei poprzez umieszczenie wartości w znakach cudzysłowu mo na zamienić typ zmiennej na łańcuchowy. Drugim nowym rozwiązaniem zastosowanym w skrypcie jest funkcja NKUV . Funkcja pobiera wartości zmiennej tablicowej i przypisuje je oddzielnym zmiennym. Oto przykład: XCT CTTC[ ,CP 0QYCM NKUV HKTUV NCUV XCT Powy szym zmiennym HKTUV i NCUV zostaną przypisane odpowiednio wartości Jan i Nowak. Podobna funkcjonalność mo e być równie uzyskana przy u yciu funkcji GZVTCEV podobnej do funkcji NKUV . 396
  • 28.
    Zarządzanie zawartością strony— przykład Aby utworzyć skrypt view_urls.php, należy wykonać poniższe kroki: 1. W edytorze tekstu utworzyć nowy skrypt PHP (listing 11.6). !RJR .KUVKPI XKGYAWTNURJR RCIGAVKVNG 2TGINæFCPKG CFTGUÎY 74. KPENWFGAQPEG KPENWFGUPCINQYGMJVON TGSWKTGAQPEG O[USNAEQPPGEVRJR Rysunek 11.11. Menu rozwijane 2. Rozpocząć definiowanie formularza zawartego na stronie HTML. GEJQ FKX CNKIP EGPVGT HQTO OGVJQF IGV CEVKQP XKGYAWTNURJR UGNGEV PCOG V[RG QRVKQP XCNWG 07.. 9[DKGT åMCVGIQTKúQRVKQP Po pierwszym wyświetleniu strony HTML Zarządzanie adresami URL będzie na niej widoczny formularz składający się z menu rozwijanego i przycisku Wyślij (rysunek 11.11). W tym miejscu zawarto początek definicji formularza umieszczonego na stronie HTML. Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL, jak i z adresami dla konkretnej kategorii !RJR .KUVKPI XKGYAWTNURJR 5VTQPC RQYCNC Y[ YKGVNKè CFTGU[ 74. CRKUCPG Y DCKG FCP[EJ 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. RCIGAVKVNG 2TGINæFCPKG CFTGUÎY 74. KPENWFGAQPEG KPENWFGUPCINQYGMJVON TGSWKTGAQPEG O[USNAEQPPGEVRJR 2Q æEGPKG DCæ FCP[EJ 6YQTGPKG HQTOWNCTC RQYCNCLæEGIQ W [VMQYPKMQYK Y[DTCPKG CFTGUW 74. MVÎT[ QUVCPKG Y[ YKGVNQP[ GEJQ FKX CNKIP EGPVGT HQTO OGVJQF IGV CEVKQP XKGYAWTNURJR UGNGEV PCOG V[RG QRVKQP XCNWG 07.. 9[DKGT MCVGIQTKúQRVKQP 397
  • 29.
    Rozdział 11. 3. Pobrać wszystkie dostępne typy adresów URL i dołączyć je do menu rozwijanego. SWGT[ 5'.'%6
  • 30.
    (41/ WTNAV[RGU å14'4 $; V[RG #5% TGUWNV O[USNASWGT[ SWGT[ YJKNG TQY O[USNAHGVEJACTTC[ å TGUWNV /;53.A07/ ] GEJQ QRVKQP XCNWG TQY=? åUVTKRUNCUJGU TQY=? QRVKQP _ Rysunek 11.12. Dynamicznie wygenerowany kod źródłowy formularza zawartego na stronie HTML Powy szy kod pobiera z tabeli WTNAV[RGU ka dy typ adresu URL i na podstawie zwróconych rekordów generuje kod źródłowy menu rozwijanego umieszczonego na stronie HTML (rysunek 11.12). Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL, Zarządzanie adresami URL jak i z adresami dla konkretnej kategorii — ciąg dalszy 2QDTCPKG K Y[ YKGVNGPKG FQUVúRP[EJ V[RÎY SWGT[ 5'.'%6
  • 31.
    (41/ WTNAV[RGU 14'4$; V[RG #5% TGUWNV O[USNASWGT[ SWGT[ YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV /;53.A07/ ] GEJQ QRVKQP XCNWG TQY=? UVTKRUNCUJGU TQY=? QRVKQP _ CMQ EGPKG HQTOWNCTC GEJQ UGNGEV KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL HQTO FKX 2QDTCPKG CFTGUÎY 74. QMTG NQPGIQ V[RW LG NK IQ RQFCPQ KH KUUGV A)'6= V[RG ? ] V KPVXCN A)'6= V[RG ? 5RTCYFGPKG E[ V[R LGUV EC MQYKVQNKEDQY[ 2QDTCPKG PCY[ CMVWCNPKG Y[DTCPGIQ V[RW SWGT[ 5'.'%6 V[RG (41/ WTNAV[RGU 9*'4' V[RGAKF V TGUWNV O[USNASWGT[ SWGT[ NKUV V[RG O[USNAHGVEJACTTC[ TGUWNV /;53.A07/ GEJQ JT FKX CNKIP EGPVGT D V[RG QFPQ PKMÎYD DT UOCNN 9U[UVMKG QFPQ PKMK DúFæ MQT[UVC [ Y CUPGIQ QMPC 0CLRKGTY QUVCPæ Y[ YKGVNQPG QUVCVPKQ FQFCPG QFPQ PKMKUOCNN FKX P 398
  • 32.
    Zarządzanie zawartością strony— przykład 4. Zakończyć definicję formularza Jeśli typ został ju wybrany (w takim umieszczonego na stronie HTML. przypadku zostanie dołączony do adresu GEJQ UGNGEV URL i udostępniony przy u yciu zmiennej KPRWV V[RG UWDOKV PCOG UWDOKV tablicowej A)'6), powiązane z nim adresy åXCNWG 9[ NKL URL powinny być pobrane. HQTO FKX Pierwsza operacja będzie polegała na zastosowaniu funkcji KPVXCN w celu sprawdzenia, czy wybrany typ, który zostanie 5. Sprawdzić, czy został wybrany typ adresu zastosowany w zapytaniu jest typem URL i czy pobrano informacje na jego temat. całkowitoliczbowym. W dalszej kolejności KH KUUGV A)'6= V[RG ? ] przy u yciu funkcji NKUV zostanie pobrana nazwa typu i wyświetlona na stronie w roli V KPVXCN A)'6= V[RG ? nagłówka. Więcej informacji na temat funkcji KPVXCN i NKUV mo na znaleźć w ramce SWGT[ 5'.'%6 V[RG (41/ WTNAV[RGU å9*'4' V[RGAKF V Nowe funkcje i metody lub w dokumentacji TGUWNV O[USNASWGT[ SWGT[ języka PHP. NKUV V[RG O[USNAHGVEJACTTC[ å TGUWNV /;53.A07/ 6. Zainicjalizować zmienną HKTUV i wysłać Zarządzanie adresami URL zapytanie do bazy danych. GEJQ JT FKX HKTUV 647' åCNKIP EGPVGT D V[RG SWGT[ 5'.'%6 WTN VKVNG FGUETKRVKQP åQFPQ PKMÎYD DT å(41/ WTNU #5 W WTNAVKVNGU #5 WV 9*'4' UOCNN 9U[UVMKG QFPQ PKMK DúFæ åWVVKVNGAKF WVKVNGAKF #0 WV[RGAKF V åMQT[UVC [ Y CUPGIQ QMPC 0CLRKGTY å#0 WCRRTQXGF ; 14'4 $; åQUVCPæ Y[ YKGVNQPG QUVCVPKQ FQFCPG åFCVGAUWDOKVVGF FGUE åQFPQ PKMKUOCNN FKX P TGUWNV O[USNASWGT[ SWGT[ Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL, jak i z adresami dla konkretnej kategorii — ciąg dalszy HKTUV 647' +PKELCNKCELC OKGPPGL 9[MQPCPKG CR[VCPKC PC DCKG FCP[EJ SWGT[ 5'.'%6 WTN VKVNG FGUETKRVKQP (41/ WTNU #5 W WTNAVKVNGU #5 WV 9*'4' WVVKVNGAKF WVKVNGAKF #0 WV[RGAKF V #0 WCRRTQXGF ; 14'4 $; FCVGAUWDOKVVGF FGUE TGUWNV O[USNASWGT[ SWGT[ 9[ YKGVNGPKG YU[UVMKEJ CFTGUÎY 74. YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV /;53.A#551% ] ,G NK LGUV VQ RKGTYU[ TGMQTF YVGF[ QUVCPKG WVYQTQPC VCDGNC JGCFGT KH HKTUV ] GEJQ VCDNG DQTFGT YKFVJ EGNNURCEKPI EGNNRCFFKPI CNKIP EGPVGT VT VF CNKIP TKIJV YKFVJ HQPV UKG 1FPQ PKMHQPV VF VF CNKIP NGHV YKFVJ HQPV UKG 1RKUHQPV VF VT _ -QPKGE RúVNK YCTWPMQYGL G OKGPPæ HKTUV 399
  • 33.
    Rozdział 11. Zmienna HKTUV zostanie wykorzystana _ na dwa sposoby. Pierwszy z nich będzie GEJQ VT VF CNKIP TKIJV C polegał na tym, e zmienna wska e, e przed åJTGH JVVR] TQY= WTN ?_ wyświetleniem pierwszego rekordu na stronie åVCTIGV APGY UVTKRUNCUJGU HTML powinna zostać utworzona tabela. å TQY= VKVNG ? C VF W drugim przypadku zmienna posłu y VF CNKIP NGHV ] TQY do sprawdzenia, czy w wyniku wykonanego å= FGUETKRVKQP ?_VF zapytania zostały zwrócone jakiekolwiek VT P adresy URL. HKTUV (#.5' 7. Wyświetlić wszystkie zwrócone rekordy. _ YJKNG TQY O[USNAHGVEJACTTC[ å TGUWNV /;53.A#551% ] Pętla YJKNG zwróci wszystkie rekordy pobrane w wyniku wykonanego zapytania. KH HKTUV ] Przed wyświetleniem pierwszego rekordu GEJQ VCDNG DQTFGT YKFVJ do przeglądarki internetowej zostanie åEGNNURCEKPI EGNNRCFFKPI wysłana tabela i jej nagłówek åCNKIP EGPVGT VT (rysunek11.13). VF CNKIP TKIJV YKFVJ HQPV Zarządzanie adresami URL åUKG 1FPQ PKMHQPV VF VF CNKIP NGHV YKFVJ HQPV åUKG 1RKUHQPV VF VT Listing 11.6. Skrypt view_urls.php wyświetla zarówno menu z kategoriami adresów URL, jak i z adresami dla konkretnej kategorii — ciąg dalszy 9[ YKGVNC YU[UVMKG TGMQTF[ GEJQ VT VF CNKIP TKIJV C JTGH JVVR] TQY= WTN ?_ VCTIGV APGY UVTKRUNCUJGU TQY= VKVNG ? C VF VF CNKIP NGHV ] TQY= FGUETKRVKQP ?_VF VT P HKTUV (#.5' YTÎEQPQ LGFGP TGMQTF _ -QPKGE RúVNK YJKNG ,G NK PKG Y[ YKGVNQPQ CFPGIQ TGMQTFW KH HKTUV ] GEJQ FKX CNKIP EGPVGT #MVWCNPKG FNC Y[DTCPGL MCVGIQTKK PKG KUVPKGLG CFGP QFPQ PKMFKX _ GNUG ] GEJQ VCDNG COMPKúEKG VCDGNK _ _ -QPKGE KPVUVTWMELK YCTWPMQYGL A)'6= V[RG ? O[USNAENQUG COMPKúEKG RQ æEGPKC DCæ FCP[EJ KPENWFGAQPEG KPENWFGUUVQRMCJVON Q æEGPKG UVQRMK *6/. ! 400
  • 34.
    Zarządzanie zawartością strony— przykład 8. Wyświetlić komunikat, jeśli nie został zwrócony aden adres URL i zakończyć kod głównej instrukcji warunkowej. KH HKTUV ] GEJQ FKX CNKIP EGPVGT #MVWCNPKG FNC åY[DTCPGL MCVGIQTKK PKG KUVPKGLG CFGP åQFPQ PKMFKX _ GNUG ] GEJQ VCDNG _ _ Jeśli zostaną zwrócone jakiekolwiek wiersze, zmienna HKTUV znajdująca się wewnątrz pętli YJKNG przyjmie wartość (#.5'. A zatem, jeśli wartością zmiennej HKTUV nadal będzie 647', oznacza to, e nie zwrócono adnych Rysunek 11.13. Lista adresów URL rekordów i powinien zostać wyświetlony dla wybranego typu komunikat podobny do pokazanego na rysunku 11.14. W przeciwnym razie powinna Zarządzanie adresami URL zostać wygenerowana kompletna tabela. 9. Zakończyć kod źródłowy strony HTML. O[USNAENQUG KPENWFGAQPEG KPENWFGUUVQRMCJVON ! 10. Zapisać plik pod nazwą view_urls.php, umieścić go na serwerze WWW i przetestować przy u yciu przeglądarki internetowej. Wskazówki W rozdziale 12. zamieszczono skrypt demonstrujący, w jaki sposób wyświetlać Rysunek 11.14. Wygląd strony w przypadku, rekordy na wielu stronach (zapoznaj się gdy z wybranym typem nie powiązano jeszcze adnych adresów URL z zawartością ostatniego skryptu tego rozdziału o nazwie view_users.php). Przykłady zawarte w następnym rozdziale dotyczą równie operacji rejestracji i autoryzacji u ytkownika. Jeśli zale y Ci na ochronie zarządzanych informacji, obie operacje powinny zostać zastosowane w aplikacji omawianej w niniejszym rozdziale. W razie potrzeby w stosunku do pola FGUETKRVKQP mo na zastosować funkcję PNDT (skrót od słów newline to break). Funkcja zamieni ka dy znak nowego wiersza — tworzony poprzez wciśnięcie klawisza Return lub Enter — na znacznik języka (X)HTML postaci DT . 401
  • 35.
    Rozdział 11. Zarządzanie plikami Ostatnia część omawianej aplikacji internetowej słu y do zarządzania plikami dowolnego typu. Odpowiednie skrypty pozwolą u ytkownikom przy u yciu przeglądarki internetowej umieścić na serwerze pliki przechowywane na ich komputerach (rysunek 11.15). Dodatkowo do bazy danych zostanie dodany rekord powiązany z wykonaną operacją. Umieszczanie plików na serwerze Rysunek 11.15. U ytkownicy będą mogli wybrać Podobnie jak w przypadku przetwarzania plik, który zostanie umieszczony na serwerze przy u yciu skryptu PHP dowolnego formularza zawartego na stronie HTML, równie operacja umieszczania plików na serwerze składa się z dwóch etapów. Najpierw musi zostać Rysunek 11.16. Definicja typu file tworzy wyświetlony formularz zawarty na stronie HTML na formularzu zawartym na stronie HTML umo liwiający umieszczanie plików na serwerze. przycisk podobny do pokazanego powy ej Zarządzanie plikami Po przesłaniu danych wprowadzonych do formularza skrypt PHP musi skopiować plik w odpowiednie miejsce na serwerze. Wymagana składnia kodu źródłowego definiującego formularz umo liwiający umieszczenie pliku na serwerze składa się z trzech części: HQTO GPEV[RG OWNVKRCTVHQTOFCVC åCEVKQP UETKRVRJR OGVJQF RQUV KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+' åXCNWG (KNG KPRWV V[RG HKNG PCOG WRNQCF Atrybut GPEV[RG zawarty w pierwszej parze znaczników kodu formularza oznacza, e powinien być w stanie obsłu yć wiele typów danych, włączając w to pliki. Nale y równie zauwa yć, e formularz musi korzystać z metody 2156. Wartość ukrytego pola /#:A(+.'A5+' spełnia w formularzu rolę ograniczenia wielkości przetwarzanego pliku (wyra onej w bajtach) i musi znajdować się przed definicją pola HKNG, które słu y do utworzenia na formularzu odpowiedniego przycisku (rysunek 11.16). 402
  • 36.
    Zarządzanie zawartością strony— przykład Tabela 11.1. Dane dotyczące pliku umieszczanego Począwszy od wersji 4.1 języka PHP, dostęp na serwerze mogą zostać uzyskane przy u yciu do pliku umieszczonego na serwerze mo e być powy szych elementów tablicy uzyskany przy u yciu zmiennej superglobalnej Zmienna tablicowa $_FILES A(+.'5. W przypadku wcześniejszych wersji (jeśli uaktywniono parametr TGIKUVGTAINQDCNU) Indeks Znaczenie nale ało skorzystać ze zmiennej tablicowej PCOG Oryginalna nazwa pliku (przechowywanego *662A2156A(+.'5 lub po prostu ze zmiennej na komputerze u ytkownika). WRNQCF, powiązanej z nazwą pola HKNG. V[RG Typ MIME pliku określony przez przeglądarkę. Zmiennej plikowej zostaną przypisane wartości UKG Wielkość pliku umieszczanego na serwerze tablicy wymienione w tabeli 11.1. (wyra ona w bajtach). VORAPCOG Tymczasowa nazwa pliku po umieszczeniu Po pobraniu pliku przez skrypt PHP funkcja na serwerze. OQXGAWRNQCFGFAHKNG mo e go przenieść z katalogu tymczasowego w jego docelowe poło enie. OQXGAWRNQCFGFAHKNG PCYCARNKMWAV[OECUQYGIQ å PCYCARNKMWAFQEGNQYGIQ Po wywołaniu funkcji zakończonym powodzeniem tymczasowa wersja pliku zostanie usunięta Zarządzanie plikami z serwera. Aby jednak tak było, serwer WWW musi dysponować prawem zapisu do katalogu, w którym zostanie umieszczony plik. Mając to na uwadze, na początku dokonam modyfikacji pliku konfiguracyjnego języka PHP o nazwie php.ini tak, aby mo liwe było umieszczanie plików na serwerze, a następnie zostanie stworzony sam skrypt realizujący to zadanie. 403
  • 37.
    Rozdział 11. Aby przygotować serwer, 3. Zapisać plik i ponownie uruchomić należy wykonać następujące kroki: serwer WWW (rysunek 11.18). CRCEJGEVN ITCEGHWN 1. W edytorze tekstu otworzyć plik php.ini. Powy sze polecenie słu y do ponownego 2. W File Uploads zmodyfikować poni sze uruchomienia serwera Apache działającego parametry (rysunek 11.17): pod systemem operacyjnym UNIX. HKNGAWRNQCFU 1P U ytkownicy systemu Mac OS X WRNQCFAVORAFKT VOR w celu ponownego uruchomienia serwera WRNQCFAOCZAHKNGUKG / mogą u yć panelu Sharing, natomiast Pierwszy parametr pozwala na umieszczanie w przypadku systemu Windows nale y plików na serwerze lub blokuje taką mo liwość. posłu yć się apletem Usługi znajdującym Drugi parametr pozwala określić miejsce, się w Panelu sterowania lub innym w którym tymczasowo będą przechowywane narzędziem współpracującym pliki umieszczane na serwerze. W przypadku z serwerem WWW. większości systemów operacyjnych przed parametrem tym mo na bez większych obaw 4. Utworzyć nowy katalog o nazwie uploads umieścić znak komentarza (znak średnika). znajdujący się poza strukturą katalogową U ytkownicy systemów Mac OS X i UNIX serwera WWW. Katalog ten będzie spełniał zazwyczaj dla parametru ustawiają katalog rolę docelowego miejsca, w którym będą Zarządzanie plikami /tmp, natomiast w przypadku systemu umieszczane pliki na serwerze. Ze względu Windows powinni korzystać z katalogu na zabezpieczenia katalog nie powinien określonego ście ką C:PHPuploadtemp. być częścią struktury katalogowej serwera WWW. Ostatni z wymienionych parametrów słu y do określenia maksymalnej wielkości plików (wyra onej w megabajtach) umieszczanych na serwerze. Rysunek 11.17. Sekcja File Uploads pliku php.ini odpowiedzialna za obsługę plików umieszczanych na serwerze Rysunek 11.18. Aby zmiany dokonane w pliku konfiguracyjnym języka PHP zostały uwzględnione, konieczne jest ponowne uruchomienie serwera WWW 404
  • 38.
    Zarządzanie zawartością strony— przykład 5. Ustawić dla katalogu uploads takie uprawnienia, aby serwer WWW mógł w nim umieszczać pliki. Pewna, ale mniej bezpieczna metoda polega na wykonaniu polecenia EJOQF WRNQCFU (systemy UNIX i Mac OS X). W przypadku systemu Windows nale y kliknąć katalog prawym przyciskiem myszy, a następnie wybrać pozycję Udostępnianie. Spowoduje to wyświetlenie okna zawierającego kartę Udostępnianie (rysunek 11.19). W zale ności od stosowanego systemu operacyjnego mo e się okazać, e będzie mo liwe umieszczanie plików na serwerze bez konieczności wykonywania tego kroku. Aby się o tym przekonać, przed modyfikacją uprawnień Rysunek 11.19. Karta Udostępnianie nale y wykonać poni szy skrypt. Jeśli zostaną w systemie Windows pozwala na określenie, wyświetlone komunikaty podobne do pokazanego kto będzie dysponował dostępem do katalogu na rysunku 11.20, nale y dokonać zmiany w uprawnieniach. Zarządzanie plikami Wskazówki Wartość pola /#:A(+.'A5+' ogranicza w przeglądarce wielkość pliku. Plik konfiguracyjny języka PHP dysponuje własnymi ograniczeniami. Mo na równie przeprowadzić walidację wielkości pliku umieszczonego na serwerze przy u yciu skryptu PHP. Parametr RQUVAOCZAUKG zawarty w pliku php.ini słu y do określenia maksymalnej ilości danych (wyra onej w megabajtach), które mogą zostać Rysunek 11.20. Jeśli uprawnienia nie umieszczone na serwerze przy u yciu jednego zostaną poprawnie zdefiniowane, pojawią się skryptu. Domyślnie jest to 8 MB. komunikaty błędów podobne do pokazanego W języku PHP w wersji 4.2 nowością jest indeks błędów zmiennej tablicowej A(+.'5. Jego zadaniem jest przechowywanie dowolnych informacji dotyczących błędów powiązanych z plikiem umieszczanym na serwerze. Ze względu na czas wymagany Jeśli mamy na uwadze kwestię zabezpieczeń, do umieszczenia du ego pliku przechowywanie plików umieszczanych na serwerze mo e być konieczna na serwerze poza strukturą katalogów serwera modyfikacja wartości parametru WWW jest bardziej wskazane. Dzięki temu OCZAGZGEWVKQPAVKOG zawartego uniemo liwi się u ytkownikom uzyskanie w pliku php.ini lub tymczasowe bezpośredniego dostępu do plików i uniknie się przekazanie jej do skryptu przy zagro enia związanego z umieszczaniem katalogu u yciu funkcji UGVAVKOGANKOKV . dysponującego mało restrykcyjnymi uprawnieniami w miejscu publicznie dostępnym. 405
  • 39.
    Rozdział 11. Aby utworzyć skrypt add_file.php, KH GORV[ A2156= FGUETKRVKQP ? ] F GUECRGAFCVC należy wykonać następujące kroki: å A2156= FGUETKRVKQP ? _ GNUG ] 1. W edytorze tekstu utworzyć nowy skrypt PHP F (listing 11.7). _ !RJR .KUVKPI CFFAHKNGRJR Podobnie jak w przypadku omawianego RCIGAVKVNG 7OKGUECPKG RNKMW wcześniej skryptu add_url.php, dla pola åPC UGTYGTG KPENWFG KPENWFGUPCINQYGMJVON FGUETKRVKQP zostanie przeprowadzana najprostsza walidacja. Ze względu na to, 2. Sprawdzić, czy wypełniono formularz e pozostałe pola formularza nie wymagają i przeprowadzić walidację wartości pola sprawdzenia, zastosowano tylko jedną FGUETKRVKQP. instrukcję warunkową. KH KUUGV A2156= UWDOKV ? ] W celu określenia, czy rozmiar pliku TGSWKTGAQPEG O[USNAEQPPGEVRJR HWPEVKQP GUECRGAFCVC FCVC ] umieszczanego na serwerze zawiera się INQDCN FDE w zało onym przedziale mo na równie KH KPKAIGV OCIKEASWQVGUAIRE ] sprawdzić jego wielkość. FCVC UVTKRUNCUJGU FCVC _ TGVWTP O[USNATGCNAGUECRGAUVTKPI Zarządzanie plikami å VTKO FCVC FDE _ Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze !RJR .KUVKPI CFFAHKNGRJR 5VTQPC RQYCNC W [VMQYPKMQO WOKG EKè RNKMK PC UGTYGTG 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. RCIGAVKVNG 7OKGUECPKG RNKMW PC UGTYGTG KPENWFG KPENWFGUPCINQYGMJVON KH KUUGV A2156= UWDOKV ? ] 1DU WIC HQTOWNCTC TGSWKTGAQPEG O[USNAEQPPGEVRJR 2Q æEGPKG DCæ FCP[EJ (WPMELC WUWYCLæEC PCM K QDEKPCLæEC FCPG YRTQYCFQPG Y HQTOWNCTW HWPEVKQP GUECRGAFCVC FCVC ] INQDCN FDE KH KPKAIGV OCIKEASWQVGUAIRE ] FCVC UVTKRUNCUJGU FCVC _ TGVWTP O[USNATGCNAGUECRGAUVTKPI VTKO FCVC FDE _ -QPKGE UGMELK HWPMELK GUECRGAFCVC 406
  • 40.
    Zarządzanie zawartością strony— przykład 3. Wstawić do bazy danych rekord powiązany 4. Utworzyć nowy plik. z plikiem umieszczanym na serwerze. KH TGUWNV ] SWGT[ +05'46 +061 WRNQCFU HKNGAPCOG GZVGPUKQP GZRNQFG åHKNGAUKG HKNGAV[RG FGUETKRVKQP å A(+.'5= WRNQCF ?= PCOG ? åWRNQCFAFCVG 8#.7'5 WKF O[USNAKPUGTVAKF å ] A(+.'5= WRNQCF ?= PCOG ?_ HKNGPCOG WKF GZVGPUKQP=? å] A(+.'5= WRNQCF ?= UKG ?_ å ] A(+.'5= WRNQCF ?= V[RG ?_ Plik zostanie zapisany na serwerze pod nową å F 019 nazwą. Takie rozwiązanie jest o wiele bardziej TGUWNV O[USNASWGT[ SWGT[ bezpieczne ni w przypadku posługiwania się oryginalną nazwą nadaną przez u ytkownika. Informacja o ka dym pliku umieszczonym Nazwa pliku będzie zło ona z wartości na serwerze zostanie zapisana w bazie bazodanowego pola WRNQCFAKF (pobranej danych. W tym celu zostanie zastosowana przy u yciu funkcji O[USNAKPUGTVAKF ), wielowymiarowa zmienna tablicowa za którą zostanie wstawiona kropka A(+.'5, która będzie przechowywała i rozszerzenie oryginalnego pliku (uzyskanego oryginalną nazwę pliku, jego wielkość poprzez rozkład jego nazwy). Przykładowo, i typ MIME. Wszystkie te dane zostaną dokument o nazwie chapter.doc mo e przyjąć pobrane z przeglądarki internetowej. nazwę 231.doc, natomiast plik imagename.jpg Dodatkowo zostanie zapisany opis zostanie zapisany jako 49.jpg. oraz aktualna data i godzina. Zarządzanie plikami Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy 5RTCYFGPKG QDGEPQ EK QRKUW PKG LGUV Y[OCICPG KH GORV[ A2156= FGUETKRVKQP ? ] F GUECRGAFCVC A2156= FGUETKRVKQP ? _ GNUG ] F _ QFCPKG TGMQTFW FQ DC[ FCP[EJ SWGT[ +05'46 +061 WRNQCFU HKNGAPCOG HKNGAUKG HKNGAV[RG FGUETKRVKQP WRNQCFAFCVG 8#.7'5 ] A(+.'5= WRNQCF ?= PCOG ?_ ] A(+.'5= WRNQCF ?= UKG ?_ ] A(+.'5= WRNQCF ?= V[RG ?_ F 019 TGUWNV O[USNASWGT[ SWGT[ KH TGUWNV ] 7VYQTGPKG PCY[ RNKMW GZVGPUKQP GZRNQFG A(+.'5= WRNQCF ?= PCOG ? WKF O[USNAKPUGTVAKF +FGPV[HKMCVQT RNKMW WOKGUECPGIQ PC UGTYGTG HKNGPCOG WKF GZVGPUKQP=? 2TGPQUGPKG RNKMW KH OQXGAWRNQCFGFAHKNG A(+.'5= WRNQCF ?= VORAPCOG ? WRNQCFU HKNGPCOG ] GEJQ R 2NKM QUVC WOKGUEQP[ PC UGTYGTG R 407
  • 41.
    Rozdział 11. 5. Skopiować plik w docelowe miejsce W celu przeniesienia pliku tymczasowego na serwerze. w docelowe miejsce (katalog uploads, KH OQXGAWRNQCFGFAHKNG A(+.'5 gdzie plik uzyska nową nazwę) nale y å= WRNQCF ?= VORAPCOG ? WRNQCFU u yć funkcji OQXGAWRNQCFGFAHKNG . å HKNGPCOG ] Jeśli przeniesienie pliku nie będzie GEJQ R 2NKM QUVC WOKGUEQP[ mo liwe (rysunek 11.20), z bazy danych åPC UGTYGTG R zostanie usunięty rekord i pojawi się _ GNUG ] komunikat błędu. GEJQ R HQPV EQNQT TGF å2TGPKGUKGPKG RNKMW PKG D[ Q 6. Dokończyć tworzenie instrukcji åOQ NKYGHQPV R warunkowej i skryptu PHP. SWGT[ '.'6' (41/ WRNQCFU 9*'4' åWRNQCFAKF WKF _ GNUG ] TGUWNV O[USNASWGT[ SWGT[ GEJQ R HQPV EQNQT TGF 0C UMWVGM _ åD úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG åPKG OQI Q QUVCè RTGVYQTQPG å2TGRTCUCO[ C CKUVPKC æ åPKGFQIQFPQ èHQPV R _ O[USNAENQUG _ ! Zarządzanie plikami Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy _ GNUG ] GEJQ R HQPV EQNQT TGF 2TGPKGUKGPKG RNKMW PKG D[ Q OQ NKYGHQPV R 7UWPKúEKG TGMQTFW DC[ FCP[EJ SWGT[ '.'6' (41/ WRNQCFU 9*'4' WRNQCFAKF WKF TGUWNV O[USNASWGT[ SWGT[ _ _ GNUG ] ,G NK CR[VCPKG PC DCKG FCP[EJ PKG QUVCPKG Y[MQPCPG RTCYKF QYQ GEJQ R HQPV EQNQT TGF 0C UMWVGM D úFW U[UVGOQYGIQ Y[U CPG CR[VCPKG PKG OQI Q QUVCè RTGVYQTQPG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R _ O[USNAENQUG COMPKúEKG RQ æEGPKC DCæ FCP[EJ _ -QPKGE KPUVTWMELK YCTWPMQYGL QDU WIWLæEGL FCPG YRTQYCFCPG Y HQTOWNCTW ! HQTO GPEV[RG OWNVKRCTVHQTOFCVC CEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? ! OGVJQF RQUV KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+' XCNWG 408
  • 42.
    Zarządzanie zawartością strony— przykład 7. Zdefiniować formularz zawarty Co prawda formularz jest bardzo prosty, na stronie HTML. ale zawiera trzy niezbędne elementy HQTO GPEV[RG OWNVKRCTVHQTOFCVC związane z umieszczaniem plików åCEVKQP !RJR GEJQ A5'48'4= 2*2A5'.( ? na serwerze — atrybut GPEV[RG, å! OGVJQF RQUV ukryte pole /#:A(+.'A5+' i pole HKNG. KPRWV V[RG JKFFGP PCOG /#:A(+.'A5+' 8. Zakończyć tworzenie skryptu PHP. åXCNWG !RJR KPENWFG KPENWFGUUVQRMCJVON HKGNFUGV NGIGPF 9 EGNW WOKGUEGPKC ! åRNKMW PC UGTYGTG PCNG [ Y[RG PKè åHQTOWNCTNGIGPF R D 2NKMD KPRWV V[RG HKNG åPCOG WRNQCF R R D 1RKUD VGZVCTGC åPCOG FGUETKRVKQP EQNU åTQYU VGZVCTGC R HKGNFUGV Zarządzanie plikami FKX CNKIP EGPVGT KPRWV V[RG UWDOKV åPCOG UWDOKV XCNWG 9[ NKL FKX HQTO Listing 11.7. Skrypt pozwala u ytkownikowi umieścić plik na serwerze — ciąg dalszy HKGNFUGV NGIGPF 9 EGNW WOKGUEGPKC RNKMW PC UGTYGTG PCNG [ Y[RG PKè HQTOWNCTNGIGPF R D 2NKMD KPRWV V[RG HKNG PCOG WRNQCF R R D 1RKUD VGZVCTGC PCOG FGUETKRVKQP EQNU TQYU VGZVCTGC R HKGNFUGV FKX CNKIP EGPVGT KPRWV V[RG UWDOKV PCOG UWDOKV XCNWG 9[ NKL FKX HQTO -QPKGE HQTOWNCTC !RJR KPENWFG KPENWFGUUVQRMCJVON Q æEGPKG UVQRMK *6/. ! 409
  • 43.
    Rozdział 11. 9. Zapisać plik pod nazwą add_file.php, umieścić go na serwerze WWW i przetestować przy u yciu przeglądarki internetowej (rysunki 11.21 i 11.22). Wskazówki Obecność pliku umieszczonego na serwerze mo e równie zostać sprawdzona przy u yciu funkcji KUAWRNQCFGFAHKNG . W celu odwołania się do katalogów u ytkownicy systemu Windows muszą skorzystać ze znaku lub , a zatem zamiast ście ki C: nale y u yć C:/ Rysunek 11.21. Formularz słu ący lub C:. Wynika to stąd, e w języku do umieszczania plików na serwerze PHP znak jest wykorzystywany przez funkcję GUECRGAFCVC . Jeśli jest wykorzystywana starsza wersja języka PHP, mo e nie być mo liwe Zarządzanie plikami zastosowanie zmiennej tablicowej A(+.'5. Na skutek tego zamiast funkcji OQXGAWRNQCFGFAHKNG konieczne będzie u ycie funkcji EQR[ . Jeśli oba pliki mają taką samą nazwę, funkcja OQXGAWRNQCFGFAHKNG nadpisze istniejący plik bez wcześniejszego ostrze enia. Po przygotowaniu ostatecznej wersji produkcyjnej skryptu w celu wyeliminowania Rysunek 11.22. Wygląd strony po udanym umieszczeniu pliku na serwerze w przyszłości wszelkich komunikatów błędów nale y przed wywołaniami funkcji OQXGAWRNQCFGFAHKNG wstawić znak . 410
  • 44.
    Zarządzanie zawartością strony— przykład Przeglądanie i pobieranie plików Moduł administracyjny Ostatnie dwa skrypty omawianej aplikacji pozwolą aplikacji u ytkownikom przeglądnąć pliki umieszczone Chocia w przypadku omawianej na serwerze, a następnie je pobrać (w danej aplikacji nie stworzono jej części chwili tylko jeden). Skrypt słu ący do przeglądania administracyjnej, to jednak nie jest plików jest dość prosty, natomiast skrypt to zadanie trudne do zrealizowania. Na początku nale y do tabeli WRNQCFU umo liwiający ich pobieranie wymaga częstego dodać pole CRRTQXGF. Następnie stosowania funkcji języka PHP o nazwie JGCFGT . nale y tak zmodyfikować zarówno W celu stworzenia skryptu view_files.php plik add_url.php, jak i add_file.php, nale y wykonać następujące kroki: aby domyślnie wartość pola CRRTQXGF wynosiła N. Z myślą o części 1. W edytorze tekstu utworzyć nowy skrypt PHP administracyjnej aplikacji nale y (listing 11.8). stworzyć stronę, na której zostaną wyświetlone wszystkie elementy, które !RJR .KUVKPI XKGYAHKNGURJR jeszcze nie zatwierdzono. W celu RCIGAVKVNG 2TGINæFCPKG RNKMÎY KPENWFGAQPEG KPENWFGUPCINQYGMJVON zaakceptowania dowolnego elementu nale y dla odpowiedniego rekordu TGSWKTGAQPEG O[USNAEQPPGEVRJR tabeli wykonać polecenie 72#6' i zmienić wartość pola CRRTQXGF na Y. HKTUV 647' Zarządzanie plikami Jedną z zalet systemu słu ącego do umieszczania plików na serwerze Zmienna HKTUV spełnia taką samą rolę jak jest łatwość kojarzenia plików z danymi w skrypcie view_urls.php. Zmienna zostanie na ich temat przechowywanymi w bazie wykorzystana przy tworzeniu nagłówka danych (gdy do tworzenia nazw plików i w celu określenia, czy będzie mo liwe jest wykorzystywana wartość pola przeglądanie niektórych plików. WRNQCFAKF). Jeśli zostanie utworzony skrypt administracyjny słu ący do 2. Pobrać z bazy danych informacje usuwania plików z serwera (z katalogu o wszystkich plikach. uploads), mo na równie usunąć z tabeli SWGT[ 5'.'%6 WRNQCFAKF HKNGAPCOG powiązany z nim rekord. å4170 HKNGAUKG #5 HU FGUETKRVKQP å#6'A(14/#6 WRNQCFAFCVG / G ; #5 F å(41/ WRNQCFU 14'4 $; WRNQCFAFCVG '5% TGUWNV O[USNASWGT[ SWGT[ Powy sze zapytanie zwróci dla ka dego pliku umieszczonego na serwerze wartości przechowywane w polach WRNQCFAKF, HKNGAPCOG, FGUETKRVKQP, a ponadto sformatowaną datę. Na początku zostaną wyświetlone informacje dotyczące najnowszych plików. Jednocześnie zapytanie pozwoli na uzyskanie wielkości plików (wyra onej w kilobajtach), co będzie mo liwe poprzez podzielenie przechowywanej wartości przez 1024, a następnie zaokrąglenie otrzymanej liczby. 411
  • 45.
    Rozdział 11. Listing 11.8. Skrypt view_files.php wyświetla pliki umieszczone na serwerze wraz z ich opisem, wielkością i datą wykonania operacji !RJR .KUVKPI XKGYAHKNGURJR 5VTQPC RQYCNC W [VMQYPKMQO RTGINæFCè RNKMK WOKGUEQPG PC UGTYGTG 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. RCIGAVKVNG 2TGINæFCPKG RNKMÎY KPENWFGAQPEG KPENWFGUPCINQYGMJVON TGSWKTGAQPEG O[USNAEQPPGEVRJR 2Q æEGPKG DCæ FCP[EJ HKTUV 647' +PKELCNKCELC OKGPPGL 9[U CPKG CR[VCPKC FQ DC[ FCP[EJ SWGT[ 5'.'%6 WRNQCFAKF HKNGAPCOG 4170 HKNGAUKG #5 HU FGUETKRVKQP #6'A(14/#6 WRNQCFAFCVG / G ; #5 F (41/ WRNQCFU 14'4 $; WRNQCFAFCVG '5% TGUWNV O[USNASWGT[ SWGT[ 9[ YKGVNGPKG YU[UVMKEJ CFTGUÎY 74. YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV /;53.A#551% ] ,G NK LGUV VQ RKGTYU[ TGMQTF QUVCPKG WVYQTQPC VCDGNC JGCFGT KH HKTUV ] GEJQ VCDNG DQTFGT YKFVJ EGNNURCEKPI EGNNRCFFKPI CNKIP EGPVGT VT Zarządzanie plikami VF CNKIP NGHV YKFVJ HQPV UKG 0CYC RNKMWHQPV VF VF CNKIP NGHV YKFVJ HQPV UKG 1RKUHQPV VF VF CNKIP EGPVGT YKFVJ HQPV UKG 4QOKCT RNKMWHQPV VF VF CNKIP NGHV YKFVJ HQPV UKG CVC WOKGUEGPKC RNKMW PC UGTYGTGHQPV VF VT _ -QPKGE RúVNK YCTWPMQYGL G OKGPPæ HKTUV 9[ YKGVNC YU[UVMKG TGMQTF[ GEJQ VT VF CNKIP NGHV C JTGH FQYPNQCFAHKNGRJR!WKF] TQY= WRNQCFAKF ?_ ] TQY = HKNGAPCOG ?_C VF VF CNKIP NGHV UVTKRUNCUJGU TQY= FGUETKRVKQP ? VF VF CNKIP EGPVGT ] TQY= HU ?_MDVF VF CNKIP NGHV ] TQY= F ?_VF VT P HKTUV (#.5' YTÎEQPQ LGFGP TGMQTF _ -QPKGE RúVNK YJKNG ,G NK PKG Y[ YKGVNQPQ CFPGIQ TGMQTFW KH HKTUV ] GEJQ FKX CNKIP EGPVGT #MVWCNPKG PKG OC CFPGIQ RNKMWFKX _ GNUG ] GEJQ VCDNG COMPKúEKG VCDGNK _ O[USNAENQUG COMPKúEKG RQ æEGPKC DCæ FCP[EJ KPENWFGAQPEG KPENWFGUUVQRMCJVON Q æEGPKG UVQRMK *6/. ! 412
  • 46.
    Zarządzanie zawartością strony— przykład 3. Wyświetlić wszystkie rekordy. Ka da nazwa pliku spełnia rolę odnośnika YJKNG TQY O[USNAHGVEJACTTC[ TGUWNV do skryptu download_file.php, przy czym å/;53.A#551% ] do adresu URL jest dołączana wartość pola KH HKTUV ] WRNQCFAKF. Wartość ta zostanie wykorzystana GEJQ VCDNG DQTFGT YKFVJ przez skrypt słu ący do pobierania plików åEGNNURCEKPI EGNNRCFFKPI w celu określenia, który z nich ma być åCNKIP EGPVGT przesłany do przeglądarki internetowej. VT VF CNKIP NGHV YKFVJ HQPV 4. Jeśli nie znaleziono adnych plików åUKG 0CYC RNKMWHQPV VF lub zamknięto tabelę, nale y wyświetlić VF CNKIP NGHV YKFVJ HQPV åUKG 1RKUHQPV VF komunikat. VF CNKIP EGPVGT YKFVJ HQPV KH HKTUV ] åUKG 4QOKCT RNKMWHQPV VF GEJQ FKX CNKIP EGPVGT #MVWCNPKG VF CNKIP NGHV YKFVJ HQPV åPKG OC CFPGIQ RNKMWFKX åUKG CVC WOKGUEGPKC RNKMW _ GNUG ] åPC UGTYGTGHQPV VF GEJQ VCDNG VT _ _ GEJQ VT 5. Zakończyć tworzenie skryptu PHP. VF CNKIP NGHV C JTGH å FQYPNQCFAHKNGRJR!WKF O[USNAENQUG å] TQY= WRNQCFAKF ?_ ] TQY KPENWFGAQPEG KPENWFGUUVQRMCJVON ! Zarządzanie plikami å= HKNGAPCOG ?_C VF 6. Zapisać plik pod nazwą view_files.php, VF CNKIP NGHV åUVTKRUNCUJGU TQY= FGUETKRVKQP ? umieścić go na serwerze WWW i przetestować å VF przy u yciu przeglądarki internetowej. VF CNKIP EGPVGT å] TQY= HU ?_MDVF VF CNKIP NGHV ] TQY= F ?_VF VT P HKTUV (#.5' _ Równie w tym przypadku powy szy kod działa podobnie jak w poprzednim skrypcie view_urls.php. Zmienna HKTUV jest u ywana raz przy tworzeniu nagłówka (rysunek 11.23), po czym są wyświetlane wszystkie rekordy. Przy odwoływaniu się do funkcji O[USNAHGVEJACTTC[ jest stosowana stała /;53.A#551%, np. w celu wyświetlenia wartości nale y u yć instrukcji TQY= HU ?. Rysunek 11.23. Strona wyświetlona po uruchomieniu skryptu view_files.php 413
  • 47.
    Rozdział 11. Aby utworzyć skrypt download_file.php, W celu pobrania pliku konieczna jest należy wykonać następujące kroki: znajomość jego nazwy, typu, wielkości. Wszystkie te dane zostaną pobrane z bazy 1. W edytorze tekstu utworzyć nowy skrypt PHP danych poprzez wykonanie zapytania, (listing 11.9). w którym umieszczono instrukcje !RJR .KUVKPI FQYPNQCFAHKNGRJR A)'6= WKF ?, a następnie wywołanie funkcji NKUV . 2. Sprawdzić wartość pola WRNQCFAKF. 4. Określić nazwę pliku. KH KUAPWOGTKE A)'6= WKF ? ] GZVGPUKQP GZRNQFG HP Przed kontynuacją nale y upewnić się, VJGAHKNG WRNQCFU A)'6= WKF ? czy skrypt pobrał poprawną wartość pola å GZVGPUKQP=? WRNQCFAKF, która powinna być liczbą. Działanie powy szego kodu jest 3. Pobrać informacje na temat pliku. podobne do funkcjonowania mechanizmu nazewniczego zastosowanego w skrypcie TGSWKTGAQPEG O[USNAEQPPGEVRJR add_file.php, z tą ró nicą, e w tym SWGT[ 5'.'%6 HKNGAPCOG HKNGAV[RG przypadku dodano ście kę postaci åHKNGAUKG (41/ WRNQCFU 9*'4' WRNQCFAKF ../uploads/. Przypisanie takiego łańcucha å ] A)'6= WKF ?_ zmiennej ułatwi odwoływanie się do pliku TGUWNV O[USNASWGT[ SWGT[ w dalszej części skryptu. Zarządzanie plikami NKUV HP HV HU O[USNAHGVEJACTTC[ å TGUWNV /;53.A07/ O[USNAENQUG Listing 11.9. Poprzez przesłanie do przeglądarki internetowej odpowiednich nagłówków skrypt wymusza wykonanie operacji pobrania pliku !RJR .KUVKPI FQYPNQCFAHKNGRJR 5VTQPC RQYCNC PC RQDTCPKG RNKMW UGTYGTC RT[ W [EKW HWPMELK JGCFGT KH KUAPWOGTKE A)'6= WKF ? ] +FGPV[HKMCVQT RNKMW WOKGUEQPGIQ PC UGTYGTG TGSWKTGAQPEG O[USNAEQPPGEVRJR 2Q æEGPKG DCæ FCP[EJ 2QDTCPKG KPHQTOCELK PC VGOCV RNKMW SWGT[ 5'.'%6 HKNGAPCOG HKNGAV[RG HKNGAUKG (41/ WRNQCFU 9*'4' WRNQCFAKF ] A)'6= WKF ?_ TGUWNV O[USNASWGT[ SWGT[ NKUV HP HV HU O[USNAHGVEJACTTC[ TGUWNV /;53.A07/ O[USNAENQUG COMPKúEKG RQ æEGPKC DCæ FCP[EJ 1MTG NGPKG PCY[ RNKMW WOKGUEQPGIQ PC UGTYGTG GZVGPUKQP GZRNQFG HP VJGAHKNG WRNQCFU A)'6= WKF ? GZVGPUKQP=? 5RTCYFGPKG E[ RNKM KUVPKGLG KH HKNGAGZKUVU VJGAHKNG ] 414
  • 48.
    Zarządzanie zawartością strony— przykład 5. Sprawdzić, czy plik istnieje na serwerze. Wywołania funkcji JGCFGT powodują KH HKNGAGZKUVU VJGAHKNG ] przesłanie do przeglądarki pliku i utworzenie okna dialogowego (rysunek 11.24). W oparciu Przed wysłaniem pliku do przeglądarki o typ MIME (zapisany w bazie danych po internetowej nale y upewnić się, czy istnieje. umieszczeniu pliku na serwerze) pierwszy wiersz Jeśli plik istnieje na serwerze, funkcja ma za zadanie przygotowanie przeglądarki HKNGAGZKUVU zwróci wartość TRUE. do odebrania pliku. Drugi wiersz przy u yciu 6. Wysłać plik. oryginalnej nazwy pliku przechowywanego na komputerze u ytkownika określa nazwę JGCFGT %QPVGPV6[RG CRRNKECVKQP HV pobieranego pliku. Ostatnia funkcja JGCFGT JGCFGT %QPVGPVFKURQUKVKQP CVVCEJOGPV informuje o ilości przesyłanych danych. åHKNGPCOG HP JGCFGT %QPVGPV.GPIVJ HU Równie ta informacja została ustalona TGCFHKNG VJGAHKNG po umieszczeniu pliku na serwerze. Zawartość OGUUCIG R 2NKM QUVC Y[U CP[R pliku jest przesyłana przy u yciu funkcji TGCFHKNG , która po jego odczytaniu natychmiast przekazuje zawartość strony do przeglądarki internetowej. Listing 11.9. Poprzez przesłanie do przeglądarki internetowej odpowiednich nagłówków skrypt Zarządzanie plikami wymusza wykonanie operacji pobrania pliku — ciąg dalszy 9[U CPKG RNKMW JGCFGT %QPVGPV6[RG CRRNKECVKQP HV JGCFGT %QPVGPVFKURQUKVKQP CVVCEJOGPV HKNGPCOG HP JGCFGT %QPVGPV.GPIVJ HU TGCFHKNG VJGAHKNG OGUUCIG R 2NKM QUVC Y[U CP[R _ GNUG ] 2NKM PKG KUVPKGLG OGUUCIG R HQPV EQNQT TGF 1FPCNGKGPKG RNKMW PC UGTYGTG PKG D[ Q OQ NKYG 2TGRTCUCO[ C CKUVPKC æ PKGFQIQFPQ èHQPV R _ _ GNUG ] 0KGRTCYKF QY[ KFGPV[HKMCVQT RNKMW WOKGUEQPGIQ PC UGTYGTG OGUUCIG R HQPV EQNQT TGF 2TQUú Y[DTCè RQRTCYP[ RNKM PCLFWLæE[ UKú PC UGTYGTGHQPV R _ 7UVCYKGPKG V[VW W UVTQP[ K FQ æEGPKG PCI ÎYMC *6/. RCIGAVKVNG 2QDKGTCPKG RNKMW KPENWFGAQPEG KPENWFGUPCINQYGMJVON GEJQ OGUUCIG KPENWFGAQPEG KPENWFGUUVQRMCJVON ! 415
  • 49.
    Rozdział 11. 7. Zakończyć instrukcje warunkowe. _ GNUG ] OGUUCIG R HQPV EQNQT å TGF 1FPCNGKGPKG RNKMW PC UGTYGTG åPKG D[ Q OQ NKYG 2TGRTCUCO[ C åCKUVPKC æ PKGFQIQFPQ èHQPV R _ _ GNUG ] OGUUCIG R HQPV EQNQT TGF 2TQUú åY[DTCè RQRTCYP[ RNKM PCLFWLæE[ UKú åPC UGTYGTGHQPV R _ 8. Wprowadzić zawartość strony internetowej. Rysunek 11.24. Kliknięcie odnośnika wywołującego RCIGAVKVNG 2QDKGTCPKG RNKMW skrypt view_files.php powinno spowodować KPENWFGAQPEG KPENWFGUPCINQYGMJVON wyświetlenie pokazanego okna dialogowego GEJQ OGUUCIG KPENWFGAQPEG KPENWFGUUVQRMCJVON ! Tak naprawdę większość przeglądarek internetowych nigdy nie wyświetli tych Zarządzanie plikami informacji. Większość u ytkowników po kliknięciu odnośnika wywołującego skrypt view_files.php zobaczy jedynie okno dialogowe umo liwiające pobranie pliku. Wykorzystanie powy szego kodu źródłowego nie spowoduje obni enia stopnia zabezpieczeń. Dodatkowo kod zostanie zastosowany w przypadku wystąpienia jakiegokolwiek problemu. 9. Zapisać plik pod nazwą download_file.php, umieścić go na serwerze WWW i przetestować przy u yciu przeglądarki internetowej. Wskazówki W języku PHP w wersji 4.3 nowością jest funkcja OKOGAEQPVGPVAV[RG zwracająca typ MIME dla pliku znajdującego się na serwerze. Przeglądarki internetowe w ró ny sposób obsługują operację pobierania plików. Z tego te powodu w celu sprawdzenia zgodności uzyskiwanych wyników skrypt podobny do powy szego powinien zostać przetestowany w miarę mo liwości na jak największej liczbie przeglądarek i platform. 416