
Ta praktyczna książka, ukazująca przede wszystkim zastosowania komercyjne, zawiera liczne przykłady. Ilustrują one realizację następujących zadań: uwierzytelnianie użytkowników, konstruowanie koszyka na zakupy, dynamiczne generowanie dokumentów PDF i obrazków, wysyłanie i zarządzanie pocztą elektroniczną, ułatwianie dyskusji między użytkownikami oraz zarządzanie zawartością. Autorzy położyli istotny nacisk na kwestię bezpieczeństwa.Oprócz składni i biblioteki funkcji PHP, niniejsza książka opisuje również podstawowe pojęcia z dziedziny profesjonalnej inżynierii oprogramowania związanego z siecią WWW. Niektóre, takie jak utrzymywanie, współpraca i testowanie, są kwestiami istotnymi dla inżynierów oprogramowania pracujących we wszystkich domenach zastosowań. Inne pojęcia, takie jak uwierzytelnianie, szyfrowanie i kontrola sesji, mają szczególne znaczenie dla projektów programistycznych opartych na Internecie.
- Dynamiczne tworzenie kodu HTML, obrazków i dokumentów
- Tworzenie bezpiecznych usług za pomocą uwierzytelniania i SSL
- Tworzenie koszyka na zakupy dla witryn handlu elektronicznego
- Opis praktyk związanych z inżynierią oprogramowania dla większych projektów WWW
- Zastosowanie obiektowych technik programistycznych w Internecie
O Autorach (21)Wprowadzenie (23)
- Dlaczego warto przeczytać niniejszą książkę? (23)
- Korzyści wynikające z lektury tej książki (24)
- Czym jest PHP? (25)
- Nowości w PHP, wersja 4 (25)
- Czym jest MySQL? (26)
- Dlaczego warto wykorzystywać PHP i MySQL? (26)
- Niektóre zalety PHP (27)
- Wydajność (27)
- Integracja z bazami danych (27)
- Wbudowane biblioteki (27)
- Koszt (28)
- Nauka PHP (28)
- Przenośność (28)
- Kod źródłowy (28)
- Niektóre zalety MySQL (28)
- Wydajność (29)
- Niski koszt (29)
- Łatwość wykorzystania (29)
- Przenośność (29)
- Kod źródłowy (29)
- Układ treści książki (29)
- Kody źródłowe (30)
- Uwagi końcowe (30)
Rozdział 1. Podstawowy kurs PHP (33)
- Zastosowanie PHP (34)
- Przykładowa aplikacja: "Części samochodowe Janka" (34)
- Formularz zamówienia (35)
- Przetwarzanie formularza (36)
- Osadzanie PHP w HTML (36)
- Zastosowanie znaczników PHP (38)
- Style znaczników PHP (38)
- Instrukcje PHP (39)
- Odstępy (39)
- Komentarze (40)
- Dodawanie zawartości dynamicznej (41)
- Wywoływanie funkcji (41)
- Funkcja date() (42)
- Dostęp do zmiennych formularza (42)
- Zmienne formularza (42)
- Łączenie ciągów (44)
- Zmienne i ciągi znaków (44)
- Identyfikatory (45)
- Zmienne zadeklarowane przez użytkownika (45)
- Przypisywanie wartości zmiennym (45)
- Typy zmiennych (46)
- Typy danych w PHP (46)
- Siła typu (46)
- Rzutowanie typu (47)
- Zmienne zmiennych (47)
- Stałe (48)
- Zasięg zmiennych (48)
- Operatory (49)
- Operatory arytmetyczne (49)
- Operatory ciągów (50)
- Operatory przypisania (50)
- Operatory porównań (53)
- Operatory logiczne (54)
- Operatory bitowe (54)
- Pozostałe operatory (54)
- Stosowanie operatorów: obliczanie sum w formularzu (56)
- Pierwszeństwo i kolejność: wyznaczanie wartości wyrażeń (57)
- Zarządzanie zmiennymi (59)
- Sprawdzanie i ustawianie typów zmiennych (59)
- Sprawdzanie stanu zmiennej (60)
- Reinterpretacja zmiennych (61)
- Struktury kontrolujące (61)
- Podejmowanie decyzji za pomocą instrukcji warunkowych (61)
- Instrukcja if (61)
- Bloki kodu (62)
- Uwaga poboczna: wcinanie kodu (62)
- Instrukcja else (62)
- Instrukcja elseif (63)
- Instrukcja switch (64)
- Porównanie różnych instrukcji warunkowych (66)
- Iteracja: powtarzanie działań (66)
- Pętle while (67)
- Pętle for (68)
- Pętle do..while (69)
- Wyłamywanie się ze struktury skryptu (70)
- W następnym rozdziale: zapisywanie zamówienia klienta (70)
- Zapisywanie danych do późniejszego użycia (72)
- Przechowywanie i wyszukiwanie zamówień Janka (72)
- Podstawowe informacje na temat przetwarzania plików (73)
- Otwieranie pliku (74)
- Tryby otwarcia pliku (74)
- Stosowanie funkcji fopen() do otwarcia pliku (74)
- Otwieranie pliku przez protokół FTP lub HTTP (76)
- Problemy z otwieraniem plików (76)
- Zapisywanie danych w pliku (78)
- Parametry funkcji fwrite() (79)
- Formaty plików (79)
- Zamykanie pliku (80)
- Odczyt z pliku (80)
- Otwieranie pliku w celu odczytu - fopen() (81)
- Wiedzieć, kiedy przestać - feof() (81)
- Odczytywanie pliku linia po linii - fgets(), fgetss() i fgetcsv() (82)
- Odczyt całego pliku - readfile(), fpassthru(), file() (83)
- Odczyt pojedynczego znaku - fgetc() (84)
- Odczytywanie zadanej długości - fread() (84)
- Inne przydatne funkcje plikowe (84)
- Sprawdzanie istnienia pliku - file_exists() (85)
- Określanie wielkości pliku - filesize() (85)
- Kasowanie pliku - unlink() (85)
- Poruszanie się wewnątrz pliku - rewind(), fseek() i ftell() (85)
- Blokowanie pliku (86)
- Lepszy sposób obróbki danych - systemy zarządzania bazami danych (87)
- Problemy związane ze stosowaniem plików jednorodnych (88)
- Jak RDBMS rozwiązują powyższe problemy? (88)
- Propozycje dalszych lektur (89)
- W następnym rozdziale (89)
- Czym są tablice? (92)
- Tablice indeksowane numerycznie (92)
- Inicjowanie tablic indeksowanych numerycznie (92)
- Dostęp do zawartości tablicy (93)
- Dostęp do tablic przy zastosowaniu pętli (94)
- Tablice asocjacyjne (94)
- Inicjowanie tablicy asocjacyjnej (94)
- Dostęp do elementów tablicy (95)
- Stosowanie pętli z funkcjami each() i list() (95)
- Tablice wielowymiarowe (97)
- Sortowanie tablic (100)
- Stosowanie funkcji sort() (100)
- Stosowanie funkcji asort() i ksort() do porządkowania tablic asocjacyjnych (101)
- Sortowanie odwrotne (101)
- Sortowanie tablic wielowymiarowych (102)
- Typy sortowań definiowane przez użytkownika (102)
- Odwrotne sortowanie zdefiniowane przez użytkownika (104)
- Zmiany kolejności elementów w tablicach (104)
- Stosowanie funkcji shuffle() (104)
- Stosowanie funkcji array_reverse() (105)
- Ładowanie tablic z plików (106)
- Inne działania na tablicach (109)
- Poruszanie się wewnątrz tablicy - funkcje each(), current(), reset(), end(), next(), pos() i prev() (109)
- Dołączanie dowolnej funkcji do każdego elementu tablicy - funkcja array_walk() (110)
- Liczenie elementów tablicy: count(), sizeof() i array_count_values() (111)
- Konwersja tablic na zmienne skalarne - funkcja extract() (112)
- Propozycje dalszych lektur (113)
- W następnym rozdziale (113)
- Przykładowa aplikacja - Inteligentny Formularz Pocztowy (115)
- Formatowanie ciągów (117)
- Przycinanie ciągów - funkcje chop(), ltrim() i trim() (118)
- Formatowanie ciągów w celu ich prezentacji (118)
- Formatowanie ciągów do przechowania - funkcje AddSlashes() i StripSlashes() (121)
- Łączenie i rozdzielanie ciągów za pomocą funkcji ciągów (123)
- Stosowanie funkcji explode(), implode() i join() (123)
- Stosowanie funkcji strtok() (124)
- Stosowanie funkcji substr() (125)
- Porównywanie ciągów (125)
- Porządkowanie ciągów - funkcje strcmp(), strcasecmp() i strnatcmp() (126)
- Sprawdzanie długości ciągu za pomocą funkcji strlen() (126)
- Dopasowywanie i zamiana podciągów za pomocą funkcji ciągów (127)
- Znajdowanie ciągów w ciągach - funkcje strstr(), strchr(), strrchr() i stristr() (127)
- Odnajdywanie pozycji podciągu - funkcje strpos() i strrpos() (128)
- Zamiana podciągów - funkcje str_replace() i substr_replace() (129)
- Wprowadzenie do wyrażeń regularnych (130)
- Podstawy (130)
- Zbiory i klasy znaków (131)
- Powtarzalność (132)
- Podwyrażenia (132)
- Podwyrażenia policzalne (133)
- Kotwiczenie na początku lub na końcu ciągu (133)
- Rozgałęzianie (133)
- Dopasowywanie specjalnych znaków literowych (134)
- Podsumowanie znaków specjalnych (134)
- Umieszczanie wszystkiego razem (Inteligentny Formularz) (134)
- Odnajdywanie podciągów za pomocą wyrażeń regularnych (135)
- Zamiana podciągów za pomocą wyrażeń regularnych (136)
- Rozdzielanie ciągów przy pomocy wyrażeń regularnych (136)
- Porównanie funkcji ciągów i funkcji wyrażeń regularnych (137)
- Propozycje dalszych lektur (137)
- W następnym rozdziale (137)
- Dlaczego ponownie stosować kod? (140)
- Koszt (140)
- Niezawodność (140)
- Spójność (140)
- Stosowanie funkcji require() i include() (141)
- Stosowanie funkcji require() (141)
- Rozszerzenia plików i require() (142)
- Znaczniki PHP i require() (142)
- Stosowanie require() w szablonach stron WWW (143)
- Stosowanie opcji auto_prepend_file i auto_append_file (147)
- Stosowanie funkcji include() (148)
- Stosowanie funkcji w PHP (149)
- Wywoływanie funkcji (150)
- Wywołanie niezdefiniowanej funkcji (151)
- Wielkość liter a nazwy funkcji (152)
- Dlaczego powinno się definiować własne funkcje? (152)
- Podstawowa struktura funkcji (153)
- Nadawanie nazwy funkcji (154)
- Parametry (154)
- Zasięg (156)
- Przekazanie przez referencję czy przekazanie przez wartość (158)
- Powrót z funkcji (160)
- Zwracanie wartości przez funkcje (161)
- Bloki kodu (162)
- Rekurencja (163)
- Propozycje dalszych lektur (165)
- W następnym rozdziale (165)
- Koncepcje programowania obiektowego (167)
- Klasy i obiekty (167)
- Polimorfizm (169)
- Dziedziczenie (169)
- Tworzenie klas, atrybutów i operacji w PHP (170)
- Struktura klasy (170)
- Konstruktory (170)
- Tworzenie egzemplarzy (171)
- Stosowanie atrybutów klasy (172)
- Wywoływanie operacji klas (173)
- Implementacja dziedziczenia w PHP (174)
- Unieważnianie (175)
- Wielodziedziczenie (176)
- Tworzenie klas (177)
- Tworzenie kodu dla własnej klasy (178)
- W następnej części (186)
Rozdział 7. Projektowanie internetowej bazy danych (189)
- Koncepcje relacyjnych baz danych (190)
- Tabele (190)
- Kolumny (190)
- Wiersze (191)
- Wartości (191)
- Klucze (191)
- Schematy (192)
- Relacje (192)
- Jak zaprojektować internetową bazę danych (193)
- Określ obiekty świata realnego, których model chcesz wykonać (193)
- Unikaj przechowywania redundantnych danych (194)
- Zapisuj atomowe wartości kolumn (195)
- Dobierz właściwe klucze (196)
- Pomyśl o zapytaniach, które zadasz bazie (197)
- Unikaj tworzenia tabel z wieloma pustymi polami (197)
- Typy tabel - podsumowanie (197)
- Architektura internetowej bazy danych (198)
- Architektura (198)
- Propozycje dalszych lektur (199)
- W następnym rozdziale (199)
- Uwagi na temat użytkowania monitora MySQL (202)
- Jak zalogować się do serwera MySQL (203)
- Tworzenie baz i rejestrowanie użytkowników (205)
- Tworzenie bazy danych (205)
- Użytkownicy i przywileje (205)
- Wprowadzenie do systemu przywilejów MySQL (206)
- Zasada najmniejszego przywileju (206)
- Rejestrowanie użytkowników: polecenie GRANT (206)
- Typy i poziomy przywilejów (208)
- Polecenie REVOKE (210)
- Przykłady użycia poleceń GRANT i REVOKE (210)
- Rejestrowanie użytkownika łączącego się z Internetu (211)
- Wylogowanie się użytkownika root (212)
- Używanie odpowiedniej bazy danych (212)
- Tworzenie tabel bazy danych (212)
- Znaczenie dodatkowych atrybutów kolumn (214)
- Typy kolumn (215)
- Rzut oka na bazę danych - polecenia SHOW i DESCRIBE (217)
- Identyfikatory MySQL (218)
- Typy danych w kolumnach (219)
- Typy liczbowe (219)
- Propozycje dalszych lektur (223)
- W następnym rozdziale (223)
- Czym jest SQL? (225)
- Zapisywanie danych do bazy (226)
- Wyszukiwanie danych w bazie (228)
- Wyszukiwanie danych spełniających określone kryteria (229)
- Wyszukiwanie danych w wielu tabelach (230)
- Szeregowanie danych w określonym porządku (236)
- Grupowanie i agregowanie danych (237)
- Wskazanie wierszy, które mają być wyświetlone (239)
- Dokonywanie zmian rekordów w bazie danych (240)
- Zmiana struktury istniejących tabel (241)
- Usuwanie rekordów z bazy danych (242)
- Usuwanie tabel (242)
- Usuwanie całych baz danych (243)
- Propozycje dalszych lektur (243)
- W następnym rozdziale (243)
- Jak działa internetowa baza danych (246)
- Etapy wysyłania zapytań do bazy danych z poziomu strony WWW (248)
- Sprawdzenie poprawności wpisanych danych (249)
- Ustanawianie połączenia z bazą danych (250)
- Wybór właściwej bazy danych (252)
- Wysyłanie zapytań do bazy danych (252)
- Odczytywanie rezultatów zapytań (253)
- Zamykanie połączenia z bazą danych (255)
- Wstawianie nowych danych do bazy (255)
- Inne użyteczne funkcje PHP i MySQL (258)
- Zwalnianie zasobów (258)
- Tworzenie i usuwanie baz danych (259)
- Inne interfejsy bazodanowe PHP (259)
- Propozycje dalszych lektur (259)
- W następnym rozdziale (260)
- Szczegóły systemu przywilejów (261)
- Tabela user (262)
- Tabele db i host (263)
- Tabele tables_priv i columns_priv (264)
- Kontrola dostępu: w jaki sposób MySQL używa tabel przywilejów (265)
- Zmiana przywilejów: kiedy zmiany zostaną uwzględnione? (266)
- Ochrona bazy danych (266)
- MySQL z perspektywy systemu operacyjnego (267)
- Hasła (267)
- Przywileje użytkowników (268)
- MySQL i Internet (269)
- Uzyskiwanie szczegółowych informacji o bazie danych (269)
- Uzyskiwanie informacji poleceniem SHOW (270)
- Uzyskiwanie informacji o kolumnach za pomocą polecenia DESCRIBE (271)
- Jak wykonywane są zapytania: polecenie EXPLAIN (272)
- Przyspieszanie wykonania zapytań za pomocą indeksów (275)
- Wskazówki dotyczące optymalizacji (276)
- Optymalizacja projektu bazy danych (276)
- Przywileje (276)
- Optymalizacja tabel (276)
- Stosowanie indeksów (277)
- Używanie wartości domyślnych (277)
- Używanie stałych połączeń z bazą (277)
- Więcej wskazówek (277)
- Różne typy tabel (277)
- Ładowanie danych z pliku (278)
- Propozycje dalszych lektur (278)
- W następnej części (279)
Rozdział 12. Komercyjne witryny internetowe (283)
- Co chcemy osiągnąć? (283)
- Rodzaje komercyjnych stron WWW (284)
- Broszury internetowe (284)
- Przyjmowanie zamówień na produkty i usługi (287)
- Dostarczanie usług lub wyrobów mających postać cyfrową (291)
- Zwiększanie wartości produktów i usług (292)
- Ograniczanie kosztów (293)
- Ryzyko i zagrożenia (293)
- Crackerzy (294)
- Przyciągnięcie niewystarczającej liczby klientów (294)
- Awarie sprzętu komputerowego (295)
- Awarie sieci elektrycznych, komunikacyjnych i komputerowych oraz systemu wysyłkowego (295)
- Silna konkurencja (295)
- Błędy w oprogramowaniu (296)
- Zmiany polityki rządowej (296)
- Ograniczenie pojemności systemów (296)
- Wybór strategii (297)
- W następnym rozdziale (297)
- Jaką wagę mają posiadane przez nas informacje? (300)
- Zagrożenia bezpieczeństwa (300)
- Ujawnienie informacji poufnych (301)
- Utrata lub zniszczenie danych (303)
- Modyfikacje danych (304)
- Blokada usługi (305)
- Błędy w oprogramowaniu (306)
- Zaprzeczenie korzystania z usługi (307)
- Równoważenie użyteczności, wydajności, kosztów i bezpieczeństwa (308)
- Opracowanie polityki bezpieczeństwa (309)
- Zasady uwierzytelniania (309)
- Wykorzystanie mechanizmu uwierzytelniania (311)
- Podstawy szyfrowania (311)
- Szyfrowanie z kluczem prywatnym (313)
- Szyfrowanie z kluczem publicznym (313)
- Podpis cyfrowy (314)
- Certyfikaty cyfrowe (315)
- Bezpieczne serwery WWW (317)
- Monitorowanie i zapisywanie zdarzeń (318)
- Zapory sieciowe (319)
- Tworzenie kopii zapasowych (319)
- Tworzenie kopii zapasowych zwykłych plików (320)
- Tworzenie kopii zapasowych i odzyskiwanie baz danych MySQL (320)
- Bezpieczeństwo fizyczne (321)
- W następnym rozdziale (322)
- Identyfikacja użytkowników (323)
- Implementacja kontroli dostępu (324)
- Przechowywanie haseł dostępu (327)
- Szyfrowanie haseł (329)
- Zastrzeganie więcej niż jednej strony (331)
- Podstawowa metoda uwierzytelniania (332)
- Wykorzystanie podstawowej metody uwierzytelniania w PHP (333)
- Wykorzystanie podstawowej metody uwierzytelniania na serwerze Apache
przy użyciu plików .htaccess (335)
- Wykorzystanie podstawowej metody uwierzytelniania na serwerze IIS (339)
- Wykorzystanie modułu mod_auth_mysql do celów uwierzytelniania (341)
- Instalacja modułu mod_auth_mysql (342)
- Zadziałało? (342)
- Praca z mod_auth_mysql (343)
- Implementacja własnej metody uwierzytelniania (344)
- Propozycje dalszych lektur (344)
- W następnym rozdziale (344)
- Zapewnienie bezpieczeństwa transakcji (345)
- Komputer użytkownika (346)
- Internet (348)
- System docelowy (349)
- Wykorzystanie protokołu Secure Sockets Layer (SSL) (350)
- Kontrola danych pochodzących od użytkownika (353)
- Bezpieczne przechowywanie danych (354)
- Cel przechowywania numerów kart kredytowych (356)
- Szyfrowanie danych w PHP (356)
- Propozycje dalszych lektur (365)
- W następnej części (365)
Rozdział 16. Interakcja z systemem plików i serwerem (369)
- Wprowadzenie do wysyłania plików (369)
- Kod HTML służący do wysyłania plików (370)
- Tworzenie obsługującego plik PHP (371)
- Popularne problemy (374)
- Stosowanie funkcji katalogowych (375)
- Odczyt z katalogów (375)
- Otrzymywanie informacji na temat aktualnego katalogu (377)
- Tworzenie i usuwanie katalogów (377)
- Interakcja z systemem plików (378)
- Otrzymywanie informacji o pliku (378)
- Zmiana właściwości pliku (380)
- Tworzenie, usuwanie i przenoszenie plików (381)
- Stosowanie funkcji uruchamiających programy (382)
- Interakcja ze środowiskiem: funkcje getenv() i putenv() (384)
- Propozycje dalszych lektur (384)
- W następnym rozdziale (384)
- Przegląd protokołów (385)
- Wysyłanie i odczytywanie poczty elektronicznej (386)
- Korzystanie z innych usług WWW (387)
- Stosowanie funkcji połączeń sieciowych (389)
- Korzystanie z FTP (393)
- Stosowanie FTP w celu utworzenia kopii bezpieczeństwa lub kopii lustrzanej pliku (393)
- Wysyłanie plików (399)
- Unikanie przekroczenia dopuszczalnego czasu (400)
- Stosowanie innych funkcji FTP (400)
- Stosowanie ogólnej komunikacji sieciowej za pomocą cURL (401)
- Propozycje dalszych lektur (403)
- W następnym rozdziale (404)
- Uzyskiwanie informacji o dacie i czasie w PHP (405)
- Stosowanie funkcji date() (405)
- Obsługa znaczników czasu Uniksa (407)
- Stosowanie funkcji getdate() (408)
- Sprawdzanie poprawności dat (408)
- Konwersja pomiędzy formatami daty PHP i MySQL (409)
- Obliczanie dat (410)
- Stosowanie funkcji kalendarzowych (411)
- Propozycje dalszych lektur (412)
- W następnym rozdziale (412)
- Konfigurowanie obsługi obrazków w PHP (413)
- Formaty obrazków (414)
- JPEG (414)
- PNG (414)
- WBMP (415)
- GIF (415)
- Tworzenie obrazków (416)
- Tworzenie kadru obrazka (417)
- Rysowanie lub umieszczanie tekstu w obrazku (417)
- Wyświetlanie ostatecznej grafiki (419)
- Końcowe czynności porządkujące (420)
- Stosowanie automatycznie generowanych obrazków na innych stronach (421)
- Stosowanie tekstu i czcionek do tworzenia obrazków (422)
- Konfiguracja podstawowego kadru (425)
- Dopasowanie tekstu do przycisku (425)
- Nadawanie tekstowi odpowiedniej pozycji (428)
- Wpisywanie tekstu do przycisku (428)
- Etap końcowy (429)
- Rysowanie figur i wykresów danych (429)
- Inne funkcje obrazków (436)
- Propozycje dalszych lektur (437)
- W następnym rozdziale (437)
- Czym jest kontrola sesji? (439)
- Podstawowa zasada działania sesji (440)
- Czym jest cookie? (440)
- Konfiguracja cookies w PHP (441)
- Stosowanie cookies w sesji (441)
- Przechowywanie identyfikatora sesji (442)
- Implementacja prostych sesji (442)
- Rozpoczynanie sesji (442)
- Zgłaszanie zmiennych sesji (443)
- Stosowanie zmiennych sesji (443)
- Usuwanie zmiennych i niszczenie sesji (444)
- Przykład prostej sesji (444)
- Konfiguracja kontroli sesji (446)
- Implementacja uwierzytelniania w kontroli sesji (447)
- Propozycje dalszych lektur (453)
- W następnym rozdziale (453)
- Stosowanie magicznych cudzysłowów (455)
- Wykonywanie ciągów - funkcja eval() (456)
- Zakończenie wykonania - die i exit (457)
- Serializacja (458)
- Pobieranie informacji na temat środowiska PHP (459)
- Uzyskiwanie informacji na temat załadowanych rozszerzeń (459)
- Identyfikacja właściciela skryptu (460)
- Uzyskiwanie informacji na temat daty modyfikacji skryptu (460)
- Dynamiczne dodawanie rozszerzeń (460)
- Czasowa zmiana środowiska wykonawczego (461)
- Podświetlanie źródeł (461)
- W następnej części (462)
Rozdział 22. Stosowanie PHP i MySQL w dużych projektach (465)
- Zastosowanie inżynierii oprogramowania w tworzeniu aplikacji WWW (466)
- Planowanie i prowadzenie projektu aplikacji WWW (466)
- Ponowne stosowanie kodu (467)
- Tworzenie kodu łatwego w utrzymaniu (468)
- Standardy kodowania (468)
- Dzielenie kodu (471)
- Stosowanie standardowej struktury katalogów (472)
- Dokumentacja i dzielenie wewnętrznych funkcji (472)
- Implementacja kontroli wersji (473)
- Wybór środowiska programistycznego (474)
- Dokumentacja projektów (475)
- Prototypowanie (476)
- Oddzielanie logiki i zawartości (477)
- Optymalizacja kodu (478)
- Stosowanie prostych optymalizacji (478)
- Stosowanie produktów firmy Zend (479)
- Testowanie (480)
- Propozycje dalszych lektur (481)
- W następnym rozdziale (481)
- Błędy programistyczne (483)
- Błędy składni (484)
- Błędy wykonania (485)
- Błędy logiczne (491)
- Pomoc w usuwaniu błędów w zmiennych (492)
- Poziomy zgłaszania błędów (494)
- Zmiana ustawień zgłaszania błędów (495)
- Wyzwalanie własnych błędów (497)
- Elegancka obsługa błędów (497)
- Zdalne usuwanie błędów (499)
- W następnym rozdziale (500)
- Problem (502)
- Składniki rozwiązania (502)
- Identyfikacja użytkownika i personalizacja (502)
- Przechowywanie zakładek (503)
- Rekomendowanie zakładek (503)
- Przegląd rozwiązania (504)
- Implementacja bazy danych (505)
- Implementacja podstawowej witryny (507)
- Implementacja uwierzytelniania użytkowników (509)
- Rejestracja (509)
- Logowanie (515)
- Wylogowanie (519)
- Zmiana hasła (519)
- Ustawianie zapomnianych haseł (522)
- Implementacja przechowywania i odczytywania zakładek (525)
- Dodawanie zakładek (526)
- Wyświetlanie zakładek (528)
- Usuwanie zakładek (529)
- Implementacja rekomendacji (531)
- Rozwijanie projektu i możliwe rozszerzenia (535)
- W następnym rozdziale (535)
- Problem (537)
- Składniki rozwiązania (538)
- Tworzenie katalogu online (538)
- Śledzenie zakupów użytkownika podczas przeglądania (538)
- Płatność (539)
- Interfejs administratora (539)
- Przegląd rozwiązania (539)
- Implementacja bazy danych (543)
- Implementacja katalogu online (545)
- Przedstawianie kategorii (547)
- Wyświetlanie książek danej kategorii (549)
- Przedstawianie szczegółowych danych książki (551)
- Implementacja koszyka na zakupy (552)
- Stosowanie skryptu pokaz_kosz.php (552)
- Podgląd koszyka (555)
- Dodawanie produktów do koszyka (557)
- Zapisywanie uaktualnionego koszyka (559)
- Wyświetlanie podsumowania w pasku nagłówka (560)
- Pobyt w kasie (560)
- Implementacja płatności (565)
- Implementacja interfejsu administratora (568)
- Rozwijanie projektu (575)
- Zastosowanie istniejącego systemu (575)
- W następnym rozdziale (576)
- Problem (577)
- Wymagania systemu (578)
- Edycja zawartości (578)
- Umieszczanie zawartości w systemie (578)
- Bazy danych czy pliki? (579)
- Struktura dokumentu (580)
- Stosowanie metadanych (581)
- Formatowanie danych wyjściowych (581)
- Manipulacja obrazkiem (583)
- Projekt/przegląd rozwiązania (585)
- Projektowanie bazy danych (586)
- Implementacja (587)
- Fronton systemu (587)
- Wnętrze systemu (590)
- Wyszukiwanie (598)
- Ekran redaktora naczelnego (601)
- Rozwijanie projektu (603)
- W następnym rozdziale (603)
- Problem (605)
- Składniki rozwiązania (606)
- Przegląd rozwiązania (608)
- Konfiguracja bazy danych (609)
- Architektura skryptu (611)
- Logowanie i wylogowanie (615)
- Konfiguracja kont (618)
- Tworzenie nowego konta (620)
- Modyfikacja istniejącego konta (622)
- Usuwanie konta (622)
- Odczytywanie poczty (623)
- Wybór konta (623)
- Przeglądanie zawartości skrzynki (626)
- Odczytywanie wiadomości pocztowych (629)
- Przeglądanie nagłówków wiadomości (632)
- Usuwanie wiadomości (632)
- Wysyłanie wiadomości (633)
- Wysyłanie nowej wiadomości (634)
- Odpowiadanie i przekazywanie poczty (635)
- Rozwijanie projektu (637)
- W następnym rozdziale (637)
- Problem (639)
- Składniki rozwiązania (640)
- Konfiguracja bazy danych list i abonentów (640)
- Wysyłanie plików (641)
- Wysyłanie wiadomości z załącznikami (641)
- Przegląd rozwiązania (641)
- Konfiguracja bazy danych (643)
- Architektura skryptu (645)
- Implementacja logowania (653)
- Tworzenie nowego konta (653)
- Logowanie (656)
- Implementacja funkcji użytkownika (658)
- Przeglądanie list (659)
- Przeglądanie informacji na temat listy (663)
- Przeglądanie archiwum listy (665)
- Zapisywanie i wypisywanie (666)
- Zmiana konfiguracji konta (667)
- Zmiana hasła (668)
- Wylogowanie (669)
- Implementacja funkcji administratora (670)
- Tworzenie nowej listy (670)
- Wysyłanie nowych wiadomości (672)
- Obsługa wysyłania wielu plików (675)
- Podgląd wiadomości (679)
- Rozsyłanie wiadomości (680)
- Rozwijanie projektu (684)
- W następnym rozdziale (685)
- Problem (687)
- Składniki rozwiązania (688)
- Przegląd rozwiązania (690)
- Projektowanie bazy danych (690)
- Przeglądanie drzewa artykułów (693)
- Rozwijanie i zwijanie (696)
- Wyświetlanie artykułów (698)
- Korzystanie z klasy wezel_drzewa (699)
- Przeglądanie pojedynczych artykułów (705)
- Dodawanie nowych artykułów (708)
- Rozszerzenia (714)
- Wykorzystanie istniejącego systemu (714)
- W następnym rozdziale (715)
- Problem (717)
- Ocena formatów dokumentów (718)
- Papier (718)
- ASCII (719)
- HTML (719)
- Formaty edytorów tekstu (719)
- Format RTF (720)
- PostScript (721)
- Format PDF (722)
- Składniki rozwiązania (723)
- System pytań i odpowiedzi (723)
- Oprogramowanie generujące dokumenty (723)
- Przegląd rozwiązania (726)
- Zadawanie pytań (727)
- Ocena odpowiedzi (728)
- Tworzenie certyfikatu RTF (731)
- Tworzenie certyfikatu PDF z szablonu (734)
- Generowanie dokumentu PDF za pomocą PDFlib (737)
- Skrypt "Witaj świecie" dla PDFlib (737)
- Tworzenie certyfikatu za pomocą PDFlib (741)
- Problemy związane z nagłówkami (748)
- Rozwijanie projektu (749)
- Propozycje dalszych lektur (749)
Dodatek A Instalacja PHP4 i MySQL (753)
- Uruchamianie PHP jako CGI lub moduł serwera (753)
- Instalacja Apache, PHP i MySQL w systemie UNIX (755)
- Apache i mod_SSL (758)
- Plik httpd.conf - informacje końcowe (761)
- Czy obsługa PHP działa poprawnie? (762)
- Czy SSL działa poprawnie? (762)
- Instalacja Apache, PHP i MySQL w systemie Windows (764)
- Instalacja MySQL w systemie Windows (764)
- Instalacja serwera Apache w systemie Windows (766)
- Różnice między serwerem Apache dla systemu UNIX i Windows (769)
- Instalacja PHP w systemie Windows (770)
- Instalacja na serwerze Microsoft IIS (772)
- Instalacja na serwerze Microsoft PWS (773)
- Inne konfiguracje (773)
- Zasoby poświęcone PHP (775)
- Zasoby poświęcone MySQL i SQL (777)
- Zasoby poświęcone serwerowi Apache (778)
- Zasoby poświęcone tworzeniu stron WWW (778)