php i mysql dynamiczne strony www szybki start(reklamowka helion) ZOUGBZNZAVMHTPKDVA47CLECZVAI5WBIWA5PF3A

background image

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63

e-mail: helion@helion.pl

PRZYK£ADOWY ROZDZIA£

PRZYK£ADOWY ROZDZIA£

IDZ DO

IDZ DO

ZAMÓW DRUKOWANY KATALOG

ZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EK

KATALOG KSI¥¯EK

TWÓJ KOSZYK

TWÓJ KOSZYK

CENNIK I INFORMACJE

CENNIK I INFORMACJE

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW INFORMACJE

O NOWOCIACH

ZAMÓW CENNIK

ZAMÓW CENNIK

CZYTELNIA

CZYTELNIA

FRAGMENTY KSI¥¯EK ONLINE

FRAGMENTY KSI¥¯EK ONLINE

SPIS TRECI

SPIS TRECI

DODAJ DO KOSZYKA

DODAJ DO KOSZYKA

KATALOG ONLINE

KATALOG ONLINE

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

Przyk³ady na ftp: 352 kB

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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" ?& #41 > 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

background image

Rozdział 11.

380

 4" ?&" ? > 5##& @,,7

å 1+ -15# "# & # 17 B

 4" ?&4"!" 1- > 5##& @,,7

å 1+ -15# "# & # 17 B

 4" ?& #41 > 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

background image

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

background image

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

background image

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 6 3N3 ! # 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

background image

Rozdział 11.

384

Listing 11.4. Skrypt łączy z serwerem MySQL
i wybiera bazę danych content

 :% % @ "! " ( C  6!2<5# 15 % %

*   %"?3 H' # % 1 6

'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

% 1 O' 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

background image

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

background image

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! U 6%1<"- $$UV $MS$  $ $ G<$)  $F

å 6%1 EG)G)U*V $ $F )G) R  U 6%1<"-VF $Y R  6%1 U 6%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<"- U 6%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

background image

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"!!1 U;<M\T!3= " T]VV >

å =!N3( A# 3H

A3 5 "# 1!5%1<-  U;- V >

(#= ;-=57

"A U" "<(1 UT ("5<23# 1!<(%5TVV >

;-  / ! "%!! 1!U;- V7

B

1 3 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 6 3N3 ! # 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"!!1 U;<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" "<(1 UT ("5<23# 1!<(%5TVV >

* ;-  / ! "%!! 1!U;- V7

 B

C 1 3 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

background image

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

background image

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\T 6%1T] . V )

åU;<M\T 6%1*T] . V )

åU;<M\T 6%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\T 6%1T] . V ) U;<M\T 6%1*T] . V ) U;<M\T 6%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"? # 6 3N3

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\T 6%1T] . V >

C8 ;2316 / U; "-F >;<M\T 6%1T]BF TTF $UVVF 7 B

Zarządzanie adresami URL

background image

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\T 6%1T] . V >

;2316 / U; "-F

å>;<M\T 6%1T]BF TTF

å$UVVF 7

B

"A U;<M\T 6%1*T] . V >

;2316 / U; "-F >;<M

å\T 6%1*T]BF TTF $UVVF 7

B

"A U;<M\T 6%1T] . V >

;2316 / U; "-F

å>;<M\T 6%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\T 6%1*T] . V >

9 ;2316 / U; "-F >;<M\T 6%1*T]BF TTF $UVVF 7 B

9 "A U;<M\T 6%1T] . V >

9* ;2316 / U; "-F >;<M\T 6%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!3 V >

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-.$ !?3 1? =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-.$ !?3 1? =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

background image

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!3 V >

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-.

å$ !?3 1? =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'"1 PK56 - 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<A1 5 <6 U;1!3 F MY<GMMVV >

D, ;%3-#' / #% "# 431/a>;#'\T 6%1<"-T]Ba.>;#'\T 6%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"!!1 U;<M\T3T]VV 15 # ;<M\T3T]7 :. .=

8* .! .$"1 -#NK5HP "-1 6A"? # ". %&".! .%.

8 B 1!1 >

8C 15 # T%.A# 5##/1-.$ !?3 1? =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

background image

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<A1 5 <6 U;1!3 F

åMY<GMMVV >

;%3-#' / #% "#

å431/a>;#'\T 6%1<"-T]Ba.>;#'

å\T 6%1T]B#% "# .a 7

B

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

0 %.=.$H' 6 3N -1!3 )&=. " %3 6%1/ 1+   1/ " 1 !"H1/,

+1 ( /, 431/:% % "A U"!!1 U;<M\T " 1T]VV 15 # ;<M\T " 1T]7 :. .%.

0

0* %.=.%"!&=.  1+ 1  1/-1!5"% "#  5#!/C #'!/9.:% % "A

U"!!1 U;<M\T-1!5"% "# T]VV 15 # ;<M\T-1!5"% "# T]7 :. 1+ 1.%.

0

0C %.=.R 1(#" &=. !115  1/ 6%1.

09 :% % 15 # ;%3-#' 7 :.

0, !115 .%.

0D

08 %.=.R 1(#" *&=. !115  1/ 6%1*.

00 :% % 15 # ;%3-#' 7 :.

 !115 .%.



* %.=.R 1(#" &=. !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

background image

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"!!1 U;<M\T3T]VV

å15 # ;<M\T3T]7 :. .=

å.! .å$"1 -#NK5HP "-1 6A"? #

å". %&".! .%.

%.=.$H' 6 3N -1!3 )&=. " %3

å 6%1/ 1+   1/ " 1 !"H1/,

å +1 ( /, 431/:% % "A

åU"!!1 U;<M\T " 1T]VV 15 #

å;<M\T " 1T]7 :. .%.

%.=.%"!&=.  1+ 1  1/-1!5"% "# 

å5#!/C #'!/9.:% % "A

åU"!!1 U;<M\T-1!5"% "# T]VV 15 #

å;<M\T-1!5"% "# T]7 :. 1+ 1.%.

%.=.R 1(#" &=. !115  1/ 6%1.

:% % 15 # ;%3-#' 7 :.

!115 .%.

%.=.R 1(#" *&=. !115  1/ 6%1*.

:% % 15 # ;%3-#' 7 :.

!115 .%.

%.=.R 1(#" &=. !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

background image

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

background image

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

background image

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

background image

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 6 3N3 ! # 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

background image

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<A1 5 <6

åU;1!3 F 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+,-../012345 436.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"!!1 U;<S \T 6%1T]VV >



 ; / " 4U;<S \T 6%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<A1 5 <6 U;1!3 F 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

background image

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"!!1 U;<S \T 6%1T]VV >

; / " 4U;<S \T 6%1T]V7

;2316 / M   6%1 [) 3< 6%1!

å ) 6%1<"-/; 7

;1!3 / 6!2<2316 U;2316V7

"! U; 6%1V / 6!2<A1 5 <6

åU;1!3 F 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$ 3 6%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$ 3 6%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

background image

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<A1 5 <6

åU;1!3 F 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  . -.

 - "( /a1A a.>;#'

å\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 O O%&&>+? ACO  OO

9D  :+?  A;& &

98 O O>+?  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 \T 6%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

background image

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

background image

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 5 6%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

background image

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.

background image

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).

%5 15  (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

background image

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

background image

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"!!1 U;<M\T!3= " T]VV >

123"1<# 51 UT 6!2<5# 15 % %TV7

A3 5 "# 1!5%1<-  U;- V >

(#= ;-=57

"A U" "<(1 UT ("5<23# 1!<(%5TVV >

;-  / ! "%!! 1!U;- V7

B

1 3 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 6 3N3 ! # 6 " -#NK5H1 "1 (NO'? 

C ;%(1< " 1 / T "1!H5H "1 %"?3  !1'1H1T7

9 " 53-1 UT" 53-1! (#'1? TV7

, "A U"!!1 U;<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" "<(1 UT ("5<23# 1!<(%5TVV >

* ;-  / ! "%!! 1!U;- V7

 B

C 1 3 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

background image

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]\T 6%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!3 V >

;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

background image

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-.$ !?3 1?

å=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-.$ !?3 1? =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

background image

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

409

7.

Zdefiniować formularz zawarty
na stronie HTML.

A# 1 5 6%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

background image

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

background image

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

background image

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 6 3N3 ! # 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-2345  436.378   6.-/'

*+ , ,:+,;'

&& )   "#  *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 O O O   U >+?   AC

O>+?  AC& &

*8 O O  :+?  A;&

*0 OO>+?AC#!&

 O O>+?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

background image

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<A1 5 <6 U;1!3 F

å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 #   .

 - "( /a1A a. 1A/

åa-#' #-<A"1% %:3"-/

å>;#'\T3%#-<"-T]Ba.>;#'

å\TA"1<  1T]B. -.

 - "( /a1A a. 

å! "%!! 1!U;#'\T-1!5"% "# T]V 

å -.

 - "( /a51 1a.

å>;#'\TA!T]B?= -.

 - "( /a1A a.>;#'\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

background image

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 ;A F ;A!V / 6!2<A1 5 <6

åU;1!3 F 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 ;A F ;A!V / 6!2<A1 5 <6 U;1!3 F 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

background image

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 "# ;A V7

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 "# ;A V7

* 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 6 3N3 ! # 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

background image

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


Wyszukiwarka

Podobne podstrony:
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II phmys2
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II phmys2
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II 2
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II phmys2
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II phmys2
PHP i MySQL Dynamiczne strony WWW Szybki start Wydanie II
PHP6 i MySQL 5 Dynamiczne strony WWW Szybki start ph6ms5
PHP6 i MySQL 5 Dynamiczne strony WWW L Ullman

więcej podobnych podstron