You are on page 1of 40

IDZ DO

PRZYKADOWY ROZDZIA

PHP i MySQL. Biblia

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

Autorzy: Tim Converse, Joyce Park, Clark Morgan


Tumaczenie: Robert Grczyski, Daniel Kaczmarek,
Maja Krlikowska, Marek Paczyski
ISBN: 83-7361-940-2
Tytu oryginau: PHP5 and MySQL Bible
Format: B5, stron: 1080
Wyczerpujce omwienie najpopularniejszego rodowiska
do tworzenia dynamicznych witryn WWW
Poznaj zasady programowania w PHP5 i w peni wykorzystaj jego nowe moliwoci
Zastosuj baz danych jako zaplecze dla stron WWW
Zaprojektuj i stwrz dynamiczn witryn WWW za pomoc PHP i MySQL
O PHP i MySQL sysza ju chyba kady, kto zajmuje si projektowaniem witryn WWW.
Skrypty napisane w jzyku PHP i korzystajce z bazy danych MySQL napdzaj
tysice dynamicznych stron WWW sklepw, portali oraz aplikacji e-commerce.
Duet PHP i MySQL to stabilne, wydajne i proste do opanowania rodowisko
o ogromnych moliwociach. Dostpne s nieodpatnie, co jest jednym z gwnych
powodw ich popularnoci. Za ich pomoc mona stworzy zarwno proste
wiadomoci na stronie WWW, jak i rozbudowane systemy autoryzacji uytkownikw,
patnoci elektronicznych, galerii i wiele innych aplikacji internetowych.
PHP5 i MySQL. Biblia to kompleksowe omwienie zagadnie zwizanych
z tworzeniem witryn WWW z wykorzystaniem tych technologii. Przedstawia zasady
programowania w jzyku PHP5 z uwzgldnieniem regu projektowania obiektowego.
Opisuje baz danych MySQL, jzyk SQL oraz sposoby poczenia skryptw PHP
z tabelami w bazie danych. Czytajc j, nauczysz si osadza kod PHP w dokumentach
HTML, korzysta z mechanizmw obsugi sesji oraz jzyka XML, korzysta z innych baz
danych oraz zabezpiecza witryny WWW stworzone za pomoc PHP. Dowiesz si,
jak zaimplementowa obsug wyjtkw oraz jak usuwa bdy z kodu rdowego.
Typy danych, zmienne, polecenia i funkcje w PHP
Operacje na tekstach, wartociach liczbowych i tablicach
Administrowanie baz MySQL
czenie skryptw PHP z baz danych
Tworzenie elementw generowanych dynamicznie
Programowanie obiektowe w PHP
Mechanizmy obsugi sesji i plikw cookie
Korzystanie z biblioteki PEAR
Obsuga wyjtkw i usuwanie bdw z kodw rdowych
Korzystanie z baz danych PostgreSQL oraz Oracle
czenie PHP z JavaScript i Jav
Przetwarzanie plikw XML i tworzenie usug sieciowych
Generowanie grafiki za pomoc PHP
Uwierzytelnianie uytkownikw
W tej ksice znajdziesz wszystko, czego potrzebujesz
aby w peni wykorzysta moliwoci PHP i MySQL

Spis treci
O autorach ....................................................................................................... 27
Przedmowa ...................................................................................................... 29

Cz I Podstawy PHP ................................................................... 35


Rozdzia 1. Dlaczego PHP i MySQL? .................................................................. 37
Co to jest PHP? ................................................................................................................................... 37
Co to jest MySQL? ............................................................................................................................. 38
Historia PHP ....................................................................................................................................... 39
Historia MySQL ................................................................................................................................. 40
Dlaczego kochamy PHP? ................................................................................................................... 40
Koszt ............................................................................................................................................ 41
PHP jest atwy .............................................................................................................................. 43
PHP mona wbudowa ................................................................................................................. 44
PHP jest niezaleny od platformy ................................................................................................ 46
PHP nie bazuje na znacznikach .................................................................................................... 46
PHP jest stabilny .......................................................................................................................... 46
PHP jest szybki ............................................................................................................................ 47
PHP jest otwarty ........................................................................................................................... 48
PHP dobrze wsppracuje z innymi produktami .......................................................................... 49
Szybki rozwj jzyka ................................................................................................................... 50
Popularno PHP ronie ............................................................................................................... 50
PHP nie jest niczyj wasnoci ................................................................................................... 51
Spoeczno PHP .......................................................................................................................... 52
Podsumowanie .................................................................................................................................... 53
Rozdzia 2. Skrypty wykonywane na serwerze WWW ................................... 55
Statyczny HTML ................................................................................................................................ 55
Technologie wykonywane po stronie klienta ....................................................................................... 58
Skrypty wykonywane na serwerze ..................................................................................................... 62
Do czego przydaj si skrypty serwera ............................................................................................... 67
Podsumowanie .................................................................................................................................... 68
Rozdzia 3. Rozpoczynamy prac z PHP .......................................................... 69
Dzierawa lub wasny serwer ............................................................................................................. 69
Wariant z dostawc Internetu ....................................................................................................... 69
Wasny serwer wady i zalety ................................................................................................... 73
Rozwizania porednie ................................................................................................................. 73

PHP5 i MySQL. Biblia


Instalowanie PHP ............................................................................................................................... 74
Zanim zaczniesz ........................................................................................................................... 74
Procedura instalacji ...................................................................................................................... 76
Narzdzia programistyczne .......................................................................................................... 83
Podsumowanie .................................................................................................................................... 87
Rozdzia 4. Dodajemy PHP do HTML ................................................................ 89
HTML jest gotowy na PHP ................................................................................................................ 89
Przeczanie si z HTML do PHP ...................................................................................................... 89
Kanoniczne znaczniki PHP .......................................................................................................... 90
Krtkie znaczniki otwierajce (w stylu SGML) ........................................................................... 90
Witaj wiecie ................................................................................................................................ 91
Wejcie w tryb PHP i wyjcie z niego .......................................................................................... 92
Doczanie plikw ........................................................................................................................ 93
Podsumowanie .................................................................................................................................... 95
Rozdzia 5. Skadnia i zmienne ........................................................................ 97
PHP wiele wybacza ............................................................................................................................ 97
HTML to nie PHP .............................................................................................................................. 98
Skadnia PHP bazuje na C .................................................................................................................. 98
PHP nie przejmuje si odstpami ................................................................................................. 98
PHP jest czasami wraliwy na wielko liter ............................................................................... 98
Instrukcje to wyraenia zakoczone rednikiem .......................................................................... 99
Bloki ........................................................................................................................................... 102
Komentarze ...................................................................................................................................... 102
Komentarze wielowierszowe w stylu C ..................................................................................... 103
Komentarze jednowierszowe: # i // ............................................................................................ 103
Zmienne ............................................................................................................................................ 103
PHP przyj styl zmiennych Perl ................................................................................................ 104
Deklarowanie zmiennych ........................................................................................................... 104
Przypisywanie zmiennym wartoci ............................................................................................ 104
Zmiana wartoci zmiennych ....................................................................................................... 105
Nieprzypisane zmienne .............................................................................................................. 105
Zasig zmiennych ....................................................................................................................... 106
Moesz dowolnie zmienia tryby pracy ..................................................................................... 107
Stae ............................................................................................................................................ 108
Typy w PHP nie s rdem zmartwie ............................................................................................ 108
Brak deklaracji typw zmiennych .............................................................................................. 109
Automatyczna konwersja typw ................................................................................................ 109
Typy nadawane poprzez kontekst .............................................................................................. 109
Typy w PHP ..................................................................................................................................... 109
Typy proste ....................................................................................................................................... 110
Integer ........................................................................................................................................ 110
Double ........................................................................................................................................ 111
Boolean ...................................................................................................................................... 113
NULL ......................................................................................................................................... 114
String .......................................................................................................................................... 115
Wyjcie ............................................................................................................................................. 119
Echo i print ................................................................................................................................. 119
Zmienne i cigi ........................................................................................................................... 120
Podsumowanie .................................................................................................................................. 121

Spis treci

Rozdzia 6. Sterowanie i funkcje .................................................................. 123


Wyraenia logiczne .......................................................................................................................... 124
Stae logiczne ............................................................................................................................. 124
Operatory logiczne ..................................................................................................................... 124
Operatory porwnania ................................................................................................................ 126
Operator trjskadnikowy ........................................................................................................... 128
Instrukcje warunkowe ...................................................................................................................... 129
If-else ......................................................................................................................................... 129
Switch ........................................................................................................................................ 133
Ptle .................................................................................................................................................. 134
Ptle ograniczone i nieograniczone ............................................................................................ 134
While .......................................................................................................................................... 134
Do-while ..................................................................................................................................... 135
For .............................................................................................................................................. 136
Przykady ptli ........................................................................................................................... 137
Break i continue ......................................................................................................................... 140
Ptle nieskoczone ..................................................................................................................... 141
Skadnia alternatywna ...................................................................................................................... 142
Przerywanie wykonania .................................................................................................................... 142
Uycie funkcji .................................................................................................................................. 145
Zwracane wartoci a efekty uboczne .......................................................................................... 145
Dokumentacja funkcji ...................................................................................................................... 146
Nagwki w dokumentacji .......................................................................................................... 147
Szukanie opisu funkcji ............................................................................................................... 147
Definiowanie wasnych funkcji ........................................................................................................ 148
Czym jest funkcja? ..................................................................................................................... 148
Skadnia definicji funkcji ........................................................................................................... 148
Przykad definicji funkcji ........................................................................................................... 149
Parametry formalne i parametry aktualne ................................................................................... 150
Nieprawidowa liczba argumentw ............................................................................................ 151
Funkcje a zasig zmiennych ............................................................................................................. 152
Zmienne globalne i lokalne ........................................................................................................ 153
Zmienne statyczne ...................................................................................................................... 154
Wyjtki ....................................................................................................................................... 155
Zasig funkcji ................................................................................................................................... 156
Include oraz require .................................................................................................................... 157
Rekurencja ................................................................................................................................. 158
Podsumowanie .................................................................................................................................. 160
Rozdzia 7. Przekazywanie danych pomidzy stronami ............................. 161
HTTP jest protokoem bezstanowym ............................................................................................... 161
Argumenty GET ............................................................................................................................... 162
Inne zastosowania adresw URL w stylu GET ................................................................................ 164
Argumenty POST ............................................................................................................................. 166
Formatowanie zmiennych formularza .............................................................................................. 167
Konsolidacja formularzy i obsugujcych je kodw ................................................................... 170
Uywanie zmiennych tablicowych w poczeniu z formularzami .............................................. 171
Tablice superglobalne PHP .............................................................................................................. 174
Rozszerzony przykad: kalkulator do wicze .................................................................................. 176
Podsumowanie .................................................................................................................................. 178

10

PHP5 i MySQL. Biblia


Rozdzia 8. Cigi ............................................................................................. 179
Cigi w PHP ..................................................................................................................................... 179
Doczanie cigw przy uyciu nawiasw klamrowych ............................................................ 180
Znaki i indeksy cigu ................................................................................................................. 181
Operatory dla cigw ................................................................................................................. 181
Zczenie i przypisanie ............................................................................................................... 182
Skadnia heredoc ........................................................................................................................ 182
Funkcje operujce na cigach ........................................................................................................... 183
Sprawdzanie cigw ................................................................................................................... 184
Szukanie znakw i podcigw ................................................................................................... 184
Porwnywanie i przeszukiwanie ................................................................................................ 185
Przeszukiwanie ........................................................................................................................... 186
Wycinanie podcigu ................................................................................................................... 187
Funkcje porzdkujce ................................................................................................................. 188
Zastpowanie cigw ................................................................................................................. 189
Funkcje zmiany wielkoci liter ................................................................................................... 191
Funkcje znakw sterujcych ....................................................................................................... 192
Formatowanie danych ................................................................................................................ 193
Rozszerzony przykad: kalkulator do wicze ................................................................................... 195
Podsumowanie .................................................................................................................................. 198
Rozdzia 9. Tablice i funkcje operujce na tablicach ................................... 199
Uycie tablic ..................................................................................................................................... 199
Czym s tablice PHP? ...................................................................................................................... 200
Tworzenie tablic ............................................................................................................................... 202
Bezporednie przypisanie ........................................................................................................... 202
Konstrukcja array() .................................................................................................................... 202
Podawanie indeksw przy uyciu array() ................................................................................... 203
Funkcje zwracajce tablice ......................................................................................................... 203
Odczytywanie wartoci ..................................................................................................................... 204
Odczytywanie przy uyciu indeksu ............................................................................................ 204
Konstrukcja list() ........................................................................................................................ 204
Tablice wielowymiarowe ................................................................................................................. 205
Informacje o tablicach ...................................................................................................................... 206
Usuwanie z tablicy ........................................................................................................................... 207
Iteracje .............................................................................................................................................. 207
Obsuga iteracji .......................................................................................................................... 208
Uycie funkcji iteracyjnych ........................................................................................................ 209
Nasza ulubiona metoda iteracji: foreach ..................................................................................... 209
Iteracje za pomoc current() i next() .......................................................................................... 211
Powtrne przegldanie za pomoc reset() .................................................................................. 212
Wypisywanie w odwrotnym porzdku za pomoc end() i prev() ............................................... 213
Pobieranie wartoci kluczy za pomoc key() ............................................................................. 213
Wartoci puste i funkcja each() .................................................................................................. 214
Przegldanie tablicy za pomoc array_walk() ............................................................................ 215
Rozszerzony przykad: kalkulator do wicze ................................................................................... 216
Podsumowanie .................................................................................................................................. 229

Spis treci

11

Rozdzia 10. Liczby ......................................................................................... 231


Typy numeryczne ............................................................................................................................. 231
Operatory matematyczne .................................................................................................................. 232
Operatory arytmetyczne ............................................................................................................. 232
Operatory arytmetyczne i typy ................................................................................................... 232
Operator inkrementacji ............................................................................................................... 233
Operator przypisania .................................................................................................................. 234
Operatory porwnania ................................................................................................................ 234
Kolejno operacji i nawiasy ...................................................................................................... 235
Proste funkcje matematyczne ........................................................................................................... 236
Liczby losowe ................................................................................................................................... 236
Inicjowanie generatora ............................................................................................................... 237
Przykad: losowy wybr ............................................................................................................. 238
Rozszerzony przykad: kalkulator do wicze ................................................................................... 240
Podsumowanie .................................................................................................................................. 245
Rozdzia 11. Podstawowe puapki PHP ......................................................... 247
Problemy zwizane z instalacj ........................................................................................................ 247
rdo pliku wywietlane w przegldarce .................................................................................. 248
Blok PHP pokazuje si jako tekst lub przegldarka chce zapisa plik ....................................... 248
Nieodnaleziony serwer lub niemoliwe wywietlenie strony ....................................................... 248
Problemy z wywietlaniem ............................................................................................................... 248
Cakowicie pusta strona .............................................................................................................. 249
Dokument nie zawiera adnych danych ..................................................................................... 249
Niekompletna lub nieprawidowa strona .................................................................................... 250
Kod PHP pokazuje si w przegldarce ....................................................................................... 253
Niepowodzenie przy adowaniu strony ............................................................................................. 254
Nieodnaleziona strona ................................................................................................................ 254
Nieudane otwarcie pliku do wczenia ....................................................................................... 254
Bdy analizy skadni ....................................................................................................................... 254
Komunikat bdu skadni ............................................................................................................ 254
Brakujcy rednik ....................................................................................................................... 255
Brak znaku $ .............................................................................................................................. 255
Nieprawidowa zmiana trybu ..................................................................................................... 256
Nieoznaczone apostrofy ............................................................................................................. 257
Niezakoczone cigi znakw ..................................................................................................... 257
Inne bdy skadni ...................................................................................................................... 258
Uprawnienia do plikw .................................................................................................................... 258
Bd HTTP nr 403 ...................................................................................................................... 258
Brak doczanych plikw ................................................................................................................. 259
Ostrzeenie przy wczaniu pliku ............................................................................................... 259
Nieprzypisane zmienne ..................................................................................................................... 260
Zmienna nie pokazuje si w wynikowym cigu ......................................................................... 260
Zmienna liczbowa nieoczekiwanie przyjmuje warto zero ....................................................... 260
Jak zachowuj si niezainicjowane zmienne .............................................................................. 260
Nadpisane zmienne ........................................................................................................................... 262
Zmienna ma poprawn warto, ale nie tak, jakiej oczekiwae ............................................... 262
Problemy z funkcjami ....................................................................................................................... 263
Wywoanie niezdefiniowanej funkcji moja_funkcja() ................................................................ 263
Wywoanie niezdefiniowanej funkcji ......................................................................................... 264
Wywoanie niezdefiniowanej funkcji array() ............................................................................. 264

12

PHP5 i MySQL. Biblia


Nie mona ponownie zadeklarowa funkcji ............................................................................... 264
Nieprawidowa liczba argumentw ............................................................................................ 265
Bdy matematyczne ........................................................................................................................ 265
Ostrzeenie o dzieleniu przez zero ............................................................................................. 265
Niespodziewane wyniki dziaa ................................................................................................. 265
NaN (lub NAN) .......................................................................................................................... 265
Przekroczenie czasu oczekiwania ..................................................................................................... 266
Podsumowanie .................................................................................................................................. 267

Cz II PHP i bazy danych ......................................................... 271


Rozdzia 12. Wybr bazy danych dla PHP ..................................................... 273
Czym jest baza danych? ................................................................................................................... 273
Dlaczego uywamy baz danych? ...................................................................................................... 274
Utrzymanie i skalowalno ........................................................................................................ 274
Przenono ................................................................................................................................ 274
Unikanie nudnego programowania ............................................................................................. 274
Szukanie ..................................................................................................................................... 275
Bezpieczestwo .......................................................................................................................... 275
Architektura wielowarstwowa .................................................................................................... 275
Potencjalna wada: wydajno ..................................................................................................... 276
Wybr bazy danych .......................................................................................................................... 276
Moesz nie mie wyboru ............................................................................................................ 276
Plikowe, relacyjne i obiektowo-relacyjne bazy danych .............................................................. 277
ODBC/JDBC kontra wasne API ............................................................................................... 278
Zmiana bazy danych ................................................................................................................... 278
Przegld zaawansowanych funkcji ................................................................................................... 279
GUI ............................................................................................................................................ 279
Podzapytania .............................................................................................................................. 279
Zapytanie SELECT INTO .......................................................................................................... 279
Zoone zczenia ....................................................................................................................... 280
Wielowtkowo i blokowanie ................................................................................................... 280
Transakcje .................................................................................................................................. 280
Procedury i wyzwalacze ............................................................................................................. 281
Indeksy ....................................................................................................................................... 281
Klucze obce i wizy integralnoci .............................................................................................. 282
Replikacja bazy danych .............................................................................................................. 282
Bazy danych obsugiwane przez PHP .............................................................................................. 282
Warstwa abstrakcji bazy danych (lub jej brak) ..................................................................................... 284
Wybieramy MySQL ......................................................................................................................... 285
Podsumowanie .................................................................................................................................. 286
Rozdzia 13. Samouczek SQL .......................................................................... 287
Relacyjne bazy danych i SQL ........................................................................................................... 287
Standardy SQL ................................................................................................................................. 288
Podstawowe wyraenia SQL ............................................................................................................ 288
SELECT ..................................................................................................................................... 289
INSERT ...................................................................................................................................... 293
UPDATE .................................................................................................................................... 294
DELETE ..................................................................................................................................... 294
Projekt bazy danych ......................................................................................................................... 294

Spis treci

13

Bezpieczestwo i uprawnienia ......................................................................................................... 297


Ustawianie uprawnie ................................................................................................................ 297
Przechowywanie hase w innym miejscu ................................................................................... 298
Uycie dwch warstw ochrony hase ......................................................................................... 299
Tworzenie kopii bezpieczestwa ................................................................................................ 300
Podsumowanie .................................................................................................................................. 300
Rozdzia 14. Administracja baz danych MySQL ........................................... 303
Licencje MySQL .............................................................................................................................. 304
Instalowanie MySQL przejcie do wersji 4. ................................................................................ 305
Czynnoci przed instalacj ......................................................................................................... 305
Pobieranie MySQL ..................................................................................................................... 307
Instalowanie MySQL w Windows ............................................................................................. 307
Instalowanie MySQL w systemie Unix ...................................................................................... 308
Instalowanie MySQL w systemie Mac OS X ............................................................................. 309
Czynnoci poinstalacyjne ........................................................................................................... 309
Podstawowe komendy klienta MySQL ...................................................................................... 310
Administracja uytkownika MySQL ................................................................................................ 311
Programowanie lokalne .............................................................................................................. 314
Samodzielna strona internetowa ................................................................................................. 314
Wspdzielone utrzymywanie stron internetowych .................................................................... 315
PHPMyAdmin .................................................................................................................................. 315
Kopie zapasowe ................................................................................................................................ 319
Powielanie ........................................................................................................................................ 320
Odzyskiwanie ................................................................................................................................... 323
myisamchk ................................................................................................................................. 324
mysqlcheck ................................................................................................................................. 325
Podsumowanie .................................................................................................................................. 325
Rozdzia 15. Funkcje PHP i MySQL ................................................................. 327
czenie z MySQL ........................................................................................................................... 328
Tworzenie zapyta w MySQL .......................................................................................................... 329
Pobieranie wyniku ............................................................................................................................ 330
Pobieranie opisu danych ................................................................................................................... 333
Korzystanie z wielokrotnych pocze ............................................................................................. 334
Kontrola bdw ............................................................................................................................... 335
Tworzenie baz danych MySQL za pomoc PHP .............................................................................. 337
Typy danych MySQL ................................................................................................................. 338
Funkcje MySQL ............................................................................................................................... 340
Podsumowanie .................................................................................................................................. 342
Rozdzia 16. Wywietlanie zapyta w tabelach ........................................... 345
Tabele HTML i tabele bazy danych ................................................................................................. 346
Przeksztacenie jeden w jeden .................................................................................................... 346
Przykad: wywietlanie jednej tabeli .......................................................................................... 346
Przykadowe tabele .................................................................................................................... 348
Ulepszanie wywietlania ............................................................................................................ 349
Zoone odwzorowania ..................................................................................................................... 352
Wiele zapyta albo skomplikowane wywietlanie ..................................................................... 352
Uycie kilku zapyta .................................................................................................................. 353
Przykad skomplikowanego wywietlania .................................................................................. 355
Tworzenie przykadowych tabel ....................................................................................................... 356
Podsumowanie .................................................................................................................................. 358

14

PHP5 i MySQL. Biblia


Rozdzia 17. Tworzenie formularzy z zapyta ............................................. 359
Formularze HTML ........................................................................................................................... 359
Podstawowy formularz zatwierdzania danych do bazy danych ........................................................ 360
Samoprzetwarzanie ........................................................................................................................... 362
Edytowanie danych w formularzu HTML ........................................................................................ 369
TEXT i TEXTAREA ................................................................................................................. 369
CHECKBOX .............................................................................................................................. 371
RADIO ....................................................................................................................................... 373
SELECT ..................................................................................................................................... 377
Podsumowanie .................................................................................................................................. 379
Rozdzia 18. Efektywno PHP i MySQL ......................................................... 381
Poczenia ograniczanie i powtrne uycie ................................................................................. 381
Przykad nieprawidowego uycia: jedno poczenie na wyraenie ........................................... 382
Kilka wynikw nie wymaga kilku pocze ............................................................................... 383
Trwae poczenia ...................................................................................................................... 383
Indeksy i projekt tabel ...................................................................................................................... 384
Indeksowanie .............................................................................................................................. 384
Indeksowanie wszystkich pl ..................................................................................................... 387
Inne rodzaje indeksw ................................................................................................................ 388
Projekt tabeli .............................................................................................................................. 390
Przenoszenie pracy na serwer bazy danych ...................................................................................... 390
Baza jest szybsza od Ciebie ........................................................................................................ 391
Przykad nieprawidowego uycia: ptla zamiast warunku ........................................................ 391
Tworzenie pl daty i czasu ......................................................................................................... 393
Szukanie ostatnio wstawionego wiersza ..................................................................................... 394
Podsumowanie .................................................................................................................................. 395
Rozdzia 19. Puapki tandemu PHP-MySQL .................................................... 397
Brak poczenia ................................................................................................................................ 397
Problemy z uprawnieniami ............................................................................................................... 399
Nieoznaczone apostrofy ................................................................................................................... 401
Nieprawidowe zapytania SQL ......................................................................................................... 403
Pomyki w nazwach ................................................................................................................... 405
Pomyki przy przecinkach .......................................................................................................... 405
Cigi nieotoczone apostrofami ................................................................................................... 405
Niezainicjowane zmienne ........................................................................................................... 406
Zbyt mao danych, zbyt duo danych ............................................................................................... 406
Funkcje jzyka SQL ......................................................................................................................... 407
mysql_affected_rows() kontra mysql_num_rows() .................................................................... 407
mysql_result() ............................................................................................................................ 408
OCIFetch() ................................................................................................................................. 408
Kontrola poprawnoci ...................................................................................................................... 408
Podsumowanie .................................................................................................................................. 409

Cz III Zaawansowane funkcje i techniki ............................... 411


Rozdzia 20. Programowanie zorientowane obiektowo w PHP .................. 413
Co to jest programowanie zorientowane obiektowo? ....................................................................... 414
Prosty pomys ............................................................................................................................. 414
Opracowanie: obiekty jako typy danych .................................................................................... 416
Opracowanie: dziedziczenie ....................................................................................................... 416

Spis treci

15

Opracowanie: enkapsulacja ........................................................................................................ 417


Opracowanie: konstruktory i destruktory ................................................................................... 418
Terminologia .............................................................................................................................. 418
Podstawowe konstrukcje PHP dla OOP ........................................................................................... 420
Definiowanie klas ....................................................................................................................... 420
Dostp do zmiennych skadowych ............................................................................................. 421
Tworzenie egzemplarzy ............................................................................................................. 421
Funkcje konstruktora .................................................................................................................. 422
Dziedziczenie ............................................................................................................................. 423
Nadpisywanie funkcji ................................................................................................................. 424
Poczone podklasy .................................................................................................................... 424
Modyfikowanie i przypisywanie obiektw ................................................................................ 426
Kwestie zasigu .......................................................................................................................... 426
Zaawansowane funkcje OOP ............................................................................................................ 427
Elementy publiczne, prywatne i chronione ................................................................................ 427
Interfejsy .................................................................................................................................... 429
Stae ............................................................................................................................................ 429
Klasy abstrakcyjne ..................................................................................................................... 429
Symulowanie funkcji klas .......................................................................................................... 430
Wywoywanie funkcji rodzica .................................................................................................... 431
Automatyczne wywoanie konstruktorw rodzica ...................................................................... 432
Symulowanie metod przecienia .............................................................................................. 433
Serializacja ................................................................................................................................. 434
Funkcje introspekcji ......................................................................................................................... 436
Przegld funkcji ......................................................................................................................... 437
Przykad: genealogia klas ........................................................................................................... 439
Przykad: dopasowywanie zmiennych i kolumn bazy danych ...................................................... 442
Przykad: uoglniony test metod ................................................................................................ 444
Rozszerzony przykad: formularze HTML ....................................................................................... 447
Rozwizywanie problemw ............................................................................................................. 452
Symptom: zmienna skadowa nie ma wartoci w funkcji skadowej .......................................... 452
Symptom: bd analizatora skadni, oczekuj T_VARIABLE .............................................. 452
Style OOP w PHP ............................................................................................................................. 453
Konwencje nazywania ................................................................................................................ 453
Dodatki funkcji ........................................................................................................................... 453
Projektowanie dziedziczenia ...................................................................................................... 454
Podsumowanie .................................................................................................................................. 455
Rozdzia 21. Zaawansowane funkcje operujce na tablicach ..................... 457
Przeksztacenia tablic ....................................................................................................................... 457
Pobieranie kluczy i wartoci ....................................................................................................... 458
Zamiana, odwracanie i mieszanie ............................................................................................... 459
czenie, dopenianie, wycinanie i zastpowanie ...................................................................... 460
Stosy i kolejki ................................................................................................................................... 461
Zamiana pomidzy tablic i zmiennymi ........................................................................................... 464
Sortowanie ........................................................................................................................................ 465
Funkcje wywietlajce tablice .......................................................................................................... 466
Podsumowanie .................................................................................................................................. 467

16

PHP5 i MySQL. Biblia


Rozdzia 22. acuch i funkcje wyrae regularnych ................................. 469
Tokenizing i funkcje analizatora skadni .......................................................................................... 470
Dlaczego wyraenia regularne? ........................................................................................................ 472
Wyraenia regularne w PHP ...................................................................................................... 473
Przykad wyrae stylu POSIX .................................................................................................. 473
Funkcje wyrae regularnych ..................................................................................................... 475
Wyraenia regularne zgodne z Perl .................................................................................................. 476
Przykad: prosty program do wyodrbniania hiperczy ................................................................... 479
Wyraenie regularne .................................................................................................................. 479
Uywanie wyraenia w funkcji .................................................................................................. 481
Zaawansowane funkcje acuchw .................................................................................................. 483
Funkcje HTML ........................................................................................................................... 483
Mieszanie przy uyciu MD5 ...................................................................................................... 483
acuchy jako zbiory znakw .................................................................................................... 485
Funkcje podobne do acuchw ................................................................................................. 487
Podsumowanie .................................................................................................................................. 487
Rozdzia 23. Funkcje systemu operacyjnego i dostpu do plikw ............. 489
Uprawnienia do plikw PHP ............................................................................................................ 489
Funkcje czytania i zapisywania plikw ............................................................................................ 490
Otwarcie pliku ............................................................................................................................ 491
Czytanie pliku ............................................................................................................................ 494
Tworzenie mechanizmu pobierania plikw przy uyciu fpassthru() .......................................... 496
Zapis do pliku ............................................................................................................................. 497
Zamknicie pliku ........................................................................................................................ 498
Funkcje systemu plikw i katalogw ................................................................................................ 498
feof ............................................................................................................................................. 501
file_exists ................................................................................................................................... 501
filesize ........................................................................................................................................ 501
Funkcje sieciowe .............................................................................................................................. 501
Funkcje logu systemowego ........................................................................................................ 501
Funkcje DNS .............................................................................................................................. 502
Funkcje gniazd ........................................................................................................................... 502
Funkcje daty i czasu ......................................................................................................................... 502
Jeeli nie znasz daty ani czasu .................................................................................................... 503
Jeeli ju odczytae dat i czas albo znacznik czasu ................................................................. 504
Funkcje konwersji kalendarza .......................................................................................................... 505
Podsumowanie .................................................................................................................................. 506
Rozdzia 24. Sesje, cookies i HTTP ................................................................. 507
Czym s sesje? .................................................................................................................................. 507
Co stanowi problem? .................................................................................................................. 508
Dlaczego si tym zajmujemy? .................................................................................................... 508
Alternatywy sesji .............................................................................................................................. 508
Adres IP ...................................................................................................................................... 509
Ukryte zmienne .......................................................................................................................... 509
Cookie ........................................................................................................................................ 510
Jak dziaaj sesje w PHP .................................................................................................................. 510
Uaktywnianie sesji w PHP ......................................................................................................... 511
Dystrybucja zmiennych sesji ...................................................................................................... 511
Gdzie s przechowywane dane? ................................................................................................. 514

Spis treci

17

Przykadowy kod sesji ...................................................................................................................... 515


Funkcje obsugi sesji ........................................................................................................................ 518
Zagadnienia konfiguracji .................................................................................................................. 520
Cookies ............................................................................................................................................. 521
Funkcja setcookie() .................................................................................................................... 522
Przykady ................................................................................................................................... 523
Usuwanie cookie ........................................................................................................................ 524
Odczytywanie cookie ................................................................................................................. 524
register_globals i nadpisywanie zmiennych ............................................................................... 525
Puapki cookie ............................................................................................................................ 526
Wysyanie nagwkw HTTP ........................................................................................................... 528
Przykad: przekierowanie ........................................................................................................... 528
Przykad: uwierzytelnianie HTTP .............................................................................................. 529
Puapki zwizane z nagwkami ................................................................................................ 530
Puapki i wykrywanie usterek ........................................................................................................... 530
Podsumowanie .................................................................................................................................. 531
Rozdzia 25. Typy i rodzaje konwersji .......................................................... 533
Typ zaokrglajcy ............................................................................................................................ 533
Zasoby .............................................................................................................................................. 534
Co to s zasoby? ......................................................................................................................... 534
Jak obsugiwa zasoby ............................................................................................................... 535
Typ testujcy .................................................................................................................................... 535
Przypisanie i koercja ......................................................................................................................... 535
Przekroczenie typu liczb cakowitych ........................................................................................ 540
Odnajdywanie najwikszej liczby cakowitej ............................................................................. 541
Podsumowanie .................................................................................................................................. 541
Rozdzia 26. Zaawansowane uycie funkcji ................................................. 543
Zmienna liczba argumentw ............................................................................................................. 543
Argumenty domylne ................................................................................................................. 544
Tablice jako substytut wielu argumentw .................................................................................. 544
Wiele argumentw w PHP4 i wersjach pniejszych ................................................................. 545
Wywoanie przez warto ................................................................................................................. 547
Wywoanie przez referencj ............................................................................................................. 548
Zmienne jako nazwy funkcji ............................................................................................................ 549
Bardziej skomplikowany przykad ................................................................................................... 549
Podsumowanie .................................................................................................................................. 553
Rozdzia 27. Matematyka .............................................................................. 555
Stae matematyczne .......................................................................................................................... 555
Sprawdzanie liczb ............................................................................................................................. 556
Konwersja podstawy ........................................................................................................................ 557
Funkcje wykadnicze i logarytmy ..................................................................................................... 560
Trygonometria .................................................................................................................................. 561
Arytmetyka o dowolnej dokadnoci (BC) ....................................................................................... 563
Przykad uycia funkcji o dowolnej dokadnoci ....................................................................... 565
Konwersja oblicze na dowoln dokadno .............................................................................. 565
Podsumowanie .................................................................................................................................. 567

18

PHP5 i MySQL. Biblia


Rozdzia 28. PEAR ........................................................................................... 569
Co to jest PEAR? .............................................................................................................................. 570
System pakietw PEAR .................................................................................................................... 571
Prbka pakietw PEAR .............................................................................................................. 571
Jak dziaa baza danych PEAR .................................................................................................... 572
Meneder pakietw .................................................................................................................... 572
Uywanie menedera ................................................................................................................. 576
PHP Foundation Classes (PFC) ........................................................................................................ 577
PHP Extension Code Library (PECL) .............................................................................................. 578
Styl kodowania PEAR ...................................................................................................................... 578
Wcicia, odstpy i dugo linii .................................................................................................. 578
Formatowanie struktur kontrolnych ........................................................................................... 579
Formatowanie funkcji i wywoa funkcji ................................................................................... 580
Podsumowanie .................................................................................................................................. 581
Rozdzia 29. Bezpieczestwo ........................................................................ 583
Moliwe ataki ................................................................................................................................... 584
Zniszczenie witryny ................................................................................................................... 584
Dostp do kodu rdowego ....................................................................................................... 585
Odczytywanie dowolnych plikw .............................................................................................. 587
Uruchamianie dowolnych programw ....................................................................................... 590
Wirusy i inne e-stworzenia ......................................................................................................... 591
Bezpieczestwo poczty elektronicznej ....................................................................................... 592
Register_globals ............................................................................................................................... 593
Przekazywanie plikw ...................................................................................................................... 595
Szyfrowanie ...................................................................................................................................... 599
Szyfrowanie kluczem publicznym .............................................................................................. 600
Szyfrowanie pojedynczym kluczem ........................................................................................... 601
Szyfrowanie cookies .................................................................................................................. 603
Mieszanie ................................................................................................................................... 604
Cyfrowe podpisywanie plikw ................................................................................................... 605
Secure Sockets Layer ................................................................................................................. 606
Dla Twojej informacji: bezpieczne witryny sieciowe ....................................................................... 607
Podsumowanie .................................................................................................................................. 607
Rozdzia 30. Konfiguracja .............................................................................. 609
Podgldanie zmiennych rodowiska ................................................................................................. 609
Poznajemy konfiguracj PHP ........................................................................................................... 609
Opcje kompilacji ........................................................................................................................ 610
Opcje kompilacji dla postaci CGI .............................................................................................. 614
Pliki konfiguracyjne Apache ...................................................................................................... 616
Plik php.ini ................................................................................................................................. 618
Poprawianie wydajnoci PHP ........................................................................................................... 622
Podsumowanie .................................................................................................................................. 624
Rozdzia 31. Wyjtki i obsuga bdw ......................................................... 627
Obsuga bdw w PHP5 .................................................................................................................. 627
Bdy i wyjtki ........................................................................................................................... 628
Klasa wyjtku ............................................................................................................................. 629
Blok try/catch ............................................................................................................................. 630
Zgaszanie wyjtku ..................................................................................................................... 630
Definiowanie wasnych podklas Exception ................................................................................ 631
Ograniczenia wyjtkw w PHP .................................................................................................. 633

Spis treci

19

Inne metody obsugi bdw ............................................................................................................. 633


Natywne bdy PHP ................................................................................................................... 633
Definiowanie procedury obsugi bdw .................................................................................... 635
Wyzwalanie bdw uytkownika .............................................................................................. 635
Odnotowywanie w dzienniku i debugowanie ................................................................................... 636
Podsumowanie .................................................................................................................................. 637
Rozdzia 32. Debugowanie ............................................................................ 639
Oglne strategie rozwizywania problemw .................................................................................... 640
Jednorazowo zmiana jednej rzeczy ............................................................................................ 640
Sprbuj odizolowa problem ...................................................................................................... 640
Upraszczaj, pniej rozbudowuj ................................................................................................ 640
Sprawd oczywiste rzeczy .......................................................................................................... 640
Dokumentuj swoje rozwizania ................................................................................................. 641
Po naprawie przetestuj ............................................................................................................... 641
Menaeria bdw ............................................................................................................................ 641
Bdy w trakcie kompilacji ......................................................................................................... 641
Bdy w trakcie dziaania ........................................................................................................... 641
Bdy logiczne ............................................................................................................................ 642
Uywanie dziennikw zdarze serwera sieciowego ......................................................................... 642
Apache ....................................................................................................................................... 642
IIS ............................................................................................................................................... 644
Zgaszanie bdw PHP i odnotowywanie w dzienniku ................................................................... 644
Zgaszanie bdw ...................................................................................................................... 645
Zapisywanie bdw w dzienniku .............................................................................................. 645
Wybr bdw do zgaszania lub odnotowania w dzienniku ...................................................... 646
Funkcje zgaszania bdw ............................................................................................................... 646
Wywietlane komunikaty diagnostyczne ................................................................................... 646
Uywanie print_r() ..................................................................................................................... 647
Uywanie syslog() ...................................................................................................................... 648
Odnotowywanie do dziennika we wasnej lokalizacji ................................................................ 649
Uywanie error_log() ................................................................................................................. 650
Graficzne narzdzia do debugowania ............................................................................................... 651
Unikanie bdw na pierwszym miejscu .................................................................................... 651
Odnajdywanie bdw, jeli si pojawi .................................................................................... 652
Podsumowanie .................................................................................................................................. 653
Rozdzia 33. Styl ............................................................................................. 655
Zalety prawidowego stylu ............................................................................................................... 655
Czytelno ........................................................................................................................................ 656
Komentarze ................................................................................................................................ 658
PHPDoc ...................................................................................................................................... 659
Nazwy zmiennych i plikw ........................................................................................................ 659
Jednolito stylu ......................................................................................................................... 661
atwo konserwacji ........................................................................................................................ 662
Unikaj magicznych liczb ............................................................................................................ 662
Funkcje ....................................................................................................................................... 662
Pliki doczane ........................................................................................................................... 663
Interfejs obiektowy ..................................................................................................................... 663
Uycie programu kontroli wersji ................................................................................................ 664

20

PHP5 i MySQL. Biblia


Solidno .......................................................................................................................................... 664
Niedostpno usugi .................................................................................................................. 664
Niespodziewany typ zmiennej .................................................................................................... 665
Zwizo i wydajno ..................................................................................................................... 665
Uywaj waciwych algorytmw ............................................................................................... 665
Poprawianie wydajnoci ............................................................................................................. 666
Zwizo: zmniejszanie ............................................................................................................. 667
Wskazwki na temat zwizoci ................................................................................................. 668
Tryb HTML czy PHP? ..................................................................................................................... 670
Minimalny PHP .......................................................................................................................... 671
Maksymalny PHP ....................................................................................................................... 672
redni PHP ................................................................................................................................. 672
Styl heredoc ................................................................................................................................ 673
Oddzielanie kodu od projektu ........................................................................................................... 675
Funkcje ....................................................................................................................................... 675
Arkusze stylw w PHP ............................................................................................................... 675
Szablony i spjno stron ........................................................................................................... 676
Podsumowanie .................................................................................................................................. 677

Cz IV Poczenia ..................................................................... 679


Rozdzia 34. PostgreSQL ................................................................................ 681
Dlaczego wybra PostgreSQL? ........................................................................................................ 681
Dlaczego tak czy owak obiektowo relacyjna? .................................................................................... 683
Instalowanie PostgreSQL ................................................................................................................. 683
Instalacja w systemie Linux ....................................................................................................... 684
Ale czy jest to jeszcze baza danych? .......................................................................................... 685
A do prawdziwej pracy ................................................................................................................... 687
PHP i PostgreSQL ............................................................................................................................ 688
Baza danych Cartoons ...................................................................................................................... 688
Podsumowanie .................................................................................................................................. 696
Rozdzia 35. Oracle ......................................................................................... 697
Kiedy potrzebujesz Oracle? .............................................................................................................. 697
Pienidze .................................................................................................................................... 698
Inne konkurencyjne zasoby ........................................................................................................ 698
Ogromne zestawy danych .......................................................................................................... 699
Wiele duych zapisw lub bdne przeksztacanie danych ........................................................ 699
Wyzwalacze ............................................................................................................................... 699
Odpowiedzialno prawna ......................................................................................................... 700
Dwuletnie perspektywy .............................................................................................................. 700
Oracle i architektura sieciowa .......................................................................................................... 700
Wyspecjalizowani czonkowie zespou ...................................................................................... 700
Wsplne konstruowanie baz danych .......................................................................................... 701
Ograniczone zmiany schematu ................................................................................................... 701
Narzdzia (lub ich brak) ............................................................................................................. 701
Replikacja i poprawna praca mimo usterek ................................................................................ 701
Buforowanie danych .................................................................................................................. 702

Spis treci

21

Uywanie funkcji OCI8 .................................................................................................................... 702


Sterowanie acuchami ............................................................................................................... 703
Przetwarzanie i wykonywanie .................................................................................................... 703
Zgaszanie bdw ...................................................................................................................... 704
Zarzdzanie pamici ................................................................................................................. 704
Proszenie o wartoci null ............................................................................................................ 704
Pobieranie caych zestaww danych .......................................................................................... 704
Due litery .................................................................................................................................. 704
Transakcyjno ........................................................................................................................... 705
Procedury skadowane i kursory ................................................................................................ 706
Projekt: edytor .................................................................................................................................. 707
Projekt: wsadowy edytor produktw ................................................................................................ 715
Podsumowanie .................................................................................................................................. 723
Rozdzia 36. Funkcje bazodanowe PEAR ....................................................... 725
Dyskusyjne zalety niezalenoci od baz danych ............................................................................... 725
Rdzenne mechanizmy komunikacji z bazami danych ................................................................ 728
Abstrakcja bazodanowa .............................................................................................................. 729
Zasady dziaania PEAR DB ............................................................................................................. 730
Nazwy rde danych (DSN) ...................................................................................................... 730
Poczenie .................................................................................................................................. 732
Wykonywanie zapyta ............................................................................................................... 732
Odczytywanie wierszy ............................................................................................................... 733
Rozczanie ................................................................................................................................ 733
Kompletny przykad ................................................................................................................... 733
Funkcje PEAR DB ........................................................................................................................... 735
Skadowe klasy DB .................................................................................................................... 735
Skadowe klasy DB_Common ................................................................................................... 735
Skadowe klasy DB_Result ........................................................................................................ 736
Podsumowanie .................................................................................................................................. 736
Rozdzia 37. E-mail ......................................................................................... 737
Informacje na temat architektury e-mail ........................................................................................... 737
Serwer TCP/IP ........................................................................................................................... 738
Mail Transfer Agent (MTA), czyli serwer SMTP ...................................................................... 739
Kolejka poczty ........................................................................................................................... 740
Mail User Agent, czyli lokalny klient pocztowy ........................................................................ 740
Program pobierajcy poczt (serwer POP/IMAP) ...................................................................... 740
Zarzdca list wysykowych ........................................................................................................ 742
Pobieranie poczty za pomoc PHP ................................................................................................... 742
Tworzenie od podstaw ............................................................................................................... 743
Tworzenie na przykadzie .......................................................................................................... 743
Tworzenie przez upikszanie ..................................................................................................... 744
Wysyanie poczty za pomoc PHP ................................................................................................... 744
Konfiguracja Windows ............................................................................................................... 744
Konfiguracja Uniksa .................................................................................................................. 745
Funkcja mail ............................................................................................................................... 745

22

PHP5 i MySQL. Biblia


Wicej na temat aplikacji pocztowych ............................................................................................. 747
Wysyanie poczty z formularza .................................................................................................. 747
Wysyanie poczty przy uyciu bazy danych ............................................................................... 749
Wysyanie zacznikw w poczcie MIME ................................................................................. 750
Wasna aplikacja pocztowa w PHP ............................................................................................ 752
Wysyanie poczty z cronjob ....................................................................................................... 754
Problemy w czasie korzystania z poczty .......................................................................................... 756
Podsumowanie .................................................................................................................................. 757
Rozdzia 38. PHP i JavaScript ........................................................................ 759
Tworzenie kodu JavaScript w PHP .................................................................................................. 759
Pojedynek obiektw ................................................................................................................... 760
PHP nie analizuje wysyanych danych ....................................................................................... 760
Kiedy uywa JavaScript ........................................................................................................... 761
PHP jako koo zapasowe do JavaScript ............................................................................................ 762
JavaScript statyczny kontra dynamiczny .......................................................................................... 764
Dynamiczna generacja formularzy ............................................................................................. 765
Przesyanie danych z JavaScript do PHP .................................................................................... 769
Podsumowanie .................................................................................................................................. 772
Rozdzia 39. PHP i Java .................................................................................. 775
PHP dla programistw Java .............................................................................................................. 775
Podobiestwa ............................................................................................................................. 776
Rnice ....................................................................................................................................... 777
Java Server Pages i PHP ............................................................................................................. 778
Przewodnik po ksice ............................................................................................................... 779
Integrowanie jzykw PHP i Java .................................................................................................... 780
Java SAPI ................................................................................................................................... 780
Rozszerzenie Java ...................................................................................................................... 781
Obiekt Java ................................................................................................................................. 783
Bdy i wyjtki ........................................................................................................................... 784
Moliwe problemy ..................................................................................................................... 785
Bez adnych ogranicze ............................................................................................................. 786
Podsumowanie .................................................................................................................................. 786
Rozdzia 40. PHP i XML ................................................................................... 789
Co to jest XML? ............................................................................................................................... 789
Praca z XML .................................................................................................................................... 792
Dokumenty i DTD ............................................................................................................................ 793
Struktura DTD ............................................................................................................................ 795
Analizatory kontrolujce i niekontrolujce poprawnoci ........................................................... 797
SAX kontra DOM ............................................................................................................................. 797
DOM ................................................................................................................................................ 798
Stosowanie DOM XML ............................................................................................................. 799
Funkcje DOM ............................................................................................................................. 799
SAX .................................................................................................................................................. 801
Uycie SAX ............................................................................................................................... 802
Opcje SAX ................................................................................................................................. 803
Funkcje PHP dla SAX ................................................................................................................ 804

Spis treci

23

API SimpleXML .............................................................................................................................. 805


Uycie SimpleXML ................................................................................................................... 805
Funkcje SimpleXML .................................................................................................................. 805
Przykadowa aplikacja SAX ............................................................................................................. 806
Puapki i wyszukiwanie bdw ....................................................................................................... 812
Podsumowanie .................................................................................................................................. 812
Rozdzia 41. Usugi sieciowe ......................................................................... 815
Koniec programowania, jakie znamy ............................................................................................... 815
Smutna prawda o wymianie danych ........................................................................................... 816
Pena prostota ............................................................................................................................. 816
REST, XML-RPC, SOAP, .NET ...................................................................................................... 819
REST .......................................................................................................................................... 820
XML-RPC .................................................................................................................................. 820
SOAP ......................................................................................................................................... 821
Usugi .NET ............................................................................................................................... 823
Sabe strony dzisiejszych usug sieciowych ..................................................................................... 823
Due i wolne .............................................................................................................................. 823
Prawdopodobne znaczne obcienie .......................................................................................... 823
Standardy ................................................................................................................................... 824
Ukrywanie i wyszukiwanie ........................................................................................................ 824
Kto za to paci i w jaki sposb? .................................................................................................. 825
Projekt: klient REST ......................................................................................................................... 825
Projekt: serwer i klient SOAP ........................................................................................................... 829
Podsumowanie .................................................................................................................................. 833
Rozdzia 42. Grafika ....................................................................................... 835
Dostpne moliwoci ........................................................................................................................ 835
Grafiki HTML .................................................................................................................................. 836
Tworzenie obrazkw przy uyciu biblioteki gd ................................................................................ 840
Czym jest biblioteka gd? ............................................................................................................ 841
Formaty obrazkw i przegldarki ............................................................................................... 841
Wybr wersji .............................................................................................................................. 842
Instalacja .................................................................................................................................... 843
Zasady dziaania biblioteki gd .................................................................................................... 844
Funkcje ....................................................................................................................................... 847
Obrazki i protok HTTP ........................................................................................................... 848
Przykad: fraktale ....................................................................................................................... 850
Rozwizywanie problemw ............................................................................................................. 858
Cakowicie pusta strona .............................................................................................................. 858
Bd Headers already sent ....................................................................................................... 858
Zepsuty obrazek ......................................................................................................................... 859
Podsumowanie .................................................................................................................................. 860

Cz V Studium przypadkw .................................................... 861


Rozdzia 43. Dziennik sieciowy ..................................................................... 863
Dlaczego dziennik? .......................................................................................................................... 863
Najprostszy dziennik ........................................................................................................................ 864
Dodanie HTML-owego narzdzia do edycji ..................................................................................... 869
Doczenie bazy danych ................................................................................................................... 871
Moliwe rozszerzenia ....................................................................................................................... 878
Podsumowanie .................................................................................................................................. 878

24

PHP5 i MySQL. Biblia


Rozdzia 44. Uwierzytelnianie uytkownikw ............................................. 879
Projektowanie systemu uwierzytelniania uytkownikw ................................................................. 879
Unikanie powszechnych problemw zwizanych z bezpieczestwem ............................................. 881
Wyczenie register_globals ....................................................................................................... 881
Kontrola dugoci napisw a bezpieczestwo ............................................................................ 882
Jednokierunkowe szyfrowanie hase .......................................................................................... 883
Rejestracja ........................................................................................................................................ 884
Zalogowanie i wylogowanie ............................................................................................................. 890
Narzdzia uytkownikw ................................................................................................................. 894
Zapomniane hasa ....................................................................................................................... 895
Zmiana poufnych danych uytkownikw ................................................................................... 897
Edycja niechronionych danych uytkownikw .......................................................................... 902
Narzdzia administracyjne ............................................................................................................... 905
Autoryzacja: basic auth, cookie, baza danych i IP ...................................................................... 906
Logowanie jako uytkownik ...................................................................................................... 907
Podsumowanie .................................................................................................................................. 909
Rozdzia 45. System ocen uytkownikw .................................................... 911
Projekt pocztkowy .......................................................................................................................... 912
Dziedzina: witryna z cytatami .................................................................................................... 912
Moliwe oceny ........................................................................................................................... 912
Poczenie ocen z treci ............................................................................................................ 913
Zbieranie gosw .............................................................................................................................. 914
Agregowanie wynikw ..................................................................................................................... 920
Rozszerzenia i moliwoci ............................................................................................................... 921
Podsumowanie .................................................................................................................................. 922
Rozdzia 46. Quiz ............................................................................................ 923
Pojcia wykorzystywane w tym rozdziale ........................................................................................ 923
Gra .................................................................................................................................................... 924
Nasza wersja gry ........................................................................................................................ 924
Przykadowe ekrany ................................................................................................................... 924
Zasady ........................................................................................................................................ 926
Zagraj w to sam .......................................................................................................................... 927
Kod ................................................................................................................................................... 927
Pliki rdowe ............................................................................................................................ 927
Utworzenie bazy danych ............................................................................................................ 952
Rozwaania projektowe .................................................................................................................... 956
Rozdzielenie kodu i wywietlania .............................................................................................. 956
Trwao danych ........................................................................................................................ 956
Obsuga wyjtkw ...................................................................................................................... 957
Podsumowanie .................................................................................................................................. 957
Rozdzia 47. Konwersja statycznych witryn HTML ...................................... 959
Planowanie wielkiej modernizacji .................................................................................................... 959
Aby nie wyla dziecka z kpiel ................................................................................................ 960
Ocena techniczna ........................................................................................................................ 961
Przeprojektowanie interfejsu uytkownika ....................................................................................... 962
Planowanie nowego schematu bazy danych ..................................................................................... 965

Spis treci

25

Przenoszenie danych do bazy danych ............................................................................................... 969


Poprawianie danych ................................................................................................................... 969
Wprowadzanie danych ............................................................................................................... 970
Zbieranie danych ........................................................................................................................ 974
Szablony ........................................................................................................................................... 977
Wydajno i buforowanie ................................................................................................................. 984
Buforowanie ............................................................................................................................... 985
Podsumowanie .................................................................................................................................. 986
Rozdzia 48. Wizualizacja danych przy uyciu diagramw Venna .............. 987
Skalowane diagramy Venna ............................................................................................................. 987
Zadanie ....................................................................................................................................... 988
Struktura kodu .................................................................................................................................. 988
Wymagana trygonometria ................................................................................................................ 989
Planowanie wywietlania ................................................................................................................. 992
Uproszczenie zaoe ................................................................................................................. 992
Okrelenie rozmiaru i skali ......................................................................................................... 993
Wywietlenie wyniku ....................................................................................................................... 998
Wizualizacja bazy danych ................................................................................................................ 999
Testowanie ............................................................................................................................... 1003
Rozszerzenia ................................................................................................................................... 1004
Podsumowanie ................................................................................................................................ 1005

Dodatki ...................................................................................... 1007


Dodatek A PHP dla programistw C ........................................................... 1009
Dodatek B PHP dla hakerw Perl ................................................................ 1015
Dodatek C PHP dla programistw HTML ..................................................... 1021
Dodatek D Zasoby Sieci na temat PHP ....................................................... 1029
Skorowidz .................................................................................................... 1041

Rozdzia 8.

Cigi
W tym rozdziale:

Cigi w PHP

Funkcje obsugi cigw

Rozszerzony przykad: kalkulator do wicze

Mimo e rysunki, dwiki, animacje i aplety staj si coraz waniejsz czci sieci WWW,
nadal bazuje ona na tekcie. Podstawowym typem PHP przechowujcym tekst jest typ
string.
W niniejszym rozdziale opisane zostan niemal wszystkie dostpne w PHP narzdzia do
manipulowania cigami (jedynie bardziej zaawansowane funkcje operujce na cigach
oraz dopasowywanie cigw za pomoc wyrae regularnych zostanie opisane pniej,
w rozdziale 22.). Na pocztku przedstawimy podstawowe informacje o cigach, a nastpnie zaprezentujemy ich dziaanie w praktyce, kontynuujc rozbudow kalkulatora do wicze z rozdziau 7.

Cigi w PHP
Cigi to sekwencje znakw traktowane jako odrbna jednostka. Mog by przypisywane do zmiennych, uywane jako parametry funkcji, zwracane z funkcji lub wysyane na
wyjcie i ogldane w przegldarce klienta. Najprostsz metod stworzenia cigu w PHP
jest otoczenie znakw cudzysowami (") bd apostrofami ('):
$ciag = 'Cig';
$inny_ciag = "Inny cig";

Rnica pomidzy cigami w cudzysowach i apostrofach ley w interpretacji ich przez


PHP. Jeeli otoczysz cig apostrofami, prawie adna interpretacja nie zostanie zastosowana, jeeli za otoczysz cudzysowami, PHP wklei wartoci zmiennych w miejsce ich
nazw i zamieni sekwencje sterujce na odpowiadajce im znaki. Jeeli np. wstawisz nastpujcy kod do strony:

180

Cz I Podstawy PHP
$wyrazenie = 'wszystko, co powiem';
$pytanie_1 =
"Czy musisz bra $wyrazenie dosownie?\n<BR>";
$pytanie_2 =
'Czy musisz bra $wyrazenie dosownie?\n<BR>';
echo $pytanie_1;
echo $pytanie_2;

powiniene spodziewa si nastpujcego wyniku:


Czy musisz bra wszystko, co powiem, dosownie?
Czy musisz bra $wyrazenie dosownie?\n

Szczegowy opis traktowania przez PHP cigw z apostrofami i cudzysowami znajduje


si w czci String w rozdziale 5.

Doczanie cigw przy uyciu nawiasw klamrowych


W wikszoci przypadkw wystarczy umieci zmienn w cigu otoczonym cudzysowami, aby warto tej zmiennej zostaa umieszczona jako cz cigu znakw w trakcie
interpretowania kodu. Istniej jednak dwie sytuacje, w ktrych interpreter moe wymaga
bardziej szczegowych wskazwek od programisty. Pierwsza z nich zachodzi wwczas,
gdy zamierzenie programisty co do umiejscowienia zmiennej kci si z zasadami stosowanymi przez interpreter, druga natomiast ma miejsce wtedy, gdy doczane wyraenie nie jest zwyk zmienn. W obydwu przypadkach wszelkie wtpliwoci mona rozwia umieszczajc zmienn, ktra ma zosta doczona, w nawiasach klamrowych {}.
PHP nie bdzie na przykad mia trudnoci z interpretacj nastpujcego kodu:
$sport = 'volleyball';
$plan = "W lecie bd gra w $sport";

W tej sytuacji analizator napotka symbol $, po czym rozpocznie odczytywanie znakw


skadajcych si na nazw zmiennej do momentu, gdy dotrze do znaku spacji wystpujcego po sowie $sport. Znaki spacji nie mog znajdowa si w nazwie zmiennej, zatem
oczywiste jest, e zmienna nosi nazw $sport. PHP bez trudu ustali warto tak zidentyfikowanej zmiennej ('volleyball') i umieci j w cigu znakw.
Czasami jednak umieszczanie znaku spacji zaraz za nazw zmiennej nie ley w interesie
programisty. Spjrzmy na poniszy przykad:
$sport1 = 'volley';
$sport2 = 'foot';
$sport3 = 'basket';
$plan1 = "W lecie bd gra w $sport1ball";
$plan2 = "Na jesieni bd gra w $sport2ball";
$plan3 = "W zimie bd gra w $sport3ball";

// le
// le
// le

W tym przypadku programista nie osignie podanego efektu, poniewa PHP zinterpretuje sowo $sport1 jako cz nazwy zmiennej $sport1ball, ktra najprawdopodobniej
bdzie nieokrelona. Zamiast takiego zapisu naleaoby zatem napisa:
$plan1 = "W lecie bd gra w {$sport1}ball";

// Dobrze

Rozdzia 8. Cigi

181

Dziki takiemu zapisowi PHP najpierw obliczy warto zmiennej znajdujcej si w nawiasach klamrowych, a dopiero potem doczy j do cigu.
Z analogicznych powodw PHP nie radzi sobie z doczaniem wyrae zawierajcych
zmienne zoone, takie jak tablice wielowymiarowe czy obiekty. Rwnie wwczas konieczne jest uycie nawiasw klamrowych. Oglna zasada stanowi, e jeeli zaraz za znakiem { wystpuje znak $, PHP najpierw obliczy warto wyraenia cigncego si a do
znaku }, po czym obliczony wynik doczy do cigu. (Jeeli chcesz, by w cigu pojawi
si sam symbol {$, musisz w tym celu obydwa znaki poprzedzi znakiem lewego ukonika).
Inne sposoby radzenia sobie z takimi sytuacjami zostan opisane w punkcie Zczenie
i przypisanie w dalszej czci niniejszego rozdziau.

Znaki i indeksy cigu


W przeciwiestwie do wikszoci jzykw programowania, PHP nie posiada osobnego
typu znakowego. Zwykle funkcje, ktre w innych jzykach pobieraj znak, w PHP spodziewaj si cigu o dugoci 1.
Mona uzyska znak z cigu, traktujc cig jak tablic z pierwszym indeksem rwnym 0,
wpisanym w nawiasach klamrowych zaraz po zmiennej cigu. Uzyskany w ten sposb
znak jest jednoliterowym cigiem. Na przykad:
$ciag = "Podwojony";
for ($index = 0 ; $index < 9; $index++ ) {
$ciag_do_wyswietlenia = $ciag{$index};
print("$ciag_do_wyswietlenia$ciag_do_wyswietlenia");
}

daje w efekcie:
PPooddwwoojjoonnyy

Kada litera zostaa wypisana dwa razy (liczba 9 wpisana jest w tym przykadzie dlatego,
e nie wiemy jeszcze, jak okreli dugo cigu popatrz na opis funkcji strlen()
w czci Sprawdzanie cigw).
We wczeniejszych wersjach PHP mona byo, zalenie od wasnego uznania, umieszcza
odpowiedni indeks w nawiasach kwadratowych i w taki sposb odczytywa pojedyncze
znaki cigu (np. $ciag[3] zamiast $ciag{3}). Wprawdzie cay czas mona uywa zapisu
z nawiasami kwadratowymi (takiego samego jak w przypadku tablic), lecz mechanizm
ten zosta ju uniewaniony i rekomendowane jest uywanie do tego celu nawiasw
klamrowych.

Operatory dla cigw


PHP posiada tylko jeden prawdziwy operator dla cigw: kropk (.) operator zczenia. Operator ten umieszczony pomidzy cigami tworzy nowy cig, bdcy ich sklejeniem. Na przykad:

182

Cz I Podstawy PHP
$zdanie_1 = "Chciabym podzieli si z wami ";
$zdanie_2 = "moimi uwagami";
print ($zdanie_1. $zdanie_2. "...");

da w efekcie:
Chciabym podzieli si z wami moimi uwagami...

Zauwamy, e nie przekazujemy do instrukcji print wielu argumentw przekazujemy jeden argument stworzony przez poczenie trzech cigw. Pierwszy i drugi cig
to zmienne, trzeci jest literaem.
Operator zczenia nie jest tym samym co operator + w jzyku Java, nie przecia
innego operatora. Jeeli pomylisz si i dodasz dwa cigi za pomoc +, zostan
zinterpretowane jako liczby. Na przykad jeden + dwa bdzie rwne 0 (poniewa nie
udao si przeprowadzi prawidowej konwersji cigw).

Zczenie i przypisanie
Podobnie jak w przypadku operatorw arytmetycznych, PHP posiada operator skrcony (.=), ktry jest zczeniem z przypisaniem. Wyraenie:
$ciag .= $dodatek;

jest rwnoznaczne z:
$ciag = $ciag . $dodatek;

Zwr uwag, e w odrnieniu od naprzemiennego w swej naturze dodawania i mnoenia, przy uyciu tego operatora nowy cig jest dodawany po prawej stronie starego.
Jeeli chcesz zmieni kolejno, musisz uy duszej formy:
$ciag = $dodatek . $ciag;

Trzeba rwnie pamita, e w trakcie zczania zmienne bez przypisanej wartoci s


traktowane jak cigi puste. Zmienna $ciag pozostanie zatem niezmieniona, jeeli zmiennej $dodatek nie zostanie przypisana adna zmienna.

Skadnia heredoc
Oprcz skadni z apostrofami i cudzysowami PHP udostpnia rwnie dodatkow metod definiowania wartoci cigw jest to tak zwana skadnia heredoc. Skadnia ta
okazuje si szczeglnie przydatna w sytuacji, gdy trzeba zdefiniowa obszerne fragmenty
tekstu zawierajce w sobie wartoci zmiennych, poniewa programista nie musi w jej przypadku poprzedza apostrofw ani cudzysoww znakiem ukonika. Skadnia ta przydaje
si przede wszystkim do tworzenia stron zawierajcych formularze HTML.
W skadni heredoc operatorem jest <<<. Zaraz po nim powinna nastpi etykieta (bez
cudzysoww ani apostrofw) wskazujca rozpoczcie cigu zoonego z wielu wierszy.
PHP bdzie docza do cigu kolejne wiersze a do czasu, gdy w nowym wierszu napotka t sam etykiet. Opcjonalnie etykieta zamykajca moe posiada na kocu znak
rednika.

Rozdzia 8. Cigi

183

Spjrzmy na poniszy przykad:


$my_string_var = <<<EOT
Wszystko, co znajduje si w tym mao przydatnym
fragmencie tekstu, zostanie doczone
do zmiennej majcej posta cigu znakw,
tworzonego znak po znaku, wiersz po wierszu, a
do osignicia wiersza ostatniego, czyli wanie tego.
EOT;

Zwr uwag, e zamykajca etykieta EOT nie moe by w jakikolwiek sposb wcita,
poniewa zostanie wwczas potraktowana jak jeszcze jeden fragment, ktry powinien zosta doczony do cigu. Etykieta nie musi mie postaci EOT moe to by dowolna nazwa zgodna z reguami nazewnictwa zmiennych w PHP.
Doczanie zmiennych realizowane jest w sposb identyczny, jak w cigach otoczonych
cudzysowami. Zalet skadni heredoc jest natomiast fakt, e znaki apostrofw i cudzysoww mog by doczane bez poprzedzania ich znakiem ukonika i bez koniecznoci
wczeniejszego zakaczania cigu. Spjrzmy na kolejny przykad:
echo <<<ENDOFFORM
<FORM METHOD=POST ACTION="{$_ENV['PHP_SELF']}">
<INPUT TYPE=TEXT NAME=FIRSTNAME VALUE=$firstname>
<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=SUBMIT>
</FORM>
ENDOFFORM

Powyszy kod w bardzo prosty sposb zwrci do przegldarki kod definiujcy najprostszy formularz.

Funkcje operujce na cigach


PHP zawiera wiele funkcji dziaajcych na cigach. Jeeli zamierzasz napisa wasn
funkcj, ktra analizuje cig znak po znaku, aby stworzy nowy cig, pomyl, ktre
z tych zada bd czsto wykonywane. Jeeli takie wystpi, prawdopodobnie istnieje
wbudowana funkcja realizujca t czynno.
W tej czci przedstawimy podstawowe funkcje sprawdzajce, porwnujce, modyfikujce i drukujce cigi. Jeeli chcesz naprawd dobrze pozna operacje na cigach wykonywane w PHP, powiniene przyswoi sobie co najmniej treci przedstawione w tym punkcie. Funkcje wyrae regularnych oraz bardziej skomplikowane funkcje obsugi cigw
zostan opisane w rozdziale 22.
Dla programistw C: powinnicie zna wiele funkcji operujcych na cigach. Naley
jedynie zapamita, e PHP zajmuje si przydziaem pamici. Funkcje zwracajce cigi
rezerwuj pami na wynikowy cig i nie ma potrzeby wczeniej rezerwowa pamici.

184

Cz I Podstawy PHP

Sprawdzanie cigw
Jakie pytania mona zada na temat cigu? Na pocztek sprawdmy przy uyciu funkcji
strlen(), ile znakw zawiera.
$ciag = "Ten cig zawiera 26 znakw";
print("To ma". strlen($ciag)."znakw");

Uruchomienie tego kodu daje nastpujcy wynik:


To ma 26 znakw

Odczytanie dugoci cigu jest uyteczne w sytuacjach, gdy chcemy za pomoc ptli
dosta si do wszystkich znakw cigu. Bezuytecznym, ale pouczajcym przykadem
moe by (uywamy cigu z poprzedniego przykadu):
for ($index=0; $index <strlen ($ciag); $index++)
print("$ciag[$index]");

W przegldarce pojawi si cig taki sam, jak na pocztku:


Ten cig zawiera 26 znakw

Szukanie znakw i podcigw


Nastpn kategori pyta na temat cigw moe by pytanie o ich zawarto. Funkcja
strpos() szuka pozycji okrelonego znaku w cigu, o ile w nim wystpuje.
$twister = "Krl Karol kupi krlowej Karolinie";
print("'k' wystpuje na pozycji ". strpos($twister, 'k'). "<BR>");
print("'q' wystpuje na pozycji". strpos($twister, 'q'). "<BR>");

Wykonanie tego przykadu daje w efekcie:


'k' wystpuje na pozycji 11
'q' wystpuje na pozycji

Pozycja litery 'q' pozostaa niewypeniona, poniewa funkcja strpos() zwraca FALSE
w przypadku nieznalezienia znaku, a FALSE zostao skonwertowane do pustego cigu.
Naley zwrci uwag, e funkcja strpos() odrnia due i mae litery.
Funkcja strpos() jest jednym z przykadw, kiedy brak cisego okrelenia typw moe
stanowi problem. Jeeli nie zostanie odnaleziona warto, funkcja zwraca warto
FALSE. Jeeli odnaleziony zostanie pierwszy znak cigu, funkcja zwrci zero (poniewa
indeksowanie rozpoczyna si od zera). Jeeli uyjemy tych wartoci w wyraeniu
logicznym, obie zostan zinterpretowane jako FALSE. Jedynym sposobem rozrnienia
tych wartoci jest uycie operatora sprawdzajcego identyczno obiektw (===,
wprowadzony w PHP4), ktry jest prawdziwy, jeeli jego argumenty s identyczne i maj
te same typy. Moesz go bezpiecznie uy do porwnania 0 z FALSE. Jeeli uywasz PHP3,
musisz sprawdzi typ zwracanej wartoci, uywajc funkcji np. is_ integer().

Za pomoc funkcji strpos() mona rwnie szuka cigw, nie tylko pojedynczych znakw. W tym celu wystarczy jedynie przekaza do niej cig wieloznakowy. Moesz take poda dodatkowy parametr numeryczny okrelajcy pozycj, od ktrej funkcja ma
rozpocz szukanie.

Rozdzia 8. Cigi

185

Czy cigi s niezmienne?


W niektrych jzykach programowania (np. C) normalne jest manipulowanie cigami przez ich bezporedni modyfikacj, na przykad zapisywanie nowych znakw w rodku cigu. Inne jzyki (np.
Java) trzymaj programistw z daleka od takich operacji, tworzc klas reprezentujc cigi, ktre
s niezmienne. Mona utworzy nowy cig tylko poprzez stworzenie zmodyfikowanej kopii cigu. Po
jego utworzeniu nie mona bezporednio zmienia jego znakw.
W PHP cigi mog by zmieniane, ale w powszechnej praktyce jest traktowanie cigw, jak gdyby
byy niezmienne.
Mona zmienia cig, traktujc go jako tablic znakw i przypisywa bezporednio do tej tablicy:
$ciag = "abcdefg";
$ciag[5] = "X";
print ($ciag . "<BR>");

Daje to nastpujcy wynik:


abcdeXg

Taka operacja jest jednak nieudokumentowana i nie wystpuje nigdzie w podrczniku, chocia analogiczne odczytywanie znakw jest zamieszczone (i uaktualnione o mechanizm nawiasw klamrowych). Prawie wszystkie funkcje PHP operujce na cigach zwracaj zmienion kopi cigu, a nie
przeprowadzaj zmian na oryginale. Projektanci PHP preferuj ten styl programowania. Radzimy nie
modyfikowa bezporednio cigw, chyba e dziki temu oszczdza si pami.

Moliwe jest te szukanie wstecz przy uyciu funkcji strrpos() (dodatkowe r pochodzi
od sowa reverse, czyli w ty). Funkcja ta pobiera cig do szukania oraz pojedynczy
znak, ktrego szukamy, i zwraca ostatni pozycj, na ktrej w pierwszym argumencie
wystpuje argument drugi. W przeciwiestwie do strpos(), nie mona poda podcigu do
odszukania. Jeeli uyjemy tej funkcji w naszym przykadowym zdaniu, odszukamy inne wystpienie litery k.:
$twister = "Krl Karol kupi krlowej Karolinie";
print("'k' wystpuje na pozycji ". strrpos($twister, 'k'). "<BR>");

W tym przypadku odnajdziemy pierwsze k w sowie krlowej:


'k' wystpuje na pozycji 17

Porwnywanie i przeszukiwanie
Czsto trzeba sprawdza, czy dwa cigi s identyczne. Szczeglnie czsto w programach
pracujcych na danych wprowadzonych przez uytkownika.
Cigi s takie same dla operatora '==', jeeli zawieraj dokadnie tak sam sekwencj
znakw. Operator ten nie wykonuje adnych dokadniejszych porwna (np. sprawdzenia
obszarw pamici), zwraca natomiast baczn uwag na wielko liter.

Najprostsz metod porwnania cigw jest zastosowanie operatora rwnoci (==), ktry
porwnuje zarwno liczby, jak i cigi.

186

Cz I Podstawy PHP

Porwnanie cigw za pomoc operatora '==' (a take < i >) jest prawidowe tylko
w przypadku, gdy oba argumenty s takimi samymi cigami i nie wykonano adnej
konwersji typw (wicej na ten temat w rozdziale 5.). Jedynie uywajc funkcji strcmp()
(opisanej poniej), otrzymujemy zawsze prawidowe wyniki.

Podstawow funkcj do porwnywania cigw jest strcmp(). Posiada dwa cigi jako
argumenty, porwnuje je znak po znaku a do znalezienia rnicy. Funkcja zwraca warto ujemn, jeeli pierwszy cig jest mniejszy od drugiego, warto dodatni, gdy drugi
cig jest mniejszy, oraz 0, jeeli cigi s identyczne.
Funkcja strcasecmp() dziaa w taki sam sposb, z t rnic, e nie bierze pod uwag
wielkoci liter podczas porwnywania cigw. Wywoanie funkcji: strcasecmp("hej!",
"HEJ!") powinno zwrci 0.

Przeszukiwanie
Funkcje porwnujce cigi sprawdzaj, czy cigi s identyczne. Aby sprawdzi, czy jeden
cig zawiera si w drugim, uywamy funkcji strpos() (opiszemy j pniej) lub strstr()
(ewentualnie jednej z jej odmian).
Funkcja strstr() oczekuje w pierwszym parametrze cigu do przeszukania, a w drugim
cigu do odszukania. Jeeli operacja si powiedzie, funkcja zwrci fragment przeszukiwanego cigu rozpoczynajcy si od pierwszego miejsca wystpienia poszukiwanego
fragmentu. Jeeli nic nie zostanie odnalezione, zwracana jest warto FALSE. W poniszym przykadzie zamiecilimy jedno udane i jedno nieudane wywoanie funkcji.
$ciag_do_przeszukania = "pierwszaoladrugaola";
$ciag_do_odszukania = "ola";
print("Wynik szukania cigu $ciag_do_odszukania: " .
strstr($ciag_do_przeszukania, $ciag_do_odszukania) . "<br>");
$ciag_do_odszukania = "ula";
print("Wynik szukania cigu $ciag_do_odszukania: " .
strstr($ciag_do_przeszukania, $ciag_do_odszukania));

Wykonanie tego fragmentu da nastpujcy wynik:


Wynik szukania cigu ola: oladrugaola
Wynik szukania cigu ula:

Puste miejsce za dwukropkiem w drugim wierszu wyniku jest wynikiem prby wydrukowania wartoci FALSE, ktra zostaa skonwertowana na pusty cig. Funkcja strstr()
posiada alternatywn nazw strchr(). Mona uywa dowolnej z nazw tej funkcji, wynik
dziaania bdzie identyczny. Podobnie jak strcmp(), strstr() posiada odmian, ktra
przy szukaniu cigw identycznie traktuje mae i wielkie litery stristr(). Funkcja ta
dziaa identycznie jak strstr(), nie rozrnia jednak wielkoci liter. Dotychczas opisane
funkcje operujce na cigach zebralimy w tabeli 8.1.

Rozdzia 8. Cigi

187

Tabela 8.1. Funkcje porwnujce, przeszukujce i badajce cigi


Funkcja

Opis

strlen()

Zwraca dugo cigu podanego jako argument wywoania i zwraca j w postaci liczby
cakowitej.

strpos()

Posiada dwa argumenty: cig do przeszukania i cig do znalezienia. Zwraca pozycj


(liczc od zera) pocztku pierwszego miejsca wystpienia cigu lub warto FALSE, jeeli
cig nie zosta odszukany. Mona poda trzeci argument okrelajcy pozycj, od ktrej
ma rozpocz szukanie.

strrpos()

Jak strpos(), ale przeszukuje cig od tyu. Poszukiwany cig moe skada si tylko
z jednej litery. Nie ma opcjonalnych argumentw.

strcmp()

Spodziewa si dwch cigw jako argumentw. Zwraca 0, jeeli cigi te s identyczne.


Jeeli funkcja znajdzie rnic, zwraca warto ujemn, jeeli kod ASCII pierwszego
rnicego si znaku jest mniejszy w pierwszym cigu, lub warto dodatni, jeeli
mniejszy kod ASCII znajduje si w drugim cigu.

strcasecmp()

Dziaa tak jak strcmp(), traktujc identycznie mae i wielkie litery.

strstr()

Przeszukuje pierwszy cig, szukajc w nim drugiego. Zwraca fragment pierwszego


cigu rozpoczynajcy si od poszukiwanego fragmentu. Jeeli nie ma drugiego cigu
w pierwszym, zwraca FALSE.

strchr()

Dziaa tak samo jak strstr().

stristr()

Dziaa tak samo jak strstr(), nie rozrniajc wielkoci liter.

Wycinanie podcigu
Wiele z funkcji operujcych na cigach ma na celu wybranie okrelonego podcigu lub
modyfikacj go w cigu oryginalnym. Warto wiedzie, e wikszo funkcji modyfikujcych cig nie zmienia oryginalnego cigu, ale zwraca zmienion kopi, pozostawiajc
orygina nietknity.
Podstawow metod wycicia fragmentu cigu jest uycie funkcji substr(), ktra zwraca
cig bdcy okrelonym fragmentem cigu przekazanego jako argument. Oprcz cigu,
na ktrym operuje, funkcja wymaga podania liczby okrelajcej pocztek wycinanego
cigu. Trzeci argument jest opcjonalny i okrela dugo wynikowego podcigu. Jeeli nie
zostanie on podany, funkcja zwraca fragment od podanej pozycji (za pomoc drugiego
argumentu) do koca cigu. Naley pamita, e pierwszy znak cigu znajduje si na
pozycji 0.
Spjrzmy na nastpujcy przykad:
echo (substr("Wycinanie cigw w PHP jest proste", 23));

Zwrci on w wyniku jest proste; wyraenie:


echo (substr("Wycinanie cigw w PHP jest proste", 10, 6));

wypisze sowo cigw szecioznakowy cig rozpoczynajcy si od pozycji 10.

188

Cz I Podstawy PHP

Oba argumenty numeryczne, pozycja pocztkowa i dugo mog by ujemne, lecz w obydwu przypadkach znaczenie ujemnego argumentu jest inne. Jeeli pozycja pocztkowa
jest ujemna, oznacza to, e pocztek podcigu jest okrelany wzgldem koca cigu. Pozycja 1 oznacza pocztek cigu na ostatnim znaku, 2 na przedostatnim itd.
Mona oczekiwa, e podanie ujemnej dugoci zinterpretowane bdzie analogicznie do
pozycji pocztkowej i podcig bdzie wyznaczany, odliczajc wstecz od pocztkowego
znaku cigu. Nie jest to do koca prawdziwe. Znak okrelony przez indeks pocztkowy
bdzie pierwszym znakiem podcigu (a nie ostatnim), a jego dugo okrelona bdzie odliczeniem podanej liczby znakw od koca cigu.
Spjrz na kilka przykadw, w ktrych uyte zostay dodatnie i ujemne wartoci:
$alfabet = "abcdefghijklmnop";
print ("3: ". substr( $alfabet, 3). "<BR>");
print ("-3: ". substr( $alfabet, -3). "<BR>");
print ("3,5: ". substr( $alfabet, 3, 5). "<BR>");
print ("3,-5: ". substr( $alfabet, 3, -5). "<BR>");
print ("-3,-5: ". substr( $alfabet, -3, -5). "<BR>");
print ("-3, 5: ". substr( $alfabet, -3, 5). "<BR>");

W wyniku otrzymujemy:
3: defghijklmnop
-3: nop
3,5: defgh
3,-5: defghijk
-3,-5:
-3, 5: nop

W przykadzie z pozycj pocztkow 3 i dugoci 5 pozycja kocowa znajduje si


przed pozycj pocztkow, co jest sytuacj okrelan jako cig o ujemnej dugoci.
W podrczniku, dostpnym pod adresem http://www.php.net/manual, jest napisane,
e w takiej sytuacji funkcja substr() zwrci cig zawierajcy jeden znak znajdujcy
si na pozycji pocztkowej. Zamiast tego widzimy, e PHP5 zwraca pusty cig. Naley
szczeglnie zwrci uwag na takie sytuacje.

Zauwamy, e pomidzy funkcjami substr(), strstr() i strpos() wystpuje bliski zwizek. Funkcja substr() wycina podcig, bazujc na pozycji, strstr() wycina podcig na
podstawie zawartoci, a strpos() znajduje pooenie podcigu. Jeeli jestemy pewni, e
$ciag zawiera $podciag, wtedy wyraenie:
strstr($ciag, $podciag)

jest rwnowane wyraeniu:


substr($ciag, strpos($ciag, $podciag))

Funkcje porzdkujce
Mimo e funkcje chop(), ltrim() i trim() s zwykymi funkcjami wycinajcymi podcig, uywa si ich do porzdkowania cigw. Funkcje te wycinaj znaki odstpw z pocztku, koca lub pocztku i koca cigu. A oto przykad:

Rozdzia 8. Cigi

189

$oryginal = " To przechodzi ludzkie pojcie


";
$f_chop = chop($oryginal);
$f_ltrim = ltrim($oryginal);
$f_trim = trim($oryginal);
print("Cig oryginalny: '$oryginal'<BR>");
print("Dugo cigu: ". strlen($oryginal). "<BR>");
print("Po funkcji chop: '$f_chop' <BR>");
print("Dugo cigu: ". strlen($f_chop). "<BR>");
print("Po funkcji ltrim: '$f_ltrim' <BR>");
print("Dugo cigu: ". strlen($f_ltrim). "<BR>");
print("Po funkcji trim: '$f_trim' <BR>");
print("Dugo cigu: ". strlen($f_trim). "<BR>");

W przegldarce dostajemy:
Cig oryginalny: ' To przechodzi ludzkie pojcie '
Dugo cigu: 33
Po funkcji chop: ' To przechodzi ludzkie pojcie'
Dugo cigu: 30
Po funkcji ltrim: 'To przechodzi ludzkie pojcie '
Dugo cigu: 32
Po funkcji trim: 'To przechodzi ludzkie pojcie'
Dugo cigu: 29

Cig oryginalny ma trzy spacje na kocu (usuwane przez chop() i trim()) oraz jedn na
pocztku (usuwana przez ltrim() i trim()). Dokadniej opiszemy zawarto okna przegldarki po wykonaniu tego fragmentu. Powtarzajce si odstpy zostay przez przegldark poczone w jeden. Jeeli jednak zajrzysz do rda strony, to na kocu cigu nadal
znajduj si trzy odstpy.
Oprcz spacji funkcje te usuwaj znaki zapisane jako sekwencje sterujce \n, \r, \t oraz \0
(znaki koca wiersza, tabulatory oraz znak koca cigu uywany w programach napisanych w C).
Gdyby nazewnictwo funkcji byo spjne, funkcja chop() powinna nazywa si rtrim().
Mimo e nazwa funkcji chop() (ang. rba) sugeruje destrukcyjne dziaanie, nie wpywa
ona na cig przekazany jako argument. Po wykonaniu funkcji cig nie zmienia si.

Zastpowanie cigw
Funkcje operujce na cigach, ktre omwilimy do tej pory, zwracay fragment cigu
przekazanego jako argument, zamiast tworzy cakowicie nowy cig. Teraz zajmiemy si
funkcjami str_replace() i substr_replace().
Funkcja str_replace() pozwala zamieni wszystkie miejsca wystpienia podanego fragmentu cigu na inny. Funkcja oczekuje trzech argumentw: cigu do odszukania, cigu,
ktry zamieni szukany fragment, oraz cigu rdowego. Na przykad:
$pierwszy = "Birma jest nieco podobna do Rodezji.";
$drugi = str_replace("Rodezji", "Zimbabwe", $pierwszy);
$trzeci = str_replace("Birma", "Panama", $drugi);
print($trzeci);

190

Cz I Podstawy PHP

Wynikiem tych operacji jest zdanie:


Panama jest nieco podobna do Zimbabwe.

Zastpowane s wszystkie miejsca wystpienia podanego fragmentu. Jeeli do cigu PHP


uda si wtoczy ca encyklopedi, mona j bdzie zaktualizowa jednym wywoaniem.
Musisz zwrci uwag na sytuacj, gdy wystpienia poszukiwanego cigu zachodz na
siebie. Fragment programu:
$ciag = "ABA jest czci ABABA";
$wynik = str_replace("ABA", "DEF", $ciag);
print("Wynik zamiany to '$wynik'<BR>");

wywietli cig:
Wynik zamiany to 'DEF jest czci DEFBA'

Jest to chyba najrozsdniejsze dziaanie.


Funkcja str_replace() odszukuje fragmenty cigu do wymiany, porwnujc cig rdowy z fragmentem podanym jako parametr; funkcja substr_replace() zamienia fragment
cigu znajdujcy si na okrelonej pozycji. Mona j wywoa maksymalnie z czterema
argumentami: cigiem, na ktrym wykonuje si operacja, cigiem, ktry jest wstawiany,
pocztkow pozycj oraz parametrem opcjonalnym dugoci fragmentu do wymiany. Na przykad:
print(substr_replace("ABCDEFG", "-", 2, 3);

daje w wyniku:
AB-FG

Fragment CDE zosta zamieniony na pojedynczy znak minus. Moemy wic zastpowa
fragmenty cigu cigami o innej dugoci. Jeeli nie zostanie podana dugo fragmentu,
wymieniony zostanie fragment cigu od pozycji startowej do koca cigu.
Funkcja substr_replace() pozwala rwnie na uywanie ujemnych wartoci argumentw
numerycznych. S one traktowane identycznie jak ujemne wartoci argumentw w funkcji
substr(); opisalimy je w czci Wycinanie podcigu. Naley pamita, e funkcje
str_replace() i substr_replace() nie zmieniaj w aden sposb oryginalnych cigw.
Mamy rwnie kilka rzadziej uywanych funkcji, ktre tworz nowy cig na podstawie
podanego jako parametr. Funkcja strrev() zwraca cig podany jako argument, ale pisany
wspak. Funkcja str_repeat() tworzy cig zawierajcy cig rdowy powtrzony dan
liczb razy. Przykadowo:
print(str_repeat("witaj ", 3));

daje w wyniku:
witaj witaj witaj

Funkcje przeszukujce i zamieniajce cig zebrane zostay w tabeli 8.2.

Rozdzia 8. Cigi

191

Tabela 8.2. Funkcje przeszukujce i zamieniajce cig


Funkcja

Dziaanie

substr()

Zwraca fragment cigu opisany przez drugi argument okrelajcy pozycj pocztkow
i opcjonalny trzeci argument okrelajcy dugo. Fragment rozpoczyna si na pozycji
startowej i ma dugo podan w trzecim argumencie, a jeeli nie zosta podany trzeci
argument, obejmuje cig do koca.
Ujemna warto pozycji startowej oznacza, e jest okrelana od koca cigu, ujemny
parametr okrelajcy dugo powoduje, e koniec podcigu jest wyznaczany przez
podan liczb znakw od koca cigu.

chop() lub rtrim()

Zwraca cig podany jako argument bez kocowych znakw odstpu. Znakami odstpu
s znaki " ", \n, \r, \t i \0.

ltrim()

Zwraca cig podany jako argument bez pocztkowych znakw odstpu.

trim()

Zwraca cig podany jako argument bez pocztkowych i kocowych znakw odstpu.

str_replace()

Zamienia podany fragment cigu na inny. Funkcja ma trzy argumenty: cig do odszukania,
cig, na ktry jest on zamieniany, oraz cig bazowy. Zwraca kopi z zamienionymi
na drugi argument wszystkimi miejscami wystpienia pierwszego argumentu.

substr_replace()

Wstawia fragment podany jako argument na pozycj okrelon przez parametry


numeryczne. Funkcja posiada cztery argumenty: cig bazowy, fragment wstawiany,
pozycj pocztkow i liczb znakw do wymiany. Zwraca kopi cigu podanego
jako pierwszy argument, z cigiem do zamiany wstawionym na okrelonej pozycji.
Jeeli opuszczony zostanie czwarty argument, koniec cigu zostanie zamieniony
na fragment przekazany w argumencie. Ujemne wartoci parametrw traktowane
s identycznie jak w funkcji substr().

Funkcje zmiany wielkoci liter


Funkcje ponisze zmieniaj wielko liter z maych na due, i odwrotnie. Pierwsze dwie
operuj na caym cigu, kolejne tylko na pierwszych literach.

strtolower()
Funkcja strtolower() zwraca cig ze wszystkimi maymi literami. Nie ma znaczenia, czy
na pocztku cay cig by zapisany duymi literami, czy due i mae litery byy wymieszane.
<?php
$oryginalny = "On NIE wiE, e KRZYCZY";
$male = strtolower($oryginalny);
echo $male;
?>

Ten fragment programu zwrci cig: "on nie wie, e krzyczy".


Jeli ju wczeniej zmagae si z formularzem, ktry wymaga zaimplementowania
rozbudowanych mechanizmw weryfikacji poprawnoci danych, by moe zauwaye,
e funkcja strtolower() okazuje si niezwykle uyteczna dla osb trwajcych
w przekonaniu, i ich adresy pocztowe zawieraj wielkie litery. Rwnie uyteczne
s funkcje opisywane dalej w tym punkcie.

192

Cz I Podstawy PHP

strtoupper()
Funkcja strtoupper() zwraca cig z wszystkimi duymi literami. Nie ma znaczenia, czy
na pocztku cay cig by zapisany maymi literami, czy due i mae litery byy wymieszane.
<?php
$oryginalny = "napisz to wyranie";
echo("<B>".strtoupper($oryginalny)."</B>");
?>

ucfirst()
Funkcja ucfirst() zmienia pierwsz liter cigu na du.
<?php
$oryginalny = "przykadowe zdanie.";
echo(ucfirst($oryginalny));
?>

ucwords()
Funkcja ucwords() zamienia pierwsze litery wyrazw w cigu na due.
<?php
$oryginalny = "miasto nowy jork";
echo( ucwords($oryginalny));
?>

Zarwno ucwords(), jak i ucfirst() nie konwertuj liter na mae. Zmieniaj tylko
waciwe pocztkowe litery na due. Jeeli w rodku cigu wystpi due litery,
nie zostan zamienione.

Funkcje znakw sterujcych


Jedn z charakterystycznych cech PHP jest to, e potrafi si on komunikowa niemal ze
wszystkimi programami. PHP dziaa jako jzyk czcy strony WWW z bazami danych,
serwerami LDAP, poczeniami poprzez gniazda sieciowe czy protok HTTP. Zwykle
dialog taki jest realizowany dwuetapowo. Najpierw tworzony jest cig komunikatu (na
przykad zapytanie do bazy danych), nastpnie jest wysyany do programu, z ktrym realizowana jest komunikacja. Czsto program ten w specjalny sposb interpretuje niektre
znaki. Aby byy one potraktowane jako cz literau, a nie kod sterujcy, naley je specjalnie oznaczy.
Wielu uytkownikw uaktywnia opcj magic-quotes, dziki czemu znaki apostrofw i cudzysoww automatycznie poprzedzane s znakiem ukonika przed wstawieniem cigw
do bazy danych. Jeli rozwizanie takie okae si jednak niewygodne lub niepodane,
istniej te funkcje usuwajce i dodajce znaki \. Funkcja addslashes() oznacza apostrofy, cudzysowy, lewe ukoniki oraz znaki NULL za pomoc lewego ukonika. Zwykle jest
to konieczne przy wysyaniu znakw do bazy danych.

Rozdzia 8. Cigi

193

<?php
$escapedstring = addslashes("Po angielsku zdanie - 'I'm a dog.' znaczy 'Jestem psem.'");
$query = "INSERT INTO test (quote) values ('$escapedstring')";
$result = mysql_query($query) or die(mysql_error());
?>

Dziki temu serwer SQL nie potraktuje apostrofu przed "I" jak zakoczenia wyraenia.
Jeeli odczytujesz dane z bazy, musisz uy funkcji stripslashes(), aby usun znaki
sterujce.
<?php
$query = "SELECT quote FROM test WHERE ID = 1";
$result = mysql_query($query) or die (mysql_error());
$new_row = mysql_fetch_array($result);
$quote = stripslashes($new_row[0]);
echo $quote;
?>

Funkcja quotemeta() przetwarza wszystkie znaki specjalnego znaczenia w poleceniach


powoki Unix: '.', '\', '+', '*', '?', '[', '^', ']', '(', '$', ')'.
Na przykad:
$literal= 'Znaki ($, *) maj dla mnie szczeglne znaczenie \n<BR>';
$qm = quotemeta($literal);
echo $qm;

Wykonanie tego fragmentu da w wyniku:


Znaki \(\$, \*\) maj dla mnie szczeglne znaczenie \\n

Funkcje sterujce specyficzne dla HTML opisano w punkcie Zaawansowane funkcje


obsugi cigw w rozdziale 22.

Formatowanie danych
Podstawowymi konstrukcjami uywanymi do drukowania danych s print i echo, ktre
zostay opisane w rozdziale 5. Zwykle wartoci zmiennych s wypisywane poprzez wbudowywanie zmiennych w cigi otoczone cudzysowami (i s zamieniane na wartoci)
i przekazywanie takiego cigu do instrukcji echo lub print.
Jeeli potrzebujesz dokadniej sformatowanego tekstu, PHP udostpnia funkcje printf()
i sprintf(), ktre dziaaj analogiczne do funkcji o tych samych nazwach w C. Obie
funkcje maj takie same argumenty: specjalny cig formatujcy (opisany poniej), a nastpnie dowoln liczb argumentw, ktre zostan wklejone we waciwe miejsca cigu
formatujcego.
Jedyn rnic pomidzy printf() i sprintf() jest to, e printf() wysya wynik bezporednio na wyjcie, a sprintf() zwraca wynik jako cig.
Dla programistw C: funkcja sprintf() rni si od jej wersji z C jeszcze jednym
szczegem. W C naley utworzy cig wynikowy, PHP sam utworzy ten cig.

194

Cz I Podstawy PHP

Najbardziej skomplikowan czci tych funkcji jest cig formatujcy. Kady znak, jaki
umiecisz w tym cigu, pojawi si w cigu wynikowym, oprcz sekwencji znakw rozpoczynajcych si od %. Znak % oznacza pocztek specyfikacji konwersji, ktra wskazuje sposb wydruku argumentu odpowiadajcego tej specyfikacji.
Po znaku % mona umieci pi elementw okrelajcych sposb konwersji (niektre
opcjonalnie): wypenienie, wyrwnanie, minimalna szeroko, dokadno oraz typ.

Pojedynczy (opcjonalny) znak wypenienia moe by zerem lub spacj. Znak ten jest
uywany do wypeniania nieuywanego miejsca, ktre zarezerwowano, okrelajc
minimaln szeroko. Jeeli znak ten nie zostanie podany, wolne miejsce zostanie
wypenione spacjami.

Opcjonalny znak wyrwnania (-) wskazuje, czy wywietlana warto powinna


by wyrwnywana do strony prawej, czy do lewej. Jeeli zosta umieszczony,
warto jest wyrwnana do lewej strony; jeeli go nie ma, warto jest wyrwnana
do prawej strony.

Opcjonalna liczba okrelajca minimaln szeroko; warto zajmuje co najmniej


tyle miejsca. Jeeli bdzie potrzebne wicej miejsca do wydrukowania wartoci,
przekroczona zostanie szeroko pola.

Opcjonalne okrelenie szerokoci czci uamkowej. Skada si z kropki i liczby


okrelajcej dokadno drukowania liczb rzeczywistych (dla innych wartoci nie
ma znaczenia).

Pojedynczy znak okrelajcy sposb, w jaki ma by interpretowany typ zmiennej.


Znak f oznacza drukowanie liczby rzeczywistej, s oznacza drukowanie cigu, reszta
znakw (b, c, d, o, x, X) oznacza, e warto jest traktowana jak liczba cakowita
i drukowana w rnych formatach. Formaty te to: format binarny dla litery b, c
oznacza drukowanie znaku o odpowiednim kodzie ASCII, o oznacza liczb oktaln,
x to liczba heksagonalna (pisana maymi literami), a X to liczba heksagonalna pisana
duymi literami.

Przykadem moe by drukowanie tej samej liczby rzeczywistej na rne sposoby:


<pre>
<?php
$wartosc = 3.14159;
printf("%f, %10f, %-010f, %2.2f\n", $wartosc, $wartosc, $wartosc, $wartosc);
?>
</pre>

Wynik dziaania tego fragmentu:


3.141590,

3.141590, 3.141590000000000, 3.14

Konstrukcja <pre></pre> w HTML wskazuje przegldarce, aby nie formatowaa tak oznaczonego bloku (nie usuwaa wielokrotnych odstpw itp.).

Rozdzia 8. Cigi

195

Rozszerzony przykad: kalkulator do wicze


W niniejszym punkcie rozszerzymy przykadowy kalkulator do wicze utworzony w rozdziale 5., wykorzystujc szereg funkcji operujcych na cigach do przetwarzania cigw
wysyanych z formularza uytkownika. W poprzednim przykadzie udao nam si jedynie przekaza zmienn bdc cigiem znakw z formularza HTML do strony PHP
majcej za zadanie odebra i obsuy ten cig. W tym punkcie zaimplementujemy mechanizmy analizy otrzymanego cigu. (W kocowej czci niniejszego punktu dowiesz
si, dlaczego nasz przykad wymaga dalszego rozszerzania w nastpnych rozdziaach).
Listing 8.1 prezentuje kod formularza, w ktrym uytkownik ma wpisa wykonywane wiczenie. Jest on bardzo podobny do formularza zaprezentowanego w rozdziale 7. zmianie
ulega jedynie docelowa strona z kodem obsugujcym formularz.
Listing 8.1. Formularz pocztkowy
<HTML>
<HEAD>
<STYLE TYPE="text/css">
<!-BODY, P {color: black; font-family: verdana; font-size: 10 pt}
H1
{color: black; font-family: arial; font-size: 12 pt}
-->
</STYLE>
</HEAD>
<BODY>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=150>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
<H1>Kalkulator do wicze (przekazywanie cigu znakw)</H1>
<P>Wpisz rozdzaj wiczenia, a kalkulator powie ci, jak dugo powiniene je wykonywa,
<BR>by spali kilogram tuszczu.</P>
<FORM METHOD="post" ACTION="wc_handler_str.php">
<INPUT TYPE="text" SIZE=50 NAME="exercise">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Spalaj si!">
</FORM>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

Na listingu 8.2 przedstawiono zmienion stron obsugujc formularz, ktra wywietla


odpowiednie statystyki w zalenoci od wiczenia wpisanego przez uytkownika.
W poniszym kodzie celowo uylimy superglobalnej tablicy $_POST do odczytania wartoci
cigu znakw przekazanego z formularza. Oznacza to jednak, e kod z listingu 8.2
nie bdzie dziaa w PHP w wersji wczeniejszej ni 4.1. Aby przystosowa skrypt
do wczeniejszej wersji jzyka, naley zamiast $_POST uy $HTTP_POST_VARS, pamitajc
jednak, e obecnie dugie nazwy zmiennych s oficjalnie niewane i w ktrym momencie
przestan by w ogle obsugiwane.

196

Cz I Podstawy PHP

Listing 8.2. Skrypt obsugi formularza przy uyciu funkcji cigw


<?php
$excercise_str = $_POST['exercise'];
// Uwaga! Dziaa tylko w PHP 4.1+
// Upewniamy si, e uytkownik przestrzega regu
if (strlen($excercise_str) > 50) {
echo "Nie stosujesz si do regu. Wstyd si!";
exit;
}
// Prba przetworzenia cigu wejciowego
// ------------------------------------// Usunicie ewentualnych spacji na pocztku i na kocu cigu
$excercise_str = trim($excercise_str);
// Przeksztacenie wszystkich liter w mae, by uatwi porwnywanie cigw
$excercise_str = strtolower($excercise_str);
// Przypisanie liczby godzin, przez jak trzeba wykonywa dane wiczenie,
// by spali kilogram tuszczu
if ($excercise_str == 'jazda na rowerze' || $excercise_str == 'jazda na rowerze grskim') {
$hours = '5 godzin i 40 minut';
} elseif ($excercise_str == 'bieg' ||
$excercise_str == 'jogging') {
$hours = '4 godziny i 30 minut';
} elseif ($excercise_str == 'pika nona' ||
$excercise_str == 'futbol') {
$hours = '4 godziny i 30 minut';
} elseif ($exercise_str == 'aerobik') {
$hours = '7 godzin i 30 minut';
} else {
// Wyzerowanie wszystkich innych wicze
$excercise_str = '';
$hours = '';
}
// Utworzenie zdania
// ----------------if ($excercise_str != "" && $hours != "") {
$message = 'Jeden kilogram tuszczu mona spali, gdy ' . $excercise_str . ' jest
uprawiany(a) ' .
'przez ' . $hours . '.';
} elseif ($excercise_str == "" && $hours == "") {
// Jeeli wiczenia nie ma na naszej licie, wywietlany jest
// domylny komunikat.
$message = 'Brak danych dla podanego wiczenia.';
} else {
// Istniej jeszcze dwie moliwoci
// 1. Rozpoznajemy wiczenie, lecz nie mamy dla niego statystyki
// 2. Nie rozpoznajemy wiczenia, ale jakim cudem mamy dla niego statystyki
// adna z nich nie powinna si zdarzy, ale na wszelki wypadek...
$message = 'Co poszo bardzo le!';

}
// Utworzenie strony
// ----------------$page_str = <<< EOPAGE
<HTML>
<HEAD>
<STYLE TYPE="text/css">

Rozdzia 8. Cigi
<!-BODY, P
H1
-->
</STYLE>
</HEAD>

197

{color: black; font-family: verdana; font-size: 10 pt}


{color: black; font-family: arial; font-size: 12 pt}

<BODY>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=150>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
<H1>Obsuga kalkulatora do wicze - cz 2</H1>
<P>Kalkulator informuje: "$message"</P>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
EOPAGE;
echo $page_str;
?>

Kod z listingu 8.2 wykonuje nastpujce czynnoci:


1. Odczytuje cig znakw przekazany z formularza HTML.
2. Prbuje doprowadzi otrzymany cig znakw do standardowej postaci, usuwajc
znaki spacji z pocztku i koca, przeksztacajc wszystkie litery na mae i rozpoznajc
niektre synonimy.
3. Na podstawie oczyszczonego i odpowiednio przeksztaconego cigu znakw
wyszukuje statystyki dla podanego wiczenia.
4. Tworzy stron z odpowiedzi przy uyciu skadni heredoc.
Rysunki 8.1 i 8.2 przedstawiaj efekt dziaania kalkulatora, gdy uytkownik wpisze jazd na rowerze.
Nie znudzi Ci si jeszcze kalkulator do wicze? Gwny problem polega na tym, e
nasz skrypt najprawdopodobniej nie bdzie wiedzia, jak obsuy rne dyscypliny
sportu wpisywane przez uytkownikw w sposb inny, ni wywietlanie komunikatu domylnego. Ponadto jeli podniesiesz poziom raportowania bdw do E_ALL, wywietlane
bd ostrzeenia informujce o braku inicjacji zmiennych. Uytkownik nie otrzymuje
rwnie adnych wskazwek odnonie dyscyplin, jakie rozpoznaje kalkulator.
Podsumowujc, dopki nie utworzymy systemu (takiego jak wyszukiwarka), ktry bdzie
umia sobie radzi z dowolnymi tekstami, generowanie przez kod wynikw w zalenoci od wartoci wpisanych przez uytkownikw mija si w praktyce z celem. Jeli uytkownik ma dokonywa wyborw, naley zakres dostpnych wartoci odpowiednio ograniczy. Tekstu wpisywanego przez uytkownika mona uywa wwczas, gdy ma on by
przegldany przez innego uytkownika (np. zapisywany w tym celu do bazy danych lub
przesyany poczt elektroniczn).

198

Cz I Podstawy PHP

Rysunek 8.1.
Formularz
pocztkowy

Rysunek 8.2.
Odpowied

Aby elegancko obsugiwa wartoci, ktre moe wybiera uytkownik, powinno si


uywa innych elementw interfejsu HTML ni pola tekstowe np. pl wyboru, pl
opcji czy list rozwijanych. Z kolei aby mc korzysta z tych elementw interfejsu po stronie klienta, w wikszym stopniu trzeba zacz uywa tablic. W tym wanie kierunki pjdziemy w rozdziale 9.

Podsumowanie
Cigi s sekwencjami znakw. Jest to jeden z szeciu podstawowych typw danych w PHP.
W przeciwiestwie do niektrych innych jzykw, nie ma tu osobnego typu znakowego, pojedynczy znak zachowuje si jak cig o dugoci 1. Cigi w kodzie s otaczane
apostrofami (') lub cudzysowami ("). Cigi otoczone apostrofami s interpretowane prawie dosownie, a cigi otoczone cudzysowami interpretuj kilka sekwencji sterujcych
i automatycznie wstawiaj wartoci zmiennych.
Podstawowym operatorem cigw jest '.', ktry czy dwa cigi. Istnieje dodatkowo spora gama funkcji, ktre umoliwiaj sprawdzanie, porwnywanie, szukanie, wycinanie,
zamian zawartoci cigu. PHP udostpnia take wyraenia regularne, zgodne ze standardem POSIX i Perl (i opisane w rozdziale 22.), do zaawansowanych zastosowa.

You might also like