You are on page 1of 45

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

PHP i MySQL.
Dynamiczne strony
WWW. Szybki start
Autor: Larry Ullman
Tumaczenie: Micha Dadan (rozdz. 1 7),
Piotr Pilch (rozdz. 8 13, dod. A D)
ISBN: 83-7361-157-6
Tytu oryginau: PHP and MySQL for Dynamic Web Sites VQPG
Format: B5, stron: 580
Przykady na ftp: 352 kB
Coraz wicej serwisw internetowych skada si nie tylko z atrakcyjnego interfejsu
uytkownika, ale take z rozbudowanych aplikacji dziaajcych na serwerze. S one
najczciej oparte o bazy danych, ktre przechowuj dane i zapewniaj szybki do nich
dostp. Jeli chcesz w krtkim czasie nauczy si tworzy takie aplikacje, znalaze
waciw ksik.
PHP i MySQL. Dynamiczne strony WWW nauczy Ci tworzenia dynamicznych
serwisw internetowych z wykorzystaniem PHP i MySQL-a. Ksika przekae Ci wiedz
niezbdn dla projektantw rozwiza internetowych. Wszystkie zagadnienia opisane
s krok po kroku, kademu z nich towarzyszy te odpowiedni rysunek. Przykady
odzwierciedlaj problemy, z ktrymi projektanci stron internetowych spotykaj si
na co dzie.
Ksika opisuje:
Podstawy programowania w PHP
Tworzenie dynamicznych stron internetowych z uyciem PHP
Zasady projektowanie baz danych
Jzyk SQL
Korzystanie z systemu zarzdzania bazami danych MySQL
czenie PHP z systemem MySQL
Uycie sesji
Zabezpieczanie stron internetowych przed dostpem nieuprawnionych osb
Przykadowe aplikacje: rejestracja uytkownikw i sklep internetowy
Tre ksiki uzupeniaj dodatki opisujce sposb instalacji omawianych w niej
narzdzi oraz dodatkowe, przydatne aplikacje.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Jeli chcesz w szybko nauczy si programowania dynamicznych serwisw


internetowych, ta ksika bdzie Twoim intensywnym kursem. Ju po przeczytaniu
kilku rozdziaw bdziesz w stanie pisa pierwsze programy w PHP korzystajce z bazy
MySQL, a po przeczytaniu caej ksiki poradzisz sobie rwnie z tworzeniem bardziej
rozbudowanych aplikacji.

Spis treci

Spis treci

Wprowadzenie
9
Czym s dynamiczne strony WWW?........................................................10
Czym jest PHP?.........................................................................................11
Co to jest MySQL?....................................................................................14
Co bdzie Ci potrzebne .............................................................................16
O tej ksice ..............................................................................................16
Wprowadzenie do PHP
19
Podstawy skadni.......................................................................................20
Przesyanie danych do przegldarki internetowej .....................................23
PHP, HTML i biae odstpy ..................................................................26
Wstawianie komentarzy ............................................................................31
Co to s zmienne? .....................................................................................34
acuchy ...................................................................................................37
Liczby........................................................................................................41
Stae...........................................................................................................45
Apostrof kontra cudzysw .......................................................................48

Rozdzia 2.

Programowanie w PHP
51
Tworzenie formularza w jzyku HTML ..................................................52
Obsuga formularza HTML.......................................................................56
Zarzdzanie opcj Magic Quotes ................................................................59
Wyraenia warunkowe i operatory............................................................61
Weryfikacja danych pochodzcych z formularza......................................65
Rczne przesyanie wartoci do skryptu ...................................................69
Co to s tablice? ........................................................................................74
Ptle for i while .........................................................................................92

Spis treci

Rozdzia 1.

Spis treci

Tworzenie dynamicznych stron WWW


95
Wykorzystywanie plikw zewntrznych...................................................96
Tworzenie i wywoywanie wasnych funkcji ..........................................105
Zasig zmiennej.......................................................................................115
Wywietlanie i obsuga formularza przez jeden skrypt.............................118
Wysyanie poczty elektronicznej...............................................................122
Nagwki HTTP ......................................................................................125
Tworzenie formularzy z pamici...........................................................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 rekordw ........................................................................149
Wybieranie danych..................................................................................152
Wyraenia warunkowe ............................................................................154
Stosowanie LIKE i NOT LIKE ..............................................................158
Sortowanie wynikw zapytania .................................................................160
Ograniczanie wynikw zapytania ...........................................................163
Uaktualnianie danych ..............................................................................165
Usuwanie danych ....................................................................................167

Rozdzia 5.

Zaawansowany SQL i MySQL


169
Projekt bazy danych ................................................................................170
Zczenia .................................................................................................185
Funkcje ....................................................................................................189
Indeksy ....................................................................................................201

Rozdzia 6.

PHP i MySQL
205
Tworzenie szablonu.................................................................................206
czenie si z MySQL-em i wybieranie bazy.........................................211
Obsuga bdw.......................................................................................215
Wykonywanie prostych zapyta ................................................................218
Odczytywanie wynikw zapytania..........................................................228
Bezpieczestwo.......................................................................................232
Korzystanie z funkcji mysql_num_rows() ..............................................238
Uaktualnianie rekordw w PHP ................................................................244

Spis treci

Rozdzia 3.

Spis treci

Rozdzia 7.

Sesje i ciasteczka
251
Posugiwanie si ciasteczkami ................................................................252
Sesje ........................................................................................................271
Sesje a ciasteczka.................................................................................287

Rozdzia 8.

Zabezpieczenia
295
Autoryzacja HTTP ..................................................................................296
Walidacja formularza przy uyciu skryptu JavaScript .............................302
Wyraenia regularne ...............................................................................309
Zabezpieczenia bazy danych ...................................................................321

Rozdzia 9.

Tworzenie aplikacji internetowych


325
Metody debugowania kodu rdowego skryptu PHP ............................326
Metody debugowania zapyta SQL i serwera MySQL...........................329
Obsuga bdw w jzyku PHP.................................................................335
Obsuga bdw serwera MySQL..............................................................339
Zwikszanie wydajnoci aplikacji internetowych ...................................342

Rozdzia 11. Zarzdzanie zawartoci strony przykad


377
Tworzenie szablonu.................................................................................378
Tworzenie zwykych stron internetowych ..............................................383
Zarzdzanie adresami URL .....................................................................385
Zarzdzanie plikami ................................................................................402
Rozdzia 12. Rejestrowanie uytkownikw przykad
417
Tworzenie szablonw..............................................................................418
Tworzenie skryptw konfiguracyjnych...................................................422
Tworzenie strony gwnej .......................................................................428
Rejestracja ...............................................................................................430
Logowanie i wylogowywanie si ..............................................................440
Zarzdzanie hasami ................................................................................446
Cz administracyjna aplikacji ..............................................................457
7

Spis treci

Rozdzia 10. Zagadnienia dodatkowe


347
Buforowanie wyjcia...............................................................................348
Buforowanie stron HTML.......................................................................355
Okrelanie typu przegldarki internetowej.............................................357
Skrypty PHP i JavaScript ........................................................................361
Zastosowanie pakietu PEAR ...................................................................369

Spis treci

Spis treci

Rozdzia 13. Sklep internetowy przykad


473
Tworzenie bazy danych...........................................................................474
Cz administracyjna aplikacji ..............................................................478
Tworzenie szablonu czci publicznej aplikacji......................................491
Katalog produktw ..................................................................................495
Koszyk zakupw .....................................................................................504
Dodatek A

Instalacja
515
Instalacja pod systemem Windows............................................................516
Definiowanie uprawnie serwera MySQL..............................................522
Sprawdzanie poprawnoci instalacji ......................................................528

Dodatek B

Aplikacje dodatkowe
531
Narzdzie phpMyAdmin .........................................................................532
Systemy szablonw .................................................................................533
Oprogramowanie obsugujce fora dyskusyjne.......................................534
Zarzdzanie zawartoci..........................................................................535
Handel elektroniczny...............................................................................536
Wyszukiwarki..........................................................................................537
Biblioteki kodw rdowych .................................................................538

Dodatek C

Odsyacz
539
Jzyk PHP ...............................................................................................540
Serwer MySQL .......................................................................................547

Dodatek D

Zasoby internetowe
553
Jzyk PHP ...............................................................................................554
Serwer MySQL .......................................................................................557
Jzyk SQL ...............................................................................................559
Zabezpieczenia ........................................................................................560
Inne strony internetowe ...........................................................................561
Skorowidz

565

Zarzdzanie zawartoci strony przykad

Zarzdzanie zawartoci
strony przykad

Rozdzia 11. Zarzdzanie zawartoci strony przykad

Pierwszy przykad aplikacji zamieszczony w niniejszej


ksice bdzie dotyczy zarzdzania zawartoci strony.
Aplikacja bdzie zarzdzaa zarwno adresami URL,
jak i plikami, ktre uytkownicy bd mogli dodawa,
wywietla i przetwarza. Co prawda w tym przypadku
nie zostanie uwzgldniona administracyjna cz aplikacji,
ale zostan doczone informacje pozwalajce na jej
wykonanie.

377

Zarzdzanie zawartoci strony

Chocia w tym rozdziale skupimy si na konkretnym


przykadzie, to jednak wspomnimy rwnie o kilku
nowych funkcjach i metodach. Do funkcji tych naley
zaliczy 
  i  . Wspomnimy take,
w jaki sposb zrealizowa operacj umieszczania plikw
na serwerze.

Rozdzia 11.

Tworzenie szablonu
W pierwszym etapie projektowania aplikacji
zostanie utworzony systemowy szablon,
ktrego zadaniem bdzie wspomaganie procesu
przygotowywania strony HTML. Strona
w ostatecznej postaci (rysunek 11.1)
bdzie korzystaa z tabel i kilku arkuszy
stylw CSS (ang. Cascading Style Sheets).

Aby utworzy plik naglowek.html,


naley wykona nastpujce kroki:
1. W edytorze tekstu utworzy now stron

Tworzenie szablonu

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

378

Rysunek 11.1. Domylny wygld strony


aplikacji omawianej w tym rozdziale

Zarzdzanie zawartoci strony przykad


Listing 11.1. Plik naglowek.html rozpoczyna si od kodu formatujcego stron HTML i zawiera wymagany
kod arkusza stylw CSS

379

Tworzenie szablonu







 !" "#  $
*

 %&''''#()*) + **,+   !" "# - -.




 
+  !/ %&''''#(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? 
.

Rozdzia 11.

Tworzenie szablonu

 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 stylw CSS, ktry
posuy do sformatowania tekstu. Ze wzgldu
na niewielk objto kodu arkusza stylw
CSS, zamiast w oddzielnym pliku zostanie
on umieszczony bezporednio w sekcji 
strony HTML.
3. Zakoczy pisanie kodu nagwka strony

HTML i utworzy pierwszy wiersz tytuu.


 1-.
=#-6.
 =1
'"- /0I
=#-1/
51!%5" (/
51%--" (/
"( /51 1.

 .

 -
5#!% /*
=(5##/@,,.

%
5!!/ " 1.JHK-H "1

H' #L5"K
! # %. -.

 .

 .

Podstawowa strona HTML bdzie zawieraa


tabel zoon z trzech wierszy tytuu,
wiersza przechowujcego odnoniki
i zawarto strony oraz wiersza, w ktrym
bd umieszczone informacje o prawach
autorskich (rysunek 11.2).

380

Rysunek 11.2. Wygld strony, na ktrej w celu


wyrnienia wierszy i kolumn tabeli zastosowano
obwdki

Zarzdzanie zawartoci strony przykad


4. Utworzy sekcj powizan z odnonikami

i rozpocz definiowanie komrek


przechowujcych 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 umieci go na serwerze WWW


(w katalogu includes).
Na rysunku 11.3 przedstawiono struktur
katalogw zawierajcych pliki aplikacji.
Wskazwka
 W przykadzie zamieszczonym w nastpnym

przykadzie zostanie zastosowany bardziej


zoony arkusz stylw CSS, ktry bdzie
zapisany w oddzielnym pliku doczonym
do pliku naglowek.html.

381

Tworzenie szablonu

Rysunek 11.3. Struktura aplikacji internetowej,


ktrej katalogiem gwnym jest katalog html

Rozdzia 11.

Aby utworzy plik stopka.html,


naley wykona nastpujce kroki:
1. W edytorze tekstu utworzy now stron

HTML (listing 11.2).



"! " (
*

! #%? 
.

2. Zakoczy kod rodkowego wiersza tabeli.

 -.

 .

Caa zawarto strony bdzie przechowywana


w rodkowym wierszu tabeli, ktrego
definicja zaczyna si w pliku naglowek.html.
Powyszy kod koczy definicj wiersza,
po ktrym zostanie umieszczony trzeci
i ostatni wiersz.
3. Zdefiniowa ostatni wiersz i zakoczy

Tworzenie szablonu

tworzenie strony HTML.

 .

 -.Q =!%7 -.

 -
"( /51 1.Q5#%67
*
6


 
 -

 !"( !F
 5 -.

 .
 =1.
=#-6.
 .

4. Zapisa plik pod nazw stopka.html

i umieci go na serwerze WWW


(w katalogu includes).

382

Listing 11.2. Plik stopka.html zawiera pozostae


definicje wygldu strony HTML



"! " (
*

! #%? 
.
*


R# "15
H' #L5"
! # 6
.


 -.
C

 .
9
,

 .
D

 -.Q =!%7 -.
8

 -
"( /51 1.Q5#%67

*
6
 
 -


 !"( !F
 5 -.
0

 .



 =1.
*

=#-6.


 .

Zarzdzanie zawartoci strony przykad


Listing 11.3. Gwna strona aplikacji
(w razie potrzeby naley umieci na niej
bardziej wartociowe informacje)

Zanim zajmiemy si najwaniejsz czci


aplikacji internetowej (samym mechanizmem
zarzdzania zawartoci stron) konieczne bdzie
stworzenie jeszcze dwch stron HTML. Jedna
z nich o nazwie index.php bdzie speniaa rol
gwnej strony aplikacji. Z kolei druga o nazwie
mysql_connect.php jest skryptem, ktrego
zadaniem jest poczenie z serwerem MySQL
i wybranie wymaganej bazy danych (w celu
uzyskania dodatkowych informacji na jej temat
naley zapozna si z zawartoci ramki Schemat
bazy danych zawartej w nastpnym podrozdziale).

Aby utworzy gwn stron,


naley wykona nastpujce kroki:
1. W edytorze tekstu utworzy nowy skrypt PHP

(listing 11.3).
:% %
@
"! " (


" -1+% %

2. Okreli tytu strony i doczy plik

nagwka HTML.
;%(1< " 1
/
TJHK-H "1
H' #L5"K
! # T7
" 53-1<# 51
UT" 53-1! (#'1? TV7
:.

Rysunek 11.4. Gwna strona

3. Wypeni stron tekstem.

%.M%
!%
!%
!%
!%
!%
!%

!%
!%
!% %.

%.M%
!%
!%
!%
!%
!%
!%

!%
!%
!% %.

Co prawda posuyem si tego typu treci


(sowo ), ale oczywicie na stronie
gwnej mona umieci bardziej wartociowe
informacje.
4. Doczy stopk HTML.
:% %
" 53-1<# 51
UT" 53-1!! #%? TV7
:.

5. Zapisa plik pod nazw index.php, umieci go

na serwerze WWW i przetestowa przy uyciu


przegldarki internetowej (rysunek 11.4).
383

Tworzenie zwykych stron internetowych

:% %
@
"! " (


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


:.

Tworzenie zwykych
stron internetowych

Rozdzia 11.

Aby utworzy skrypt


mysql_connect.php,
naley wykona nastpujce kroki:
1. W edytorze tekstu utworzy nowy skrypt PHP

(listing 11.4).
:% %
@
"! " (
C

6!2<5# 15 % %

Tworzenie zwykych stron internetowych

Skrypt jest taki sam jak jego poprzednie wersje


wykorzystane w poprzednich rozdziaach
(z wyjtkiem nazwy uytkownika i jego hasa
oraz konfiguracji bazy danych). Skrypt moe
zosta stworzony od podstaw lub poprzez
odpowiedni modyfikacj poprzedniej wersji.
2. Okreli konfiguracj bazy danych w postaci

staych.
-1A"
-1A"
-1A"
-1A"

1
UT<M )TF
T3!1  1TV7
1
UT<GMM)TF
T%!!'#-TV7
1
UT<MTF
T#5 #! TV7
1
UT<$G TF
T5# 1 TV7

Majc na wzgldzie kwesti zabezpiecze


uytkownik czcy si z serwerem MySQL
powinien na potrzeby omawianej aplikacji
dysponowa moliwoci wykonywania tylko
takich polece jak , , 
i dodatkowo wycznie dla bazy danych
content.

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
*

:.

3. Poczy 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 obsugi bdw realizowanym
przez funkcj 


. Wicej
informacji na ten temat zawarto w rozdziale 6.
4. Zakoczy skrypt PHP.
:.

5. Zapisa plik pod nazw mysql_connect.php

i umieci go na serwerze WWW poza


katalogiem gwnym (rysunek 11.3).
384

Wskazwki
 W nastpnym rozdziale zostanie omwiony

przykad, w ktrym zostan wykorzystane


bardziej zaawansowane metody obsugi
bdw. Poza tym zamieszczono w nim
zmodyfikowan wersj skryptu
mysql_connect.php.
 W celu uzyskania dodatkowych informacji

na temat praw dostpu do serwera MySQL


naley zapozna si z zawartoci dodatku A.

Zarzdzanie zawartoci strony przykad

Zarzdzanie adresami URL


Kolejne dwie strony HTML, ktre zostan
stworzone, umoliwi uytkownikom dodawanie
adresw URL i przegldanie ju doczonych.
Ta cz aplikacji bazuje na trzech tabelach
bazy danych 
, 
   i 
   .
Aby uzyska dodatkowe informacje, naley
zapozna si z zawartoci ramki Schemat
bazy danych.

Dodawanie adresw URL

W celu okrelenia wartoci pola    dla


dodanego adresu URL zostanie wykorzystana
funkcja 
 , ktra do tej pory
nie bya omawiana. Kadorazowo, gdy na tabeli
zawierajcej pole o automatycznie zwikszanej
wartoci (zazwyczaj jest nim klucz gwny)
zostanie wykonane zapytanie, wtedy dla pola
serwer MySQL uyje nastpnej wartoci.
Funkcja 
  zwrci t warto.
W przeciwnym razie nie byoby moliwe jej
uzyskanie.

385

Zarzdzanie adresami URL

Skrypt add_url.php prawdopodobnie jest


najbardziej zoonym wrd wszystkich
wchodzcych w skad 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 wypenieniu
formularza (adres URL, jego tytu, opis) dane
zostan umieszczone w tabeli 
   .
Nastpnie w celu dodania do tabeli 

od jednego do trzech rekordw (w zalenoci
od iloci kategorii wybranych przez uytkownika)
zostanie zastosowany klucz gwny tabeli
   wraz z wartociami pola   .

Rozdzia 11.

Schemat bazy danych

Zarzdzanie adresami URL

W niniejszym rozdziale zastosowano baz danych o nazwie content, ktr utworzono


w rozdziale 5. W tamtym rozdziale zdefiniowano trzy znormalizowane tabele na potrzeby
obsugi adresw URL (zoona struktura pozwala na zaklasyfikowanie adresw URL
do wielu typw). W tym rozdziale zostanie stworzona tabela   wykorzystywana
przy zarzdzaniu plikami. Cakowita struktura bazy danych moe zosta ponownie
zdefiniowana z wykorzystaniem poniszych 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 mona uy poniszych polece jzyka SQL
(rysunek 11.5).

M
G M7

 M)
nazwa_tabeli7

Rysunek 11.5. Sprawdzenie struktury bazy danych

386

Zarzdzanie zawartoci strony przykad

Aby utworzy skrypt add_url.php,


naley wykona nastpujce 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 wypeniony


i zastosowa funkcj     .

3. Przeprowadzi walidacj wprowadzonego

adresu URL i jego tytuu.

"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

"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 uytkownikom przesya 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

387

Zarzdzanie adresami URL

"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

1 3
6!2<1<1!5%1<! " (

U "
U;- VF
;-=5V7

Podobnie jak w poprzednich rozdziaach,


funkcja      gwarantuje poprawno
przesyanych danych niezalenie od tego, czy
uaktywniono funkcj Magic Quotes, czy nie.

Rozdzia 11.
W tym przykadzie zostanie dokonane
sprawdzenie, czy wprowadzono wartoci.
W celu zwikszenia dokadnoci mona
oczywicie zastosowa wyraenia proste
(tak naprawd w rozdziale 8. zawarto skrypt
przeprowadzajcy walidacj adresw URL).
Jeli jakie pole nie zostanie wypenione,
pojawi si komunikat bdu widoczny
na rysunku 11.6.
4. Sprawdzi, czy w polu 
 

podano warto.

Zarzdzanie adresami URL

"A
U1 % 6U;<M\T-1!5"% "# T]VV
>

;-
/
1!5%1<- 

U;<M\T-1!5"% "# T]V7

B
1!1
>

;-
/
TT7
B

Rysunek 11.6. Jeli uytkownik nie poda adresu


URL lub jego tytuu, zostanie wywietlony
komunikat bdu

Ze wzgldu na to, e w polu 


 
tabeli 
    nie trzeba wstawia wartoci,
bdzie ona przetwarzana, ale tylko wtedy,
gdy zostanie wprowadzona w formularzu.
Jeli w polu 
  nie zostanie
wstawiona adna warto, zmiennej 
stosowanej w zapytaniu bdzie przypisywany
pusty acuch.
Listing 11.5. Skrypt pozwala uytkownikom przesya adresy URL do bazy danych cig 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

388

Zarzdzanie zawartoci strony przykad


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

Rysunek 11.7. Uytkownik musi wybra co najmniej


jedn kategori dla wprowadzonego adresu URL

Listing 11.5. Skrypt pozwala uytkownikom przesya adresy URL do bazy danych cig 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

389

Zarzdzanie adresami URL

Uytkownik, majc do dyspozycji zbir


typw zawartych w tabeli 
  , moe
przypisa wprowadzanemu adresowi URL
maksymalnie trzy kategorie. Zakada si,
e uytkownik wybierze kategori przy
uyciu pierwszego menu rozwijanego
(  ). Niezalenie od tego instrukcja
warunkowa sprawdzi, czy skorzystano
z przynajmniej jednego menu rozwijanego.
Jeli tak nie bdzie, zostanie wywietlony
komunikat bdu (rysunek 11.7).

Rozdzia 11.
6. Doda adres URL do tabeli 
   .

Zarzdzanie adresami URL

"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 wzgldu na struktur bazy danych, adres


URL musi zosta dodany do tabeli 
   
zanim bdzie moliwa modyfikacja tabeli

. Powysze zapytanie doda adres URL,
a nastpnie przy uyciu funkcji 

  zwrci warto pola   
(klucz gwny tabeli o automatycznie
zwikszanej wartoci). Uzyskana warto
moe nastpnie zosta wykorzystana
w drugim zapytaniu (krok 7.).

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

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

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

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

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

;2316
/
U; "-F

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

$UVVF
7

;2316
/
!3=! 
U;2316F
F
*V7

Listing 11.5. Skrypt pozwala uytkownikom przesya adresy URL do bazy danych cig 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

390

Zarzdzanie zawartoci strony przykad


Jeli zostanie pobrana warto zmiennej   ,
bez obaw mona przej do wykonywania
gwnego zapytania (dodanie rekordu do
tabeli 
). Aby tak postpi, na pocztku
naley zdefiniowa zapytanie i przypisa
jego pocztkow cz zmiennej 
.
Po sprawdzeniu, czy wybrano kategorie
(przy uyciu menu rozwijanych), dla kadej
z nich dodano rekord przy uyciu zapytania.
Na kocu w celu usunicia z zapytania
ostatnich dwch znakw (przecinek i znak
spacji) zostanie uyta funkcja !
.
Jeli wystpi problemy ze skadni zapytania
naley nakaza interpreterowi jzyka PHP
wywietlenie wartoci zmiennej 
,
dziki czemu mona stwierdzi, co bdzie
przetwarzane przez serwer MySQL.

8. Wykona zapytanie, wprowadzi komunikaty

informujce o jego wyniku i uzupeni


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

Powysze instrukcje warunkowe


wywietl odpowiednie komunikaty
zwizane z przesyanymi danymi.

Zarzdzanie adresami URL

Listing 11.5. Skrypt pozwala uytkownikom przesya adresy URL do bazy danych cig 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

391

Rozdzia 11.
9. Utworzy stron HTML, na ktrej zostan

umieszczone menu rozwijane umoliwiajce


wybranie typu adresw 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

Zarzdzanie adresami URL

Listing 11.5. Skrypt pozwala uytkownikom przesya adresy URL do bazy danych cig 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

:.

392

Zarzdzanie zawartoci strony przykad


Formularz bdzie zawiera trzy menu rozwijane,
z ktrych kade bdzie dysponowao list
dostpnych typw adresw URL pobranych
z bazy danych. Ze wzgldu na to, e zaley
mi na wywietleniu trzech kopii tego typu
informacji, bardziej efektywnym bdzie
przypisanie wynikw zmiennej ni wielokrotne
wysyanie zapytania do bazy danych.
Na rysunku 11.8 pokazano kod rdowy
strony zawierajcej 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 -.

%.=.$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# .

393

Zarzdzanie adresami URL

Rysunek 11.8. Kod rdowy strony HTML


dynamicznie generujcy menu rozwijane

%.=.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"? #
". %&".! .%.

Rozdzia 11.
Formularz (rysunek 11.9) pozwala wprowadzi
do pl tekstowych kilka wartoci i zapamita je.
11. Zakoczy skrypt PHP.
:% %
6!2<5#!1UV7
" 53-1
UT" 53-1!! #%? TV7
:.

12. Zapisa plik pod nazw add_url.php, umieci

go na serwerze WWW i przetestowa przy uyciu


przegldarki internetowej (rysunek 11.10).

Zarzdzanie adresami URL

Rysunek 11.9. Formularz sucy do dodawania


adresw URL

Rysunek 11.10. Po przesaniu wprowadzonych


danych zostanie wywietlony komunikat
i formularz bdzie widoczny ponownie
(z poprzednio wstawionymi wartociami)

394

Zarzdzanie zawartoci strony przykad


Wskazwki
 W celu zablokowania moliwoci

stosowania znacznikw jzyka HTML


we wprowadzanych wartociach naley
posuy si funkcj 
 " .
Funkcja ta usuwa wszystkie znaczniki
nie tylko jzyka HTML, ale te PHP.
 Aby wywietli znaczniki jzyka HTML

(w postaci, w jakiej wystpuj w kodzie


rdowym) bez ich uaktywniania naley
skorzysta z funkcji #  #
 
i #      .
 Funkcja 
  jest powizana

te stworzy kontrolki, ktre posuyyby


do wybierania maksymalnie trzech kategorii.
 Po uaktywnieniu funkcji Magic Quotes,

wartoci wprowadzone do formularza przed


przesaniem do przegldarki musz zosta
przetworzone przez funkcj 
#  .
 W przytoczonym przykadzie po poprawnym

przesaniu wstawionych wartoci formularz


zostanie ponownie wywietlony wraz
z poprzednio wprowadzonymi danymi.
Aby to zmieni, naley zrezygnowa
z wywietlania formularza lub wyczyci
zawarto zmiennej tablicowej %&
po udanym wykonaniu zapytania na bazie
danych.
 Funkcja jzyka PHP o nazwie 

jest odpowiednikiem funkcji  

oferowanej przez serwer MySQL.

 W przypadku korzystania ze skryptw

PHP i stron HTML mona stosowa


rozwizanie zapamitujce, jakie pozycje
zostay wybrane z menu rozwijanego,
ale jest to zwizane z wiksz iloci kodu
rdowego, a ponadto w przytoczonym
przykadzie niezbyt dobrze wsppracuje
ze zmienn  $.

395

Zarzdzanie adresami URL

z kad pojedyncz sesj (interakcja z baz


danych). Z tego te powodu nie naley
si przejmowa tym, e zwrcono
nieprawidow warto nawet wtedy,
gdy skrypt jednoczenie zosta wykonany
przez kilku rnych uytkownikw.

 W zastosowanym przykadzie mona byo

Rozdzia 11.

Przegldanie wysanych adresw URL

Zarzdzanie adresami URL

Skrypt umoliwiajcy przegldanie adresw URL


bdzie si skada z dwch czci grnej
i dolnej. W pierwszej z nich zostanie wywietlone
menu rozwijane z dostpnymi typami adresw,
natomiast w drugiej wszystkie odnoniki dla
wybranego typu. Gdy uytkownik wywietli
stron po raz pierwszy, wtedy nie zostanie
wywietlony aden adres URL. Po wybraniu
przez niego typu i przesaniu danych
wprowadzonych do formularza, strona zostanie
wywietlona ponownie wraz z list adresw
URL dla wybranego typu (niezalenie
od tego menu rozwijane w dalszym cigu
bdzie widoczne).

Nowe funkcje i metody


Skrypt view_urls.php wprowadza dwa nowe rozwizania. Jednym z nich jest rzutowanie,
czyli narzucanie zmiennej konkretnego typu (cakowitoliczbowy, acuchowy itp.).
Aby zrzutowa zmienn, naley przed jej nazw w nawiasach okreli ostateczny jej typ.
Oto przykad:

;4
/
7
 6%
Nb535 #'6

;4
/
U" V;47
 6%
5N?#'" #"5H=#'6

Do dostpnych typw zmiennych (w niektrych przypadkach wiele okrele dotyczy tego


samego typu) naley zaliczy takie typy jak  i  "
, ! i ! , ' , ! ,

, 
", 

 i !(  . Interpreter jzyka PHP w oparciu o pocztkow warto


rzutowanej zmiennej zmieni jej typ i przypisze jej odpowiadajc mu warto logiczn
(w celu uzyskania szczegowych informacji z tym zwizanych naley zajrze do
dokumentacji jzyka PHP). Przy uyciu funkcji  )  mona te zmieni typ zmiennej
na typ cakowitoliczbowy (co zostanie pokazane w kolejnym skrypcie). Z kolei poprzez
umieszczenie wartoci w znakach cudzysowu mona zamieni typ zmiennej na acuchowy.
Drugim nowym rozwizaniem zastosowanym w skrypcie jest funkcja  . Funkcja
pobiera wartoci zmiennej tablicowej i przypisuje je oddzielnym zmiennym. Oto przykad:

;4
/
6
U_ F
$#'?V7

"!
U;A"! F
;! V
/
;47

Powyszym zmiennym '


 i  zostan przypisane odpowiednio wartoci Jan i Nowak.
Podobna funkcjonalno moe by rwnie uzyskana przy uyciu funkcji *
  podobnej
do funkcji  .

396

Zarzdzanie zawartoci strony przykad

Aby utworzy skrypt view_urls.php,


naley wykona ponisze 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

Rysunek 11.11. Menu rozwijane

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

Listing 11.6. Skrypt view_urls.php wywietla zarwno menu z kategoriami adresw 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   
 
  
 
 ! "#   $%& 
*'

397

Zarzdzanie adresami URL

Po pierwszym wywietleniu strony HTML


bdzie na niej widoczny formularz skadajcy
si z menu rozwijanego i przycisku Wylij
(rysunek 11.11). W tym miejscu zawarto
pocztek definicji formularza umieszczonego
na stronie HTML.

Rozdzia 11.
3. Pobra wszystkie dostpne typy adresw URL

i doczy 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

Zarzdzanie adresami URL

Powyszy kod pobiera z tabeli 


  
kady typ adresu URL i na podstawie
zwrconych rekordw generuje kod rdowy
menu rozwijanego umieszczonego na stronie
HTML (rysunek 11.12).

Rysunek 11.12. Dynamicznie wygenerowany kod


rdowy formularza zawartego na stronie HTML

Listing 11.6. Skrypt view_urls.php wywietla zarwno menu z kategoriami adresw URL,
jak i z adresami dla konkretnej kategorii cig 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

398

Zarzdzanie zawartoci strony przykad


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

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

Pierwsza operacja bdzie polegaa


na zastosowaniu funkcji  )  w celu
sprawdzenia, czy wybrany typ, ktry zostanie
zastosowany w zapytaniu jest typem
cakowitoliczbowym. W dalszej kolejnoci
przy uyciu funkcji   zostanie pobrana
nazwa typu i wywietlona na stronie w roli
nagwka. Wicej informacji na temat funkcji
 )  i   mona znale w ramce
Nowe funkcje i metody lub w dokumentacji
jzyka PHP.
6. Zainicjalizowa zmienn '
 i wysa

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 wywietla zarwno menu z kategoriami adresw URL,
jak i z adresami dla konkretnej kategorii cig 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+ 

399

Zarzdzanie adresami URL

;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

Jeli typ zosta ju wybrany (w takim


przypadku zostanie doczony do adresu
URL i udostpniony przy uyciu zmiennej
tablicowej +), powizane z nim adresy
URL powinny by pobrane.

Rozdzia 11.
Zmienna '
 zostanie wykorzystana
na dwa sposoby. Pierwszy z nich bdzie
polega na tym, e zmienna wskae, e przed
wywietleniem pierwszego rekordu na stronie
HTML powinna zosta utworzona tabela.
W drugim przypadku zmienna posuy
do sprawdzenia, czy w wyniku wykonanego
zapytania zostay zwrcone jakiekolwiek
adresy URL.
7. Wywietli wszystkie zwrcone rekordy.

Zarzdzanie adresami URL

' "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

Ptla $# zwrci wszystkie rekordy


pobrane w wyniku wykonanego zapytania.
Przed wywietleniem pierwszego rekordu
do przegldarki internetowej zostanie
wysana tabela i jej nagwek
(rysunek11.13).

Listing 11.6. Skrypt view_urls.php wywietla zarwno menu z kategoriami adresw URL,
jak i z adresami dla konkretnej kategorii cig 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

:.

400

Zarzdzanie zawartoci strony przykad


8. Wywietli komunikat, jeli nie zosta

zwrcony aden adres URL i zakoczy


kod gwnej 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

Rysunek 11.13. Lista adresw URL


dla wybranego typu

9. Zakoczy kod rdowy strony HTML.


6!2<5#!1UV7
" 53-1<# 51
UT" 53-1!! #%? TV7
:.

10. Zapisa plik pod nazw view_urls.php, umieci

go na serwerze WWW i przetestowa przy


uyciu przegldarki internetowej.
Wskazwki
 W rozdziale 12. zamieszczono skrypt
Rysunek 11.14. Wygld strony w przypadku,
gdy z wybranym typem nie powizano jeszcze
adnych adresw URL

demonstrujcy, w jaki sposb wywietla


rekordy na wielu stronach (zapoznaj si
z zawartoci ostatniego skryptu tego
rozdziau o nazwie view_users.php).
 Przykady zawarte w nastpnym rozdziale

dotycz rwnie operacji rejestracji


i autoryzacji uytkownika. Jeli zaley Ci
na ochronie zarzdzanych informacji,
obie operacje powinny zosta zastosowane
w aplikacji omawianej w niniejszym rozdziale.
 W razie potrzeby w stosunku do pola

  mona zastosowa funkcj
.!
 (skrt od sw newline to break).

Funkcja zamieni kady znak nowego wiersza


tworzony poprzez wcinicie klawisza
Return lub Enter na znacznik jzyka
(X)HTML postaci /!
01.
401

Zarzdzanie adresami URL

Jeli zostan zwrcone jakiekolwiek wiersze,


zmienna '
 znajdujca si wewntrz
ptli $# przyjmie warto ,. A zatem,
jeli wartoci zmiennej '
 nadal bdzie
-, oznacza to, e nie zwrcono adnych
rekordw i powinien zosta wywietlony
komunikat podobny do pokazanego na
rysunku 11.14. W przeciwnym razie powinna
zosta wygenerowana kompletna tabela.

Rozdzia 11.

Zarzdzanie plikami
Ostatnia cz omawianej aplikacji internetowej
suy do zarzdzania plikami dowolnego typu.
Odpowiednie skrypty pozwol uytkownikom
przy uyciu przegldarki internetowej umieci
na serwerze pliki przechowywane na ich
komputerach (rysunek 11.15). Dodatkowo
do bazy danych zostanie dodany rekord
powizany z wykonan operacj.

Zarzdzanie plikami

Umieszczanie plikw na serwerze


Podobnie jak w przypadku przetwarzania
przy uyciu skryptu PHP dowolnego formularza
zawartego na stronie HTML, rwnie operacja
umieszczania plikw na serwerze skada si
z dwch etapw. Najpierw musi zosta
wywietlony formularz zawarty na stronie HTML
umoliwiajcy umieszczanie plikw na serwerze.
Po przesaniu danych wprowadzonych
do formularza skrypt PHP musi skopiowa
plik w odpowiednie miejsce na serwerze.
Wymagana skadnia kodu rdowego
definiujcego formularz umoliwiajcy
umieszczenie pliku na serwerze skada si
z trzech czci:
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


znacznikw kodu formularza oznacza,
e powinien by w stanie obsuy wiele typw
danych, wczajc w to pliki. Naley rwnie
zauway, e formularz musi korzysta z metody
%&. Warto ukrytego pola 23,4
spenia w formularzu rol ograniczenia wielkoci
przetwarzanego pliku (wyraonej w bajtach)
i musi znajdowa si przed definicj pola ' ,
ktre suy do utworzenia na formularzu
odpowiedniego przycisku (rysunek 11.16).

402

Rysunek 11.15. Uytkownicy bd mogli wybra


plik, ktry zostanie umieszczony na serwerze

Rysunek 11.16. Definicja typu file tworzy


na formularzu zawartym na stronie HTML
przycisk podobny do pokazanego powyej

Zarzdzanie zawartoci strony przykad


Tabela 11.1. Dane dotyczce pliku umieszczanego
na serwerze mog zosta uzyskane przy uyciu
powyszych elementw tablicy
Zmienna tablicowa $_FILES
Indeks
 1

Znaczenie
Oryginalna nazwa pliku (przechowywanego
na komputerze uytkownika).

6%1

Typ MIME pliku okrelony


przez przegldark.

!"H1

Wielko pliku umieszczanego na serwerze


(wyraona w bajtach).

%<  1

Tymczasowa nazwa pliku po umieszczeniu


na serwerze.

Poczwszy od wersji 4.1 jzyka PHP, dostp


do pliku umieszczonego na serwerze moe by
uzyskany przy uyciu zmiennej superglobalnej
,. W przypadku wczeniejszych wersji
(jeli uaktywniono parametr
"
"!)
naleao skorzysta ze zmiennej tablicowej
%%&, lub po prostu ze zmiennej
 , powizanej z nazw pola ' .
Zmiennej plikowej zostan przypisane wartoci
tablicy wymienione w tabeli 11.1.
Po pobraniu pliku przez skrypt PHP funkcja
)  '  moe go przenie

z katalogu tymczasowego w jego docelowe


pooenie.
#41<3%#-1-<A"1U
 F

V7

Majc to na uwadze, na pocztku dokonam


modyfikacji pliku konfiguracyjnego jzyka
PHP o nazwie php.ini tak, aby moliwe byo
umieszczanie plikw na serwerze, a nastpnie
zostanie stworzony sam skrypt realizujcy
to zadanie.

403

Zarzdzanie plikami

Po wywoaniu funkcji zakoczonym powodzeniem


tymczasowa wersja pliku zostanie usunita
z serwera. Aby jednak tak byo, serwer WWW
musi dysponowa prawem zapisu do katalogu,
w ktrym zostanie umieszczony plik.

Rozdzia 11.
3. Zapisa plik i ponownie uruchomi

Aby przygotowa serwer,


naley wykona nastpujce kroki:

serwer WWW (rysunek 11.18).


%5 15 
(51A3

1. W edytorze tekstu otworzy plik php.ini.


2. W File Uploads zmodyfikowa ponisze

parametry (rysunek 11.17):

Zarzdzanie plikami

A"1<3%#-!
/

3%#-< %<-"
/
 %
3%#-< +<A"1!"H1
/
*

Pierwszy parametr pozwala na umieszczanie


plikw na serwerze lub blokuje tak moliwo.
Drugi parametr pozwala okreli miejsce,
w ktrym tymczasowo bd przechowywane
pliki umieszczane na serwerze. W przypadku
wikszoci systemw operacyjnych przed
parametrem tym mona bez wikszych obaw
umieci znak komentarza (znak rednika).
Uytkownicy systemw Mac OS X i UNIX
zazwyczaj dla parametru ustawiaj katalog
/tmp, natomiast w przypadku systemu
Windows powinni korzysta z katalogu
okrelonego ciek C:\PHP\uploadtemp.
Ostatni z wymienionych parametrw suy
do okrelenia maksymalnej wielkoci plikw
(wyraonej w megabajtach) umieszczanych
na serwerze.

Powysze polecenie suy do ponownego


uruchomienia serwera Apache dziaajcego
pod systemem operacyjnym UNIX.
Uytkownicy systemu Mac OS X
w celu ponownego uruchomienia serwera
mog uy panelu Sharing, natomiast
w przypadku systemu Windows naley
posuy si apletem Usugi znajdujcym
si w Panelu sterowania lub innym
narzdziem wsppracujcym
z serwerem WWW.
4. Utworzy nowy katalog o nazwie uploads

znajdujcy si poza struktur katalogow


serwera WWW. Katalog ten bdzie spenia
rol docelowego miejsca, w ktrym bd
umieszczane pliki na serwerze. Ze wzgldu
na zabezpieczenia katalog nie powinien
by czci struktury katalogowej
serwera WWW.

Rysunek 11.17. Sekcja File Uploads pliku


php.ini odpowiedzialna za obsug plikw
umieszczanych na serwerze

Rysunek 11.18. Aby zmiany dokonane w pliku konfiguracyjnym jzyka PHP


zostay uwzgldnione, konieczne jest ponowne uruchomienie serwera WWW

404

Zarzdzanie zawartoci strony przykad


5. Ustawi dla katalogu uploads takie uprawnienia,

aby serwer WWW mg w nim umieszcza pliki.


Pewna, ale mniej bezpieczna metoda polega na
wykonaniu polecenia # 567775 
(systemy UNIX i Mac OS X). W przypadku
systemu Windows naley klikn katalog
prawym przyciskiem myszy, a nastpnie wybra
pozycj Udostpnianie. Spowoduje to
wywietlenie okna zawierajcego kart
Udostpnianie (rysunek 11.19).

Rysunek 11.19. Karta Udostpnianie


w systemie Windows pozwala na okrelenie,
kto bdzie dysponowa dostpem do katalogu

Wskazwki
 Warto pola 23,4 ogranicza

w przegldarce wielko pliku. Plik konfiguracyjny


jzyka PHP dysponuje wasnymi ograniczeniami.
Mona rwnie przeprowadzi walidacj wielkoci
pliku umieszczonego na serwerze przy uyciu
skryptu PHP.
 Parametr  *8 zawarty w pliku php.ini
Rysunek 11.20. Jeli uprawnienia nie
zostan poprawnie zdefiniowane, pojawi si
komunikaty bdw podobne do pokazanego

suy do okrelenia maksymalnej iloci danych


(wyraonej w megabajtach), ktre mog zosta
umieszczone na serwerze przy uyciu jednego
skryptu. Domylnie jest to 8 MB.
 W jzyku PHP w wersji 4.2 nowoci jest indeks
bdw zmiennej tablicowej ,. Jego

zadaniem jest przechowywanie dowolnych


informacji dotyczcych bdw powizanych
z plikiem umieszczanym na serwerze.
 Ze wzgldu na czas wymagany

do umieszczenia duego pliku


na serwerze moe by konieczna
modyfikacja wartoci parametru
* *    zawartego
w pliku php.ini lub tymczasowe
przekazanie jej do skryptu przy
uyciu funkcji     .

 Jeli mamy na uwadze kwesti zabezpiecze,

przechowywanie plikw umieszczanych


na serwerze poza struktur katalogw serwera
WWW jest bardziej wskazane. Dziki temu
uniemoliwi si uytkownikom uzyskanie
bezporedniego dostpu do plikw i uniknie si
zagroenia zwizanego z umieszczaniem katalogu
dysponujcego mao restrykcyjnymi uprawnieniami
w miejscu publicznie dostpnym.
405

Zarzdzanie plikami

W zalenoci od stosowanego systemu


operacyjnego moe si okaza, e bdzie
moliwe umieszczanie plikw na serwerze bez
koniecznoci wykonywania tego kroku. Aby si
o tym przekona, przed modyfikacj uprawnie
naley wykona poniszy skrypt. Jeli zostan
wywietlone komunikaty podobne do pokazanego
na rysunku 11.20, naley dokona zmiany
w uprawnieniach.

Rozdzia 11.

Aby utworzy skrypt add_file.php,


naley wykona nastpujce 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 wypeniono formularz

Zarzdzanie plikami

i przeprowadzi walidacj wartoci 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

1 3
6!2<1<1!5%1<! " (

U "
U;- VF
;-=5V7

"A
U1 % 6U;<M\T-1!5"% "# T]VV
>

;-
/
1!5%1<- 

U;<M\T-1!5"% "# T]V7

B
1!1
>

;-
/
TT7

Podobnie jak w przypadku omawianego


wczeniej skryptu add_url.php, dla pola

  zostanie przeprowadzana
najprostsza walidacja. Ze wzgldu na to,
e pozostae pola formularza nie wymagaj
sprawdzenia, zastosowano tylko jedn
instrukcj warunkow.
W celu okrelenia, czy rozmiar pliku
umieszczanego na serwerze zawiera si
w zaoonym przedziale mona rwnie
sprawdzi jego wielko.

Listing 11.7. Skrypt pozwala uytkownikowi umieci 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

406

Zarzdzanie zawartoci strony przykad


3. Wstawi do bazy danych rekord powizany

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

"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 rozwizanie jest o wiele bardziej
bezpieczne ni w przypadku posugiwania si
oryginaln nazw nadan przez uytkownika.
Nazwa pliku bdzie zoona z wartoci
bazodanowego pola   (pobranej
przy uyciu funkcji 
 ),
za ktr zostanie wstawiona kropka
i rozszerzenie oryginalnego pliku (uzyskanego
poprzez rozkad jego nazwy). Przykadowo,
dokument o nazwie chapter.doc moe przyj
nazw 231.doc, natomiast plik imagename.jpg
zostanie zapisany jako 49.jpg.

Zarzdzanie plikami

Informacja o kadym pliku umieszczonym


na serwerze zostanie zapisana w bazie
danych. W tym celu zostanie zastosowana
wielowymiarowa zmienna tablicowa
,, ktra bdzie przechowywaa
oryginaln nazw pliku, jego wielko
i typ MIME. Wszystkie te dane zostan
pobrane z przegldarki internetowej.
Dodatkowo zostanie zapisany opis
oraz aktualna data i godzina.

4. Utworzy nowy plik.

Listing 11.7. Skrypt pozwala uytkownikowi umieci plik na serwerze cig 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

407

Rozdzia 11.
5. Skopiowa plik w docelowe miejsce

na serwerze.

Zarzdzanie plikami

"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

W celu przeniesienia pliku tymczasowego


w docelowe miejsce (katalog uploads,
gdzie plik uzyska now nazw) naley
uy funkcji )  ' .
Jeli przeniesienie pliku nie bdzie
moliwe (rysunek 11.20), z bazy danych
zostanie usunity rekord i pojawi si
komunikat bdu.
6. Dokoczy 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

6!2<5#!1UV7
B
:.

Listing 11.7. Skrypt pozwala uytkownikowi umieci plik na serwerze cig 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

408

Zarzdzanie zawartoci strony przykad


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

Co prawda formularz jest bardzo prosty,


ale zawiera trzy niezbdne elementy
zwizane z umieszczaniem plikw
na serwerze atrybut   ,
ukryte pole 23,4 i pole ' .
8. Zakoczy tworzenie skryptu PHP.
:% %
" 53-1
UT" 53-1!! #%? TV7
:.

%.=."?&=.
" %3
6%1/A"1
 1/3%#-
.%.
%.=.%"!&=.
 1+ 1
 1/-1!5"% "# 
5#!/C
#'!/9. 1+ 1.%.
A"1-!1 .

A# .

Listing 11.7. Skrypt pozwala uytkownikowi umieci plik na serwerze cig 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

:.

409

Zarzdzanie plikami

-"4
"( /51 1." %3
6%1/!3= " 
 1/!3= " 
431/6L"P
.-"4.

Rozdzia 11.
9. Zapisa plik pod nazw add_file.php,

umieci go na serwerze WWW


i przetestowa przy uyciu przegldarki
internetowej (rysunki 11.21 i 11.22).
Wskazwki
 Obecno pliku umieszczonego na serwerze

moe rwnie zosta sprawdzona przy uyciu


funkcji  ' .
 W celu odwoania si do katalogw

uytkownicy systemu Windows musz


skorzysta ze znaku 0 lub 99, a zatem
zamiast cieki C:\ naley uy C:/
lub C:\\. Wynika to std, e w jzyku
PHP znak 95jest wykorzystywany
przez funkcj     .

Rysunek 11.21. Formularz sucy


do umieszczania plikw na serwerze

Zarzdzanie plikami

 Jeli jest wykorzystywana starsza wersja

jzyka PHP, moe nie by moliwe


zastosowanie zmiennej tablicowej
,. Na skutek tego zamiast funkcji
)  '  konieczne bdzie
uycie funkcji  .
 Jeli oba pliki maj tak sam nazw,
funkcja )  '  nadpisze

istniejcy plik bez wczeniejszego ostrzeenia.


 Po przygotowaniu ostatecznej wersji

produkcyjnej skryptu w celu wyeliminowania


w przyszoci wszelkich komunikatw
bdw naley przed wywoaniami funkcji
)  '  wstawi znak :.

410

Rysunek 11.22. Wygld strony po udanym


umieszczeniu pliku na serwerze

Zarzdzanie zawartoci strony przykad

Przegldanie i pobieranie plikw


Modu administracyjny
aplikacji

Jedn z zalet systemu sucego


do umieszczania plikw na serwerze
jest atwo kojarzenia plikw z danymi
na ich temat przechowywanymi w bazie
danych (gdy do tworzenia nazw plikw
jest wykorzystywana warto pola
  ). Jeli zostanie utworzony
skrypt administracyjny sucy do
usuwania plikw z serwera (z katalogu
uploads), mona rwnie usun z tabeli
powizany z nim rekord.

W celu stworzenia skryptu view_files.php


naley wykona nastpujce 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 '
 spenia tak sam rol jak
w skrypcie view_urls.php. Zmienna zostanie
wykorzystana przy tworzeniu nagwka
i w celu okrelenia, czy bdzie moliwe
przegldanie niektrych plikw.
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

Powysze zapytanie zwrci dla kadego


pliku umieszczonego na serwerze wartoci
przechowywane w polach   ,
'  , 
 , a ponadto
sformatowan dat. Na pocztku zostan
wywietlone informacje dotyczce
najnowszych plikw. Jednoczenie
zapytanie pozwoli na uzyskanie
wielkoci plikw (wyraonej w kilobajtach),
co bdzie moliwe poprzez podzielenie
przechowywanej wartoci przez 1024,
a nastpnie zaokrglenie otrzymanej liczby.

411

Zarzdzanie plikami

Chocia w przypadku omawianej


aplikacji nie stworzono jej czci
administracyjnej, to jednak nie jest
to zadanie trudne do zrealizowania.
Na pocztku naley do tabeli  
doda pole 
) . Nastpnie
naley tak zmodyfikowa zarwno
plik add_url.php, jak i add_file.php,
aby domylnie warto pola

) wynosia N. Z myl o czci
administracyjnej aplikacji naley
stworzy stron, na ktrej zostan
wywietlone wszystkie elementy, ktre
jeszcze nie zatwierdzono. W celu
zaakceptowania dowolnego elementu
naley dla odpowiedniego rekordu
tabeli wykona polecenie -%
i zmieni warto pola 
) na Y.

Ostatnie dwa skrypty omawianej aplikacji pozwol


uytkownikom przegldn pliki umieszczone
na serwerze, a nastpnie je pobra (w danej
chwili tylko jeden). Skrypt sucy do przegldania
plikw jest do prosty, natomiast skrypt
umoliwiajcy ich pobieranie wymaga czstego
stosowania funkcji jzyka PHP o nazwie # 
.

Rozdzia 11.

Zarzdzanie plikami

Listing 11.8. Skrypt view_files.php wywietla pliki umieszczone na serwerze wraz z ich opisem,
wielkoci 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*

:.

412

Zarzdzanie zawartoci strony przykad


3. Wywietli wszystkie rekordy.

4. Jeli nie znaleziono adnych plikw

lub zamknito tabel, naley wywietli


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. Zakoczy tworzenie skryptu PHP.


6!2<5#!1UV7
" 53-1<# 51
UT" 53-1!! #%? TV7

:.

6. Zapisa plik pod nazw view_files.php,

umieci go na serwerze WWW i przetestowa


przy uyciu przegldarki internetowej.

Rwnie w tym przypadku powyszy


kod dziaa podobnie jak w poprzednim
skrypcie view_urls.php. Zmienna '

jest uywana raz przy tworzeniu nagwka
(rysunek 11.23), po czym s wywietlane
wszystkie rekordy. Przy odwoywaniu
si do funkcji ' #

 
jest stosowana staa 2;<&,
np. w celu wywietlenia wartoci
naley uy instrukcji 
$=>'>?.
Rysunek 11.23. Strona wywietlona po uruchomieniu
skryptu view_files.php

413

Zarzdzanie plikami

' "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

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

Kada nazwa pliku spenia rol odnonika


do skryptu download_file.php, przy czym
do adresu URL jest doczana warto pola
  . Warto ta zostanie wykorzystana
przez skrypt sucy do pobierania plikw
w celu okrelenia, ktry z nich ma by
przesany do przegldarki internetowej.

Rozdzia 11.

Aby utworzy skrypt download_file.php,


naley wykona nastpujce 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 naley upewni si,


czy skrypt pobra poprawn warto pola
  , ktra powinna by liczb.
3. Pobra informacje na temat pliku.

Zarzdzanie plikami

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, wielkoci.
Wszystkie te dane zostan pobrane z bazy
danych poprzez wykonanie zapytania,
w ktrym umieszczono instrukcje
+=> >?, a nastpnie wywoanie
funkcji  .
4. Okreli nazw pliku.
;1+ 1 !"#
/
1+%#-1
UTTF
;A V7
; 1<A"1
/
T3%#-!T

;<S \T3"-T]

TT

;1+ 1 !"# \]7

Dziaanie powyszego kodu jest


podobne do funkcjonowania mechanizmu
nazewniczego zastosowanego w skrypcie
add_file.php, z t rnic, e w tym
przypadku dodano ciek postaci
../uploads/. Przypisanie takiego acucha
zmiennej uatwi odwoywanie si do pliku
w dalszej czci skryptu.

Listing 11.9. Poprzez przesanie do przegldarki internetowej odpowiednich nagwkw 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
>

414

Zarzdzanie zawartoci strony przykad


5. Sprawdzi, czy plik istnieje na serwerze.
"A
UA"1<1+"! !
U; 1<A"1VV
>

Przed wysaniem pliku do przegldarki


internetowej naley upewni si, czy istnieje.
Jeli plik istnieje na serwerze, funkcja
'  *   zwrci warto TRUE.
6. Wysa 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

Wywoania funkcji # 
 powoduj
przesanie do przegldarki 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 przegldarki
do odebrania pliku. Drugi wiersz przy uyciu
oryginalnej nazwy pliku przechowywanego
na komputerze uytkownika okrela nazw
pobieranego pliku. Ostatnia funkcja # 

informuje o iloci przesyanych danych.
Rwnie ta informacja zostaa ustalona
po umieszczeniu pliku na serwerze. Zawarto
pliku jest przesyana przy uyciu funkcji

 ' , ktra po jego odczytaniu natychmiast


przekazuje zawarto strony do przegldarki
internetowej.

Zarzdzanie plikami

Listing 11.9. Poprzez przesanie do przegldarki internetowej odpowiednich nagwkw skrypt


wymusza wykonanie operacji pobrania pliku cig 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

:.

415

Rozdzia 11.
7. Zakoczy 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.

Zarzdzanie plikami

;%(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 wikszo przegldarek


internetowych nigdy nie wywietli tych
informacji. Wikszo uytkownikw
po klikniciu odnonika wywoujcego
skrypt view_files.php zobaczy jedynie okno
dialogowe umoliwiajce pobranie pliku.
Wykorzystanie powyszego kodu rdowego
nie spowoduje obnienia stopnia zabezpiecze.
Dodatkowo kod zostanie zastosowany
w przypadku wystpienia jakiegokolwiek
problemu.
9. Zapisa plik pod nazw download_file.php,

umieci go na serwerze WWW i przetestowa


przy uyciu przegldarki internetowej.
Wskazwki
 W jzyku PHP w wersji 4.3 nowoci jest
funkcja       zwracajca typ

MIME dla pliku znajdujcego si na serwerze.


 Przegldarki internetowe w rny sposb

obsuguj operacj pobierania plikw.


Z tego te powodu w celu sprawdzenia
zgodnoci uzyskiwanych wynikw skrypt
podobny do powyszego powinien zosta
przetestowany w miar moliwoci na jak
najwikszej liczbie przegldarek i platform.

416

Rysunek 11.24. Kliknicie odnonika wywoujcego


skrypt view_files.php powinno spowodowa
wywietlenie pokazanego okna dialogowego

You might also like