Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
IDZ DO
IDZ DO
KATALOG KSI¥¯EK
KATALOG KSI¥¯EK
TWÓJ KOSZYK
TWÓJ KOSZYK
CENNIK I INFORMACJE
CENNIK I INFORMACJE
CZYTELNIA
CZYTELNIA
PHP i MySQL.
Dynamiczne strony
WWW. Szybki start
Autor: Larry Ullman
T³umaczenie: Micha³ Dadan (rozdz. 1 – 7),
Piotr Pilch (rozdz. 8 – 13, dod. A – D)
ISBN: 83-7361-157-6
Tytu³ orygina³u:
PHP and MySQL for Dynamic Web Sites VQPG
Format: B5, stron: 580
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. Jeli chcesz w krótkim czasie nauczyæ siê tworzyæ takie aplikacje, znalaz³e
w³aciw¹ 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.
Jeli 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.
Spis treści
5
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
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
Spis treści
Spis treści
6
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
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
Spis treści
7
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
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
Spis treści
8
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
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
Zarządzanie zawartością strony — przykład
377
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
nowych funkcjach i metodach. Do funkcji tych należy
zaliczyć
i
. Wspomnimy także,
w jaki sposób zrealizować operację umieszczania plików
na serwerze.
Zarządzanie zawartością
strony — przykład
Zarządzanie zawartością strony
Rozdział 11.
378
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,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nową stronę
HTML (listing 11.1).
å !""# $
%&''''#()*
å) + **,
å+ !""# --.
+ !/%&''''#(000+
å+ & (/1 (/1 .
1-.
1 %123"4/5# 1 6%1 5# 1 /
å1+ 7 5!1/"!#8890* .
"1.:%% 15# ;%(1<"17 :."1.
1.
Napisać kod arkusza stylów CSS.
!61 6%1/1+5!! 1-"/!511 .
=#-6 > =5?(#3 -5##& @AAAAAA7 B
5# 1 >
=5?(#3 -5##& @A9A9A97
%--" (#%& %+7 %--" ("(& %+7
å%--" (=## & %+7 %--" (1A& %+7
å (" #%& %+7 (" "(& %+7
å (" =## & %+7 (" 1A& %+7
B
Rysunek 11.1. Domyślny wygląd strony
aplikacji omawianej w tym rozdziale
Tworzenie szablonu
Zarządzanie zawartością strony — przykład
379
Listing 11.1. Plik naglowek.html rozpoczyna się od kodu formatującego stronę HTML i zawiera wymagany
kod arkusza stylów CSS
!""# $
* %&''''#()*) + **,+ !""# --.
+ !/%&''''#(000+ + & (/1 (/1 .
C 1-.
9 1 %123"4/5# 1 6%1 5# 1 /1+ 7 5!1/"!#8890* .
, "1.:%% 15# ;%(1<"17 :."1.
D !61 6%1/1+5!! 1-"/!511 .
8 =#-6 > =5?(#3 -5##& @AAAAAA7 B
0 5# 1 >
=5?(#3 -5##& @A9A9A97
%--" (#%& %+7 %--" ("(& %+7 %--" (=## & %+7 %--" (1A& %+7
* (" #%& %+7 (" "(& %+7 (" =## & %+7 (" 1A& %+7
B
C 4" ?&" ? > 5##& @,,7 1+-15#"# & # 17 B
9 4" ?&4"!"1- > 5##& @,,7 1+-15#"# & # 17 B
, 4" ?) > 5##& @5555557 1+-15#"# & # 17 B
D - >
8 A# A "6& E1- F G"F 141"5F ! !!1"A7 A# !"H1& %+7
0 41"5"( & #%7
* B
* "1 >
** A# !"H1& *C%+7 A# '1"(& # 7 5##& @AAAAAA7
* (" #%& 9%+7 (" =## & 9%+7 (" 1A& *%+7
*C %--" (#%& 9%+7 %--" (=## & 9%+7 %--" (1A& *%+7
*9 B
*, !61.
*D 1-.
*8 =#-6.
*0
=1 '"-/0I =#-1/ 51!%5" (/ 51%--" (/
"( /51 1.
.
* - 5#!% /* =(5##/@,,.% 5!!/"1.JHK-H "1 H'#L5"K !# %.-.
.
C .
9 - 4"( /#% #'%/ #'%.
, =. 1A/" -1+%% 5!!/ 4" ?.M# (NO' .= .
D 1A/4"1'<3!%% 5!!/ 4" ?.H1(K-P -1!6 ).= .
8 1A/--<3%% 5!!/ 4" ?.#-P -1! ).= .
0 1A/4"1'<A"1!%% 5!!/ 4" ?.H1(K-P %"?".= .
C 1A/--<A"1%% 5!!/ 4" ?.#-P %"?.=.
C -.
C*
C - 4"( /#% 5!!/5# 1 .
CC "!" ( (#'1? .
Tworzenie szablonu
Rozdział 11.
380
4" ?&" ? > 5##& @,,7
å1+-15#"# & # 17 B
4" ?&4"!"1- > 5##& @,,7
å1+-15#"# & # 17 B
4" ?) > 5##& @5555557
å1+-15#"# & # 17 B
- >
A# A "6& E1- F G"F 141"5F
å! !!1"A7 A# !"H1& %+7
41"5"( & #%7
B
"1 >
A# !"H1& *C%+7 A# '1"(&
å # 7 5##& @AAAAAA7
(" #%& 9%+7 (" =## & 9%+7
å (" 1A& *%+7
%--" (#%& 9%+7 %--" (=## & 9%+7
å%--" (1A& *%+7
B
!61.
W przypadku omawianej aplikacji zostanie
wykorzystany arkusz stylów CSS, który
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.
1-.
=#-6.
=1 '"-/0I =#-1/
å51!%5" (/ 51%--" (/
å"( /51 1.
.
- 5#!% /* =(5##/@,,.
å% 5!!/"1.JHK-H "1
åH'#L5"K !# %.-.
.
.
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).
Rysunek 11.2. Wygląd strony, na której w celu
wyróżnienia wierszy i kolumn tabeli zastosowano
obwódki
Tworzenie szablonu
Zarządzanie zawartością strony — przykład
381
Rysunek 11.3. Struktura aplikacji internetowej,
której katalogiem głównym jest katalog html
4.
Utworzyć sekcję powiązaną z odnośnikami
i rozpocząć definiowanie komórek
przechowujących zawartość strony.
- 4"( /#% #'%/ #'%.
=. 1A/" -1+%% 5!!/
å 4" ?.M# (NO' .= .
1A/4"1'<3!%%
å5!!/ 4" ?.H1(K-P -1!6
å).= .
1A/--<3%% 5!!/
å 4" ?.å#-P -1! ).= .
1A/4"1'<A"1!%% 5!!/
å 4" ?.H1(K-P %"?".= .
1A/--<A"1%%
å5!!/ 4" ?.#-P %"?.=.
-.
- 4"( /#% 5!!/5# 1 .
"!" ( (#'1? .
5.
Zapisać plik pod nazwą naglowek.html
i umieścić go na serwerze WWW
(w katalogu includes).
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.
Tworzenie szablonu
Rozdział 11.
382
Aby utworzyć plik stopka.html,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nową stronę
HTML (listing 11.2).
"!" ( * !#%? .
2.
Zakończyć kod środkowego wiersza tabeli.
-.
.
Cała zawartość strony będzie przechowywana
w środkowym wierszu tabeli, którego
definicja zaczyna się w pliku naglowek.html.
Powyższy kod kończy definicję wiersza,
po którym zostanie umieszczony trzeci
i ostatni wiersz.
3.
Zdefiniować ostatni wiersz i zakończyć
tworzenie strony HTML.
.
-.Q =!%7-.
- "( /51 1.Q5#%67 * 6
å - !"(!F 5-.
.
=1.
=#-6.
.
4.
Zapisać plik pod nazwą stopka.html
i umieścić go na serwerze WWW
(w katalogu includes).
Listing 11.2. Plik stopka.html zawiera pozostałe
definicje wyglądu strony HTML
"!" ( * !#%? .
* R# "15 H'#L5" !# 6 .
-.
C .
9
, .
D -.Q =!%7-.
8 - "( /51 1.Q5#%67
* 6 -
!"(!F 5-.
0 .
=1.
* =#-6.
.
Tworzenie szablonu
Zarządzanie zawartością strony — przykład
383
Listing 11.3. Główna strona aplikacji
(w razie potrzeby należy umieścić na niej
bardziej wartościowe informacje)
:%% @ "!" ( " -1+%%
* SNO' !# !1'1
!'"1 "1 63N3 !# 6
" -#NK5H1 "1 (NO'?
C ;%(1<"1 / TJHK-H "1
H'#L5"K !# T7
9 " 53-1<# 51
UT" 53-1! (#'1? TV7
, :.
D %.M% !% !% !% !% !%
!% !% !% !% %.
8 %.M% !% !% !% !% !%
!% !% !% !% %.
0 :%% #NK5H1 "1 !#%?"
" 53-1<# 51 UT" 53-1!!#%? TV7
:.
Rysunek 11.4. Główna strona
Tworzenie zwykłych
stron internetowych
Zanim zajmiemy się najważniejszą częścią
aplikacji internetowej (samym mechanizmem
zarządzania zawartością stron) konieczne będzie
stworzenie jeszcze dwóch stron HTML. Jedna
z nich o nazwie index.php będzie spełniała rolę
głównej strony aplikacji. Z kolei druga o nazwie
mysql_connect.php jest skryptem, którego
zadaniem jest połączenie z serwerem MySQL
i wybranie wymaganej bazy danych (w celu
uzyskania dodatkowych informacji na jej temat
należy zapoznać się z zawartością ramki Schemat
bazy danych zawartej w następnym podrozdziale).
Aby utworzyć główną stronę,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.3).
:%% @ "!" ( " -1+%%
2.
Określić tytuł strony i dołączyć plik
nagłówka HTML.
;%(1<"1 / TJHK-H "1 H'#L5"K
å!# T7
" 53-1<# 51 UT" 53-1! (#'1? TV7
:.
3.
Wypełnić stronę tekstem.
%.M% !% !% !% !% !% !%
å!% !% !% %.
%.M% !% !% !% !% !% !%
å!% !% !% %.
Co prawda posłużyłem się tego typu treścią
(słowo
), ale oczywiście na stronie
głównej można umieścić bardziej wartościowe
informacje.
4.
Dołączyć stopkę HTML.
:%%
" 53-1<# 51 UT" 53-1!!#%? TV7
:.
5.
Zapisać plik pod nazwą index.php, umieścić go
na serwerze WWW i przetestować przy użyciu
przeglądarki internetowej (rysunek 11.4).
Tworzenie zwykłych stron internetowych
Rozdział 11.
384
Listing 11.4. Skrypt łączy z serwerem MySQL
i wybiera bazę danych content
:%% @ "!" ( C 6!2<5# 15%%
* %"?3 H'# % 16
'6 ( 1 -# 3H6!? " -#!W%3
-# =H6 - 65 "? P1!
3X6' 6 ?X1 %H6 NK5H1 "3 !"W
H !1'11 6MY " '6="1 "1
=H6 - 65
C !'"1 "1 P?# !N65
% 1O' 3-H"1PK565 -#!W%3
-# =H6 - 65
9 -1A" 1 UT<M )TF T3!1 1TV7
, -1A" 1 UT<GMM)TF
T%!!'#-TV7
D -1A" 1 UT<MTF T#5#!TV7
8 -1A" 1 UT<$G TF T5# 1 TV7
0 $'"KH "1 %#NK5H1 "
H !1'11 " '6= "1 =H6 - 65
;-=5 / Z 6!2<5# 15 U<MF
<M )F <GMM)V ) -"1
UT$"1 =6N# #X"'1 %#NK5H1 "1
H !1'11 6MY& T 6!2<1#UV V7
6!2<!115<-= U<$G V ) -"1
UT$"1 =6N# #X"'1 '6= "1 =H6
- 65& T 6!2<1#UV V7
* :.
Aby utworzyć skrypt
mysql_connect.php,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.4).
:%% @ "!" ( C 6!2<5# 15%%
Skrypt jest taki sam jak jego poprzednie wersje
wykorzystane w poprzednich rozdziałach
(z wyjątkiem nazwy użytkownika i jego hasła
oraz konfiguracji bazy danych). Skrypt może
zostać stworzony od podstaw lub poprzez
odpowiednią modyfikację poprzedniej wersji.
2.
Określić konfigurację bazy danych w postaci
stałych.
-1A" 1 UT<M )TF T3!1 1TV7
-1A" 1 UT<GMM)TF T%!!'#-TV7
-1A" 1 UT<MTF T#5#!TV7
-1A" 1 UT<$G TF T5# 1 TV7
Mając na względzie kwestię zabezpieczeń
użytkownik łączący się z serwerem MySQL
powinien na potrzeby omawianej aplikacji
dysponować możliwością wykonywania tylko
takich poleceń jak
,
,
i dodatkowo wyłącznie dla bazy danych
content.
3.
Połączyć się z serwerem MySQL i wybrać
bazę danych.
;-=5 / Z 6!2<5# 15 U<MF <M )F
å<GMM)V ) -"1 UT$"1 =6N# #X"'1
å%#NK5H1 "1 H !1'11 6MY& T
å 6!2<1#UV V7
6!2<!115<-= U<$G V ) -"1
åUT$"1 =6N# #X"'1 '6= "1 =H6 - 65& T
å å 6!2<1#UV V7
Aplikacja dysponuje podstawowym
mechanizmem obsługi błędów realizowanym
przez funkcję
. Więcej
informacji na ten temat zawarto w rozdziale 6.
4.
Zakończyć skrypt PHP.
:.
5.
Zapisać plik pod nazwą mysql_connect.php
i umieścić go na serwerze WWW poza
katalogiem głównym (rysunek 11.3).
Wskazówki
W następnym rozdziale zostanie omówiony
przykład, w którym zostaną wykorzystane
bardziej zaawansowane metody obsługi
błędów. Poza tym zamieszczono w nim
zmodyfikowaną wersję skryptu
mysql_connect.php.
W celu uzyskania dodatkowych informacji
na temat praw dostępu do serwera MySQL
należy zapoznać się z zawartością dodatku A.
Tworzenie zwykłych stron internetowych
Zarządzanie zawartością strony — przykład
385
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 —
,
i
.
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
i maksymalnie trzy kategorie. Po wypełnieniu
formularza (adres URL, jego tytuł, opis) dane
zostaną umieszczone w tabeli
.
Następnie w celu dodania do tabeli
od jednego do trzech rekordów (w zależności
od ilości kategorii wybranych przez użytkownika)
zostanie zastosowany klucz główny tabeli
wraz z wartościami pola
.
W celu określenia wartości pola
dla
dodanego adresu URL zostanie wykorzystana
funkcja
, 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
zwróci tę wartość.
W przeciwnym razie nie byłoby możliwe jej
uzyskanie.
Zarządzanie adresami URL
Rozdział 11.
386
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
wykorzystywana
przy zarządzaniu plikami. Całkowita struktura bazy danych może zostać ponownie
zdefiniowana z wykorzystaniem poniższych poleceń:
) G G 3%#-! U3%#-<"- " UV $MS$ $ $ G<$) $F
åA"1< 1 EG)G)UV $ $F A"1<!"H1 $U,V $MS$ $ $F A"1<6%1
åEG)G)UV $ $F -1!5"%"# EG)G)UV [G $F 3%#-<-1
åG $ $F )G) R U3%#-<"-VF R A"1< 1 UA"1< 1VV7
) G G 3<"1! U"1<"- MG$UCV $MS$ $ $ G<$) $F
å3 EG)G)U,V $ $F "1 EG)G)U,V $ $F -1!5"%"# $ $
å$F )G) R U"1<"-VF $Y R 3 U3VV7
) G G 3<6%1! U6%1<"- $$UV $MS$ $ $ G<$) $F
å6%1 EG)G)U*V $ $F )G) R U6%1<"-VF $Y R 6%1 U6%1VV7
) G G 3! U3<"- MG$UCV $MS$ $ $ G<$) $F
å"1<"- MG$UCV $MS$ $ $F 6%1<"- $$UV $MS$ $ $F
å%%#41- G)UV [G T$TF -1<!3= "1- MGUCV $ $F )G)
åR U3<"-VF R "1<"- U"1<"-VF R 6%1<"- U6%1<"-VF R
å-1<!3= "1- U-1<!3= "1-VV7
W celu sprawdzenia struktury bazy danych zawsze można użyć poniższych poleceń języka SQL
(rysunek 11.5).
M G M7
M) nazwa_tabeli7
Rysunek 11.5. Sprawdzenie struktury bazy danych
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
387
Aby utworzyć skrypt add_url.php,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt
PHP (listing 11.5).
:%% @ "!" ( 9 --<3%%
;%(1<"1 / T#-' "1 -1!O' )T7
" 53-1 UT" 53-1! (#'1? TV7
123"1<# 51 UT 6!2<5# 15%%TV7
2.
Sprawdzić, czy formularz został wypełniony
i zastosować funkcję
.
"A U"!!1U;<M\T!3= "T]VV >
å =!N3( A# 3H
A3 5"# 1!5%1<- U;-V >
(#= ;-=57
"A U" "<(1UT ("5<23#1!<(%5TVV >
;- / !"%!!1!U;-V7
B
13 6!2<1<1!5%1<!" (
åU" U;-VF ;-=5V7
B
Podobnie jak w poprzednich rozdziałach,
funkcja
gwarantuje poprawność
przesyłanych danych niezależnie od tego, czy
uaktywniono funkcję Magic Quotes, czy nie.
3.
Przeprowadzić walidację wprowadzonego
adresu URL i jego tytułu.
"A U1 %6U;<M\T3T]VV >
;3 / 1!5%1<-U;<M\T3T]V7
B 1!1 >
;3 / [GM 7
15# T%.A# 5##/1-.#!HW %#-^
å-1! )A# .%.T7 B
"A U1 %6U;<M\T"1T]VV >
; / 1!5%1<-U;<M\T"1T]V7
B 1!1 >
; / [GM 7
15# T%.A# 5##/1-.
å#!HW %#-^ H'W -1!3
å)"1A# .%.T7 B
Listing 11.5. Skrypt pozwala użytkownikom przesyłać adresy URL do bazy danych
:%% @ "!" ( 9 --<3%%
* M# %#H' 3X6?#' "?# -#-^ -1!6 ) -# =H6 - 65
!'"1 "1 63N3 !# 6 " -#NK5H1 "1 (NO'?
C ;%(1<"1 / T#-' "1 -1!O' )T7
9 " 53-1 UT" 53-1! (#'1? TV7
, 123"1<# 51 UT 6!2<5# 15%%TV7 #NK5H1 "1 H =HK - 65
D "A U"!!1U;<M\T!3= "T]VV > =!N3( A# 3H
8 [3 ?5P 3!3'PK5 H ? TT " #=5" PK5 - 1 '%#'-H# 1 ' A# 3H3
0 A3 5"# 1!5%1<- U;-V >
(#= ;-=57
"A U" "<(1UT ("5<23#1!<(%5TVV >
* ;- / !"%!!1!U;-V7
B
C 13 6!2<1<1!5%1<!" ( U" U;-VF ;-=5V7
9 B R# "15 !1?5P" A3 ?5P" 1!5%1<-UV
Zarządzanie adresami URL
Rozdział 11.
388
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
podano wartość.
"A U1 %6U;<M\T-1!5"%"# T]VV >
;- / 1!5%1<-
åU;<M\T-1!5"%"# T]V7
B 1!1 >
;- / TT7 B
Ze względu na to, że w polu
tabeli
nie trzeba wstawiać wartości,
będzie ona przetwarzana, ale tylko wtedy,
gdy zostanie wprowadzona w formularzu.
Jeśli w polu
nie zostanie
wstawiona żadna wartość, zmiennej
stosowanej w zapytaniu będzie przypisywany
pusty łańcuch.
Rysunek 11.6. Jeśli użytkownik nie poda adresu
URL lub jego tytułu, zostanie wyświetlony
komunikat błędu
Listing 11.5. Skrypt pozwala użytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy
, M%'-H1 "1 -1!3 )
D "A U1 %6U;<M\T3T]VV >
8 ;3 / 1!5%1<-U;<M\T3T]V7
0 B 1!1 >
* ;3 / [GM 7
* 15# T%.A# 5##/1-.#!HW %#-^ -1! )A# .%.T7 B
** M%'-H1 "1 H'6 -1!3 )
* "A U1 %6U;<M\T"1T]VV >
*C ; / 1!5%1<-U;<M\T"1T]V7
*9 B 1!1 >
*, ; / [GM 7
*D 15# T%.A# 5##/1-.#!HW %#-^ H'W -1!3 )"1A# .%.T7 B
*8 M%'-H1 "1 '#L5" %# -1!5"%"# U "1 P1! '6 ( 1V
*0 "A U1 %6U;<M\T-1!5"%"# T]VV >
;- / 1!5%1<-U;<M\T-1!5"%"# T]V7
B 1!1 >
;- / TT7 B
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
389
Rysunek 11.7. Użytkownik musi wybrać co najmniej
jedną kategorię dla wprowadzonego adresu URL
5.
Sprawdzić wybraną kategorię.
"A UU;<M\T6%1T] . V )
åU;<M\T6%1*T] . V )
åU;<M\T6%1T]V . V >
;6%1 / ) 7
B 1!1 >
;6%1 / [GM 7
15# T%.A# 5##/1-.
å#!HW %#-^ 5# P "1P P1- K
å?1(#"WA# .%.T7 B
Użytkownik, mając do dyspozycji zbiór
typów zawartych w tabeli
, może
przypisać wprowadzanemu adresowi URL
maksymalnie trzy kategorie. Zakłada się,
że użytkownik wybierze kategorię przy
użyciu pierwszego menu rozwijanego
(
). Niezależnie od tego instrukcja
warunkowa sprawdzi, czy skorzystano
z przynajmniej jednego menu rozwijanego.
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
* M%'-H1 "1 ?1(#""
"A UU;<M\T6%1T] . V ) U;<M\T6%1*T] . V ) U;<M\T6%1T]V .V >
C ;6%1 / ) 7
9 B 1!1 >
, ;6%1 / [GM 7
D 15# T%.A# 5##/1-.#!HW %#-^ 5# P "1P P1- K ?1(#"WA# .%.T7 B
8 "A U;3 QQ ; QQ ;6%1V > _1L" '!H6!?# P1! ' %#HK-?3
0 #-' "1 -1!3 ) -# =1" 3<"1!
C ;2316 / $M ) $ 3<"1! U3F "1F -1!5"%"# V EG M
UT;3TFT;TF T;-TV7
C ;1!3 / Z 6!2<2316 U;2316V7 6?# "1 H%6 "
C* ;"- / Z 6!2<" !1<"-UV7 #= "1 "-1 6A"?# 63N3
C
CC "A U;"- . V > _1L" H#!N# '6?# 1 %'"-N#'#
C9 '#H1 "1 H%6 "
C, ;2316 / T$M ) $ 3! U"1<"-F 6%1<"-F %%#41-F -1<!3= "1-V EG M T7
CD "A U;<M\T6%1T] . V >
C8 ;2316 / U;"-F >;<M\T6%1T]BF TTF $UVVF 7 B
Zarządzanie adresami URL
Rozdział 11.
390
6.
Dodać adres URL do tabeli
.
"A U;3 QQ ; QQ ;6%1V >
#-' "1 -1!3 ) -# =1"
å3<"1!
;2316 / $M ) $ 3<"1! U3F
å"1F -1!5"%"# V EG M UT;3TF
åT;TF T;-TV7
;1!3 / Z 6!2<2316 U;2316V7
;"- / Z 6!2<" !1<"-UV7
Ze względu na strukturę bazy danych, adres
URL musi zostać dodany do tabeli
zanim będzie możliwa modyfikacja tabeli
. Powyższe zapytanie doda adres URL,
a następnie przy użyciu funkcji
zwróci wartość pola
(klucz główny tabeli o automatycznie
zwiększanej wartości). Uzyskana wartość
może następnie zostać wykorzystana
w drugim zapytaniu (krok 7.).
7.
Utworzyć główne zapytanie.
"A U;"- . V >
;2316 / T$M ) $ 3!
åU"1<"-F 6%1<"-F %%#41-F
å-1<!3= "1-V EG M T7
"A U;<M\T6%1T] . V >
;2316 / U;"-F
å>;<M\T6%1T]BF TTF
å$UVVF 7
B
"A U;<M\T6%1*T] . V >
;2316 / U;"-F >;<M
å\T6%1*T]BF TTF $UVVF 7
B
"A U;<M\T6%1T] . V >
;2316 / U;"-F
å>;<M\T6%1T]BF TTF
å$UVVF 7
B
;2316 / !3=! U;2316F F *V7
Listing 11.5. Skrypt pozwala użytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy
C0 "A U;<M\T6%1*T] . V >
9 ;2316 / U;"-F >;<M\T6%1*T]BF TTF $UVVF 7 B
9 "A U;<M\T6%1T] . V >
9* ;2316 / U;"-F >;<M\T6%1T]BF TTF $UVVF 7
9 B
9C ;2316 / !3=! U;2316F F *V7 !3 "W5"1 #! "1(# %H15" ? " !%5P"
99 6?# "1 H%6 "
9, ;1!3 / Z 6!2<2316 U;2316V7
9D "A U;1!3V >
98 15# T%.=.H"W?3P1 6 H %H1!N "1 - 65=.%.T7
90 ;<M / 6UV7
, B 1!1 > _1L" '6!K%"K %#=1 6
, 15# T%.A# 5##/1-.$ !?31? =NW-3 !6!1 #'1(# '6!N 1 H%6 "1 "1 #(N#
H#!^ %H1'#H# 1 H1%!H 6 H H"! "NK "1-#(#- #L^A# .%.T7
,* B
, B 1!1 > _1L" '6!K%"K %#=1 6
,C 15# T%.A# 5##/1-.$ !?31? =NW-3 !6!1 #'1(# '6!N 1 H%6 "1
"1 #(N# H#!^ %H1'#H# 1 H1%!H 6 H H"! "NK "1-#(#- #L^A# .%.T7
,9 B
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
391
Jeśli zostanie pobrana wartość zmiennej
,
bez obaw można przejść do wykonywania
głównego zapytania (dodanie rekordu do
tabeli
). Aby tak postąpić, na początku
należy zdefiniować zapytanie i przypisać
jego początkową część zmiennej
.
Po sprawdzeniu, czy wybrano kategorie
(przy użyciu menu rozwijanych), dla każdej
z nich dodano rekord przy użyciu zapytania.
Na końcu w celu usunięcia z zapytania
ostatnich dwóch znaków (przecinek i znak
spacji) zostanie użyta funkcja
!
.
Jeśli wystąpią problemy ze składnią zapytania
należy nakazać interpreterowi języka PHP
wyświetlenie wartości zmiennej
,
dzięki czemu można stwierdzić, co będzie
przetwarzane przez serwer MySQL.
8.
Wykonać zapytanie, wprowadzić komunikaty
informujące o jego wyniku i uzupełnić
instrukcje warunkowe.
;1!3 / Z 6!2<2316 U;2316V7
"A U;1!3V >
15# T%.=.H"W?3P1 6 H
å%H1!N "1 - 65=.%.T7
B 1!1 > _1L" '6!K%"K %#=1 6
15# T%.A# 5##/1-.
å$ !?31? =NW-3 !6!1 #'1(#
å'6!N 1 H%6 "1 "1 #(N#
åH#!^ %H1'#H# 1
åH1%!H 6 H H"! "NK
å "1-#(#- #L^A# .%.T7
B
Powyższe instrukcje warunkowe
wyświetlą odpowiednie komunikaty
związane z przesyłanymi danymi.
Listing 11.5. Skrypt pozwala użytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy
,, B 1!1 > _1L" P1- H #%15P" !%'-H1 " - 65 !"W "1 %#'"1-H"1
,D 15# T%.A# 5##/1-.#!HW !%O=#'^ %# #' "1A# .%.T7
,8 B
,0 B R# "15 " !3?5P" '3 ?#'1P #=!N3(3PK51P - 1 '%#'-H 1 ' A# 3H3
D [# 3H '6L'"1PK56 - 1
D '#H1 "1 1 3 #H'"P 1(#
D* ;2316 / M ` [) 3<6%1! ) ) 6%1 GM7
D ;1!3 / Z 6!2<2316 U;2316V7
DC ;%3-#' / T#%"# .6="1H P1- K %#H65PW#%"# .T7
D9 '"1 U;#' / 6!2<A15<6 U;1!3F MY<GMMVV >
D, ;%3-#' / #%"# 431/a>;#'\T6%1<"-T]Ba.>;#'\T6%1T]B#%"# .a 7
DD B
D8 :.
D0 A# 5"# /:%% 15# ;<M )E )\T<M [T]7 :. 1#-/%#!.
8 A"1-!1.1(1 -. 513 %H1!N " -1!3 ) 1X6 '6%1N "^ A# 3H
U #X '6=^ ?!6 "1 ?1(#"1V&1(1 -.
8 %.=.G-1! )&=. " %3 6%1/1+ 1/3 !"H1/, +1 (/,
431/:%% "A U"!!1U;<M\T3T]VV 15# ;<M\T3T]7 :. .=
8* .! .$"1 -#NK5HP "-1 6A"?# ".%&".! .%.
8 B 1!1 >
8C 15# T%.A# 5##/1-.$ !?31? =NW-3 !6!1 #'1(# '6!N 1 H%6 "1
"1 #(N# H#!^ %H1'#H# 1 H1%!H 6 H H"! "NK "1-#(#- #L^A# .%.T7
89 B
8, B 1!1 >
8D 15# T%.A# 5##/1-.#!HW !%O=#'^ %# #' "1A# .%.T7
88 B
80 B
Zarządzanie adresami URL
Rozdział 11.
392
9.
Utworzyć stronę HTML, na której zostaną
umieszczone menu rozwijane umożliwiające
wybranie typu adresów URL.
;2316 / M ` [) 3<6%1! ) )
å6%1 GM7
;1!3 / Z 6!2<2316 U;2316V7
;%3-#' / T#%"# .6="1H P1- K
å%#H65PW#%"# .
T7
'"1 U;#' / 6!2<A15<6 U;1!3F
åMY<GMMVV >
;%3-#' / #%"#
å431/a>;#'\T6%1<"-T]Ba.>;#'
å\T6%1T]B#%"# .a 7
B
Listing 11.5. Skrypt pozwala użytkownikom przesyłać adresy URL do bazy danych — ciąg dalszy
0 %.=.$H'63N -1!3 )&=. " %3 6%1/1+ 1/"1 !"H1/,
+1 (/, 431/:%% "A U"!!1U;<M\T"1T]VV 15# ;<M\T"1T]7 :. .%.
0
0* %.=.%"!&=. 1+1 1/-1!5"%"# 5#!/C #'!/9.:%% "A
U"!!1U;<M\T-1!5"%"# T]VV 15# ;<M\T-1!5"%"# T]7 :.1+1.%.
0
0C %.=.R1(#" &=. !115 1/6%1.
09 :%% 15# ;%3-#' 7 :.
0, !115.%.
0D
08 %.=.R1(#" *&=. !115 1/6%1*.
00 :%% 15# ;%3-#' 7 :.
!115.%.
* %.=.R1(#" &=. !115 1/6%1.
:%% 15# ;%3-#' 7 :.
C !115.%.
9
, A"1-!1.
D
8 -"4 "( /51 1." %3 6%1/!3= " 1/!3= " 431/6L"P .-"4.
0
A# . R# "15 A# 3H.
:%%
* 6!2<5#!1UV7 J ? "W5"1 %#NK5H1 " H =HK - 65
" 53-1 UT" 53-1!!#%? TV7 #NK5H1 "1 !#%?"
C :.
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
393
Rysunek 11.8. Kod źródłowy strony HTML
dynamicznie generujący menu rozwijane
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.
A# 5"# /:%% 15#
;<M )E )\T<M [T]7 :. 1#-/%#!.
A"1-!1.1(1 -. 513 %H1!N " -1!3
å) 1X6 '6%1N "^ A# 3H U #X
å'6=^ ?!6 "1 ?1(#"1V&1(1 -.
%.=.G-1! )&=. " %3 6%1/1+
å 1/3 !"H1/, +1 (/,
å431/:%% "A U"!!1U;<M\T3T]VV
å15# ;<M\T3T]7 :. .=
å.! .å$"1 -#NK5HP "-1 6A"?#
å".%&".! .%.
%.=.$H'63N -1!3 )&=. " %3
å6%1/1+ 1/"1 !"H1/,
å +1 (/, 431/:%% "A
åU"!!1U;<M\T"1T]VV 15#
å;<M\T"1T]7 :. .%.
%.=.%"!&=. 1+1 1/-1!5"%"#
å5#!/C #'!/9.:%% "A
åU"!!1U;<M\T-1!5"%"# T]VV 15#
å;<M\T-1!5"%"# T]7 :.1+1.%.
%.=.R1(#" &=. !115 1/6%1.
:%% 15# ;%3-#' 7 :.
!115.%.
%.=.R1(#" *&=. !115 1/6%1*.
:%% 15# ;%3-#' 7 :.
!115.%.
%.=.R1(#" &=. !115 1/6%1.
:%% 15# ;%3-#' 7 :.
!115.%.
A"1-!1.
-"4 "( /51 1." %3 6%1/!3= "
å 1/!3= " 431/6L"P .-"4.
A# .
Zarządzanie adresami URL
Rozdział 11.
394
Formularz (rysunek 11.9) pozwala wprowadzić
do pól tekstowych kilka wartości i zapamiętać je.
11.
Zakończyć skrypt PHP.
:%%
6!2<5#!1UV7
" 53-1 UT" 53-1!!#%? TV7
:.
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
Rysunek 11.10. Po przesłaniu wprowadzonych
danych zostanie wyświetlony komunikat
i formularz będzie widoczny ponownie
(z poprzednio wstawionymi wartościami)
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
395
Wskazówki
W celu zablokowania możliwości
stosowania znaczników języka HTML
we wprowadzanych wartościach należy
posłużyć się funkcją
"
.
Funkcja ta usuwa wszystkie znaczniki
nie tylko języka HTML, ale też PHP.
Aby wyświetlić znaczniki języka HTML
(w postaci, w jakiej występują w kodzie
źródłowym) bez ich uaktywniania należy
skorzystać z funkcji
# #
i
#
.
Funkcja
jest powiązana
z każdą pojedynczą sesją (interakcja z bazą
danych). Z tego też powodu nie należy
się przejmować tym, że zwrócono
nieprawidłową wartość nawet wtedy,
gdy skrypt jednocześnie został wykonany
przez kilku różnych użytkowników.
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ą
$
.
W zastosowanym przykładzie można było
też stworzyć kontrolki, które posłużyłyby
do wybierania maksymalnie trzech kategorii.
Po uaktywnieniu funkcji Magic Quotes,
wartości wprowadzone do formularza przed
przesłaniem do przeglądarki muszą zostać
przetworzone przez funkcję
#
.
W przytoczonym przykładzie po poprawnym
przesłaniu wstawionych wartości formularz
zostanie ponownie wyświetlony wraz
z poprzednio wprowadzonymi danymi.
Aby to zmienić, należy zrezygnować
z wyświetlania formularza lub wyczyścić
zawartość zmiennej tablicowej
%&
po udanym wykonaniu zapytania na bazie
danych.
Funkcja języka PHP o nazwie
jest odpowiednikiem funkcji
oferowanej przez serwer MySQL.
Zarządzanie adresami URL
Rozdział 11.
396
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).
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:
;4 / 7 6% Nb535#'6
;4 / U" V;47 6% 5N?#'"#"5H=#'6
Do dostępnych typów zmiennych (w niektórych przypadkach wiele określeń dotyczy tego
samego typu) należy zaliczyć takie typy jak
i " , ! i ! , ', ! ,
,
",
i !( . 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
) 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
. Funkcja
pobiera wartości zmiennej tablicowej i przypisuje je oddzielnym zmiennym. Oto przykład:
;4 / 6 U_ F $#'?V7
"! U;A"!F ;!V / ;47
Powyższym zmiennym
' i zostaną przypisane odpowiednio wartości Jan i Nowak.
Podobna funkcjonalność może być również uzyskana przy użyciu funkcji
* podobnej
do funkcji
.
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
397
Rysunek 11.11. Menu rozwijane
Aby utworzyć skrypt view_urls.php,
należy wykonać poniższe kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.6).
:%% @ "!" ( , 4"1'<3!%%
;%(1<"1 / TH1(K- "1 -1!O' )T7
" 53-1<# 51 UT" 53-1! (#'1? TV7
123"1<# 51 UT 6!2<5# 15%%TV7
2.
Rozpocząć definiowanie formularza
zawartego na stronie HTML.
15# T-"4 "( /51 1.
A# 1#-/(1 5"# /4"1'<3!%%.
!115 1/6%1.
#%"# 431/$.6="1H
å?1(#"W&#%"# .
T7
Po pierwszym wyświetleniu strony HTML
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
:%% @ "!" ( , 4"1'<3!%%
* M# %#H' '6L'"1"^ -1!6 ) H%"! 1 ' =H"1 - 65
!'"1 "1 63N3 !# 6 " -#NK5H1 "1 (NO'?
C ;%(1<"1 / TH1(K- "1 -1!O' )T7
9 " 53-1<# 51 UT" 53-1! (#'1? TV7
, 123"1<# 51 UT 6!2<5# 15%%TV7 #NK5H1 "1 H =HK - 65
D '#H1 "1 A# 3H %#H'PK51(# 3X6?#' "?#'" '6= "1 -1!3 )F
?O6 H#! "1 '6L'"1# 6
8
0
! "# $%&
*'
Zarządzanie adresami URL
Rozdział 11.
398
3.
Pobrać wszystkie dostępne typy adresów URL
i dołączyć je do menu rozwijanego.
;2316 / TM ` [) 3<6%1!
å) ) 6%1 GMT7
;1!3 / 6!2<2316 U;2316V7
'"1 U;#' / 6!2<A15<6
åU;1!3F MY<$VV >
15# T#%"# 431/TF ;#'\]F T.TF
å!"%!!1!U;#'\]VF T#%"# .
T7
B
Powyższy kod pobiera z tabeli
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).
Rysunek 11.12. Dynamicznie wygenerowany kod
źródłowy formularza zawartego 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 — ciąg dalszy
&&(! ) $*
C+,-../012345436.3789-/'
9+,,:+,;'
, :+,:+<58-=5;;>
D <+?@A<< :+?BA;<&
8'
0C
*
*&&D#E" "
**&
* ! ! ) FG
*C&
*9&
*,'
*D
*8 #= "1 -1!O' ) #?1L# 1(# 6%3 UP1L" (# %#- #V
*0 "A U"!!1U;<S \T6%1T]VV >
; / " 4U;<S \T6%1T]V7 M%'-H1 "1F 5H6 6% P1! 5N?#'"#"5H=#'6
*
#= "1 H'6 ?3 "1 '6= 1(# 6%3
C ;2316 / M 6%1 [) 3<6%1! ) 6%1<"-/;7
9 ;1!3 / 6!2<2316 U;2316V7
, "! U;6%1V / 6!2<A15<6 U;1!3F MY<$V7
D
8 15# .-"4 "( /a51 1a.=.;6%1 #- #L "?O'=.= .
0 ! .U!H6!?"1 #- #L "?" =W-K ?#H6!N6 H 'N! 1(# #? $P%"1'
H#! K '6L'"1# 1 #! "# -#- 1 #- #L "?"V! .-"4.a 7
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
399
4.
Zakończyć definicję formularza
umieszczonego na stronie HTML.
15# T!115.
" %3 6%1/!3= " 1/!3= "
å431/6L"P.
A# .
-"4.
T7
5.
Sprawdzić, czy został wybrany typ adresu
URL i czy pobrano informacje na jego temat.
"A U"!!1U;<S \T6%1T]VV >
; / " 4U;<S \T6%1T]V7
;2316 / M 6%1 [) 3<6%1!
å ) 6%1<"-/;7
;1!3 / 6!2<2316 U;2316V7
"! U;6%1V / 6!2<A15<6
åU;1!3F MY<$V7
15# .-"4
å"( /a51 1a.=.;6%1
å#- #L "?O'=.= .
! .U!H6!?"1 #- #L "?" =W-K
å?#H6!N6 H 'N! 1(# #? $P%"1'
åH#! K '6L'"1# 1 #! "# -#- 1
å#- #L "?"V! .-"4.a 7
Jeśli typ został już wybrany (w takim
przypadku zostanie dołączony do adresu
URL i udostępniony przy użyciu zmiennej
tablicowej
+
), powiązane z nim adresy
URL powinny być pobrane.
Pierwsza operacja będzie polegała
na zastosowaniu funkcji
)
w celu
sprawdzenia, czy wybrany typ, który zostanie
zastosowany w zapytaniu jest typem
całkowitoliczbowym. W dalszej kolejności
przy użyciu funkcji
zostanie pobrana
nazwa typu i wyświetlona na stronie w roli
nagłówka. Więcej informacji na temat funkcji
)
i
można znaleźć w ramce
Nowe funkcje i metody lub w dokumentacji
języka PHP.
6.
Zainicjalizować zmienną
'
i wysłać
zapytanie do bazy danych.
;A"! / ) 7
;2316 / M 3F "1F -1!5"%"#
å[) 3! GM 3F 3<"1! GM 3 )
å3"1<"- / 3"1<"- G$ 36%1<"-/;
åG$ 3%%#41- / TT ) )
å-1<!3= "1- -1!57
;1!3 / 6!2<2316 U;2316V7
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
C ;A"! / ) 7 "5P"H5P H "1 1P
C 6?# "1 H%6 " =H"1 - 65
C* ;2316 / M 3F "1F -1!5"%"# [) 3! GM 3F 3<"1! GM 3
) 3"1<"- / 3"1<"- G$ 36%1<"-/; G$ 3%%#41- / TT
) ) -1<!3= "1- -1!57
C ;1!3 / 6!2<2316 U;2316V7
CC&& ) "# *3
C9 :+,:+<58-=9--4/;;>
C,&&H) F "#<" "!
CD :+ ;>
C8!!@ B@@I J J
C0
9 K@I "LB4) #&&
9 K@I "LB4 &&
9*&'
9C&&M $ #F"" N+
Zarządzanie adresami URL
Rozdział 11.
400
Zmienna
'
zostanie wykorzystana
na dwa sposoby. Pierwszy z nich będzie
polegał na tym, że zmienna wskaże, że przed
wyświetleniem pierwszego rekordu na stronie
HTML powinna zostać utworzona tabela.
W drugim przypadku zmienna posłuży
do sprawdzenia, czy w wyniku wykonanego
zapytania zostały zwrócone jakiekolwiek
adresy URL.
7.
Wyświetlić wszystkie zwrócone rekordy.
'"1 U;#' / 6!2<A15<6
åU;1!3F MY<GMMVV >
"A U;A"!V >
15# T=1 =#-1/ '"-/I
å51!%5" (/ 51%--" (/
å"( /51 1.
.
- "( /"( '"-/9I.A#
å!"H1/c.- #L "?A# .-.
- "( /1A '"-/9I.A#
å!"H1/c.%"!A# .-.
.T7
B
15# .
- "( /a"(a.
å1A/a%&>;#'\T3T]Ba
å(1/a< 1'a. !"%!!1!
åU;#'\T"1T]V .-.
- "( /a1Aa.>;#'
å\T-1!5"%"# T]B-.
.a 7
;A"! / [GM 7
B
Pętla
$#
zwróci wszystkie rekordy
pobrane w wyniku wykonanego zapytania.
Przed wyświetleniem pierwszego rekordu
do przeglądarki internetowej zostanie
wysłana tabela i jej nagłówek
(rysunek11.13).
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
9C&& ) "# #
99
9, O OO%&&>+?ACO OO
9D :+? A;&&
98 OO>+? AC&
90&O'
,+ 29-.'&&D*F#
,C&&M $
,* _1L" "1 '6L'"1# # X- 1(# 1?#-3
, "A U;A"!V >
,C 15# T-"4 "( /51 1.G?3 "1 - '6= 1P ?1(#"" "1 "! "1P1
X-1 #- #L "?-"4.T7
,9 B 1!1 >
,, 15# T=1.T7 J ? "W5"1 =1"
,D B
,8 B R# "15 " !3?5P" '3 ?#'1P ;<S \T6%1T]
,0 6!2<5#!1UV7 J ? "W5"1 %#NK5H1 " H =HK - 65
D " 53-1<# 51 UT" 53-1!!#%? TV7 #NK5H1 "1 !#%?"
D :.
Zarządzanie adresami URL
Zarządzanie zawartością strony — przykład
401
Rysunek 11.13. Lista adresów URL
dla wybranego typu
Rysunek 11.14. Wygląd strony w przypadku,
gdy z wybranym typem nie powiązano jeszcze
żadnych adresów URL
8.
Wyświetlić komunikat, jeśli nie został
zwrócony żaden adres URL i zakończyć
kod głównej instrukcji warunkowej.
"A U;A"!V >
15# T-"4 "( /51 1.G?3 "1 -
å'6= 1P ?1(#"" "1 "! "1P1 X-1
å#- #L "?-"4.T7
B 1!1 >
15# T=1.T7
B B
Jeśli zostaną zwrócone jakiekolwiek wiersze,
zmienna
'
znajdująca się wewnątrz
pętli
$#
przyjmie wartość
,
. A zatem,
jeśli wartością zmiennej
'
nadal będzie
-
, oznacza to, że nie zwrócono żadnych
rekordów i powinien zostać wyświetlony
komunikat podobny do pokazanego na
rysunku 11.14. W przeciwnym razie powinna
zostać wygenerowana kompletna tabela.
9.
Zakończyć kod źródłowy strony HTML.
6!2<5#!1UV7
" 53-1<# 51 UT" 53-1!!#%? TV7 :.
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ć
rekordy na wielu stronach (zapoznaj się
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
można zastosować funkcję
.!
(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
/! 01
.
Zarządzanie adresami URL
Rozdział 11.
402
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
Podobnie jak w przypadku przetwarzania
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ć
wyświetlony formularz zawarty na stronie HTML
umożliwiający umieszczanie plików na serwerze.
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:
A# 1 56%1/ 3"%A# -
å5"# /!5"%%% 1#-/%#!.
" %3 6%1/"--1 1/G<[ <MJ
å431/.
["1 " %3 6%1/A"1 1/3%#- .
Atrybut
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
%&
. Wartość ukrytego pola
23,4
spełnia w formularzu rolę ograniczenia wielkości
przetwarzanego pliku (wyrażonej w bajtach)
i musi znajdować się przed definicją pola
'
,
które służy do utworzenia na formularzu
odpowiedniego przycisku (rysunek 11.16).
Rysunek 11.15. Użytkownicy będą mogli wybrać
plik, który zostanie umieszczony na serwerze
Rysunek 11.16. Definicja typu file tworzy
na formularzu zawartym na stronie HTML
przycisk podobny do pokazanego powyżej
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
403
Począwszy od wersji 4.1 języka PHP, dostęp
do pliku umieszczonego na serwerze może być
uzyskany przy użyciu zmiennej superglobalnej
,
. W przypadku wcześniejszych wersji
(jeśli uaktywniono parametr
" "!
)
należało skorzystać ze zmiennej tablicowej
%%&,
lub po prostu ze zmiennej
, powiązanej z nazwą pola
'
.
Zmiennej plikowej zostaną przypisane wartości
tablicy wymienione w tabeli 11.1.
Po pobraniu pliku przez skrypt PHP funkcja
) '
może go przenieść
z katalogu tymczasowego w jego docelowe
położenie.
#41<3%#-1-<A"1U F
å V7
Po wywołaniu funkcji zakończonym powodzeniem
tymczasowa wersja pliku zostanie usunięta
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.
Zarządzanie plikami
Tabela 11.1. Dane dotyczące pliku umieszczanego
na serwerze mogą zostać uzyskane przy użyciu
powyższych elementów tablicy
Zmienna tablicowa $_FILES
Indeks
Znaczenie
1
Oryginalna nazwa pliku (przechowywanego
na komputerze użytkownika).
6%1
Typ MIME pliku określony
przez przeglądarkę.
!"H1
Wielkość pliku umieszczanego na serwerze
(wyrażona w bajtach).
%< 1
Tymczasowa nazwa pliku po umieszczeniu
na serwerze.
Rozdział 11.
404
Aby przygotować serwer,
należy wykonać następujące kroki:
1.
W edytorze tekstu otworzyć plik php.ini.
2.
W File Uploads zmodyfikować poniższe
parametry (rysunek 11.17):
A"1<3%#-! /
3%#-< %<-" / %
3%#-< +<A"1!"H1 / *
Pierwszy parametr pozwala na umieszczanie
plików na serwerze lub blokuje taką możliwość.
Drugi parametr pozwala określić miejsce,
w którym tymczasowo będą przechowywane
pliki umieszczane na serwerze. W przypadku
większości systemów operacyjnych przed
parametrem tym można bez większych obaw
umieścić znak komentarza (znak średnika).
Użytkownicy systemów Mac OS X i UNIX
zazwyczaj dla parametru ustawiają katalog
/tmp, natomiast w przypadku systemu
Windows powinni korzystać z katalogu
określonego ścieżką C:\PHP\uploadtemp.
Ostatni z wymienionych parametrów służy
do określenia maksymalnej wielkości plików
(wyrażonej w megabajtach) umieszczanych
na serwerze.
3.
Zapisać plik i ponownie uruchomić
serwer WWW (rysunek 11.18).
%515 (51A3
Powyższe polecenie służy do ponownego
uruchomienia serwera Apache działającego
pod systemem operacyjnym UNIX.
Użytkownicy systemu Mac OS X
w celu ponownego uruchomienia serwera
mogą użyć panelu Sharing, natomiast
w przypadku systemu Windows należy
posłużyć się apletem Usługi znajdującym
się w Panelu sterowania lub innym
narzędziem współpracującym
z serwerem WWW.
4.
Utworzyć nowy katalog o nazwie uploads
znajdujący się poza strukturą katalogową
serwera WWW. Katalog ten będzie spełniał
rolę docelowego miejsca, w którym będą
umieszczane pliki na serwerze. Ze względu
na zabezpieczenia katalog nie powinien
być częścią struktury katalogowej
serwera WWW.
Rysunek 11.18. Aby zmiany dokonane w pliku konfiguracyjnym języka PHP
zostały uwzględnione, konieczne jest ponowne uruchomienie serwera WWW
Zarządzanie plikami
Rysunek 11.17. Sekcja File Uploads pliku
php.ini odpowiedzialna za obsługę plików
umieszczanych na serwerze
Zarządzanie zawartością strony — przykład
405
Rysunek 11.19. Karta Udostępnianie
w systemie Windows pozwala na określenie,
kto będzie dysponował dostępem do katalogu
Rysunek 11.20. Jeśli uprawnienia nie
zostaną poprawnie zdefiniowane, pojawią się
komunikaty błędów podobne do pokazanego
Ze względu na czas wymagany
do umieszczenia dużego pliku
na serwerze może być konieczna
modyfikacja wartości parametru
* *
zawartego
w pliku php.ini lub tymczasowe
przekazanie jej do skryptu przy
użyciu funkcji
.
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
#567775
(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ń
należy wykonać poniższy skrypt. Jeśli zostaną
wyświetlone komunikaty podobne do pokazanego
na rysunku 11.20, należy dokonać zmiany
w uprawnieniach.
Wskazówki
Wartość pola
23,4
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
*8
zawarty w pliku php.ini
służy do określenia maksymalnej ilości danych
(wyrażonej w megabajtach), które mogą zostać
umieszczone na serwerze przy użyciu jednego
skryptu. Domyślnie jest to 8 MB.
W języku PHP w wersji 4.2 nowością jest indeks
błędów zmiennej tablicowej
,
. Jego
zadaniem jest przechowywanie dowolnych
informacji dotyczących błędów powiązanych
z plikiem umieszczanym na serwerze.
Jeśli mamy na uwadze kwestię zabezpieczeń,
przechowywanie plików umieszczanych
na serwerze poza strukturą katalogów serwera
WWW jest bardziej wskazane. Dzięki temu
uniemożliwi się użytkownikom uzyskanie
bezpośredniego dostępu do plików i uniknie się
zagrożenia związanego z umieszczaniem katalogu
dysponującego mało restrykcyjnymi uprawnieniami
w miejscu publicznie dostępnym.
Zarządzanie plikami
Rozdział 11.
406
Aby utworzyć skrypt add_file.php,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.7).
:%% @ "!" ( D --<A"1%%
;%(1<"1 / T "1!H5H "1 %"?3
å !1'1H1T7
" 53-1 UT" 53-1! (#'1? TV7
2.
Sprawdzić, czy wypełniono formularz
i przeprowadzić walidację wartości pola
.
"A U"!!1U;<M\T!3= "T]VV >
123"1<# 51 UT 6!2<5# 15%%TV7
A3 5"# 1!5%1<- U;-V >
(#= ;-=57
"A U" "<(1UT ("5<23#1!<(%5TVV >
;- / !"%!!1!U;-V7
B
13 6!2<1<1!5%1<!" (
åU" U;-VF ;-=5V7
B
"A U1 %6U;<M\T-1!5"%"# T]VV >
;- / 1!5%1<-
åU;<M\T-1!5"%"# T]V7
B 1!1 >
;- / TT7
B
Podobnie jak w przypadku omawianego
wcześniej skryptu add_url.php, dla pola
zostanie przeprowadzana
najprostsza walidacja. Ze względu na to,
że pozostałe pola formularza nie wymagają
sprawdzenia, zastosowano tylko jedną
instrukcję warunkową.
W celu określenia, czy rozmiar pliku
umieszczanego na serwerze zawiera się
w założonym przedziale można również
sprawdzić jego wielkość.
Listing 11.7. Skrypt pozwala użytkownikowi umieścić plik na serwerze
:%% @ "!" ( D --<A"1%%
* M# %#H' 3X6?#' "?# 3 "1L5"^ %"?" !1'1H1
!'"1 "1 63N3 !# 6 " -#NK5H1 "1 (NO'?
C ;%(1<"1 / T "1!H5H "1 %"?3 !1'1H1T7
9 " 53-1 UT" 53-1! (#'1? TV7
, "A U"!!1U;<M\T!3= "T]VV > =!N3( A# 3H
D 123"1<# 51 UT 6!2<5# 15%%TV7 #NK5H1 "1 H =HK - 65
8 [3 ?5P 3!3'PK5 H ? TT " #=5" PK5 - 1 '%#'-H# 1 ' A# 3H3
0 A3 5"# 1!5%1<- U;-V >
(#= ;-=57
"A U" "<(1UT ("5<23#1!<(%5TVV >
* ;- / !"%!!1!U;-V7
B
C 13 6!2<1<1!5%1<!" ( U" U;-VF ;-=5V7
9 B R# "15 !1?5P" A3 ?5P" 1!5%1<-UV
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
407
3.
Wstawić do bazy danych rekord powiązany
z plikiem umieszczanym na serwerze.
;2316 / $M ) $ 3%#-! UA"1< 1F
åA"1<!"H1F A"1<6%1F -1!5"%"# F
å3%#-<-1V EG M
åUT>;<[ M\T3%#-T]\T 1T]BTF
å>;<[ M\T3%#-T]\T!"H1T]BF
åT>;<[ M\T3%#-T]\T6%1T]BTF
åT;-TF $UVV7
;1!3 / Z 6!2<2316 U;2316V7
Informacja o każdym pliku umieszczonym
na serwerze zostanie zapisana w bazie
danych. W tym celu zostanie zastosowana
wielowymiarowa zmienna tablicowa
,
, która będzie przechowywała
oryginalną nazwę pliku, jego wielkość
i typ MIME. Wszystkie te dane zostaną
pobrane z przeglądarki internetowej.
Dodatkowo zostanie zapisany opis
oraz aktualna data i godzina.
4.
Utworzyć nowy plik.
"A U;1!3V >
;1+1 !"# / 1+%#-1 UTTF
å;<[ M\T3%#-T]\T 1T]V7
;3"- / 6!2<" !1<"-UV7
;A"1 1 / ;3"- TT ;1+1 !"# \]7
Plik zostanie zapisany na serwerze pod nową
nazwą. Takie rozwiązanie jest o wiele bardziej
bezpieczne niż w przypadku posługiwania się
oryginalną nazwą nadaną przez użytkownika.
Nazwa pliku będzie złożona z wartości
bazodanowego pola
(pobranej
przy użyciu funkcji
),
za którą zostanie wstawiona kropka
i rozszerzenie oryginalnego pliku (uzyskanego
poprzez rozkład jego nazwy). Przykładowo,
dokument o nazwie chapter.doc może przyjąć
nazwę 231.doc, natomiast plik imagename.jpg
zostanie zapisany jako 49.jpg.
Listing 11.7. Skrypt pozwala użytkownikowi umieścić plik na serwerze — ciąg dalszy
, M%'-H1 "1 #=15 #L5" #%"!3 U "1 P1! '6 ( 1V
D "A U1 %6U;<M\T-1!5"%"# T]VV >
8 ;- / 1!5%1<-U;<M\T-1!5"%"# T]V7
0 B 1!1 >
* ;- / TT7
* B
**
*&&6 #!"
*C+,P-.30P04: < "< <
<;Q9.-:>+2P.-?A?AC<
>+2P.-?A? "AC<>+2P.-?A?AC<+<4 :;;'
*9+R,,:+,;'
*,
*D :+;>
*8
*0&&" " #
+S S:<+2P.-?A?A;'
+ , :;'&&P # # ""
"
*+ + +S ?BA'
C&&("" #
9 : :+2P.-?A?A<
&&+ ;;>
, 15# T%."? H#!N 3 "1!H5H# 6 !1'1H1%.T7
Zarządzanie plikami
Rozdział 11.
408
5.
Skopiować plik w docelowe miejsce
na serwerze.
"A U #41<3%#-1-<A"1U;<[ M
å\T3%#-T]\T %< 1T]F 3%#-!
å;A"1 1VV >
15# T%."? H#!N 3 "1!H5H# 6
å !1'1H1%.T7
B 1!1 >
15# T%.A# 5##/1-.
åH1 "1!"1 "1 %"?3 "1 =6N#
å #X"'1A# .%.T7
;2316 / [) 3%#-! )
å3%#-<"- / ;3"-7
;1!3 / Z 6!2<2316 U;2316V7
B
W celu przeniesienia pliku tymczasowego
w docelowe miejsce (katalog uploads,
gdzie plik uzyska nową nazwę) należy
użyć funkcji
) '
.
Jeśli przeniesienie pliku nie będzie
możliwe (rysunek 11.20), z bazy danych
zostanie usunięty rekord i pojawi się
komunikat błędu.
6.
Dokończyć tworzenie instrukcji
warunkowej i skryptu PHP.
B 1!1 >
15# T%.A# 5##/1-.$ !?31?
å=NW-3 !6!1 #'1(# '6!N 1 H%6 "1
å "1 #(N# H#!^ %H1'#H# 1
åH1%!H 6 H H"! "NK
å "1-#(#- #L^A# .%.T7
B
6!2<5#!1UV7
B
:.
Listing 11.7. Skrypt pozwala użytkownikowi umieścić plik na serwerze — ciąg dalszy
D B 1!1 >
8 15# T%.A# 5##/1-.H1 "1!"1 "1 %"?3 "1 =6N# #X"'1A# .%.T7
0
C !3 "W5"1 1?#-3 H =H6 - 65
C ;2316 / [) 3%#-! ) 3%#-<"- / ;3"-7
C* ;1!3 / Z 6!2<2316 U;2316V7
C B
CC
C9 B 1!1 > _1L" H%6 "1 =H"1 - 65 "1 H#! "1 '6?# 1 %'"-N#'#
C, 15# T%.A# 5##/1-.$ !?31? =NW-3 !6!1 #'1(# '6!N 1 H%6 "1
"1 #(N# H#!^ %H1'#H# 1 H1%!H 6 H H"! "NK "1-#(#- #L^A# .%.T7
CD B
C8
C0 6!2<5#!1UV7 J ? "W5"1 %#NK5H1 " H =HK - 65
9
9 B R# "15 " !3?5P" '3 ?#'1P #=!N3(3PK51P - 1 '%#'-H 1 ' A# 3H3
9* :.
9
9C &T U+-.3Q.3?(V(-.2A'U
99
9, 59W2P.-PD. KXYXZZ
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
409
7.
Zdefiniować formularz zawarty
na stronie HTML.
A# 1 56%1/ 3"%A# -
å5"# /:%% 15# ;<M )E )\T<M [T]7
å:. 1#-/%#!.
" %3 6%1/"--1 1/G<[ <MJ
å431/9*C*88.
A"1-!1.1(1 -. 513 3 "1!H5H1 "
å%"?3 !1'1H1 1X6 '6%1N "^
åA# 3H&1(1 -.
%.=."?&=. " %3 6%1/A"1
å 1/3%#- .%.
%.=.%"!&=. 1+1
å 1/-1!5"%"# 5#!/C
å#'!/9.1+1.%.
A"1-!1.
-"4 "( /51 1." %3 6%1/!3= "
å 1/!3= " 431/6L"P .-"4.
A# .
Co prawda formularz jest bardzo prosty,
ale zawiera trzy niezbędne elementy
związane z umieszczaniem plików
na serwerze — atrybut
,
ukryte pole
23,4
i pole
'
.
8.
Zakończyć tworzenie skryptu PHP.
:%%
" 53-1 UT" 53-1!!#%? TV7
:.
Listing 11.7. Skrypt pozwala użytkownikowi umieścić plik na serwerze — ciąg dalszy
9D A"1-!1.1(1 -. 513 3 "1!H5H1 " %"?3 !1'1H1 1X6 '6%1N "^ A# 3H&1(1 -.
98
90!( #%&! &&
,
, %.=.%"!&=. 1+1 1/-1!5"%"# 5#!/C #'!/9.1+1.%.
,*
, A"1-!1.
,C
,9 -"4 "( /51 1." %3 6%1/!3= " 1/!3= " 431/6L"P .-"4.
,,
,D A# . R# "15 A# 3H.
,8
,0 :%%
D " 53-1 UT" 53-1!!#%? TV7 #NK5H1 "1 !#%?"
D :.
Zarządzanie plikami
Rozdział 11.
410
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
'
.
W celu odwołania się do katalogów
użytkownicy systemu Windows muszą
skorzystać ze znaku
0
lub
99
, a zatem
zamiast ścieżki C:\ należy użyć C:/
lub C:\\. Wynika to stąd, że w języku
PHP znak
95
jest wykorzystywany
przez funkcję
.
Jeśli jest wykorzystywana starsza wersja
języka PHP, może nie być możliwe
zastosowanie zmiennej tablicowej
,
. Na skutek tego zamiast funkcji
) '
konieczne będzie
użycie funkcji
.
Jeśli oba pliki mają taką samą nazwę,
funkcja
) '
nadpisze
istniejący plik bez wcześniejszego ostrzeżenia.
Po przygotowaniu ostatecznej wersji
produkcyjnej skryptu w celu wyeliminowania
w przyszłości wszelkich komunikatów
błędów należy przed wywołaniami funkcji
) '
wstawić znak
:
.
Rysunek 11.21. Formularz służący
do umieszczania plików na serwerze
Rysunek 11.22. Wygląd strony po udanym
umieszczeniu pliku na serwerze
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
411
Moduł administracyjny
aplikacji
Chociaż w przypadku omawianej
aplikacji nie stworzono jej części
administracyjnej, to jednak nie jest
to zadanie trudne do zrealizowania.
Na początku należy do tabeli
dodać pole
) . Następnie
należy tak zmodyfikować zarówno
plik add_url.php, jak i add_file.php,
aby domyślnie wartość pola
) wynosiła N. Z myślą o części
administracyjnej aplikacji należy
stworzyć stronę, na której zostaną
wyświetlone wszystkie elementy, które
jeszcze nie zatwierdzono. W celu
zaakceptowania dowolnego elementu
należy dla odpowiedniego rekordu
tabeli wykonać polecenie
-%
i zmienić wartość pola
) na Y.
Jedną z zalet systemu służącego
do umieszczania plików na serwerze
jest łatwość kojarzenia plików z danymi
na ich temat przechowywanymi w bazie
danych (gdy do tworzenia nazw plików
jest wykorzystywana wartość pola
). Jeśli zostanie utworzony
skrypt administracyjny służący do
usuwania plików z serwera (z katalogu
uploads), można również usunąć z tabeli
powiązany z nim rekord.
Przeglądanie i pobieranie plików
Ostatnie dwa skrypty omawianej aplikacji pozwolą
użytkownikom przeglądnąć pliki umieszczone
na serwerze, a następnie je pobrać (w danej
chwili tylko jeden). Skrypt służący do przeglądania
plików jest dość prosty, natomiast skrypt
umożliwiający ich pobieranie wymaga częstego
stosowania funkcji języka PHP o nazwie
#
.
W celu stworzenia skryptu view_files.php
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.8).
:%% @ "!" ( 8 4"1'<A"1!%%
;%(1<"1 / TH1(K- "1 %"?O'T7
" 53-1<# 51 UT" 53-1! (#'1? TV7
123"1<# 51 UT 6!2<5# 15%%TV7
;A"! / ) 7
Zmienna
'
spełnia taką samą rolę jak
w skrypcie view_urls.php. Zmienna zostanie
wykorzystana przy tworzeniu nagłówka
i w celu określenia, czy będzie możliwe
przeglądanie niektórych plików.
2.
Pobrać z bazy danych informacje
o wszystkich plikach.
;2316 / M 3%#-<"-F A"1< 1F
å)$UA"1<!"H1*CV GM A!F -1!5"%"# F
åG <[)GU3%#-<-1F TI I1F ITV GM -
å[) 3%#-! ) ) 3%#-<-1 M7
;1!3 / 6!2<2316 U;2316V7
Powyższe zapytanie zwróci dla każdego
pliku umieszczonego na serwerze wartości
przechowywane w polach
,
'
,
, 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.
Zarządzanie plikami
Rozdział 11.
412
Listing 11.8. Skrypt view_files.php wyświetla pliki umieszczone na serwerze wraz z ich opisem,
wielkością i datą wykonania operacji
:%% @ "!" ( 8 4"1'<A"1!%%
* M# %#H' 3X6?#' "?# %H1(K-^ %"?" 3 "1!H5H# 1 !1'1H1
!'"1 "1 63N3 !# 6 " -#NK5H1 "1 (NO'?
C ;%(1<"1 / TH1(K- "1 %"?O'T7
9 " 53-1<# 51 UT" 53-1! (#'1? TV7
,
D 123"1<# 51 UT 6!2<5# 15%%TV7 #NK5H1 "1 H =HK - 65
8
0 ;A"! / ) 7 "5P"H5P H "1 1P
6!N "1 H%6 " -# =H6 - 65
+,-../0 < <346: "&B@XY;9-<
<690.243590:<I5I<I8;9-2345436.3786.-/'
*+,,:+,;'
&& ) "# *3
C :+,:+<58-=9--4/;;>
9&&H) F "#<" "!
, :+ ;>
D!!@ B@@I J J
8
0 X@I "LB" #&&
* Y@I "LB4 &&
* X@I "LB3" #&&
** X@I "LB6 "" #
"&&
*&'
*CC&&M $ #F"" N+
*9&& ) "# #
*,
*D OOO U >+? AC
O>+? AC&&
*8 OO :+? A;&
*0 OO>+?AC#!&
OO>+?AC&
&O'
*+ 29-.'&&D*F#
C&&M $
C _1L" "1 '6L'"1# # X- 1(# 1?#-3
9 "A U;A"!V >
, 15# T-"4 "( /51 1.G?3 "1 "1 X- 1(# %"?3-"4.T7
D B 1!1 >
8 15# T=1.T7 J ? "W5"1 =1"
0 B
C 6!2<5#!1UV7 J ? "W5"1 %#NK5H1 " H =HK - 65
C " 53-1<# 51 UT" 53-1!!#%? TV7 #NK5H1 "1 !#%?"
C* :.
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
413
Każda nazwa pliku spełnia rolę odnośnika
do skryptu download_file.php, przy czym
do adresu URL jest dołączana wartość pola
. Wartość ta zostanie wykorzystana
przez skrypt służący do pobierania plików
w celu określenia, który z nich ma być
przesłany do przeglądarki internetowej.
4.
Jeśli nie znaleziono żadnych plików
lub zamknięto tabelę, należy wyświetlić
komunikat.
"A U;A"!V >
15# T-"4 "( /51 1.G?3 "1
å "1 X- 1(# %"?3-"4.T7
B 1!1 >
15# T=1.T7
B
5.
Zakończyć tworzenie skryptu PHP.
6!2<5#!1UV7
" 53-1<# 51 UT" 53-1!!#%? TV7 :.
6.
Zapisać plik pod nazwą view_files.php,
umieścić go na serwerze WWW i przetestować
przy użyciu przeglądarki internetowej.
3.
Wyświetlić wszystkie rekordy.
'"1 U;#' / 6!2<A15<6 U;1!3F
åMY<GMMVV >
"A U;A"!V >
15# T=1 =#-1/ '"-/I
å51!%5" (/ 51%--" (/
å"( /51 1.
.
- "( /1A '"-/*I.A#
å!"H1/c.$H' %"?3A# .-.
- "( /1A '"-/CI.A#
å!"H1/c.%"!A# .-.
- "( /51 1 '"-/*I.A#
å!"H1/c.)#H " %"?3A# .-.
- "( /1A '"-/*I.A#
å!"H1/c. 3 "1!H5H1 " %"?3
å !1'1H1A# .-.
.T7
B
15# .
- "( /a1Aa. 1A/
åa-#' #-<A"1%%:3"-/
å>;#'\T3%#-<"-T]Ba.>;#'
å\TA"1< 1T]B.-.
- "( /a1Aa.
å!"%!!1!U;#'\T-1!5"%"# T]V
å-.
- "( /a51 1a.
å>;#'\TA!T]B?=-.
- "( /a1Aa.>;#'\T-T]B-.
.a 7
;A"! / [GM 7
B
Również w tym przypadku powyższy
kod działa podobnie jak w poprzednim
skrypcie view_urls.php. Zmienna
'
jest używana raz przy tworzeniu nagłówka
(rysunek 11.23), po czym są wyświetlane
wszystkie rekordy. Przy odwoływaniu
się do funkcji
' #
jest stosowana stała
2;<&
,
np. w celu wyświetlenia wartości
należy użyć instrukcji
$=>'>?
.
Rysunek 11.23. Strona wyświetlona po uruchomieniu
skryptu view_files.php
Zarządzanie plikami
Rozdział 11.
414
Aby utworzyć skrypt download_file.php,
należy wykonać następujące kroki:
1.
W edytorze tekstu utworzyć nowy skrypt PHP
(listing 11.9).
:%% @ "!" ( 0 -#' #-<A"1%%
2.
Sprawdzić wartość pola
.
"A U"!< 3 1"5 U;<S \T3"-T]VV >
Przed kontynuacją należy upewnić się,
czy skrypt pobrał poprawną wartość pola
, która powinna być liczbą.
3.
Pobrać informacje na temat pliku.
123"1<# 51 UT 6!2<5# 15%%TV7
;2316 / M A"1< 1F A"1<6%1F
åA"1<!"H1 [) 3%#-! ) 3%#-<"-
å/ >;<S \T3"-T]B7
;1!3 / 6!2<2316 U;2316V7
"! U;A F ;AF ;A!V / 6!2<A15<6
åU;1!3F MY<$V7
6!2<5#!1UV7
W celu pobrania pliku konieczna jest
znajomość jego nazwy, typu, wielkości.
Wszystkie te dane zostaną pobrane z bazy
danych poprzez wykonanie zapytania,
w którym umieszczono instrukcje
+=>>?
, a następnie wywołanie
funkcji
.
4.
Określić nazwę pliku.
;1+1 !"# / 1+%#-1 UTTF ;A V7
;1<A"1 / T3%#-!T ;<S \T3"-T]
å TT ;1+1 !"# \]7
Działanie powyższego kodu jest
podobne do funkcjonowania mechanizmu
nazewniczego zastosowanego w skrypcie
add_file.php, z tą różnicą, że w tym
przypadku dodano ścieżkę postaci
../uploads/. Przypisanie takiego łańcucha
zmiennej ułatwi odwoływanie się do pliku
w dalszej części skryptu.
Listing 11.9. Poprzez przesłanie do przeglądarki internetowej odpowiednich nagłówków skrypt
wymusza wykonanie operacji pobrania pliku
:%% @ "!" ( 0 -#' #-<A"1%%
* M# %#H' %#= "1 %"?3 H !1'1 %H6 3X65"3 A3 ?5P" 1-1UV
C "A U"!< 3 1"5 U;<S \T3"-T]VV > -1 6A"?# %"?3 3 "1!H5H# 1(# !1'1H1
9
, 123"1<# 51 UT 6!2<5# 15%%TV7 #NK5H1 "1 H =HK - 65
D
8 #= "1 " A# 5P" 1 %"?3
0 ;2316 / M A"1< 1F A"1<6%1F A"1<!"H1 [) 3%#-! ) 3%#-<"- / >;<S \T3"-T]B7
;1!3 / 6!2<2316 U;2316V7
"! U;A F ;AF ;A!V / 6!2<A15<6 U;1!3F MY<$V7
* 6!2<5#!1UV7 J ? "W5"1 %#NK5H1 " H =HK - 65
?1L1 "1 H'6 %"?3 3 "1!H5H# 1(# !1'1H1
C ;1+1 !"# / 1+%#-1 UTTF ;A V7
9 ;1<A"1 / T3%#-!T ;<S \T3"-T] TT ;1+1 !"# \]7
,
D M%'-H1 "1F 5H6 %"? "! "1P1
8 "A UA"1<1+"!! U;1<A"1VV >
Zarządzanie plikami
Zarządzanie zawartością strony — przykład
415
5.
Sprawdzić, czy plik istnieje na serwerze.
"A UA"1<1+"!! U;1<A"1VV >
Przed wysłaniem pliku do przeglądarki
internetowej należy upewnić się, czy istnieje.
Jeśli plik istnieje na serwerze, funkcja
' *
zwróci wartość TRUE.
6.
Wysłać plik.
1-1 U# 1 6%1& %%"5"# ;AV7
1-1 U# 1 -"!%#!""# & 5 1 7
åA"1 1/;A V7
1-1 U# 1 1 (& ;A!V7
1-A"1 U;1<A"1V7
; 1!!(1 / T%."? H#!N '6!N 6%.T7
Wywołania funkcji
#
powodują
przesłanie do przeglądarki pliku i utworzenie
okna dialogowego (rysunek 11.24). W oparciu
o typ MIME (zapisany w bazie danych po
umieszczeniu pliku na serwerze) pierwszy wiersz
ma za zadanie przygotowanie przeglądarki
do odebrania pliku. Drugi wiersz przy użyciu
oryginalnej nazwy pliku przechowywanego
na komputerze użytkownika określa nazwę
pobieranego pliku. Ostatnia funkcja
#
informuje o ilości przesyłanych danych.
Również ta informacja została ustalona
po umieszczeniu pliku na serwerze. Zawartość
pliku jest przesyłana przy użyciu funkcji
'
, 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
wymusza wykonanie operacji pobrania pliku — ciąg dalszy
0 6!N "1 %"?3
* 1-1 U# 1 6%1& %%"5"# ;AV7
* 1-1 U# 1 -"!%#!""# & 5 1 7 A"1 1/;A V7
** 1-1 U# 1 1 (& ;A!V7
* 1-A"1 U;1<A"1V7
*C
*9 ; 1!!(1 / T%."? H#!N '6!N 6%.T7
*,
*D B 1!1 > "? "1 "! "1P1
*8 ; 1!!(1 / T%.A# 5##/1-.- 1H"1 "1 %"?3 !1'1H1 "1 =6N#
#X"'1 H1%!H 6 H H"! "NK "1-#(#- #L^A# .%.T7
*0 B
B 1!1 > $"1%'"-N#'6 "-1 6A"?# %"?3 3 "1!H5H# 1(# !1'1H1
*
; 1!!(1 / T%.A# 5##/1-.#!HW '6=^ %#%' 6 %"? H P-3PK56 !"W
!1'1H1A# .%.T7
C
9 B
,
D !'"1 "1 63N3 !# 6 " -#NK5H1 "1 (NO'?
8 ;%(1<"1 / T#="1 "1 %"?3T7
0 " 53-1<# 51 UT" 53-1! (#'1? TV7
C
C 15# ; 1!!(17
C*
C " 53-1<# 51 UT" 53-1!!#%? TV7
CC :.
Zarządzanie plikami
Rozdział 11.
416
7.
Zakończyć instrukcje warunkowe.
B 1!1 >
; 1!!(1 / T%.A# 5##/
å1-.- 1H"1 "1 %"?3 !1'1H1
å "1 =6N# #X"'1 H1%!H 6 H
åH"! "NK "1-#(#- #L^A# .%.T7
B
B 1!1 >
; 1!!(1 / T%.A# 5##/1-.#!HW
å'6=^ %#%' 6 %"? H P-3PK56 !"W
å !1'1H1A# .%.T7
B
8.
Wprowadzić zawartość strony internetowej.
;%(1<"1 / T#="1 "1 %"?3T7
" 53-1<# 51 UT" 53-1! (#'1? TV7
15# ; 1!!(17
" 53-1<# 51 UT" 53-1!!#%? TV7
:.
Tak naprawdę większość przeglądarek
internetowych nigdy nie wyświetli tych
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
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.
Rysunek 11.24. Kliknięcie odnośnika wywołującego
skrypt view_files.php powinno spowodować
wyświetlenie pokazanego okna dialogowego
Zarządzanie plikami