Professional Documents
Culture Documents
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
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Spis treci
Wprowadzenie
Wprowadzenie do PHP
19
Podstawy skadni ......................................................................................20
Przesyanie danych do przegldarki internetowej ....................................24
PHP, HTML i biae odstpy .................................................................28
Wstawianie komentarzy ...........................................................................33
Co to s zmienne? ....................................................................................36
acuchy ..................................................................................................39
Liczby .......................................................................................................43
Stae ..........................................................................................................47
Apostrof kontra cudzysw ......................................................................50
Rozdzia 2.
Programowanie w PHP
53
Tworzenie formularza w jzyku HTML ..................................................54
Obsuga formularza HTML ......................................................................58
Zarzdzanie opcj Magic Quotes ...............................................................61
Wyraenia warunkowe i operatory ...........................................................64
Weryfikacja danych pochodzcych z formularza .....................................68
Co to s tablice? .......................................................................................73
Ptle for i while ........................................................................................91
Rozdzia 3.
Spis treci
Rozdzia 1.
Spis treci
Rozdzia 5.
Rozdzia 6.
Rozdzia 7.
PHP i MySQL
249
Modyfikacja szablonu ............................................................................250
czenie si z MySQL-em i wybieranie bazy ........................................251
Wykonywanie prostych zapyta ............................................................255
Odczytywanie wynikw zapytania .........................................................263
Spis treci
Rozdzia 4.
Spis treci
Bezpieczestwo ......................................................................................267
Zliczanie zwrconych rekordw ............................................................273
Uaktualnianie rekordw w PHP ...............................................................279
Rozdzia 8.
Rozdzia 9.
Sesje i ciasteczka
333
Posugiwanie si ciasteczkami ...............................................................334
Sesje .......................................................................................................351
Sesje a ciasteczka ................................................................................367
Zwikszanie bezpieczestwa sesji ..........................................................375
Spis treci
Spis treci
Spis treci
Instalacja
617
Instalacja w systemie Windows .............................................................618
Definiowanie uprawnie MySQL ..........................................................624
Testowanie instalacji ..............................................................................630
Konfigurowanie PHP .............................................................................634
Dodatek B
Przewodnik
637
Jzyk PHP ..............................................................................................638
Serwer MySQL ......................................................................................643
Dodatek C
Zasoby internetowe
651
Jzyk PHP ..............................................................................................652
Serwer MySQL ......................................................................................656
Jzyk SQL ..............................................................................................658
Bezpieczestwo ......................................................................................659
Inne strony internetowe ..........................................................................660
Skorowidz
663
Tworzenie dynamicznych
stron WWW
95
Rozdzia 3.
Wykorzystywanie
plikw zewntrznych
96
Struktura witryny
Gdy zaczynasz wykorzystywa w swych aplikacjach internetowych pliki zewntrzne,
caociowa struktura witryny nabiera wikszego znaczenia. Projektujc serwis internetowy,
powiniene bra pod uwag trzy czynniki:
atwo utrzymywania,
bezpieczestwo,
atwo poruszania si po witrynie.
Wykorzystanie plikw zewntrznych do przechowywania standardowych procedur PHP,
CSS, JavaScript i HTML bardzo upraszcza utrzymywanie witryny, poniewa cay wsplny
kod jest przechowywany tylko w jednym miejscu. W kolejnych przykadach bd czsto
tworzy specjalne katalogi na pliki zewntrzne i trzyma je odrbnie od zasadniczych skryptw.
W przypadku dokumentw niezawierajcych poufnych danych, takich jak szablony HTML,
zalecam stosowanie rozszerzenia .inc lub .html, natomiast pliki wymagajce wikszego
bezpieczestwa (przechowujce na przykad informacje potrzebne do poczenia si
z baz danych) powinny mie rozszerzenia .php. Uywaj nawet obu rozszerze (czyli .inc
i .html lub .php), aby wskaza, e dany plik jest plikiem zewntrznym okrelonego typu.
Powiniene te projektowa swoje witryny w taki sposb, aby uytkownicy mogli si po nich
atwo porusza i to zarwno posugujc si czami, jak i rcznie wpisywanymi adresami URL.
Staraj si nie tworzy zbyt wielu poziomw folderw i nie uywa trudnych do zapamitania
nazw plikw i katalogu. Nie mieszaj te wielkich liter z maymi i nie stosuj w nazwach znakw
przestankowych.
97
Rozdzia 3.
98
40
41
42
43
99
36
37
38
39
Rozdzia 3.
3. Zmie wiersz zawierajcy tytu strony na:
<title><?php echo $page_title; ?></title>
18
19
20
21
22
23
24
100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
101
Rozdzia 3.
9. Pozamykaj znaczniki PHP i skopiuj z szablonu
strony,
strony,
strony,
strony,
strony,
strony,
strony,
strony,
102
103
Rozdzia 3.
Wskazwki
W pliku php.ini wystpuje ustawienie
include_path. Dziki niemu moesz
104
Wywietlanie i obsuga
formularza przez jeden skrypt
We wszystkich dotychczasowych przykadach
do obsugi formularzy HTML wykorzystywaem
dwa niezalene skrypty. Jeden wywietla
formularz, a drugi odbiera wysane z niego
dane. Cho nie ma w tym nic zego, czasem
wygodnie jest realizowa obie te funkcje za
porednictwem jednego skryptu. Gdy ta sama
strona ma jednoczenie wywietla i obsugiwa
formularz, trzeba zastosowa wyraenie
warunkowe.
wysano dane z formularza */) {
Obsu je.
{
Wywietl formularz.
formularz.
if (isset($_POST['submitted'])) {
105
if (/*
//
} else
//
}
Rozdzia 3.
Listing 3.5. Ten skrypt zarwno wywietla, jak i obsuguje formularz rejestracyjny
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
106
<h2>Kalkulator kosztw</h2>
<form action="kalkulator.php"
method="post">
<p>Liczba egzemplarzy: <input
type="text" name="quantity" size="5"
maxlength="10" /></p>
<p>Cena: <input type="text"
name="price" size="5" maxlength="10"
/></p>
<p>Podatek (%): <input type="text"
name="tax" size="5" maxlength="10"
/></p>
<p><input type="submit" name="submit"
value="Oblicz!" /></p>
<input type="hidden" name="submitted"
value="TRUE" />
</form>
Rozdzia 3.
8. Docz plik stopki.
<?php
include ('./includes/stopka.html');
?>
108
Tworzenie formularzy
z pamici
Na pewno zetkne si ju z formularzami
z pamici, nawet jeli nie wiesz, e wanie
tak si je nazywa. S to zwyke formularze
HTML, ktre zapamituj wszystko, co do nich
wpisae. Z punktu widzenia uytkownika
kocowego jest to bardzo przydatne,
zwaszcza gdy trzeba ponownie wypeni
ten sam formularz.
Aby okreli pocztkow warto widniejc
w tekstowym polu wejciowym, wprowad
atrybut value:
109
Rozdzia 3.
Listing 3.6. Formularz kalkulatora zapamituje teraz informacje wprowadzane przez uytkownika
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2)
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
110
<input type="checkbox"
name="interests" value="Narty"
checked="checked" />
<input type="radio"
name="gender" value="Kobieta"
checked="checked" />
111
Rozdzia 3.
Tworzenie i wywoywanie
wasnych funkcji
Jak zdye si ju przekona, PHP ma
bardzo wiele wbudowanych funkcji zdolnych
zaspokoi niemal kade potrzeby. Waniejsze
jest jednak to, e moesz tworzy wasne
funkcje realizujce okrelone przez Ciebie
zadania. Tworzc funkcje, posugujemy si
nastpujc skadni:
function nazwa_funkcji() {
// Kod funkcji.
}
112
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 // Wywoaj funkcj.
39 make_calendar_pulldowns();
40
41 echo '</form><p><br /></p>'; // Koniec
formularza.
42
43 include ('./includes/stopka.html');
44 ?>
make callendar pulldown to po angielsku utwrz menu rozwijalne kalendarza przyp. tum.
113
Rozdzia 3.
5. Utwrz formularz i wywoaj funkcj.
echo '<h1 id="mainhead"
Wybierz dat:</h1>
<p><br /></p><form action=
"formularzdaty.php" method="post">';
make_calendar_pulldowns();
echo '</form><p><br /></p>';
include ('./includes/stopka.html');
114
Tworzenie funkcji
pobierajcych argumenty
Rysunek 3.13. Czsto popenianym bdem
jest pominicie ktrego z argumentw
lub przekazanie do funkcji argumentu
niewaciwego typu
115
Rozdzia 3.
116
41
42
43
44
45
46
47
48
49
117
38
39
40
// Wywietl odstpy
echo '<p><br /></p>';
Rozdzia 3.
Nadawanie argumentom
wartoci domylnych
Wasne funkcje mona te definiowa w nieco
inny sposb, a mianowicie ustalajc domylne
wartoci argumentw.
function greet($name, $greeting =
'Hello') {
echo "$greeting, $name!";
}
12
13 } // Koniec funkcji.
14
15 // Sprawd czy formularz zosta wysany.
16 if (isset($_POST['submitted'])) {
17
18
if (is_numeric($_POST['quantity']) &&
is_numeric($_POST['price'])) {
19
20
// Wywietl nagwek.
21
echo '<h1 id="mainhead">Cakowity
koszt</h1>';
22
23
if (is_numeric($_POST['tax'])) {
24
calculate_total
($_POST['quantity'],
$_POST['price'], $_POST['tax']);
25
} else {
26
calculate_total
($_POST['quantity'],
$_POST['price']);
27
}
28
29
// Wywietl odstpy.
30
echo '<p><br /></p>';
31
32
} else { // Wprowadzono niepoprawne
wartoci.
if (is_numeric($_POST['quantity'])
&& is_numeric($_POST['price'])) {
119
35
}
36
37 } // Koniec gwnego IF.
38
39 // Koniec sekcji PHP i pocztek formularza
HTML.
40 ?>
41 <h2>Kalkulator kosztw</h2>
42 <form action="kalkulator.php"
method="post">
43
<p>Liczba egzemplarzy: <input
type="text" name="quantity" size="5"
maxlength="10" value="<?php if
(isset($_POST['quantity'])) echo
$_POST['quantity']; ?>" /></p>
44
<p>Cena: <input type="text"
name="price" size="5" maxlength="10"
value="<?php if (isset($_POST
['price'])) echo $_POST['price'];
?>" /> </p>
45
<p>Podatek:</b> <input type="text"
name="tax" size="5" maxlength="10"
value="<?php if (isset($_POST
['tax'])) echo $_POST['tax'];?>"
/>(opcjonalny)</p>
46
<p><input type="submit" name="submit"
value="Oblicz!" /></p>
47
<input type="hidden" name="submitted"
value="TRUE" />
48 </form>
49 <?php
50 include ('./includes/stopka.html');
51 ?>
Rozdzia 3.
6. Moesz rwnie zaznaczy w formularzu,
120
16
17
18
19
20
21
22
23
24
25
26
27
28
29
121
11
12
13
14
15
Rozdzia 3.
Ta wersja funkcji zwraca jedynie obliczon
sum bez adnych znacznikw HTML-a
i bez przesyania czegokolwiek do
przegldarki internetowej.
3. Zmie sposb wywoania funkcji na:
if (is_numeric($_POST['tax'])) {
$total_cost = calculate_total
($_POST['quantity'], $_POST
['price'], $_POST['tax']);
} else {
$total_cost = calculate_total
($_POST['quantity'], $_POST
['price']);
}
wywietlajce wynik.
echo '<p>Kupujesz ' . {$_POST
['quantity'] . ' sztuk w cenie ' .
number_format($_POST['price'], 2) .
' z za egzemplarz. Po uwzgldnieniu
podatku daje to ' . $total_cost '
z.</p>';
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
122
// Wywietl odstpy.
echo '<p><br /></p>';
}
} // Koniec gwnego IF.
// Koniec sekcji PHP i pocztek formularza
HTML.
?>
<h2>Kalkulator kosztw</h2>
<form action="kalkulator.php"
method="post">
<p>Liczba egzemplarzy: <input
type="text" name="quantity" size="5"
maxlength="10" value="<?php if
(isset($_POST['quantity'])) echo
$_POST['quantity']; ?>" /></p>
<p>Cena: <input type="text"
name="price" size="5" maxlength="10"
value="<?php if
(isset($_POST['price'])) echo
$_POST['price']; ?>" /> </p>
<p>Podatek:</b> <input type="text"
name="tax" size="5" maxlength="10"
value="<?php if (isset($_POST ['tax']))
echo $_POST['tax'];?>" />(opcjonalny)</p>
<p><input type="submit" name="submit"
value="Oblicz!" /></p>
<input type="hidden" name="submitted"
value="TRUE" />
</form>
<?php
include ('./includes/stopka.html');
?>
123
Rozdzia 3.
Zasig zmiennej
Zasig zmiennej
124
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php # Skrypt 3.11 - kalkulator.php (szsta wersja skryptw 3.5, 3.6, 3.8, 3.9 i 3.10)
$page_title = 'Kalkulator kosztw';
include ('./includes/naglowek.html');
/* Funkcja wyliczajca cakowity koszt
i wywietlajca wynik. */
function calculate_total ($tax = 5) {
global $total;
$taxrate = $tax / 100; // Zamie 5% na .05.
$total = ($_POST['quantity'] * $_POST['price']) * ($taxrate + 1);
$total = number_format ($total, 2);
} // Koniec funkcji.
// Sprawd czy formularz zosta wysany.
if (isset($_POST['submitted'])) {
if (is_numeric($_POST['quantity']) && is_numeric($_POST['price'])) {
// Wywietl nagwek.
echo '<h1 id="mainhead">Cakowity koszt</h1>';
$total = NULL; // Zainicjalizuj $total.
if (is_numeric($_POST['tax'])) {
calculate_total ($_POST['tax']);
} else {
calculate_total ();
}
echo '<p>Kupujesz ' . $_POST['quantity'] . ' sztuk w cenie ' . number_format($_
POST['price'], 2) . 'z za egzemplarz. Cakowity koszt wyniesie ' . $total . 'z.</p>';
// Wywietl odstpy.
echo '<p><br /></p>';
} else { // Wprowadzono niepoprawne wartoci.
echo '<h1 id="mainhead">Bd!</h1>
<p class="error">Wprowad poprawn liczb egzemplarzy i cen jednostkow.</p><p><br /></p>';
}
} // Koniec gwnego IF.
125
Zasig zmiennej
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Rozdzia 3.
3. Zainicjuj zmienn $total na zewntrz funkcji. Listing 3.11. Poniewa $_POST jest zmienn
superglobaln, do przechowywanych w niej wartoci
$total = NULL;
mona si odwoywa we wszystkich funkcjach.
Zmienna $total zostaa zadeklarowana wewntrz
Dobry styl programowania wymaga, aby,
funkcji jako globalna cig dalszy
zanim funkcja uyje zmiennej jako globalnej,
49
50
51
52
53
54
Zasig zmiennej
126
127
Zasig zmiennej
Rozdzia 3.
Znaczenie
Przykad
2003
y
n
03
2
Monday
Mon
minuty
45
sekundy
18
am lub pm
am
AM lub PM
PM
128
F
M
j
l (mae L)
D
g
02
February
Feb
8
08
18
06
18
Warto
year
rok
Przykad
2005
mon
miesic
12
month
nazwa miesica
December
mday
dzie miesica
25
weekday
dzie tygodnia
Tuesday
hours
godziny
11
minutes
minuty
56
seconds
sekundy
47
27
28
29
30
31
32
33
34
35
(listing 3.12):
function make_calendar_pulldowns
($m = NULL, $d = NULL, $y = NULL) {
wybieraa miesic.
foreach ($months as $key => $value) {
echo "<option value=\"$key\"";
if ($key == $m) {
echo ' selected="selected"';
}
echo ">$value</option>\n";
}
129
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Rozdzia 3.
Kod ten dziaa tak samo jak w przypadku
miesicy. Inna jest tylko ptla. Jeli $d
jest rwne $day, to do odpowiedniego
znacznika option dodawany jest atrybut
selected="selected".
5.W taki sam sposb zmodyfikuj ptl lat.
for ($year = 2005; $year <= 2015;
$year++) {
echo "<option value=\"$year\"";
if ($year == $y) {
echo ' selected="selected"';
}
echo ">$year</option>\n";
}
130
Rysunek 3.20. Kod rdowy strony ujawnia sposb zapamitywania wybranych pozycji
menu za pomoc atrybutu selected="selected"
131
Rozdzia 3.
Wysyanie poczty
elektronicznej
Jedn z moich ulubionych cech PHP jest
atwo, z jak mona w tym jzyku wysya
e-maile. Na prawidowo skonfigurowanym
serwerze sprowadza si to do wywoania
funkcji mail().
132
35
36
37
38
// Zweryfikuj nazwisko.
if (empty($_POST['name'])) {
$errors[] = 'Zapomniae wprowadzi nazwisko.';
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Zweryfikuj haso.
if (!empty($_POST['password1'])) {
if ($_POST['password1'] != $_POST['password2']) {
$errors[] = 'Hasa nie s takie same.';
}
} else {
$errors[] = 'Zapomniae wprowadzi hasa.';
}
if (empty($errors)) { // Jeli nie ma bdw.
// Zarejestruj uytkownika.
// Wylij wiadomo poczt elektroniczn.
$body = "Dzikujemy za zarejestrowanie si na naszej stronie!\nTwoje haso to
'{$_POST['password1']}'.\n\nZ powaaniem,\nMy";
mail ($_POST['email'], 'Dzikujemy za zarejestrowanie si!', $body,
'From:admin@strona.com');
echo '<h1 id="mainhead">Dzikujemy!</h1>
<p>Zostae zarejestrowany. Potwierdzenie zostao wysane poczt elektroniczn.</p><p><br
/></p>';
39
40 } else { // Raportuj bdy.
41
42
echo '<h1 id="mainhead">Bd!</h1>
43
<p class="error">Wystpiy nastpujce bdy:<br />';
44
foreach ($errors as $msg) { // Wywietl kady bd.
45
echo " - $msg<br />\n";
46
}
47
echo '</p><p>Wypenij formularz jeszcze raz.</p><p><br /></p>';
48
49
} // Koniec if (empty($errors))
50
51 } else { // Wywietl formularz.
133
Rozdzia 3.
4. Zweryfikuj haso.
if (!empty($_POST['password1'])) {
if ($_POST['password1'] != $_POST
['password2']) {
$errors[] = 'Hasa nie s takie same.';
}
} else {
$errors[] = 'Zapomniae wprowadzi
hasa.';
}
wystpiy bdy.
if (empty($errors)) {
134
60
61
62
63
64
65
?>
<h2>Rejestracja</h2>
<form action="rejestracja.php"
method="post">
<p>Nazwisko: <input type="text"
name="name" size="20" maxlength="40"
/></p>
<p>E-mail: <input type="text"
name="email" size="20"
maxlength="40" /> </p>
<p>Haso: <input type="password"
name="password1" size="10"
maxlength="20" /></p>
<p>Potwierd haso: <input
type="password" name="password2"
size="10" maxlength="20" /></p>
<p><input type="submit"
name="submit" value="Zarejestruj
si" /></p>
<input type="hidden"
name="submitted" value="TRUE" />
</form>
<?php
} // Koniec gwnego wyraenia
warunkowego.
include ('./includes/stopka.html');
?>
135
} else {
echo '<h1 id="mainhead">Bad!</h1>
<p class="error">Wystpiy
nastpujce bdy:<br />';
foreach ($errors as $msg) {
echo " - $msg<br />\n";
}
echo '</p><p>Wypenij formularz
jeszcze raz.</p><p><br /></p>';
}
Rozdzia 3.
136
137
Rozdzia 3.
138