You are on page 1of 48

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

Flash i PHP5.
Podstawy
Autor: David Powers
Tumaczenie: Jarosaw Dobrzaski, Renata Wjcicka
ISBN: 83-246-0185-6
Tytu oryginau: Foundation PHP5 for Flash
Format: B5, stron: 744
Przykady na ftp: 2520 kB

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Od dawna Flash wykorzystywany jest do tworzenia efektownych, interaktywnych


witryn WWW i prezentacji internetowych. Jzyk programowania Action Script,
znacznie rozbudowany w najnowszych wersjach tej aplikacji, umoliwia napisanie wielu
oryginalnych, ciekawych programw. Czasem jednak nawet tak olbrzymi potencja,
jakim dysponuje Action Script, okazuje si niewystarczajcy. Co zrobi, gdy trzeba
sign do bazy danych znajdujcej si na serwerze lub przechowa informacje o sesji?
Jak dynamicznie uaktualnia tre artykuw opublikowanych w witrynie? Odpowied
jest oczywista, trzeba sign po inne, rewelacyjne narzdzie dla twrcw stron WWW,
czyli duet PHP i MySQL dostpny nieodpatnie w peni obiektowy jzyk
programowania oraz stabilna i wydajna baza danych.
Ksika Flash i PHP5. Podstawy to niezastpiony poradnik dla tych uytkownikw
Flasha, ktrzy chc wycisn z niego wicej, ni oferuje Action Script. Czytajc j,
nauczysz si czy witryny WWW tworzone we Flashu ze skryptami PHP i baz
danych MySQL. Poznasz podstawy jzykw PHP i SQL i dowiesz si, jak skonfigurowa
rodowisko pracy. Znajdziesz w niej informacje o moliwociach wykorzystania PHP do
realizacji zada, ktrych wykonanie za pomoc jzyka Action Script byoby niemoliwe.
Te zadania to przetwarzanie danych wprowadzanych przez uytkownikw, zapisywanie
i odczytywanie informacji z bazy danych, zarzdzanie sesjami i tworzenie mechanizmu
zarzdzania treci serwisu.
Instalacja i konfiguracja rodowiska
Wysyanie danych z formularzy za pomoc poczty elektronicznej
Obliczenia matematyczne w PHP
Przetwarzanie danych tekstowych
Tworzenie czytnika RSS
Praca z bazami MySQL i SQLite
Wprowadzanie informacji do bazy danych
Obsuga sesji
System CMS oparty o baz danych i XML
Wykorzystaj PHP i stwrz dynamiczne witryny WWW we Flashu

O autorze ......................................................................................... 9
O recenzencie technicznym ............................................................. 10
Podzikowania ................................................................................ 11
Wstp ............................................................................................ 13
Rozdzia 1. Przygotowania do pracy z PHP ........................................................ 21
Dostp filmu Flasha do danych zewntrznych .................................................................22
Wybr waciwej technologii ....................................................................................22
Co oferuje PHP, Apache oraz MySQL? ....................................................................24
Wsppraca wszystkich elementw ...........................................................................25
PHP i ActionScipt: dalecy kuzyni ....................................................................................28
Instalowanie potrzebnego oprogramowania .....................................................................29
Instalacja w systemie Windows .................................................................................30
Instalacja w systemie Mac OS X ...............................................................................48
Konfiguracja rodowiska ..................................................................................................60
Poznawanie moliwoci PHP ...........................................................................................66

Rozdzia 2. Pene wykorzystanie moliwoci Flasha ........................................... 69


Komunikacja z zewntrznymi rdami danych ..............................................................70
Pierwsze kroki w PHP ......................................................................................................76
Czy PHP nadaje si do tworzenia szaty graficznej strony? .......................................76
Podstawy skadni PHP ...............................................................................................77
Wysyanie formularza poczt e-mail ................................................................................91
Czego si dowiedziae do tej pory ................................................................................110

Rozdzia 3. Obliczenia i decyzje ...................................................................... 111


Dokonywanie oblicze w PHP .......................................................................................112
Operatory arytmetyczne ...........................................................................................113
Wykonywanie oblicze we waciwej kolejnoci ....................................................119
Skadanie operatorw ...............................................................................................120
Mechanizmy decyzyjne w PHP ......................................................................................121
Uycie instrukcji ifelse ........................................................................................121
Stosowanie operatorw porwnania ........................................................................122
Testowanie wicej ni jednego warunku .................................................................124
Korzystanie z operatora xor .....................................................................................125
Korzystanie z negacji do testowania zaprzecze .....................................................126

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\!!spis.doc

Flash i PHP5. Podstawy


Uycie instrukcji switch w wielokrotnych warunkach ............................................127
Korzystanie z operatora warunkowego ....................................................................128
Aplikacja we Flashu multikonwerter ........................................................................129
Planowanie skryptu przeliczajcego ........................................................................129
Budowanie interfejsu we Flashu ..............................................................................135
Podsumowanie ...............................................................................................................151

Rozdzia 4. Wok cigw znakowych ............................................................. 153


Przetwarzanie cigw znakowych w PHP .....................................................................154
Jak w PHP wywietla si cigi znakowe? ................................................................154
Zmiana wielkoci liter ..............................................................................................159
Praca z podcigami ..................................................................................................161
Uzyskiwanie podcigu ...................................................................................................165
Modularyzacja kodu przy uyciu funkcji .......................................................................168
Gdzie s uruchamiane funkcje PHP? .......................................................................168
Do czego mog si przyda wasne funkcje? ..........................................................169
Zasig zmiennych w PHP i w ActionScripcie .........................................................170
Warto zwracana przez funkcj .............................................................................172
Decydowanie o tym, gdzie umieci funkcje ..........................................................174
Wykaczanie skryptu multikonwertera ..........................................................................174
Formatowanie gwnych jednostek miar .................................................................175
Galony, pinty i litry ..................................................................................................175
Kilogramy, funty i kamienie ....................................................................................179
Metry, stopy i jardy ..................................................................................................180
Udoskonalanie projektu multikonwertera ................................................................182
Dalsze rozwijanie projektu ......................................................................................183
Przetwarzanie wejciowych danych uytkownika .........................................................184
Obcinanie pocztkowych i kocowych biaych znakw .........................................184
Obcinanie znacznikw HTML .................................................................................185
Usuwanie lewych ukonikw ..................................................................................185
Korzystanie z wyrae regularnych do rozpoznawania wzorcw ...........................186
Udoskonalanie aplikacji z formularzem oceniajcym ...................................................191
Chwila odpoczynku ........................................................................................................195

Rozdzia 5. Inteligentne wykorzystywanie tablic i ptli ..................................... 197


Podstawy korzystania z tablic oraz ptli ........................................................................198
Umieszczanie elementw w tablicy .........................................................................198
Grupowanie podobnych jednostek w tablicy wielowymiarowej .............................199
Korzystanie z ptli do wykonywania powtarzalnych zada ....................................200
Tworzenie tablic w PHP .................................................................................................200
Tablice indeksowe: porzdkowanie na podstawie numeru ......................................201
Tablice asocjacyjne: porzdkowanie wedug nazw .................................................205
Dugo tablicy: istota rnicy pomidzy tablicami w PHP a w ActionScripcie ....209
Tablice wielowymiarowe, czyli zagniedone ........................................................209
czenie w ptli powtarzajcych si zada ....................................................................212
Przegldanie tablicy za pomoc ptli foreach ..........................................................212
Pene wykorzystywanie ptli ...................................................................................213
Najprostsze ptle: while oraz do ..............................................................................215
Koczenie dziaania ptli .........................................................................................216
Zagniedanie ptli ..................................................................................................217
Bezpieczne przekazywanie danych w zmiennej $_POST ..............................................219
Dlaczego ustawienie register_globals jest tak istotne? ............................................221
Manipulowanie tablicami ...............................................................................................222
Dzielenie i czenie tablic ........................................................................................222
Sortowanie tablic .....................................................................................................227

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\!!spis.doc

Spis treci

5
Budowanie czytnika wiadomoci RSS ...........................................................................229
Do czego suy kana RSS? .....................................................................................230
Analiza kanau RSS .................................................................................................231
Przetwarzanie kodu RSS w MagpieRSS ..................................................................233
Wywietlenie w filmie Flasha poczonych kanaw RSS ......................................244
Usuwanie elementw HTML, ktrych Flash nie potrafi zinterpretowa ................250
Opublikowanie czytnika wiadomoci w internecie .................................................251
Raport postpw .............................................................................................................252

Rozdzia 6. PHP i bazy danych: poszerzanie aplikacji ....................................... 253


Dlaczego MySQL? .........................................................................................................254
Wady MySQL ..........................................................................................................254
Zalety MySQL .........................................................................................................255
Wybr waciwej wersji MySQL .............................................................................257
Wybr waciwej licencji oraz jej koszt ..................................................................259
SQLite jako alternatywa .................................................................................................260
Zalety SQLite ...........................................................................................................260
Wady SQLite ...........................................................................................................260
Wybr waciwego systemu baz danych .................................................................261
Instalacja MySQL w systemie Windows .......................................................................262
Zmiana domylnego typu tabel w Windows Essentials ...........................................276
Rczne uruchamianie oraz zatrzymywanie MySQL w systemie Windows ............278
Uruchamianie MySQL Monitor w systemie Windows ...........................................280
Konfiguracja MySQL w systemie Mac OS X ................................................................282
Praca z programem MySQL Monitor (Windows i Mac) ...............................................284
Utworzenie pierwszej bazy danych w MySQL ..............................................................285
Pobieranie danych z zewntrznego pliku .................................................................295
Korzystanie z graficznego interfejsu MySQL ................................................................298
phpMyAdmin: zoty staruszek .................................................................................298
MySQL Administrator a MySQL Query Browser: inteligentne programy .............303
Co nas dalej czeka? ........................................................................................................305

Rozdzia 7. Zabawa sowami ........................................................................... 307


Tworzenie elementw graficznych gry ..........................................................................308
Uywanie PHP do komunikacji z baz danych ..............................................................313
Klasa kopiujca dziaanie mysqli w dowolnej konfiguracji ....................................313
Korzystanie z obiektowego interfejsu mysqli ..........................................................314
Tworzenie klas PHP 5 i korzystanie z nich ....................................................................329
Nazywanie i deklarowanie klas ...............................................................................330
Tworzenie waciwoci klasy ..................................................................................330
Uycie konstruktora .................................................................................................331
Tworzenie metod klasy ............................................................................................333
Dostp do metod publicznych ..................................................................................333
Udoskonalanie wybierania sw poprzez zastosowanie SQL i PHP ..............................334
Tworzenie mechanizmu wywietlajcego liczb punktw ............................................343
Wprowadzenie do klasy SharedObject Flasha .........................................................344
Inne sposoby na wzbogacenie gry ..................................................................................347
Obsuga bdw bazy danych ..................................................................................347
Ustawienie rnych poziomw gry .........................................................................351
SQLite: alternatywny system baz danych ......................................................................352
Podstawy SQLite .....................................................................................................352
Sprawdzenie, czy baza SQLite posiada odpowiednie uprawnienia .........................353
Dostosowywanie skryptu gry do bazy SQLite .........................................................363
Porwnanie MySQL z SQLite .................................................................................364
Cigle naprzd ................................................................................................................364

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\!!spis.doc

Flash i PHP5. Podstawy

Rozdzia 8. Tworzenie bazy danych rejestrujcych si uytkownikw ................ 365


Rne rodzaje baz danych ..............................................................................................366
Jednopoziomowe bazy danych najprostszy typ baz danych ...............................366
Elastyczno relacyjnych baz danych ......................................................................368
Rne formaty skadowania danych MySQL ................................................................373
Wybr waciwego typu kolumny ..................................................................................374
Typy kolumn w MySQL ..........................................................................................375
Wartoci domylne oraz NULL ...............................................................................379
Wybr odpowiednich ustawie jzyka ....................................................................380
Tworzenie systemu rejestrowania uytkownika ............................................................381
Rejestrowanie uytkownikw w MySQL ................................................................381
Co zrobi, gdy nie dziaa poprawnie? ......................................................................405
Chwila oddechu ..............................................................................................................406

Rozdzia 9. Ochrona danych przy uyciu mechanizmu sesji ............................... 409


ledzenie preferencji uytkownika za pomoc mechanizmu sesji PHP ........................410
Sie jest rodowiskiem bezstanowym ......................................................................410
W jaki sposb dziaa sesja? ......................................................................................412
Podstawy sesji PHP ..................................................................................................414
Korzystanie z mechanizmu sesji do ograniczania dostpu do strony ......................415
Inne zastosowania sesji ............................................................................................428
Podsumowanie ...............................................................................................................429

Rozdzia 10. Sprawowanie kontroli


przy uyciu systemu nadzorujcego zawarto bazy ........................ 431
Cztery podstawowe polecenia SQL ...............................................................................432
SELECT ...................................................................................................................432
INSERT ....................................................................................................................434
UPDATE ..................................................................................................................434
DELETE ..................................................................................................................435
Tworzenie prostego systemu kontrolowania zawartoci bazy danych ...........................436
Tworzenie interfejsu aplikacji ..................................................................................436
Tworzenie skryptu aplikacji .....................................................................................444
Zabezpieczanie systemu zarzdzania baz danych ..................................................491
Dodawanie dodatkowej kolumny do tabeli ..............................................................493
Mamy ju solidne podstawy ...........................................................................................495

Rozdzia 11. Praca z datami ............................................................................. 497


Jak ActionScript, PHP oraz MySQL przetwarzaj daty? ...............................................498
Niepoprawne znaczniki czasowe .............................................................................499
Tworzenie znacznika czasowego .............................................................................501
Formatowanie dat w PHP ...............................................................................................507
Praca z datami w MySQL ..............................................................................................510
Korzystanie z dat w obliczeniach ............................................................................510
Odnalezienie i utworzenie rekordw na podstawie tymczasowych kryteriw ........517
Przetwarzanie dat w danych wejciowych uytkownika ...............................................518
Formatowanie dat pobranych z danych wejciowych uytkownika ........................519
Sprawdzenie w PHP poprawnoci daty ...................................................................520
Tworzenie selektora daty we Flashu dla MySQL ....................................................522
Prawie u mety .................................................................................................................536

Rozdzia 12. Korzystanie z wielu tabel i XML ..................................................... 537


Projektowanie struktury tabel .........................................................................................538
Ustalanie podstawowych wymaga .........................................................................538
Normalizacja tabel ...................................................................................................539

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\!!spis.doc

Spis treci

7
Projektowanie tabeli przechowujcej dane o ksikach ..........................................539
Projektowanie tabel reprezentujcych autorw i wydawnictwa ..............................542
Poczenie wszystkiego w cao tabela wyszukiwania .....................................542
Przygotowania do budowy bazy danych ksigarni ........................................................543
Tworzenie bazy i nadawanie uprawnie uytkownikom .........................................543
Oglny przegld projektu ...............................................................................................547
Wypenianie bazy przykadowymi danymi .............................................................547
Szybki test systemu CMS ........................................................................................547
Tworzenie struktury bazy danych ..................................................................................549
Definiowanie tabeli books .......................................................................................550
Definiowanie tabel authors i publishers ...................................................................553
Tworzenie tabeli wyszukiwania ...............................................................................554
Tworzenie systemu zarzdzania zawartoci bazy ........................................................555
Ustalanie podstawowej struktury .............................................................................555
Budowanie prostych formularzy w XHTML ...........................................................557
Uaktywnienie formularzy za pomoc kodu PHP .....................................................571
Wstawianie danych o nowych autorach i wydawnictwach ......................................572
Tworzenie listy autorw ..........................................................................................576
Tworzenie listy wydawnictw ...................................................................................579
Edycja danych autorw i wydawnictw ....................................................................580
Wstawianie danych o nowych ksikach .................................................................587
Pobieranie danych przechowywanych w kilku tabelach ................................................596
Unikanie niejednoznacznych odwoa do kolumn ..................................................597
Stosowanie zczenia penego ..................................................................................597
Zastosowanie zczenia lewego do szukania niepenych trafie .............................601
Prace wykoczeniowe nad systemem CMS ...................................................................602
Zarzdzanie informacjami o ksikach w bazie ......................................................602
Usuwanie rekordw z wicej ni jednej tabeli ........................................................613
Zachowywanie integralnoci odwoa przy operacjach usuwania rekordw ..........615
Aktualizacja kilku rekordw ....................................................................................622
Zastosowanie SimpleXML do odczytu danych XML .............................................624
Wywietlanie zawartoci bazy danych we Flashu .........................................................630
Przygotowywanie bazy danych ................................................................................630
Komunikacja z baz danych poprzez PHP ..............................................................630
Tworzenie interfejsu we Flashu ...............................................................................637
Tworzenie kodu ActionScript adujcego rezultaty z bazy .....................................638
Duga droga za nami ......................................................................................................644

Dodatek A Gdy PHP i MySQL nie chc ze sob wsppracowa ....................... 645
Dodatek B Dostosowanie skryptw do wersji 1.0 ActionScriptu ...................... 669
Dodatek C Instalacja starszych wersji MySQL w systemie Windows ................ 675
Dodatek D Stosowanie innych jzykw w MySQL ............................................ 685
Dodatek E

Podstawowe zasady konserwacji bazy danych MySQL .................... 695


Skorowidz ..................................................................................... 715

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\!!spis.doc

Rozdzia 2.

Czym bdziemy si zajmowa:


t zastosowanie LoadVars do komunikowania si z zewntrznymi rdami

danych;
t blisza analiza skadni PHP;
t potwierdzenie odebrania zmiennych z Flasha przez skrypty PHP;
t sprawdzenie danych z wyjcia PHP przed wysaniem wynikw do Flasha;
t sprawdzenie poprawnoci danych wejciowych;
t uycie PHP do wysania formularza we Flashu poczt e-mail.

Filmy Flasha stanowi zamknite w sobie wiaty. Mimo e mona do nich zaadowywa pliki JPG, pliki dwikowe oraz sekwencje wideo, to jedyna komunikacja klipw z zewntrznym rodowiskiem polega na zaadowywaniu strony w oknie przegldarki. Dziki poczeniu pliku Flasha z kodem PHP zyskasz bardzo wiele nowych
moliwoci, midzy innymi czenie si z baz danych, jednak najpierw musisz pozna podstawy skadni PHP.
Przede wszystkim musisz zna zasady przesyania danych do filmw Flasha, a take
sposb ich uzyskiwania z plikw flashowych. Rwnie istotna jest kontrola danych
wejciowych i wyjciowych w programie. Jak si przekonasz podczas pracy z zewntrznymi danymi, nie zawsze mona wykorzysta polecenie trace do sprawdzenia
wartoci zmiennych. Poka kilka metod ominicia tego problemu.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

69

70

Flash i PHP5. Podstawy

Pod koniec tego rozdziau przedstawi, w jaki sposb mona wykorzysta zdobyt
wiedz do utworzenia we Flashu i PHP formularza, ktry po wypenieniu zostanie wysany poczt elektroniczn do wskazanej skrzynki pocztowej.

Komunikacja
z zewntrznymi rdami danych
Istnieje kilka sposobw na komunikowanie si filmw Flasha z zewntrznymi rdami
danych. Do najwaniejszych nale:
1. LoadVars: umoliwia atwe eksportowanie i importowanie zmiennych.

Wymaga uycia Flash Playera w wersji 6. lub wyszej.


2. XML: bardzo przydatna klasa umoliwiajca obrbk zawartoci dokumentw

XML, a take wysyanie danych sformatowanych w XML-u do plikw


Flasha. Wymaga uycia Flasha w wersji 5. lub wyszej.
3. FlashVars: umoliwia komunikacj tylko w jednym kierunku poprzez

przeniesienie zmiennych ze strony WWW do nowo utworzonych plikw


SWF. Wymaga uycia Flasha w wersji 5. lub wyszej.
4. loadVariables(): ta globalna funkcja zostaa pocztkowo zaprojektowana

do obustronnej wymiany danych pomidzy filmami Flasha a zewntrznym


rodowiskiem. Obecnie jest zastpowana bardziej funkcjonaln klas LoadVars.
Zostaa po raz pierwszy uyta we Flash Playerze 4 i jest obsugiwana a
do obecnej wersji 8.
W tej ksice bd si zajmowa przede wszystkim pierwszym z tych sposobw
zastosowaniem klasy LoadVars. Jest to jedna z najbardziej efektywnych i najatwiejszych w uyciu metod. Pozwala na cise okrelenie, ktra zmienna zostanie wysana
do serwera, dziki czemu oszczdza si czas i przepustowo czy. Ponadto funkcja
ta jest powizana z wieloma rnymi zdarzeniami, ktre uatwiaj przesyanie danych. Cho starsze funkcje s nadal obsugiwane przez Flash Playera 7, to nie wiadomo, czy w przyszoci nadal bd czci ActionScriptu. Jeli jeste dowiadczonym uytkownikiem Flasha, bdziesz bardzo zadowolony ze zmian oferowanych przez
t funkcj. Jeli natomiast jeste nowicjuszem, przyjmij do wiadomoci, e funkcje
loadVariables() oraz loadVariablesNum() s ju mocno przestarzae.
Klasa XML jest istotna dla programistw zajmujcych si dokumentami XML, jednak
wymaga dobrej znajomoci obiektowego modelu dokumentu XML (w skrcie DOM).
Jej do du wad jest abstrakcyjny sposb opisywania dokumentw. Na szczcie
w PHP 5 obrbka prostych dokumentw XML jest o wiele mniej skomplikowana.
Tote poka, jak naley zamienia dokumenty XML na zmienne we Flashu przed
przesaniem ich dalej. Rozwizanie to jest czsto szybsze ni przetwarzanie dokumentu XML w jzyku ActionScript.

70

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

71

Klasa FlashVars zostaa zaprojektowana dla programistw tworzcych zwyke strony


HTML (importuje zmienne podczas pierwszego zaadowania klipu Flasha do przegldarki), zatem nie bdziemy si t metod szczeglnie zajmowa.
Warto teraz zapozna si z narzdziem, z ktrego bdziesz czsto korzysta z klas
LoadVars.

Zastosowanie klasy LoadVars do pobierania danych we Flashu


Mimo nazwy, LoadVars umoliwia dwukierunkowe komunikowanie si moe zarwno pobiera, jak i wysya dane. Klasy tej bdziemy uywa jednak tylko do pobierania zmiennych, a waciwie jednej zmiennej.
Wszystkie utworzone skrypty naley umieszcza w folderze phpflash, ktry jest
podfolderem (utworzye go podczas lektury rozdziau 1.) gwnego katalogu
serwera. W przypadku systemu Windows cieka dostpu do tego podfolderu
wyglda nastpujco: C:\htdocs\phpflash, natomiast uytkownicy systemu
Mac OS bd uywa cieki Macintosh HD:username:Sites:phpflash.
1. Utwrz nowy folder wewntrz katalogu phpflash i nazwij go ch02. Nastpnie

zapisz kopi pliku today.php z poprzedniego rozdziau jako today2.php.


2. Otwrz teraz plik today2.php i zmodyfikuj go w nastpujcy sposb

(dodatkowy kod oznaczono pogrubion czcionk):


<?php
echo 'theDate='.urlencode(date('l,F jS, Y'));
?>

Co prawda, jest to niewielka zmiana, jednak naley zwrci uwag na kilka


kwestii. Nie bd teraz omawia wszystkiego po kolei, skupi si jedynie
na sposobie przekazania zmiennej z PHP do Flasha (przetwarzaniem dat
zajmiemy si w rozdziale 11.). Chciabym zwrci Ci jednak uwag na
pewien szczeg, mianowicie na polecenie echo. W PHP jest to jedna z gwnych
metod suca do wywietlania danych wyjciowych w przegldarce i z niej
te bdziemy korzysta w niniejszej ksice. Zasady stosowania tej metody
szczegowo opisano w rozdziale 4.
Naley si upewni, e plik skada si wycznie z kodu pokazanego wyej.
Skrypty przedstawione w tej ksice (o ile nie zostao to wyranie
powiedziane) nie powinny by zagniedane w znacznikach HTML lub
XHTML. Nie powinny take zawiera definicji typu dokumentu Doctype.
Teraz PHP jest wykorzystywany wycznie jako jzyk przetwarzania
po stronie serwera nie korzystasz z niego do tworzenia stron WWW.
3. Zaaduj do przegldarki plik today2.php pamitaj o waciwej

ciece dostpu (http://localhost w przypadku systemu Windows oraz


http://localhost/~username w przypadku systemw Mac OS). Pasek adresu
bdzie wyglda nastpujco (uytkownicy Dreamweavera mog po prostu
nacisn przycisk F12):

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

71

72

Flash i PHP5. Podstawy

Jeli ujrzysz pusty ekran, moe by to spowodowane przez dwa czynniki


ewentualny bd w kopiowaniu skryptu konfiguracyjnego i ustawienie zmiennej
display_errors na Off. W takim przypadku naley powrci do poprzedniego
rozdziau i postpowa zgodnie z przedstawionymi tam wskazwkami.
Jeli natomiast zosta wywietlony komunikat o bdzie, to bardzo dobrze!
Oznacza to, e uzyskae odpowied z programu. Nie prbuj jednak wnika,
co ona oznacza (bdy w PHP oraz metody postpowania z nimi zostay omwione szczegowo w dodatku A). Po prostu sprawd kod jeszcze raz, zwracajc
szczegln uwag na brakujce znaki: cudzysowy, nawiasy lub kropki. Mona
take pobra prawidowy skrypt z serwera FTP.
4. Zapewne sdzisz, e wynik dziaania skryptu jest mniej interesujcy ni

w przypadku pierwszej wersji, gdy przedstawiona data jest zupenie


nieczytelna. Z pewnoci takie wraenie odniesie zwyky odbiorca, jednak
symbol %2C nasuwa skojarzenie, e wyjcie to nie zostao zaprojektowane
dla ludzi, lecz dla komputera. Data zostaa sformatowana wedug zasad
kodowania URL (w podobny sposb uywa si cigu znakowego na kocu
adresu URL). Zmienne adowane do filmw Flasha musz by ujte w takim
wanie formacie. Wywietlenie ich w oknie przegldarki bdzie dobrym
testem sprawdzenia dziaania skryptu PHP. Jeli zmienne nie s waciwie
sformatowane, pobranie ich z zewntrznego rda okae si bezcelowe.
Nawet jeli uruchomisz polecenie trace w kodzie ActionScript, uzyskasz
jedynie niejasny komunikat o bdzie. A zatem, jeli napotkasz problemy
z adowaniem zmiennych ze skryptu PHP, zawsze przeprowadzaj test ich
prawidowoci w taki wanie sposb.
Gdy ju uzyskasz pewno, e today2.php wywietla dat poprawnie (spacje
zostay zastpione znakiem +, natomiast przecinek zosta zastpiony %2C) i nie
ma spacji w ssiedztwie znaku rwnoci, moesz zaadowa dane wyjciowe
skryptu PHP do filmu Flasha.
5. Otwrz plik biodiverse01.fla znajdujcy si w materiaach rdowych

doczonych do tego rozdziau i zapisz go jako biodiverse.fla. Plik zawiera


logo z motylkiem oraz nagwek. Skorzystaem na pocztku z czcionki
Monotype Corsiva, jednak zmieniem j ostatecznie na grafik, gdy czcionka
ta nie jest powszechnie dostpna w systemach. Jeli chcesz, moesz utworzy
nowy dokument Flasha, w ktrym dodasz swj wasny nagwek internetowy.

72

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

73

6. Nad warstw title utwrz dwie nowe warstwy jedn nazwij date, drug
actions. Zwr uwag, eby przez przypadek nie umieci grafik w warstwie
actions.

Jeli poznae zasady kodowania w ActionScript dziki lekturze ksiki Sham


Bhangala, zapewne wiesz, e skrypty powinny si znajdowa w klatce kluczowej warstwy przeznaczonej tylko i wycznie na kod ActionScript. Warstw
t naley umieci nad pozostaymi warstwami. Najczciej akcje wywouje
si wanie z tej warstwy (cho niektrzy wol korzysta ze skryptw). Jeli
przez przypadek umiecisz tu grafik, jej poszczeglne elementy bd mogy
by wywoywane w nieprawidowej kolejnoci. Zablokowanie warstwy pomoe
ustrzec si przed tym niebezpieczestwem. Mimo jej zablokowania nadal
mona j zaznacza i docza skrypty w odpowiednim panelu.
7. W warstwie date wstaw dynamiczne pole tekstowe i nazwij je theDate_txt.

Moesz je umieci w dowolnym miejscu. Poniszy zrzut ekranu prezentuje


ustawienia, ktrych uyem aby wyrwna pole date zostao wyrwnane do
litery P sowa Przyrody. Ustawiem take rozmiar czcionki na 12 pt, jej typ
na _serif, a styl na bold, natomiast kolor na ##73F#7. Powany problem
z dynamicznymi polami tekstowymi polega na tym, e trudno jest dokadnie
ustawi ich szeroko, tote w tym przypadku skorzystaem z kodu ActionScript.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

73

74

Flash i PHP5. Podstawy


8. Kliknij teraz warstw actions i otwrz panel Actions (F9). Wpisz nastpujcy

kod:
//utwrz i zastosuj format tekstowy do daty:
var dateDisplay:TextFormat = new TextFormat();
dateDisplay.font = "Georgia,Times,_serif";
theDate_txt.setNewTextFormat(dateDisplay);
theDate_txt.autoSize = "left";

W ten sposb utworzono obiekt TextFormat i przypisano go do dynamicznego


pola tekstowego theDate_txt. Wikszo formatowania dokonano w panelu
Properties, jednak warto w tym przypadku uy bardziej konkretnej czcionki
ni domylna _serif. Dopiero wtedy, gdy system nie bdzie mg odnale
adnej z podanych czcionek, zastosuje domyln czcionk _serif.
Jeli waciwo autoSize pola theDate_txt zostanie ustawiona na left,
pole tekstowe automatycznie dostosuje swoj wielko do wywietlania
penej daty wyrwnanej do lewej strony. Przed zmian tej waciwoci naley
jednak upewni si, e bdzie wystarczajco duo miejsca na wywietlenie
najduszego moliwego tekstu. W przypadku dat do atwo mona przewidzie,
jak duo miejsca bdzie potrzebne.
9. Teraz nadesza pora na wan cz ActionScriptu, ktra bdzie tworzy
instancj LoadVars, a nastpnie pobiera dane ze skryptu PHP. Poniej

poprzednio wpisanego kodu umie poniszy fragment:


//utwrz now instancj klasy LoadVars, ktra bdzie pobiera dane ze skryptu PHP
var getDate:LoadVars = new LoadVars();
//zaaduj dat z pliku PHP
getDate.load("http://localhost/phpflash/ch02/today2.php");
//przypisz waciwo theDate klasy LoadVars do pola tekstowego
getDate.onLoad = function() {
theDate_txt.text = this.theDate;
};

Zwr uwag, e adres localhost przy odnoszeniu si do pliku today2.php


zosta tu uyty tylko w celu lokalnego testowania. Gdy umiecisz swj plik
na zewntrznym serwerze, bdziesz musia zastpi odniesienie do localhost
waciw ciek (absolutn lub relatywn) do tego pliku.
Jeli pracujesz na komputerze Macintosh, adres URL w drugiej linii kodu bdzie nastpujcy: http://localhost/~username/phpflash/ch02/today2.php.
Od teraz jednak bd podawa adres waciwy tylko dla systemu Windows,
gdy ten dla komputera z systemem Mac OS jest analogiczny. Uytkownicy tych
maszyn powinni pamita jedynie o umieszczaniu swojej nazwy uytkownika
we waciwym miejscu (po znaku tyldy).
Cho jest moliwe testowanie filmw Flasha bez uycia powyszej techniki, to
metoda ta spowoduje zaadowywanie plikw SWF do przegldarki za kadym
razem, gdy dokona si w nim zmian. Nie tylko jest to bardziej czasochonne,
ale take pozbawia moliwoci skorzystania z funkcji trace do sprawdzenia
wartoci zmiennych we Flashu.

74

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

75

10. Przetestuj plik poprzez wcinicie skrtu klawiaturowego CTRL+ENTER

(lub CTRL+RETURN w przypadku systemw Mac OS). Moliwe, e bdziesz


musia chwil poczeka, zanim Flash nawie kontakt z serwerem Apache.
W kocu zobaczysz nastpujcy komunikat:

Jeli napotkasz po drodze jakie problemy, porwnaj swoje pliki


z biodiverse02.fla oraz today2.php, ktre znajduj si w kodach rdowych
doczonych do tej ksiki. Prawdopodobnie przyczyn bdu jest zagniedenie
kodu PHP wewntrz kodu XHTML. Pamitaj, e w tym przypadku PHP
suy nie do tworzenia niezalenych stron internetowych, lecz do tworzenia
zwykych skryptw.
Cho dodanie daty do pliku filmowego nie jest czym szczeglnie efektownym, to
jednak naley zwrci uwag, e w tych kilku liniach kodu zawarta jest ta sama funkcjonalno, co w o wiele obszerniejszym kodzie ActionScript. Funkcja date() (ktr
omwimy bardziej szczegowo w rozdziale 11.) uywa jedynie piciu znakw do
sformatowania biecej daty. To samo w ActionScripcie byoby moliwe dopiero
po utworzeniu tablic przechowujcych nazwy dni tygodnia, miesicy, nie wspominajc o koniecznoci utworzenia osobnej funkcji dodajcej przyrostek do daty (st, nd, rd
lub th)1. Kolejna istotna rnica polega te na tym, e data jest generowana po stronie
serwera, a nie klienta. Oczywicie, trzeba zapewni poprawne dziaanie zegara serwera, jednak i tak jest to bezpieczniejsze ni opieranie si na poprawnoci dziaania zegara po stronie klienta (jeli nie korzystasz ze rodowiska anglojzycznego, funkcja
strftime() opisana w rozdziale 11. sformatuje dat oraz czas wedug zasad wybranego jzyka, natomiast na wyjciu funkcji date() data zawsze bdzie podana w jzyku
angielskim.
Jednak najwaniejsz spraw jest fakt, e utworzye dynamiczne cze do zewntrznego rda danych i wiesz ju, w jaki sposb naley importowa zewntrzne dane za
pomoc klasy LoadVars. Eksportowanie danych jest rwnie atwe. Zajm si tym przy
okazji tumaczenia zasad dziaania klas.
Teraz natomiast przedstawi podstawy skadni PHP.

Jeli chce si zachowa format daty w jzyku angielskim przyp. tum.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

75

76

Flash i PHP5. Podstawy

Pierwsze kroki w PHP


Do czsto ludzie zastanawiaj si, co oznacza skrt PHP. Przez pierwsze trzy lata
jego istnienia rozwiniciem tego akronimu bya nazwa Personal Home Page (co oznacza osobista strona domowa). Gdy w 1998 r. opublikowano wersj 3., uznano, e nazwa
ta nie jest adekwatna do funkcji jzyka, wic zmieniono j na PHP:Hypertext Preprocessor. Jest to ulubione rozwinicie rekursywne wrd spoecznoci open source
(np. GNU Gnus Not Unix).
Wraz z opublikowaniem wersji 5. PHP, jzyk ten sta si zaawansowanym jzykiem
programowania z bardzo rozbudowanymi moliwociami obiektowymi (jednak nie
uwzgldniono tutaj przestrzeni nazw ani przeciania typw). Jednym z powodw,
dla ktrych nauka PHP jest tak atwa, jest fakt, e obiektowo jest tylko jedn z opcji
jzyka, tote mona zacz nauk samego PHP, a nastpnie po poznaniu podstaw
szybko przej do tworzenia obiektw.

Czy PHP nadaje si


do tworzenia szaty graficznej strony?
Do najpowszechniejszych zastosowa PHP naley dynamiczne tworzenie zawartoci
strony. Fragmenty PHP mog by osadzone bezporednio w kodzie HTML bd
XHTML. O ile tylko mechanizm PHP bdzie w stanie zinterpretowa zawarto dokumentu PHP, strona bdzie wywietlana w przegldarce jak kady inny dokument
HTML.
Spjrzmy na prosty przykad wiele witryn posiada na dole strony informacj
o prawach autorskich. Zamiast rcznego zmieniania roku, mona skorzysta ze znanej
nam ju funkcji date(). Wystarczy w odpowiednim miejscu umieci nastpujcy
kod XHTML:
<div id="footer">&copy; 1999-<?php echo date('Y'); ?>
David Powers </div>

Jeli strona zawiera doczony arkusz stylw, bdzie moga wyglda nastpujco
(peny kod oraz arkusz stylw mona znale w pliku copyright.php, znajdujcym si
w kodach rdowych doczonych do ksiki):

Jeli zegar na serwerze jest prawidowo ustawiony, druga liczba zawsze bdzie numerem biecego roku, ktry bdzie si zmienia o pnocy 31 grudnia. Gdy spojrzysz
na kod rdowy strony w oknie przegldarki, zauwaysz, e cay kod rdowy PHP
znikn:

76

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

77

Mechanizm PHP analizuje kod strony i wysya ju przetworzony z powrotem do dynamicznie tworzonej strony kod XHTML. Rwnie Flash podczas publikowania filmu dynamicznie tworzy stron HTML (lub take XHTML, poczwszy od wersji MX
2004). Lini pokazan wyej mgby bez problemu doda do zwykej strony HTML
przed koczcym znacznikiem </body>. Wystarczyoby tylko zmieni rozszerzenie
z .html na .php.
Pracujc z przykadami znajdujcymi si w ksice przez wikszo czasu bdziesz
wykorzystywa PHP do formatowania danych, wysyanych nastpnie do filmu Flasha,
jednak warto doda, e techniki omawiane w ksice stosuj si take do stron XHTML.
Od momentu wydania wersji 4.3.0 PHP, technologia ta moe by uywana take jako
jzyk polece, jakkolwiek w tej ksice nie bdziemy si zajmowa tym aspektem.
Jeli chcesz dowiedzie si czego wicej o zastosowaniu PHP w pisaniu skryptw
powoki, zapoznaj si z zawartoci strony z dokumentacj PHP (www.php.net/manual/
pl/features.commandline.php).

Podstawy skadni PHP


Podobnie jak jzyki naturalne, jzyki komputerowe posiadaj zbir zasad gramatycznych, tworzcych skadni. Zasad tych naley przestrzega. Komputery s szczeglnie
wraliwe na precyzj konstruowanych zda. Szczliwie skadnia PHP nie jest trudna
do opanowania. Posiada duo cech wsplnych z ActionScriptem, jednak w wielu miejscach jest znaczco rna.
Ze wzgldu na charakter zagadnienia, moliwe, e wikszo informacji przedstawionych w tym rozdziale wyda Ci si zbyt sucha. Jednak trzeba je przyswoi, zanim
przejdziemy dalej. Mog zagwarantowa, e po uwanej lekturze tego rozdziau nie
tylko zdobdziesz duo nowych wiadomoci, ale take utworzysz pierwszy w tej ksice przydatny program formularz oceniajcy we Flashu i PHP.

Nadawanie nazwom stron odpowiednich rozszerze


Kada strona PHP musi posiada nazw o odpowiednim rozszerzeniu (np. .php index.php). Bez rozszerzenia serwer nie bdzie w stanie przetworzy zawartych w dokumencie instrukcji PHP, a przegldarka po prostu wywietli stron tak, jakby kod PHP
by zwykym tekstem. W ten sposb pewne istotne informacje mog w atwy sposb
zosta przypadkowo opublikowane (np. hasa do baz danych).
Cho mona tak skonfigurowa serwer, aby traktowa pliki o innych rozszerzeniach
nazw tak samo jak skrypty PHP, to jednak nie jest to zalecane rozwizanie. Jeli strona nie bdzie zawieraa kodu, ktry powinien zosta przetworzony przez parser PHP,
cenne zasoby komputera bd marnowane.

Korzystanie ze znacznikw PHP


Nawet jeli korzystasz z odpowiednich rozszerze nazw plikw, cay kod PHP musi
zosta ujty w odpowiednie znaczniki. Prawdopodobnie zdye ju si zorientowa
na podstawie podanych wczeniej przykadw, e kod PHP zaczyna si znacznikiem

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

77

78

Flash i PHP5. Podstawy


<?php i koczy ?>. Mechanizm przetwarzania PHP zajmuje si wycznie zawartoci,
ktra znajduje si pomidzy tymi znacznikami. Wszystkie pozostae elementy s ignorowane przez parser PHP.

Niestandardowe znaczniki PHP. Istnieje kilka innych metod osadzania kodu PHP
na stronie. Mimo wszystko nie polecam stosowania ktrejkolwiek z nich, jednak dla
cisoci omwi je pokrtce.
t Krtkie znaczniki: pierwotnie kod PHP oznaczano poprzez <? oraz ?>. Mimo

zalety zwizoci, otwierajcy znacznik mg by w atwy sposb pomylony


z instrukcjami XML, tote nie zaleca si duej jego stosowania. Krtkie
znaczniki s domylnie wczone w PHP 5, jednak administrator systemu
moe je wyczy. Dlatego aby zachowa pewno, e skrypt bdzie
przenony, lepiej uywa znacznika <?php.
t Znaczniki w stylu ASP: aby zachowa zgodno z niektrymi edytorami

HTML, ktre nie potrafi poprawnie interpretowa znacznikw PHP, parser,


po zmianie konfiguracji, moe rwnie interpretowa znaczniki <% oraz %>
jako rozpoczynajce i koczce znaczniki PHP, niemniej jednak nie warto
zmienia domylnych ustawie.
t Bezporednie wywietlanie: niezalenie od uywanego formatu znacznikw,

PHP oferuje skrtowy sposb na umieszczenie kodu PHP w dokumencie


jest nim symbol <?= dla znacznika otwierajcego. Przykadowo <?= date
('Y'); ?> moe zastpi <?php echo date ('Y'); ?>. Cho jest to poyteczny
sposb, to jednak posiada ograniczone zastosowanie i zawiedzie, jeli
w ustawieniach wyczono krtkie znaczniki.
t Znaczniki skryptowe: jest to najbardziej dosowna metoda zaznaczenia
obecnoci kodu PHP na stronie: <script language="PHP"></script>. Taki

sposb doczania kodu PHP zaleca si jedynie wtedy, gdy dany edytor HTML
nie obsuguje adnej z poprzednich metod.

Komentowanie kodu
Jeli posiadasz dowiadczenie w programowaniu w ActionScripcie, zapewne rozumiesz konieczno dodawania komentarzy do kodu. Najkrcej mwic, komentarze
po prostu opisuj zadania poszczeglnych czci kodu. Podczas pracy zespoowej
umoliwiaj rozeznanie si w wykonanej ju pracy, natomiast indywidualnym programistom komentarze uatwiaj debugowanie i modyfikowanie programw, szczeglnie gdy powracaj do nich po kilku miesicach przerwy.
W PHP istnieje kilka metod dodawania komentarzy wszystkie zostay zaczerpnite
z innych jzykw programowania. Pierwsze dwa s takie same jak w ActionScripcie.
Komentarze w stylu C++. Pocztek komentarza jest oznaczony przez dwa prawe
ukoniki.
//To jest komentarz: nastpna linia wywietli biecy rok
echo date('Y'); //To take jest komentarz

78

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

79

Komentarze w stylu C. Parser PHP bdzie ignorowa kod, ktry pojawi si pomidzy znakami /* oraz */, bez wzgldu na liczb linii zawartych midzy tymi symbolami. Dziki temu mona nie tylko dodawa komentarz do kodu, ale take w razie
potrzeby uniemoliwia wykonywanie wybranych fragmentw skryptu.
/* To jest komentarz,
ktry si rozcignie
na wiele linii.
Mona take w ten sposb
chwilowo wycza
fragmenty kodu. */

Komentarze w stylu powoki systemu. PHP traktuje znak (#) tak samo jak dwa prawe ukoniki (//). Ten typ komentarza zosta zapoyczony z jzykw skryptowych.
Poniewa znak ten jest atwo dostrzegalny w kodzie, dobrze si nadaje do oznaczania
pewnych fragmentw programu.
#To jest komentarz
echo date('Y'); #To take jest komentarz
####################
# Sekcja baz danych
####################

Dowiadczeni programici ActionScriptu, podczas doczania zewntrznych plikw


do kodu PHP, zapewne zwrc szczegln uwag na to odmienne uycie znaku #.
W ActionScripcie znak # jest wykorzystywany w dyrektywach kompilatora, natomiast w PHP sprawia, e dana linia jest ignorowana.
#include "myFile.as" //poprawny kod ActionScript
#include "myFile.php" //taka linia zostanie zignorowana w PHP

Zapewne pamitasz z poprzedniego rozdziau, e plik konfiguracyjny PHP (php.ini)


wykorzystuje znak rednika do zakomentowania linii. Jest to jedyne miejsce, w ktrym
komentarze w PHP maj tak posta. Jak si dowiesz w nastpnym podrozdziale,
w zwykych skryptach PHP znak rednika posiada zupenie inne znaczenie.

Korzystanie z nawiasw oraz rednikw


Podobnie jak ActionScript, PHP skada si z serii polece, ktre s wykonywane sekwencyjnie (o ile nie znajduj si wewntrz funkcji wwczas w obu tych jzykach
jest wykonywana najpierw funkcja, a nastpnie kod znajdujcy si poniej jej wywoania). Kade polecenie w PHP musi by zakoczone znakiem rednika.
Opuszczanie rednikw na kocu polece jest jednym z najpowszechniejszych bdw popenianych przez pocztkujcych programistw PHP. Cho w
ActionScripcie instrukcja zostanie wykonana nawet i bez tego rednika, to
PHP zatrzyma dziaanie skryptu i zwrci komunikat o bdzie. Jedynym miejscem, gdzie mona opuci znak rednika bez adnych konsekwencji jest
ostatnia instrukcja kodu, tu przed zamykajcym znacznikiem PHP.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

79

80

Flash i PHP5. Podstawy

Polecenia PHP mog by grupowane wewntrz nawiasw klamrowych ({}), przykadowo, w instrukcjach warunkowych, ptlach lub funkcjach. Mimo e w ActionScripcie powinno si umieszcza rednik po zamykajcym nawiasie funkcji anonimowych,
to w podobnej sytuacji w PHP nie mona ju tego robi.

Zapenianie kodu biaymi znakami


W PHP kada instrukcja koczy si znakiem rednika, zatem wszystkie biae znaki
niebdce czci cigu znakowego s tak naprawd ignorowane (cigami znakowymi zajmiemy si bliej w rozdziale 4.). Oznacza to, e z punktu widzenia parsera PHP
nie ma znaczenia, czy kod znajdzie si w jednym wersie, czy te dla wikszej
czytelnoci bdzie rozpisany na wiele linii. Oczywicie druga opcja, z wiadomych
wzgldw, jest lepsza.
Cho nie istniej sztywne reguy, to ze wzgldu na konieczno zachowania czytelnego kodu warto podzieli swj skrypt na logiczne bloki. PHP nie zezwala jedynie na
umieszczanie biaych znakw wewntrz nazw zmiennych lub funkcji, jednak o ile mi
wiadomo, nie jest to moliwe w adnym jzyku programowania.
Ze wzgldu na histori ewoluowania PHP, nie istnieje oficjalny sposb formatowania kodu lub umieszczania go wewntrz nawiasw klamrowych. Dla odmiany w ActionScripcie istnieje zalecany styl, ktry mona wczy poprzez
opcj Auto Format w panelu Actions. W miar czytania ksiki dostrzeesz, e
dla PHP i ActionScriptu uywam nieco odmiennych stylw formatowania, dziki
czemu atwo mona odrni ich kod. Moesz jednak swobodnie korzysta ze
stylu kodowania ActionScriptu, jeli wydaje Ci si bardziej naturalny. O ile
tylko skadnia polece jest prawidowa, format kodu nie ma w rzeczywistoci
znaczenia.

Nadawanie nazw zmiennym


Zmienne stanowi podstaw kadego jzyka programowania jak sama nazwa
wskazuje, przechowuj wartoci, ktre w programie mog ulec zmianie. Dobrym przykadem moe by stan konta w banku. Cho cigle ulega zmianie, to odwoujesz si
do niego na podstawie jego nazwy. Zasada nazywania zmiennych jest w PHP niemal
taka sama jak w ActionScripcie, poza jednym wyjtkiem: zmienne w PHP musz si
zaczyna od znaku dolara ($), natomiast po nim:
t musi wystpowa litera lub znak podkrelenia, po ktrym moe wystpi

dowolna kombinacja liter, liczb lub podkrele;


t nie moe wystpowa liczba;
t nazwa zmiennej nie moe zawiera spacji.

Tabela 2.1 przedstawia przykady rnych wariacji w nazwach zmiennych PHP.

80

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

81

Tabela 2.1. Przykady prawidowych i nieprawidowych nazw zmiennych PHP


Zmienna

Poprawno

Przyczyna

myVar

Niepoprawna

Nie rozpoczyna si znakiem $

$myVar

Poprawna

Rozpoczyna si znakiem $; wszystkie pozostae znaki s dozwolone

$my Var

Niepoprawna

Zawiera spacj

$myVar1

Poprawna

Wszystkie znaki s dozwolone

$1myVar

Niepoprawna

Pierwszy znak po $ jest cyfr

$_1myVar

Poprawna

Pierwszy znak po $ jest podkreleniem

$my_Var

Poprawna

Wszystkie znaki s dozwolone

Nadawanie nazw funkcjom


Funkcje s kolejnym podstawowym skadnikiem jzykw programowania. Czerpic
analogi z jzyka naturalnego mona powiedzie, e skoro zmienne mona potraktowa jako rzeczowniki, to funkcje niech bd czasownikami sprawi, e w programie
co bdzie si dziao. PHP posiada cae mnstwo wbudowanych funkcji (obliczyem,
e wicej ni 2700), jednak zarwno w PHP, jak i ActionScripcie warto tworzy swoje
wasne funkcje. Zasady ich nazywania bd prawie jednakowe jak w przypadku zmiennych, poza koniecznoci uwzgldniania znaku dolara na pocztku zmiennych. Oznacza to, e nazwy funkcji musz si zaczyna liter lub podkreleniem.
Mimo e rozpoczynanie nazw funkcji i zmiennych od znaku podkrelenia nie
jest bdem, to naley unika tej praktyki. Nazwy wielu wbudowanych funkcji
PHP zaczynaj si wanie od tego znaku, tote aby unikn nieporzdku w kodzie, lepiej nie nadawa funkcjom nazw rozpoczynajcych si od znaku podkrelenia.

Unikanie sw kluczowych
PHP nie pozwala na nadpisywanie nazw wbudowanych funkcji jzyka. Ze wzgldu na
ich liczb niekiedy trudno bdzie unikn wykorzystywania sw zastrzeonych. Warto
wwczas poprzedza nazwy funkcji przedrostkami my, the lub na przykad wasnymi
inicjaami.
W tabeli 2.2 zostay przedstawione wszystkie sowa kluczowe PHP nie mona ich
stosowa do nazywania wasnych zmiennych, funkcji, klas ani staych.

Rozrnianie wielkoci liter


Wszystko byoby prostsze, gdyby PHP zawsze rozrnia wielko liter. Niestety, tak
nie jest:
t w przypadku nazw zmiennych wielko liter jest istotna;
t w przypadku nazw funkcji wielko liter nie ma znaczenia;
t w przypadku nazw klas wielko liter nie jest istotna.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

81

82

Flash i PHP5. Podstawy

Tabela 2.2. Sowa kluczowe PHP nie powinny by stosowane do nazywania funkcji i zmiennych
tworzonych przez uytkownika
Sowo kluczowe PHP
and

array()

as

breab

case

cfunction

class

const

continue

declare

default

die()

do

echo()

else

elseif

empty()

enddeclare

endfor

endforeach

endif

endswitch

endwhile

eval()

exception

exit()

extends

for

foreach

function

global

if

include()

include_once()

isset()

list()

new

old_function

or

php_user_filter

print()

require()

require_once()

return()

static

switch

unset()

use

var

while

xor

__CLASS__

__FILE__

__FUNCTION__

__LINE__

__METHOD__

Oznacza to, e jeli przez przypadek zamiast $myVar programista napisze $myvar, zmienna nie zostanie poprawnie rozpoznana. Z drugiej strony, wbudowane funkcje tego jzyka mog ju by zapisywane na wiele sposobw np. nazwy echo, Echo lub eCHo
bd w PHP traktowane tak samo.
Spraw jeszcze bardziej komplikuje fakt, e cho w przypadku ActionScript 1.0 wielko liter nie bya istotna, to ju w wersji 2.0 wprowadzono nowe, sztywne reguy
dotyczce tej kwestii.
W tej sytuacji najlepiej jest przyj, e w ActionScript oraz w PHP wielko liter jest istotna. Dlatego te w przypadku nazw zoonych konsekwentnie korzystaj z jednej konwencji nazewniczej albo uywajc tzw. notacji wielbdziej
(ang. camel case) np. myVar, albo znaku podkrelenia np. $my_var.
Sprawisz sobie duo kopotw, jeli bdziesz jednoczenie korzysta z dwch
osobnych zmiennych nazwanych $myVar oraz $myvar. Prdzej czy pniej uyjesz niewaciwej zmiennej. Ze wzgldu na fakt, e w przypadku nazw funkcji
i klas wielko liter nie ma znaczenia, tworzenie dwch zmiennych rnicych
si tylko wielkoci liter jest od pocztku skazane na niepowodzenie.

Wybr sensownych nazw


Jeli dostosujesz si do wyej wymienionych wskazwek, bdziesz mg nazywa
zmienne i funkcje wedle wasnego uznania. W PHP nie ma znaczenia, czy nazwiesz
zmienn $a czy te $superfajnazmiennacharakterystyczna, jednak jeli nazwy bd
jednoznacznie kojarzyy si z dan zmienn lub funkcj, bardzo uatwisz sobie ycie.
Kod PHP jest przechowywany po stronie serwera, wic nikt nie odczyta tych nazw
(o ile programista nie sprawi, by celowo byy widoczne lub te skrypty bd serwer
zostan nieprawidowo skonfigurowane), tote nie staraj si naladowa niektrych

82

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

83

technik celowego gmatwania kodu, propagowanych przez programistw JavaScriptu.


Jedynymi osobami, ktre w ten sposb zostan zmylone, bdziesz Ty sam i inne osoby,
ktre bd chciay rozwija taki kod w przyszoci.
Jednym sowem, opaca si nadawa zmiennym duo mwice nazwy. Dziki nim
o wiele atwiej mona zrozumie przeznaczenie danego fragmentu kodu i atwiej go
take rozwija. Mniejsze bdzie rwnie prawdopodobiestwo popenienia bdu
w nazwie zmiennej. Niemniej jednak jednoliterowe nazwy zmiennych, takie jak na
przykad $i, powinny by stosowane jedynie jako liczniki w ptlach lub tam, gdzie
ich przeznaczenie jest jasne, a warto atwo przewidywalna.

Na luzie z PHP
PHP, podobnie jak JavaScript oraz pierwotnie ActionScript, zosta zaprojektowany
w celu uatwienia programowania. Programista kodujcy w tym jzyku zosta zwolniony z obowizku pamitania o typach zmiennych. Innymi sowy, moe on najpierw zadeklarowa zmienn jako cig znakowy, a nastpnie przypisa do niej warto cakowit byoby to niemoliwe w jzykach kontrolujcych typy zmiennych
(np. w Javie).
Ta swoboda zostaa powanie ograniczona w ActionScripcie 2.0, w ktrym znalazo
si ju zalecenie deklarowania typu dla kadej zmiennej oraz funkcji. Mimo e statyczne (bd cise) deklarowanie typw moe si wyda zbyt duym ograniczeniem
elastycznoci ActionScriptu 1.0, to i tak ostatecznie oszczdza si sporo czasu, poniewa kompilator automatycznie bdzie ostrzega o jakichkolwiek potencjalnych bdach w dopasowaniu do typw zmiennych. Poza tym zyskuje si dokadn wiedz,
w ktrym miejscu popeniono bd, co oznacza, e nie trzeba przeszukiwa caego
kodu w poszukiwaniu usterek. Z drugiej strony, programici PHP5 s generalnie
przeciwni statycznemu definiowaniu typw. Szczliwie typ zmiennych nie stanowi
gwnego rda problemw, gwnie dziki zastosowaniu w PHP odrbnych operatorw dodawania oraz czenia cigw znakowych (tak jak to opisano w nastpnym
podrozdziale).
Mimo e dziki statycznemu okrelaniu typw mona unikn wielu bdw
w programie, to naley zauway, e taka kontrola jest przeprowadzana jedynie
w czasie kompilacji kodu ActionScript, czyli w czasie publikowania pliku SWF.
Kod Flasha jest tworzony dopiero w momencie uruchomienia programu i nie
mona zagwarantowa, e program zasygnalizuje bd wywoany przez zmiany
wprowadzone przez fragment PHP. Gdy pojawi si nieoczekiwane wyniki, by
moe trzeba bdzie dokona konwersji cigw znakowych otrzymanych z klasy
LoadVars na waciwy typ zmiennych. Skoro wszystkie zmienne, ktre zostay
pobrane poprzez LoadVars s zmiennymi znakowymi, niekiedy moe si okaza,
e w przypadku nieoczekiwanych wynikw bdziesz musia dokona konwersji
do waciwego typu danych.

PHP posiada osiem typw zmiennych, ktre s mocno zblione do odpowiednich typw danych znanych z ActionScriptu. Ponisza lista zawiera krtk charakterystyk
kadego z nich:

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

83

84

Flash i PHP5. Podstawy


1. Integer: ten typ przechowuje liczby cakowite (np. 1, 25 lub 346). Zmiennych

tego typu nie zapisuje si w cudzysowie. Liczby cakowite mog mie posta
dziesitn, semkow lub szesnastkow. Liczby semkowe rozpoczynaj si
od 0, natomiast szesnastkowe od 0x. Powoduje to istotne konsekwencje
w przypadku liczb, ktre mog si rozpoczyna od 0 (numery telefonw lub
identyfikatory). Aby unikn problemw, warto przechowywa takie wartoci
jako cigi znakowe.
2. Liczby zmiennopozycyjne (double): Ten typ moe by zapisany albo przy

uyciu kropki dziesitnej (np. 2.1 lub 98.6), albo wykorzystujc notacj
matematyczn (np. 0.314E1). Podobnie jak liczby cakowite, liczby
zmiennopozycyjne nie s umieszczane w cudzysowach. W rozdziale 3.
omwimy dokadniej ten typ liczb.
3. String: ten typ jest sekwencj znakw, ktr umieszcza si albo midzy

znakami apostrofu, albo w cudzysowie. Cigi znakowe zostay wyczerpujco


omwione w rozdziale 4.
4. Boolean: typ przyjmujcy wartoci true lub false. Ponisze zmienne
s traktowane jako false w PHP:
t

sowo kluczowe false;

liczba cakowita 0;

liczba zmiennopozycyjna 0.0;

pusty cig znakowy ('' lub "", bez adnych spacji w rodku);

zero jako cig znakowy ("3");

tablica posiadajca zerow liczb elementw;

t NULL.

Wszystkie pozostae wartoci s traktowane jako true.


5. Array: istotna rnica pomidzy PHP a ActionScriptem polega na tym, e

w PHP tablice asocjacyjne posiadaj dugo, ktr mona mierzy i ktr


mona manipulowa (w ActionScripcie to nie jest moliwe). Zajmiemy si
tym szczegowo w rozdziale 5.
6. Object: ten typ jest spotykany w klasach wbudowanych PHP lub zdefiniowanych

przez uytkownika. W rozdziale 5. omwimy zastosowanie obiektw w tym


jzyku, natomiast w rozdziale 7. zajmiemy si nimi bardziej szczegowo.
7. Resource: gdy PHP uzyskuje dostp do zewntrznych danych, takich jak

bazy danych MySQL lub pliki tekstowe, wymaga pewnego odniesienia do


tworzonego poczenia. Z punktu widzenia programisty bdzie to zwyka
zmienna typu resource.
8. NULL: ten typ posiada tylko jedn warto i jest ona po prostu rwna NULL.

Podobnie jak w ActionScripcie, jest ona wykorzystywana jedynie do oznaczania


zmiennych, ktre nie posiadaj adnych wartoci. Zwr uwag, e tego sowa
kluczowego nie zapisuje si w cudzysowie.

84

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

85

ledzenie zmian w typach zmiennych


Ze wzgldu na fakt, e PHP jest jzykiem, w ktrym nie stosuje si kontroli typu
zmiennych, zmienne w skrypcie mog przyjmowa rne typy. Czsto sam programista nie jest wiadom zachodzcych zmian, jednak niekiedy moe mie to nieprzewidywalne konsekwencje. Co prawda, operatorami PHP i instrukcjami warunkowymi
bdziemy si zajmowa dopiero w nastpnym rozdziale, jednak te zaprezentowane
w poniszym wiczeniu maj takie same dziaanie w ActionScripcie, wic nie powinno
by wikszych problemw z ich zrozumieniem.
1. Utwrz nowy dokument PHP w folderze phpflash/ch02 i nazwij go

variables.php.
2. Wpisz nastpujcy kod:
<?php
$myVar = '12';
$type = gettype($myVar);
echo "Warto: $myVar Typ: $type ";
?>

Funkcja gettype() jest odpowiednikiem operatora typeof w ActionScripcie,


ktry suy do okrelania typu zmiennej przekazanej do niego jako argument.
W powyszym kodzie wynik jej dziaania jest przechowywany w zmiennej
$type, a nastpnie wysyany poprzez funkcj echo na wyjcie komputera,
w tym przypadku ekran. Zwr uwag, e w 2. linii zastosowano znaki
apostrofu, natomiast w linii 4. warto zmiennej umieszczono ju w cudzysowie.
W tym szalestwie jest pewna metoda przyczyny takiego postpowania
wyjani w nastpnym podrozdziale.
3. Zapisz plik, a nastpnie otwrz go w oknie przegldarki. Prawdopodobnie

domylasz si ju, jaki bdzie wynik. Strona powinna wyglda nastpujco:

4. W pliku variables.php umie kursor tu po sowie gettype i przed

otwierajcym znakiem nawiasu. Wstaw kilka spacji, zapisz plik i zaaduj


go ponownie (w celu ponownego zaadowania strony moesz skorzysta
z przycisku Odwie w trakcie wykonywania wicze opisanych w tym
rozdziale bdziesz wielokrotnie korzysta z tego przycisku). Zmiana
zawartoci pliku nie powinna spowodowa adnej rnicy w wygldzie
wywietlanej strony. Teraz umie kilka pustych linii pomidzy sowem
gettype oraz ($myVar). Ponownie zapisz i wywoaj plik. Wynik powinien
wci by ten sam. Dzieje si tak dlatego, e PHP ignoruje wszystkie
niepotrzebne biae znaki i poszukuje jedynie rednikw na kocu wyrae.
Usu w takim razie rednik po ($myVar). Zapisz plik i znw przegldnij go

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

85

86

Flash i PHP5. Podstawy

w oknie przegldarki. Tym razem PHP stwierdzi, e nie jest zadowolony


z tej zmiany:

5. Umie rednik z powrotem na swoim miejscu i zmie drug lini kodu

w nastpujcy sposb:
$myVar = '12' + 1;

6. Zapisz plik i uruchom go w przegldarce. Parser PHP dokona prostej operacji

arytmetycznej, w konsekwencji zmieni si typ zmiennej.

7. Teraz dokonaj drobnej modyfikacji:


$myVar = '12' + 0.5;

8. Zapisz plik, a nastpnie ponownie uruchom go w oknie przegldarki. Wyniki

nie powinny Ci zdziwi. Jedyna rnica w tym przypadku polega na tym,


e PHP posiada odmienny typ danych dla zmiennych przechowujcych liczby
cakowite (integer) i zmiennopozycyjne (double), natomiast ActionScript
traktuje je wszystkie jako typ Number.

9. Ponownie zmodyfikuj drug lini kodu w nastpujcy sposb:


$myVar = '12' + 1.0;

10. Zapisz plik i wywoaj go w oknie przegldarki. Efekt moe si okaza

zaskakujcy. Wywietlon wartoci jest 13, jednak oznaczon jako typ double.
Dzieje si tak dlatego, e dodalimy liczb z kropk dziesitn. W takich
sytuacjach, jeli po kropce dziesitnej wystpuje zero, wwczas cz
dziesitna jest pomijana, niemniej jednak typ danych nadal pozostaje double.

86

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

87

Prawdopodobiestwo, e w ten sposb bdzie dochodzio do powstawania


bdw w kodzie jest bardzo niewielkie, niemniej jednak powyszy przykad
moe potwierdzi opini, e nazbyt swobodne podejcie do typu zmiennych
moe nie ze sob ukryte niespodzianki.

11. Tym razem poka, w jaki sposb spowodowa, by zmienna $myVar przyja
typ Boolean. Niekiedy bdziesz chcia wykona fragment kodu jedynie po

sprawdzeniu pewnego warunku wyraonego przez sam zmienn. Jeli jej


warto bdzie rna od zera, wwczas warunek zostanie speniony. Zmie
kod skryptu w nastpujcy sposb (znaki # zostay uyte do chwilowego
wyczenia linii 3. i 4.):
<?php
$myVar = '12' + 0.5;
#$type = gettype($myVar);
#echo "Warto: $myVar Typ: $type";
if ($myVar) echo '<br> Rwna si true';
?>

12. Zapisz plik i otwrz go w oknie przegldarki. Poniewa teraz zmienna


$myVar zawiera warto 12.5, test warunku powiedzie si i nastpi
zwrcenie wartoci true.

13. Teraz zmie drug lini kodu, aby wygldaa nastpujco (upewnij si,

e dokadnie j skopiowae):
$myVar = 'false';

14. Zapisz plik variables.php i otwrz go w oknie przegldarki:

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

87

88

Flash i PHP5. Podstawy


15. Powiniene otrzyma ten sam wynik, co poprzednio i nie jest to pomyka.

Usu znaki komentarza z linii 3. oraz 4. Po dokonaniu edycji strony wszystko


powinno by jasne.
Warto false znalaza si w cudzysowie, zatem stanowi ona teraz zwyky
cig znakowy. Zajrzyj do pocztkowej czci opisu tego wiczenia: jedynymi
cigami znakowymi, ktre mog by rwne false s puste cigi znakowe
(czyli zwyky cudzysw) lub cig znakowy 0. Paradoksalnie, sowo false
zwrci w warunku warto true.
16. Usu zatem znaki cudzysowu okalajce warto false, ktra znajduje si

w drugiej linii. W ten sposb cig znakowy sta si sowem kluczowym jzyka
i wszystko powinno ju zadziaa poprawnie.

Zapisywanie wartoci true oraz false w cudzysowie jest czst pomyk


pocztkujcych programistw PHP oraz ActionScriptu. Wartoci te staj si
wwczas zwykymi cigami znakowymi.

czenie ze sob sw oraz zmiennych


Diabe tkwi w szczegach. Okazuje si, e znak kropki w PHP i ActionScripcie peni
bardzo wan rol, jednak jego znaczenie jest rne w kadym z tych jzykw. Podczas gdy kropka w ActionScripcie ma przede wszystkim pozwala na odwoywanie
si do waciwoci obiektw oraz zagniedonych klipw filmowych, to w PHP suy
do czenia cigw znakowych. Innymi sowy, jest to operator konkatenacji.
Tote, aby poczy dwa cigi znakowe w kadym z tych jzykw, naley zastosowa
odrbne operatory:
t Styl ActionScript: "To jest" + "zdanie.";
t Styl PHP: "To jest" . "zdanie. ";

Zauwa, e PHP, podobnie jak ActionScript, nie dodaje adnych spacji pomidzy
cigami znakowymi podczas ich czenia. Liczba biaych znakw pomidzy cigiem
znakowym a operatorem konkatenacji jest ignorowana, tote jeli pomidzy nimi ma
si znale spacja, naley j doda albo do prawego, albo do lewego cigu.
Jedn z zalet korzystania z osobnego operatora zczenia dla cigw znakowych w PHP
jest unikanie problemu zwizanego z dodawaniem liczby do cigu znakowego (problem wystpowa w ActionScripcie 1.0). Jeli korzysta si z operatora +, ActionScript
przypisze pierwszestwo cigom znakowym, jednak PHP po prostu zamienia cigi
znakowe na odpowiadajce im wartoci liczbowe.

88

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

89

"12" + "34" //ActionScript zwrci 1234


'12' + '34' //PHP zwrci 46
'12' . '34' //PHP zwrci 1234

PHP pjdzie nawet dalej. Jeli jest w stanie wydoby liczb z pocztku cigu znakowego, to zwyczajnie doda j do drugiego skadnika sumy.
'10 zielonych buteleb' 1 //PHP zwrci 9
'zielonych buteleb 10' 1 //PHP zwrci -1

Zauwa, e w tym przykadzie tekst wewntrz cigu znakowego jest tak naprawd
ignorowany. W pierwszym przypadku PHP zwrci po prostu 9, zamiast 9 zielonych
butelek, natomiast w drugim przykadzie liczba 10 zostanie pominita, gdy nie rozpoczyna ona cigu znakw, ktry w tym wypadku jest zamieniany na liczb 0.
Pewnym problemem w PHP moe by fakt, e operator zczenia jest tak niewielki,
e niekiedy mona go nieumylnie pomin (zarwno podczas przegldania kodu, jak
i podczas jego kopiowania). Czsto te mona si pomyli jednoczenie kodujc
w ActionScripcie oraz w PHP. Dlatego te zwracaj uwag, z ktrego operatora konkatenacji korzystasz, w przeciwnym przypadku mog powstawa trudne do wykrycia bdy.
Apostrofy czy cudzysowy? Moge zauway, e w wikszoci przykadw w tym
rozdziale wykorzystywaem apostrofy, mimo e w czwartej linii poprzedniego fragmentu kodu zastosowaem cudzysw. Istnieje ku temu kilka powodw, cho programici PHP nie zawsze przestrzegaj tych zasad:
t To, co jest zawarte pomidzy apostrofami jest traktowane jako staa znakowa
(string literal).
t Cudzysw wskazuje parserowi PHP, e przechowuje elementy, ktre naley

przetworzy.
Prosty przykad poniej powinien nieco uatwi zrozumienie tej reguy. Jeli chcesz
przetestowa dowolny z poniszych przykadw w swojej przegldarce, nie zapominaj, e cay kod PHP musi by zawarty midzy otwierajcym i zamykajcym znacznikiem (<?php oraz ?>):
$name= 'David';
echo 'Cze, $name'; //Wywietla 'Cze, $name'
echo "Cze, $name"; //Wywietla 'Cze, David'

Gdy zastosujesz apostrofy, zmienna $name bdzie wywietlana bez wczeniejszego


przetworzenia przez parser PHP, natomiast jeli zapiszesz j w cudzysowie, zostanie
wywietlona na ekranie dopiero po przetworzeniu przez mechanizm PHP.
Dodatkowo, cudzysw umoliwia zapisanie cigw znakowych zawierajcych apostrofy.
echo "Poyczyem auto Cabe'owi"; //cig znakw bdzie wywietlony
echo 'Poyczyem auto Cabe'owi'; //wywietli komunikat o bdzie

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

89

90

Flash i PHP5. Podstawy

Powodem, dla ktrego w drugim przypadku zostanie wygenerowany komunikat o bdzie, jest fakt, e interpreter PHP traktuje drugi znak apostrofu (pomidzy t a s) jako
znak zamykajcy cig znakowy. Mona te zaradzi temu w inny sposb poprzez
uycie znakw specjalnych, ktre spowoduj, e parser PHP potraktuje dany cig liter
w szczeglny sposb. Wszystkie znaki specjalne rozpoczynaj si od lewego ukonika (tzw. znaku sterujcego). Gdy umiecisz taki ukonik przed apostrofem, parser PHP
nie potraktuje tego apostrofu jako znaku zamykajcego i cig znakowy zostanie wywietlony tak jak zaplanowano.
echo 'It\'s fine'; //wywietli si prawidowo

Ze wzgldu na przydatno takiego rozwizania wielu programistw PHP korzysta


tylko z cudzysoww, niemniej jednak wedug oficjalnych zalece naley unika zbdnego przetwarzania dokumentu przez parser PHP. Jeli cigi znakowe zawieraj zmienne, ktre wymagaj przetworzenia, warto uy cudzysoww. Jeli natomiast zawieraj tylko stae znakowe, wwczas parser PHP niepotrzebnie bdzie zuywa zasoby
komputera do wyszukiwania zmiennych w celu ich przetworzenia. Cho w przypadku
krtkich skryptw odbywa si to w uamku sekundy, to w duszych programach
moe to zaj ju nieco czasu. Jeli powysze argumenty nadal Ci nie przekonuj,
zauwa, e aby wpisa znak cudzysowu, naley skorzysta z dwch przyciskw na
klawiaturze (SHIFT+), podczas gdy apostrof uzyskuje si jedynie za pomoc jednego przycisku.
Spjrzmy teraz na tabel 2.3 przedstawiajc wikszo znakw specjalnych. Bdziemy
z niej korzysta podczas budowania aplikacji we Flashu.
Tabela 2.3. Znaki specjalne stosowane w cigach znakowych w jzyku PHP
Znak sterujcy

Reprezentowany znak w cigu

\"

Cudzysw

\n

Nowa linia

\r

Powrt kursora

\t

Tabulator

\\

Lewy ukonik

\$

Znak dolara

\{

Otwierajcy nawias klamrowy

\}

Zamykajcy nawias klamrowy

\[

Otwierajcy nawias kwadratowy

\]

Zamykajcy nawias kwadratowy

Moe si wydawa, e nawiasy nie s niczym szczeglnym, jednak podczas pracy


z zapytaniami do baz danych szybko si przekonasz, e umiejtno budowania
cigw znakowych prawidowo ujtych w apostrofy bd cudzysowy jest szczeglnie istotna.

90

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

91

Wysyanie formularza poczt e-mail


Mam nadziej, e nie zanudziem Ciebie do tej pory, gdy teraz chciabym pokaza,
w jaki sposb mona wykorzysta t wiedz w praktyce. Nie przejmuj si, jeli w tym
momencie nie wszystko jest dla Ciebie jasne. Ksika ta powinna stanowi swego rodzaju kompendium, do ktrego w razie jakichkolwiek wtpliwoci bdziesz mg
w przyszoci powrci.
Teraz utworzymy formularz dla odwiedzajcych Twoj stron, za pomoc ktrego
uytkownicy bd mogli wysya swoje komentarze, szczegy dotyczce subskrypcji
oraz innego typu informacje. Formularz moe posiada dowoln liczb pl, jednak
aby maksymalnie uproci spraw, zdecydowaem si tylko na pi pl. Gotowy ju
formularz jest widoczny na rysunku 2.1.
Rysunek 2.1.
Gotowy formularz
oceniajcy

Konstruowanie formularza
Formularz mona utworzy albo samodzielnie, na podstawie podanych niej wskazwek, albo jeli chcesz si skoncentrowa na PHP i ActionScripcie wzorujc
si na pliku biodiverse05.fla, dostpnym w materiaach rdowych tego rozdziau.
Utworzenie takiego formularza jest doskona okazj do wyprbowania wersji 2.
komponentw TextInput oraz TextArea, po raz pierwszych uwzgldnionych we Flashu
MX 2004. Niemniej jednak nie bd z nich tutaj korzysta, gdy zapewne cz Czytelnikw nadal uywa Flasha MX. Co wicej, Macromedia ogosia, e kolejne istotne
zmiany w architekturze komponentu zostan wprowadzone dopiero wraz z now wersj Flasha. Dlatego te, zamiast gotowych komponentw wolaem tutaj uy zwykych pl statycznych oraz dynamicznych. Gdy ju podstawowe funkcje PHP i Flasha
bd dziaay poprawnie, moesz dostosowa aplikacj do wykorzystania odpowiednich komponentw.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

91

92

Flash i PHP5. Podstawy

Umiejscowienie plikw FLA zaley wycznie od Ciebie. Radz jednak, aby przechowywa je w osobnym folderze w katalogu gwnym serwera. W tym celu
kliknij File/Publish Settings (CTRL+SHIFT+F12 w Windows lub OPT+SHIFT+F12
w systemie Mac OS), a nastpnie ustaw ciek do plikw SWF oraz HTML
w katalogu gwnym serwera. W przypadku systemu Windows katalogiem tym
bdzie C:\htdocs\phpflash\ch02, natomiast w systemie Mac OS bdzie to
analogiczny folder Sites.
Jeli korzystasz z plikw rdowych, zapisz kady z nich pod nazw biodiverse.fla.
W ten sposb zawsze w razie jakichkolwiek problemw bdziesz mg odzyska poprzedni wersj.
1. Wykorzystaj opisany na pocztku tego rozdziau dokument Flasha, sucy

do wywietlania daty sformatowanej przez kod PHP lub uyj pliku


biodiverse02.fla z kodw rdowych. Wstaw trzy nowe warstwy pomidzy
warstw date i actions. Teraz linia czasowa powinna wyglda nastpujco:

2. W warstwach static text oraz form elements rozplanuj ukad formularza.

W przypadku statycznych etykiet uyem pogrubionej czcionki Arial o wielkoci


znakw 12 pt i zastosowaem 35-pikselowy odstp pomidzy ssiadujcymi
ze sob etykietami. Dziki temu powstao miejsce na pojawiajce si komunikaty
o potencjalnych bdach.

92

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

93

3. Obok etykiet umie pola tekstowe, w ktrych uytkownik bdzie mg

wprowadza odpowiednie dane. Nadaj kademu z pl odpowiedni nazw,


np.: name_txt, email_txt, snail_txt, phone_txt oraz comments_txt.
Poniszy zrzut ekranu obrazuje ustawienia dla pierwszego pola.

4. W ostatnim polu uytkownik bdzie mg umieszcza komentarze dotyczce

strony, tote dla tego pola naley zarezerwowa szczeglnie duo miejsca.
Aplikacja ta jest jedynie pewnym przykadem, wic uyem jednoliniowego
pola dla adresu uytkownika. W rzeczywistej aplikacji naleaoby uwzgldni
osobne pola na nazw miasta, kod pocztowy itd.
5. Utwrz przycisk, za pomoc ktrego uytkownik bdzie zatwierdza dane
wprowadzone do formularza, nazwij go submit_btn i umie go na dole

strony. Jeli korzystasz z pliku biodiverse02.fla, taki przycisk bdzie si


znajdowa w bibliotece Flasha (moesz j otworzy poprzez kombinacj
klawiszy CTRL+L w Windows lub z+L w systemie Mac OS).
6. Przetestuj teraz swj film (CTRL+ENTER w Windows lub z+RETURN

w systemie Mac OS). Powinien wyglda tak jak na rysunku 2.1.


7. Nie ma nic bardziej irytujcego ni otrzymywanie niekompletnych informacji,

tote upewnij si, e uytkownik wypeni wszystkie wymagane pola. Tu nad


polem tekstowym name_txt wstaw dynamiczne pole i nazwij je error1_txt.
Aby wywietlany tekst wyrnia si na tle strony, ustaw kolor na czerwony
(#FF3333). Na poniszym rysunku przedstawiono ustawienia, z ktrych
korzystaem:

8. Utwrz dwa dodatkowe pola dynamiczne o nazwach error2_txt oraz error7_txt

i umie je ponad polami tekstowymi przeznaczonymi do wprowadzania


adresu e-mail oraz komentarzy. Na rysunku 2.2 wida, w ktrym miejscu
naley je umieci. Nazwy tych pl zostay pokazane jedynie w celach
demonstracyjnych. Gdy bdziesz budowa taki formularz, pozostaw je puste.
Take i w tym przypadku skorzystam z ActionScriptu w celu zapewnienia,
e pola dynamiczne bd wystarczajco szerokie do pomieszczenia
wywietlanego tekstu. Jeli przetestujesz teraz swj film, powinien wyglda
dokadnie tak jak na rysunku 2.1. W razie potrzeby porwnaj swj kod z kodem
z pliku biodiverse03.fla.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

93

94

Flash i PHP5. Podstawy

Rysunek 2.2.
Rozmieszczenie
trzech dynamicznych
pl tekstowych,
wywietlajcych
wiadomoci
o bdach

Budowanie mechanizmu przetwarzania formularza


Gdy uytkownik kliknie przycisk Wylij, trzeba sprawdzi, czy wymagane pola zostay uzupenione. W razie jakichkolwiek bdw powinna si wywietli odpowiednia informacja. Nawet gdy wszystko pjdzie dobrze, trzeba o tym fakcie poinformowa
uytkownika.
1. Nadal pracujc na tym samym pliku (lub otwierajc plik biodiverse03.fla

znajdujcy si w materiaach rdowych dla tego rozdziau) na linii


czasowej, we wszystkich warstwach podwietl klatk 40. i wstaw pust klatk
kluczow (ang. keyframe) moesz skorzysta z przycisku F5. Jeli nie
masz ochoty na samodzielne pisanie kodu, skorzystaj z pliku biodiverse04.fla.
2. Na warstwie labels wstaw klatki kluczowe w klatkach 5., 15., 25. oraz 35.
i nazwij je nastpujco: theForm, sending, acknowledge oraz failure.

Teraz linia czasowa powinna wyglda jak poniej:

3. W warstwach form elements oraz static text wstaw klatki kluczowe

w klatkach 5. oraz 15. Dziki temu zarwno pola formularza, jak i sam tekst
zostan skopiowane do obu klatek. Wszystkie elementy powinny znale si
w klatce 5., natomiast w klatce 15. nie powinno by adnych pl, usu wic
oprcz logo, tytuu i pola z dat ca zawarto z klatki 15.

94

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

95

4. Utwrz statyczny tekst informujcy, e formularz jest wysyany.

5. Jeli przetestujesz teraz swj plik filmowy, bdzie on stale powtarza

wywietlanie formularza i pokazywanie wiadomoci z klatki 15. Aby temu


zapobiec, bdziesz musia wyczy cige odtwarzanie. Zaznacz klatk 1.
z warstwy actions i otwrz panel Actions. Jeli korzystasz z plikw
rdowych ksiki, odpowiedni kod skryptowy ju si tam znajduje.
Na kocu skryptu dopisz nastpujc lini:
gotoAndStop("theForm");

Formularz zosta umieszczony w osobnej klatce kluczowej, gdy w przeciwnym


przypadku skrypt staraby si zaadowa dat z pliku today2.php za kadym
przetwarzaniem klatki 1. Poniewa data zmienia si jedynie jeden raz na 24
godziny, takie postpowanie powodowaoby marnowanie zasobw komputera.
6. Przejd na sam gr panelu Actions i wpisz nastpujcy fragment kodu:
function checbForm():Boolean {
//funkcja sprawdza, czy uzupeniono wymagane pola
//inicjalizowanie flagi missing przy zaoeniu, e wszystko zostao poprawnie
//uzupenione
var missing:Boolean = false;
//czyszczenie wszystkich pl tekstowych dla bdw
error1_txt.text = error2_txt.text = error3_txt.text = "";
//sprawd kade pole
// - jeli nie zostao uzupenione, poka odpowiedni komunikat
//oraz ustaw warto flagi missing na true
if (name_txt.text = "") {
error1_txt.text = "Wpisz swoje imi";
missing = true;

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

95

96

Flash i PHP5. Podstawy

}
if (email_txt.text.indexOf("@") == -1) {
error2_txt.text = "Podaj waciwy adres e-mail";
missing = true;
}
if (comments_txt.text = "") {
error3_txt.text = "Nie wpisae adnych bomentarzy";
missing = true;
}
//jeli missing jest rwne true zwr false
//w przeciwnym razie zwr true
return missing ? false : true;

Kod ActionScript przedstawiony w ksice stosuje statyczne (cise) wpisywanie daty za pomoc skadni uwzgldnionej po raz pierwszy w ActionScripcie 2.0. Jeli korzystasz z Flasha MX lub po prostu wolisz wpisywa dat
w klasyczny sposb, nie podawaj typw zmiennych. W dodatku B znajduj si
wskazwki, w jaki sposb dostosowywa skrypty do wersji MX Flasha.
Aby uzyska wicej informacji na temat definiowania typw zmiennych, zajrzyj do
ksiki Foundation ActionScript for Flash MX 2004 autorstwa Shama Bhangala
(wyd. friends of ED).

Zadaniem powyszej funkcji jest sprawdzenie, czy formularz zosta prawidowo


wypeniony. Niestety, ActionScript nie nadaje si specjalnie do tego typu testw.
O wiele atwiej to samo zrobi w PHP, jednak wad takiego rozwizania jest
konieczno czenia si serwerem, gdy podczas walidacji pl uytkownika
powstan bdy. Tote lepiej jest wstpnie sprawdzi formularz za pomoc
kodu ActionScript, a nastpnie zacz go szczegowo analizowa za pomoc
parsera PHP.
Dziaanie funkcji rozpoczyna si od zadeklarowania zmiennej Boolean
nazwanej missing i ustawienia jej na warto false. Zakadamy tutaj,
e uytkownik dopiero wtedy kliknie przycisk Wylij, gdy wszystkie pola
zostan uzupenione. Wwczas te wszystkie komunikaty o bdach bd
wyzerowane (ustawione na pusty cig znakowy). Jest to konieczne, aby
wyczyci poprzednie informacje o bdach. Nastpnie w trzech instrukcjach
warunkowych skrypt przeprowadza proste sprawdzenie pl Imi, e-mail
oraz Komentarze. Jeli pole Imi lub Komentarze jest puste lub jeli wysany
adres e-mail nie zawiera znaku @, wywietlana jest odpowiednia informacja,
a zmienna missing przybiera warto true. Ostatecznie funkcja korzysta
z operatora warunkowego do sprawdzenia, czy zmienna missing zostaa
ustawiona na true, po czym jest zwracana odpowiednia warto.
Operator (?:), niekiedy nazywany trjargumentowym operatorem warunkowym
jest przydatnym skrtem uywanym w ActionScripcie, PHP i innych jzykach
programowania. Moe by zamiennie stosowany z instrukcj if...else. Jego
zastosowanie zostao omwione w nastpnym rozdziale.

96

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

97

7. Tu za funkcj checkForm() wstaw nastpujcy fragment kodu

(tu koo linii 26.):


function sendMessage():Void {
//sprawd, czy formularz zosta poprawnie wypeniony
var formOK:Boolean = checbForm();
//jeli nie ma adnych problemw, przetwrz formularz i wylij zmienne
// do skryptu PHP
if(formOK) {
//tutaj bdzie wykonywane przetwarzanie formularza
//wywietl informacj o wysyaniu wiadomoci e-mail
gotoAndStop("sending");
}
};

Ta funkcja posuy do wywietlania wiadomoci, gdy uytkownik kliknie


przycisk Wylij. Rozpoczyna si od wywoania funkcji checkForm(), ktrej
wynik bdzie przypisany do zmiennej Boolean nazwanej formOK. Jeli
checkForm() zwrci warto true, wwczas formularz zostanie przetworzony,
a nastpnie wysany w wiadomoci e-mail. W tym miejscu klasa LoadVars
wykona wikszo zadania. W powyszym fragmencie jedynie zaznaczylimy
miejsce, w ktrym powinien by umieszczony kod analizowania formularza.
Pniej przetwarzanie kodu jest przekazywane do klatki oznaczonej etykiet
sending, gdzie zostanie wywietlona wiadomo z kroku 4.
8. Teraz w 5. klatce musisz oprogramowa zdarzenie submit_btn.onRelease.

Wielu programistw Flasha przypisuje zdarzenia przyciskw bezporednio


do samych przyciskw, jednak ja wol oprogramowywa wszystkie zdarzenia
w osobnej warstwie na linii czasowej. Dziki temu rozwijanie kodu jest
atwiejsze. Zamknij panel Actions, wybierz klatk 5. w warstwie actions
i wstaw klatk kluczow. Zaznacz j, otwrz panel Actions i wpisz
nastpujc lini kodu:
submit_btn.onselease = sendMessage;

W ten sposb funkcja sendMessage() zostaa przypisana do zdarzenia onRelease


przycisku Wylij. Zwr uwag, e nie powiniene dodawa nawiasu do zdarzenia
sendMessage, gdy w tym miejscu jedynie przypisujemy funkcj do pewnego
zdarzenia, jednak jej nie uruchamiamy.
9. Przetestuj teraz swj klip filmowy kliknij przycisk Wylij bez wpisywania

czegokolwiek w polach formularza. Informacje o bdach powinny si pojawi


nad trzema obowizkowymi polami (patrz rysunek na nastpnej stronie).
Jeli komunikaty o bdach nie zostan wywietlone, upewnij si, e pola
edycyjne oraz przycisk Wylij posiadaj prawidowe nazwy zarwno w klatce
1., jak i 5. Jeli nazwae je przed dodaniem klatki kluczowej w klatce 5.,
nazwy te powinny zosta automatycznie skopiowane.
Skoro wszystkie komunikaty o bdach zostay wyzerowane, to trzeba bdzie
je odpowiednio ustawi, aby mogy by automatycznie wywietlane.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

97

98

Flash i PHP5. Podstawy

10. Otwrz panel Actions w 5. klatce warstwy actions i dodaj nastpujcy

fragment kodu przed funkcj, ktr dodae w kroku 8.:


error1_txt.autoSize = true;
error2_txt.autoSize = true;
error3_txt.autoSize = true;

11. Jeszcze raz przetestuj plik filmowy. Wpisz dowolne sowo w polu Imi,
a nastpnie kliknij przycisk Wylij. Nad polem Imi nie powinno by adnej

informacji o bdzie, niemniej jednak dwa pozostae komunikaty nadal bd


widoczne. Gdy ju wszystkie pola zostan wypenione, zostanie wywietlona
strona utworzona w kroku 4.
W tym momencie prawie ukoczylimy stron wizualn pliku filmowego.
Jedyne co zostao, to dodanie dwch prostych klatek oraz kilka linii kodu
ActionScript. Na koniec przejdziemy do sedna sprawy poczenia aplikacji
z klas LoadVars oraz kodem PHP.
12. Zaznacz klatk 25. w warstwie static text, a nastpnie wstaw klatk

kluczow. Jest to klatka, w ktrej zostanie wywietlony komunikat


informujcy o prawidowym zakoczeniu przetwarzania formularza.
Wywietlany tekst zmieniem jedynie na Dzikuj, jednak zapewne
w rzeczywistej aplikacji bdziesz chcia pokaza uytkownikowi inne treci.
13. Aby podczas testowania korzystanie z aplikacji stao si bardziej przystpne,
wstaw klatki kluczowe w 25. klatce warstwy elements oraz actions. Do warstwy
elements dodaj przycisk oznaczony Powrt i nazwij go back_btn (w bibliotece

pliku biodiverse03.fla znajduje si ju gotowy taki przycisk). Wybierz klatk


kluczow 25. w warstwie actions i w panelu Actions wpisz nastpujcy
fragment kodu:
bacb_btn.onselease = bacbToForm;

Funkcj backToForm() zajmiemy si wkrtce.

98

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

99

14. W warstwie static text oraz form elements zaznacz klatk 35. (t, ktr
nazwae failure w kroku 2.) i wstaw klatki kluczowe. Utwrz podobny

formularz do tego pokazanego poniej. Przycisk Powrt powinien ju tam si


znajdowa poczwszy od klatki 25., mimo e prawdopodobnie bdziesz
musia zmieni rozplanowanie pl, aby doda miejsce na zawarto tekstow.
W warstwie static text wstaw komunikat informujcy uytkownika
o zaistniaym problemie, a w warstwie form elements umie obszerne
dynamiczne pole tekstowe o nazwie failure_txt.

15. Zaznacz 35. klatk warstwy actions i wstaw klatk kluczow. Otwrz panel
Actions, a nastpnie przypisz funkcj backToForm przyciskowi Powrt, tak jak

pokazano to w kroku 13.:


bacb_btn.onselease = bacbToForm;

16. Teraz naley utworzy funkcj backToForm(), ktr umiecisz w pierwszej


klatce warstwy actions. Kod wstaw bezporednio za funkcj sendMessage()

(tu koo linii 36.). W ten sposb sterowanie dziaaniem programu zostanie
przekazane do klatki nazwanej theForm.
function bacbToForm():Void {
//przejcie do gwnego formularza
gotoAndStop ("theForm");
}

Moesz teraz porwna swj kod oraz stron graficzn klipu filmowego
z plikiem biodiverse04.fla, znajdujcym si w materiaach rdowych
ksiki. W nastpnym podrozdziale zajmiemy si istotnym zagadnieniem
wysyania i otrzymywania danych z PHP za pomoc klasy LoadVars.

Korzystanie z funkcji LoadVars do uzyskiwania i wysyania zmiennych


Jak wspomniaem wczeniej, to co sprawia, e funkcja LoadVars jest tak efektywna
w porwnaniu z jej poprzedniczk loadVariables() jest fakt, e, w przeciwiestwie
do funkcji loadVariables(), w klasie LoadVars mona cile okreli wysyane zmienne.
Wprawdzie jeli jest ich wicej, trzeba utworzy duszy kod rdowy, jednak samo

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

99

100

Flash i PHP5. Podstawy

przesyanie danych jest szybsze. Mona take tworzy rne instancje klasy LoadVars
w odpowiedzi na rne zdarzenia dziki temu, jak si okae podczas pracy z bazami
danych, o wiele atwiej postpowa z duymi ilociami danych wejciowych. Tote
zalety korzystania z LoadVars s znacznie wiksze od potencjalnej niedogodnoci kadorazowego wpisywania wywoania funkcji w kodzie.
Przed wykorzystaniem metod klasy LoadVars naley utworzy nowy obiekt. Dobr
praktyk jest tworzenie osobnych instancji sucych do wysyania i otrzymywania danych. Dziki temu atwiej kontrolowa wejcie i wyjcie programu.
1. Nadal moesz pracowa z tym samym plikiem lub te po prostu wykorzysta

plik biodiverse04.fla (gotowy kod jest dostpny w pliku biodiverse05.fla),


znajdujcy si w materiaach rdowych ksiki. Wybierz klatk 1. w warstwie
actions. Otwrz panel Actions i wpisz nastpujcy kod poniej istniejcego
skryptu. Jeli korzystasz ze skryptu z dat, omawianego na pocztku tego
rozdziau, poniszy kod powinien by wpisany tu po wywoaniu funkcji
getDate klasy LoadVars (tu koo linii 47.).
//zainicjalizuj zmienn LoadVars w celu wysyania danych z formularza i
//otrzymywania odpowiedzi ze skryptu PHP
var message:LoadVars = new LoadVars();
var messageSent:LoadVars = new LoadVars();

Tworzone s w ten sposb dwie instancje klasy LoadVars: zmienna message


posuy do wysyania zawartoci formularza do skryptu PHP, natomiast
zmienna messageSent zostanie wykorzystana do sprawdzenia odpowiedzi
ze skryptu PHP i do przekazania informacji, czy wiadomo zostaa
pomylnie wysana.
Klasa LoadVars traktuje wszystkie zewntrzne dane jako swoje waciwoci,
tote wszystkie wysane zmienne s przypisywane do zmiennej message,
natomiast wszystkie otrzymywane bd traktowane jako waciwoci
zmiennej messageSent. Nie martw si, jeli nie wiesz jeszcze co to s
waciwoci niedugo si tym zajmiemy.
2. Podczas wykonywania zadania opisywanego na pocztku tego rozdziau
korzystae z klasy LoadVars do otrzymywania danych ze skryptu PHP.
Spjrzmy bliej na ten proces. Gdy korzysta si z LoadVars do otrzymywania
zewntrznych danych, nastpuje wywoanie zdarzenia LoadVars.onLoad

w celu sprawdzenia, czy zewntrzne dane zostay otrzymane. Skrypt PHP


(ktry wkrtce utworzymy) odele natomiast zmienn sent. W przypadku
wystpienia bdw wyle take zmienn reason. Wartoci reprezentowane
przez te zmienne automatycznie stan si waciwociami zmiennej messageSent,
tote wewntrz pliku Flash dostp do zmiennych PHP uzyskasz poprzez
odwoanie si do messageSent.sent oraz, jeli zmienna nie zostaa ustawiona,
do messageSent.reason.
Ponisz funkcj wstaw tu przed ostatni lini kodu (gotoAndStop("theForm");)
w panelu Actions (niedaleko 57. linii):
messageSent.onLoad = function() {
if (this.sent == "OK"){
gotoAndStop("acbnowledge");

100

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

};

101

} else {
gotoAndStop("failure");
failure_txt.text = this.reason;
}

Funkcj t przypisano do zdarzenia messageSent.onLoad, wic mona teraz


odwoywa si do zmiennych otrzymanych ze skryptu PHP poprzez sowo
kluczowe this. Tote this.sent jest tym samym, co messageSent.sent. Jeli
wysyanie wiadomoci zakoczy si powodzeniem, do zmiennej messageSent
zostanie odesana nastpujca para nazwa-warto:
sent = OK

Wewntrz pliku Flasha zmiennej messageSent.sent zostanie przypisana


warto OK. Po wystpieniu tego zdarzenia dziaanie programu zostanie
przekazane do klatki oznaczonej acknowledge.
Jeli ta operacja si nie uda, to do filmu Flasha zostanie odesana wiadomo
rozpoczynajca si nastpujco:
sent=failed&reason=there...

Wewntrz pliku Flasha sprowadzi si to do:


messageSent.sent = "failed";
messageSent.reason = "there...";

Jeli warto zmiennej sent nie jest rwna OK, dziaanie pliku filmowego
przejdzie do ujcia oznaczonego failure i ustawi zawarto failure_txt
na dowoln warto otrzyman ze zmiennej reason.
3. Do tej pory zajmowalimy si odpowiedzi ze skryptu, jednak najpierw

trzeba przesa do niego odpowiednie zmienne. Proces ten jest analogiczny


do otrzymywania danych, niemniej jednak dziaa w drug stron. Wysyane
dane musz najpierw zosta przypisane do waciwoci obiektu LoadVars
sucego do wysyania danych czyli do zmiennej message.
Przejd do funkcji sendMessage() i znajd komentarz Tutaj bdzie wykonywane
przetwarzanie formularza (tu koo 31. linii). W formularzu znajduje si pi
pl edycyjnych, tote ich zawarto trzeba bdzie przypisa do piciu
waciwoci message. Tu po komentarzu wstaw nastpujcy kod:
message.from = name_txt.text;
message.email = email_txt.text;
message.snail = snail_txt.text;
message.phone = phone_txt.text;
message.comments = comments_txt.text;

Klasa LoadVars wysya kad waciwo do skryptu PHP za pomoc metody


HTTP POST, tote zmienna message.from w kodzie PHP stanie si zmienn
$_POSTP'from'r, zmienna message.email stanie si $_POSTP'email'r itd.
Celem przedstawionych wyej linii kodu jest przypisanie zawartoci kadego
pola tekstowego do zmiennych, ktre potem mog by z atwoci wykorzystane
w kodzie PHP.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

101

102

Flash i PHP5. Podstawy

Zwr uwag, e podczas tworzenia nowych waciwoci zmiennej message


nie korzysta si ze sowa kluczowego var, gdy po prostu dodaje si
nowe waciwoci do istniejcego ju obiektu. Nazwy, ktre nadasz tym
waciwociom, mog by dowolne, wane jedynie, aby byy to poprawne
nazwy zmiennych zarwno w PHP, jak i ActionScripcie.
4. Teraz trzeba jedynie wysa nowe zmienne do skryptu PHP. Wystarczy w tym
celu wywoa metod sendAndLoad() klasy LoadVars. Metoda wymaga dwch

argumentw: cigu znakowego, ktry bdzie zawiera adres do zewntrznego


skryptu oraz referencji do obiektu, ktry otrzyma odpowied z serwera. Trzeci
argument jest opcjonalny. Jest nim cig znakowy okrelajcy metod HTTP
(GET lub POST), ktra bdzie uyta do wysyania danych. Domylnie dane s
wysane metod POST.
Podstawowa rnica midzy metod GET i POST polega na tym, e metoda GET
wysya zmienne jako cz adresu URL, natomiast metoda POST przesya je oddzielnie. W metodzie GET naoono te pewne ograniczenia dotyczce wielkoci
przesyanych informacji, tote w wikszoci aplikacji lepiej bdzie korzysta
z metody POST. Domyln wartoci trzeciej zmiennej jest POST, wic trzeci argument uwzgldniaj tylko wwczas, gdy faktycznie chcesz uy metody GET.

Pod liniami wstawionymi przed chwil dodaj nastpujcy fragment kodu:


message.sendAndLoad("http://localhost/phpflash/ch02/feedbacb.php?cb="
+ new Date().getTime(), messageSent);

Moesz si zastanawia, co oznacza fragment: ?ck=" + new Date().getTime()


na kocu adresu URL. Jest to sposb na uniknicie problemu z przegldarkami,
ktre przechowuj w pamici podrcznej dane z zewntrznych rde.
Wikszo przegldarek bdzie moga potraktowa odwoanie do zewntrznego
pliku jako ju przetworzone zadanie i dostarczy klipowi Flasha nieaktualne
ju dane. Aby wymusi ich odwieanie, trzeba doda cig znakowy wskazujcy
na rdo najnowszych danych. Adres taki mona zakoczy nawet losowo
wygenerowan liczb. Ja wybraem akurat skrt ck (od cache killer2) oraz
biecy czas. Moesz porwna swj kod z plikiem biodiverse05.fla,
znajdujcym si w materiaach rdowych tej ksiki.
Plik Flasha jest ju gotowy. Teraz nadszed czas na oprogramowanie wszystkiego w PHP!

Sprawdzenie, czy PHP otrzymuje waciwe zmienne


Na pocztku tego rozdziau testowae dane wyjciowe skryptu PHP w celu upewnienia si, e do filmu Flasha zostay wysane waciwe informacje. Teraz przysza pora
na sprawdzenie tego samego, jednak w drug stron. Gdy ju zaznajomisz si ze sposobem, w jaki Flash wsppracuje z PHP, tworzenie poniszego kodu nie bdzie konieczne, niemniej jednak sama technika jest bardzo prosta. Bdziesz mg j wykorzystywa zarwno w duych, jak i w maych projektach.
2

Zabjca pamici cache przyp.tum.

102

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

103

1. Otwrz dowolny edytor skryptw PHP i wpisz nastpujcy kod:


<?php
foreach ($_POST as $bey=>$value ) {
$received .= "$bey = $value\r\n";
}
$printout = fopen('variables.txt','w');
fwrite($printout, $received);
fclose($printout);
?>

2. Zapisz plik w katalogu phpflash/ch02 pod nazw feedback.php.


3. Przetestuj plik Flasha poprzez jednoczesne nacinicie CTRL+ENTER

w Windows lub z+RETURN w systemie Mac OS. W kadym z pl wpisz


dowolne dane testowe i kliknij przycisk Wylij.

4. Jeli wszystko poszo dobrze, powiniene zobaczy nastpujc wiadomo:

Po ktrej nastpi wywietlenie informacji:

Nie naley jednak si tym specjalnie przejmowa. Zauwa, e wiadomo nie


precyzuje miejsca powstania bdu. Mimo wszystko wskazuje, e wszystko
poszo dobrze.
5. Otwrz folder phpfash/ch02 (albo za pomoc Windows Explorera

w Windows, albo poprzez Findera w Mac OS), znajdujcy si w folderze


C:\htdocs w Windows lub w katalogu domowym w systemie Mac OS.
Powiniene znale plik tekstowy variables.txt o nastpujcej zawartoci:

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

103

104

Flash i PHP5. Podstawy

Zmienne prawdopodobnie nie bd si znajdoway w takiej kolejnoci, jakiej si


spodziewae, niemniej jednak zostay wymienione wszystkie. W przeciwnym
przypadku trzeba si cofn i sprawdzi zarwno plik PHP, jak i kod ActionScript
w pliku FLA. Jeli nadal nie potrafisz okreli rda bdu, porwnaj swj kod
z plikami rdowymi strony.
6. Skrypt wykorzystuje prost ptl do pobierania wartoci wszystkich zmiennych,

a nastpnie poprzez kilka funkcji PHP, sucych do obrbki cigw znakowych,


wypisuje wyjcie do pliku tekstowego. Kod bdzie dziaa w przypadku dowolnej
aplikacji we Flashu, gdzie dane bd wysyane poprzez klas LoadVars.
Moe okaza si to szczeglnie przydatne, jeli uywasz ActionScriptu
do przetwarzania danych przed wysaniem ich do PHP. Zapamitaj motto
kadego programisty: Bdne dane, bdne wyniki (ang. Garbage In,
Garbage Out, w skrcie GIGO). Nieprawidowe dane na wejciu mog
zaowocowa nieprzewidywalnymi danymi wyjciowymi, tote zawsze
naley przeprowadza kontrol danych. Zmie teraz nazw pliku
feedback.php na variable_checker.php.
W rozdziale 5. zajmiemy si ptlami bardziej szczegowo. Aby dowiedzie
si czego wicej o funkcjach PHP dziaajcych na plikach, zajrzyj do ksiki
Beginning PHP 5 and MySQL: From Novice to Professional autorstwa W. Jasona
Gilmore'a (wyd. Press) lub te sprawd dokumentacj online na stronie
www.php.net/manual/pl/ref.filesystem.php.

Przetwarzanie danych i wysyanie ich mailem przez kod PHP


Na koniec zostawilimy najciekawsz cz wysyanie danych w wiadomoci e-mail.
PHP posiada bardzo przydatn funkcj nazwan mail(). Moe ona przyjmowa do
czterech argumentw trzy z nich s wymagane, natomiast jeden jest opcjonalny:
t adres e-mail, na ktry formularz bdzie wysyany;
t temat wiadomoci e-mail (ktry pojawi si w polu Temat wiadomoci);
t zawarto wiadomoci;
t inne dodatkowe nagwki, rozpoznawane przez protok poczty e-mail

(opcjonalne).
Teraz jedynie trzeba zebra odpowiednie informacje i przekaza je do funkcji mail(),
tote zabierzmy si do pracy!
1. Teoretycznie, mona by bezporednio w nawiasie za nazw funkcji umieci

wszystkie szczegy dotyczce wiadomoci, jednak lepiej jest przypisa


do zmiennych odpowiednie argumenty. Otwrz plik feedback.php i usu kod,
ktry wpisae w poprzednim podrozdziale (jego kopia powinna by zapisana

104

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

105

w pliku variable_checker.php, dziki czemu bdziesz mg do niej zajrze


w przyszoci). W pliku naley pozostawi jedynie otwierajce i zamykajce
znaczniki PHP.
2. Okrel adres odbiorcy oraz temat wiadomoci. Obie wartoci przypisz

do zmiennych, tak jak poniej:


$to = 'david@example.com';
$subject = 'Formularz ze strony flash';

3. W nastpnym kroku utworzysz wiadomo e-mail. Flash przesya na wejcie

skryptu pi zmiennych, jednak kod PHP wymaga, aby wiadomo zostaa


przekazana jako pojedynczy cig znakowy. Wpisz zatem nastpujc lini
kodu pomidzy tym, co ju wpisae, a zamykajcym znacznikiem PHP:
$message = 'Od: '.$_POST['from']."\n\n";

Znaczenie pierwszej czci $message = 'From: ' jest do jasne.


Powoduje przypisanie do zmiennej $message cigu znakowego zawierajcego
sowo From, po ktrym nastpuje dwukropek oraz spacja. Nastpujcy potem
znak kropki jest operatorem zczenia. Oznacza to, e bez wzgldu na zawarto
zmiennej zostanie ona doczona do cigu znakowego Wszystkie dane wysane
przez klas LoadVars byy przesyane za pomoc metody HTTP POST. PHP
gromadzi te dane w specjalnej tablicy POST. Dostp do nich uzyskuje si poprzez
podanie nazwy zmiennej (bez pocztkowego symbolu dolara) zawartej
w zmiennej $_POSTPr, tote zmienna $_POSTP'from'r przechowuje zmienn
message.from (tablicami bardziej szczegowo bdziemy si zajmowa
w rozdziale 5.).
Pniej nastpuje operator konkatenacji, za ktrym umieszczono cig "\n\n".
Zwr uwag, e tym razem skorzystaem z cudzysowu, wic cig znakw
zostanie przetworzony, a cztery zawarte w nim znaki zostan zinterpretowane
jako dwa symbole nowej linii.
Tak wic, jak wida, w powyszym kodzie sporo si dzieje! Szczliwie,
nastpne dwie linie bd bardzo podobne.
Mgby si zastanawia, czemu nie zapisaem w cudzysowie caej linii.
Jest tak, gdy zawiera ona zmienne, ktre maj zosta przetworzone. Podobnie jak inne jzyki programowania, PHP zawiera pewne specyficzne cechy
przykadowo, jeli zmienn $_POSTP'from'r zapiszemy w cudzysowie, spowoduje to powstanie bdw. W rozdziale 5. zajmiemy si tym bardziej szczegowo.
4. Zanim przejdziemy do wpisywania kodu w nastpnej linii, spjrz na nastpujcy

fragment:
$message .= 'Email: '.$_POST['email']."\n\n";

Czy dostrzegasz co zastanawiajcego w sposobie przypisania wartoci


do zmiennej? Z lewej strony znaku rwnoci znajduje si znak kropki.
To zestawienie posiada to samo znaczenie co znak += w ActionScripcie

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

105

106

Flash i PHP5. Podstawy

(przynajmniej jeli chodzi o cigi znakowe). Spowoduje ono dodanie wartoci


znajdujcej si po prawej stronie operatora = do wartoci ju przechowywanej
w zmiennej $message.
Operator konkatenacji jest bardzo niewielki, wic atwo mona go przeoczy.
Cho programici Flasha uwielbiaj niewielkie litery, to jednak podczas pracy
z PHP warto zwikszy nieco domylny rozmiar czcionki, dziki czemu wywietlany kod bdzie bardziej czytelny.
5. Znaczenie kolejnych trzech linii kodu jest ju jasne. Dodaj do zmiennej

przechowujcej wiadomo zawarto trzech pozostaych pl edycyjnych.


$message .= 'adres: ' . $_POST['snail']."\n\n";
$message .= 'telefon: ' .$_POST['phone']."\n\n";
$message .= 'Komentarze: '.$_POST['comments'];

6. Skrypt zgromadzi ju informacje potrzebne do wywoania funkcji mail().

Czwarty argument funkcji jest opcjonalny, wic moesz go uy wedle


swoich upodoba. Na stronie www.ietf.org/rfc/rfc2076.txt znajduje si lista
poprawnych nagwkw e-mail. Cho jest ich tam sporo, najczciej korzysta
si tylko z dwch. Dodaj nastpujce linie do kodu:
$additionalHeaders = "From: Flash feedbacb<feedbacb@example.com>\n";
$additionalHeaders .= 'seply-To: '. $_POST['email'];

Pierwsza linia dodaje adres e-mail, z ktrego nadesza wiadomo. W przypadku


funkcji mail(), to serwer Apache bdzie wysya wiadomo, tote moe si
zdarzy, e w polu From: wywietli si nieprzyjemnie wygldajcy nobody
(lub te dowolna inna nazwa, pod ktr dziaa serwer). Dlatego te po sowie
From: umie nazw, ktra ma si pojawia we wiadomociach e-mail,
a nastpnie midzy znakami mniejszoci i wikszoci (< i >) podaj swj adres
e-mail. Zwr uwag, e cay cig znakowy znajduje si w cudzysowie i koczy
znakiem nowej linii \n. W ten sposb kady nagwek wiadomoci rozpoczyna
si od nowego wiersza.
W drugiej linii do nagwka Reply-To zosta przypisany adres e-mail. Jak si
wkrtce przekonasz, okae si to bardzo mdrym posuniciem.
7. Teraz mona przystpi do wysania formularza za pomoc poczty e-mail.

Ponownie mona by po prostu umieci wszystkie zmienne w nawiasach


wewntrz funkcji mail() i na tym zakoczy cae zadanie, jednak mio by
byo poinformowa uytkownika o pomylnym wysaniu formularza. Dziki
wysaniu odpowiednich danych z powrotem do pliku Flasha mona unikn
bdu niezdefiniowanej zmiennej, ktry moesz uzyska podczas testowania
programu. Funkcja mail() zwraca warto true, jeli wiadomo zostaa
wysana pomylnie, tote musisz przechwyci jej warto, a nastpnie na jej
podstawie odesa odpowiednie dane do pliku Flasha. W nastpnym rozdziale
poka uycie instrukcji warunkowych, jednak dla Czytelnikw znajcych
ActionScript, poniszy kod nie bdzie zaskoczeniem.

106

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

107

Wpisz wic do pliku nastpujcy fragment:


$OK = mail($to, $subject, $message, $additionalHeaders);
if ($OK) {
echo 'sent=OK';
} else {
echo 'sent=failed&reason='. urlencode('Prawdopodobnie nastpi problem
z serwerem. Sprbuj wysa wiadomo prniej. ');
}

Argumenty funkcji PHP (podobnie jak w kodzie ActionScript) s oddzielone


od siebie przecinkami. Ponadto musz te by wymienione we waciwej
kolejnoci. Warto Boolean zwrcona przez funkcj mail() jest przechowywana
w zmiennej nazwanej $OK i to ona kontroluje wyjcie skryptu. Jeli wysanie
wiadomoci bdzie pomylne, skrypt PHP wyle cig znakw sent=OK
do przegldarki. Gdyby tworzy zwyk stron WWW, wanie taki tekst
zostaby wywietlony na ekranie. W tym jednak przypadku skrypt jest
wywoywany przez plik filmowy Flasha. Po otrzymaniu danych, Flash wywoa
zdarzenie messageSent.onLoad, ktre zostao oprogramowane w ActionScripcie.
Klasa LoadVars oczekuje, e dane bd przekazywane w postaci nazwa-warto.
Kada nazwa zmiennej jest oddzielona od jej wartoci znakiem = (po obu
stronach znaku rwnoci nie powinno by adnych spacji). Pary nazwa-warto
s z kolei oddzielone od siebie znakiem ampersand (&), ponownie bez adnych
spacji po obu stronach. Zmienne, ktre nie zawieraj standardowych symboli
alfanumerycznych (czyli zawieraj znaki diakrytyczne) musz zosta
zakodowane w standardzie URL. PHP posiada bardzo przydatn funkcj
nazwan urlencode(), ktra moe to wykona. Do funkcji przekazuje si albo
cig znakowy, albo te zmienn go przechowujc. W tym przypadku prociej
bdzie do zmiennej reason przekaza gotowy cig znakowy, jednak podczas
lektury kolejnych rozdziaw dowiesz si, e lepiej korzysta ze zmiennych.
Mimo potrzeby zakodowania wyjcia PHP w standardzie adresu URL, Flash
dokona dekodowania automatycznie, tote w zalenoci od otrzymanych
wynikw, plik filmowy albo wywietli prost informacj o pomylnym
wysaniu formularza, albo przedstawi wiadomo, e wysyanie si nie
powiodo i poda tego przyczyn. W celu odwieenia pamici umieszczam
raz jeszcze ca funkcj przypisan do zdarzenia messageSent.onLoad:
messageSent.onLoad = function () {
if (this.sent == "OK") {
gotoAndStop("acbnowledge");
} else {
gotoAndStop("failure");
failure_txt.text = this.reason;
}
};

Zmienn reason zadeklarowaem jako dynamiczne pole tekstowe dlatego, e


zamierzam powrci do tej aplikacji w rozdziale 4., gdzie po dodaniu mechanizmu
walidacji po stronie serwera komunikaty o bdach bd mogy si zmienia.
8. Zapisz plik feedback.php i sprawd swj skrypt PHP pod ktem zgodnoci
z oryginaln wersj. Do zmiennej $to przypisz adresata wiadomoci,
natomiast w zmiennej $additionalHeaders umie swj wasny adres e-mail.

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

107

108

Flash i PHP5. Podstawy


<?php
//inicjalizacja zmiennych w przypadku pl To oraz Subject
$to = 'david@example.com';
$subject = 'Formularz ze strony flash';
//tre wiadomoci stwrz na podstawie zmiennych przechowywanych
//w tablicy POST
$message = 'Od: '.$_POST['from']."\n\n";
$message .= 'Email: '.$_POST['email']."\n\n";
$message .= 'adres: '.$_POST['snail']."\n\n";
$message .= 'telefon: '.$_POST['phone']."\n\n";
$message .= 'Komentarze: '.$_POST['comments'];
//dodatkowe nagwki zawierajce informacje zwrotne.
$additionalHeaders = "From: Flash feedbacb<<feedbacb@example.com>\n";
$additionalHeaders = "seply-To: $_POST[email]";
//teraz wylij wiadomo
$OK = mail($to, $subject, $message, $additionalHeaders);
//niech Flash dowie si o wynikach wysania
if($OK) {
echo 'sent=OK';
} else {
echo 'sent=failed&reason=' . urlencode('Prawdopodobnie nastpi problem
z serwerem. Sprbuj wysa wiadomo prniej. ');
}
?>

9. Teraz nadesza chwila prawdy. Przetestuj film Flasha albo w wewntrznej

przegldarce studia MX, albo poprzez opublikowanie pliku SWF i zaadowanie


strony biodiverse.html w oknie przegldarki (nacinij w tym celu przycisk
F12). Wpisz w formularzu dowolne informacje, a nastpnie kliknij przycisk
Wylij. Jeli wszystko zostao wykonane waciwie, wywietli si wiadomo
o pomylnie przesanym formularzu:

10. Nie dziaa poprawnie? Jeli wszystko ju przetestowae, porwnaj raz

jeszcze swj skrypt z listingiem przedstawionym w 8. kroku lub te z kodem


zawartym w materiaach rdowych tego rozdziau. Sprawd rwnie
poprawno dziaania serwera na komputerze i czy jeste podczony do
internetu, a take czy ustawienia poczty s poprawne (uytkownicy Windows
powinni zmieni ustawienia SMTP w pliku php.ini, tak jak zostao to opisane
w rozdziale 1., natomiast na komputerze Mac OS X automatycznie powinny
by wykorzystane domylne ustawienia poczty wychodzcej). Jeli aplikacja
nadal nie dziaa poprawnie, opublikuj na serwerze swj plik filmowy razem
z innymi plikami: today2.php, feedback.php, biodiverse.html, biodiverse.swf,
a nastpnie tam dokonaj ich testowania.
Pamitaj, e zanim umiecisz swj plik SWF na zdalnym serwerze, musisz
zmieni adres pliku PHP we wszystkich miejscach klasy LoadVars, gdzie si
do niego odwoujesz. Adres localhost suy jedynie do celw testowych.

108

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

Rozdzia 2. Pene wykorzystanie moliwoci Flasha

109

11. Zanim umiecisz plik SWF na zdalnym serwerze, zmie ciek do pliku, tak

jak pokazano to poniej. Po zlokalizowaniu nastpujcej linii w 1. klatce kodu


ActionScript warstwy actions:
message.sendAndLoad("http://localhost/phpflash/ch02/feedbacb.php?cb="
+ new Date().getTime(), messageSent);

dokonaj jej zmiany na:


message.sendAndLoad("feedbacb.php?cb="+ new Date().getTime(), messageSent);

Zakada si tutaj, e plik SWF oraz kod PHP zostanie umieszczony w tym
samym folderze na zdalnym serwerze, tote jeli pragniesz umieci skrypty
w innym folderze, dostosuj adres do odpowiedniego katalogu.
12. Po wysaniu testowej wiadomoci sprawd swoj poczt. Twoja skrzynka

pocztowa powinna teraz zawiera adnie sformatowan wiadomo, podobn


do tej z rysunku 2.3. Byoby wspaniale, gdyby nie apostrofy: s one poprzedzone
lewymi ukonikami, mimo e nie zapisano ich w cigu znakowym kodu PHP.
Dzieje si tak ze wzgldu na ustawienie magic_quotes_gpc, znajdujce si
w pliku php.ini. W poprzednim rozdziale zwrciem uwag uytkownikom
Windows na to ustawienie i zasugerowaem, eby na wszelki wypadek
pozostawili je wczone. Uytkownicy systemu Mac OS, ktrzy instalowali
pakiet PHP od Marca Liyanagea, nie bd mieli problemw, gdy ich wersja
php.ini posiada zmienn magic_quotes_gpc ustawion na off. W rzeczywistoci
niektre serwery korzystaj z tego ustawienia, inne nie. Do zagadnienia
powrc w rozdziale 4., gdzie poka, w jaki sposb naley postpowa
z apostrofami i znakami cudzysowu w takich przypadkach.
Rysunek 2.3.
Wiadomo e-mail
zostaa adnie
sformatowana.
Niektre
konfiguracje
mechanizmu PHP
automatycznie
dodaj lewe
ukoniki przed
znakami apostrofu
13. Kliknij teraz przycisk Odpowied. Wiadomo ju, dlaczego zasugerowaem
uycie dodatkowego nagwka Reply-To:. Mimo e ta akurat wiadomo

e-mail pochodzi z adresu feedback@example.com, odpowied zostanie


automatycznie przesana do osoby, ktra wysaa ten formularz
(zakadajc oczywicie, e podano prawdziwy adres e-mail).

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

109

110

Flash i PHP5. Podstawy

Dowiadczeni programici PHP czsto zagldaj do dokumentacji tego jzyka.


Warto, aby stao si to te Twoim nawykiem. Opisy elementw jzyka zawarte
w dokumentacji s zazwyczaj krtkie i zawieraj duo uytecznych informacji.
Wicej na temat funkcji mail() znajdziesz wic na stronie www.php.net/
manual/pl/ref.mail.php.

Czego si dowiedziae do tej pory


Uff! By to do obszerny rozdzia. Do tej pory nie tylko poznae podstawowe zasady
rzdzce PHP, ale take utworzye przydatn aplikacj, ktra poczya moliwoci PHP
i Flasha. Ponadto dowiedziae si, w jaki sposb uywa klasy LoadVars do wysyania
i otrzymywania danych oraz jak mona sprawdza, czy waciwe dane zostay przesane.
Podsumujmy teraz w punktach najwaniejsze spostrzeenia wynikajce z lektury rozdziau:
t Wszystkie strony zawierajce skrypty PHP powinny posiada rozszerzenie

nazwy .php i powinny by obsugiwane przez serwer Apache.


t Skrypty PHP musz by zawarte pomidzy znacznikami PHP (najlepiej <?php
oraz ?>).
t W przypadku nazw zmiennych PHP wielko liter jest istotna. Nazwy te
musz si rozpoczyna od znaku dolara, przykadowo, $myVar, $myvar oraz
$MYvaR s trzema rnymi zmiennymi.
t Nazwy w PHP musz si rozpoczyna od litery lub znaku podkrelenia

i zawieraj jedynie znaki alfanumeryczne oraz podkrelenia.


t Wszystkie instrukcje musz by zakoczone znakiem rednika.
t Wszelkie biae znaki poza cigiem znakowym s ignorowane.
t PHP korzysta ze znaku kropki (.), a nie dodawania (+) do czenia cigw

znakowych.
t PHP oprcz dwch identycznych z ActionScriptem metod wstawiania
komentarzy (// oraz /* */) stosuje jeszcze trzeci sposb (#).
t Zmienne, ktre zostay wysane przez klas LoadVars, mona pobra poprzez

umieszczenie nazwy zmiennej midzy znakami apostrofu wewntrz nawiasw


kwadratowych metody $_POSTPr (np. $_POSTP'from'r).
t Zmienne pobierane przez klas LoadVars musz by przedstawione w postaci
nazwa=wartozw. Wszystkie takie pary powinny by oddzielone od siebie
znakiem ampersanda (&), natomiast wszystkie znaki niealfanumeryczne
musz by najpierw zakodowane wewntrz funkcji urlencode().

Mimo e zaszlimy ju tak daleko, nadal pozostaj pewne rzeczy do zrobienia. W nastpnym rozdziale dowiesz si czego wicej o operatorach arytmetycznych, funkcjach matematycznych oraz instrukcjach warunkowych PHP. Z pewnoci ucieszysz
si na wie, e wikszo z nich bdzie dziaa tak samo jak w ActionScripcie.

110

D:\Roboczy Jarek\makiety poprawki druk pdf\Flash i PHP5. Podstawy\10 druk\r02-08.doc

You might also like