Head First PHP & MySQL [Edycja polska] 9788324660513 [PDF]

PHP wraz z MySQL stanowią najpopularniejszy zespół, służący do szybkiego tworzenia aplikacji internetowych o różnym stop

142 53 50MB

Polish Pages [800] Year 2010

Report DMCA / Copyright

DOWNLOAD PDF FILE

Table of contents :
Spis treści
Wprowadzenie
Dla kogo przeznaczona jest ta książka?
Kto prawdopodobnie powinien zrezygnować z tej książki?
Wiemy, co sobie myślisz
Wiemy, co sobie myśli Twój mózg
Metapoznanie: myślenie o myśleniu
Oto, co MY zrobiliśmy
A oto, co TY możesz zrobić, aby zmusić mózg do posłuszeństwa
Przeczytaj koniecznie
Zespół recenzentów technicznych
Podziękowania
1. To żyje!
Strony HTML są statyczne i nudne
PHP ożywia strony WWW
Formularz pomoże Markowi poznać całą historię
Formularze składają się z kodu HTML
Formularz HTML sprawia problemy
HTML działa po stronie KLIENTA
PHP działa po stronie SERWERA
Skrypty PHP działają na serwerze
Dostęp do danych z formularza w kodzie PHP
Skrypty PHP muszą działać na serwerze!
Przenoszenie skryptów PHP na serwer
Serwer przekształca kod PHP na HTML
Analiza skryptu PHP Marka
Kilka reguł życiowych związanych z językiem PHP
Ustalanie idealnych nazw dla zmiennych
Zmienne służą do przechowywania danych w skryptach
$_POST to specjalna zmienna na dane z formularza
Zmienna $_POST przesyła dane z formularza do skryptu
Tworzenie treści listu w kodzie PHP
Nawet zwykły tekst można (trochę) sformatować
Znaki nowego wiersza trzeba umieścić w cudzysłowach
Zbuduj e-mail do Marka
Zmienne przechowują fragmenty e-maila
Wysyłanie e-maili przy użyciu PHP
Marek zaczyna otrzymywać e-maile
Marek zaczyna gubić e-maile
2. Jak wszystko wiąże się ze sobą?
Formularz PHP Marka działa dobrze — aż za dobrze…
MySQL doskonale nadaje się do przechowywania danych
Marek potrzebuje bazy danych MySQL
Utwórz bazę danych i tabelę MySQL
Instrukcja INSERT w akcji
Użyj instrukcji SELECT do pobrania danych z tabeli
Użyj PHP do obsługi żmudnych instrukcji SQL
PHP umożliwia przepływ danych z formularza Marka
Połącz się z bazą danych w skrypcie PHP
Wstawianie danych za pomocą skryptu PHP
Użyj funkcji PHP do komunikacji z bazą danych
Łączenie się z bazą za pomocą mysqli_connect()
Budowanie zapytań INSERT w kodzie PHP
Kierowanie zapytań do bazy MySQL w skryptach PHP
Zamykanie połączenia za pomocą funkcji mysqli_close()
Zmienna $_POST udostępnia dane z formularza
Marek potrzebuje pomocy przy filtrowaniu danych
Marek jest na dobrej drodze do znalezienia Kła
3. Tworzenie własnych danych
Sklep poświęcony Elvisowi otwiera podwoje
Edward potrzebuje aplikacji
Wizualizacja projektu aplikacji Edwarda
Wszystko zaczyna się od tabeli
Nawiąż kontakt z serwerem MySQL
Tworzenie bazy danych na adresy Edwarda
Tworzenie tabeli w bazie danych
Musimy zdefiniować dane
Poznaj wybrane typy danych języka MySQL
Tworzenie tabel przy użyciu zapytań
Wskaż bazę danych przed jej użyciem
Instrukcja DESCRIBE opisuje strukturę tabeli
Edward jest gotowy do zapisywania danych
Tworzenie skryptu do dodawania adresów
Druga strona aplikacji Edwarda
Mechanizmy skryptu do wysyłania wiadomości
Zacznijmy od początku — pobieranie danych
Funkcja mysqli_fetch_array() pobiera wyniki zapytania
Pętle WHILE
Przechodzenie po danych za pomocą pętli while
Otrzymałeś wiadomość od Edwarda!
Czasem użytkownicy chcą zrezygnować
Usuwanie danych za pomocą instrukcji DELETE
Użyj klauzuli WHERE, aby usunąć konkretne dane
Minimalizowanie ryzyka przypadkowych usunięć
ZrobZeMnieElvisa.com to aplikacja internetowa
4. Twoja aplikacja w sieci WWW
Niektórzy klienci Edwarda są zirytowani
Zabezpiecz Edwarda przed nim samym
Sprawdzaj poprawność danych z formularza
Walidacja w skrypcie sendemail.php
Kod podejmuje decyzje dzięki instrukcji IF
Sprawdzanie warunku
Instrukcja IF sprawdza nie tylko równość
Walidacja w skrypcie sendemail.php
Funkcje PHP do sprawdzania zawartości zmiennych
Sprawdzanie wielu warunków przy użyciu I oraz LUB
Użytkownicy formularza potrzebują informacji zwrotnych
Wygodne otwieranie i zamykanie bloków PHP
Użyj flagi, aby uniknąć powielania powielania kodu
Napisz kod formularza jeden raz
Formularz autoreferencyjny
Wskaż skrypt w atrybucie action
Sprawdzanie, czy użytkownik przesłał formularz
Niektórzy użytkownicy nadal są niezadowoleni
Wiersze tabeli powinny mieć niepowtarzalne identyfikatory
Klucze główne wymuszają niepowtarzalność
Od pól wyboru do identyfikatorów klientów
Przechodzenie po elementach tablicy za pomocą foreach
5. Kiedy baza danych nie wystarcza
Wirtualni gitarzyści lubią współzawodnictwo
Rysunki Riffy to dowód prawdziwości wyniku
Aplikacja musi przechowywać rysunki
Planowanie przesyłania plików w aplikacji Gitarowe wojny
Trzeba zmodyfikować bazę rekordów za pomocą instrukcji ALTER
Jak pobrać rysunek od użytkownika?
Wstaw rysunki (nazwy plików) do bazy danych
Określanie nazwy przesłanego pliku
Gdzie znajdują się przesłane pliki?
Utwórz miejsce na przesłane pliki graficzne
Współużytkowane dane trzeba współdzielić
Dołączanie danych współużytkowanych przez skrypty
Traktuj instrukcję require_once jak polecenie „wstaw”
W przypadku rekordowych wyników najważniejszy jest (czas) porządek
Wyróżnianie najlepszego gitarowego wojownika
Sformatuj najlepszy wynik za pomocą kodu HTML i CSS
Przepuszczamy tylko małe rysunki
Walidacja pliku zwiększa niezawodność aplikacji
Projektowanie strony administracyjnej
Generowanie odsyłaczy do usuwania wyników na stronie administracyjnej
Skrypty mogą komunikować się ze sobą
O żądaniach GET i POST
GET, POST i usuwanie wyników
Znajdowanie usuwanych wyników
Kontrolowanie liczby usuwanych wierszy za pomocą klauzuli LIMIT
6. Załóżmy, że każdy stanowi zagrożenie
Dzień, w którym umarła muzyka
Gdzie się podziały wyniki?
Zabezpieczenia przed dzikimi hordami
Zabezpieczanie strony administracyjnej Gitarowych wojen
Uwierzytelnianie HTTP wymaga nagłówków
Kontrolowanie nagłówków za pomocą PHP
Uwierzytelnianie za pomocą nagłówków
Tworzenie skryptu do obsługi uwierzytelniania
Gitarowe wojny. Część II: Atak klonów rekordów
Odejmowanie przez dodawanie
Bezpieczeństwo wymaga interwencji człowieka
Planowanie obsługi moderowania w Gitarowych wojnach
Użyj instrukcji ALTER, aby zrobić miejsce na zatwierdzanie wyników
Niezatwierdzone wyniki nie są potrzebne
Oszustwo za milion punktów
Czy jest tu moderator?
Jak Ela to zrobiła?
Oszukiwanie bazy MySQL za pomocą komentarzy
Do formularza do dodawania wyników wstrzyknięto kod SQL
Chroń dane przed wstrzyknięciem kodu SQL
Bezpieczniejsza instrukcja INSERT (z parametrami)
Walidacji formularza nigdy za wiele
Wstrzymać ogień!
7. Pamiętasz mnie?
Podobno przeciwieństwa się przyciągają
Niedopasowanie opiera się na prywatnych danych
Witryna Niedopasowani potrzebuje loginów
Przygotowanie bazy do zapisywania loginów
Tworzenie interfejsu logowania
Szyfrowanie haseł za pomocą funkcji SHA()
Porównywanie (Odszyfrowywanie) haseł
Uwierzytelnianie użytkowników za pomocą HTTP
Logowanie się użytkowników za pomocą uwierzytelniania HTTP
Formularz do rejestracji nowych użytkowników
Co zawierają pliki cookie?
Zastosuj Upiecz ciasteczka w kodzie PHP
Modyfikowanie przebiegu logowania
Logowanie oparte na plikach cookie
Wylogowanie to efekt usunięcia plików cookie
Sesje nie są zależne od klienta
Śledzenie danych sesji
Usprawnij aplikację Niedopasowani za pomocą sesji
Wylogowywanie przy użyciu sesji
Dokończ wprowadzanie sesji
Użytkownicy nie czują się mile witani
Sesje nie żyją długo…
… ale pliki cookie mogą trwać wiecznie!
Sesje + pliki cookie = większa trwałość logowania
7.5. Współdzielenie oznacza troskę
Aplikacja Niedopasowani w kawałkach
Przebudowywanie aplikacji Niedopasowani przy użyciu szablonu
Przebudowa aplikacji Niedopasowani z wykorzystaniem szablonów
Zupełnie nowa i dużo lepiej uporządkowana aplikacja Niedopasowani
8. Zbieranie danych
Idealnie niedopasowani
Aplikacja Niedopasowani opiera się na danych
Utwórz model bazy danych za pomocą schematu
Łączenie kilku tabel
Klucze zewnętrzne w praktyce
Jeden wiersz pasuje do jednego wiersza
Jeden wiersz łączy się z wieloma
Wiersze w relacji wiele do wielu
Tworzenie kwestionariusza na potrzeby aplikacji Niedopasowani
Zapisywanie odpowiedzi w bazie danych
Możemy sterować formularzem za pomocą danych
Generowanie formularza z kwestionariuszem w aplikacji Niedopasowani
Droga do normalności
W czasie normalizacji myśl w kategoriach atomów
Trzy kroki do znormalizowanej bazy danych
Modyfikowanie bazy aplikacji Niedopasowani
Czy baza aplikacji Niedopasowani jest naprawdę znormalizowana?
Zapytanie w zapytaniu wewnątrz zapytania…
Złączmy (dłonie) tabele
Łączenie (zbioru) za pomocą kropek
To jeszcze nie wszystkie możliwości złączeń wewnętrznych
Pseudonimy tabel i kolumn
Pomoc ze strony złączeń
Pięć kroków do udanego niedopasowania
Porównywanie osób pod kątem niedopasowania
Potrzebujemy pętli FOR
9. Dzięki funkcjom żyje się lepiej
Trudno jest znaleźć dobrą ryzykowną pracę
Wyszukiwanie nie daje możliwości popełnienia błędu
Dzięki słowu kluczowemu LIKE zapytania SQL mogą być elastyczne
Podziel łańcuch znaków na pojedyncze słowa
Funkcja implode() tworzy łańcuch znaków przy użyciu podłańcuchów
Wstępne przetwarzanie szukanego łańcucha znaków
Zastępowanie niepotrzebnych znaków w szukanym tekście
Potrzebujemy poprawnych szukanych łańcuchów
Kopiowanie niepustych elementów do nowej tablicy
Czasem potrzebny jest tylko fragment łańcucha
Pobieranie podłańcuchów z obu stron tekstu
Można posortować wyniki w kilku zapytaniach
Funkcje umożliwiają wielokrotne wykorzystanie kodu
Zbuduj zapytanie za pomocą niestandardowej funkcji
SWITCH obsługuje więcej decyzji niż IF
Sortowanie w funkcji build_query()
Możemy podzielić wyniki na strony
Pobieranie tylko potrzebnych wierszy dzięki klauzuli LIMIT
Zarządzanie odnośnikami związanymi z klauzulą LIMIT
Kontrolowanie danych potrzebnych do obsługi stronicowania
Konfigurowanie zmiennych używanych do stronicowania
Poprawianie zapytania, które pobiera stronicowane wyniki
Generowanie odnośników do nawigacji po stronach
Tworzenie kompletnego skryptu do wyszukiwania ofert
Kompletny skrypt do wyszukiwania ofert — ciąg dalszy
10. Reguły zastępowania
Użytkownicy serwisu Ryzykowne prace mogą zamieszczać w nim życiorysy
Określ, jaki format powinny mieć dane
Utwórz wzorzec numerów telefonów
Dopasuj dane do wzorca za pomocą wyrażeń regularnych
Tworzenie wzorców za pomocą metaznaków
Dopracuj wzorce za pomocą klas znaków
Wyszukiwanie wzorców za pomocą funkcji preg_match()
Ustandaryzuj numery telefonów
Usuwanie niepożądanych znaków
Dopasowywanie adresów e-mail może być trudne
Przyrostki domen są wszędzie
Użyj języka PHP do walidacji domeny
Walidacja adresów e-mail — łączenie wszystkich elementów
11. Dynamiczne dodawanie grafiki
Powrót Gitarowych wojen: narodziny maszyn
Żaden formularz na dane wejściowe nie jest bezpieczny
Musimy oddzielić ludzi od maszyn
Możemy pokonać automatyzację automatyzacją
Generowanie tekstu hasła w teście CAPTCHA
Generowanie rysunku z testem CAPTCHA
Funkcje graficzne biblioteki GD
Wyświetlanie tekstu za pomocą innych czcionek
Generowanie losowych rysunków z testami CAPTCHA
Przywracanie normalności w Gitarowych wojnach
Dodawanie testu CAPTCHA do skryptu do dodawania wyników
Pięć wymiarów niedopasowania
Diagramy niedopasowania
Zapisywanie danych na potrzeby wykresu
Od jednej tablicy do drugiej
Tworzenie tablicy niedopasowanych tematów
Plan tworzenia wykresu
Analizowanie kategorii
Określanie liczby kategorii
Podstawy rysowania wykresów
Rysowanie i wyświetlanie rysunku z wykresem słupkowym
Osobne rysunki z wykresami dla wszystkich
Użytkownicy serwisu Niedopasowani polubili wykresy
12. Interfejs do komunikacji ze światem
Marek musi poinformować świat o zaginięciu Kła
Przesyłanie danych o porwaniach do użytkowników
RSS pozwala przesyłać zawartość witryny do użytkowników
RSS to w rzeczywistości XML
Z bazy danych do czytnika kanałów RSS
Wizualizowanie kodu (XML) RSS
Dynamiczne generowanie kanału RSS
Odnośnik do kanału RSS
Jeden (obraz) film jest wart (tysiąca) miliona słów
Pobieranie materiałów od innych
Rozpowszechnianie filmów z YouTube
Przesyłanie żądania danych o filmach do serwisu YouTube
Marek jest gotów do utworzenia żądania REST
YouTube komunikuje się w języku XML
Analiza kodu XML odpowiedzi z serwisu YouTube
Wizualizowanie danych XML z opisem filmów
Dostęp do danych XML za pomocą obiektów
Od elementów XML do obiektów PHP
Pobieranie danych XML za pomocą obiektów
Nie zapominaj o przestrzeniach nazw!
Obserwatorzy zauważyli Kła
Rozmieść wyświetlane filmy
Formatowanie danych o filmach w celu ich wyświetlenia
A. Dziesięć najważniejszych tematów (których nie poruszyliśmy)
Numer 1. Dopasowywanie kodu do języka PHP 4 i funkcji mysql
Numer 2. Uprawnienia użytkowników w MySQL
Numer 3. Zgłaszanie błędów w MySQL
Numer 4. Obsługa wyjątków w kodzie PHP
Numer 5. Obiektowy język PHP
Numer 6. Zabezpieczanie aplikacji PHP
Numer 7. Zabezpieczanie aplikacji przed atakami XSS
Numer 8. Pierwszeństwo operatorów
Numer 9. Czym różni się język PHP 5 od PHP 6?
Numer 10. Wykorzystanie kodu PHP innych osób
B. Miejsce do zabawy
Utwórz środowisko do programowania w języku PHP
Sprawdź dostępne komponenty
Czy masz serwer WWW?
Czy masz PHP? W której wersji?
Czy masz zainstalowany serwer MySQL? Którą wersję?
Zacznij od serwera WWW
Instalowanie serwera Apache — zakończenie
Etapy instalowania PHP
Etapy instalowania PHP — zakończenie
Instalowanie MySQL
Etapy instalowania serwera MySQL w systemie Windows
Przenoszenie kodu ze środowiska produkcyjnego do publicznie dostępnej witryny
Zrób zrzut danych (i tabel)
Przygotowania do użycia zrzutu danych
Przenoszenie zrzuconych danych na serwer publiczny
Łączenie się z serwerem publicznym
C. Jeszcze więcej możliwości
Rozszerzanie języka PHP
A w komputerach Mac…
Skorowidz
Papiere empfehlen

Head First PHP & MySQL [Edycja polska]
 9788324660513 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

ySQL!

Edycja polska

Helion

R

Tytuł oryginału: Head First PHP & MySQL Tłumaczenie: Tomasz Walczak ISBN: 978-83-246-6051-3 © Helion S.A. 2010 Authorized translation of the English edition of Head First PHP & MySQL © 2009 O’Reilly Media, Inc. This translation is published and sold by permission of O’Reilly Media, Inc., the owner of all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniej szej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficz ną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/hfphms.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie?hfphms_ebook Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland.

• Poleć książkę na Facebook.com • Kup w wersji papierowej • Oceń książkę

• Księgarnia internetowa • Lubię to! » Nasza społeczność

Pochwały specjalistów dla książki Head First PHP & MySQL „PHP i MySQL to dwie najpopularniejsze obecnie technologie tworzenia aplikacji sieciowych, a ta książka pokazuje, dlaczego tak się dzieje. Tworzenie witryn bez tych mechanizmów jest równie niewyobrażalne, jak projektowanie stron bez stylów CSS. Ta książka to doskonałe i zabawne wprowadzenie. Nauka z takich podręczników to prawdziwa przyjemność”. — Harvey Quamen, profesor nadzwyczajny języka angielskiego i nauk humanistycznych w kontekście nowych technologii na Uniwersytecie Stanu Alberta

„Poznawanie zagadnień technicznych nie musi być trudne. W tej książce użyto niezwykle ciekawej metody nauczania. Jestem przekonany, że seria Head First zrewolucjonizuje branżę wydawnictw technicznych, a zastosowane tu nowe podejście stanie się w przyszłości standardem. Idę o zakład, że nawet moja babcia nauczyłaby się technologii PHP i MySQL po jednym przeczytaniu tej książki oraz prawdopodobnie dobrze by się przy tym bawiła!”. — Will Harris, administrator baz danych w serwisie Powered By Geek

„Lektura książki Head First PHP & MySQL jest podobna do współpracy ze świetnym nauczycielem — nie można doczekać się dalszej nauki”. — Stephanie Liese, projektantka stron WWW

„Dzięki rysunkom i dowcipom książka jest łatwa do zrozumienia, a przy tym zawiera rzetelną wiedzę techniczną”. — Jereme Allen, projektant stron WWW

„Po szybkim przeczytaniu tej pełnej wyzwań książki i ukończeniu wielu zaskakujących praktycznych projektów (między innymi serwisu „Mój pies został uprowadzony przez kosmitów” i portalu randkowego Niedopasowani) nie mogę się doczekać, aby wzbogacić swe witryny o rozwiązania oparte na języku PHP”. — David Briggs, inżynier oprogramowania i autor tekstów technicznych

Pochwały dla książki Head First HTML with CSS & XHTML „Eric i Elisabeth Freeman wiedzą, o czym piszą. Wraz ze wzrostem złożoności internetu pomysłowość przy tworzeniu stron WWW staje się kluczowa. Istotą każdego rozdziału jest elegancki projekt, a techniki opisano równie pragmatycznie, jak dowcipnie”. — Ken Goldstein, wiceprezes do spraw wykonawczych i dyrektor zarządzający w firmie Disney Online

„Sieć WWW byłaby dużo piękniejsza, gdyby każdy projektant stron najpierw przeczytał tę książkę”. — L. David Baron, starszy programista do spraw układu stron i stylów CSS, Mozilla Corporation, http://dbaron.org/

„Rozwijam kod HTML i CSS już od 10 lat. Długi proces prób i błędów zredukowano obecnie do formy ciekawej książki. Kiedyś w kodzie HTML stosowano sztuczki, aby strony wyglądały prawidłowo, jednak wraz z pojawieniem się standardów sieciowych i ruchu na rzecz dostępności takie podejście stało się nie do przyjęcia ze względów biznesowych i społecznych. Autorzy książki Head First HTML with CSS & XHTML pokazują, jak od początku prawidłowo rozwijać projekt bez stosowania do tego nadmiernie rozbudowanego procesu. HTML, jeśli zostanie prawidłowo wytłumaczony, nie jest bardziej skomplikowany od standardowego języka angielskiego, a Freemanowie doskonale radzą sobie z objaśnianiem wszelkich zagadnień”. — Mike Davidson, prezes i dyrektor generalny, Newsvine, Inc.

„Doskonale! Opracowaliście książkę o XHTML-u zrozumiałą dla dyrektorów generalnych. Co będzie następne? Rachunkowość w formie przystępnej dla programistów? Nawet nie zauważymy, kiedy zaczniemy wszyscy współpracować jak prawdziwy zespół”. — Janice Fraser, dyrektor generalny, Adaptive Path

„W tej książce jest humor, urok i — co najważniejsze — serce. Wiem, że brzmi to śmiesznie w odniesieniu do książki technicznej, ale naprawdę uważam, że autorzy chcieli, aby czytelnik opanował przedstawioną w niej wiedzę. Jest to widoczne w stylu, języku i zastosowanych technikach. Nauka — prawdziwe zrozumienie informacji przez czytelnika — to najważniejszy cel Freemanów. Dziękuję po stokroć za tę książkę i rozsądne promowanie zasad zgodności ze standardami. Wspaniale jest widzieć, że w książce dla początkujących, która będzie powszechnie czytana i studiowana, tak elokwentnie i przekonująco opisano znaczenie przestrzegania standardów w kodzie stron WWW. Znalazłem tu nawet kilka argumentów, o których nigdy dotąd nie pomyślałem. Zapamiętałem je i mogę wykorzystać te informacje, kiedy zostanę zapytany (a wciąż słyszę te słowa): O co chodzi z tą zgodnością i dlaczego mamy o nią dbać? Mój arsenał odpowiedzi jest teraz dużo bogatszy! Podobało mi się też, że w różnych miejscach książki opisano podstawowe mechanizmy związane z umieszczaniem stron w sieci — protokół FTP, serwery WWW, strukturę plików i tak dalej”. — Robert Neer, dyrektor do spraw rozwoju produktów, Movies.com

Pochwały dla książki Head First JavaScript „Jest niezwykle praktyczna i przydatna oraz zawiera doskonałe wyjaśnienia. Ta książka to fantastyczne wprowadzenie do języka JavaScript dla nowicjuszy i następne potwierdzenie wartości podejścia stosowanego w książkach z serii Head First. Head First JavaScript doskonale nadaje się do nauki w odróżnieniu od niektórych innych źródeł informacji, które często mają rozmiary książki telefonicznej”. — Alex Lee, student, Uniwersytet w Houston

„Doskonały wybór dla początkujących programistów języka JavaScript”. — Fletcher Moore, programista i projektant stron WWW, Georgia Institute of Technology

„Następna doskonała książka w klasycznym stylu serii Head First”. — TW Scannell

„JavaScript to działający po stronie klienta język, który od dawna napędza strony w sieci WWW, a jednocześnie równie długo był błędnie postrzegany i użytkowany. W książce Head First JavaScript Michael Morrison przedstawia proste i zrozumiałe wprowadzenie do tego języka oraz rozwiewa wszelkie mity i pokazuje, jak skutecznie wzbogacać strony za pomocą JavaScriptu”. — Anthony T. Holdner III, programista aplikacji sieciowych i autor książki Ajax: The Definitive guide

„Strony WWW składają się z trzech części — treści (HTML), wyglądu (CSS) i operacji (JavaScript). Head First HTML opisuje dwa pierwsze z tych komponentów, a w tej książce zastosowano to samo zabawne, ale i praktyczne podejście do przedstawienia języka JavaScript. Ciekawy format i omawianie zagadnień na wiele sposobów ułatwiają zapamiętanie materiału, dlatego jest to doskonała książka dla początkujących, która pomoże im rozpocząć zwiększanie interaktywności stron WWW”. — Stephen Chapman, właściciel Felgall Pty Ltd., redaktor do spraw języka JavaScript w witrynie about.com

„Takiej książki szukałam, aby móc polecić ją czytelnikom. Jest wystarczająco prosta, aby zrozumieli ją zupełni nowicjusze, a przy tym wystarczająco szczegółowa, aby była wartościowa także dla bardziej zaawansowanych użytkowników. Nauka z nią to prawdziwa zabawa. Może to być jedyna książka na temat języka JavaScript, jakiej będziesz kiedykolwiek potrzebował”. — Julie L. Baumler, redaktor do spraw języka JavaScript, BellaOnline.com

Dla moich rodziców, którzy często korzystają z aplikacji sieciowych i zawsze mają dla mnie czas. — Lynn Beighley

Dla Rasmusa Lerdorfa, który samodzielnie wymyślił język znany dziś jako PHP. Jest to trwały dowód na to, że czasem naprawdę wystarczy jedna osoba, aby wprowadzić nas wszystkich na nową drogę. — Michael Morrison

Autorzy

Autorzy książki Head First PHP & MySQL Lynn Beighley

Michael Morrison

Lynn Beighley to pisarka książek popularnych uwięziona w ciele autorki tekstów technicznych. Kiedy odkryła, że potrafi zarabiać dzięki temu prawdziwe pieniądze, zaakceptowała i polubiła swój stan. Po powrocie na uczelnię w celu uzyskania dyplomu z dziedziny nauk komputerowych pracowała dla NRL i LANL. Następnie odkryła technologię Flash i napisała swój pierwszy bestseller. Z uwagi na brak wyczucia czasu tuż przed wielkim krachem przeprowadziła się do Doliny Krzemowej. Przez kilka lat pracowała dla Yahoo!, kiedy to napisała parę książek i opracowała kilka kursów. W końcu poddała się twórczemu popędowi i przeniosła się do Nowego Jorku, aby uzyskać dyplom z dziedziny twórczego pisania. Jej praca w stylu książek z serii Head First została przedstawiona w sali pełnej profesorów i innych studentów. Została doskonale przyjęta, a Lynn otrzymała dyplom, ukończyła Head First SQL, a niedawno napisała Head First PHP & MySQL. Nieźle! Lynn uwielbia podróżować, pisać i wymyślać historie na temat życia nieznajomych. Ponadto trochę boi się kosmitów.

8

Michael Morrison z entuzjazmem wzbogaca świat internetu od momentu, kiedy po raz pierwszy uruchomił serwis BBS na komputerze Commodore 64. Działo się to w czasach, kiedy życie informatyka nie było tak przyjemne jak dziś. Kilka tysięcy bodów później Michael wciąż zdumiewa się zakresem i szybkością postępu technologicznego. Nie prowadzi już serwisu BBS, ale korzysta z jego współczesnych odpowiedników i narzędzi używanych do ich rozwijania. Większość „oficjalnego” czasu pracy spędza na pisaniu o technologiach sieciowych. Jest autorem lub współautorem ponad 50 książek na różne tematy — od programowania gier na urządzenia przenośne, po język XML. Wkroczył w świat serii Head First książką Head First JavaScript i nie zamierza się z niego wycofywać. Michael jest też założycielem firmy rozrywkowej Stalefish Labs (www.stalefishlabs.com) specjalizującej się w grach, zabawkach i mediach interaktywnych. Poza internetem (czy możliwe jest życie poza nim?) uprawia skateboarding, gra w hokeja na lodzie i spaceruje nad ogrodowym jeziorkiem wraz ze swą żoną, Masheed. Od czasu do czasu poświęca chwilę na sen.

Spis treści

Spis treści (skrócony) Wprowadzenie

27

1.

Ożywianie statycznych stron. To żyje!

39

2.

Łączenie się z bazą MySQL. Jak wszystko wiąże się ze sobą?

3.

Tworzenie i zapełnianie bazy danych. Tworzenie własnych danych

141

4.

Realistyczne i praktyczne aplikacje. Twoja aplikacja w sieci WWW

195

5.

Używanie danych przechowywanych w plikach. Kiedy baza danych nie wystarcza

259

6.

Zabezpieczanie aplikacji. Załóżmy, że każdy stanowi zagrożenie

329

7.

Tworzenie spersonalizowanych aplikacji sieciowych. Pamiętasz mnie?

379

Eliminowanie powtórzeń w kodzie. Współdzielenie oznacza troskę

451

8.

Kontroluj dane — kontroluj swój świat. Zbieranie danych

461

9.

Funkcje niestandardowe i do obsługi łańcuchów znaków. Dzięki funkcjom żyje się lepiej

533

10.

Wyrażenia regularne. Reguły zastępowania

593

11.

Wizualizowanie danych i inne zagadnienia. Dynamiczne dodawanie grafiki

637

12.

7½.

97

Rozpowszechnianie danych i usługi sieciowe. Interfejs do komunikacji ze światem

687

A

Pozostałości. Dziesięć najważniejszych tematów (których nie poruszyliśmy)

743

B

Konfigurowanie środowiska programistycznego. Miejsce do zabawy

761

C

Rozszerzanie PHP. Jeszcze więcej możliwości

779

Skorowidz

785

Spis treści (z prawdziwego zdarzenia)

W

Wprowadzenie Twój mózg a PHP i MySQL. Podczas gdy Ty próbujesz się czegoś nauczyć, mózg wyświadcza Ci przysługę i dba o to, abyś niczego nie zapamiętał. Twój mózg myśli sobie: „Lepiej zostawić miejsce na ważniejsze informacje, na przykład o dzikich zwierzętach, których należy unikać, i o tym, że ćwiczenie jogi pod wodą nie jest dobrym pomysłem”. Jak więc możesz przechytrzyć mózg i przekonać go, że Twoje życie zależy od znajomości technologii PHP i MySQL? Dla kogo przeznaczona jest ta książka?

28

Kto prawdopodobnie powinien zrezygnować z tej książki?

28

Wiemy, co sobie myślisz

29

Wiemy, co sobie myśli Twój mózg

29

Metapoznanie: myślenie o myśleniu

31

Oto, co MY zrobiliśmy

32

A oto, co TY możesz zrobić, aby zmusić mózg do posłuszeństwa

33

Przeczytaj koniecznie

34

Zespół recenzentów technicznych

36

Podziękowania

37

9

Spis treści

Ożywianie statycznych stron

1 Czy ktoś go widział?

10

To żyje! Umiesz tworzyć świetne strony za pomocą HTML-a i odrobiny stylów CSS. Zauważyłeś jednak, że użytkownicy Twoich witryn mogą tylko pasywnie przeglądać zawartość witryn. Komunikacja jest jednostronna i planujesz to zmienić. Chcesz poznać opinie użytkowników. Aby dowiedzieć się, o czym myślą internauci, trzeba umożliwić im wprowadzanie danych za pomocą formularzy. Musisz też umieć przetworzyć i pobrać te informacje. Wygląda na to, że podniesienie poziomu witryn wymaga użycia czegoś więcej niż samego kodu HTML. Strony HTML są statyczne i nudne

40

PHP ożywia strony WWW

41

Formularz pomoże Markowi poznać całą historię

43

Formularze składają się z kodu HTML

44

Formularz HTML sprawia problemy

46

HTML działa po stronie KLIENTA

48

PHP działa po stronie SERWERA

49

Skrypty PHP działają na serwerze

50

Dostęp do danych z formularza w kodzie PHP

54

Skrypty PHP muszą działać na serwerze!

56

Przenoszenie skryptów PHP na serwer

57

Serwer przekształca kod PHP na HTML

60

Analiza skryptu PHP Marka

62

Kilka reguł pisania kodu związanych z językiem PHP

63

Ustalanie idealnych nazw dla zmiennych

64

Zmienne służą do przechowywania danych w skryptach

69

$_POST to specjalna zmienna na dane z formularza

71

Zmienna $_POST przesyła dane z formularza do skryptu

72

Tworzenie treści listu w kodzie PHP

82

Nawet zwykły tekst można (trochę) sformatować

84

Znaki nowego wiersza trzeba umieścić w cudzysłowach

85

Zbuduj e-mail do Marka

86

Zmienne przechowują fragmenty e-maila

87

Wysyłanie e-maili przy użyciu PHP

88

Marek zaczyna otrzymywać e-maile

91

Marek zaczyna gubić e-maile

92

Spis treści

Łączenie się z bazą MySQL

2

Jak wszystko wiąże się ze sobą? Ustalenie powiązań między elementami przed rozpoczęciem pracy to dobry pomysł. Utworzyłeś pierwszy działający skrypt PHP, jednak otrzymywanie danych z formularzy w formie listów elektronicznych już nie wystarcza. Potrzebny jest sposób na zapisanie takich informacji, aby można je było przechowywać i w odpowiednim momencie pobierać. Możesz użyć do tego bazy danych MySQL. Aby zapisać w niej dane, musisz uzyskać dostęp do bazy MySQL z poziomu skryptów PHP. Formularz PHP Marka działa dobrze — aż za dobrze… MySQL doskonale nadaje się do przechowywania danych

Nowy formularz jest doskonały, ale otrzymuję zbyt wiele listów. Nawet kawa nie pomaga mi nadążyć z czytaniem na bieżąco wszystkich wiadomości.

98 99

Marek potrzebuje bazy danych MySQL

100

Utwórz bazę danych i tabelę MySQL

102

Instrukcja INSERT w akcji

105

Użyj instrukcji SELECT do pobrania danych z tabeli

108

Użyj PHP do obsługi żmudnych instrukcji SQL

111

PHP umożliwia przepływ danych z formularza Marka

112

Połącz się z bazą danych w skrypcie PHP

114

Wstawianie danych za pomocą skryptu PHP

115

Użyj funkcji PHP do komunikacji z bazą danych

116

Łączenie się z bazą za pomocą mysqli_connect()

118

Budowanie zapytań INSERT w kodzie PHP

123

Kierowanie zapytań do bazy MySQL w skryptach PHP

124

Zamykanie połączenia za pomocą funkcji mysqli_close()

125

Zmienna $_POST udostępnia dane z formularza

129

Marek potrzebuje pomocy przy filtrowaniu danych

134

Marek jest na dobrej drodze do znalezienia Kła

136

$query Jan

Nowak

37 sekund w 1991 roku nie wiem przypomin ali metalo we osy promieni i tysicam ali mnie tak nawietl [email protected]

mysqli_query()

Uwielbiam ziemniaki .

11

Spis treści

Tworzenie i zapełnianie bazy danych

3

Tworzenie własnych danych Potrzebne informacje nie zawsze są dostępne. Czasem trzeba najpierw utworzyć dane. Nieraz należy też przygotować tabele do przechowywania informacji, a nawet zbudować bazę danych. Czujesz się zagubiony? Wkrótce wszystkiego się dowiesz. Zobaczysz, jak samodzielnie tworzyć bazy danych i tabele. Jeśli to wciąż za mało, przy okazji rozwiniesz swą pierwszą aplikację opartą na technologiach PHP i MySQL.

Lista mailingowa klientów Edwarda:

To wymaga zbyt dużo pracy. Wole ę spędzać czas na naśladowaniu Elvisa niż na ręcznym wysyłaniu e-maili.

12

Kurowski Julian jul_kurowski@breaknec kpizza.com Olejnik Krystian [email protected] Nowakowska Amanda amanno@b reakneckpizza.com Grabowski Edmund ed99@b0tt0 msup.com Skiba Joanna joski@breakneckpizza. com Wrona Lucjan poduszkowiec@breakn eckpizza.com Kot Anna AnnaKot@leapinlimos. com Matusiak Andrzej andrzejmat@ obiektowo.net Madej Tomasz madejtom@mightygumb all.com Kasprzak Alicja [email protected] om Janicki Krzysztof krzych@starbuzzcoffee .com Czajka Adrianna [email protected] Piotrowski Bartosz [email protected] Socha Katarzyna kat86@obie ktowo.net Sosnowski Dariusz sosna@bre akneckpizza.com Maj Magda magdamaj@starbuzzcof fee.com Bednarek Wiktoria wiki@starbu zzcoffee.com Szwed Jacek szwedjacek@obiektowo .net Tomczyk Diana tomczykdi@mightygumb all.net Jarosz Piotr weganin@tikibeanloun ge.com Kurek Krystyna [email protected] et Wolska Hanna [email protected] m Kos Maria bezproblemu@starbuzz coffee.com Stasiak Agata cudowna@breakneckp izza.com Pawlik Jakub [email protected] m Piasecki Maciej maciejp@weatheroram a.com Krupa Urszula [email protected] om Urban Piotr piotruspan@tibibeanloun ge.com Kozak Mariola [email protected] et Mucha Zuzanna [email protected] om Nowacki Kamil kamilnowy@breakneckp izza.com Kowalik Janina jankak@chocoholic-inc. com Wilk Barbara barbaraw@breakneckp izza.com Sawicka Iga [email protected] Makowski Alfred amakowski@ obiektowo.net Zawadzka Teresa tesa99@ob iektowo.net

Sklep poświęcony Elvisowi otwiera podwoje

142

Edward potrzebuje aplikacji

143

Wizualizacja projektu aplikacji Edwarda

144

Wszystko zaczyna się od tabeli

147

Nawiąż kontakt z serwerem MySQL

148

Tworzenie bazy danych na adresy Edwarda

149

Tworzenie tabeli w bazie danych

150

Musimy zdefiniować dane

151

Poznaj wybrane typy danych języka MySQL

152

Tworzenie tabel przy użyciu zapytań

155

Wskaż bazę danych przed jej użyciem

158

Instrukcja DESCRIBE opisuje strukturę tabeli

161

Edward jest gotowy do zapisywania danych

163

Tworzenie skryptu do dodawania adresów

164

Druga strona aplikacji Edwarda

171

Mechanizmy skryptu do wysyłania wiadomości

172

Zacznijmy od początku — pobieranie danych

173

Funkcja mysqli_fetch_array() pobiera wyniki zapytania

174

Pętle WHILE

177

Przechodzenie po danych za pomocą pętli while

178

Otrzymałeś wiadomość od Edwarda!

183

Czasem użytkownicy chcą zrezygnować

184

Usuwanie danych za pomocą instrukcji DELETE

185

Użyj klauzuli WHERE, aby usunąć konkretne dane

186

Minimalizowanie ryzyka przypadkowych usunięć

187

ZrobZeMnieElvisa.com to aplikacja internetowa

192

Spis treści

Realistyczne i praktyczne aplikacje

4

Twoja aplikacja w sieci WWW Czasem trzeba podejść do projektu realistycznie i jeszcze raz go przemyśleć. Możesz też poświęcić więcej czasu na zaplanowanie witryny na początku prac. Kiedy aplikacja znajdzie się już w sieci WWW, może się okazać, że projekt nie był doskonały. Rozwiązania, które na pozór powinny działać, czasem nie sprawdzają się w praktyce. W tym rozdziale rozwiążesz kilka rzeczywistych problemów, które mogą pojawić się przy przenoszeniu aplikacji ze środowiska testowego na serwer WWW. Przy okazji poznasz kilka ważnych fragmentów kodu PHP i SQL. Niektórzy klienci Edwarda są zirytowani

196

Zabezpiecz Edwarda przed nim samym

199

Sprawdzaj poprawność danych z formularza

200

Walidacja w skrypcie sendemail.php

201

Kod podejmuje decyzje dzięki instrukcji IF

202

Sprawdzanie warunku

203

Instrukcja IF sprawdza nie tylko równość

204

Walidacja w skrypcie sendemail.php

207

Funkcje PHP do sprawdzania zawartości zmiennych

208

Sprawdzanie wielu warunków przy użyciu I oraz LUB

215

Użytkownicy formularza potrzebują informacji zwrotnych

219

Wygodne otwieranie i zamykanie bloków PHP

229

Użyj flagi, aby uniknąć powielania kodu

230

Napisz kod formularza jeden raz

231

Formularz autoreferencyjny

235

Wskaż skrypt w atrybucie action

236

Sprawdzanie, czy użytkownik przesłał formularz

238

Niektórzy użytkownicy nadal są niezadowoleni

242

Wiersze tabeli powinny mieć niepowtarzalne identyfikatory

244

Klucze główne wymuszają niepowtarzalność

246

Od pól wyboru do identyfikatorów klientów

251

Przechodzenie po elementach tablicy za pomocą foreach

252

13

Spis treści

Używanie danych przechowywanych w plikach

5

14

Kiedy baza danych nie wystarcza Nie wierz przechwałkom — przynajmniej tym dotyczącym baz danych. To prawda, świetnie nadają się do przechowywania danych tekstowych, ale co z danymi binarnymi, na przykład rysunkami w formacie JPEG lub dokumentami PDF? Czy ma sens zapisywanie zdjęć kolekcji rzadkich gitar w tabelach bazy danych? Zwykle nie. Jednak możesz jednocześnie mieć wirtualne ciastko i je zjeść. W tym rozdziale dowiesz się, jak wykorzystać pliki i bazę danych do utworzenia aplikacji PHP, która używa danych binarnych. Wirtualni gitarzyści lubią współzawodnictwo

260

Rysunki to dowód prawdziwości wyniku

261

Aplikacja musi przechowywać rysunki

262

Planowanie przesyłania plików w aplikacji Gitarowe wojny

267

Trzeba zmodyfikować bazę rekordów za pomocą instrukcji ALTER

268

Jak pobrać rysunek od użytkownika?

272

Wstaw rysunki (nazwy plików) do bazy danych

274

Określanie nazwy przesłanego pliku

275

Gdzie znajdują się przesłane pliki?

280

Utwórz miejsce na przesłane pliki graficzne

284

Współużytkowane dane trzeba współdzielić

290

Dołączanie danych współużytkowanych przez skrypty

291

Traktuj instrukcję require_once jak polecenie „wstaw”

292

W przypadku rekordowych wyników najważniejszy jest porządek

294

Wyróżnianie najlepszego gitarowego wojownika

297

Sformatuj najlepszy wynik za pomocą kodu HTML i CSS

298

Przepuszczamy tylko małe rysunki

303

Walidacja pliku zwiększa niezawodność aplikacji

304

Projektowanie strony administracyjnej

308

Generowanie odsyłaczy do usuwania wyników na stronie administracyjnej

311

Skrypty mogą komunikować się ze sobą

312

O żądaniach GET i POST

314

GET, POST i usuwanie wyników

316

Znajdowanie usuwanych wyników

319

Kontrolowanie liczby usuwanych wierszy za pomocą klauzuli LIMIT

320

Spis treści

Zabezpieczanie aplikacji

6 Spróbujcie teraz przesłać sfałszowane dokumenty, to znaczy wyniki. Pracuję dokładnie i rzadko popełniam błędy.

Załóżmy, że każdy stanowi zagrożenie Rodzice mieli rację — nie należy rozmawiać z nieznajomymi. A przynajmniej nie wolno im ufać. Z pewnością nie dawaj im kluczy do danych z aplikacji z nadzieją, że nie wykorzystają ich do złych celów. Świat bywa okrutny i nikomu nie należy ufać. Programista aplikacji sieciowych musi być nieco cyniczny i bardzo podejrzliwy. Tak, ludzie są przeważnie źli i z pewnością stanowią zagrożenie! W porządku, może trochę przesadzamy, jednak koniecznie traktuj bezpieczeństwo poważnie i projektuj aplikacje tak, aby zabezpieczyć je przed potencjalnymi napastnikami. Dzień, w którym umarła muzyka

330

Gdzie się podziały wyniki?

331

Zabezpieczenia przed dzikimi hordami

333

Zabezpieczanie strony administracyjnej Gitarowych wojen

334

Uwierzytelnianie HTTP wymaga nagłówków

336

Kontrolowanie nagłówków za pomocą PHP

339

Uwierzytelnianie za pomocą nagłówków

340

Tworzenie skryptu do obsługi uwierzytelniania

348

Gitarowe wojny. Część II: Atak klonów rekordów

352

Odejmowanie przez dodawanie

353

Bezpieczeństwo wymaga interwencji człowieka

354

Planowanie obsługi moderowania w Gitarowych wojnach

355

Użyj instrukcji ALTER, aby zrobić miejsce na zatwierdzanie wyników

356

Niezatwierdzone wyniki nie są potrzebne

361

Oszustwo za milion punktów

364

Czy jest tu moderator?

365

Jak Ela to zrobiła?

367

Oszukiwanie bazy MySQL za pomocą komentarzy

368

Do formularza do dodawania wyników wstrzyknięto kod SQL

369

Chroń dane przed wstrzyknięciem kodu SQL

370

Bezpieczniejsza instrukcja INSERT (z parametrami)

371

Walidacji formularza nigdy za wiele

373

Wstrzymać ogień!

375

15

Spis treści

Tworzenie spersonalizowanych aplikacji sieciowych

7

16

Pamiętasz mnie? Nikt — a zwłaszcza użytkownik aplikacji sieciowych — nie lubi, kiedy się o nim zapomina. Jeśli odwiedzający wchodzą w spersonalizowane interakcje z witryną, aplikacja powinna ich zapamiętywać. Przedstawianie się rodzinie po każdym powrocie do domu to dziwaczna perspektywa. Dzięki wspaniałej funkcji zwanej pamięcią nie musimy tego robić, jednak aplikacje sieciowe nie zapamiętują automatycznie użytkowników. To zmyślny programista musi użyć dostępnych narzędzi (na przykład PHP i MySQL), aby utworzyć spersonalizowaną aplikację, która potrafi rozpoznawać odwiedzających. Podobno przeciwieństwa się przyciągają

380

Niedopasowanie opiera się na prywatnych danych

381

Witryna Niedopasowani potrzebuje loginów

382

Przygotowanie bazy do zapisywania loginów

385

Tworzenie interfejsu logowania

387

Szyfrowanie haseł za pomocą funkcji SHA()

388

Porównywanie haseł

389

Uwierzytelnianie użytkowników za pomocą HTTP

392

Logowanie się użytkowników za pomocą uwierzytelniania HTTP

395

Formularz do rejestracji nowych użytkowników

399

Co zawierają pliki cookie?

409

Zastosuj ciasteczka w kodzie PHP

410

Modyfikowanie przebiegu logowania

413

Logowanie oparte na plikach cookie

414

Wylogowanie to efekt usunięcia plików cookie

419

Sesje nie są zależne od klienta

423

Śledzenie danych sesji

425

Usprawnij aplikację Niedopasowani za pomocą sesji

426

Wylogowywanie przy użyciu sesji

427

Dokończ wprowadzanie sesji

432

Użytkownicy nie czują się mile witani

438

Sesje nie żyją długo…

440

…ale pliki cookie mogą trwać wiecznie!

441

Sesje + pliki cookie = większa trwałość logowania

443

Spis treści

Eliminowanie powtórzeń w kodzie



Współdzielenie oznacza troskę Parasole to nie jedyna rzecz, którą można się dzielić. W każdej aplikacji sieciowej natrafisz na kod, który powtarza się w kilku miejscach. Nie tylko jest to niepotrzebne, ale ponadto prowadzi do problemów z konserwacją, ponieważ w przyszłości z pewnością będziesz musiał wprowadzić zmiany w wielu różnych miejscach aplikacji. Rozwiązanie polega na wyeliminowaniu powtórzeń w kodzie przez jego współużytkowanie. Oznacza to, że należy umieścić powielany fragment w jednym miejscu, a następnie korzystać z tego kodu za każdym razem, kiedy jest potrzebny. Eliminacja powtarzającego się kodu pozwala tworzyć aplikacje, którą są wydajniejsze, łatwiejsze w konserwacji i bardziej niezawodne. Aplikacja Niedopasowani w kawałkach

455

Przebudowywanie aplikacji Niedopasowani przy użyciu szablonu

456

Przebudowa aplikacji Niedopasowani z wykorzystaniem szablonów

458

Zupełnie nowa i dużo lepiej uporządkowana aplikacja Niedopasowani

460

Nagłówek pojawia się na początku każdej strony witryny Niedopasowani i obejmuje nazwę aplikacji oraz tytuł specyficzny dla danej strony.

header.php

startsession.php

Każda spersonalizowana strona aplikacji Niedopasowani wymaga kodu do obsługi logowania, który zapamiętuje użytkownika.

navmenu.php

Menu nawigacyjne pojawia się tuż pod nagłówkiem i udostępnia na każdej stronie aplikacji Niedopasowani spójne menu, które umożliwia poruszanie się w witrynie.

Stopka udostępnia widoczny w dolnej części każdej strony tekst, który obejmuje informacje o prawach autorskich.

index.php footer.php

Dzięki wykorzystaniu wielu innych skryptów na stronie index.php możemy skupić się na specyficznym dla niej zadaniu — wyświetlaniu listy użytkowników.

17

Spis treści

Kontroluj dane — kontroluj swój świat

8

Zbieranie danych Nie ma nic lepszego niż udane żniwa danych. Możesz uzyskać w ten sposób dostęp do mnóstwa informacji gotowych do analizowania, sortowania, porównywania, łączenia i wykonywania innych zadań obsługiwanych przez Twoją fantastyczną aplikację sieciową. Przyjemne? O tak. Jednak uzyskanie kontroli nad danymi w bazie MySQL — podobnie jak prawdziwe żniwa — wymaga ciężkiej pracy i dużej wiedzy. Użytkownicy wymagają czegoś więcej niż przestarzałe i nudne dane. Chcą informacji, które wzbogacają ich wiedzę, dają satysfakcję i są ważne. Na co więc czekasz? Uruchom traktor MySQL i ruszaj do pracy! Idealnie niedopasowani

Nie znosi ich!

Uwielbia je.

Horrory Niedopasowanie!

Horrory

Niechęć Mai do horrorów oznacza niedopasowanie.

?

?

mismatch_user user_id username password join_date first_name last_name gender birthdate city state picture

mismatch_response

response_id response user_id topic_id

18

mismatch_topic topic_id name category

462

Aplikacja Niedopasowani opiera się na danych

463

Utwórz model bazy danych za pomocą schematu

465

Łączenie kilku tabel

470

Klucze zewnętrzne w praktyce

471

Jeden wiersz pasuje do jednego wiersza

472

Jeden wiersz łączy się z wieloma

473

Wiersze w relacji wiele do wielu

474

Tworzenie kwestionariusza na potrzeby aplikacji Niedopasowani

479

Zapisywanie odpowiedzi w bazie danych

480

Możemy sterować formularzem za pomocą danych

484

Generowanie formularza z kwestionariuszem w aplikacji Niedopasowani

490

Droga do normalności

496

W czasie normalizacji myśl w kategoriach atomów

497

Trzy kroki do znormalizowanej bazy danych

499

Modyfikowanie bazy aplikacji Niedopasowani

503

Czy baza aplikacji Niedopasowani jest naprawdę znormalizowana?

504

Zapytanie w zapytaniu wewnątrz zapytania…

506

Złączmy tabele

507

Łączenie za pomocą kropek

508

To jeszcze nie wszystkie możliwości złączeń wewnętrznych

509

Pseudonimy tabel i kolumn

511

Pomoc ze strony złączeń

512

Pięć kroków do udanego niedopasowania

519

Porównywanie osób pod kątem niedopasowania

521

Potrzebujemy pętli FOR

522

Spis treści

Funkcje niestandardowe i do obsługi łańcuchów znaków

9

Dzięki funkcjom żyje się lepiej Funkcje pozwalają znacznie podnieść poziom aplikacji. Używałeś już funkcji języka PHP do wykonywania różnych zadań. W tym rozdziale poznasz kilka innych funkcji wbudowanych. Następnie nauczysz się tworzyć własne, niestandardowe funkcje, które pozwolą Ci uzyskać niewyobrażalne efekty. Może nie uda Ci się wyhodować w ten sposób laserowych rekinów, ale niestandardowe funkcje usprawniają kod i umożliwiają jego wielokrotne wykorzystanie. Trudno jest znaleźć dobrą ryzykowną pracę

534

Wyszukiwanie nie daje możliwości popełnienia błędu

536

Dzięki słowu kluczowemu LIKE zapytania SQL mogą być elastyczne

537

Podziel łańcuch znaków na pojedyncze słowa

542

Funkcja implode() tworzy łańcuch znaków przy użyciu podłańcuchów

545

Wstępne przetwarzanie szukanego łańcucha znaków

551

Zastępowanie niepotrzebnych znaków w szukanym tekście

552

Potrzebujemy poprawnych szukanych łańcuchów

556

Kopiowanie niepustych elementów do nowej tablicy

557

Czasem potrzebny jest tylko fragment łańcucha

560

Pobieranie podłańcuchów z obu stron tekstu

561

Można posortować wyniki w kilku zapytaniach

564

Funkcje umożliwiają wielokrotne wykorzystanie kodu

568

Zbuduj zapytanie za pomocą niestandardowej funkcji

569

SWITCH obsługuje więcej decyzji niż IF

574

Sortowanie w funkcji build_query()

577

Możemy podzielić wyniki na strony

580

Pobieranie tylko potrzebnych wierszy dzięki klauzuli LIMIT

581

Zarządzanie odnośnikami związanymi z klauzulą LIMIT

582

Kontrolowanie danych potrzebnych do obsługi stronicowania

583

Konfigurowanie zmiennych używanych do stronicowania

584

Poprawianie zapytania, które pobiera stronicowane wyniki

585

Generowanie odnośników do nawigacji po stronach

586

Tworzenie kompletnego skryptu do wyszukiwania ofert

589

Kompletny skrypt do wyszukiwania ofert — ciąg dalszy

590

19

Spis treści

Wyrażenia regularne

10

Reguły zastępowania Funkcje do obsługi łańcuchów znaków są bardzo przydatne, ale mają pewne ograniczenia. Oczywiście potrafią określić długość tekstu, skrócić go i zastąpić wybrane znaki innymi. Jednak czasem potrzebne są bardziej złożone operacje związane z tekstem. Wtedy pomocne są wyrażenia regularne. Przy ich użyciu można precyzyjnie modyfikować łańcuchy znaków na podstawie zestawu reguł, a nie pojedynczego kryterium.

Imi: Jacek Nazwisko: Szybki E-mail: [email protected] Telefon: (555) 526 4652 Szukana praca: Ninja

Użytkownicy serwisu Ryzykowne prace mogą zamieszczać w nim życiorysy

594

Określ, jaki format powinny mieć dane

598

Utwórz wzorzec numerów telefonów

601

Dopasuj dane do wzorca za pomocą wyrażeń regularnych

602

Tworzenie wzorców za pomocą metaznaków

604

Dopracuj wzorce za pomocą klas znaków

611

Wyszukiwanie wzorców za pomocą funkcji preg_match()

616

Ustandaryzuj numery telefonów

623

Usuwanie niepożądanych znaków

624

Dopasowywanie adresów e-mail może być trudne

628

Przyrostki domen są wszędzie

630

Użyj języka PHP do walidacji domeny

631

Walidacja adresów e-mail — łączenie wszystkich elementów

632

Pojawił się komunikat błędu, po czym wpisałem pełny numer telefonu. Następnie dostałem posadę ninji!

Imi: Jacek Nazwisko: Szybki E-mail: [email protected] Telefon: (555) 526 4652 Szukana praca: Ninja

20

Spis treści

Wizualizowanie danych i inne zagadnienia

11

Dynamiczne dodawanie grafiki Wszyscy wiemy, jakie możliwości dają odpowiednie zapytania i zbiory wyników. Jednak dane nie zawsze są w pełni zrozumiałe. Czasem warto przedstawić je w innym, bardziej wizualnym świetle. PHP umożliwia wyświetlanie graficznej reprezentacji danych z bazy w postaci wykresów kołowych, wykresów słupkowych, diagramów Venna, plam Rorschacha i tak dalej. Pomaganie użytkownikom w zrozumieniu danych to swego rodzaju gra. Jednak nie wszystkie wartościowe grafiki w aplikacjach PHP pochodzą z bazy danych. Czy wiedziałeś, że za pomocą dynamicznie generowanych rysunków można powstrzymać roboty spamujące?

Dodaj wynik, dodaj wynik, dodaj wynik, dodaj wynik, dodaj wynik, dodaj wynik…

Powrót Gitarowych wojen: narodziny maszyn

638

Żaden formularz na dane wejściowe nie jest bezpieczny

639

Musimy oddzielić ludzi od maszyn

640

Możemy pokonać automatyzację automatyzacją

643

Generowanie tekstu hasła w teście CAPTCHA

645

Generowanie rysunku z testem CAPTCHA

646

Funkcje graficzne biblioteki GD

648

Wyświetlanie tekstu za pomocą innych czcionek

652

Generowanie losowych rysunków z testami CAPTCHA

655

Przywracanie normalności w Gitarowych wojnach

657

Dodawanie testu CAPTCHA do skryptu do dodawania wyników

659

Pięć wymiarów niedopasowania

662

Diagramy niedopasowania

663

Zapisywanie danych na potrzeby wykresu

664

Od jednej tablicy do drugiej

668

Tworzenie tablicy niedopasowanych tematów

670

Plan tworzenia wykresu

671

Analizowanie kategorii

672

Określanie liczby kategorii

673

Podstawy rysowania wykresów

676

Rysowanie i wyświetlanie rysunku z wykresem słupkowym

679

Osobne rysunki z wykresami dla wszystkich

682

Użytkownicy serwisu Niedopasowani polubili wykresy

685

To niedorzeczne! Nie zdołam przefiltrować wszystkich tych danych. Większość z nich wygląda na nieprawdziwe, a ja nawet nie wiem, czym jest „frowney”.

21

Spis treści

Rozpowszechnianie danych i usługi sieciowe

12

Interfejs do komunikacji ze światem Świat jest wielki, czego nie można ignorować w czasie tworzenia aplikacji sieciowych. Nie chcesz przecież, aby użytkownicy zignorowali Twoją witrynę. Doskonałym sposobem na dostrojenie aplikacji do świata jest rozpowszechnianie danych. Technika ta sprawia, że użytkownicy mogą subskrybować informacje i otrzymywać je bez konieczności odwiedzania witryny. Ponadto aplikacja może stanowić interfejs do innych programów (służą do tego usługi sieciowe) i korzystać z danych z zewnętrznych serwisów, co otwiera przed programistą dodatkowe możliwości.

Niektóre programy pocztowe obsługują rozsyłane informacje, co pozwala użytkownikom otrzymywać aktualne wiadomości z witryny w taki sam sposób, jak listy elektroniczne.

Także wiele standardowych przeglądarek umożliwia przeglądanie rozsyłanych informacji, wśród których można szybko znaleźć najnowsze wiadomości zamieszczone w witrynie. Nawet urządzenia przenośne zapewniają dostęp do rozsyłanych danych, które są dostarczane automatycznie po zmianie zawartości witryny.

22

Marek musi poinformować świat o zaginięciu Kła

688

Przesyłanie danych o porwaniach do użytkowników

689

RSS pozwala przesyłać zawartość witryny do użytkowników

690

RSS to w rzeczywistości XML

691

Z bazy danych do czytnika kanałów RSS

696

Wizualizowanie kodu RSS

699

Dynamiczne generowanie kanału RSS

702

Odnośnik do kanału RSS

706

Jeden film jest wart miliona słów

708

Pobieranie materiałów od innych

710

Rozpowszechnianie filmów z YouTube

711

Przesyłanie żądania danych o filmach do serwisu YouTube

712

Marek jest gotów do utworzenia żądania REST

716

YouTube komunikuje się w języku XML

720

Analiza kodu XML odpowiedzi z serwisu YouTube

724

Wizualizowanie danych XML z opisem filmów

725

Dostęp do danych XML za pomocą obiektów

726

Od elementów XML do obiektów PHP

727

Pobieranie danych XML za pomocą obiektów

728

Nie zapominaj o przestrzeniach nazw!

729

Obserwatorzy zauważyli Kła

731

Rozmieść wyświetlane filmy

732

Formatowanie danych o filmach w celu ich wyświetlenia

733

Spis treści

Pozostałości

A

Dziesięć najważniejszych tematów (których nie poruszyliśmy) Nawet po omówieniu wszystkiego zawsze znajdą się jakieś dodatkowe informacje. Warto, żebyś poznał jeszcze kilka innych zagadnień. Uznaliśmy, że nie można ich pominąć, choć wymagają tylko krótkiej wzmianki. Dlatego zanim odłożysz książkę, zapoznaj się z tymi krótkimi, ale ważnymi ciekawostkami na temat języków PHP i MySQL. Ponadto skoro już doszedłeś do tego miejsca, zostało Ci do końca tylko kilka niedługich dodatków… indeks… może kilka reklam… i to będzie już naprawdę koniec. Obiecujemy! Numer 1. Dopasowywanie kodu do języka PHP 4 i funkcji mysql

744

Numer 2. Uprawnienia użytkowników w MySQL

746

Numer 3. Zgłaszanie błędów w MySQL

748

Numer 4. Obsługa wyjątków w kodzie PHP

749

Numer 5. Obiektowy język PHP

751

Numer 6. Zabezpieczanie aplikacji PHP

753

Numer 7. Zabezpieczanie aplikacji przed atakami XSS

755

Numer 8. Pierwszeństwo operatorów

757

Numer 9. Czym różni się język PHP 5 od PHP 6?

758

Numer 10. Wykorzystanie kodu PHP innych osób

760

BANK W DATOWIE POYCZKI I KREDYTY

23

Spis treści

Konfigurowanie środowiska programistycznego

B Komputer serwerowy

Serwer WWW Serwer bazodanowy

24

Miejsce do zabawy Potrzebujesz miejsca, w którym będziesz mógł przetestować nowe umiejętności z obszaru technologii PHP i MySQL bez narażania danych na ataki w sieci WWW. Zawsze warto mieć bezpieczny obszar do rozwijania aplikacji PHP przed udostępnieniem ich światu. W tym dodatku dowiesz się, jak zainstalować serwer WWW, bazę danych MySQL i język PHP, aby przygotować bezpieczne miejsce do pracy oraz ćwiczeń. Utwórz środowisko do programowania w języku PHP

762

Sprawdź dostępne komponenty

762

Czy masz serwer WWW?

763

Czy masz PHP? W której wersji?

763

Czy masz zainstalowany serwer MySQL? Którą wersję?

764

Zacznij od serwera WWW

765

Instalowanie serwera Apache — zakończenie

766

Instalowanie PHP

766

Etapy instalowania PHP

767

Etapy instalowania PHP — zakończenie

768

Instalowanie MySQL

768

Etapy instalowania serwera MySQL w systemie Windows

769

Włączanie PHP w systemie Mac OS X

772

Etapy instalowania MySQL w systemie Mac OS X

772

Przenoszenie kodu ze środowiska produkcyjnego do publicznie dostępnej witryny

774

Zrób zrzut danych (i tabel)

775

Przygotowania do użycia zrzutu danych

775

Przenoszenie zrzuconych danych na serwer publiczny

776

Łączenie się z serwerem publicznym

777

Spis treści

Rozszerzanie PHP

C

Jeszcze więcej możliwości To prawda, że za pomocą PHP i MySQL możesz tworzyć doskonałe aplikacje sieciowe. Jednak wiesz, że musi istnieć coś jeszcze. Rzeczywiście tak jest. W tym krótkim dodatku zobaczysz, jak zainstalować rozszerzenie mysqli i bibliotekę graficzną GD. Opiszemy też kilka innych wartościowych dodatków do języka PHP. Czasem nie ma nic złego w tym, że chcemy czegoś więcej. Rozszerzanie języka PHP

780

A w komputerach Mac…

783

Powinieneś zobaczyć pliki php_gd2.dll i php_mysqli.dll.

ie Pobierz rozszerzene mysqli dopasowansji do używanej wer języka PHP.

S

Skorowidz

785

25

Jak korzystać z tej książki?

Wprowadzenie Nie mogę uwierzyć, że umieścili takie rzeczy w książce o językach PHP i MySQL!

Czy ta książka jest dla Ciebie? Ta książka jest dla każdego kto ma pieniądze by za nią zapłacić. Będzie wspaniałym prezentem dla kogoś specjalnego.

na kluczowe pytanie: W tym podrozdziale odpowiadamy RZECZY w książce IE TAK „Dlaczego autorzy umieścili o technologiach PHP i MySQL?”.

jesteś tutaj 

27

Jak korzystać z tej książki

Dla kogo przeznaczona jest ta książka? Jeśli odpowiesz „tak” na wszystkie poniższe pytania: 1

Czy jesteś projektantem stron, który zna HTML lub XHTML i chce tworzyć strony WWW na wyższym poziomie?

2

Czy chcesz wyjść poza proste strony HTML, aby nauczyć się, zrozumieć i zapamiętać, jak używać języków PHP i MySQL do tworzenia aplikacji sieciowych?

3

Czy wolisz stymulujące rozmowy w trakcie przyjęcia od sztywnych i nudnych wykładów akademickich?

to ta książka będzie dla Ciebie odpowiednia.

Kto prawdopodobnie powinien zrezygnować z tej książki? Jeśli odpowiesz „tak” na którekolwiek z poniższych pytań: 1

Czy podstawowe zagadnienia programistyczne, na przykład zmienne i pętle, są Ci zupełnie obce? (Jednak nawet jeśli nigdy wcześniej nie pisałeś programów, prawdopodobnie opanujesz potrzebne zagadnienia w trakcie czytania tej książki).

2

Czy jesteś doświadczonym programistą PHP, który szuka książki encyklopedycznej?

3

Boisz się spróbować czegoś nowego? Czy wolałbyś leczenie kanałowe niż połączenie pasków z kratą? Czy uważasz, że książka techniczna nie może być poważna, jeśli autorzy tworzą bazę z danymi na temat porwań przez kosmitów?

to ta książka Ci się nie spodoba.

(Uwaga z działu marke wszystkich o wystarcz tingu: ta książka jest dla ająco zasobnym portfe lu).

28

Wprowadzenie

Wprowadzenie

Wiemy, co sobie myślisz „Jak coś takiego może być poważną książką na temat PHP i MySQL?”. „Po co są te wszystkie rysunki?”.

Twój mózg uważa, że TO jest ważne.

„Czy mogę nauczyć się czegokolwiek w taki sposób?”.

Wiemy, co sobie myśli Twój mózg Twój mózg uwielbia nowe informacje. Nieustannie poszukuje, skanuje i czeka na coś niezwykłego. Został zbudowany w ten sposób i pomaga Ci utrzymać się przy życiu. Co więc robi Twój mózg przy napotkaniu rutynowych, zwykłych, standardowych zjawisk? Wszystko, co może, aby nie przeszkadzały w wykonywaniu jego prawdziwej pracy, czyli w rejestrowaniu rzeczy, które są ważne. Umysł nie zajmuje się zachowywaniem bezwartościowych informacji, które nigdy nie przechodzą przez filtr: „to jest kompletnie nieistotne”. Skąd mózg wie, co jest ważne? Załóżmy, że w trakcie wycieczki napotkasz tygrysa. Co się wtedy dzieje w mózgu i ciele? Neurony przesyłają sygnały. Pojawiają się emocje. Przekaźniki chemiczne płyną szeroką falą.

Świetnie. Jeszcze tylko 750 następnych nudnych stron.

Dzięki temu mózg wie, co jest istotne.

To musi być istotne! Nie zapomnij o tym! Wyobraź sobie, że znajdujesz się w domu lub bibliotece. Jest to bezpieczny, ciepły i pozbawiony tygrysów obszar. Uczysz się w ramach przygotowań do egzaminów lub próbujesz zgłębić skomplikowane techniczne zagadnienie, które zdaniem a, przełożonego możesz opanować w tydzień, a co najwyżej w 10 dni. Twój mózg uważ rte Jest jednak pewien problem. Mózg chce wyświadczyć Ci wielką przysługę. Próbuje upewnić się, że w oczywisty sposób nieistotne treści nie zajmą ograniczonych zasobów. Lepiej poświęcić je na zapamiętanie naprawdę ważnych rzeczy. Takich jak tygrysy lub ogień. Takich jak nauka szybkiego ukrywania okna z nagraniem UFO w serwisie YouTube, kiedy na horyzoncie pojawia się szef.

że TO nie jest wa zapamiętania.

Nie ma prostego sposobu, aby przekazać mózgowi następującą informację: „Hej, mózgu, wielkie dzięki, ale niezależnie od tego, jak nudna jest ta książka i jak niski wynik osiągam obecnie na emocjonalnej skali Richtera, naprawdę chcę zapamiętać te informacje”. Nagranie UFO w serwisie YouTube jest dla mózgu dużo ciekawsze od jakichś komputerowych książek.

jesteś tutaj 

29

Jak korzystać z tej książki

uczniach Myślimy o czytelnikach książek z serii „Head First” jak o tać, a następnie upewnić Co jest potrzebne, aby się czegoś nauczyć? Najpierw trzeba coś zapamię faktów w pamięci. Według się, że nie zostanie to zapomniane. Zadanie nie polega na umieszczaniu ogii wychowawczej uczenie najnowszych badań z dziedziny nauk kognitywnych, neurobiologii i psychol i Twój mózg. się wymaga czegoś więcej niż samego tekstu na stronie. Wiemy, co pobudz

user_id

Head First: Niektóre z zasad uczenia się zastosowane w książkach z serii zapamiętania niż same Używanie elementów graficznych. Rysunki są dużo łatwiejsze do nawet o 89% w badaniach a (popraw niejsza efektyw znacznie jest słowa i sprawiają, że nauka enie dotyczących odpamiętywania i transferu wiedzy). Obrazy ułatwiają też zrozumi zamiast niego obok lub u rysunk na tekstu czenie Umiesz eń. omawianych zagadni = 1 ństwo na dole strony lub na następnej kartce dwukrotnie zwiększa prawdopodobie enia. zagadni danego cego dotyczą u rozwiązania problem Błąd! o Używanie formy dialogu i spersonalizowanego stylu. W niedawn nieznane. Hasło wyniki przeprowadzonych badaniach uczestnicy uzyskiwali nawet o 40% lepsze ka, w testach uczenia się, jeśli treść była przekazywana bezpośrednio do czytelni ać opowiad Należy postaci. ej formaln w nie a w pierwszej osobie i w formie dialogu, na trochę luzu. sobie Pozwól ego. potoczn języka używać historie, zamiast wykładać fakty. Należy wcy? wykłado czy u przyjęci na cy rozmów jącemu Komu Ty poświęciłbyś więcej uwagi: interesu Jeśli nie zmusisz Skłanianie czytelników do głębszego przetwarzania informacji. zmotywowany, być musi k Czytelni zmieni. nie neuronów do aktywnej pracy, w umyśle nic się nia wniosków wyciąga ów, problem wania zaangażowany, ciekawy i mieć inspirację do rozwiązy prowokujące pytania ia, ćwiczen ia, wyzwan i wytwarzania nowej wiedzy. Potrzebne są do tego . zmysłów wiele i mózgu półkule do myślenia, a także zadania, które angażują obie odobnie wszyscy Przyciąganie — i utrzymywanie — uwagi czytelników. Prawdop usypialiśmy już ale , nauczyć czegoś zetknęliśmy się z sytuacją, kiedy naprawdę chcieliśmy się jące, dziwne, interesu łe, niezwyk są które , przy pierwszej stronie. Mózg zwraca uwagę na zjawiska ń technicznych nie zagadnie h kowanyc skompli i nieoczekiwane i które przyciągają wzrok. Uczenie się nowych j formie. ciekawe w podane zostaną jeśli cje, musi być nudne. Mózg dużo szybciej zapamięta takie informa w dużym stopniu zależy od ich Wzbudzanie emocji. Wiadomo, że łatwość zapamiętywania informacji ętujesz, kiedy coś odczuwasz. Zapami jesz. emocjonalnego zabarwienia. Zapamiętujesz to, czym się przejmu na myśli takie emocje Mamy psie. jego i Nie, nie zamierzamy opowiadać wzruszających historii o chłopcu „jestem mistrzem”, poczucie także a ?”, jak zaskoczenie, ciekawość i rozbawienie, podejście „o co chodzi… innych zdaniem — go kowane pojawiające się po rozwiązaniu zagadki, nauczeniu się skompli Robert Wiem Więcej osób — zagadnienia lub zdaniu sobie sprawy, że wiesz coś, czego nie wie o Technologii od Was Wszystkich z działu inżynierii. Mała poprawka. W rzeczywistości przedstawiamy wzruszającą historię o chłopcu i jego psie. Zwierzak został uprowadzony przez kosmitów, a Ty pomożesz w jego odnalezieniu!

30

Wprowadzenie

Wprowadzenie

Metapoznanie: myślenie o myśleniu Jeśli naprawdę chcesz się uczyć i robić to szybko oraz na głębszym poziomie, powinieneś zwracać uwagę na to, jak sterujesz uwagą. Pomyśl o tym, jak myślisz. Dowiedz się, jak się uczysz. Większość osób nie uczestniczy w trakcie edukacji w zajęciach z metapoznania lub teorii uczenia się. Nauczyciele oczekują od nas, że będziemy się uczyć, jednak rzadko uczą, jak to robić.

Zastanawiam się, jak przekonać mózg, żeby zapamiętał ten materiał…

Zakładamy, że jeśli czytasz tę książkę, naprawdę chcesz się dowiedzieć, jak rozwijać oparte na bazach danych witryny za pomocą technologii PHP i MySQL. Ponadto prawdopodobnie nie zamierzasz poświęcać na naukę zbyt dużo czasu. Jeśli chcesz wykorzystać wiedzę przedstawioną w tej książce, musisz zapamiętać to, co przeczytasz, a to wymaga zrozumienia materiału. Aby jak najlepiej wykorzystać tę książkę, a także dowolne teksty i doświadczenia, powinieneś wziąć odpowiedzialność za swój mózg i skupić jego uwagę na tych treściach. Rozwiązanie polega na sprawieniu, aby mózg postrzegał poznawany materiał jako coś Naprawdę Ważnego. Jako coś kluczowego dla Twojego dobrostanu. Tak istotnego jak tygrys. W przeciwnym razie będziesz musiał toczyć nieustanną walkę z mózgiem, który z całych sił próbuje zapobiec zapamiętaniu nowych treści.

W jaki sposób MOŻESZ zmusić mózg do traktowania języków PHP i MySQL jak głodnego tygrysa? Istnieje powolny, żmudny sposób, a także szybsze i skuteczniejsze rozwiązanie. Wolna metoda polega na powtarzaniu. Oczywiście wiesz, że jesteś w stanie zrozumieć i zapamiętać najnudniejsze informacje, jeśli będziesz wielokrotnie wtłaczać je do pamięci. Przy wystarczającej liczbie powtórzeń mózg uzna: „Nie czuję, żeby to było dla niego istotne, jednak on wciąż i wciąż się temu przygląda, więc musi to być ważne”. Szybszy sposób polega na wykonywaniu dowolnych czynności zwiększających aktywność mózgu, a przede wszystkim pobudzających różne rodzaje jego aktywności. Techniki opisane na poprzedniej stronie to ważne elementy tego rozwiązania. Udowodniono, że wszystkie te metody sprawiają, iż mózg działa w sposób bardziej korzystny dla czytelnika. Badacze między innymi wykazali, że umieszczanie tekstu na opisywanych rysunkach (a nie w innych miejscach strony, na przykład w nagłówku lub akapicie) sprawia, iż mózg próbuje odkryć powiązania między słowami a obrazem, co powoduje uaktywnienie większej liczby neuronów. Więcej aktywnych neuronów oznacza większe prawdopodobieństwo uznania przez mózg, że dany materiał jest wart poświęcenia mu uwagi i — prawdopodobnie — zapamiętania.

Nie interesują mnie neurony — niektórzy przyszli tu grać rocka!

Forma dialogu pomaga, ponieważ ludzie zwykle poświęcają informacjom więcej uwagi, kiedy uznają, że toczą rozmowę, gdyż starają się śledzić i podtrzymywać ją do końca. Zaskakujące jest, że mózg nie zawsze dba o to, że „konwersacja” toczy się między Tobą a książką! Z kolei jeśli autor używa formalnego i poważnego stylu, mózg postrzega sytuację jako podobną do wykładów w sali pełnej innych pasywnych odbiorców. Nie ma wtedy potrzeby zachowywania czujności. Jednak obrazy i forma dialogu to dopiero początek…

jesteś tutaj 

31

Jak korzystać z tej książki

Oto, co MY zrobiliśmy Użyliśmy rysunków, ponieważ mózg lepiej przetwarza obrazy niż tekst. Dla mózgu rysunek naprawdę jest wart tysiąca słów. Kiedy tekst i obraz występują wspólnie, umieszczamy słowa na rysunkach, ponieważ mózg działa efektywniej, kiedy informacje tekstowe znajdują się na opisywanych elementach, a nie w nagłówkach lub akapitach. Stosujemy nadmiar, co oznacza, że powtarzamy te same informacje w różny sposób, przy użyciu odmiennych rodzajów środków przekazu, a skierowane są one do wielu zmysłów, co zwiększa prawdopodobieństwo zarejestrowania danych w więcej niż jednym obszarze mózgu.

Horrory

Niedopasowanie!

Horrory

Używamy pojęć i rysunków w nieoczekiwany sposób, ponieważ mózg jest nastawiony na poszukiwanie nowości. Ponadto stosujemy obrazy i pomysły o przynajmniej niewielkim zabarwieniu emocjonalnym, ponieważ mózg zwraca uwagę na czynniki biochemiczne związane z emocjami. To, co wzbudza w Tobie odczucia, ma większą szansę znaleźć się w pamięci, nawet jeśli te odczucia to nic więcej jak rozbawienie, zaskoczenie lub zainteresowanie. Używamy osobistego stylu i formy dialogu, ponieważ mózg poświęca informacjom więcej uwagi, kiedy uzna, że dana osoba prowadzi rozmowę, niż przy pasywnym odbiorze prezentacji. Dzieje się tak nawet w trakcie czytania. Umieściliśmy w książce ponad 80 ćwiczeń, ponieważ mózg lepiej uczy się i zapamiętuje informacje w trakcie wykonywania zadań niż przy czytaniu o nich. Przedstawione ćwiczenia są trudne, ale wykonalne, ponieważ większość osób preferuje zadania o takim właśnie poziomie trudności. Uwzględniliśmy wiele stylów uczenia się, ponieważ Ty możesz preferować procedury z opisem czynności krok po kroku, podczas gdy inni mogą chcieć najpierw ogólnie zrozumieć zagadnienie lub zobaczyć przykład. Jednak niezależnie od preferencji zapoznanie się z tymi samymi treściami w różnych formach jest korzystne dla każdego. Stosujemy materiał skierowany do obu półkul mózgowych, ponieważ im większe jest zaangażowanie mózgu, z tym większym prawdopodobieństwem nauczysz się i zapamiętasz informacje oraz tym łatwiej będzie Ci zachować koncentrację. Ponieważ aktywność jednej półkuli zwykle oznacza możliwość odpoczynku dla drugiej, zastosowane rozwiązanie pozwala na skuteczniejszą naukę przez dłuższy czas. W książce zamieściliśmy też historyjki i ćwiczenia, w których prezentujemy więcej niż jeden punkt widzenia. Mózg pracuje aktywniej, kiedy musi dokonywać ocen i sądów.

Spróbuj tego!

Jazda próbna

Wprowadzamy utrudnienia w postaci ćwiczeń i pytań, na które nie zawsze można udzielić prostej odpowiedzi. Jest to korzystne, ponieważ mózg skuteczniej uczy się informacji i zapamiętuje je w trakcie pracy. Wyobraź sobie, że chcesz poprawić sprawność fizyczną, wyłącznie obserwując ćwiczące osoby. Postaraliśmy się przy tym, aby wysiłek dotyczył odpowiednich elementów, abyś nie musiał poświęcać mocy ani jednej szarej komórki na zrozumienie skomplikowanych przykładów oraz trudnego, przeładowanego żargonem lub lakonicznego testu. Przedstawiamy osoby. W historyjkach, przykładach, na obrazkach i w innych miejscach wprowadzamy postacie, ponieważ Ty sam jesteś człowiekiem, a mózg zwraca większą uwagę na ludzi niż na rzeczy.

32

Wprowadzenie

NIE UFAJ TEJ TWARZY!

Wprowadzenie

A oto, co TY możesz zrobić, aby zmusić mózg do posłuszeństwa My wykonaliśmy swe zadanie. Reszta zależy od Ciebie. Poniższe wskazówki to dobry punkt wyjścia. Zwracaj uwagę na to, o czym informuje Cię mózg, i postaraj się ustalić, które techniki są skuteczne dla Ciebie. Próbuj stosować nowe rozwiązania. Wytnij tę stronę i przyczep do lodówki.

1

Zwolnij. Im więcej zrozumiesz, tym mniej będziesz musiał zapamiętać.

6

Mówienie aktywizuje różne części mózgu. Jeśli chcesz zrozumieć informacje lub zwiększyć prawdopodobieństwo pamiętania ich w przyszłości, powtarzaj je na głos. Jeszcze skuteczniejsze jest tłumaczenie ich innym osobom. W ten sposób nauka trwa krócej, a przy okazji możesz odkryć nowe zagadnienia, o których nie pomyślałeś w trakcie czytania.

Nie ograniczaj się do czytania. Zatrzymaj się i zastanów. Kiedy natrafisz na pytanie, nie przechodź od razu do odpowiedzi. Wyobraź sobie, że ktoś naprawdę Cię pyta. Im bardziej zmusisz mózg do myślenia, z tym większym prawdopodobieństwem nauczysz się materiału i zrozumiesz go. 2

Wykonuj ćwiczenia. Rób notatki.

7

Zamieściliśmy ćwiczenia, jednak wykonanie ich za Ciebie nie różniłoby się od uczestnictwa przez inną osobą w treningu w Twoim zastępstwie. Nie ograniczaj się do przyglądania się ćwiczeniom. Użyj ołówka. Jest wiele dowodów na to, że aktywność fizyczna w trakcie nauki zwiększa jej efektywność. 3

Czytaj punkty „Nie istnieją głupie pytania”.

Zadbaj o to, aby lektura tej książki była ostatnią rzeczą przed snem, a przynajmniej ostatnim zadaniem wymagającym uwagi.

Część nauki (przede wszystkim przenoszenie wiedzy do pamięci długotrwałej) ma miejsce po odłożeniu książki. Mózg potrzebuje czasu wolnego w celu dalszego przetworzenia informacji. Jeśli w tym okresie zajmiesz się czymś nowym, utracisz część nabytej wiedzy. 5

Pij dużo wody.

Mózg działa najlepiej, kiedy ma dobry dostęp do płynów. Odwodnienie (które może wystąpić, zanim poczujesz pragnienie) ma negatywny wpływ na funkcjonowanie poznawcze. PHP i MySQL umożliwiają tworzenie prawdziwych aplikacji sieciowych. Nie zapomnij przesłać programów na działający serwer WWW i wypróbować ich.

Zwracaj uwagę na sygnały płynące od mózgu.

Uważaj na to, aby nie przemęczyć mózgu. Jeśli zauważysz, że pobieżnie zapoznajesz się z zagadnieniem lub zapominasz, co przeczytałeś, zrób sobie przerwę. Po przekroczeniu pewnego punktu nie nauczysz się więcej, zmuszając się do pracy, a możesz nawet zaszkodzić w ten sposób procesowi nauki. 8

Zapoznaj się z nimi wszystkimi. Nie są to opcjonalne ramki — te punkty stanowią integralną część treści książki! Nie pomijaj ich. 4

Powtarzaj na głos nowe informacje.

Staraj się wzbudzić w sobie uczucia.

Mózg musi wiedzieć, że zdobywane informacje są ważne. Staraj się wciągnąć w historyjki. Wymyślaj własne podpisy do fotografii. Nawet niechęć wobec słabych żartów jest lepsza niż brak odczuć. 9

Pisz dużo programów!

Jest tylko jeden sposób, aby nauczyć się rozwoju oprogramowania: trzeba tworzyć programy. To właśnie będziesz robił w trakcie czytania tej książki. Pisanie kodu to umiejętność, a jedyny sposób na osiągnięcie w niej biegłości polega na praktyce. Będziesz miał do tego wiele okazji. Każdy rozdział zawiera ćwiczenia, które wymagają od Ciebie rozwiązania pewnego problemu. Nie pomijaj ich. Rozwiązywanie ćwiczeń to bardzo skuteczna metoda uczenia się. Zamieściliśmy rozwiązania wszystkich ćwiczeń. Nie wahaj się zajrzeć do nich, jeśli nie potrafisz sobie poradzić z zadaniem (łatwo jest przeoczyć istotny drobiazg), jednak przedtem zawsze staraj się samodzielnie znaleźć odpowiedź. Zawsze pamiętaj o tym, aby uruchomić rozwiązanie przed przejściem do dalszej części książki.

jesteś tutaj 

33

Jak korzystać z tej książki

Przeczytaj koniecznie Jest to książka warsztatowa, a nie teoretyczna. Celowo pominęliśmy wszystkie elementy, które mogłyby utrudnić naukę zagadnień opisywanych w poszczególnych miejscach książki. Kiedy będziesz czytał tę książkę po raz pierwszy, zacznij od początku, ponieważ w dalszych rozdziałach zakładamy, że zapoznałeś się już z wcześniejszym materiałem.

Zaczynamy od omówienia prostych zagadnień programistycznych i podstaw łączenia się z bazami danych. Następnie przechodzimy do bardziej zaawansowanych funkcji języka PHP i instrukcji języka MySQL, a na zakończenie opisujemy złożone kwestie związane z aplikacjami. Choć celem jest tworzenie aplikacji, które umożliwiają użytkownikom dodawanie danych i pobieranie ich za pomocą aplikacji, zanim nauczysz się to robić, musisz poznać składnię języków PHP i MySQL. Dlatego zaczniemy od przedstawienia instrukcji w tych językach, które będziesz mógł samodzielnie wypróbować. W ten sposób będziesz mógł natychmiast wykorzystać te technologie i pobudzić swą ciekawość. Następnie, w dalszej części książki, pokazujemy dobre praktyki z obszaru projektowania aplikacji i baz danych. Do tego czasu dobrze opanujesz potrzebną składnię i będziesz mógł skoncentrować się na nauce technik.

Nie omawiamy wszystkich instrukcji, funkcji i słów kluczowych języków PHP i MySQL. Choć mogliśmy umieścić w tej książce wszystkie instrukcje, funkcje i słowa kluczowe języków PHP i MySQL, zdecydowaliśmy się na przygotowanie mniej obszernego tomu, dzięki któremu nauczysz się najważniejszych technik. Znajdziesz tu polecenia, których będziesz używał niemal cały czas. Kiedy skończysz pracę z tą książką, będziesz potrafił znaleźć funkcję, której potrzebujesz do ukończenia rozwijanej właśnie „odlotowej” aplikacji.

Używamy wersji PHP 5 i MySQL 5.0. Ponieważ wiele osób wciąż korzysta z PHP 4 i 5, wszędzie, gdzie to możliwe, unikamy kodu specyficznego dla wersji 4., 5. lub 6. Sugerujemy używanie PHP 5 lub 6 i MySQL 5 lub 6 w trakcie poznawania zagadnień omawianych w książce. W czasie jej tworzenia koncentrowaliśmy się na PHP 5 i MySQL 5, przy czym dbaliśmy o to, aby kod był zgodny także z nowszymi wersjami.

Potrzebny jest serwer WWW z obsługą PHP. Kod PHP trzeba uruchamiać na serwerze WWW. Musisz zainstalować Apache’a lub inny serwer WWW na własnym komputerze lub maszynie, do której masz odpowiedni dostęp, aby wywoływać polecenia w języku MySQL operujące na danych. W dodatkach B i C znajdziesz informacje o tym, jak zainstalować PHP i MySQL oraz wzbogacić możliwości tych technologii.

34

Wprowadzenie

W czasie lektury tej książki możesz też używać PHP 4, jednak musisz wprowadzić w kodzie kilka zmian, które opisaliśmy w punkcie 1. w dodatku A.

Wprowadzenie

Używamy języka MySQL. Choć istnieje standardowy język SQL, w tej książce koncentrujemy się na jego specyficznej odmianie, która nosi nazwę MySQL. Po wprowadzeniu kilku zmian składniowych kod z tej książki można uruchomić także w Oracle, MS SQL Server, PostgreSQL, DB2 i kilku innych systemach zarządzania relacyjnymi bazami danych (RDBMS). Jeśli chcesz komunikować się z tymi systemami, musisz znaleźć odpowiednie funkcje języka PHP. Gdybyśmy chcieli opisać wszystkie wersje każdego polecenia, książka miałaby o wiele więcej stron. Szanujemy drzewa, dlatego skoncentrowaliśmy się na dialekcie MySQL.

Zadania NIE są opcjonalne. Ćwiczenia i zadania nie są tylko dodatkiem, ale stanowią integralną część książki. Niektóre z nich pomagają zapamiętać informacje, inne ułatwiają zrozumienie, a jeszcze następne pokazują, jak zastosować wiedzę w praktyce. Nie pomijaj ćwiczeń.

Nadmiar jest celowy i istotny. Jedną ze specyficznych cech książek z serii Head First jest to, że chcemy, abyś naprawdę zrozumiał ich treść. Chcemy, abyś po zakończeniu lektury pamiętał to, czego się nauczyłeś. Większość źródeł wiedzy nie powstaje z myślą o przechowywaniu i odpamiętywaniu informacji, jednak ta książka ma służyć do nauki, dlatego niektóre zagadnienia są omawiane wielokrotnie.

Przykłady są tak krótkie, jak to możliwe. Czytelnicy informują nas, że irytująca jest analiza 200 wierszy przykładowego kodu w poszukiwaniu dwóch instrukcji, które należy zrozumieć. Większość przykładów przedstawiamy w jak najbardziej ograniczonym kontekście, dlatego elementy, których musisz się nauczyć, są przejrzyste i proste. Nie oczekuj, że wszystkie przykłady będą stabilne, a nawet kompletne. Napisaliśmy je specjalnie do nauki, dlatego nie zawsze są w pełni funkcjonalne. Na serwerze FTP umieściliśmy kompletny kod przykładów i aplikacji, który możesz skopiować i wkleić przy użyciu edytora tekstu lub programu MySQL Terminal, a także przesłać w pierwotnej postaci na serwer WWW w celu ich przetestowania. Plik z przykładami znajdziesz pod adresem ftp://ftp.helion.pl/przyklady/htphms.zip.

Niektóre przykłady to kompletne aplikacje o dużych możliwościac h.

Ćwiczenia z serii „Wysil szare komórki” nie mają rozwiązań. Niektóre z nich w ogóle nie mają konkretnego prawidłowego rozwiązania, a przy innych częścią procesu nauki jest ustalenie, czy udzielone odpowiedzi są poprawne i kiedy tak jest. W niektórych zadaniach z serii „Wysil szare komórki” znajdziesz wskazówki, które mają naprowadzić Cię na właściwe rozwiązanie.

jesteś tutaj 

35

Jak korzystać z tej książki

Recenzenci techniczni: Jereme Allen

David Briggs

Will Harris

Stephanie Liese Steve Milano

Harvey Quamen

Chris Shiflett

Recenzenci techniczni: Jereme Allen to starszy projektant witryn z doświadczeniem w stosowaniu najnowszych technologii do tworzenia aplikacji sieciowych. Od ponad dziewięciu lat korzysta z języków PHP i MySQL oraz wielu innych platform, systemów operacyjnych, języków programowania i oprogramowania konstrukcyjnego. David Briggs jest autorem tekstów technicznych i inżynierem do spraw lokalizacji oprogramowania. Mieszka w Birmingham w Anglii. Kiedy nie zajmuje się tłumaczeniem użytkownikom wyjątkowo skomplikowanych funkcji oprogramowania, lubi spacerować po parku z Paulette (jego żoną) i Cleo (rodzinnym psem). Will Harris kieruje działem IT, który świadczy usługi dla 11 firm z czterech kontynentów. Jest też wiceprezesem oddziału organizacji PASS (Professional Association for SQL Server) w Las Vegas. W nocy przebiera się w kostium specjalisty od web 2.0 i pomaga projektantom oraz programistom z serwisu Powered By Geek zagwarantować, że ich platforma do obsługi danych jest elastyczna, przenośna, łatwa w konserwacji i SZYBKA, do czego używa technologii MySQL i Rails. Will lubi też spędzać czas z żoną Heather, cudownymi dziećmi Marą i Ellie oraz psem Swiperem. Stephanie Liese prowadzi szkolenia i jest programistką aplikacji sieciowych. Mieszka w Sacramento w Kalifornii. Kiedy nie wyjaśnia zalet kodu zgodnego ze standardami i nie poprawia układu strony opartego na stylach CSS, aktywnie uczestniczy w zajęciach z jogi.

36

Wprowadzenie

Kiedy Steve Milano nie pisze kodu serwisu The Day JobTM lub nie gra punk rocka z zespołem Onion Flavored Rings w dusznych piwnicach, prawdopodobnie siedzi w domu przy laptopie i zaniedbuje kota Ralpha oraz swą partnerkę Biankę. Harvey Quamen zrezygnował z kariery programisty, aby wejść w ekscytujący i pełen paparazzich świat wyższych uczelni. Obecnie jest profesorem nadzwyczajnym języka angielskiego i nauk humanistycznych w kontekście nowych technologii na Uniwersytecie Stanu Alberta. Prowadzi kursy na temat cyberkultury, literatury XX wieku i programowania aplikacji sieciowych — także z wykorzystaniem języków PHP i MySQL. Chris Shiflett jest dyrektorem technicznym w firmie OmniTI, gdzie odpowiada za zabezpieczanie aplikacji sieciowych i kieruje programami rozwijania takich aplikacji. Chris jest znaną osobistością w społeczności programistów zainteresowanych zabezpieczaniem kodu PHP i aplikacji sieciowych. Prowadzi popularny blog w witrynie shiflett.org, przemawia na konferencjach branżowych na całym świecie i jest założycielem organizacji PHP Security Consortium. Napisał też książki Essential PHP Security (wydawnictwo O’Reilly) i HTTP Developer’s Handbook (wydawnictwo Sams).

Wprowadzenie

Podziękowania Dla redaktorów: Wielkie podziękowania należą się Brettowi McLaughlinowi za fantastyczne sesje tworzenia scenariusza, które pozwoliły nam znaleźć odpowiednią drogę, i za bezwzględne zaangażowanie w nauczanie zgodne z zasadami kognitywistycznymi. Książka nie powstałaby bez heroicznych wysiłków, cierpliwości i nieustępliwości Sandersa Klainfelda. Zawsze potrafił złapać piłeczki, którymi żonglowaliśmy, kiedy upuściliśmy jedną z nich (lub nawet trzy!). Doceniamy to. Mamy nadzieję, że będzie mógł odpocząć kilka dni przed zaangażowaniem się w następny tak trudny projekt.

Brett McLaughlin

Zespó z wydawnictwa O’Reilly: Dziękujemy Lou Barr za fenomenalne umiejętności w zakresie projektowania, dzięki czemu książka jest prawdziwym graficznym arcydziełem. Podziękowania należą się też Brittany Smith za ciężką pracę w ostatnich chwilach tuż przed terminem i Caitrin McCullough za przygotowanie i uruchomienie przykładowych witryn. Dziękujemy też Laurie Petrycki za wiarę w to, że zdołamy napisać następną świetną książkę z serii Head First.

Sanders Kleinfeld

Lou Barr

I inni: Gorąco dziękujemy też Elvisowi Wilsonowi za przygotowanie umieszczonych w serwisie YouTube filmów z kosmitami, które omawiamy w rozdziale 12. Świetna robota! (Zwłaszcza jeśli weźmiemy pod uwagę jego brak zdolności artystycznych).

jesteś tutaj 

37

1. Oywianie statycznych stron

To żyje! I niech teraz spróbuje powiedzieć, że jestem nudny…

Umiesz tworzyć świetne strony za pomocą HTML-a i odrobiny stylów CSS. Zauważyłeś jednak, że użytkownicy Twoich witryn mogą tylko pasywnie przeglądać zawartość witryn. Komunikacja jest jednostronna i planujesz to zmienić. Chcesz poznać opinie użytkowników. Aby dowiedzieć się, o czym myślą internauci, trzeba umożliwić im wprowadzanie danych za pomocą formularzy. Musisz też umieć przetworzyć i pobrać te informacje. Wygląda na to, że podniesienie poziomu witryn wymaga użycia czegoś więcej niż samego kodu HTML.

to jest nowy rozdział 

39

Czasem sam HTML nie wystarcza

Strony HTML są statyczne i nudne Wiesz już, że język HTML doskonale nadaje się do tworzenia stron WWW. Jednak jak sprawić, aby witryny wykonywały określone zadania? Załóżmy, że trzeba przeszukać bazę danych lub wysłać e-mail. Jak to zrobić? HTML tego nie umożliwia, ponieważ jest językiem statycznym, zaprojektowanym do wyświetlania informacji, które nigdy się nie zmieniają.

Halo?

nadaje HTML doskonale ia zdjęć lan iet św wy się do trudno ulubieńców, ale nawiązać przy jego użyciu kownikami. interakcję z użyt

Ci ludzie oczekują na interakcję!

Kod HTML na tych stronach jest określany w trakcie ich tworzeni a przez programistów.

Serwer WWW ieniają rony HTML zm Statyczne st , kiedy programista dy się tylko wte ik .html i prześle go zmodyfikuje pl na serwer.

Przegldarka

Serwer WWW to istotny czynnik w problemie statycznych stron HTML, ponieważ jest tylko nudnym mechanizmem do ich udostępniania. Przeglądarka żąda przesłania strony, serwer zwraca kod HTML i to już wszystko. Aby przekształcić witryny w interaktywne aplikacje sieciowe, trzeba nadać serwerowi nową, bardziej dynamiczną funkcję. Umożliwia to język PHP.

40

Rozdział 1.

trafi tylko Serwer WWW po e strony zwracać statyczn ugiej. dr HTML jedna po

Przy obsłudze tradycyjnych stron HTML serwer zwraca statyczny kod HTML, który jedynie wyświetla informacje.

Ożywianie statycznych stron

PHP ożywia strony WWW

Z małą pomocą serwera!

PHP umożliwia manipulowanie zawartością stron na serwerze tuż przed przesłaniem ich do przeglądarki. Mechanizm ten działa następująco: na serwerze znajduje się skrypt PHP, który może dowolnie modyfikować i generować kod HTML. Strony są następnie przekazywane do przeglądarki, dla której nie jest istotne, czy przy manipulowaniu kodem HTML na serwerze użyto języka PHP.

Przeglądarka nadal otrzymuje standardowe strony HTML, jednak ich kod został dynamicznie wygenerowany przez skrypt PHP na serwerze.

Kod HTML tych stron wygenerowano za pomocą skryptu PHP. Kod ten zmienia się dynamicznie w odpowiedzi na potrzeby aplikacji sieciowej.

Przy użyciu języka PHP serwer WWW może dynamicznie generować strony HTML.

Skrypty PHP znajdują się na serwerze WWW, gdzie są przetwarzane, a następnie zwracane do przeglądarki w formie stron HTML.

Serwer WWW

Przegldarka

PHP zawierają Skrypty PHP także kod a kod HTML, anipuluje PHP, który m kodem HTML.

Dynamiczne strony HTML zmieniają się w wyniku działania skryptów PHP, przez co są niezwykle elastyczne.

Baza danych MySQL

PHP zapisuje dane w bazach i pobiera je oraz dołącza te informacje do kodu HTML, który generuje.

jesteś tutaj 

41

Wysyłamy (internetowe) SOS

Psy w kosmosie Poznaj Marka. Marek zgubił swego psa, Kła. Jednak aby znaleźć zwierzaka, nie wystarczy przeszukać okolicę. Kieł został uprowadzony przez kosmitów, co rozszerza zakres poszukiwań do całej galaktyki. Marek zna HTML i CSS oraz uważa, że specjalna witryna pomoże rozwiązać problem, jeśli różne osoby będą mogły podzielić się doświadczeniami na temat podobnych porwań. Jednak aby uzyskać informacje, Marek potrzebuje witryny, która pobiera od użytkowników dane i informuje go o ich zapisaniu. Nie stanowi to problemu — język HTML udostępnia wiele znaczników do tworzenia formularzy.

Czy ktoś go widział?

ji, Brak jest szczegółowych informac esiony wzni ał zost Kieł że , omo wiad ale w górę w promieniu światła.

Marek zna HTML i CSS oraz uważa, że może wykorzystać internet do znalezienia Kła — swego psa.

42

Rozdział 1.

Ożywianie statycznych stron

Formularz pomoże Markowi poznać całą historię Nowa witryna Marka, PorwaniPrzezUFO.com, ma pomóc w nawiązaniu kontaktu z uprowadzonymi, którzy mogą mieć informacje związane ze zniknięciem Kła. Marek wie, że potrzebuje formularza HTML, aby pobrać historie porwań. Ponadto musi odkryć, czy uprowadzeni zetknęli się z Kłem w trakcie swych międzygalaktycznych podróży. Marek potrzebuje Twojej pomocy przy uruchomieniu witryny. Oto, co chce utworzyć.

To pole na adres e-mail użytkownika.

Marek chce uzyskać fizyczny opis kosmitów.

Marek ma nadzieję, że ktoś potwierdzi, iż widział Kła w statku kosmitów.

Tu można umieścić dodatkowe komentarze.

Marek chce otrzymać list elektroniczny z danym i, użytkownik prześle for kiedy mularz. Jest to doskonały formularz w czystym kodzie HTML!

Co sądzisz o formularzu HTML Marka? Na jakie problemy Marek może natrafić przy zbieraniu informacji o porwaniach przez kosmitów, jeśli użyje powyższego formularza? Zapisz swoje pomysły. ......................................................................................................................................... ......................................................................................................................................... .........................................................................................................................................

jesteś tutaj 

43

Kod HTML formularza Marka

Formularze składają się z kodu HTML Formularz do zgłaszania uprowadzeń składa się w całości ze znaczników i atrybutów języka HTML. Przy większości pytań znajdują się pola tekstowe, przyciski opcji pozwalają ustalić, czy użytkownik widział Kła, a obszar tekstowy służy do wpisywania dodatkowych komentarzy. Formularz jest skonfigurowany tak, aby wysyłał dane pod adres e-mail Marka.

jak Jeśli chcesz przypomnieć sobie, do yj tworzyć formularze HTML, zajrz HTML rozdziału 14. książki „Head First with CSS & XHTML”.

ia „mailto” to protokół, który umożliw przesyłanie danych z formularza pocztą elektroniczną.

Marek otrzyma dane z formularza pod ten adres. Zmień go na własny, aby przetestować formularz.

Podziel si histori uprowadzenia:



Imi:
Nazwisko:
Adres e-mail:


ma Ta wartość informuje serwer, jak dy meto są ępne Dost . dane słać prze post i get. Różnice między nimi żki. omówiono w dalszej części ksią Znaczniki input służą do pobierania informacji.

Kiedy to si stao?
Jak dugo Ci nie byo?
Ilu kosmitów widziae? Ten atrybut type informuje o tym, że pole zawiera tekst.


Opisz ich:


Co z Tob robili?
Czy widziae Ka (mojego psa)? Tak Nie



Chcesz doda co jeszcze?


Formularz znajduje się między otwierającym a zamykającym znacznikiem .

44

Rozdział 1.

Żadnych niespodzianek — formularz zawiera sam kod HTML.

Przycisk submit nakazuje formularzowi wykonać operacje określone w atrybucie action.

Ożywianie statycznych stron

Jazda próbna Wypróbuj formularz do zgłaszania uprowadzeń. Pobierz kod do zgłaszania uprowadzeń z FTP wydawnictwa Helion (ftp://ftp. helion.pl/przyklady/hfphms.zip). Rozwiązanie znajduje się w katalogu R01. Składa się ono z formularza w pliku report.html, arkusza stylów (style.css) i zdjęcia Kła (fang.jpg).

style.css

report.html

fang.jpg

Otwórz stronę report.html w edytorze i zmień adres Marka na własny. Następnie otwórz stronę w przeglądarce, wpisz w formularzu informacje o porwaniu przez kosmitów i kliknij przycisk Zgłoś uprowadzenie.

Przesłanie formularza powoduje wysłanie danych w liście elektronicznym (w pewnym sensie). Formularz nie potrafi wysłać listuje elektronicznego, dlatego przekazu to zadanie do klienta pocztowego.

Dane z formularza nie trafią do Marka, jeśli użytkownik ręcznie nie prześle dziwnego listu.

Jak sdzisz — czy w skrzynce odbiorczej znajdziesz list elektroniczny z danymi z formularza?

jesteś tutaj 

45

Opcja mailto to zły pomysł

Formularz HTML sprawia problemy Formularz do zgłaszania uprowadzeń działa, ale Marek nie otrzymał zbyt wielu informacji od użytkowników. Czy porwanie Kła to naprawdę wyjątkowe zdarzenie? A może w formularzu kryje się błąd? Zobaczmy, co na ten temat myślą użytkownicy.

Kiedy kliknę przycisk, otwiera się mój program pocztowy, Outlook, jednak nie widać żadnych informacji, które przez 15 minut wpisywałam w formularzu. W polu Temat zobaczyłem coś w stylu ?When=&Where=. Nie wiem, co to znaczy.

Zobaczyłem pusty list elektroniczny do uzupełnienia. Wszystkie starannie wpisane odpowiedzi zniknęły. Ktoś powinien porwać ten głupi formularz!

Nic się nie stało, ponieważ moja przeglądarka nie ma ustawionego domyślnego programu pocztowego (czymkolwiek by on nie był). Z niewiadomych przyczyn formular Marka jest lepszy we wzbudzan z iu w użytkownikach niż w pobieran irytacji iu informacji.

Co si dzieje? Masz jaki pomys na naprawienie formularza?

46

Rozdział 1.

Ożywianie statycznych stron

Kod formularza wygląda poprawnie. Czy problem ma coś wspólnego z odnośnikiem mailto?

To prawda. Kod HTML formularza wygląda poprawnie, jednak odnośnik mailto nie jest dobrym sposobem na przesyłanie danych. Formularz Marka działa doskonale, dopóki użytkownik nie kliknie przycisku Zgłoś uprowadzenie. Wtedy instrukcja mailto powinna umieścić dane z formularza w liście elektronicznym. Jednak strona nie wysyła listów automatycznie, ale tworzy je w domyślnym programie pocztowym użytkownika. Najgorsze jest to, że internauta musi sam wysłać wiadomość, aby dane do Ciebie dotarły! Dlatego nie masz kontroli nad dostarczaniem listów. Podróż danych z formularza przez przeglądarkę, klienta pocztowego i — w formie e-maila — do Ciebie nie zawsze kończy się powodzeniem. Niedobrze. Potrzebujesz kontroli nad pobieraniem danych z formularza. A dokładniej — to kod PHP powinien umieszczać dane w wiadomości e-mail, a następnie ją wysyłać. Wymaga to przeniesienia uwagi z klienta (HTML, mailto itd.) na serwer (PHP).

Formularz działa momentu kliknięc wspaniale do Zgłoś uprowadzenia przycisku wszystko może sięie. Wtedy zdarzyć.

jesteś tutaj 

47

Po stronie serwera i po stronie klienta

HTML działa po stronie KLIENTA Formularz Marka jest napisany w czystym kodzie HTML, a do przesyłania danych e-mailem służy odnośnik mailto. Choć strona report.html pochodzi z serwera, jest wypełniana i przetwarzana w całości w przeglądarce użytkownika.

amowanie Tu działa oprogr rka, serwera WWW MaSERWEREM. nazywane często

Poproszę o stronę Marka do zgłaszania uprowadzeń.

1

Tu, na komputerze użytkownika, działa oprogramowanie przeglądarki, zwane KLIENTEM.

Przegldarka da strony Marka, która zawiera formularz.

2

3

Serwer zwraca kod HTML strony.

Uytkownik wypenia formularz i przesya go.

Teraz chcę przesłać formularz Marka z danymi wpisanymi przez użytkownika.

Hmm, nie biorę w tym udziału.



Kosmici mnie porwali - kana RSS http://aliensabductedme.com/ Zgoszenia porwa przez kosmitów, dostarczane dziki uprzejmoci Marka i jego porwanego psa Ka. pl

Beata Ostrowska - Nieporadne mae obuzy... http://www.aliensabductedme.com/index.php?abduction_id=7 Sat, 21 Jun 2008 00:00:00 EST Próbowali mnie zmusi do grania kiepskiej muzyki.

Sylwia Mazur - zieloni z szecioma mackami... http://www.aliensabductedme.com/index.php?abduction_id=8 Sun, 11 May 2008 00:00:00 EST Tylko rozmawialimy i bawilimy si z psem

...

jesteś tutaj  693

Kod RSS z opisem

Poniżej znajduje się kod RSS kanału wiadomości o porwaniach przez kosmitów. Opisz wyróżniony kod i wyjaśnij, do czego Twoim zdaniem służą poszczególne znaczniki.

Ćwiczenie: Rozwiązanie

Ten wiersz kodu to nie znacznik , ale dyrektywa języka XML, która okre śla, że ten dokument zawiera kod XML .

Ten znacznik dotyczy całego kanału.



Kosmici mnie porwali - kana RSS

Odnośnik kanału zwykle prowadzi do witryny powiązanej z danym kanałem RSS.

http://aliensabductedme.com/ Zgoszenia porwa przez kosmitów, dostarczane dziki uprzejmoci Marka i jego porwanego psa Ka. pl

Kanały wiadomości można tworzyć w różnych językach, a ten znacznik określa, którego z nich użyto.

Każdy kanał musi zawierać opis udostępnianych wiadomości.

Beata Ostrowska - Nieporadne mae obuzy... http://www.aliensabductedme.com/index.php?abduction_id=7 Sat, 21 Jun 2008 00:00:00 EST Próbowali mnie zmusi do grania kiepskiej muzyki.

Imię i nazwisko porwanej osoby oraz opis kosmitów tworzą tytuł każdej wiadomości.

Sylwia Mazur - zieloni z szecioma mackami... http://www.aliensabductedme.com/index.php?abduction_id=8 Sun, 11 May 2008 00:00:00 EST Tylko rozmawialimy i bawilimy si z psem

...

694

Rozdział 12.

Ten dokument RSS zawiera tylko jeden kanał. To odpowiednie rozwiązanie, jeśli nie chcesz umieszczać wiadomości w odrębnych kategoriach.

Data w znaczniku ma format zgodny ze specyfikacją RFC-822. Jest to standard szczegółowego przedstawiania daty i czasu za pomocą tekstu.

Kady element XML musi mieć znacznik otwierający i zamykający. Ten znacznik zamykający kończy dokument RSS.

Odnośniki do poszczególnych wiadomości zwykle prowadzą do pełnego tekstu artykułu w witrynie powiązanej z kanałem.

Rozpowszechnianie danych i usługi sieciowe

Rozumiem więc, że język RSS to tak naprawdę odmiana XML-a, co oznacza, iż jest tylko zbiorem znaczników. Aby utworzyć kanał RSS, musimy tylko przygotować plik XML, prawda?

W zasadzie tak. Jednak zwykle nie tworzymy kodu XML ręcznie i często nie zapisujemy go w plikach. To prawda, że kod XML można zapisać w pliku i często się tak robi. Jednak dane w kanałach RSS nieustannie się zmieniają, dlatego nie ma sensu umieszczać ich w plikach. Takie dokumenty szybko staną się przestarzałe i trzeba je będzie nieustannie modyfikować. Bardziej przydatny będzie kod XML generowany „w locie” na podstawie danych z bazy. W ten sposób działa strona główna witryny Kosmici mnie porwali, oparta na kodzie HTML. Dlatego powinniśmy użyć kodu PHP do dynamicznego generowania kodu RSS (XML) i zwracania go na żądanie bezpośrednio do czytników wiadomości.

jesteś tutaj  695

Poznajemy czytniki kanałów RSS

Z bazy danych do czytnika kanałów RSS Aby udostępnić kanał RSS z danymi o porwaniach przez kosmitów, Marek musi dynamicznie wygenerować kod RSS na podstawie informacji z bazy MySQL. Ten kod będzie składał się na kompletny dokument RSS, który można wyświetlić w czytniku wiadomości. Użyjemy więc kodu PHP do zapisania danych o porwaniach w formacie RSS. Informacje tego typu można następnie przetworzyć i wyświetlić w czytniku kanałów. Najwygodniejsze jest to, że po udostępnieniu wiadomości w formacie RSS wszystkie dalsze operacje przebiegają automatycznie. To czytnik kanałów odpowiada za wyświetlanie aktualnych informacji.

Czytnik RSS potrafi przetwarzać dane udostępniane w kanale RSS.

aliens_abduction abduction_id

first_name

last_name

when_it_happened

how_long

how_many

alien_description

what_the_did



Spynli z nieba i porwali…



1

Alan

Nowak

2000-07-12

tydzie

Przynajmniej 12

Wielki wieccy spodek z kosmitami…

2

Jan

Nowak

1991-09-14

37 sekund

nie wiem

Wygldali jak metalowe osy

Jadem wanie pieczone…

3

Ryszard

Czech

1969-01-21

prawie 4 lata

tylko jednego

Mieli niezdrowy wygld i byli…

Pozbawili mnie stanowiska…

4

Beata

Ostrowska

2008-06-21

prawie tydzie

27

Nieporadne mae obuzy bez…

Próbowali mnie zmusi do grania…

5

Sylwia

Mazur

2008-05-11

Czytnik kanałów potrafi przetworzyć poszczególne wiadomości w kodzie XML i wyświetlić je użytkownikowi.

PHP służy do generowania dokumentów z kodem kanału RSS na podstawie danych z bazy.



Kosmici mnie porwali - kana RSS http://aliensabductedme.com/< /link> Zgoszenia porwa przez kosmitów, dostarczane dziki uprze jmoci Marka i jego porwanego psa Ka. pl

Beata Ostrowska - Nieporadne mae obuzy... http://www.aliensabductedme.c om/index.php?abduction_id=7 Sat, 21 Jun 2008 00:00:00 EST Próbowali mnie zmusi  do grania kiepskiej muzyki. ...

Każdy element reprezentujący wiadomość znajduje się w odrębnej sekcji w dokumencie kanału RSS. Każdy czytnik wyświetla wiadomości w specyficzny sposób. Tu są one udostępniane podobnie jak listy elektroniczne.

696

Rozdział 12.

Ten czytnik jest wbudowany w standardową aplikację Thunderbird. Wiele innych popularnych programów pocztowych także udostępnia wbudowane czytniki kanałów.

Rozpowszechnianie danych i usługi sieciowe :

?

7

CO DO CZEGO SŁUŻY?

7

7

Tworzenie kanałów RSS wymaga opanowania języka RSS, dlatego najpierw musisz poznać znaczniki, które służą do przedstawiania wiadomości. Dopasuj każdy znacznik RSS do jego opisu.

Ten znacznik nie ma nic wspólnego z językiem RSS. Ma jednak ciekawą nazwę, którą można wykorzystać do opisu fragmentu wiadomości!

Data publikacji to ważna informacja w każdej wiadomości. Ten znacznik określa tę datę.

Ten znacznik reprezentuje jeden kanał RSS i jest kontenerem na jego opis oraz poszczególne wiadomości.

Reprezentuje pojedynczą wiadomość (informację), która jest szczegółowo opisana przy użyciu elementów podrzędnych.

Ten znacznik zawsze zawiera adres URL, który jest odnośnikiem prowadzącym do kanału lub wiadomości.

Obejmuje cały kanał RSS. Wszystkie pozostałe znaczniki znajdują się wewnątrz tego elementu.

Ten znacznik przechowuje tytuł kanału lub wiadomości i zwykle znajduje się w elemencie lub .

Zawiera krótki opis kanału lub wiadomości. Znajduje się wewnątrz elementu lub .

Ten znacznik dotyczy kanału i określa używany w nim język, na przykład pl.

jesteś tutaj  697

Co do czego służy? Rozwiązanie :

?

7

CO DO CZEGO SŁUŻY?

7 Każde źródło RSS składa się z przynajmniej jednego kanału, który zawiera zbiór powiązanych wiadomości.

ROZWIĄZANIE

Tworzenie kanałów RSS wymaga opanowania języka RSS, dlatego najpierw musisz poznać znaczniki, które służą do przedstawiania wiadomości. Dopasuj każdy znacznik RSS do jego opisu. to „główny” znacznik dokumentu RSS, zawierający wszystkie pozostałe elementy.

Ten znacznik nie ma nic wspólnego z językiem RSS. Ma jednak ciekawą nazwę, którą można wykorzystać do opisu fragmentu wiadomości!

Data publikacji to ważna informacja w każdej wiadomości. Ten znacznik określa tę datę.

Ten znacznik reprezentuje jeden kanał RSS i jest kontenerem na jego opis oraz poszczególne wiadomości.

Reprezentuje pojedynczą wiadomość (informację), która jest szczegółowo opisana przy użyciu elementów podrzędnych.

Ten znacznik zawsze zawiera adres URL, który jest odnośnikiem prowadzącym do kanału lub wiadomości.

Obejmuje cały kanał RSS. Wszystkie pozostałe znaczniki znajdują się wewnątrz tego elementu.

Ten znacznik przechowuje tytuł kanału lub wiadomości i zwykle znajduje się w elemencie lub .

Ten znacznik jest używany tylko w kanałach.

Ten znacznik pojawia się tylko w wiadomościach.

Zawiera krótki opis kanału lub wiadomości. Znajduje się wewnątrz elementu lub .

Ten znacznik dotyczy kanału i określa używany w nim język, na przykład pl.

Znaczniki , , m z elementem do opisu wiad omości.

698

7

Rozdział 12.

Rozpowszechnianie danych i usługi sieciowe

RSS Wizualizowanie kodu XML Wiesz już, że kod XML składa się ze znaczników (nazywanych też elementami), które pozostają ze sobą w relacji nadrzędny – podrzędny w ramach kompletnego dokumentu XML. W czasie tworzenia kodu XML warto zwizualizować tę relację. Na przykład dokument RSS można przedstawić jako hierarchię elementów, która przypomina drzewo genealogiczne z danymi z kanału RSS. Element nadrzędny widoczny w górnej części diagramu to rodzic elementów potomnych, które znajdują się poniżej. rss

Elementy title, link, description i language kanału oraz znaczniki wiadomości to elementy podrzędne znacznika channel.

title

link

description

channel

Elementy title link, pubDate , i description opisujące da ną wiadomość to znaczniki podr elementu item zędne .

item

item

language

title

Ćwiczenie

Na górze znajduje się główny element, który jest rodzicem wszystkich pozostałych znaczników.

link

description

pubDate

title

link

description

pubDate

Poniżej znajduje się nowy raport o porwaniu przez kosmitów, który dodano do bazy aliens_abduction. Wpisz kod XML znacznika kanału RSS, który opisze to zgłoszenie. Pamiętaj o przestrzeganiu formatu kanałów RSS. aliens_abduction

abduction_id

first_name

last_name

when_it_happened

how_long

how_many

alien_description

what_they_did



nie wiem

Na niebie pojawi si jasny…

Przenieli mnie na stacj benzynow…





14

Stefan

Kowalczyk

2008-07-05

2 godziny

................................................................................................................................................................ ................................................................................................................................................................ ................................................................................................................................................................ ................................................................................................................................................................ ................................................................................................................................................................ ................................................................................................................................................................

jesteś tutaj  699

Rozwiązanie ćwiczenia

Ćwiczenie: Rozwiązanie

abduction_id

Poniżej znajduje się nowy raport o porwaniu przez kosmitów, który dodano do bazy aliens_abduction. Wpisz kod XML znacznika kanału RSS, który opisze to zgłoszenie. Pamiętaj o przestrzeganiu formatu kanałów RSS. aliens_abduction

first_name

when_it_happened

last_name

how_long

how_many

alien_description

what_they_did



nie wiem

Na niebie pojawi si jasny…

Przenieli mnie na stacj benzynow…





14

Stefan

Kowalczyk

2008-07-05

2 godziny

Znaczniki , , i zawierają szczegółowe informacje o wiadomości.

Znacznik obejmuje wiadomość.

................................................................................................................................................................ Stefan Kowalczyk - Na niebie pojawił się jasny… ................................................................................................................................................................ http://www.aliensabductedme.com/index.php?abduction_id=14 ................................................................................................................................................................ W nazwie znacznika Sat, 05 Jul 2008 00:00:00 EST ................................................................................................................................................................

litera D musi

Przenieśli mnie na stację benzynową… być duża, a pozostałe ................................................................................................................................................................ znaki — małe. Formy

................................................................................................................................................................ i są błędne.

Nie istnieją

głupie pytania

P: Czy w języku XML ważna jest wielkość znaków? O: Tak, w kodzie XML wielkość liter ma znaczenie, dlatego trzeba ją uwzględnić w nazwach znaczników i atrybutów XML. Dobry przykład to znacznik języka RSS, w którego nazwie litera D musi być duża, a pozostałe znaki — małe. Nazwy większości znaczników XML zawierają same małe znaki lub są zapisane w notacji wielbłądziej.

P: Jak w języku XML używane są odstępy? O: Odstępy w języku XML to znaki: powrotu karetki (\r),

nowego wiersza (\n), tabulacji (\t) i spacji (‘ ‘). Większość odstępów w dokumentach XML służy do formatowania — na przykład przez dodanie wcięć do elementów podrzędnych. Te „nieistotne” odstępy są zwykle pomijane przez aplikacje, które przetwarzają dane XML, na przykład przez czytniki kanałów RSS. Jednak odstępy, które znajdują się w znacznikach, są „istotne” i zwykle programy je wyświetlają. Pozwala to między innymi na precyzyjny opis w języku XML poematów, w których ważne są puste fragmenty.

700

Rozdział 12.

P: Czy w kanałach RSS można używać rysunków? O: Tak. Trzeba jednak pamiętać, że nie wszystkie czytniki obsługują grafikę. Ponadto w formacie RSS 2.0 oficjalnie rysunki można dodawać tylko do kanału, a nie do poszczególnych wiadomości. Aby dołączyć obrazek do kanału, należy użyć znacznika , który trzeba umieścić w elemencie . Oto przykład:

htp://www.aliensabductedme.com/fang.jpg Mój pies Kie http://www.aliensabductedme.com

W RSS 2.0 technicznie możliwe jest dodanie rysunku do wiadomości. Sztuczka, którą trzeba zastosować, polega na użyciu znacznika języka HTML w opisie elementu. Choć jest to wykonalne, wymaga zakodowania znacznika HTML za pomocą encji języka XML. Ponadto technika ta jest niezgodna z założeniem, że wiadomości RSS zawierają tylko tekst.

Rozpowszechnianie danych i usługi sieciowe

Wszystko o kanaach RSS Rozmowa tygodnia:

Co porusza dostawcę wiadomości? Head First: Podobno kiedy internauci szukają najnowszych wiadomości w sieci WWW, kierują się do ciebie. Czy to prawda?

Head First: W czym więc różnisz się od języka HTML?

RSS: To zależy od tego, co uważasz za „najnowszą wiadomość”. Zajmuję się głównie zapisywaniem informacji w formacie dostępnym dla czytników kanałów. Nie odpowiadam za to, czy informacje są świeże, czy nie. Użytkownicy muszą sami to ocenić.

RSS: Jesteśmy formatami danych, które opierają się na XML-u. Oznacza to, że używamy znaczników i atrybutów do opisu danych. Jednak HTML zaprojektowano pod kątem przetwarzania i wyświetlania informacji w przeglądarkach, natomiast ja współpracuję z czytnikami kanałów. Można powiedzieć, że przedstawiamy te same dane z różnej perspektywy.

Head First: „Czytnik wiadomości” to osoba, która korzysta z informacji?

Head First: Widziałem, że także część przeglądarek wyświetla wiadomości z kanałów. Jak to możliwe?

RSS: Nie, mam na myśli oprogramowanie, które wie, kim jestem i w jaki sposób przedstawiam dane. Na przykład wiele programów pocztowych współpracuje ze mną, co oznacza, że użytkownik może zasubskrybować kanał i otrzymywać aktualizacje w podobny sposób jak listy elektroniczne.

RSS: Dobre pytanie. Okazuje się, że niektóre przeglądarki mają wbudowane czytniki, czyli są dwoma narzędziami w jednym. Pamiętaj jednak, że kiedy przeglądasz wiadomości z kanałów w przeglądarce, patrzysz na coś zupełnie różnego od strony HTML.

Head First: Ciekawe. Czym więc różnisz się od e-maili?

Head First: Jednak większość odnośników w wiadomościach prowadzi do stron HTML, prawda?

RSS: Och, jestem zupełnie inny niż listy elektroniczne. E-maile są przesyłane między osobami, zwykle w ramach dwustronnego dialogu. Możesz więc odpowiedzieć na list, otrzymać odpowiedź itd. Ja przesyłam dane tylko w jednym kierunku — z witryny do użytkowników. Head First: Co sprawia, że komunikacja jest jednostronna? RSS: Kiedy użytkownik subskrybuje w czytniku kanał, określa tym samym, że chce otrzymywać informacje o pojawianiu się nowych wiadomości w danej witrynie. Kiedy w serwisie znajdą się nowe materiały, przedstawiam je w sposób zrozumiały dla czytników i przekazuję odbiorcy. Użytkownik nie ma jednak możliwości odpowiedzieć na wiadomość, dlatego komunikacja przebiega jednostronnie — od witryny do danej osoby. Head First: Rozumiem. Czym więc tak naprawdę jesteś? RSS: Jestem tylko formatem danych — określonym sposobem zapisywania informacji, który umożliwia ich rozpoznawanie i przetwarzanie przez czytniki kanałów. Jeśli użyjesz mnie do zapisania danych, czytniki będą mogły pobrać je jako wiadomości z określonego kanału.

RSS: Tak, to prawda. Razem z HTML-em współpracujemy w celu lepszego udostępniania danych w sieci WWW. Możesz mnie użyć, aby bez konieczności bezpośredniego odwiedzania witryny dowiedzieć się o pojawieniu się nowych informacji. Jeśli któreś z nich cię zainteresują, możesz kliknąć odnośnik i przejść do odpowiedniej strony. Dlatego każda wiadomość zawiera odsyłacz. Head First: Zapewniasz więc specyficzny podgląd stron WWW? RSS: Coś w tym rodzaju. Pamiętaj jednak, że to ja przychodzę do ciebie i nie musisz samodzielnie odwiedzać witryny. Dlatego ludzie naprawdę mnie lubią. Pozwalam im śledzić nowe informacje bez konieczności odwiedzin na stronach WWW. Head First: To rzeczywiście wygodne. Dziękuję za wyjaśnienie roli, jaką odgrywasz w sieci WWW. RSS: Było mi bardzo przyjemnie. Miłego dnia!

jesteś tutaj  701

Generowanie dokumentu RSS w kodzie PHP

Dynamiczne generowanie kanału RSS Poznawanie działania formatu RSS to oczywiście dobrze spędzony czas, jednak Marek nadal potrzebuje kanału do przesyłania zgłoszeń o porwaniach przez kosmitów. Pora zastosować PHP i dynamicznie wygenerować kanał pełen danych o uprowadzeniach. Dane pobierzemy z bazy MySQL Marka. Można wykonać to zadanie w kilku krokach: 1

W nagłówku musimy określić rodzaj danych, które zawiera dokument RSS. Te dane to kod XML. 2

Wygenerowany kanał to dokument XML, który jednak nie jest zapisywany w pliku.

Ustaw typ zawartoci dokumentu na kod XML.

Wygeneruj dyrektyw XML w celu okrelenia, e tworzymy dokument XML.

3

Wygeneruj statyczny kod RSS, który nie opiera si na danych z bazy. Obejmuje on znacznik i informacje o kanale.

... ... ... ...

4

Ten kod nie jest związany z bazą danych i w kanale, który . tworzymy, jest zawsze taki sam

Pobierz dane o porwaniu z bazy aliens_abduction. abduction_id last_name first_name when_it_happened alien_description what_they_did

5

Przejd w ptli po danych i wygeneruj kod RSS kadej wiadomoci.

... ... ... ...

6

Ten kod zawiera dane pobrane z bazy, dlatego trzeba zachować staranność przy jego generowaniu.

Wygeneruj statyczny kod RSS potrzebny do dokoczenia dokumentu. S to midzy innymi zamykajce znaczniki i .

702

Przed wygenerowaniem kodu RSS wiadomości trzeba pobrać z bazy MySQL dane na temat porwania przez kosmitów.

Rozdział 12.

Rozpowszechnianie danych i usługi sieciowe

Magnesiki z kodem PHP i MySQL

oraz XML!

W napisanym przez Marka skrypcie newsfeed.php, który generuje kana RSS witryny Kosmici mnie uprowadzili, brakuje kilku wanych fragmentów. Starannie dobierz waciwe magnesiki, aby uzupeni kod i umoliwi dynamiczne generowanie kanau. header(‘Content-Type: text/xml’); ?> 1 ’; 2 ?> ................ Kosmici mnie uprowadzili - kana RSS ........... http://aliensabductedme.com/ ............... dziki uprzejmoci Zgoszenia porwa przez kosmitów, dostarczane n> scriptio Ka.

Wcześniej, w przykładzie związany m z testem CAPTCHA, użyliśmy nagłówka do przesłania rysunku PNG. Tu nagłówek sprawia, że skrypt zwróci dokument XML.

1 ’; 2 ?>

........ el>

Marka i jego porwanego psa Ka.

ensabductedme/favorites http://gdata.youtube.com/feeds/api/users/ali 2008-08-01T20:37:48.798Z as/2007#video'/> 2005#kind' term='http://gdata.youtube.com/schem

http://www.youtube.com/img/pic_youtubelogo /api/users/a ml' href='http://gdata.youtube.com/feeds

dme/favorites'/> href='http://www.youtube.com/profile_favorites?u YouTube data API



2005#kind' term='http://gdata.youtube.com/schem

tube.com/sch ://gdata.you scheme='http

emas/2007/categories.cat' term='Travel'

emas/2007/ke tube.com/sch ://gdata.you

href='http://www.youtube.com/watch?v=_6Uibqf0vtA /api/

in Yosemite Park near Area 51 A few minutes later several Air Force jets ufo _6Uibqf0vtA'/>

...

d> eeds/api/videos/_6Uibqf0vtA2006 I went on 51... Area

.yout //www http: url=’ yer height=’97’

ters= numRa 5’ max=’ 1’ min=’

comme

Gotowe! ...

d> tAI went on 51... Area

.yout //www http: url=’ yer height=’97’

ters= numRa 5’ max=’ 1’ min=’

comme CREATE USER alienguy IDENTIFIED BY 'aliensRsc4ry'; Query OK, 0 rows affected (0.07 sec)

Następnie można użyć polecenia GRANT języka MySQL, aby określić, jakie operacje użytkownik alienguy może wykonywać na bazie danych. Jeśli ma móc tylko pobierać i wstawiać dane (instrukcje SELECT i INSERT), użyj następującego polecenia: Plik Edycja Okno Pomoc Oni yj

mysql> USE alien_database; Database changed mysql> GRANT SELECT, INSERT ON alien_info TO alienguy; Query OK, 0 rows affected (0.03 sec)

Jeśli nie chcesz używać terminalu MySQL do tworzenia użytkowników i przyznawania uprawnień, możesz pobrać i zainstalować przydatny program o nazwie MySQLAdministrator. Znajdziesz go na stronie http://dev.mysql.com/downloads/gui-tools/5.0.html.

Możesz bardzo precyzyjnie opisać uprawnienia użytkownika, a nawet określić, co dana osoba może robić z konkretną kolumną. Aby dowiedzieć się czegoś więcej na ten temat, zajrzyj do książki „Head First SQL. Edycja polska”. 746

Dodatek A

Pozostałości Program MySQL Administrator umożliwia kontrolowanie kont użytkowników oraz dostępu do różnych elementów bazy danych. Możesz nawet określić, jakie zapytania dana osoba może kierować do poszczególnych tabel bazy. Aby zmienić poziom dostępu użytkowników do tabel i zapytań, otwórz aplikację MySQL Administrator i kliknij zakładkę Accounts. Poniżej przedstawiamy interfejs i omawiamy, jak określić uprawnienia poszczególnych osób. Najpierw utwórz konto:

Najpierw kliknij zakładkę Accounts.

Po określeniu nowej nazwy użytkownika i hasła kliknij ten przycisk, aby przyznać uprawnienia.

Następnie użyj tego przycisku, aby dodać nowe konto. Tu znajduje się lista tabel w danej bazie. Wybierz tabelę, której używa dana aplikacja. To lista kont. Możesz utworzyć nowego użytkownika i określić jego uprawnienia na potrzeby danej aplikacji. Wybierz konto, które chcesz zmodyfikować.

Na tej liście znajdziesz podstawowe instrukcje MySQL, które poznałeś w tej książce. Wybierz polecenia, które są potrzebne w aplikacji.

jesteś tutaj  747

Zgłaszanie błędów w MySQL

Numer 3. Zgłaszanie błędów w MySQL W wielu fragmentach przykładowego kodu znajdziesz wiersze podobne do poniższego: mysqli_connect(localhost, ‘mork’, ‘fromork’) or die (‘Nie mona nawiza poczenia.’)

Kiedy to polecenie nie zadziała, na stronie pojawi się tekst „Nie można nawiązać połączenia.”. Określa on, że wystąpił problem, jednak nie zawiera żadnych dodatkowych informacji. Na szczęście język PHP udostępnia funkcję mysql_error(), która zwraca wskazówki opisujące istotę problemu. Przyjrzyj się działaniu poniższej instrukcji przy próbie połączenia się z nieistniejącym serwerem MySQL:

Unknown MySQL server host ‘badhostname’ (1)

To komunikat o błędzie, który zobaczysz.

Są to jednoznaczne informacje, opisujące, dlaczego w funkcji mysqli_connect() wystąpił błąd. Polecenia mysqli_error() można też użyć wraz z innymi funkcjami z rodziny mysqli:

Oto dane wyjściowe:

Próbujemy pobrać dane z tabeli, która nie istnieje.

Poniżej przedstawiamy kilka innych komunikatów o błędach, które możesz napotkać: Table ‘test.no_such_table’ doesn’t exist Can’t create table Can’t create database ‘yourdatabase’; database exists Can’t drop database ‘yourdatabase(; database doesn’t exist

Istnieją dziesiątki podobnych komunikatów, jednak nie ma potrzeby ich tu przytaczać. Więcej informacji na ich temat znajdziesz na stronie: http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html Jeśli zastosowałeś funkcje mysql, co opisaliśmy w punkcie 1., możesz użyć polecenia mysql_error() zamiast mysqli_error().

748

Dodatek A

Pozostałości

Numer 4. Obsługa wyjątków w kodzie PHP Obsługa wyjątków pozwala zmienić standardowe działanie kodu i uruchomić specjalny blok, kiedy wystąpi określony wyjątek. Mechanizm ten jest dostępny w PHP 5 i 6. Poniżej opisujemy podstawy obsługi wyjątków.

BANK W DATOWIE POYCZKI I KREDYTY

Załóżmy, że chcesz wyciągnąć z bankomatu 200 złotych. Możliwe, że minimalny dopuszczalny stan konta to 1000 złotych, a żądana wypłata spowodowałaby zejście poniżej tego limitu. Transakcja kończy się niepowodzeniem! Tak może wyglądać ten scenariusz w kodzie PHP, w którym do wychwycenia błędu użyliśmy obsługi wyjątków.

Kiedy skrypt uruchomi ten kod, zobaczysz następujący komunikat: Bd: Stan konta wynosi poniej 1000 zotych.

jesteś tutaj  749

Obsługa wyjątków w PHP

Numer 4. Obsługa wyjątków w PHP (ciąg dalszy) Kod do obsługi wyjątków obejmuje trzy bloki:

1. Try. W tym bloku sprawdzamy, czy dane mają oczekiwaną wartość. Jeśli tak jest, kod kontynuuje standardowe działanie. Jeżeli nie, wystąpił wyjątek. W języku technicznym mówimy, że kod „rzucił” wyjątek. Kiedy kod rzuci wyjątek, w innym miejscu trzeba go przechwycić. Dlatego po wystąpieniu wyjątku skrypt uruchamia blok catch. Jeśli nie ma błędu, kod kontynuuje działanie.

2. Throw. Polecenie throw jest skierowane do bloku catch i przesyła do niego komunikat o błędzie. Każdej instrukcji throw odpowiada przynajmniej jeden blok catch.

750

Dodatek A

Pozostałości

Numer 5. Obiektowy język PHP Języki obiektowe są oparte na zupełnie innym modelu programowania niż ich proceduralne odpowiedniki. Języka PHP używaliśmy zgodnie z modelem proceduralnym, jednak ma on też obiektowe oblicze. Zamiast tworzyć zestawy wykonywanych po kolei instrukcji, można przekształcić niektóre struktury w obiekty. Zawierają one nie tylko informacje, ale też operacje, które można wykonywać na tych danych. Aby używać obiektowego języka PHP, musisz tworzyć i stosować obiekty. Zanim wyjaśnimy, dlaczego warto używać obiektowego PHP, napiszmy fragment kodu w tym języku: 1

To klasa Song, które zawiera definicję obiektu.

Napisz klasę. class Song { var $title; var $lyrics;

Song

mplarza. To zmienne egze

title, lyrics

function Song($title, $lyrics) { $this->title = $title; $this->lyrics = $lyrics; }

Ta metoda ustawia tytuł i tekst piosenki w czasie tworzenia obiektu.

sing()

Ta metoda używa zmiennych egzemplarza obiektu.

function sing() { echo ‘Tytu utworu: ‘ . $this->title . ‘.
’; echo ‘Raz, dwa, trzy i cztery...’ . $this->lyrics; } } Tytuł nowej piosenki to „Blue Suede Shoes”.

2

Utwórz nowy obiekt. $shoes_song = new Song(‘Blue Suede Shoes’, ‘Well it\’s one for the money...’); $shoes_song->sing(); W tym miejscu wywołujemy metodę sing() obiektu.

3

Piosenka potrafi sama się zaśpiewać! Kiedy uruchomisz kod, uzyskasz następujący efekt: Jednak skoro możemy napisać instrukcję echo bez korzystania z obiektów, po co mamy stosować PHP w wersji obiektowej? Wynika to z bardzo istotnych przyczyn…

jesteś tutaj  751

Obiektowy język PHP

Numer 5. Obiektowy język PHP (ciąg dalszy) Zamiast tworzyć zestawy instrukcji wykonywanych krok po kroku, można przekształcić struktury danych w obiekty. Zawierają one nie tylko informacje, ale też operacje, które można wykonywać na tych danych. W przykładowej klasie Song ustawiliśmy tytuł i tekst utworu. Klasa ta zawiera też metodę sing(). Aby dodać nowe funkcje do obiektu Song, wystarczy dołączyć metody i zmienne do klasy Song. Na przykład: jeśli zechcemy określić w każdym obiekcie klasy Song autora piosenki, dodamy do klasy jego nazwisko jako zmienną. Zalety podejścia obiektowego uwidaczniają się przy rozwijaniu się aplikacji. Załóżmy, że chcesz użyć klasy Song w aplikacji do obsługi karaoke, która zawiera setki, a nawet tysiące obiektów tego typu. Wszystkie one mają niepowtarzalne elementy: tytuł, tekst i autora. Przyjmijmy, że użytkownik chce przejrzeć tylko utwory napisane przez Elvisa. Aby je wyświetlić, wystarczy sprawdzić w każdym obiekcie zmienną egzemplarza, która przechowuje dane autora piosenki. A co zrobić, aby przesłać słowa do aplikacji do obsługi karaoke? Wystarczy przy odtwarzaniu utworu wywołać metodę sing() danego obiektu Song. Choć dla każdego obiektu wywołujemy to samo polecenie, metoda zawsze używa danych specyficznych dla danego utworu.

Dwie główne zalety stosowania obiektowego języka PHP to: Łatwość wielokrotnego wykorzystania obiektów. Są one zaprojektowane tak, aby były niezależne od kodu, w którym je uruchamiamy. Dlatego można ich używać wszędzie tam, gdzie są potrzebne. Bardziej zrozumiały i łatwiejszy w konserwacji kod. Jeśli typ danych wymaga zmian, wystarczy je wprowadzić w obiekcie. Nie trzeba modyfikować innych fragmentów aplikacji. Poważną wadą jest to, że kod obiektowy zwykle jest dłuższy, a jego tworzenie zajmuje więcej czasu. Jeśli chcesz wyświetlić tekst jednej piosenki, lepszym rozwiązaniem może być napisanie krótkiego programu proceduralnego. Jednak jeśli chcesz utworzyć internetową aplikację do obsługi karaoke, zastanów się nad użyciem obiektowego języka PHP.

752

Dodatek A

Pozostałości

Numer 6. Zabezpieczanie aplikacji PHP Jest kilka prostych operacji, które należy wykonać, aby zabezpieczyć skrypty PHP przed złośliwymi hackerami, pochylonymi nad klawiaturami w oczekiwaniu na to, że popełnisz błąd. 1

Usuń wywołania funkcji phpinfo(). Po rozpoczęciu tworzenia aplikacji PHP na nowym serwerze programiści zwykle uruchamiają tę funkcję, aby sprawdzić używaną wersję języka PHP, dostępność obsługi bazy MySQL i listę zainstalowanych bibliotek. Jest to właściwe zastosowanie funkcji phpinfo(), jednak po znalezieniu odpowiednich informacji należy ją usunąć. W przeciwnym razie każdy hacker, który znajdzie tę lukę w kodzie PHP, będzie mógł zobaczyć, jakie są słabe punkty witryny.

2

Jeśli nie korzystasz z usług firmy hostingowej i masz dostęp do pliku php.ini, możesz wprowadzić kilka zmian, aby dodatkowo zabezpieczyć aplikacje PHP. Co ciekawe — lokalizację pliku php.ini można ustalić za pomocą funkcji phpinfo():

To ścieżka do pliku php.ini. Po zapisaniu jej pamiętaj o usunięciu wywołania funkcji phpinfo().

W dolnej części strony znajdują się bardziej poufne informacje.

jesteś tutaj  753

Środki bezpieczeństwa w PHP

Numer 6. Zabezpieczanie aplikacji PHP (ciąg dalszy) Poniżej opisujemy kilka specyficznych ustawień, które warto zmienić w pliku php.ini. Otwórz go w edytorze tekstu, wprowadź modyfikacje, zapisz je, a następnie ponownie uruchom serwer. safe_mode = On

Kiedy włączysz tryb safe_mode, plików PHP nie będzie można wywoływać z poziomu skryptów należących do innego właściciela. Oczywiście jeśli chcesz umożliwić wywoływanie własnych skryptów innym osobom, nie możesz użyć tego ustawienia. open_basedir = directory[:...]

To ustawienie sprawia, że kod PHP może uruchamiać skrypty i pliki tylko z danego katalogu oraz jego podkatalogów. expose_php = Off

Przy ustawieniu On każda przeglądarka, w której użytkownik otworzy witrynę, otrzyma nagłówki z informacjami o serwerze PHP. Wyłączenie tej opcji pozwala ukryć te dane i sprawia, że informacje o serwerze są trudniej dostępne. display_errors = Off

Po utworzeniu aplikacji i uruchomieniu jej na publicznym serwerze WWW nie trzeba wyświetlać komunikatów o błędach. Miejmy nadzieję, że wszystkie problemy zostały rozwiązane, jednak czasem mogą pojawić się niezauważone wcześniej usterki. Aby ukryć przed użytkownikami komunikaty o błędach, należy ustawić powyższą opcję na Off. log_errors = On

To ustawienie powoduje rejestrowanie błędów w dzienniku. Kiedy zechcesz sprawdzić, czy w aplikacji pojawiły się usterki, warto zacząć od przeglądu dziennika. Jeśli ustawisz opcję display_errors na Off, a log_errors na On, będziesz miał dostęp do informacji o błędach, natomiast komunikaty nie będą przeszkadzać użytkownikom. error_log = nazwapliku

Musisz sprawdzić w oprogramowaniu serwera WWW, gdzie znajduje się plik dziennika. W tym miejscu serwer zapisze komunikaty o błędach, jeśli ustawisz opcję log_errors na On.

754

Dodatek A

Pozostałości

Numer 7. Zabezpieczanie aplikacji przed atakami XSS Możliwe, że słyszałeś już o atakach typu XSS (ang. cross-site scripting). Polegają one na przesyłaniu kodu do skryptu przetwarzającego formularz w celu zmodyfikowania generowanych danych. Jest to poważny problem, jeśli chodzi o bezpieczeństwo aplikacji sieciowych PHP. Przyjrzyjmy się dokładnie atakom tego typu i możliwym zabezpieczeniom. Ataki XSS zwykle są przeprowadzane w witrynach, które wyświetlają dane przesyłane przez użytkowników. Wszelkie informacje, które pobierasz od internautów, a następnie wyświetlasz, mogą zostać spreparowane. Powoduje to, że witryna jest wrażliwa na ataki hackerów. Hacker może przeprowadzić atak XSS na wiele sposobów. Jedną z najgroźniejszych technik jest przekierowanie użytkownika do strony w witrynie, która pozostaje pod kontrolą napastnika i prosi internautę o podanie dalszych danych. Użytkownik może nie zauważyć, że znajduje się w innej witrynie, a ponieważ ufa danej stronie, prześle poufne informacje bezpośrednio na serwer hackera. W Gitarowych wojnach może to wyglądać następująco: Ela w polu na imię i nazwisko nie wpisała swych danych, ale fragment kodu JavaScript. W tym przykładzie użyła funkcji window.location, aby skierować przeglądarkę do własnej witryny. Ponieważ Ela ma nad nią kontrolę, może wyświetlić użytkownikom dowolne materiały, na przykład strony przypominające aplikację Gitarowe wojny. Jeśli dana witryna pobiera bardziej istotne informacje niż rekordy (na przykład dane finansowe), Ela może wyrządzić poważne szkody. Można zastosować jeszcze bardziej podstępne techniki, na przykład przechwycić pliki cookie lub wyświetlić użytkownikom stronę wyglądającą jak ekran logowania. Kiedy użytkownik się zaloguje, napastnik przechwyci jego nazwę i hasło, a następnie będzie mógł zalogować się jako dana osoba w pierwotnej witrynie. Jak więc można uniknąć ataków XSS we własnych aplikacjach sieciowych?

Ela nie może już oszukiwać, dlatego użyła ataku XSS do przekierowania strony z wynikami do własnej witryny.

Nie da się mnie powstrzymać. Przejmę witrynę i będziecie skończeni!

ten Ela musi tylko wpisać kod w polu formularza przeznaczonym na imię i nazwisko. Kiedy użytkownik wyświetli wynik, ten fragment sprawi, że przeglądarka otworzy witrynę Eli.

jesteś tutaj  755

Zapobieganie atakom XSS

Numer 7. Zabezpieczanie aplikacji przed atakami XSS (ciąg dalszy) Na szczęście jeśli przeprowadzasz walidację danych, jesteś na dobrej drodze do zabezpieczenia aplikacji. Wiesz już, jak ochronić Gitarowe wojny. Oto trzy wskazówki, które pozwolą zabezpieczyć aplikacje:

Sprawdzaj poprawność wszystkich danych Wszelkie dane, które pobierasz (na przykład informacje z formularza), należy poddać walidacji, aby wykryć kod hackera, zanim spowoduje szkody. Do czasu sprawdzenia poprawności danych należy przyjmować, że są błędne. Dzięki temu aplikacja będzie dużo bezpieczniejsza.

Pomocne są funkcje wbudowane języka PHP Do unieszkodliwiania zewnętrznych danych używaj funkcji wbudowanych języka PHP, na przykład polecenia strip_tags(). Usuwa ono z łańcucha wszystkie znaczniki HTML, dlatego jeśli użyjesz go do przetworzenia tekstu przesłanego przez Elę, który znajduje się w zmiennej $_POST[‘name’], otrzymasz następujące dane: window.location=’http://ethelrulz.com’

Choć nadal nie jest to imię i nazwisko, nowy łańcuch nie skieruje przeglądarki do nieodpowiedniej witryny, ponieważ usunęliśmy ważne znaczniki związane z kodem JavaScript.

Dane są winne, dopóki nie udowodnią, że jest inaczej Zacznij od jak najbardziej ścisłej walidacji i rozluźniaj jej zasady tylko wtedy, jeśli jest to konieczne. Na przykład jeśli najpierw pozwolisz na wpisywanie w polu na numer telefonu tylko cyfr, a następnie umożliwisz wprowadzanie myślników i nawiasów, będzie to dużo bezpieczniejsze rozwiązanie niż akceptowanie od początku wszystkich znaków alfanumerycznych. W aplikacji Gitarowe wojny można zezwolić na wpisywanie w polu na imię i nazwisko samych liter. Wtedy znak mniejszości (= == != === !== && || = += -= *= /= .= %= &= |= ^= = and xor or

Typ operatora Powiększania i zmniejszania Arytmetyczne Arytmetyczne i łańcuchowe Porównywania Porównywania Logiczne Logiczne Przypisywania Logiczne Logiczne Logiczne

Operatory porównywania, na przykład te, których używasz w instrukcjach IF, także mają określone pierwszeństwo.

jesteś tutaj  757

PHP 5 a PHP 6

Numer 9. Czym różni się język PHP 5 od PHP 6? W czasie, kiedy powstawała ta książka, PHP 5 był najnowszą wersję języka, trwały jednak prace nad PHP 6. Tę wersję możesz pobrać ze strony http://snaps.php.net/. Różnice między wersjami 4 i 5 są dużo większe niż między 5 i 6. PHP 6 zawiera głównie liczne usprawnienia mechanizmów obiektowych wprowadzonych w wersji 5. Inne zmiany to wzbogacona obsługa technologii XML i Unicode.

Dodatkowa obsługa kodowania Unicode Załóżmy, że aplikacja ma wyświetlać tekst w języku greckim.

Dla nas to czysta greka.

Zastanów się nad operacjami wykonywanymi na łańcuchach znaków. Czasem trzeba ustalić ich długość lub posortować je. Jest to proste, jeśli używamy angielskiego tekstu, jednak kiedy korzystamy ze znaków z innych języków, operacje na łańcuchach stają się bardziej skomplikowane. Unicode to zestaw znaków i technologii ich kodowania. W Unicode greckiemu znakowi przypominającemu trójkąt (podobnie jak innym symbolom tego alfabetu) odpowiada specyficzny numer. Unicode to standard, co oznacza, że jest powszechnie obsługiwany przez głównych producentów różnych technologii. W Unicode każdy znak ma określony numer. Jest on taki sam niezależnie od używanego języka, programu i systemu. Przed wprowadzeniem PHP 5 język ten nie obsługiwał kodowania Unicode. W PHP 6 wzbogacono obsługę łańcuchów znaków Unicode o funkcje utworzone specjalnie do tworzenia i kodowania symboli w tym formacie.

758

Dodatek A

Pozostałości

Numer 9. Czym różni się język PHP 5 od PHP 6? (ciąg dalszy) Usprawnione obiekty, obsługa XML-a i inne zmiany PHP 5 obsługuje obiektowy model programowania, jednak nadal zezwala na stosowanie kodu proceduralnego. PHP 6 to następny krok w kierunku podejścia obiektowego. Jedna z największych zmian polega na tym, że nie można będzie wywoływać funkcji dynamicznych za pomocą składni statycznej. Wprowadzono też wiele drobnych, ale istotnych zmian w obsłudze kodu obiektowego, które upodabniają PHP do innych języków obiektowych, takich jak C++ i Java.

W tej książce nie używaliśmy funkcji dynamicznych, dlatego nie musisz się martwić, że kod przestanie działać w PHP 6.

Poniżej opisujemy kilka następnych zmian: „ W PHP 6 pojawią się rozszerzenia XML Reader i XML Writer, które ułatwią przetwarzanie plików XML. „ Z pliku php.ini znikną opcje register_globals, magic_quotes i safe_mode. „ Zniknie rozszerzenie ereg, które było jedną z technologii tworzenia wyrażeń regularnych. W PHP 6 podstawowym sposobem budowania takich wyrażeń będzie kod oparty na funkcji preg_match(), którą omówiliśmy w tej książce. „ Pojawi się 64-bitowy typ całkowitoliczbowy. „ W instrukcji foreach będzie można używać tablic wielowymiarowych. „ W PHP 6 język zostanie przede wszystkim uporządkowany i usprawniony.

jesteś tutaj  759

Popularne aplikacje PHP

Numer 10. Wykorzystanie kodu PHP innych osób Nie zawsze trzeba tworzyć aplikacje PHP od podstaw. Czasem lepiej jest wykorzystać kod napisany przez inne osoby. Poniżej przedstawiamy kilka popularnych pakietów oprogramowania opartych na PHP. Możesz ich użyć, jeśli potrzebujesz określonych mechanizmów i nie chcesz po raz wtóry wymyślać koła. Co ważne — wszystkie te pakiety są bezpłatne!

Drupal Jeden z najbardziej rozbudowanych projektów związanych z PHP, Drupal, to zaawansowany system zarządzania treścią, którego można użyć do utworzenia dowolnej witryny opartej na informacjach. System ten wykorzystano między innymi w witrynach organizacji NASA, The Onion, Electronic Frontier Foundation i Popular Science. Drupal jest wystarczająco elastyczny, aby można przy jego użyciu zbudować dowolny serwis, który zawiera duże ilości informacji. Aby dowiedzieć się więcej o tym systemie, odwiedź stronę http://drupal.org/.

Chwileczkę — po co mam poznawać język PHP, skoro mogę wykorzystać kod napisany przez innych?

phpBB W kategorii forów system phpBB nie ma sobie równych. Umożliwia on łatwe tworzenie własnych forów i jest niezwykle elastyczny. Trudno znaleźć lepsze narzędzie do zarządzania dyskusjami w wątkach. Więcej o phpBB dowiesz się na stronie http://www.phpbb.com/.

Coppermine Gallery Jeśli chcesz zarządzać zdjęciami, wypróbuj napisaną w języku PHP aplikację Coppermine Gallery. W epoce serwisów Flickr, Photobucket, Shutterfly i Snapfish tworzenie własnej biblioteki zdjęć może wydawać się dziwne. Pamiętaj jednak, że kontrola daje dodatkowe możliwości, a jeśli chcesz mieć całkowity nadzór nad własnymi fotografiami, zapoznaj się z systemem Coppermine Gallery (http://coppermine-gallery.net/).

WordPress Jeden z najpopularniejszych systemów w blogosferze, WordPress, to aplikacja PHP, która umożliwia łatwe tworzenie i konserwowanie blogów. W tym obszarze panuje duża konkurencja, dlatego warto przyjrzeć się też innym produktom, jednak WordPress to dobry wybór dla wszystkich osób, które chcą uruchomić bloga. System ten możesz pobrać z witryny http://wordpress.org/.

760

Dodatek A

Ponieważ wykorzystanie cudzego kodu nie jest tak proste, jak może się to wydawać. Czasem niezbędna jest znajomość języka PHP. Wiele pakietów kodu PHP trzeba dostosować do własnych potrzeb, co wymaga dużych umiejętności programowania w tym języku. Ponadto możesz zechcieć wykorzystać tylko fragment kodu, a nie cały system. Dzięki znajomości PHP będziesz miał więcej możliwości, co zawsze jest korzystne!

Dodatek B Konfigurowanie rodowiska programistycznego

Miejsce do zabawy Mąż uważa, że jestem świetną kucharką, a ja po prostu ukrywam wszystkie pomyłki, zanim on je dostrzeże.

Potrzebujesz miejsca, w którym będziesz mógł przetestować nowe umiejętności z obszaru technologii PHP i MySQL bez narażania danych na ataki w sieci WWW. Zawsze warto mieć bezpieczny obszar do rozwijania aplikacji PHP przed udostępnieniem ich światu. W tym dodatku opisano, jak zainstalować serwer WWW, bazę danych MySQL i język PHP, aby przygotować bezpieczne miejsce do pracy oraz ćwiczeń.

to jest nowy dodatek  761

Instalowanie języka PHP i serwera MySQL na lokalnym komputerze

Utwórz środowisko do programowania w języku PHP Zanim będziesz mógł umieścić gotową aplikację w sieci, musisz ją przygotować. Rozwijanie kodu witryny w sieci, gdzie każdy może go uruchomić, to zły pomysł. Należy zainstalować na lokalnym komputerze oprogramowanie, które umożliwi zbudowanie i przetestowanie aplikacji przed umieszczeniem jej w sieci. Aby móc rozwijać i testować aplikacje PHP, na lokalnym komputerze należy zainstalować trzy rodzaje oprogramowania: 1. serwer WWW, 2. PHP, 3. serwer bazodanowy MySQL. PHP nie jest serwerem, ale zestawem reguł, które serwer WWW musi znać, aby móc zinterpretować kod napisany w języku PHP. Zarówno serwer WWW, jak i serwer MySQL to programy wykonywalne, które działają na danym komputerze. Pamiętaj, że mówimy o konfigurowaniu lokalnego komputera jako serwera WWW na potrzeby rozwijania aplikacji PHP. Ostatecznie będziesz potrzebował serwera podłączonego do sieci WWW, aby przesłać na niego gotową aplikację i udostępnić ją użytkownikom.

Serwer bazodanowy MySQL często jest instalowany na tym samym komputerze, co oprogramowanie serwera WWW. Tu będzie to Twój lokalny komputer!

W środowisku do programowania w języku PHP lokalna maszyna pełni funkcję serwera potrzebnego do uruchamiania skryptów PHP.

Komputer serwerowy

Do udostępniania skryptów PHP jako stron potrzebne jest oprogramowanie serwera WWW, na przykład program Apache.

Serwer WWW Serwer bazodanowy

PHP jest instalowany jako część serwera WWW i umożliwia uruchamianie przez ten serwer skryptów PHP.

Sprawdź dostępne komponenty Zanim spróbujesz zainstalować którykolwiek element oprogramowania potrzebny do programowania w języku PHP, sprawdź, co już znajduje się na danym komputerze. Zobaczmy, jak ustalić, czy któryś z trzech wymienionych komponentów nie jest już zainstalowany. To, które elementy znajdują się na lokalnym komputerze, w dużym zależy stopniu od systemu operacyjnego. Na przykład w systemie Mac OS X domyślnie instalowany jest serwer WWW, niedostępny w większości komputerów z systemem Windows.

762

Dodatek B

UWAGA: ten dodatek dotyczy platform Windows 2000, XP, Vista, Windows Server 2003 i 2008 oraz innych 32-bitowych wersji systemu operacyjnego Windows, a także platformy Mac OS X 10.3.x i nowszych wersji tego systemu.

Konfigurowanie środowiska programistycznego

Czy masz serwer WWW? Jeśli używasz stosunkowo nowego komputera PC lub Mac, prawdopodobnie masz już serwer WWW. Aby to szybko sprawdzić w każdym z tych systemów, otwórz przeglądarkę i wpisz http://localhost w pasku adresu. Jeśli pojawi się ekran powitalny, oznacza to, że serwer na lokalnej maszynie działa.

Jeśli używasz serwera sieciowego Apache w systemie Mac OS lub Windows, zobaczysz stronę podobną do powyższej.

ows Jeżeli korzystasz z systemu Wind powinna , z zainstalowanym serwerem ISS pojawić się strona podobna do tej.

Czy masz PHP? W której wersji? Jeśli masz serwer WWW, możesz bardzo łatwo sprawdzić, czy zainstalowany jest język PHP, a także określić jego wersję. Utwórz nowy skrypt, nazwij go info.php i wpisz w nim następujący kod:

Zapisz ten plik w katalogu, którego używa dany serwer WWW. W systemie Windows jest to zwykle: C://inetpub/wwwroot/

W komputerach Mac zazwyczaj jest to następujący katalog: /Users/nazwaUytkownika/sites/

Jeśli otworzysz nowo utworzony plik przez wpisanie adresu http://localhost/info.php i masz zainstalowaną obsługę języka PHP, powinieneś zobaczyć stronę podobną do poniższej:

To zainstalowana wersja PHP.

jesteś tutaj  763

Sprawdzanie wersji serwera MySQL

Czy masz zainstalowany serwer MySQL? Którą wersję? Aby to sprawdzić w systemie Windows, wybierz opcję Panel sterowania/Narzędzia administracyjne/Usługi:

Tu znajdziesz serwer MySQL.

Aby sprawdzić obecność serwera MySQL na komputerze Mac, otwórz terminal i wpisz następującą instrukcję: cd /user/local/mysql

Jeśli to polecenie zadziała, oznacza to, że serwer MySQL jest zainstalowany. Aby sprawdzić numer wersji, wpisz poniższą instrukcję: mysql Plik Edycja Okno Pomoc UwielbiamPHP

Jeśli wywołanie tego polecenia zakończy się powodzeniem, oznacza to, że serwer MySQL jest zainstalowany.

To numer zainstalowanej wersji serwera MySQL.

764

Dodatek B

$ cd /usr/local/mysql $ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.0.51b MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

Terminal MySQL jest nazywany także „monitorem” MySQL.

Konfigurowanie środowiska programistycznego

Zacznij od serwera WWW W zależności od używanej wersji systemu Windows możesz pobrać IIS (ang. Internet Information Services) Microsoftu lub serwer WWW Apache (jest to produkt o otwartym dostępie do kodu źródłowego). Na komputerach Mac prawdopodobnie będziesz używał serwera Apache, który jest domyślnie instalowany. Oto krótka instrukcja instalowania serwera Apache w systemie Windows:

Odwiedź stronę http://httpd.apache.org/download.cgi. Jeśli używasz systemu Windows, wybierz plik apache_2.2.11-win32x86-no_ssl.msi. Po jego pobraniu możesz automatycznie zainstalować serwer Apache przez dwukrotne kliknięcie tego pliku. Pobierz tę wersję i kliknij plik dwukrotnie po jego pobraniu.

Pojawi się kreator instalacji. Większość instrukcji jest zrozumiała i wystarczy zaakceptować domyślne ustawienia.

Wybierz domenę, w której działa komputer. Jeśli nie pracujesz w domenie, wpisz nazwę localhost.

Najlepiej wybrać instalację typową.

Zwykle możesz określić katalog, w którym chcesz zainstalować oprogramowanie.

jesteś tutaj  765

Instalowanie PHP

Instalowanie serwera Apache — zakończenie Już prawie skończyłeś. Kliknij przycisk Install i odczekaj około minuty na ukończenie instalacji. Gotowe!

Serwer WWW jest skonfigurowany tak, aby automatycznie rozpoczynał działanie w momencie uruchomienia komputera. Możesz jednak kontrolować serwer przez zatrzymywanie i uruchamianie go w panelu Usługi (Panel sterowania/Narzędzia administracyjne/Usługi), gdzie jest widoczny po zakończeniu instalacji.

Instalowanie PHP Odwiedź stronę http://www.php.net/downloads.php. Jeśli używasz systemu Windows, to — podobnie jak w przypadku serwera Apache — warto pobrać plik instalacyjny dla tego systemu (php-5.2.9-1-win32-installer.msi). Pozwala on automatycznie zainstalować PHP po pobraniu instalatora i jego dwukrotnym kliknięciu.

To wersja z instalatorem dla systemu Windows (plik .msi).

Po kliknięciu danego pliku wybierz jedną z lokalizacji i pobierz go.

766

Dodatek B

Po pobraniu pliku kliknij go dwukrotnie. Naciśnij przycisk Uruchom, aby rozpocząć instalację.

Konfigurowanie środowiska programistycznego

Etapy instalowania PHP Rozpoczynamy od instalacji podstawowej.

Zaakceptuj licencję, aby przejść dalej.

Zwykle warto zaakceptować domyślny katalog instalacyjny.

Zachowaj uwagę przy tym ekranie. Jeśli używasz serwera Apache, wybierz odpowiednią wersję. Użytkownicy serwera IIS zwykle powinny zaznaczyć moduł IISAPI. Sprawdź używane oprogramowanie, aby dokładnie ustalić, czego potrzebujesz. Następna strona także nie jest prosta. Musisz przewinąć listę, aby wyświetlić pozycje pod kategorią Extensions, a następnie wybierz opcję MySQLi. Umożliwi to korzystanie z wbudowanych funkcji mysqli, których używaliśmy w książce!

Przewiń listę tak, aby zniknęła kategoria Extensions, i kliknij strzałkę przy pozycji MySQLi. Następnie wybierz opcję Entire feature….

jesteś tutaj  767

Instalowanie MySQL w systemie Windows

Etapy instalowania PHP — zakończenie I to już wszystko. Kliknij przycisk Install, a następnie Finish, aby zamknąć instalator.

Teraz spróbuj otworzyć w przeglądarce plik http://localhost/info.php i zobacz, jaką wersję wyświetli.

Instalowanie MySQL Instrukcje i rozwiązania problemów Potrzebujesz jeszcze serwera MySQL, dlatego prześledźmy proces pobierania i instalowania tego narzędzia. Oficjalną nazwą bezpłatnej wersji serwera RDBMS MySQL jest obecnie MySQL Community Server. W dalszej części rozdziału omawiamy etapy instalowania serwera MySQL w systemach Windows i Mac OS X. Opis ten nie zastąpi jednak doskonałych instrukcji z witryny poświęconej bazie MySQL, dlatego gorąco zachęcamy do odwiedzenia tego serwisu i zapoznania się z dostępnymi tam informacjami! Szczegółowe wskazówki, a także rozwiązania problemów, znajdziesz na poniższej stronie:

Użyj wersji 6.0 lub now szej.

http://dev.mysql.com/doc/refman/6.0/en/windows-installation.html

Polubisz też narzędzie MySQL Query Browser. Możesz w nim wpisać zapytanie i zobaczyć wyniki w interfejsie tego programu, a nie w oknie konsoli.

768

Dodatek B

Konfigurowanie środowiska programistycznego

Etapy instalowania serwera MySQL w systemie Windows 1

Odwiedź stronę http://dev.mysql.com/downloads/mysql/5.0.html

i kliknij przycisk MySQL Community Server Download. Możliwe, że będziesz musiał przewinąć stronę.

Pobierz wersję 5.0 lub nowszą.

2

Wybierz z listy opcję Windows.

Pierwsza opcja!

jesteś tutaj  769

Instalowanie MySQL w systemie Windows (ciąg dalszy)

Pobierz plik instalacyjny 3

Zalecamy wybór opcji Windows ZIP/Setup.EXE w sekcji Windows downloads, ponieważ archiwum to zawiera instalator, który znacznie ułatwia instalowanie. Następnie kliknij łącze Pick a Mirror.

Pamiętaj, aby wybrać plik .EXE.

4

Zobaczysz listę miejsc, z których możesz pobrać kopię pliku. Wybierz najbliższą lokalizację.

5

Po zakończeniu pobierania pliku kliknij go dwukrotnie, aby uruchomić instalator. Instrukcje widoczne w oknie Setup Wizard przeprowadzą Cię przez proces instalacji. Kliknij przycisk Next.

Kiedy klikniesz dwukrotnie plik i pojawi się okno dialogowe Setu Wizard, naciśnij przycisk Next. p

770

Dodatek B

Konfigurowanie środowiska programistycznego

Wybierz katalog docelowy 6

Zobaczysz prośbę o wybór typu instalacji: Typical, Complete lub Custom. Na potrzeby tej książki wybierz opcję Typical. Możesz zmienić lokalizację instalacji MySQL, jednak zalecamy pozostawienie domyślnego ustawienia: C:\Program Files\MySQL\MySQL Server 5.0

Kliknij przycisk Next.

Kliknij przycisk Install — gotowe! 7

Zobaczysz okno dialogowe Ready to Install z polem Destination Folder, które zawiera nazwę katalogu docelowego. Jeśli ten folder Ci odpowiada, kliknij przycisk Install. W przeciwnym razie kliknij przycisk Back, zmień katalog i wróć do omawianego okna. Kliknij przycisk Install.

jesteś tutaj  771

Instalowanie MySQL w systemie Mac OS X

Włączanie PHP w systemie Mac OS X PHP jest wbudowany w komputery Mac z systemem OS X w wersji 10.5 i nowszych (system Leopard), jednak domyślnie nie jest włączony. Aby uruchomić obsługę PHP, trzeba otworzyć główny plik konfiguracyjny serwera Apache i usunąć komentarz w odpowiednim wierszu kodu. Ten plik nosi nazwę httpd.conf i jest plikiem ukrytym, który znajduje się w katalogu instalacyjnym serwera Apache. Musisz znaleźć poniższy wiesz. Na początku znajduje się symbol kratki (#), co oznacza, że podane instrukcje są komentarzem: #LoadModule php5_module

libexec/apache2/libphp5.so

Aby włączyć PHP, należy usunąć znak kratki i ponownie uruchomić serwer. Dokument httpd.conf należy do użytkownika „root”, co oznacza, że w celu wprowadzenia zmian musisz podać hasło. Prawdopodobnie zechcesz też zmodyfikować plik php.ini, aby serwer Apache używał zapisanych w nim ustawień. Bardziej szczegółowy opis wykonywania tych operacji i włączania obsługi PHP znajdziesz na stronie http://foundationphp.com/tutorials/ php_leopard.php.

Etapy instalowania MySQL w systemie Mac OS X Jeśli korzystasz z systemu Mac OS X Server, MySQL powinien być już zainstalowany. Zanim zaczniesz, sprawdź, czy serwer MySQL nie jest już zainstalowany. W tym celu przejdź do katalogu Applications/Server/MySQL Manager. 1

Odwiedź stronę http://dev.mysql.com/downloads/mysql/5.0.html

i kliknij przycisk z napisem MySQL Community Server Download.

772

Dodatek B

Możliwe, że będziesz musiał przewinąć stronę.

Konfigurowanie środowiska programistycznego

2

Wybierz z listy opcję Mac OS X (package format). Będziesz musiał przewinąć stronę, aby dotrzeć do tej opcji!

3

Wybierz pakiet dostosowany do wersji systemu Mac OS X, której używasz. Kliknij łącze Pick a Mirror.

4

Zobaczysz listę miejsc, z których możesz pobrać kopię pliku. Wybierz najbliższą lokalizację.

5

Po zakończeniu pobierania pliku kliknij go dwukrotnie, aby uruchomić program instalacyjny. Teraz możesz otworzyć okno terminalu i wpisać następujące instrukcje: shell> cd /usr/local/mysql shell> sudo ./bin/mysqld_safe

Jeśli jest to konieczne, wpisz hasło. Wciśnij kombinację Control+Z. shell> bg

Wciśnij kombinację Control+D lub wpisz instrukcję exit, aby zamknąć terminal. Jeśli używasz narzędzia z interfejsem graficznym, na przykład programu phpMyAdmin, sprawdź w dokumentacji, jak uzyskać do niego dostęp po udanym zainstalowaniu serwera MySQL.

jesteś tutaj  773

Umieszczanie witryny w sieci

Przenoszenie kodu ze środowiska produkcyjnego do publicznie dostępnej witryny Poświęciłeś długie dni lub tygodnie na przygotowanie witryny i czujesz, że jesteś gotów udostępnić ją w sieci. Przenoszenie witryny opartej na technologiach PHP i MySQL z lokalnego komputera i umieszczanie jej w internecie wymaga planu oraz zastosowania kilku specyficznych technik. Najpierw trzeba się upewnić, że na docelowym serwerze działają odpowiednie wersje PHP i serwera MySQL. Jeśli nie, musisz dostosować kod do dostępnego oprogramowania. Większość kodu z tej książki działa we wszystkich popularnych wersjach wymienionych narzędzi, jednak możliwe, że będziesz musiał dostosować kod do starszej odmiany języka PHP i użyć funkcji mysql zamiast poleceń mysqli, które stosowaliśmy w przykładowych aplikacjach. Jeśli musisz to zrobić, więcej informacji znajdziesz w punkcie 1. dodatku „Dziesięć najważniejszych tematów (których nie omówiliśmy)”. Jeśli kod aplikacji jest zgodny z oprogramowaniem serwera, wtedy przenoszenie witryny jest proste. Należy wykonać następujące operacje: Pliki PHP trzeba przesłać za pomocą klienta FTP do katalogu sieciowego serwera publicznego.

1. Prześlij pliki PHP z serwera produkcyjnego do katalogu sieciowego serwera publicznego. Nie zmieniaj struktury plików i upewnij się, że nie pominąłeś żadnych katalogów, które zawierają na przykład pliki dołączane.

2. Wykonaj zrzut bazy danych (wkrótce pokażemy, jak to zrobić), aby uzyskać instrukcje MySQL potrzebne do utworzenia tabel i polecenia INSERT potrzebne do przeniesienia informacji z tabel serwera produkcyjnego na serwer publiczny.

3. Zaloguj się do bazy danych na serwerze publicznym, gdzie możesz uruchomić instrukcje CREATE i INSERT w języku MySQL, aby przenieść dane z lokalnego komputera na serwer publiczny.

4. Zmodyfikuj w plikach PHP kod połączeń z bazą danych. Zmienione instrukcje powinny wskazywać na publiczny serwer bazodanowy. Jeśli o tym zapomnisz, kod będzie próbował nawiązać połączenie z serwerem produkcyjnym, co zakończy się niepowodzeniem. Zmień instrukcje mysqli_connect(), aby wskazywały na serwer MySQL powiązany z serwerem publicznym. Użyj też właściwej nazwy użytkownika i odpowiedniego hasła, aby móc połączyć się z bazą.

774

Dodatek B

Musisz przenieść strukturę tabel i zapisane w nich dane. Można to zrobić w następujący sposób:

Zrzut SQL zawiera kompletny kod potrzebnych instrukcji CREATE TABLE i INSERT.

Konfigurowanie środowiska programistycznego

Zrób zrzut danych (i tabel) Przesłałeś za pomocą klienta FTP pliki PHP na serwer publiczny, jednak na powiązanym z nim serwerze MySQL nadal nie ma danych. Jeśli masz tabelę pełną informacji, proces przenoszenia jej do innej bazy może wydawać się trudny. Na szczęście serwer MySQL udostępnia program MySQLdump. Umożliwia on łatwe przygotowanie instrukcji CREATE TABLE, które odbudują tabele, a także wszystkich poleceń INSERT, potrzebnych do wstawienia danych. Musisz jedynie uruchomić program MySQLdump. Aby utworzyć kopię danych, którą można przenieść na inny serwer MySQL, wpisz w terminalu instrukcję podobną do poniższej:

Plik Edycja Okno Pomoc ZróbZrzutDanych

$ mysqldump Usage: mysqldump [OPTIONS] database [tables] ] mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3... OR NS] [OPTIO ses databa mysqldump [OPTIONS] --allOR For more options, use mysqldump --help $mysqldump riskyjobs jobs > riskyjobstable.sql

Spowoduje ona zapisanie w pliku tekstowym riskyjobstable.sql instrukcji CREATE TABLE, która utworzy tabelę jobs. Jeśli pominiesz fragment >riskyjobstable.sql, potrzebne polecenia CREATE TABLE i INSERT pojawią się w oknie terminalu. Spróbuj to zrobić, aby zobaczyć, jak działa to podejście. Nie jest ono zbyt przydatne, jednak zobaczysz wszystkie dane elegancko zapisane w instrukcjach INSERT. Po przesłaniu za pomocą znaku większości wszystkich danych do nowego pliku możesz użyć jego zawartości w zapytaniach MySQL na serwerze publicznym, aby przenieść na niego tabele i informacje.

Przygotowania do użycia zrzutu danych Aby przygotować się do przeniesienia danych, uruchom instrukcję CREATE DATABASE na publicznym serwerze MySQL. Następnie uruchom instrukcję USE DATABASE i wskaż w niej nową bazę. Teraz możesz przenieść dane z serwera produkcyjnego na serwer publiczny.

jesteś tutaj  775

Umieszczanie danych MySQL na serwerze publicznym

Przenoszenie zrzuconych danych na serwer publiczny Masz już plik riskyjobstable.sql, który zawiera instrukcje MySQL potrzebne do utworzenia tabeli i wstawienia do niej danych. Plik riskyjobstable.sql powinien wyglądać mniej więcej tak:

To komentarze, które możesz pominąć.

-- MySQL dump 10.11 --- Host: localhost Database: riskyjobs -- ------------------------------------------------------- Server version 5.0.51b

riskyjobstable.sql

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; --- Table structure for table `jobs` -Jeśli wiesz, że baza nie zawiera tabeli o nazwie „jobs”, możesz pominąć to polecenie.

DROP TABLE IF EXISTS `jobs`; CREATE TABLE `jobs` ( `job_id` int(11) NOT NULL auto_increment, Program To instrukcja MySQLdump `title` varchar(200) default NULL, CREATE TABLE. zawsze dodaje `description` blob, instrukcję DROP, aby opróżnić `city` varchar(30) default NULL, bazę przed `state` char(2) default NULL, wywołaniem poleceń CREATE `zip` char(5) default NULL, i INSERT. `co_id` int(11) default NULL, PRIMARY KEY (`job_id`) ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8; --- Dumping data for table `jobs` --

MySQLdump tworzy jedną instrukcję INSERT, która wstawia wszystkie wiersze tabeli.

776

Możesz zignorować tę wać pio instrukcję LOCK i sko oraz wkleić następne polecenie INSERT.

LOCK TABLES `riskyjobs` WRITE; /*!40000 ALTER TABLE `riskyjobs` DISABLE KEYS */; INSERT INTO `riskyjobs` VALUES (8,’Chodzenie po kremie’,’ Potrzebujemy osób, które zechc przetestowa teori dotyczc moliwoci chodzenia po kremie.\r\n\r\n Zapenimy basem kremem, a pracownik bdzie musia po nim przej. \r\n\r\nKrem i inne pyny o podobnej strukturze to tak zwane ciaa nienewtonowskie. Staj si trwae pod wysokim cinieniem (pod stopami idcej osoby), natomiast normalnie s pynne.\r\n\r\n Dostarczamy rcznik, natomiast pracownik musi mie wasny kostium.\r\n\r\nUwaga: jeli zatrzymasz si na zbyt dugo, moesz zaton. Nie ponosimy adnej odpowiedzialnoci za utonicie w kremie.;

Dodatek B

Konfigurowanie środowiska programistycznego

Wytnij cały tekst z pliku .sql i wklej go w terminalu MySQL lub w oknie zapytań w programie graficznym do obsługi bazy danych (na przykład w aplikacji phpMyAdmin). W ten sposób możesz uruchomić zapytania zapisane w pliku. W omawianym przykładzie plik ze zrzutem zawiera instrukcje CREATE TABLE i INSERT. Ponadto kod żąda od serwera MySQL usunięcia istniejącej tabeli i zablokowania (instrukcja LOCK) tabeli na czas wstawiania nowych danych za pomocą polecenia INSERT.

Łączenie się z serwerem publicznym Przesłałeś już pliki PHP na serwer publiczny. Za pomocą programu MySQLdump zapisałeś strukturę tabeli w instrukcji CREATE TABLE i dane w długim poleceniu INSERT. Następnie uruchomiłeś te instrukcje na publicznym serwerze WWW, aby przenieść informacje. Pozostał do zrobienia jeszcze jeden mały krok. Kod PHP przesłany za pomocą klienta FTP na publiczny serwer WWW nie łączy się z publicznym serwerem MySQL. Musisz zmodyfikować łańcuch znaków połączenia w funkcji mysqli_connect(), aby wskazywał na publiczny serwer MySQL. W każdym miejscu kodu PHP, w którym wywołujesz funkcje mysqli_connect(), musisz wprowadzić następujące zmiany.

$dbc = mysqli_connect(‘localhost’, ‘nazwaUytkownika’, ‘haso’, ‘bazaDanych’) or die(‘Brak poczenia z serwerem MySQL.’); Tu wpisz nazwę lub adres IP publicznego serwera MySQL. Nazwy „localhost” możesz używać tylko wtedy, jeśli serwer MySQL działa na tym samym komputerze, na którym znajdują się strony PHP.

ę bazy Tu umieść nazw rzyłeś wo ut rą któ , ch dany cznym. na serwerze publi Tu podaj nazwę użytkownika i hasło, które pozwolą nawiązać połączenie z publicznym serwerem MySQL.

I to już wszystko! „ Za pomocą klienta FTP skopiowałeś pliki PHP na serwer WWW; „ zrobiłeś zrzut tabel i danych do pliku .sql; „ uruchomiłeś zapytania z pliku .sql na publicznym serwerze MySQL; „ zmodyfikowałeś pliki PHP, aby wywoływały bazę danych z publicznego serwera MySQL.

Witryna powinna być już dostępna!

jesteś tutaj  777

778

Dodatek B

Dodatek C Rozszerzanie PHP

Jeszcze więcej możliwości Wiem, że mam wszystko, czego potrzeba czarująco pięknej i diabelsko inteligentnej femme fatale, jednak to wciąż za mało.

To prawda, że za pomocą PHP i MySQL możesz tworzyć doskonałe aplikacje sieciowe. Jednak wiesz, że musi istnieć coś jeszcze. Rzeczywiście tak jest. W tym krótkim dodatku zobaczysz, jak zainstalować rozszerzenie mysqli i bibliotekę graficzną GD. Opiszemy też kilka innych wartościowych dodatków do języka PHP. Czasem nie ma nic złego w tym, że chcemy czegoś więcej.

to jest nowy dodatek  779

Instalowanie nowych modułów języka PHP

Rozszerzanie języka PHP W tym dodatku omawiamy instalowanie modułów mysqli i GD w systemie Windows. Dowiesz się, jak sprawdzić, które moduły znajdują się już na serwerze, jak pobrać pakiety GD i mysqli, jeśli nie są dostępne, i jak zainstalować je w systemie Windows. Niestety, dodawanie ich do systemów Mac OS i Linux jest dość skomplikowane. Więcej na ten temat dowiesz się w końcowej części dodatku.

UWAGA: ten dodatek dotyczy platform Windows 2000, XP, Vista, Windows Server 2003 i 2008 oraz innych 32-bitowych wersji systemu operacyjnego Windows.

Jeśli używasz systemu Windows, masz szczęście Prawdopodobnie moduły mysqli i GD są już zainstalowane na komputerze, a nawet jeśli jest inaczej, możesz je stosunkowo łatwo dodać. Pokażemy, jak sprawdzić, które komponenty są już dostępne, a także jak pobrać i aktywować moduły, jeżeli nie są jeszcze zainstalowane. Zacznijmy od ustalenia, które elementy znajdują się na komputerze.

1

780

Najpierw sprawdź, czy moduły GD i mysqli znajdują się w systemie. W tym celu przejdź do katalogu, w którym zainstalowane są rozszerzenia języka PHP. Zwykle znajdują się one w folderze C:/PHP/ext. Otwórz odpowiedni katalog i poszukaj plików php_gd2.dll i php_mysqli.dll. Zazwyczaj są one instalowane wraz z PHP 5 i wystarczy je aktywować. Jeśli znalazłeś te pliki, to dobrze — możesz przejść do etapu 3. Jeśli katalog nie zawiera tych modułów, przejdź do kroku 2.

Dodatek C

Powinieneś zobaczyć pliki php_gd2.dll i php_mysqli.dll.

Rozszerzanie PHP 2

Jeśli w podanym katalogu nie ma pliku php_mysqli.dll lub php_gd2.dll, musisz go pobrać. Możliwe, że oba moduły DLL znajdują się na komputerze, jednak jeśli nie, plik php_gd2.dll znajdziesz na stronie http://www.libgd.org/Downloads. Pobierz go i skopiuj do katalogu ext w miejscu zainstalowania PHP (w niniejszym opisie jest to folder C:/PHP/ext). Rozszerzenie mysqli możesz pobrać z witryny MySQL.com. Najpierw przejdź pod adres http://www.mysql.com. Kliknij odnośnik Downloads (w górnej części ekranu), wybierz opcję Connectors w menu lewostronnym, a następnie kliknij odsyłacz MySQL native driver for PHP. Na zakończenie kliknij odnośnik Download.

li

nie mysq Pobierz rozszerze ywanej uż do ne wa dopaso P. wersji języka PH

3

Na tym etapie pliki php_mysqli.dll i php_gd2.dll powinny już znajdować się w katalogu /PHP/ext. Teraz trzeba określić w pliku php.ini, że chcemy używać tych bibliotek DLL. Przejdź do katalogu z tym plikiem i otwórz go w edytorze tekstu.

Czasem instalacja PHP znajduje się w katalogu Program Files/PHP. Znajdź plik php.ini i otwórz go, ponieważ będzie potrzebny w następnym etapie.

jesteś tutaj  781

Instalowanie nowych modułów PHP (ciąg dalszy) 4

Znajdź w pliku php.ini następujące wiersze: extension=php_gd2.dll

i extension=php_mysqli.dll

Jeśli znajduje się przed nimi średnik (;) lub znak kratki (#), oznacza to, że wiersze są traktowane jak komentarz. Usuń wspomniane symbole i zapisz plik.

Jeśli przed tymi wierszami znajdują się średniki, usuń je. Następnie zapisz plik.

5

Ostatni etap polega na ponownym uruchomieniu serwera Apache. Spowoduje to zastosowanie zmian wprowadzonych w pliku php.ini. Aby uruchomić serwer, otwórz Panel sterowania systemu Windows, kliknij dwukrotnie ikonę Narzędzia administracyjne, a następnie wybierz opcję Usługi. Powinieneś zobaczyć następujące okno: e i kliknij Zaznacz serwer Apachownie. pon m cho Uru odnośnik

Zaznacz usługę Apache, a następnie kliknij opcję Uruchom ponownie, widoczną w menu po lewej stronie okna. Jeśli teraz spróbujesz uruchomić funkcje modułu GD lub mysqli, powinny one działać prawidłowo.

782

Dodatek C

Rozszerzanie PHP

A w komputerach Mac… Niestety, w komputerach Mac dodawanie modułów nie jest takie proste. Wymaga to ponownego skompilowania kodu źródłowego PHP przy użyciu odpowiednich argumentów, które spowodują zastosowanie omawianych bibliotek. Istnieje zbyt wiele możliwych kombinacji systemów operacyjnych Mac OS i wersji języka PHP, aby opisać je w tym krótkim dodatku. Doskonały przewodnik, który pomoże Ci zainstalować moduł GD, znajdziesz pod poniższym adresem:

http://macoshelp.blogspot.com/2008/02/adding-gd-library-for-mac-os-x-leopard.html Strona ta opisuje instalację tylko dla użytkowników systemu OS X (wersja Leopard) i PHP 5. Jeśli korzystasz z innych narzędzi lub podane instrukcje nie działają, możesz przejrzeć komentarze na wspomnianej stronie i odwiedzić witrynę poświęconą modułowi GD (http://www.libgd.org/), gdzie znajdziesz bardziej szczegółowy i specyficzny opis instalacji dla wybranych wersji systemu OS X i języka PHP. Aby dowiedzieć się czegoś więcej o dodawaniu mysqli do PHP w danej wersji systemu Mac OS, co także wymaga ponownego skompilowania PHP, warto zapoznać się z instrukcjami z następującej strony:

http://dev.mysql.com/downloads/connector/php-mysqlnd/

Pamiętaj, że trudności z instalowaniem rozszerzeń GD i mysqli występują tylko przy uruchamianiu na komputerze Mac serwera WWW (na przykład lokalnego serwera programistycznego). Jednak jeśli używasz komputera tylko do pisania kodu PHP, który przesyłasz na inny serwer i tam testujesz, dodawanie modułów nie jest konieczne.

jesteś tutaj  783

784

Dodatek C

Skorowidz

Skorowidz --, 368 !, 210, 215, 257 !=, 204 $, 63 $_COOKIE, 410, 429, 432, 448 $_FILES, 275, 288, 303, 327 $_GET, 312, 313 $_POST, 54, 62, 70, 71, 95, 128, 172, 238, 312, 313 $_SERVER, 236, 334, 349, 376, 395, 409 $_SESSION, 425, 429, 432, 448 $this, 751 &&, 215, 257 ©, 84 ? :, 489, 531 @, 305, 306 [], 557 \, 84 \’, 84 \n, 84 _, 537 ||, 215, 257 , 62, 63, 80, 95, 229 , 204 ->, 726, 728, 730 >=, 204

A action, 52, 55, 236 ADD COLUMN, 268, 270, 271, 356 adres e-mail, 43, 164, 597 wyrażenia regularne, 627 adres IP, 114 adres URL, 65, 312, 350, 712 aliasy, 511, 531, 668 ALTER, 163, 267, 268, 355 ALTER TABLE, 245, 257, 268, 270, 356 ADD, 245 ADD COLUMN, 268, 270, 271, 327 CHANGE COLUMN, 268 DROP COLUMN, 268 MODIFY COLUMN, 268 and, 217 AND, 319 Apache, 765, 766 aplikacje, 143 aplikacje internetowe, 143, 192 strony administracyjne, 308

aplikacje sieciowe, 40 apostrofy, 85, 130 arkusze stylów, 298 array(), 425, 664 array_push(), 483 AS, 511, 531 ASC, 295, 327 ASCII, 645 ataki roboty spamujące, 638 wstrzyknięcie kodu SQL, 368 XSS, 755 atrybuty, 728 attributes(), 728 AUTO_INCREMENT, 245, 274, 371 automatyczne wylogowanie użytkowników, 438 automatycznie przesłane dane, 640 automatyzacja zapytań SQL, 110, 122

B Basic realm, 340, 345, 349 baza danych, 97, 106, 147, 180 integralność referencji, 471 klucz główny, 244, 470 klucz obcy, 470 klucz zewnętrzny, 470 minimalizacja ilości potrzebnej pamięci, 487 modyfikacja tabel, 245 MySQL, 97, 99 normalizacja, 496, 499 obsługa, 106 pliki, 147 pobieranie danych, 108, 168 powtarzające się dane, 502 projekt, 478 projektowanie, 487 przechowywanie danych, 99

jesteś tutaj  785

Skorowidz baza danych relacje między tabelami, 472 schemat, 465, 531 serwer, 99, 100 SQL, 99 tabele, 99, 106, 147 tworzenie, 100, 148 usuwanie danych, 185 usuwanie tabeli, 162 wstawianie danych, 104, 110 wstawianie danych za pomocą skryptu PHP, 115 wydajność zapytań, 497 zamykanie połączenia, 117, 125 zapisywanie danych, 480 zarządzanie, 99 zarządzanie błędnymi danymi, 494 bezpieczeństwo, 329 ataki XSS, 755 INSERT, 371 moderowanie, 354 uwierzytelnianie HTTP, 333 wstrzyknięcie kodu SQL, 369 BLOB, 152 blok PHP, 229 blokowanie automatycznie przesłane dane, 640 komunikaty o błędach, 305 break, 574 budowanie zapytania SQL w kodzie PHP, 123 build_query(), 569, 577, 581

C CAPTCHA, 643, 686 generowanie losowego łańcucha znaków, 645 generowanie losowych rysunków, 655 generowanie rysunku, 646 generowanie tekstu hasła, 645 osoby niepełnosprawne, 644 case, 574 catch, 750 ceil(), 585 CHANGE COLUMN, 268

786

Skorowidz

CHAR, 152, 153 CHARACTER, 152 checkdnsrr(), 630, 631, 632, 634, 636 checked, 488, 489 children(), 729 chr(), 645 ciasteczka, 408 class, 751 Content-Type, 339, 343 cookie, 408 Coppermine Gallery, 760 count(), 522 CREATE DATABASE, 102, 148, 149, 156, 180, 775 CREATE TABLE, 102, 103, 155, 156, 180, 504, 777 CREATE USER, 746 createtruecolorimage(), 661 cross-site scripting, 755 CSS, 50, 80, 298 cudzysłowy, 85, 130 czas, 288 czas życia plików cookie, 440, 441 czas życia sesji, 440 czcionki, 652 TrueType, 652 czytelność kodu, 126, 223 czytnik wiadomości, 690, 696

D dane, 463 dane atomowe, 496, 497 wydajność zapytań, 497 dane binarne, 259, 288 dane całkowitoliczbowe, 151 dane przechowywane w plikach, 261 dane sesji, 423 dane tekstowe, 151 dane XML, 725 dane z formularza, 129 DATE, 152 DATETIME, 152 DEC, 153 DECIMAL, 152 default, 574

DEFAULT, 372, 376 define(), 645, 646 definiowanie danych, 151 DELETE FROM, 185, 188, 193, 242, 243, 318, 319, 327 kontrola liczby usuwanych wierszy, 320 LIMIT, 320 WHERE, 186 DESC, 295, 327 DESCRIBE, 160, 161, 193, 270, 271, 477 diagram tabeli, 465 diagramy niedopasowania, 663 die(), 121, 126 display_errors, 754 DNS, 630 DOCTYPE, 62 dodawanie adresy e-mail do bazy danych, 164 odnośnik do skryptu rejestracji, 404 pamięć do pól formularza, 240 style, 298 dokumenty PDF, 259 dokumenty RSS, 696, 699 generowanie, 702 dokumenty XML, 699 dołączanie danych współużytkowanych przez skrypty, 291 dołączanie plików, 290 Domain Name System, 630 domeny, 630, 631 dopasowanie kodu do języka PHP 4, 744 dopasowywanie adresów e-mail, 628 dostęp do danych XML, 726 dostęp do danych z formularza, 54 dostęp do prywatnych danych, 382 dostęp do serwera MySQL, 101, 106 dostęp do właściwości, 726 draw_bar_graph(), 677, 679 DROP COLUMN, 268 DROP TABLE, 162, 180, 193, 245 Drupal, 760 dynamiczna witryna, 143

Skorowidz dynamiczne generowanie kanały RSS, 702 rysunki, 637 strony HTML, 41 dynamiczne menu, 416 generowanie, 416 dynamiczne rysowanie obrazków, 646 dynamiczne strony HTML, 41 dynamiczne tworzenie tablic, 483

E echo, 80, 95, 240, 410, 491 elementy, 699 eliminowanie powtórzeń kodu, 451 elipsa, 650 else, 220, 225, 257 empty(), 208, 209, 257, 415, 598 encje, 723 ENUM, 359 ereg, 759 error_log, 754 exec(), 631 exit(), 341, 345, 376, 404 explode(), 542, 550, 551, 558, 592 expose_php, 754

F false, 65 filtrowanie danych, 134, 639 FIRST, 245 flagi, 230 footer.php, 455 for, 522, 531 aktualizowanie licznika, 522 inicjowanie, 522 wyrażenie warunkowe, 522 foreach, 251, 252, 257, 523, 556 format danych, 598 formatowanie danych o filmach, 733 formatowanie tekstu, 84 formaty obrazków, 661 formularz autoreferencyjny, 235 tworzenie, 236 formularz logowania, 391 formularz rejestracji, 398, 399

formularz z pamięcią, 235 formularze, 42, 43, 228 $_POST, 70, 71, 129 action, 52 dane, 45, 129 dostęp do danych, 54 generowanie, 490 informacje zwrotne, 219 kod HTML, 44 kontrola nad pobieraniem danych, 47 metody przesyłania, 314 nazwy plików, 275 obsługa rysunków, 272 pola, 44, 70 problemy, 46 przesyłanie danych, 47 przesyłanie danych do bazy danych, 112 przesyłanie danych pocztą elektroniczną, 44, 98 przycisk Wyślij, 238 skrypty PHP, 52 sprawdzanie poprawności danych, 200 sprawdzanie przesłania, 238 sterowanie danymi, 484 test CAPTCHA, 643 walidacja danych, 207, 373 żądania GET, 314 żądania POST, 313 FROM, 108, 134 FTP, 57 function, 568 funkcje, 533 array(), 425 array_push(), 483 build_query(), 569, 581 ceil(), 585 checkdnsrr(), 630, 631, 632, 634, 636 chr(), 645 count(), 522 createtruecolorimage(), 661 define(), 645, 646 die(), 121, 126

empty(), 208, 209, 257, 415, 598 exec(), 631 exit(), 341, 345, 376, 404 explode(), 542, 550, 551, 558, 592 generate_page_links(), 586, 590 header(), 339, 343, 345, 349, 376, 392, 702 imagecolorallocate(), 646, 648, 661 imagecolortransparent(), 661 imagecreatetruecolor(), 646, 648, 686 imagedestroy(), 651, 686 imageellipse(), 650 imagefilledellipse(), 650 imagefilledrectangle(), 646, 648, 649 imagegif(), 661 imagejpeg(), 661 imageline(), 646, 649, 686 imagepng(), 646, 650, 661, 683, 686 imagerectangle(), 649, 686 imagesetpixel(), 646, 649 imagestring(), 651, 652, 686 imagestringup(), 651, 686 imagettftext(), 646, 652, 686 implode(), 545, 558, 592 is_numeric(), 373, 376 isset(), 208, 209, 238, 257, 425, 598 kod, 568 mail(), 88, 89, 95, 172, 182 md5(), 389 MD5(), 389 move_uploaded_file(), 281, 288 mysql_close(), 745 mysql_connect(), 744, 745 mysql_error(), 745, 748 mysql_escape_string(), 745 mysql_fetch_row(), 745 mysql_num_rows(), 745 mysql_query(), 745 mysql_real_escape_string(), 745 mysql_select_db(), 744, 745 mysqli_close(), 115, 116, 117, 125, 126, 745 mysqli_connect(), 115, 116, 118, 121, 126, 744, 745, 748, 774, 777 mysqli_error(), 745, 748

jesteś tutaj  787

Skorowidz funkcje mysqli_escape_string(), 745 mysqli_fetch_array(), 173, 174, 178, 180, 193 mysqli_fetch_row(), 745 mysqli_num_rows(), 585, 745 mysqli_query(), 115, 116, 117, 122, 126, 128, 149, 163, 172, 173, 745 mysqli_real_escape_string(), 370, 374, 376, 745 mysqli_select_db(), 120, 744, 745 niestandardowe funkcje, 567, 570 NOW(), 288 parametry, 568, 571 phpinfo(), 57, 753, 763 preg_match(), 616, 632, 634, 636, 759 preg_replace(), 620, 623, 624, 634, 636 rand(), 645 return, 568 session_destroy(), 424, 448 session_name(), 425 session_start(), 424, 429, 431, 432, 448 setcookie(), 410, 419, 448 SHA(), 388, 396, 448 sha1(), 389 simplexml_load_file(), 718, 719, 741 str_replace(), 552, 592, 597, 620 strip_tags(), 756 strlen(), 597 substr(), 560, 561, 562 SUBSTRING(), 562 time(), 288, 419 trim(), 370, 374, 376 tworzenie, 567 unlink(), 305, 306 wbudowane funkcje, 568 wielokrotne wykorzystanie kodu, 568 wywołanie, 568 zwracanie wartości, 568 funkcje graficzne, 648

788

Skorowidz

G GD, 644, 648, 686, 780 generate_page_links(), 586, 590 generate_sort_links(), 575, 576, 578 generowanie dokument RSS, 702 formularz z kwestionariuszem, 490 kod HTML, 54 kod RSS, 695 losowy łańcuch znaków, 645 losowy rysunek z testami CAPTCHA, 655 menu, 416 odnośnik do nawigacji, 586 odsyłacze do usuwania wyników, 311 rysunki, 644 rysunki z testem CAPTCHA, 646 tekst hasła w teście CAPTCHA, 645 GET, 312, 314, 315, 316, 337, 679 GIF, 276, 644, 661 GRANT, 746

H hasła, 332, 334, 382, 386 asteryski, 387 przechowywanie, 394 szyfrowanie, 386, 388 header(), 339, 343, 345, 349, 376, 392, 702 header.php, 455 HTML, 40, 48, 50 HTTP/1.1 401 Unauthorized, 340, 392

I identyfikacja użytkowników, 385 identyfikatory kolor, 648 rysunek, 648 sesja, 424, 431, 437 zasób MySQL, 173 if, 202, 257, 415 else, 220 zagnieżdżanie instrukcji, 223 IIS, 765

imagecolorallocate(), 646, 648, 661 imagecolortransparent(), 661 imagecreatetruecolor(), 646, 648, 686 imagedestroy(), 651, 686 imageellipse(), 650 imagefilledellipse(), 650 imagefilledrectangle(), 646, 648, 649 imagegif(), 661 imagejpeg(), 661 imageline(), 646, 649, 686 imagepng(), 646, 650, 661, 683, 686 imagerectangle(), 649, 686 images, 283, 284, 327 imagesetpixel(), 646, 649 imagestring(), 651, 652, 686 imagestringup(), 651, 686 imagettftext(), 646, 652, 686 implode(), 545, 558, 592 include file, 291 include(), 291, 327 include_once(), 327 informacje o przesyłanych plikach, 275 informacje o serwerze PHP, 754 informacje zwrotne, 219 inicjowanie wyników wyszukiwania, 520 INNER JOIN, 507, 509, 531 input, 44 INSERT, 104, 105, 107, 123, 166, 274, 267, 479 AUTO_INCREMENT, 274 bezpieczeństwo, 371 nazwy kolumn, 105 instalacja język PHP, 762, 766 moduły języka PHP, 780 serwer Apache, 765, 766 serwer MySQL, 101, 762, 768 instrukcje, 63 SQL, 149 zapis w wielu wierszach, 82 INT, 152, 153 INTEGER, 152 integralność referencji, 471 interfejs logowania, 387, 391

Skorowidz inżynieria wsteczna, 350 is_numeric(), 373, 376 isset(), 208, 209, 238, 257, 425, 598

J jeden do jednego, 472 jeden do wielu, 473 język działający po stronie serwera, 50 język HTML, 42 język MySQL, 35 język PHP, 40, 41, 49, 51 język PHP 4, 744 język RSS, 697 język SQL, 35, 99 język XML, 691 język znaczników, 691 JOIN, 508, 520 JPEG, 259, 276, 306, 644, 661

K kanały RSS, 690, 692, 701 tworzenie, 697 kanały wiadomości, 690 kasowanie rekordów, 326 katalog images, 283, 284 kategorie, 464, 668 kierowanie zapytań do bazy MySQL w skryptach PHP, 124 klasy, 751 klasy znaków, 610, 611, 634, 636 klient, 47, 48 FTP, 57 klucz, 470 klucz główny, 244, 246, 470, 530 reguły korzystania, 246 klucz obcy, 470 klucz zewnętrzny, 470, 471, 531 kod ASCII, 645 kod HTML, 41, 44, 53 kod PHP, 54, 59, 63, 80, 95 uporządkowanie, 83 kod po stronie klienta, 48, 95 kod po stronie serwera, 49, 95 kod RSS, 702 kod SQL, 102, 126

kod wielokrotnego użytku, 676 kod XML, 691, 695, 719 kodowanie Unicode, 758 kolejność wykonywania operacji, 757 kolekcje, 70 kolekcje obiektów, 727 kolory, 648 kolumny, 147, 150 aliasy, 511 klucz główny, 244 opcje, 161 typy danych, 151 komentarze języka SQL, 368 kompresja rysunku PNG, 683 komunikacja między skryptami, 312 komunikacja typu żądanie – odpowiedź, 711 komunikacja z bazą danych, 116 serwer MySQL, 100 komunikaty o błędach, 230, 305, 754 konfiguracja środowiska programistycznego, 762 konkatenacja łańcuchów znaków, 78 kontrola danych, 463 kontrola liczby usuwanych wierszy, 320 kontrola nagłówków HTTP, 339 kończenie działanie skryptu PHP, 341 sesje, 424 kopiowanie niepustych elementów do nowej tablicy, 557 kwantyfikatory, 609, 634 kwestionariusz, 479

L lewostronne złączenia zewnętrzne, 514 liczba elementów tablicy, 522 liczby, 151, 153 losowe, 645 LIKE, 537, 539, 541, 592 symbole wieloznaczne, 537 LIMIT, 320, 580, 581, 592 stronicowanie, 582 linie, 649 listy mailingowe, 142

localhost, 114 Location, 343 log_errors, 754 loginy, 382 baza danych, 385 hasło, 382 identyfikacja użytkowników, 385 interfejs logowania, 387 nazwa użytkownika, 382 obsługa, 383 odszyfrowanie haseł, 389 skrypt logowania, 383 logowanie, 382, 391, 398, 403 pliki cookie, 413, 414 przechowywanie danych na serwerze, 422 sesje, 426 trwałość, 443 uwierzytelnianie HTTP, 391, 395 lokalizacja cudzysłowów, 130 lokalizacja przesyłanych rysunków, 288 lokalizacja serwera MySQL, 114 ludzki moderator, 354, 377

Ł łańcuchy znaków, 78, 80, 85 apostrofy, 85, 130 cudzysłowy, 85, 130 explode(), 542 implode(), 545 konkatenacja, 78, 82 pobieranie fragmentu łańcucha, 560 pobieranie podłańcuchów z obu stron tekstu, 561 podłańcuchy, 542 podział na pojedyncze słowa, 542 rysowanie, 651 scalanie, 78, 82 sekwencje ucieczki, 84, 85 substr(), 561 tworzenie przy użyciu podłańcuchów, 545 wstępne przetwarzanie, 551 wyrażenia regularne, 602 zastępowanie znaków, 552

jesteś tutaj  789

Skorowidz łączenie łańcuchy znaków, 78, 82 tabele, 470

M Mac OS X, 772 MySQL, 772 PHP, 772 rozszerzanie języka PHP, 783 mail(), 88, 89, 95, 172, 182 mailto, 44, 46, 47, 48 materiały z YouTube, 708 md5(), 389 MD5(), 389 mechanizm rejestracji, 405 menu dynamiczne, 416 menu nawigacyjne, 455, 456 metapoznanie, 31 metaznaki, 604 metody, 728, 751 MIME, 303, 306 minimalizacja ryzyka przypadkowych usunięć, 187 model bazy danych, 465 model danych, 464 moderator, 354, 365 moderowanie, 354, 355, 639 MODIFY COLUMN, 268 modyfikacja tabel, 245, 268 move_uploaded_file(), 281, 288 mózg, 29, 33 mysql, 102 MySQL, 35, 97, 99, 463, 764 baza danych, 100 dostęp do serwera, 106 GRANT, 746 identyfikator zasobu, 173 instalacja serwera, 769 Mac OS X, 772 modyfikacja tabel, 245 obsługa, 100 phpMyAdmin, 100, 106 pobieranie danych, 108, 168 polecenia, 102 przechowywanie danych, 99

790

Skorowidz

serwer, 101 terminal, 100, 106 tworzenie bazy danych, 102 tworzenie tabel, 102 tworzenie użytkowników, 746 typy danych, 152 umieszczanie danych na serwerze publicznym, 776 uprawnienia użytkowników, 746 usuwanie danych, 185 usuwanie tabeli, 162 użytkownicy, 746 wielkość znaków, 161 wstawianie danych, 104, 110 zgłaszanie błędów, 748 zrzut danych, 775 MySQL 5.0, 34 MySQL Community Server, 768 MySQL Query Browser, 768 mysql_close(), 745 mysql_connect(), 744, 745 mysql_error(), 745, 748 mysql_escape_string(), 745 mysql_fetch_row(), 745 mysql_num_rows(), 745 mysql_query(), 745 mysql_real_escape_string(), 745 mysql_select_db(), 744, 745 MySQLAdministrator, 746 MySQLdump, 775 mysqli, 780 mysqli_close(), 115, 116, 117, 125, 126, 745 mysqli_connect(), 111, 115, 116, 118, 121, 126, 744, 745, 748, 774, 777 parametry, 118 mysqli_error(), 745, 748 mysqli_escape_string(), 745 mysqli_fetch_array(), 173, 174, 178, 180, 193 mysqli_fetch_row(), 745 mysqli_num_rows(), 585, 745 mysqli_query(), 111, 115, 116, 117, 122, 124, 126, 128, 149, 163, 172, 173, 745

mysqli_real_escape_string(), 370, 374, 376, 745 mysqli_select_db(), 120, 744, 745 myślenie, 29

N nagłówek strony, 455 nagłówki HTTP, 336 Content-Type, 339, 343 Location, 343 lokalizacja, 343 odświeżanie, 343 Refresh, 343 tworzenie, 339 typ zawartości, 343 uwierzytelnianie, 340 name, 251 naprawa błędnych danych, 597 nauczanie, 33 navmenu.php, 455 nawiasy klamrowe, 202 nawigacja, 416 nazwy bieżący skrypt, 236 domeny, 631 funkcje, 568 pliki, 274, 275 użytkownicy, 382 zmienne, 63, 64 negacja, 210 new, 751 niedopasowanie, 519 niepowtarzalna identyfikacja danych, 244 niepowtarzalność danych, 246 niestandardowe funkcje, 567, 570 niezatwierdzone wyniki, 361 niezawodność aplikacji, 304 normalizacja, 496, 499, 531 dane atomowe, 496 klucz główny, 499 stopnie, 504 zalety, 498 NOT NULL, 245 notacja z kropką, 508

Skorowidz NOW(), 288 nowy wiersz, 85 NULL, 65, 208, 270 numery telefonów, 597, 599, 600 sprawdzanie poprawności, 619 standaryzacja, 623 wyrażenia regularne, 605 wzorzec, 601

O obiektowy język PHP, 751 obiekty, 718, 726, 730, 751, 759 $this, 751 dostęp do danych XML, 726 dostęp do właściwości, 726 metody, 751 operacje, 752 pobieranie danych XML, 728 SimpleXMLElement, 726, 730, 741 tworzenie, 751 właściwości, 726, 730 obrazy, 646 obsługa bazy danych, 106 obsługa instrukcji SQL, 111 obsługa kodowania Unicode, 758 obsługa listy mailingowej, 142 obsługa loginów, 383 obsługa moderowania, 355 obsługa MySQL, 100 obsługa PHP, 56 obsługa połączeń z MySQL, 116 obsługa rysunków, 268, 272 obsługa sesji, 424, 428 obsługa testu CAPTCHA, 656 obsługa uwierzytelniania, 348 obsługa wyjątków, 749 obsługa XML, 759 obszar tekstowy, 240 obustronne złączenia zewnętrzne, 514 ochrona strony administracyjnej hasłem, 332 ochrona witryny przed robotami, 643 OCR, 643 odnośniki, 166 do kanału RSS, 705, 706

do skryptu rejestracji, 404 nawigacyjne odnośniki, 586 odpowiedzi, 464 odsyłacze do usuwania wyników, 311 odszyfrowanie haseł, 389 ograniczanie rozmiaru rysunków, 302 okrąg, 650 określanie sposobu sortowania, 572 ON, 508, 509, 510 open_basedir, 754 operatory, 204 !, 210 &&, 215 ? :, 489 ||, 215 ->, 728 and, 217 logiczne, 215, 217 negacja, 210 or, 217 pierwszeństwo, 757 porównania, 257 przetwarzanie skrócone, 217 trójargumentowy, 489, 491, 493, 531 opis danych, 691 opis struktury tabeli, 161 or, 217 or die(), 121 ORDER BY, 294, 327, 564, 571, 573, 577 OS X, 772 osadzanie kodu PHP, 54, 63 otwieranie bloku PHP, 229

P parametry, 568, 571 PDF, 259 Personal Home Pages, 53 personalizacja aplikacji, 380 pętle, 176 for, 522 foreach, 251, 523 nieskończone, 180 while, 177, 178, 180, 521 PHP, 40, 41, 49, 51, 53, 95, 766

$_COOKIE, 410 $_FILES, 275 $_GET, 312 $_POST, 70 $_SESSION, 425 $this, 751 apostrofy, 130 bloki, 229 catch, 750 class, 751 cudzysłowy, 130 display_errors, 754 dostęp do danych XML, 726 echo, 80 else, 220 error_log, 754 expose_php, 754 extension, 782 for, 522 foreach, 251, 252, 523 formatowanie tekstu, 84 function, 568 funkcje, 568 funkcje graficzne, 644 GD, 644, 780 generowanie dokumentu RSS, 702 if, 202 instalacja modułów, 780 instrukcje, 63, 82 klasy, 751 kolejność wykonywania operacji, 757 kolekcje obiektów, 727 komunikacja z bazą danych, 116 komunikaty o błędach, 754 kończenie działania skryptu, 121 log_errors, 754 Mac OS X, 772 metody, 751 moduły, 780 mysqli, 780 new, 751 obiekty, 718, 726, 751, 759 obsługa wyjątków, 749 open_basedir, 754

jesteś tutaj  791

Skorowidz PHP operatory logiczne, 215 osadzanie kodu, 63 pętle, 176 pierwszeństwo operatorów, 757 pliki cookie, 410 podejmowanie decyzji, 201 polecenia SQL, 110 połączenie z bazą danych, 114 porównywanie wartości, 204 programowanie obiektowe, 751 przechowywanie danych, 69 rejestrowanie błędów, 754 return, 568 rozszerzenia, 780 safe_mode, 754 sesje, 424 skrypty, 41 sprawdzanie zawartości zmiennych, 208 stałe, 284 switch, 574 tablice, 72, 664, 668, 670 throw, 750 try, 750 tworzenie zapytań SQL, 122 typy danych, 65 uwierzytelnianie HTTP, 333 właściwości, 726 wstawianie danych do bazy danych, 115 wyrażenia regularne, 616 XML, 759 zabezpieczenie aplikacji, 753 zgodność kodu ze starszymi wersjami języka, 744 zmienne, 62 PHP 4, 744 PHP 5, 34, 758 PHP 6, 758 php.ini, 288, 753 PHP: Hypertext Processor, 53 PHP_AUTH_PW, 334 PHP_AUTH_USER, 334 PHP_SELF, 236, 325

792

Skorowidz

phpBB, 760 phpinfo(), 57, 753, 763 phpMyAdmin, 100, 103, 106, 148 wyświetlanie struktury tabeli, 161 pierwszeństwo operatorów, 757 piksel, 649 pisanie kodu, 63 plan tworzenia wykresu, 671 planowanie obsługa loginów, 383 obsługa moderowania, 355 przesyłanie plików, 267 rozwijanie aplikacji, 146 pliki, 259, 276 graficzne, 274, 306 html, 63 logiczne, 257 php, 50, 63 png, 646, 650 typy MIME, 303 usuwanie, 305 xml, 719 pliki cookie, 408, 431, 434 $_COOKIE, 410 czas życia, 440, 441 data wygasania, 409 hasła, 415 ilość danych, 444 logowanie, 413, 414 nazwa, 409 pobieranie, 408 sesje, 431 setcookie(), 410 trwałość, 409 tymczasowa trwałość, 409 usuwanie, 418, 419 wartość, 409 wylogowanie, 418 zapisywanie, 408, 410 zawartość, 409 pliki dołączane, 290, 457 PNG, 276, 644, 646, 650, 661 kompresja, 683 pobieranie danych, 108, 168, 173 dane XML, 727, 728

filtrowanie danych na podstawie wartości danej kolumny, 361 wiersz po wierszu, 173 pobieranie fragmentu łańcucha znaków, 560 pobieranie materiałów od innych, 710 YouTube, 710 pobieranie odpowiedzi użytkownika, 520 pobieranie plików cookie, 408 pobieranie podłańcuchów z obu stron tekstu, 561 pobieranie rysunków od użytkownika, 272 pobieranie wyników zapytania, 174 podejmowanie decyzji w kodzie PHP, 201 podejście obiektowe, 752 podział aplikacji na szablonowe skrypty, 458 podział łańcucha znaków na pojedyncze słowa, 542 podział wyników zapytania na strony, 580 pola formularza, 70 pola wyboru, 251 polecenia SQL, 102, 149 wywołanie, 103 połączenie z bazą danych MySQL, 103, 113 mysqli_connect(), 118 obsługa błędów, 121 połączenie z serwerem publicznym, 777 porównania, 257 łańcuchy, 536 osoby pod kątem niedopasowania, 521 wartości, 204 porządkowanie kodu PHP, 83 porządkowanie wyników zapytania, 294 POST, 314, 315, 316, 679 powielanie kodu, 230, 290 poziom bezpieczeństwa, 335 prawostronne złączenia zewnętrzne, 514 preg_match(), 616, 632, 634, 636, 759 preg_replace(), 620, 623, 624, 634, 636

Skorowidz PRIMARY KEY, 245, 246, 247 proces komunikacji typu żądanie – odpowiedź, 711 profile użytkowników, 394 programowanie obiektowe, 751 projekt aplikacji, 144 projekt bazy danych, 478 projektowanie aplikacje PHP, 460 atomowe dane, 497 strona administracyjna, 308 projektowanie bazy danych, 478 minimalizacja ilości potrzebnej pamięci, 487 normalizacja, 496 prostokąt, 649 prywatne dane, 381 przechodzenie po danych, 178 przechodzenie po elementach tablicy, 251, 252 przechowywanie danych, 69, 99 pliki, 261, 276 przechowywanie danych logowania na serwerze, 422 przechowywanie hasła, 394 przechowywanie informacji, 147 przechowywanie kodu PHP, 65 przechowywanie kodu SQL, 126 przechowywanie prywatnych danych użytkowników, 381 przechowywanie rysunków, 262 przechwytywanie wyjątków, 750 przeglądarka, 40, 41, 48 przekształcanie kodu PHP, 60, 80 przenoszenie aplikacji ze środowiska testowego na serwer WWW, 195 przenoszenie kodu ze środowiska produkcyjnego do publicznie dostępnej witryny, 774 przenoszenie plików na serwer, 57 skrypty PHP, 57 przenoszenie zrzuconych danych na serwer publiczny, 776 przepływ danych z formularza, 112 przestrzenie nazw, 723, 725, 729

przesyłanie danych do użytkowników, 689 przesyłanie danych między skryptami, 314 przesyłanie danych z formularza do bazy danych, 112 przesyłanie danych z formularza pocztą elektroniczną, 98 przesyłanie formularza, 45 przesyłanie informacji, 710 przesyłanie plików, 267 katalog images, 283 katalog tymczasowy, 280 lokalizacja, 288 move_uploaded_file(), 281 początkowa lokalizacja, 282 rozmiar, 302, 303 upload_tmp_dir, 282 walidacja, 302, 304 przesyłanie rysunków, 651 przetwarzanie dane od użytkowników, 55 dane XML, 730 dane z formularza, 370 pliki XML, 759 skrypty PHP, 50, 60 przetwarzanie skrócone operatorów, 217 przezroczystość, 661 przyciąganie internautów, 688 przycisk opcji, 488, 491 przygotowanie modelu danych, 464 przypisanie, 206 przypisanie wartości, 69 przyrostki domen, 630 pseudokod, 673

R rand(), 645 RAND_MAX, 645 RDBMS, 35, 768 Really Simple Syndication, 692 referencja do obrazka, 276 Refresh, 343 reguły języka XML, 691

reguły nazywania zmiennych, 64 reguły pisania kodu, 63 rejestracja użytkowników, 332, 398, 399 rejestrowanie błędów, 754 relacje między tabelami, 472 jeden do jednego, 472 jeden do wielu, 473 wiele do wielu, 474 require(), 327 require_once(), 291, 292, 327 REST, 712, 713, 741 return, 568 roboty spamujące, 638 rozmiar rysunków, 302 rozmieszczanie filmów z serwisu YouTube, 732 rozpoczynanie sesji, 455 rozpowszechnianie danych, 688 RSS, 690 rozpowszechnianie filmów z YouTube, 711 rozpowszechnianie kanału RSS, 705 rozsyłanie informacji, 689 rozszerzanie języka PHP, 780 system Mac OS X, 783 system Windows, 780 rozwój aplikacji, 146 równość, 203 RSS, 690, 692, 697, 701, 741 , 697, 702 , 697 , 697 , 697, 700 , 697 , 697 , 697 , 697, 702 , 697 czytnik wiadomości, 690 generowanie dokumentu, 702 informacje o kanale, 702 kanały, 690, 701 odnośnik do kanału, 706 przesyłanie informacji, 710 rozpowszechnianie kanału, 705

jesteś tutaj  793

Skorowidz RSS rysunki, 700 subskrybowanie kanałów, 690 wizualizacja kodu, 699 XML, 691 znaczniki, 697 RSS 2.0, 700 rysowanie, 648, 679 czcionki, 652 elipsa, 650 identyfikator koloru, 648 identyfikator rysunku, 648 linie, 646, 649 łańcuchy znaków, 651 obrazki, 646 okrąg, 650 piksel, 649 PNG, 650 prostokąt, 649 przezroczystość, 661 wykresy słupkowe, 676 zwalnianie zasobów systemowych, 651 rysunki, 262 JPEG, 259 ograniczanie rozmiaru, 302 wstawianie do bazy danych, 274 rysunkowy test CAPTCHA, 644

S safe_mode, 754 scalanie łańcuchów znaków, 78, 80 schemat, 465, 531 schemat bazy danych, 465, 468 Secure Hash Algorithm, 389 sekwencje ucieczki, 84, 85, 95, 612 sekwencje z języka HTML, 84 SELECT, 108, 167, 168, 170, 172, 331, 479 *, 108, 168, 193 AS, 511 filtrowanie danych, 134 FROM, 108 INNER JOIN, 507 LIKE, 537

794

Skorowidz

LIMIT, 580, 581 ORDER BY, 294, 564 USING, 510 WHERE, 134, 170 serwer, 47, 48 serwer bazodanowy, 99, 100 MySQL, 764 serwer WWW, 34, 40, 56, 762, 763, 765 obsługa PHP, 56 przetwarzanie skryptów PHP, 60 serwis YouTube, 708 sesje, 423, 431 $_SESSION, 425 czas życia, 440 dane, 423 identyfikator, 424, 431 ilość danych, 444 konfiguracja, 431 kończenie, 424 logowanie, 426 PHP, 424 pliki cookie, 431 rozpoczynanie, 424 session_destroy(), 424 session_start(), 424 SID, 437 śledzenie danych, 425 usuwanie zmiennych sesji, 427 wylogowanie, 427 zmienne sesji, 423, 425 session.use_cookies, 431 session.use_only_cookies, 431 session.use_trans_sid, 431, 437 session_destroy(), 424, 448 session_name(), 425 session_start(), 424, 429, 431, 432, 448 setcookie(), 410, 419, 448 SHA(), 388, 396, 448 sha1(), 389 SID, 437 simplexml_load_file(), 718, 719, 741 SimpleXMLElement, 726, 730, 741 skracanie zapytań, 511 skrót, 389 skrypt logowania, 383

skrypt rejestracji, 404 skrypty PHP, 41, 49, 50, 54, 62, 95, 145 dołączanie danych współużytkowanych, 291 kończenie działania, 341 nazwa bieżącego skryptu, 236 umieszczanie na serwerze, 56 sortowanie wyników zapytania, 294, 564 spam, 638 spersonalizowane aplikacje sieciowe, 380 społeczności użytkowników, 381 sprawdzanie adres e-mail, 629 adres IP komputera, 332 numer telefonu, 601, 619 poprawność danych z formularza, 200 przesłanie formularza, 238 zawartość zmiennych, 208 SQL, 99 aliasy, 511 ALTER, 163, 268 ALTER TABLE, 245 AS, 511 CREATE DATABASE, 102, 148, 149 CREATE TABLE, 102, 103, 155 DEFAULT, 372 DELETE, 185 DESCRIBE, 160, 161 DROP TABLE, 162 FROM, 108 INNER JOIN, 507, 509 INSERT, 104, 371 komentarze, 368 LIKE, 537 LIMIT, 320, 580, 581 modyfikacja tabel, 245 naprawianie błędów, 160 opis struktury tabeli, 161 ORDER BY, 294, 564 pobieranie danych, 108, 168 polecenia, 102 SELECT, 108, 168 sortowanie wyników, 294, 564 symbole wieloznaczne, 537

Skorowidz tworzenie bazy danych, 102, 149 tworzenie tabel, 102, 155 UPDATE, 271 USE, 102, 158 USING, 510 usuwanie danych, 185 usuwanie tabeli, 162 WHERE, 134, 170, 509 wstawianie danych, 104, 110 wstrzyknięcie kodu, 368 wybór bazy danych, 102, 158 wywoływanie poleceń, 103 znaki specjalne, 168 stałe, 284 standaryzacja numerów telefonów, 623 startsession.php, 455 statyczne strony WWW, 40 statyczny kod HTML, 40 sterowanie formularzem za pomocą danych, 484 stopka strony, 455 stopnie normalizacji, 504 str_replace(), 552, 592, 597, 620 strefa bezpieczeństwa, 345 strip_tags(), 756 strlen(), 597 strona główna, 394 strona HTML, 40 strona WWW, 40 stronicowanie, 580 konfiguracja zmiennych, 584 kontrola danych, 583 LIMIT, 582 strony administracyjne, 308 ochrona hasłem, 332 odsyłacze do usuwania wyników, 311 zabezpieczenia, 334 strony publicznie, 308 Structured Query Language, 99 struktura tabeli, 161 style CSS, 298 style.css, 298 submit, 238 subskrybowanie kanałów RSS, 690 substr(), 560, 561, 562

SUBSTRING(), 562 switch, 574, 592 break, 574 case, 574 default, 574 symbol praw autorskich, 84 symbole wieloznaczne, 537 system DNS, 630 system logowania, 383, 387 baza danych, 385 hasła, 386 interfejs logowania, 387 obsługa loginów, 383 strona główna, 394 system nazw domen, 630 system rejestracji, 332 szablony, 456, 457 kod, 457 szyfrowanie haseł, 386 MD5(), 389 SHA(), 388

Ś śledzenie danych sesji, 425 średniki, 63 środowisko programistyczne, 762 Apache, 765 PHP, 762 serwer MySQL, 764, 768 serwer WWW, 763

T tabele, 99, 106, 145, 147, 180 aliasy, 511 diagram, 465 dodawanie kolumn, 268 identyfikatory, 244 klucz główny, 244, 470 klucz zewnętrzny, 470 kolumny, 147, 150 łączenie, 470 modyfikacja, 245, 268 nadrzędne, 472 normalizacja, 498 opis struktury, 161

pobieranie danych, 108 podrzędne, 472 pośrednie, 474 relacje, 472 tworzenie, 102, 150 tworzenie przy użyciu zapytań, 155 typy danych, 150, 151 usuwanie, 162 usuwanie danych, 185 usuwanie kolumn, 268 wiersze, 147, 150 wstawianie danych, 104 złączenie, 507 zmiana typu danych, 268 tablica tematów, 670 tablice, 65, 72, 95, 664, 668, 670 foreach, 252 liczba elementów, 522 przechodzenie po elementach, 251, 252 tworzenie dynamiczne, 483 technika dostępu do serwera bazodanowego MySQL, 106 technologia RSS, 690, 692 tekst, 84, 151, 260 formatowanie, 84 tematy, 464 terminal MySQL, 100, 101, 102, 106, 148 znak zachęty, 157 test CAPTCHA, 643 testowanie aplikacji PHP, 762 testowanie obsługi języka PHP, 57 TEXT, 152 throw, 750 TIME, 152 time(), 288, 419 TIMESTAMP, 152 TINYINT, 152, 487 trim(), 370, 374, 376 true, 65 TrueType, 652 trwałość logowania, 443, 444 trwałość plików cookie, 409 try, 750

jesteś tutaj  795

Skorowidz tryb safe_mode, 754 tworzenie aliasy, 511 baza danych, 100, 102, 148, 149 dane atomowe, 497 formularz autoreferencyjny, 236 funkcje, 567 interfejs logowania, 387 kanały RSS, 690, 697 klasy, 751 kwestionariusz, 479 łańcuchy znaków przy użyciu podłańcuchów, 545 model bazy danych, 465 nagłówki HTTP, 339 obiekty, 751 odnośniki nawigacyjne, 586 rysunki, 646 tabele, 100, 102, 150 tablica tematów, 670 użytkownicy MySQL, 746 wiadomości e-mail, 82 wzorzec numerów telefonów, 601 zapytania SQL, 116, 623 zapytania SQL w PHP, 122 zaznaczony przycisk opcji, 489 zrzut danych, 775 żądania REST, 716 typ zawartości dokumentu, 702 typy danych, 65, 151 MySQL, 152 typy MIME, 303, 306

U udostępnianie stron, 48 umieszczanie danych MySQL na serwerze publicznym, 776 umieszczanie skryptów PHP na serwerze, 56 umieszczanie witryny w sieci, 774 MySQL, 775, 776 połączenie z serwerem publicznym, 777 przenoszenie kodu, 774 zrzut danych, 775

796

Skorowidz

Unicode, 758 unikanie powielania kodu, 230, 290 unlink(), 305, 306 UPDATE, 271, 479 upload_tmp_dir, 282 upraszczanie kodu, 223 uprawnienia użytkowników MySQL, 746 URL, 65, 312, 350, 712 uruchamianie polecenia SQL, 149 program na serwerze, 631 USE, 102, 158, 775 USING, 510 usuwanie niepożądane znaki, 624 pliki cookie, 418, 419 pliki z serwera WWW, 305 przecinki, 551 puste łańcuchy, 556 tabele, 162 zmienne sesji, 427 znaczniki HTML, 756 usuwanie danych, 185 kontrola liczby usuwanych wierszy, 320 uwierzytelnianie HTTP, 333, 334, 345, 377, 391, 392, 406, 431 Basic realm, 345, 349 logowanie, 395 nagłówki, 336, 340 obsługa, 348 poziom bezpieczeństwa, 335 strefa bezpieczeństwa, 345 użytkownicy, 382

V value, 240 VALUES, 104, 107 VARCHAR, 152, 153, 385

W walidacja adresy e-mail, 597, 629, 632 dane formularza, 373, 377

domeny, 631 numery telefonów, 601 pliki, 303, 304 walidacja danych, 200, 201, 207, 597 po stronie klienta, 201 po stronie serwera, 201 wartości logiczne, 65 wartość atrybutu XML, 728 wartość pusta, 208 WHERE, 134, 170, 186, 193, 361, 509, 510 while, 177, 178, 180, 193, 521 wiadomości e-mail, 82 adres nadawcy, 88 tworzenie, 82, 86 wysyłanie przy użyciu PHP, 88 wiele do wielu, 474 wielkość bazy, 498 wielkość znaków, 536 polecenia PHP, 65 wielokrotne użycie kodu, 568, 676 wiersze, 147, 150 witryna, 143 witryny społecznościowe, 406 wizualizacja danych, 637, 663 wizualizacja danych XML z opisem filmów, 725 wizualizacja kodu RSS, 699 wizualizacja projektu aplikacji, 144 właściwości, 726, 730 włączanie PHP w systemie Mac OS X, 772 WordPress, 760 współużytkowanie danych, 290 współużytkowanie kodu, 451 wstawianie danych do tabeli, 104 PHP, 115 wstawianie rysunków do bazy danych, 274 wstępne przetwarzanie tekstu, 550 wstrzyknięcie kodu SQL, 368, 369, 377 zapobieganie, 370 WWW-Authenticate, 340, 392 wybór bazy danych, 158 wydajność pisania kodu, 489

Skorowidz wydajność zapytań, 497 wyjątki, 749 catch, 750 przechwytywanie, 750 throw, 750 try, 750 wykorzystanie kodu PHP innych osób, 760 wykresy, 663, 667 analiza kategorii, 672 draw_bar_graph(), 677 generowanie wielu obrazków, 682 liczba kategorii, 673 plan tworzenia wykresu, 671 rysowanie, 676, 679 słupkowe, 664, 665, 667 tablice, 664 wyświetlanie, 679 zapisywanie danych, 664 wylogowanie, 406, 418 automatyczne, 438 sesje, 427 usuwanie plików cookie, 418 wypełnianie formularza sfałszowanymi danymi, 640 wypełnianie tła, 646 wyrażenia regularne, 593, 602, 607, 636 $, 604, 611 *, 609 ?, 609 [], 610 \d, 604 \s, 604 \w, 604 ^, 604, 611 {min, max}, 609 |, 611 +, 609 adresy e-mail, 627 klasy znaków, 610, 611, 634 koniec łańcucha, 604 kropka, 604 kwantyfikatory, 609, 634 liczba powtórzeń metaznaku, 609

metaznaki, 604 numery telefonów, 605 odstępy, 604 PHP, 616 początek tekstu, 604 preg_match(), 616 preg_replace(), 620 przedział symboli dopasowywanych, 611 przyrostki domen, 630 sekwencje ucieczki, 612 składnia, 603 standaryzacja numerów telefonów, 623 usuwanie niepożądanych znaków, 624 wyszukiwanie wzorców, 616 zastępowanie znaków, 620 znajdź i zastąp, 620, 624 wyrażenie warunkowe, 202 wysyłanie wiadomości e-mail, 59, 88, 171 skrypt, 172 wysyłanie zapytań SQL do bazy danych, 117 wyszukiwanie, 536 wyszukiwanie sprzecznych odpowiedzi, 518 wyświetlanie danych, 590 wyświetlanie rysunku, 679 wywołanie funkcje, 568 metody, 751 polecenia SQL, 103, 506 wzorzec danych, 597 wzorzec numerów telefonów, 601

X XHTML, 741 XML, 691, 719, 741 atrybuty, 691 czytnik wiadomości, 696 elementy, 699 encje, 723 odstępy, 700 przestrzenie nazw, 723 reguły języka, 691

relacja nadrzędny – podrzędny, 699 wartość atrybutu, 728 wielkość znaków, 700 znaczniki, 691 XML Reader, 759 XML Writer, 759 XSS, 755

Y YouTube, 708, 710 formatowanie danych o filmach, 733 kod odpowiedzi, 724 kod XML, 719 kolejność argumentów przy przeszukiwaniu za pomocą słów kluczowych, 715 obliczanie długości filmu, 733 odpowiedź XML, 720, 724 przestrzenie nazw, 725 przesyłanie żądania danych o filmach, 712 rozmieszczanie filmów, 732 rozpowszechnianie filmów, 711 wizualizacja danych XML z opisem filmów, 725 wyniki wyszukiwania filmów, 710 żądania REST, 712, 713

Z zabezpieczenia, 333 aplikacje PHP, 753 aplikacje sieciowe, 329 ataki XSS, 755 strona administracyjna, 334 zagnieżdżone instrukcje if, 223 zagnieżdżone zapytania, 506, 507 zakładka, 350 zamiana plików cookie na sesje, 432 zamykanie bloków PHP, 229 zamykanie połączenia z bazą danych, 117, 125 zaokrąglanie liczb, 585 zapisywanie dane na potrzeby wykresu, 664 dane po stronie klienta, 408

jesteś tutaj  797

Skorowidz zapisywanie dane użytkownika na serwerze, 422 dane w bazie danych, 480 dynamicznie wygenerowane rysunki, 683 nazwy plików graficznych w bazie danych, 274 pliki cookie, 408 zapobieganie wstrzyknięciu kodu SQL, 370 zapytania SQL, 104, 108, 124 aliasy, 511 DELETE, 185 filtrowanie danych, 134 INSERT, 105, 123 LIKE, 537 mysqli_query(), 122, 124 nazwy kolumn, 123 obsługa, 111 pobieranie wyników, 174 podział wyników zapytania na strony, 580 SELECT, 108, 168 skracanie, 511 sortowanie wyników, 294, 564 stronicowanie, 585 tworzenie, 116 tworzenie tabel, 155 tworzenie w PHP, 122 z listą kolumn i wartości, 371, 377 zagnieżdżone zapytania, 506 złączenie, 512

798

Skorowidz

zarządzanie bazami danych, 99 zarządzanie błędnymi danymi z bazy, 494 zarządzanie witryną, 308 zastępowanie znaków w szukanym tekście, 552 zatwierdzanie wyników, 356, 359 zaznaczony przycisk opcji, 489 zbieranie danych, 461 zbiory wyników, 670 zgłaszanie błędów, 306 MySQL, 748 zgłaszanie żądań REST, 718 zgodność kodu PHP ze starszymi wersjami języka, 744 złączenie, 507, 512, 668 dopasowanie kolumn o tej samej nazwie, 510 INNER JOIN, 507, 509 JOIN, 508 lewostronne zewnętrzne, 514 naturalne, 514 nazwy kolumn, 510 nierównościowe, 514 notacja z kropką, 508 obustronne zewnętrzne, 514 ON, 510 prawostronne zewnętrzne, 514 równościowe, 514 USING, 510 wewnętrzne, 507, 509

WHERE, 509, 510 zewnętrzne, 514 zmienne, 62, 64, 87, 95 $_COOKIE, 410 $_FILES, 275 $_GET, 312, 313 $_POST, 70, 71, 128, 238, 313 $_SERVER, 236 $_SESSION, 425 nazwy, 63, 64 przypisanie wartości, 69 sprawdzanie zawartości, 208 superglobalne, 71 typy danych, 65 wielkość liter, 64 zmienne sesji, 423, 425, 431, 434 znaczniki RSS, 697 XML, 691 znaki nowego wiersza, 84, 85 zrzut danych, 775 zrzuty ekranu, 260 zwiększanie aktywności mózgu, 31 zwiększanie zasięgu aplikacji, 689

Ż żądania GET, 312, 314, 315, 316 POST, 313, 314, 315, 316 REST, 712, 713, 715, 741 żądanie – odpowiedź, 711

Notatki

799