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 dostęp. Jeśli chcesz w krótkim czasie nauczyć się tworzyć takie aplikacje, znalazłeś właściwą książkę.
"PHP i MySQL. Dynamiczne strony WWW" nauczy Cię tworzenia dynamicznych 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 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ń.
Książka opisuje:
* 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.
Jeśli chcesz w szybko nauczyć się programowania dynamicznych serwisów internetowych, ta książka będzie Twoim intensywnym kursem. Już po przeczytaniu kilku rozdziałów będziesz w stanie pisać pierwsze programy w PHP korzystające z bazy MySQL, a po przeczytaniu całej książki poradzisz sobie również z tworzeniem bardziej rozbudowanych aplikacji.
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
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
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