You are on page 1of 143

| Versta i Beginning PHP4 | Kai kuri informacija yra pasenusi, nes naujausia PHP versija yra 4.3.

3, taiau pradedaniajam programuotojui jos tikrai uteks. | Praleisti skyriai lieiantis Linux aplink ir programavim joje | | Mans tai nedomina | | Visa kritika NEPRIIMAMA, jei galite padarykite geriau |

| Savo serveryje a naudoju http://www.devside.net paket | Jame: mod_perl 1.99_09 Apache::ASP 2.55 mod_deflate PHP 4.3.3 MySQL 4.0.15 Perl 5.8.0 phpMyAdmin 2.5.3 analog 5.32 httpd.conf, optimized and minimized, with support for php, cgi, mod_deflate, mod_perl, and Apache::ASP

Taiau js galite naudotis 1 skyriuje apraytomis programomis ar atsisisti visus komponentus patys Ties kiekvienu pirm kart verstu terminu bus raomas jo anglikas analogas taip stengiantis ivengti nesusipratim dl terminologijos

Isterik

vadas
PHP4 yra paskutin PHP kalbos versija "PHP Hypertext Preprocessor". Tai programavimo kalba sudaranti galimybes konstruoti dinaminius, interaktyvius Interneto puslapius. J Rasmus Lerdorf sukr 1994 metais. Nuo to laiko ji patyr didelius pasikeitimus ir buvo pradta naudoti daugelio web programuotoj visame pasaulyje. Tai kas i ties PHP yra? Kalbant technine kalba, PHP4 yra nepriklausoma nuo platformos, siterpianti HTML, serverio puss, interneto script kalba. Pairkime atidiau iuos terminus: Nepriklausoma nuo platformos Js galite paleisti dauguma PHP4 kodo, be apribojim, ant kompiuteri su skirtingomis operacinmis sistemomis. PHP4 skriptas kuris veikia Linux aplinkoje veiks ir Windows sistemoje. siterpiantis HTML PHP4 kodas raomas failus turinius PHP instrukcij ir HTML kodo miin. Serverio puss PHP4 programos kurias mes raysime bus vykdomos serveryje, galutinis vartotojas mato tik j rezultatus. Interneto skript kalba Mes naudojams PHP4 programomis per Interneto narykl. Pasiekiame server, kuriame randasi PHP programa ir tai suadin pai program taip, kad ji tik pateikia mums savo veiklos rezultatus. Tai reikia mes raysime programas, kuriose susipyn PHP4 kodas ir HTML. Mums reiks patalpinti ias programas web server norint jas paleisti. Galiausiai mes pasieksime jas per interneto narykl, kuri pateiks mums rezultatus HTML formate. Js tikriausiai jau esate susipain su HTML HyperText Markup Language. Tai kalba naudojama konstruojant interneto puslapius, savyje sujungianti paprast tekst ir specialius simbolius, kurie nusako naryklei kaip vaizduoti t tekst. Mes naudojame HTML nustatydami, kaip skirtingi web elementai puslapyje turi bt vaizduojami, kaip puslapiai turi bt susiejami vienas su kitu, kur rodyti paveiksliukus ir t.t. Paprastas HTML puslapis nepaisant viso savo universalumo yra ne k daugiau nei statinis paveiksliuk ir teksto surikiavimas reikiamas vietas, bet dauguma puslapi kuriuos js aplankote internete yra ne statiniai, o dinaminiai, netgi interaktyvs. Jie pateikia paiekos rezultatus, pranea paskutines naujienas, ar net sveikina jus vardu kai prisijungiate prie toki tinklapi. ie puslapiai leidia jums bendrauti su jais, modeliuoti juos pagal savo poreikius. Js negalite sukurti tokio puslapio naudodami vien tik tai HTML, tai kada scenoje pasirodo PHP. Mes galime suprogramuoti puslapius kurie: Pateikia duomenis i skirting altini duomen bazi ar fail terpti interaktyvius elementus paiekos galimyb, skelbim lentas ar balsavimo program. Leisti vartotojui atlikti veiksmus tokius kaip laik siuntimas ar ko nors pirkimas. Tariant kitais odiais, PHP gali bti panaudota darant tokio tipo web puslap, kok js esate prat matyti kas dien. Pradedant e-komercijos tinklapiais, paiekos ir informacijos portalais, dauguma pagrindini Interneti web puslapi savyje turi PHP kod ar yra pagrysti vien tik

tai iais kodais. ioje knygoje mes, neskaitant kit, imoksime daryti tokias programas: Internetin teksto redaktori, kuris leis jums kurti ir redaguoti failus esanius serveryje i bet kurio kompiuterio Interneto puslap vaizduojanti parduotuvi alj, kuris leis jums iekoti parduodamas prekes ir vaizduoti parduotuvi isidstym emlapyje Internetin odi aidim Paiekos sistem Konferencij tipo elektroninio pato sistem, kuri leis pasirayti skirtingas kategorijas, o administratoriams leis sisti laikus visiems usiregistravusiems. Taigi PHP gali bt naudojama labai plaiu spektru, pradedant teksto redagavimo programomis ir baigiant galingais portaliniais interneto tinklapiais, tokiais kaip e-komercijos ar paiekos.

Kodl PHP?
Viena i geriausi PHP savybi yra ta, kad j palaiko daugelis serveri ir Internet Service Providers (ISP), kas leidi vien kart parayt program lengvai patalpinti server ir visi j gals naudotis.

Ko man prireiks?
Mes susikoncentruosime PHP naudojime Windows platformoje. Kaip pamatysime i pirmo skyriaus mes galime suinstaliuoti PHP Windows 95 ir 98, bei NT, 2000, XP. Be paios PHP funkcij bibliotekos mums reiks teksto redaktoriaus, j sra apvelgsime pirmame skyriuje. Jums bus reikalingas web serveris. Windows vartotojai gali naudoti Apache, ar kaip alternatyv Microsoft'o Personal Web Server (95 ir 98 versijos) ar Internet Information Server (NT, 2000, XP versijos). Pirmas skyrius paaikins kaip j suinstaliuoti ir paleisti. Nordami gauti piln supratim jums reikalingas ir Interneto ryys. Bet jei jo neturite nepanikuokite. Jei turite diegtas visas reikalingas programas, daugum pavyzdi paleisite ir ant savo kompiuterio kuris vienu metu bus ir serveris ir klientas.

PHP resursai
Nordami gauti daugiau informacijos vis pirma apsilankykite oficialiame PHP tinklapyje kur rasite adresu www.php.net. Jis pateikia ne tik naujienas, failus, bet ir piln dokumentacij. PHP4 yra pagrstas Zend skript varikliu, kuris priklauso Zend Technologies, j puslapis randasi www.zend.com. ia rasite informacij apie PHP4, tai pat straipsnius, studijas ir naujienas apie PHP naudojim. Kitas labai vertingas altinis yra www.phpbuilder.com puslapis, forumas PHP programuotojams. Tai naudinga vieta kur rasite patarimus ir pamokas, bei tai kas vyksta PHP programuotoj bendruomenje. Lietuvikas puslapis skirtas PHP www.php.lt

1
diegimas
Nordami paleisti ioje knygoje idstytus programinius kodus jums reikia bent jau i program: Serverio programos Suderinamas su PHP web serveris PHP4 Daugumai pavyzdi i 11 skyriaus, duomen baz Kliento programos Interneto narykl Teksto redaktori - Notepad, Emacs, vi, BBEdit, ir t.t. Js galite paleisti visas ias programas viename kompiuteryje kol mokots. Jei turite prijim prie keletos kompiuteri galite serverio puss programas diegti viename ir naudokis kitu kaip klientu. ioje knygoje mes pagal nutyljim turime galvoje, kad visos programos randasi viename kompiuteryje. Tai konfigracij kuria naudoja dauguma Interneto programuotoj. Nepanikuokite jei neturite web serverio. Dauguma neturi. 1 Skyriuje mes ruoiams paaikinti kaip diegti web server papraiausiame personaliniame kompiuteryje. Jei js nerimaujate dl Interneto ryio, tai kompiuteris nebtinai turi bti prijungtas prie jo, gali nebti netgi vietinio tinklo norint paleisti server. Jei js suinstaliavote web server kompiuteryje visada yra galima pasiekti j per narykl esani tame paiame kompiuteryje, net jei js neturite tinklo plokts ar modemo. inoma norint atsisisti ir suinstaliuoti jums reikiam programin rang, jums bus reikalingas Interneto ryys. Bet jums jo nereikia vien tam, kad aktyvuoti web server. Kai jau tursite web server, mes suinstaliuosime PHP, reiks atlikti nedidel konfigracij ir mes parodysime kaip tai daroma. Kaip ir web serveris ar PHP mums bus reikalinga ir duomen baz kai kuriems ms pavyzdiams. Viena i pai galingiausi web programavimo ranki galimybi yra galimyb pateikti informacij saugom duomen bazje mons narantiems po js puslap. Visi pavyzdiai pateikti 11 skyriuje, kurie naudoja duombaz, yra parayti darbui su populiaria nemokama buombaz MySQL. Taiau Windows ar Linux vartotojams, MySQL diegimas gali bti kiek skausmingas ir sudtingas, tad bus daug parasiau jei js leisite pavyzdius vien tik suinstaliave duomen baz MySQL. Pilnos instrukcijos yra pateiktos 11 skyriaus pradioje. Tad iame skyriuje mes paaikinsime kaip diegti pai paprasiausi sistem, kuri leis jums kurti savo ir paleisti pateiktus su ia knyga pavyzdius.

Kur man pradti?


Yra pateikti 2 bdai kuriuos galite pasirinkti priklausomai nuo js sistemos: PHP4 diegimas Windows 95 ar 98 su Microsoft Personal Web Server
PHP4 diegimas Windows NT4 ar 2000 ar XP su Microsoft Internet Information Server PHP gali bt suinstaliuotas daugel skirting web serverio/OS kombinacij, tame tarpe ir naudojant Apache kartu su Windows. Bet ios dvi sistemos kurias mes pasilme yra paprasiausios darbui.

PHP4 diegimas Windows 95 ir 98


Vis pirma diekime Microsoft Personal Web Server (PWS). Reikia paymti, kad PWS yra tinkamas dirbti tik js programuotojo kompiuteryje itas serveris neskirtas darbui su tikru tinklapiu. Taiau i sistema pateikia pakankamai ger aplink kuri leis moduliuoti ir programuoti kaip tikrame serveryje. Vienas i esmini PWS trkum, kad server gana sunku tinkamai suinstaliuoti ir priversti korektikai j dirbti. Pabadykime tai padaryti sekaniais trimis ingsniais:

PWS gavimas
PWS versija kuri jums reikia suinstaliuoti yra 4.0, ji pirm kart ileista kartu su NT 4 Option Pack 1997 pabaigoje kaip IIS 4.0 dalis. Serveris pasiekiamas keleta bd.

Visual InterDev
Microsoft'o Visual InterDev 6.0 versija turi savyje PWS. Serveris gali bt diegtas instaliuojant pat VID ar vliau kaip pasirinkimas ir papildom funkcij.

Windows 98
Windows 98 CD turi PWS instaliacin paket. Dauguma moni kurie sidieg PWS i Windows 98 CD Windows 98 sistem turi maiau problem nei sidieg i kit altini.

FrontPage
FrontPage, FrontPage 97, FrontPage 98, FrontPage 2000, FrontPage XP turi PWS. FrontPage 97 turi PWS 1.0, o FrontPage 98 turi PWS 4.0, dabartin PWS versij.

Kur altin pasirinkti


Maiausiai problem tursite sidieg PWS i Windows 98 CD. Vartotojams kurie iki iol naudoja Windows 95 labai patartina pereiti prie naujesns ir daugiau galimybi turinios Windows98.

diegimas Windows 98 i Windows 98 CD


Tai saugiausias bdas diegti PWS, bet jis veiks tik tada jei turite Windows 98 sistem 1. sitikinkite, kad Windows 98 CD yra diskasukyje. Kai dsite CD atsiras langas, pasirinkite Browse this CD.

2. Windows Explorer lange pasirinkite katalog pavadinta add-ons. Jo viduje rasite katalog pws. Atidarykite j. 3. Paleiskite program setup.exe.

PWS diegimas
Paleid setup program js pasveikins tokio tipo langas:

Daugumai vartotoj tipinis diegimo bdas bus gerai. Jei pasirinksite daryti suasmenint diegim (custom install), sitikinkite, kad bent jau paymjote sekanius komponentus: Common Program Files
Personal Web Server

Js paklaus katalogo kuriame bus saugomi web serverio failai. Normaliai pasirenkama C:\Inetpub\wwwroot, nors js galite pasirinkti kur tik norite. Vliau iame skyriuje jei ms sakysime C:\Inetpub\wwwroot, js turite prisiminti katalog kur nurodte.

PHP diegimas
Dabar kai jau turite susiinstaliav PWS, ir js kompiuteris buvo paleistas i naujo, diegime PHP. Vis pirma reikia j atsisisti. Normaliomis slygomis naujausi PHP versij galite atsisisti i www.php.net, deja iame puslapyje randasi tik pagrindinis distribucinis paketas kuris nepalaiko vis mums reikaling funkcij. Vietoj to geriau apsilankykite http://php4. win.de ir atsisiskite j vliausi, neoficial, stabil paket. Js atsisisite ZIP fail, isaugokite j kur nors savo kompiuteryje. Sukurkite katalog savo PHP programoms kak panaaus C:\php ir iskleiskite ZIP kataloge esanius failus. Dabar katalogas turi kelet pakatalogi ir kelet tekstini fail, taip pat program php.exe, kuria mes tiesa pasakius tiesiogiai nesinaudosime bei, bibliotekos fail php4ts.dll. Jums reikia nukopijuoti it .dll js \Windows\System katalog. Dabar atidarykite dll pakatalog ir nukopijuokite visus ten esanius failus \Windows\System katalog. Dabar grkite savo PHP katalog, ten rasite fail php.ini. Nukopijuokite j \Windows, ir atidarykite j su Notepad programa. Tekste suraskite pana tekst:
extension_dir = C:\php\extensions ; directory in which the loadable extensions (modules) reside

Dabar, sitikinkite, kad tai teisingas kelias iki js PHP katalogo. Jei taip nra pakeiskite teising. Kitas skyrius sako PHP kokias programos dalis pakrauti. Js turite udti kabliatakius prie vis linij pradi, kurios pakrauna dalis, kuri mums nereikia. Js galite udti kabliatakius prie jas visas, iskyrus extension=php_gd.dll, taigi mes tursite tok tekst:
;extension=php_filepro.dll extension=php_gd.dll ;extension=php_dbm.dll ;extension=php_mssql.dll

Tai reikia, kad mes galsime naudotis GD bibliotekos funkcijomis. Jos leis mums generuoti paveiksllius, naudojantis PHP programomis. Kaip tai padaryti mes pamatysime 16 Skyriuje. Dabar turtumte isaugoti php.ini fail. Dabar, vlgi su Notepad, jums reikia sukurti nauj fail ir parayti sekanti tekst:
REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\ parameters\Script Map] ".php"="C:\\php\\sapi\\php4isapi.dll"

Pastaba. itas skriptas yra trauktas pavyzdi archyv prie 1 skyriaus kaip PWS-php4.reg. Jei js PHP katalogo nepadarte C:\php, jums reiks paredaguoti fail taip, kad Windows inotu kur randasi js php4isapi.dll failas. Jei js PHP katalog padarte pavyzdiui E:\Stuff\php4, tada adresas bus E:\Stuff\php4\sapi\php4isapi.dll. Dl to kaip itas failas bus interpretuojamas jums reikia sudti dvigubus ambius brknius: C:\\php\\sapi\\php4isapi.dll. Pavyzdiui:
REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\ parameters\Script Map] ".php"="E:\\Stuff\\php4\\sapi\\php4isapi.dll"

Isaugokite it fail kaip, kaip PWS-php4.reg, udarykite Notepad, ir du kart paspauskite ant PWS-php4.reg. Js gausite dialogo langel klausiant ar norite atlikti pakeitimus registre, paspauskite Yes.

diegimo ubaigimas
Dabar jums reikia paleisti Personal Web Manager, tai grafin programa naudojama konfiguruoti PWS. Js j rasite Start/Programs/Accessories/Internet Tools/Personal Web Server/Personal Web Manager. Kai j paleisite sitikinkite, kad PWS paleistas. Jei taip nra paspauskite start mygtuk:

Pasirinkite Advanced i kairje esanio meniu. Sekaniame lange sitikinkite, kad virutinis punktas, <Home>, yra pasirinktas.

Paspauskite Edit Properties, ir sitikinkite, kad Execute yra paymtas.

Dabar js sukonfiguravote PWS, kad jis veiktu kartu su PHP4 programomis. Jums reikia perkrauti kompiuter, kad PWS pakrautu PHP komponentus. akninis js serverio katalogas yra, nebent js pasirinkote kitaip, yra, C:\Inetpub\wwwroot. Atsiminkite tai tai svarbu. Dabar galite pereiti prie Js diegimo tikrinimas dalies toliau iame skyriuje.

PHP diegimas Windows NT, 2000, XP sistemose


Windows NT, 2000, XP sistemose mes naudosime Internet Information Server, kuris yra industrinis Microsofto web serveris. NT ar 2000 ar XP kompiuteris turintis IIS yra pakankama aplinka norint paleisti tikr web server, nors reikia sitikinti, kad js suprantate k darote jei planuojate paleisti kompiuter kaip vieai prieinam Interneto web server saugumas turtu sukelti daugiausiai rpesi. IIS veikianti Windows NT ar 2000 ar XP aplinkoje yra gera programuotojo aplinka. Kadangi Windows NT iuo metu retai kur naudojama, nes dauguma kompiuteri turi Windows 2000 sistem, ia apvelgsime kaip tik ios sistemos diegim. Windows XP sistemoje visas procesas yra i esms toks pat.

Internet Information Server 5.0 diegimas Windows 2000


IIS 5.0 randasi Windows 2000 instaliacineme CD, taigi jis jums bus reikalingas norint diegti server. Turkite j paruot, bet kol kas nedkite CD-ROM.

Pasirinkite control panel (Start | Settings | Control Panel) ir ten Add/Remove Programs enkliuk. Atsiras sekantis dialogas rodantis diegtas programas:

Pasirinkite Add/Remove Windows Components punkt i kairje esanio meniu, taip pateksite lang leidianti diegti papildomus Windows komponentus.

Pasirinkite Internet Information Services (IIS) punkt dialogo lange, ir paymkite kairje esant langel.

Paspauskite Next punkt, kai js paprays dti Windows 2000 instaliacin CD, taip ir padarykite.

PHP diegimas
Dabar kai jau turite susiinstaliav PWS, ir js kompiuteris buvo paleistas i naujo, diekime PHP. Vis pirma reikia j atsisisti. Normaliomis slygomis naujausi PHP versij galite atsisisti i www.php.net, deja iame puslapyje randasi tik pagrindinis distribucinis paketas kurie nepalaiko vis mums reikaling funkcij. Vietoj to geriau apsilankykite http://php4.win.de ir atsisiskite j vliausi, neoficial, stabil paket. Js atsisisite ZIP fail, isaugokite j kur nors savo kompiuteryje. Sukurkite katalog savo PHP programoms kak panaaus C:\php ir iskleiskite ZIP kataloge esanius failus. Dabar katalogas turi kelet pakatalogi ir kelet tekstini fail, taip pat program php.exe, kuria mes tiesa pasakius tiesiogiai nesinaudosime bei, ir

10

bibliotekos fail php4ts.dll. Jums reikia nukopijuoti it .dll js \Windows\System katalog. Dabar atidarykite dll pakatalog ir nukopijuokite visus ten esanius failus \Windows\System katalog. Dabar grkite savo PHP katalog, ten rasite fail php.ini. Nukopijuokite j \Windows, ir atidarykite j su Notepad programa. Tekste suraskite pana tekst:
extension_dir = C:\php\extensions ; directory in which the loadable extensions (modules) reside

Dabar, sitikinkite, kad tai teisingas kelias iki js PHP katalogo. Jei taip nra pakeiskite teising. Kitas skyrius sako PHP kokias programos dalis pakrauti. Js turite udti kabliatakius prie vis linij pradi, kurios pakrauna dalis, kuri mums nereikia. Js galite udti kabliatakius prie jas visas, iskyrus extension=php_gd.dll, taigi mes tursite tok tekst:
;extension=php_filepro.dll extension=php_gd.dll ;extension=php_dbm.dll ;extension=php_mssql.dll

Tai reikia, kad mes galsime naudotis GD bibliotekos funkcijomis. Jos leis mums generuoti paveiksllius, naudojantis PHP programomis. Kaip tai padaryti mes pamatysime 16 Skyriuje. Dabar turtumte isaugoti php.ini fail. Dabar jums reikia paleisti Internet Services Manager. Windows NT, js rasite j Windows NT 4.0 Option Pack js Starto meniu. Windows 2000, jis bus Start | Programs | Administrative Tools. Serviso valdymas parodytas emiau.

Deiniu paspaudimu ant Default Web Site, js gausite punkt Properties. Yra du pakeitimai kuriuos mums reikia padaryti. Vis pirma mums reikia uregistruoti PHP4 ISAPI filtr. Paspauskite ant ISAPI Filters laukelio. Paspauskite Add mygtuk, ir sukurkite nauj filtr pavadint PHP. PHP katalogas kuriame yra ms atsisisti failai turi PHP ISAPI filtr sapi kataloge, pavadinimu php4isapi.dll. Nurodykite teising keli iki js php4isapi.dll failo (jei js nuosekliai vadovavots instrukcijomis tai turtu bti C:\php\sapi\php4isapi.dll).

11

Sekantis dalykas kur mums reikia atlikti tai nurodyti IIS kokius failus naudoti filtruojant PHP programas. Mes norime, kad serveris visus failus kuri galn yra .php skaitytu kaip PHP programas. Eikite Home Directory laukel, ir paspauskite Configuration.

Paspauskite Add mygtuk ir vl nurodykite keli iki php4isapi.dll. Nurodykite IIS pritaikyti j .php failams, ir paspauskite OK.

Dabar mums reikia visikai perkrauti IIS. Geriausias bdas tai atlikti yra per komandin eilut parayti sekani komand: > net stop iisadmin The following services are dependent on the IIS Admin Service service. Stopping the IIS Admin Service service will also stop these services. World Wide Web Publishing Service Simple Mail Transport Protocol (SMTP) FTP Publishing Service Do you want to continue this operation? (Y/N) [N]: y The World Wide Web Publishing Service service is stopping. The World Wide Web Publishing Service service was stopped successfully.

12

The Simple Mail Transport Protocol (SMTP) service is stopping. The Simple Mail Transport Protocol (SMTP) service was stopped successfully. The FTP Publishing Service service is stopping. The FTP Publishing Service service was stopped successfully. The IIS Admin Service service is stopping... The IIS Admin Service service was stopped successfully. > net start w3svc The World Wide Web Publishing Service service is starting.... The World Wide Web Publishing Service service was started successfully. > Gale pateiktas praneimas reikia, kad World Wide Web Publishing servisas buvo paleistas skmingai ir dabar js turite diegt server su PHP palaikymu. was started successfully, akninis js serverio katalogas yra, nebent js pasirinkote kitaip, yra, C:\Inetpub\wwwroot. Atsiminkite tai tai svarbu. Dabar galite pereiti prie Js diegimo tikrinimas dalies toliau iame skyriuje.

Js diegimo tikrinimas
Gerai, mes jau turime web server ir PHP, reikia ibandyti kaip visa tai veikia. Atsimenate, mes prame prisiminti js web serverio aknin katalog. Kaip tik dabar mums jo ir prireiks. akninis web serverio katalogas yra tas katalogas kur serveris ieko fail. Pavyzdiui kai js surenkate URL http://www.yahoo.com/mypage.html web serveris iekos akniniame kataloge failo mypage.html. Jei toks randamas, jo turinys isiuniamas jums interneto narykl. Panaiai, jei js uklausite http://www.yahoo.com/kazkas/mypage.html, web serveris savo akniniame kataloge ieko katalogo kazkas, ir tada jame failo pavadinimu mypage.html. Mes turime tai inoti, nes web serveris tokias paias taisykles taiko ir PHP programoms. Mes isaugome savo PHP programas failus su pltiniu .php web serverio akniniame kataloge ar pakatalogyje, ten pat kur serveris iekos fail. Taigi, jei mes isaugosime fail pavadint myprogram.php www.yahoo.com web serverio akniniame kataloge, programa bus palesta, jei j bus kreiptasi naryklje http://www.wrox.com/myprogram.php. Bet k mums vesti naryklje, kad kreiptumms savo PHP programas esanias naujai instaliuotame web serveryje. Kaip jau ankiau buvo rayta mes galime pasiekti web server per narykl esani tame paiame kompiuteryje. Kaip? irint i kompiuterio perspektyvos vardas kur jis naudoja kreipdamasis pats save yra localhost. Taigi, jei surinksite http://localhost/ naryklje kompiuteris bandysi prisijungti prie web serverio kuris veikia jame paiame. Normaliomis slygomis tai neveikia, nes dauguma kompiuteri neturi veikianio web serverio. Bet kadangi mes j jau suinstaliavome, mes galusi standartin serverio pasisveikinimo puslap leidianti suprasti, kad serveris jau veikia. Jei js kompiuteris prijungtas prie tinklo tai server galite pasiekti ir per kompiuterio vard. Jei tiksliai neinote savo kompiuterio vardo pabandykite pasinaudoti emiau esaniomis komandomis: Windows aplinkoje:
> echo %COMPUTERNAME%

13

Pavyzdiui, jei js kompiuterio vardas yra mycomputer, js galite surinkti http://mycomputer/ naryklje ir atsidursite tam paiam serverio pasisveikinimo puslapyje. Dabar mes jau pasiruo parayti ms pirmj PHP program ir j ibandyti.

Bandymas ar ms serveris su PHP veikia?

1. Atidarykite tekstin redaktori bet koki program dirbani su grynu tekstu. Notepad idealus Windows sistemoms. 2. paraykite sekant tekst, taip pat kaip jis paraytas ia, tui tekstin
fail.
<?php phpinfo(); ?>

3. Isaugokite it fail savo katalogo akniniame kataloge, kaip phpinfo.php. Jei js tekstinis redaktorius isaugant duod pasirinkimo galimyb sitikinkite, kad tekstas isaugotas kaip plain text. 4. Dar kart sitikinkite, kad isaugojot fail teisingoje vietoje su teisingu pavadinimu. Tai turtu bti js web serverio akninis katalogas (normaliai C:\Inetpub\wwwroot) ir, kad jis tikrai pavadintas phpinfo.php. Windows aplinkoje jums reiktu nuimti varnel nuo punkto Hide file extensions for known file types, View tab meniu, Windows Explorer programos nuostatose Folder Options... nes kartais tai neleidia jums sitikinti ar tikrai failas buvo isaugotas su teisinga galn. 5. Mes pasiruo prisijungti prie ms serverio. Atsidarykite savo interneto narykl ir paraykite http://localhost/phpinfo.php. Kaip mes jau sakme tai turtu priversti narykl prisijungti prie serverio ir jame iekoti programos pavadintos phpinfo.php. Jei viskas gerai, js pamatysite, tokio tipo vaizd savo ekrane.

ai taip sveikinu jus PHP veikia js serveryje. Dabar js jau pasiruo skaityti tikimesn knygos gal. Jei js nematote tokio ekrano - nepanikuokite. Grkite atgal ir sitikinkite, kad visk padarte taip kaip parayta instrukcijose. Lengva padaryti vien lemting klaid. Pakandykite isiaikinti kas sukl problem. Ar tai web serveris? Ar PHP nustatytas tinkamai? Gal problem sukl pats failas? Jei mums kyla problemos suvokiant aukiau paraytas instrukcijas neskaitykite knygos toliau, vis tiek nieko nesuprasite. Jei js nesuprantate toki elementari paaikinim, jums tikrai nesuprasti ir tolimesni knygos skyri kurie jau konkreiai moko PHP programavimo kalbos.

14

2
Program raymas
Pirmame skyriuje mes pristatme PHP ir pajome vis reikaling program diegimo maraton. Mes neatlikome tik vieno dalyko nesigilinome pat PHP kod, paprasiausiai patikrinome ar ms serveris su PHP veikia. iame skyriuje mes vis pirma imoksime parayti pati paprasiausi PHP puslap ir priversime j veikti ms serveryje, tuo pat metu aikindamiesi kaip jis veikia ir kokias funkcijas atlieka kodas. Vliau mes plaiau aptarsime web serverio vaidmen ir tiesa pasakius kaip PHP veikia jame. Kai susipainsime su paiais paprasiausiai PHP veikimo principais, mes aptarsime esminius programavimo kalbos elementus, ir kaip naudoti PHP informacijos pateikimui ms interneto puslapyje. Skyriaus galas bus skirtas kintamiesiems, bei kaip jais naudotis atliekant aritmetines operacijas, ar paprasiausi manipuliacij su tekstu. io skyriaus pagrindins uduotys :
Parayti ir itirti labai trump PHP program Panekti apie PHP variklio viet internetiniame puslapyje Nustatyti k mes turime galvoje sakydami interpretacija ir vykdymas Kintamieji kas tai? Duomen tipai mes aptarsime skirtingus duomen tipus kuriuos gali turti

kintamieji
Kokios operacijos gali bti atliekamos su kintamaisiais Konstantos Kintamj vertimas i vieno duomen tipo kit Aplinkos kintamieji (environment variables)

15

PHP programos pavyzdys


itas skyrius prasideda paiu papraiausiu vienos kodo eiluts pavyzdiu mes norime pademonstruoti, kad PHP puslapiai yra trij dalyk miinys teksto, HTML kodo ir PHP skripto. Puslapiai turintys savyje PHP skriptus skiriasi nuo puslapi padarytu vien tik tai i HTML, ir norint, kad juos identifikuotu PHP variklis, jie isaugomi su .php (arba panaia) galne web serveryje. Juos uklausus, puslapiai vis pirma vykdomi PHP variklyje ir rezultatai isiuniami vartotojui. .php galn priklauso nuo js esamos konfigracijos. Jei norite PHP nustatymuose galite pakeisti labai daug dalyk, netgi PHP galn pavyzdiui .manofailas. ioje knygoje bus naudojamos tik tai .php galns raant jas maosiomis raidmis. Rezultatai pateikiami naryklje yra HTML tipo. Mes tai greitai pamatysime, bet dabar usiimkime pavyzdiu.

Ibandykite Pirmoji programa

1.

Atidarykite teksto redagavimo program ir paraykit sekant tekst:

<HTML> <BODY> iandienos data yra: <?php echo gmdate("M d Y"); ?> </BODY> </HTML>

2. Isaugokite fail kaipexample1.php


.

savo serverio akniniame kataloge

3. Tada atsidarykite savo Interneto narykl ir paraykite piln savo serverio adres (URL) ir puslapio pavadinim, mano btu http://justas/example1.php. Js turite pamatyti pana vaizd, kaip paveiksliuke emiau:

Skirtingi kodo tipai


Kaip mes jau sakme iame pavyzdyje, mes vis pirma norime pademonstruoti tris skirtingus kodo tipus naudotu iame puslapyje. Tad pairkime js parayt kod ir priskirkime j trims skirtingoms kategorijoms.

16

Kodas su baltu fonu i tikro net nra kodu, tai paprasiausias tekstas. Ir nra k daugiau apie ji pasakyti. Kodo dalis paymta viesiai pilka spalva yra HTML tipo. Tai irgi nra kodas tikrj to odio prasme, ir js turtumte bti susipain su pagrindiniais HTML sintakss elementais, tad ia mes irgi nesustosime. Reikia paymti, kad ioje knygoje visas HTML kodo dalis mes raysime didiosiomis, nors tiesa pasakius tai prietarauja standartams (HTML 4.0 standartai pataria visus kodus rayti maosiomis). Tai mes dalysime, kad ivengtume galim nesusipratim ir nereiktu kiekvien kart naudoti fonins spalvos. Kodas su tamsiai pilka spalva yra PHP skriptas. PHP skriptas atskirtas lautiniais skliaustais ir klaustuku. Taigi, bet kada kai pamatysite kodo dal prasidedania <?php ir ?> js inosite, kad viskas viduje turi bti PHP kodu. Kaip matote i naryklje pateikt rezultat ie tris tipai visai gerai sugyvena web puslapyje, nepaisant to fakto, kad PHP skriptas pradioje turi bti vykdytas serveryje, kuris gali bti ir kitas kompiuteris, o ne tik js maima.

<HTML> <BODY> iandienos data yra: <?php echo gmdate("M d Y"); ?> </BODY> </HTML>

Kaip dirba kodas


Mes jau isiaikinome skirting tipo kodus puslapyje, bet kol kas nesiteikme paaikinti k daro vienos eiluts PHP kodas. Atitaisykime tai dabar vienintelis tikras PHP skriptas puslapyje buvo itas:
echo gmdate("M d Y");

ia veikia trys sudedamosios dalys. Vis pirma, odis echo() yra PHP komanda, kuri atvaizduoja visk kas telp j internetiniame puslapyje. Tad jei mes turtumme komand:
echo "Hello world";

js gautumte odius Hello world ekrane kaip rezultat. Taiau kaip js jau pastebjote ms pavyzdyje ekrane atsirado data, kadangi komandoje echo()mes patalpinome gmdate("M d Y") funkcij antrj i sudedamj dali, tuoj mes j ir apvelgsime.

PHP turi didiul bibliotek toki rezervuot odi funkcij jos atliek populiarias uduotis, tokias kaip datos gavimas, elektroninio laiko siuntimas, sudting matematini operacij atlikimas ar skripto sustabdymas tam tikram laikui. Vis funkcij sraas pateiktas Priede D. Jums nereikia j vis prisiminti atmintinai, bet mokydamiesi mes jas vis naudosime ir naudosime.

Paskutin dalis yra kabliatakis; PHP reikalauja, kad kiekviena kodo eilut, (su keletu iimi, kurias aptarsime vliau), baigtsi kabliatakiu. Js gal bt pastebjote, kad odis gmdate() nebuvo atskirtas kabutmis. Ms "Hello world" pavyzdyje, uddami kabutes mes liepme PHP varikliui vaizduoti tekst esanti viduje tiksliai tok, koks jis yra. Ms atveju neddami kabuiu mes nurodome PHP naudoti speciali funkcij gmdate(), kad i

17

atliktu uduot ir gaudu dat. i funkcija gaun iandienos dat ir laik pagal Grinvio laiko juost (Greenwich Mean Time). Aptarkite jos veikim plaiau. Ms pavyzdyje js pastebjote, kad data vaizduojama tokia: Sep 25 2003 Taiau yra daugyb format kaip i data ir laikas gali bti pateikti. Pavyzdiui mes galime gauti: 25/9/03 09-30AM ar Tuesday 25th September Visi ie formatai teisingi ir rodo iandienos dat, nors PHP neino kuri versij mes norime gauti ar gal visai kitoki datos pateikimo form.. Taigi jums reikia parayti, ko mes norime ir kaip tik tai daro raids esanios tarp gmdate() skliausteli. Mes nurodme, kad mums reikia pirma mnesio, po to dienos ir tada met. Faktas, kad raant mes naudojome didisias raides D, M, ir Y labai svarbus. PHP suteikia reikm kiekvienai raidei kaip parodyta lentelje: Opcija a A d D F h H g G i j l L m M n s S t T U w Y Y z Z Rezultatas Displays "am" or "pm". Displays "AM" or "PM". Gives the day of the month, 2 digits with leading zeros; that is, "01" to "31". Shows day of the week, textual, 3 letters; for example, "Fri". Displays month, textual, long; for example, "January". Shows the hour, 12-hour format; that is, "01" to "12". Shows the hour, 24-hour format; that is,"00" to "23". Shows the hour, 12-hour format without leading zeros; that is,"1" to "12" Shows the hour, 24-hour format without leading zeros; that is, "0" to "23". Displays the minutes; that is,"00" to "59". Gives the day of the month without leading zeros; that is,"1" to "31". Gives the day of the week, textual, long; for example, "Friday". Boolean for whether it is a leap year; that is,"0" or "1". Shows the month; that is,"01" to "12". Gives the month, textual, 3 letters; that for example, "Jan". Shows the month without leading zeros; that is,"1" to "12". Displays the seconds; that is,"00" to "59". English ordinal suffix, textual, 2 characters; for example, "th", "nd". The number of days in the given month; that is,"28" to "31". Timezone setting of this machine; for example, "MDT". Displays the seconds since the epoch Shows the day of the week, numeric, that is,"0" (Sunday) to "6" (Saturday). Displays the year, 4 digits; for example, "1999". Displays the year, 2 digits; for example, "99". Shows the day of the year; that is,"0" to "365". Gives the timezone offset in seconds (that is,"-43200" to "43200").

Kaip matote tai gana didelis sraas, Vlgi mes nesiruoiame kiekvien kart supaindindami su funkcij pateikti vis jos galimybi srao, jums reiks irti prieduose. Nagrinjimo (parsing) ir vykdymo (execution) koncepcija Js PHP skripto interpretacija gali bti padalinta du procesus. Kai puslapis patenka server atsitinka du dalykai. Vis pirma puslapis yra patikrinamas ar jis teisingas programavimo kalbos atvilgiu is procesas vadinamas nagrinjimu. Tai analogija, kai js sakinys yra tikrinamas su gramatinio tikrinimo programa

18

tai neutikrina to, kad skriptas yra teisingas, patikrinama ar jis atitinka kelet i anksto nustatyt taisykli. Sekantis procesas vadinamas vykdymu atliekamas tik tada kai puslapis praeina nagrinjim. tai ia pamatysite ar js skriptas atlieka teisingus veiksmus. Vykdymas atliekamas imant paeiliui kiekvien PHP eilut ir atliekant joje nurodytus veiksmus. Visa tai daroma grietai paeiliui, nebent PHP skripte nurodyta kitaip. Yra dvi vietos kuriose PHP programa gali pateikti praneim apie klaidas atliekant nagrinjim ir atliekant vykdym. Jei taip atsitinka praneimas apie klaid pateikiamas naryklei. Jei klaid nra dinamikai sukurtas puslapis pateikiamas vartotojui.

Keavimas (Cache)
Prie pradedant gilintis tikr PHP programavim, pats laikas paminti tokios naryklse egzistuojanios funkcijos, kaip - keavimas. Js gal bt jau susidrte su ia funkcija; ji saugo aplankytus web puslapius. Norint pagreitinti puslapi atidarymo laik, narykl pateikia vartotojui sen puslapio versij. Keo buvimo vieta priklauso nuo narykls tipo ir operacins sistemos. Windows (98/NT ir 2000), Netscape Navigator kaas paprastai yra saugomas ioje vietoje C:\Program Files\Netscape\Users\Cache. Naudojant Internet Explorer jis saugomas Temporary Internet Files kataloge kuris randasi Windows ar WinNT katalogte Windows 98 ir NT 4.0 sistemose, bei Windows 2000 ir XP Documents and Settings kataloge. Kai js pasitikite serveryje dinamikai sumodeliuotais PHP puslapiais keo egzistavimas tampa labai svarbiu dalyku. Jei js naudojate keo duomenis su senesniu puslapio kodu, informacija nebus kuriama dinamikai, o pateikiama statin, sena puslapio versija, tad informacija gali bti pateikta neteisingai. Js tai pastebsite jei pabandysite pasinaudoti narykls Back mygtuku ir grite prie anksiau matyto PHP puslapio. Kartais nepakanka netgi Refresh paspaudimo, nes keas neatnaujinamas ir narykl nemano, kad puslapis yra pasens. iuo atveju norint priversti Internet Explorer atnaujinti puslapio turin reikia CTRL+F5 kartu, o naudojant Netscape Navigator jums reikia spausti Shift klavi ir spausti ant Reload. Tai svarbu, nes paleidus pavyzd js galite gauti rezultatus i jau buvusios programos vykdymo sesijos. Js turite sitikinti, kad narykl kiekviena kart gauna naujausi puslapio versij. Yra HTTP kodas apsaugantis nuo keavimo. Sekanios trys kodo eiluts (naudojamos PHP skripto pradioje) apsaugo Explorer ir Navigator nuo puslapio:
<? header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Expires: Mon,26 Jul 1997 05:00:00 GMT"); ?>

Kintamieji (variables)
Mes jau inagrinjome kaip terpti PHP kod js internetin puslap, ir kaip serveris j supranta. Dabar laikas apvelgti skirtingus programavimo kalbos aspektus kuriuos mes turime inoti norint naudotis PHP. Matyt viena svarbiausi vis programini kalb elementai yra kintamieji. Pats paprasiausias apibdinimas- kad tai atminties dalel skirta saugoti informacijai ir i informacija priskirta konkreiam identifikatoriui programuotojo. PHP kalboje visi kintamieji prasideda dolerio $ enklu. Nordami priskirti reikm kintamajam mes naudojame lygybs enkl = arba priskyrimo

19

operacij. Taigi norint sukurti PHP kintamj ir priskirti jam reikm, jums reikia atlikti sekanius veiksmus:
$author = "William Shakespeare";

Kintamojo identifikatorius yra $author ir iam kintamajam buvo priskirta reikm William Shakespeare. Kintamiesiems mes taip pat galime priskirti skaiius.
$number_of_digits_on_one_hand = 5;

ia mes turime kiek sudting kintamojo pavadinim $number_of_digits_on_one_hand, bet iskyrus tai jis maai kuo skiriasi nuo priskyrimo kintamajam reikms kuri mes padarme anksiau. Skirtumas tas, kad aritmetin reikm (skaiius) raomas be kabuiu. Tai nurodo PHP, kad reikm turi bti suprantama kaip skaiius; kintamojo tipo nurodyti nereikia. Mums sukrus kintamj, savo programoje js galite j naudoti kaip tik norite. Nordami j pavaizduoti ekrane naudojant ms sen draug echo() komand, jums reikia parayti sekant kod:
echo $author;

Kintamj vard apribojimai


Yra keletas limit kurie nurodo kaip js galite ir kaip negalite vadinti kintamj. Daugelyje programavimo kalb yra kintamojo pavadinimo ilgio limitas, daniausias 255 ar 1000 simboli; taiau PHP tokio limito neturi. Taiau jums tikriausiai niekada neteks naudoti ilgesni nei 50 simboli pavadinim, netgi 20-30 yra tikrai pakankamai. Pirmasis tikras grietas apribojimas yra tas, kad kintamojo pavadinimas turi prasidti raide ar pabraukimo enklu _ (ignoruojant dolerio enkl, kuris net nra pavadinimo dalis). Kitas apribojimas pavadinimas turi bti sudarytas i raidi, skaii ir pabraukimo enklo. Kiti simboliai, tokie kaip +,- , *, ir & neleistini ir juos panaudojus sukels klaid. Be it apribojim js esate gana laisvi naudojant kintamj vardus. Mes vliau iame skyriuje aptarsime pavadinim naudojim.

Skiriamos didiosios ir maosios raids kintamj varduose


Kintamieji nra tokie paprasti kaip atrodo i pradi. Viena problema su kuria susiduria daugelis pradedanij PHP programuotoj yra tai, kad kintamj varduose skiriamos didiosios ir maosios raids. Paprasiausias bdas tai paaikinti yra pateikti gabaliuk kodo:
$author = "William Shakespeare"; $Author = "James Joyce";

Virutins kodo linijos i tikro sukuria du skirtingus kintamuosius, viena pavadint $author ir kit pavadint $Author. ie du kintamieji turi dvi skirtingas reikmes ir yra tokie pat skirtingi jei pavyzdiui js naudotumte sekant kod:
$famous_english_author = "William Shakespeare"; $famous_irish_author = "James Joyce";

Gana danai tai daro tak galutiniams rezultatams jei js netyia panaudojate didij raid ten kur ji nebuvo naudota anksiau. Jei js numatte naudoti tik vien kintamj tai kodas turtu bti toks: $author = "William Shakespeare"; $author = "James Joyce"; Pirmoji linija priskiria $author kintamajam reikm William Shakespeare, o antroji visikai pakeii kintamoji $author reikm James Joyce. Tik tai vienas kintamasis bus sukurtas ir naudojamas io kodo dalies.

20

Dabar inagrinkime trump pavyzd kuris sukuria kintamj ir pateikia jo reikm web puslapyje.

Ibandykite Kintamojo reikms priskyrimas ir jo parodymas

1. Atsidarykite savo teksto redagavimo program ir paraykit sekant kod:


<HTML> <BODY> <?php $actor = "Marlon Brando"; echo $actor; ?> </BODY> </HTML>

2. Isaugokite it kod kaip variable.php fail. 3. Atidarykite puslap savo naryklje.

Kaip veikia kodas


itas kodas susideda tik i 2 linij. Pirmoji:
$actor = "Marlon Brando";

Priskiria eilut (string) Marlon Brando ms kintamajam $actor. Antroji linija:


echo $actor;

pateikia kintamojo $actor reikm echo() komand. Js galjote pastebjote, kad siuniant kintamj $actor web puslap mes nenaudojome kabui. Taiau, jei ms paraytumme sekania eilut:
echo "$actor";

rezultatas vis tiek btu Marlon Brando. Taip atsitinka, nes norint PHP nurodyti nenaudoti kintamojo reikms, o pateikti j kaip tekst reikia rayti ne dvigubas, o viengubas kabutes.

21

Duomen tipai
Mes jau minjome, kad ruoiams susikoncentruoti ant dviej duomen tip, t kurie turi skaitin reikm ir t kurie turi tekstin reikm. Taiau i tikro yra ir daugiau kintamj tip, nusakom kaip duomen tipai, kurios naudoja PHP. Pilnas sraas yra sekantis:
eiluts tipas (string) //tekstas sveikojo skaiiaus tipas (integer) // sveikieji skaiiai slankaus kablelio skaiiai (double) //skaiiai su kableliu masyvas (array) objekto neinomas tipas

Duomen tipai nenurodomi programuotojo, daniausiai pats PHP koks duomen tipas turi bti priskirtas. ie skirtingi tipai naudojami PHP nurodyti skirting tip informacij kuri gali bti priskirta kintamiesiems ir atlikti su jais veiksmus.

Eiluts tipas
Eiluts tipas talpina tekstin informacij arba odius ar netgi pilnus sakinius. Viskas patalpinta tarp kabui automatikai tampa tekstu, netgi skaiiai. Pavyzdiui abu yra eiluts tipo kintamieji:
$CarType = "Cadillac"; $EngineSize = "2.6";

Nesvarbu, kad antroji kodo eilut yra numeris, nes kai tik jis patenka kabutes, jis automatikai tampa eiluts tipo. Jei js priskyrte kakoki skaitin reikm eiluts tipui, norint vliau atlikti matematines operacijas jums reiks atlikti tam tikro tipo pavertimo operacij. Su eiluts tipu irgi galima atlikti tam tikrus veiksmus. i operacija inoma kaip sryis (concatenation).

Eiluts sryis
Eiluts sryio procesas yra vienos eiluts pridjimas prie kitos. Js galite naudoti . (tak) kaip sryio operatori, nordami atlikti i operacij. Linija:
$Car = $CarType . $EngineSize;

Duos rezultat Cadillac2.6, jei naudotume ankstesnio pavyzdio kintamuosius ir j reikmes. Tiesa pasakius tarpo nebuvimas tarp dviej eilui gali nuvilti, tad mes turime sukurti kintamj kuris turs tarpo reikm:

22

$Space = " ";

Jus tikriausiai pastebjote, kad tai skiriasi nuo tuios eiluts turjimo. Tuia eilut neturi nieko savyje, tuo tarpu eilut su tarpu turi savyje enkl, nors ir nematom. Tarpas inoma gali btu suritas kaip ir, bet kurtis kitas tekstas:
$Car = $CarType . $Space . $EngineSize;

Tai pateiks norim, gra, atskirt tekst Cadillac 2.6. inoma nra jokios prieasties kodl js negaltumte suriti kintamj su tikru tekstu:
$Car = "Buick" . $Space . "2.0";

ia mes pridjome kintamj prie teksto, kas rezultate gavosi kaip Buick 2.0. Taip pat nieko blogo neatsitiks jei mes naudosime ir sekani eilut:
$Car = "Buick" . " " . "2.0";

Tai duos tuos paius rezultatus. Reikia prisiminti vien dalyk, kad naudojant tarpus kurie vaizduojami kaip HTML jie bus pavaizduoti tik vien kart toj paioj linijoj. PHP kalboje yra dar vienas bdas suriti kintamuosius, tai ms seniai inoma echo() komand. Atsimenate mes anksiau minjome, kad jei js pabandysite parayti kintamojo vard web puslapyje jums nieko nesigaus, bus pavaizduota tik kintamojo reikm. Pavyzdiui:
$CarType = "Cadillac"; echo "$CarType";

vis tiek pateiks Cadillac. Taiau tai suteikia mums galimyb naudoti kintamj bei tekst norint suriti tekst : Tai pateiks Duke's Cadillac. Yra ir papildom dalyk kurios verta prisiminti, vis pirma, kad tik naudojant dvigubas kabutes kintamojo reikm bus pavaizduota. Taip pat jums gali tekti susidurti su situacija kai yra du kintamieji $Car and $Cars. Kaip js pavaizduosite sekania kodo eilute?
echo "Click here for the $Carsale"; echo "Duke's $CarType";

Gali pasirodyti akivaizdu, nes js matote tai ko ir tikits js norite naudotis kintamuoju $Car, bet ne $Cars, bat kaip tai paaikinti PHP? Tiesa pasakius PHP iekos kintamojo pavadinto $Carsale. Norint isprsti i problem jums reikia naudoti figrinius skliaustelius apie kintamojo vard:
echo "Click here for the ${Car}sale";

Js gal bt jau pastebjote, kad ms visada ms pavyzdiuose atitraukdavome tako simbol nuo kintamojo. Tai ne tik gero raymo maniera; ji lekia ivedamo teksto reikm. ios dvi linijos gali atrodyti vienodai, bet jos pateikia skirtingus rezultatus
echo 2 . 2; echo 2.2;

Atitinkamai, 22 ir 2.2! Gerai, mes truputli apgavome jus itoje vietoje, nes skaiiai nebuvo patalpinti kabutes, taigi jie nebuvo eiluts tipo. Taiau esm vis tiek lieka teisinga, nes skaiius 2 pavyzdyje yra traktuojamas kaip eilut sryio operacijoje. Taigi norint utikrinti, kad jis nebtu traktuojamas kaip skaiius, jums reikia pridti tarpus tarp jo ir sryio operando (tako). Svarbiausia ioje pastraipoje yra prisiminti, kad tarpai gali lemti js kodo veikim ir jo pateikiamus rezultatus.

23

Metas pateikti pavyzd rodant kai kurias PHP kalbos subtilybes. Sukurkime kelet eilui ir naudodami echo() komand pateikime juos puslapyje.

Ibandykite Eiluts tipo naudojimas

1.

Atsidarykite savo teksto redagavimo program ir paraykit sekant kod:

<HTML> <BODY> <?php $CarType = "Pontiac"; $EngineSize = "3.0"; $Space = " "; $Car = $CarType . $Space . $EngineSize; echo $Car . $Car; ?> </BODY </HTML>

2. Isaugokite kaip string.php. 3. Atidarius j js puslapyje turtumte gauti kak panaaus:

Kaip tai veikia


Mes jau prie tai nagrinjome labai pana pavyzd. Pirmosios tris kodo linijos eiluts tipo, $CarType, $EngineSize, and $Space ir suteik jiems tris skirtingas reikmes.
$CarType = "Pontiac"; $EngineSize = "3.0"; $Space = " ";

Sekanioje eilutje mes suriome ms trys reikmes, o gaut nauj reikm priskyrme naujai sukurtam kintamajam pavadintam $Car:
$Car = $CarType . $Space . $EngineSize;

Pagaliau mes atlikome sry kintamojo $Car paio su savimi per echo() komand:
echo $Car . $Car;

Mes atsakym pakartojome du kartus, bet be tarpo tarp dviej kintamj $Car variables. Tai atrodo kiek negraiai, bet itas pavyzdys buvo skirtas pademonstruoti kintamojo sry paio su savimi.

24

Skaitinis duomen tipas


Yra du skaitiniai duomen tipai, sveikojo skaiiaus (integers), ir slankaus kablelio (doubles) tipas. tai keletas pavyzdi:
$an_integer = 33; $another_integer = -5797; $a_double = 4.567; $another_double = -23.2;

I pavyzdio js turite suprasti, kad, bet koks sveikas skaiius automatikai yra integer tipo, kai tuo tarpu, bet kas turintis kablel tampa double duomen tipo. ie du duomen tipais skiriasi ir skaii intervalo dydiais kurios jie gali turti. ie dydiai daugiausiai priklauso nuo naudojamos operacins sistemos. Tad jei js turite Windows 98 PHP integer gali turti reikmes tarp nuo 32,768 ir iki 32,767. PHP double Windows 98 gali bti nuo 1.79769313486232E308 iki 4.94065645841247E-324 (neigiamoms reikmms), ir nuo 4.94065645841247E324 iki 1.79769313486232E308 (teigiamoms reikmms), be to jis gali turti ir nulin reikm.

Paprastos matematins operacijos


Yra daug matematini operacij kurios gali bti atliekamos PHP kalboje. ia pateiktos paios paprasiausios ir daniausiai naudojamos: Operatorius + * / % Operacija sudtis daugyba atimtis dalyba gaunama dalybos liekan 8%5 =3 J naudojimas yra gana intuityvus. Pavyzdiui ms galime naudoti sudties operatori, nordami gauti iandienos pirkini kain:
$Duona = 1.5; $Pienas = 0.8; $PirminiuSuma = $Duona + $Pienas;

Pirkini sumos kintamasis yra dviej kintamj $Duona ir $Pienas suma. Js matote, kad $PirminiuSuma reikm bus 2.3, kas atitinka 2 litus ir 30 cent, nors programa niekur nerodo io sryio su valiut. Kitos matematins operacijos veikia gana panaiai, tad jei js pirkote vien tik tai dvi duonas, programa turtu atrodyti sekaniai:
$Duona = 1.5; $PirminiuSuma = $Duona * 2;

inoma, js vienoje eilutje galite rayti ir daugiau matematini operacij, tai taip:
$Duona = 1.5; $Pienas = 0.8; $Nuolaida = 0.5; $PirminiuSuma = $Duona + $Pienas - $Nuolaida;

Kintamojo priskyrimas prie savs


Dar vienas dalykas kur js galite daryti PHP yra sekanti kodo eilut, kuri suglumintu matematik:
$PirkiniuSuma = $PirkiniuSuma + $Duona;

25

Tiesa pasakius, tai nereikia, kad $PirkiniuSuma yra lygi kintamajam $PirkiniuSuma plius $Duona, kas reikia, kad $Duona lygi nuliui. Lygybs enklas, arba priskyrimo operatorius, reikia, kad $PirkiniuSuma yra priskiriama SENA $PirkiniuSuma reikm plius kintamasis $Duona. Tad sekanti eilut:
$PirkiniuSuma = $PirkiniuSuma + 1;

i tikrj reikia, kad mes pridedame vienet prie kintamojo $PirkiniuSuma . Yra ir sutrumpinimas kaip didinti kintamj vienetu ir tai atliekama tai taip:
$PirkiniuSuma++;

Kita santrupa yra:


$ShoppingTotal += 2;

ir ji atlieka t pai funkcij, kaip:


$PirkiniuSuma = $PirkiniuSuma + 2;

Js netgi galite parayti:


$ShoppingTotal += $ShoppingTotal;

Ibandykite tai ir pairkite kas gavosi. PHP kalboje yra ir daugiau matematini operacij, nei mes ia dabar aptarme. Pradedantiesiems programuotojams yra specialus funkcij rinkinys apskaiiuojantis trigonometrines funkcijas, logaritmus ir t.t. ioje knygoje mes j plaiau neaptarinsime, vis informacij galite rasti Priede C. Be to yra ir kit matematini operatori, kuriuos mes nagrinsime tolimesniuose skyriuose, kai js jau tursite pakankamai ini jais naudotis.

Veiksm atlikimo seka


ios paprastos matematins operacijos vis tiek turi bti atliekamos pagal veiksm atlikimo sek, kaip, kad mes naudojame matematikoje. Pavyzdiui emiau esanti suma gali bti skirtinga priklausomai nuo to kokia tvarka mes skaiiuosime reikmes.
$Suma = 5+3*6;

Jei skaiiuosite i eilute kaip ji parayta gausite 48. Taiau, jei naudosite matematin veiksm atlikimo tvark, kur daugybos veiksmas atliekamas pirmas, o sudtis antra, tada gausite 23. Visikai aiku, kad reikia kakokios taisykls, nurodant kurie veiksmai turi bti atliekami vienas po kito. Kaip ir matematikoje, PHP naudoja skliaustelius priveriant atlikti matematinius veiksmus norima seka. Tad jei js norite, kad sudtis btu atlikta prie daugyb, jums reikia parayti skliaustelius:
$Suma = (5+3)*6;

Dabar apvelkime nedidel pavyzd kuris naudoja kai kuriuos i i operatori ir po nedideli skaiiavim pateikia rezultatus web puslapyje. iame pavyzdyje mes paimsime vidutine alg ir apskaiiuosime alg kai i jos atskaiiuojama 31 % mokesi. Po io mokesi atskaitymo mes dar atimsime 3% atskaitomus pensij fond ir pateiksime galutin alg, bei alg neatskaiiavus pensijai skirt 3%.

Ibandykite Skaitiniai tipai

1. Atsidarykite savo teksto redagavimo program ir paraykit sekant kod:

26

<HTML> <BODY> <?php $Alga = 1100; $Mokesciai = 31; $Pensija = 3; $PriesPensijosAtskaityma = $Alga - (($Alga / 100) * $Mokesciai); $PoPensijosAtskaitymo = $PriesPensijosAtskaityma (($PriesPensijosAtskaityma/100) * $Pensija); echo "Prie pensijos atskaitym: $PriesPensijosAtskaityma Lt.<BR>"; echo "Po pensijos atskaitymo: $PoPensijosAtskaitymo Lt. "; ?> </BODY </HTML>

2. 3

Isaugokite kaip calculation.php. Atidarius j js puslapyje turtumte gauti kak panaaus:

Ir nesakykite, kad mes mokame maai mokesi

Kaip tai veikia


Kodas yra gana tiesmukikas. Pirmoji linija sukuria algos kintamj ir suteikia jam reikm 1100:
$Alga = 1100;

Antroji sukuria $Mokesciai kurio reikm yra 31:


$Mokesciai = 31;

Treioji linija sukuria kintamj $Pensija ir jo reikm 3:


$Pensija = 3;

Dabar ms pasiruo atlikti kai kuriuos skaiiavimus. Vis pirma mums reikia suskaiiuoti kiek sudaro 31% nuo algos. Norint tai atlikti imame alg, j daliname i imto ir dauginame i 31. Tai duoda mums ms 31% reikm, bet dar reikia gaut reikm atimti i visos algos. Tam, kad procentin dalis bt apskaiiuota pirma, mes vedme skliaustelius. Tada jau galime atimti i visos algos ir suteikti reikm $PriesPensijosAtskaityma kintamajam.
$PriesPensijosAtskaityma = $Alga - (($Alga / 100) * $Mokesciai);

Dabar mums reikia suinoti kiek yra 3% nuo po-mokestins algos, kurios reikm saugoma kintamajame $PriesPensijosAtskaityma. Norint tai padaryti mes turime atlikti tokias paias operacijas kaip ir prie tai, tik su

27

skirtingais kintamaisiais. Dabar mums reikia paimti po-mokestin alg, padalinti j i imto ir padauginti i 3, norint gauti 3% skaii mes naudojome kintamj $Pensija kuriam suteikm reikm 3:
$PoPensijosAtskaitymo = $PriesPensijosAtskaityma (($PriesPensijosAtskaityma/100) * $Pensija);

Dabar mes turime jau abidvi reikmes ir reikia jas ivesti ekran. Pastebkite, kad mes echo() komand terpme HTML kod. Lengva pamirti, kad PHP generuoja HTML ir tai k mes pateikiame neyklje bus suprasta kaip kodas.
echo "Prie pensijos atskaitym: $PriesPensijosAtskaityma Lt.<BR>"; echo "Po pensijos atskaitymo: $PoPensijosAtskaitymo Lt. ";

Konstantos
Iki iol mes nagrinjome elementus kuriuos mes galjome keisti, po to kai priskyrme jiems reikmes. Pavyzdiui kintamasis $author kuriam mes anksiau priskyrme reikm "William Shakespeare", gali bti paleistas "Herman Melville". Pavyzdiui:
$author = "William Shakespeare"; echo $author " <BR>"; $author = "Herman Melville"; echo $author;

Jei patalpinsite kod puslap echo() komanda pateiks du skirtingus atsakymus, priklausomai nuo kaip kito kintamojo reikm: William Shakespeare Herman Melville Kas jei mes nenorime, kad taip atsitiktu? Kaip kurios reikms niekada nesikeiia, pavyzdiui:
$FreezingPointCentigrade = 0; $IndependenceDay = "4th July"; $FirstPresident = "George Washington";

Taip pat js galite norti nustatyti savo kode tokias reikmes kurios ne tokios sukaustytos, bet vis tiek nesikeiia:
$VilniausKrepsinioKomanda = "LRytas";

Tokiu atveju, programos vykdymo metu, jums tikrai nereiks keisti i reikmi ir js nenorsite, kad kas nors tai darytu. Laimei, PHP turi specialius elementus kurie leidia jums sukurti elementus kuri reikms negali bti pakeistos. ie elementai inomi kaip konstantos, jos leidia sukurti kintamj kurio reikm negali bti pakeista. Bdas kaip yra sukuriamos konstantos iek tiek skiriasi nuo prasto kintamj sukrimo bdo.

Define raktaodis
Konstantos tiesa pasakius reikalauja specialaus raktaodio define norint jas sukurti. Jos taip pat neturi bti raomos su dolerio enklu. Tad norint sukurti konstant kintamajam FreezingPointCentigrade, mes turime naudoti define kaip parodyta:
define("FREEZINGPOINTCENTIGRADE", 0);

Konstant vardai pagal susitarim raomi didiosiomis raidmis. Pirmoji reikm yra konstantos vardas; antroji konstantos reikm. Norint sukurti

28

konstant kuri turi tekst, jums tereikia apgaubti konstantos reikm dvigubomis kabutmis. Taip kaip pavaizduota:
define("INDEPENDENCEDAY","4th July"); define("FIRSTPRESIDENT,"George Washington");

Tada konstantos gali bti naudojamos tokiu paiu bdu kaip ir kintamieji. Taigi js galite jas pateikti puslapyje naudojant echo() konamd:
echo "Independence Day is the " . INDEPENDENCEDAY;

Mes galime paversti jas tekst kaip virutiniame pavyzdyje. Taiau tas skirtumas, kad konstantos nenaudoja dolerio enklo, tad nra bdo kaip nurodyti PHP, kad jis atskirtu konstant nuo paprasto teksto, tad sekanti eilut:
echo "Independence Day is the INDEPENDENCEDAY";

parodytu tekst Independence Day is the INDEPENDENCEDAY. Norint to ivengti js turite sitikinti, kad konstant vardai visada raomi u kabui. PHP taip pat turi savo konstant kurios naudojamos norint gauti tokias reikmes kaip operacins sistemos pavadinim, kurioje dirba PHP, pavyzdiui:
echo PHP_OS;

Inicializacija
Visi turintis kiek nors programavimo patirties dirbant su kitomis kalbomis, gali bti kiek sutrik iame take. Mes kalbjome apie kintamuosius, kad daugumoje kalb priimta pradioje kintamuosius paskelbti ir inicijuoti, pvz. Java ar Visual Basic. iuose kalbose js turite paskelbti ir inicijuoti kintamuosius prie pradedant jais naudotis. Paskelbimas ar iniciacija paprasiausiai reikia, kad prie pradedant naudotis kintamuoju, jums reikia paskelbti, kad toks egzistuoja. Pavyzdiui tai daroma Dim raktaodiu Visual Basic kalboje:
Dim newVariable newVariable = "Hello"

itas kodas nra PHP ir veiks TIK su Visual Basic. Taiau PHP jums ito visko daryti nereikia. Tai nereikalaujama ir tiesa pasakius kai js panaudojate kintamojo vard pirm kart, jis yra automatikai sukuriamas
$newVariable = "Hello";

Taiau PHP iniciacija turi ir vien didel trkum. Mes jau anksiau minjome, kad visi kintamieji turi savo duomen tip ir, kad PHP sukurdama kintamj automatikai priskiria jam duomen tip. Inicijuojant kintamj kituose kalbose js daniausiai turite nurodyti kokio tipo jis yra. Pavyzdiui Visual Basic:
Dim newVariable As String newVariable = "Hello"

itas kodas nra PHP ir veiks TIK su Visual Basic. PHP kalboje js negalite to padaryti. Tai gali privesti prie vienos problemos kas atsitiks, jei PHP automatikai priskirs kintamojo tip, bet tas tipas visai ne tas kokio js norite? Kas atsitiks jei beskaiiuojant, pusiaukelje, js usimanysite pakeisti duomen tip? Pavyzdiui, js galite sugalvoti leisti vartotojui vesti informacij, tokia kaip variklio tris ar mainos pavadinimas - Volkswagen Golf 2.0CL, kaip pavyzdys. Tai btu laikoma tekstu. Tad, kas atsitiktu, jei js nortumte igauti variklio tri ir panaudoti skaiius atliekant matematines operacijas? Js turtumte sivaizduoti daugel kit situacij panai i.

29

Tad, bet kokiu atveju jums reikia mokti konvertuoti vieno tipo duomenis kitus tipus.

Konvertavimas
PHP suteikia daug galimybi ne tik konvertuoti duomenis, bet ir nustatyti koks duomen tipas buvo suteiktas inicijuojant kintamj. Tiesa pasakius daug sunkaus darbo yra panaikinama, nes PHP daniausiai visk atliek u tave. Dar kart visas procesas smarkiai skiriasi nuo kit programavimo kalb, kurios paprastai leidia veiksmus tik tarp keletos vienodo tipo kintamj. Tuo tarpu su PHP js galite padaryti sekanius veiksmus:
$EngineType = "2.0L"; $TaxRate = 3; $TaxPaid = $EngineType * $TaxRate;

Tai nepakeiia nei vieno kintamojo tipo. Paleiskime it pavyzd ia vietoje, kad sitikintume kaip viskas veikia.

Ibandykite Numanomas konvertavimas

1. Atsidarykite savo teksto redagavimo program ir paraykit sekant kod:


<HTML> <BODY> <?php $EngineType = "2.0L"; $TaxRate = 3; $TaxPaid = $EngineType * $TaxRate; echo "Engine Type: $EngineType<BR>"; echo "Tax Rate: $TaxRate<BR>"; echo "Tax Paid: $TaxPaid"; ?> </BODY> </HTML>

2. Isaugokite kaip convert.php 3. Atidarykite su narykle.

Kaip tai veikia


Tai nesiskiria nuo ms ankstesni pavyzdi naudojant matematines operacijas. Pirmosios trys linijos sukuria tris kintamuosius. Pirmasis $EngineType yra eiluts tipo:
$EngineType = "2.0L";

Antrasis $TaxRate yra skaiius:

30

$TaxRate = 3;

Treioji linija atlieka kalkuliacij, daugindama $EngineType ir $TaxRate turin, bei patalpindama rezultat $TaxPaid:
$TaxPaid = $EngineType * $TaxRate;

ia PHP sako, "man nerpi, kad kintamajame $EngineType, yra L, a matau skaii ir galiu j panaudoti daugybos veiksme. Paskutins trys linijos parodo, kad ms kintamieji gavo tokias reikmes apie kokias mes ir mstme:
echo "Engine Type: $EngineType<BR>"; echo "Tax Rate: $TaxRate<BR>"; echo "Tax Paid: $TaxPaid";

Tipo keitimas
Iki iol PHP pati keit duomen tipus, bet jei js norite naujai kuriamam kintamajam suteikti tam tikr tip galite tai padaryti ir patys. Viskas k jums reikia padaryti - yra nurodyti kintamojo reikm ir tada nustatyti kintamojo tip prie jam pradedant realiai veikti. itas bdas vadinamas keitimu:
$NewVariable = 13; $NewVariable = (string) $NewVariable;

Kodas priskyr ms kintamajam skaitin reikm. Tada buvo paimta skaitin reikm ir paversta tekst antroje eilutje. Js taip pat galite ir paversti duomenis atgal:
$NewVariable = 13; $NewVariable = (string) $NewVariable; $NewVariable = (integer) $NewVariable;

gettype ir settype
Kaip mes jau minjome PHP turi galimyb nustatyti kintamojo duomen tip. Tai atliekama per gettype()funkcij. Kintamasis skliausteliuose pateiks savo tip, kaip parodyta emiau:
gettype($number);

Norint k nors pavaizduoti ekrane, jums reiks it funkcij susieti su echo() komanda:
$number = 5; echo gettype($number);

Tai pateiks atsakym Integer interneto puslapyje. Yra ir panai funkcija kuria turi PHP, vadinam settype() ji panaiai kaip ir tipo keitimas, leidia jums specialiai nurodyti duomen tip. skliaustelius terpiamos dvi reikms kintamasis kuriam norite nurodyti tip, ir tipas kur norite suteikti. Tai veikia sekaniai:
$number=10; settype($number, "string");

Norint pademonstruoti, kad tai tikrai suveik, js galite parodyti gaut tip su gettype funkcij:
echo gettype($number);

Dabar ekrane raoma String.

31

isset, unset, ir empty


Yra dar trys PHP funkcijos kurios bs naudingos dirbant su kintamaisiais. Pirmoji funkcija, isset(), leidia jums nustatyti ar kakoks kintamasis su konkreiu vardu yra sukurtas ar ne. Jums tereikia pateikti funkcijai vien parametr kintamojo vard. Jei tai suderinti su echo() komand:
echo isset($number);

Bus pateiktass numer 1, jei kintamasi pavadintas $number jau egzistuoja, kitu atveju funkcija nepateiks nieko, net nulio. Sekanti funkcija, unset(), skirta visikai sunaikinti kintamj ir itrinti visas su kintamuoju susijusias reikmes. Vlgi tereikia vieno parametro kintamojo vardo:
unset($number);

Taiau sitikinkite, kad darote kaip tik tai k norite, nes ir kintamasis ir jo reikm bus itrinti. Treioji i i funkcij, empty(), yra login prieingyb isset()funkcijai. Ji naudojama tokiu paiu bdu kaip ir isset(), sugraindama 1, jei nra kintamojo $number, arba jei $number lygus 0 arba "" (tuia eilut), ir negrainama nieko jei kintamasis egzistuoja:
echo empty($number);

Tai praktikai ubaigia ms susipainim su kintamaisiais. Taiau, yra dar vienas tipas kur pateikia PHP ir apie kur mes dar nenekjome.

Aplinkos kintamieji (Environment Variables)


Aplinkos kintamieji (dar inomi kaip PHP kintamieji) yra elementai nustatyti u PHP rib, bet pasiekiami per PHP kalb. ie kintamieji daniausiai pateikia informacij apie kliento-serverio transakcijas. Tai gali bti informacija apie HTTP uklausimus ar HTTP atsakymus ir jie turi tok pat format kaip ir js sukurti kintamieji. Visas skirtumas tas, kad jie buvo sukurti nepriklausomai nuo vartotojo ir nereikalauja jokio sikiimo i jo puss. Js galite juos pamatyti naudodami phpinfo()funkcij kuri mes naudojoms pirmame skyriuje. Js taip pat galite gauti kiekvieno j reikm atskirai su echo() komand:
echo $HTTP_COOKIE_DATA;

Kodas parodys, bet kokio naudojamo cookies turin. Kitas naudingas aplinkos kintamasis yra $HTTP_USER_AGENT kuris nusako kliento narykls tip:
echo $HTTP_USER_AGENT;

Js galite naudoti ia reikmes savo programose, ar padaryti jas pritaikytas kakokiai konkreiai naryklei. Kitas labai naudingas kintamasis $HTTP_FROM nurodantis uklausim daranio vartotojo elektroninio pato adres. J yra ir daugiau.

Apibendrinimas
itas skyrius aprp didel informacijos apie programavimo kalb dal, gana trumpoje apvalgoje. Mes pradjome skyri pristatydami PHP pavyzd, parodydami, kad PHP skriptai yra trij dali miinys teksto, HTML ir PHP kalbos. Mes pradjome programavimo kalbos pristatym nuo kintamj

32

koncepcijos metodo kuriuo PHP saugo ir gauna informacij (kaip ir dauguma programavimo kalb). Mes inagrinjome skirtingus duomen tipus ir sigilinome tekstinius ir skaitinius tipus. Taip pat pairjome kaip konvertuoti vien tip kit, bei pristatme konstantas, kurios niekada nekeiia savo reikms. Ir galiausiai suinojome, kad yra tokie aplinkos kintamieji, kurie tiesa pasakius net nepriklauso nuo PHP.

Veriant skyri buvo praleista dalis apie client-server ry, tai kaip siuniamos uklausos server ir kaip jos apdirbamos, bei HTTP pagrindai.

33

3
Duomen gavimas i kliento
Prie tai buvusiame skyriuje mes inagrinjome daug praktini pavyzdi, priskirdami reikmes kintamiesiems ir tada pavaizduodami kintamj reikmes ekrane. Mes tiesa pasakius neprame vartojo vesti joki duomen ir nereikalavom jokio interaktyvumo, tad i esms mes pateikme jau i anksto inom HTML rezultat. Taiau prie tai seks skyrius ruo mums dirv, kad mes galtumme gauti informacij i vartotojo, j isaugoti, atlikti su j veiksmus, bei grainti vartotojui rezultatus kaip web puslapio dal. Pirmiausiai mes apvelgsime HTML formas tai pats populiariausias bdas kuriuo vartotojai ved informacij. Tada suinosime apie du metodus kurias HTML naudojasi perduodama informacija i vieno puslapio kit. Mes suinosime kaip PHP gali greitai perimti ir panaudoti iuos duomenis. Yra daug metodu kaip HTML formos gali gauti informacij, pradedant teksto langeliais, varnelmis, slaptaodi langeliais ir perjungimo (radio) mygtukais. Mes taip pat inagrinsime pavyzdius kaip pateikti informacij atgal io skyriaus eigoje. Paskutin io skyriaus dalis aptaria reikmi panaudojim, kaip atsak formoje vest informacij, jei reikia. io skyriaus pagrindins uduotys :
Du bdai sisti formos informacij GET ir POST Teksto langeliai Varnels Pasirinkimo mygtukai Srao langeliai Paslpti formos laukai Slaptaodiai Submit ir Reset mygtukai Informacijos pagrstos vartotojo vestj grainimas

34

Web Formos
Tikriausiai HTML sritis sukelianti daugiausiai nesusipratim ir klaid yra formos. Visa tai kyla todl, kad norint pasinaudoti duomenimis i formos, jums reikia naudoti kokia kit technologij. Tai gali bti paprasta skriptavimo kalba JavaScript, ar prietaringai vertinama Active Server Pages (ASP), CGI programa ar tikra programavimo kalba tokia Java Servlets. Norint tinkamai naudotis klientas-serveris ryiu, negalima paprasiausiai paimti duomenis i vartotojo ir vliau tokius paius atrayti jam atgal. skyri mes pradsime nagrindami HTML <FORM> reikm. <FORM> tago atributai yra tiesiogiai naudojami PHP suprantant kas gi buvo pasista.

FORM Tagas
Kas atsitinka kai js isiuniate HTML forma? Vartotojas upildo vairiausius laukelius ir paspaudia siuntimo mygtuk kai yra pasiruos, informacija yra suformuojama vienu i dviej bd ir isiuniama web server. Tada web serveris gali j perduoti PHP skript. PHP savo ruotu manipuliuoja ia informacija ir isiunia j kaip HTTP atsakymo dal atgal narykl. Viskas k jums reikia padaryti yra parayti gryn HTML puslap su atsidaraniais ir usidaraniais <FORM> tagais. Visi kontrols elementai, tokie kaip teksto langeliai, varnels, pasirinkimo mygtukai patalpinti tarp <FORM> tag, automatikai tampa formos dalimi ir yra isiuniami server.

FORM atributai
<FORM> tagas turi daugyb atribut, bet mes galime isiversti naudodami tik du i j, ACTION ir METHOD. Kiti atributai, tokie kaip ID, CLASS, DIR, LANG, LANGUAGE, NAME, STYLE, ir TITLE yra universals daugumai HTML tag ir nebus plaiau aikinami. Sudtingesnius atributus ACCEPT-CHAR ir ENCTYPE, kurie nustato kuoduot ir MIME-TYPE formos duomenis mes specialiai nagrinsime 10 skyriuje. Taip pat yra TARGET atributas, kuris panaiai kaip ir <A HREF> tagas, leidia nustatyti kuriame lang ar frameryje rodyti gautus kaip atsakym duomenis.

ACTION
ACTION atributas pasako kur puslap eiti kai vartotojas paspaudia siuntimo mygtuk. Nesvarbu ar itas puslapis bus HTML, PHP ar dar koks nors. Jis gali bti panaudotas kaip nuoroda i kit HTML puslap:
<FORM ACTION="test.html"> ... </FORM>

arba PHP puslap:


<FORM ACTION="test.php"> ... </FORM>

Taiau kai mes nustatome, ACTION atribute PHP puslap, mes i tikro siuniame informacij, vest form, serveriui, kad PHP variklis galtu su j dirbti. ACTION atributas paprasiausiai sako serveriui kok puslap eiti po to jei js paraysite test.html vietoj test.php, tada puslapis nebus pasistas PHP ir nieko nebus parodyta nebent PHP buvo sukonfiguruota perimti .html

35

puslapius. Greitai mes pamatysime k PHP daro kai gauna form, bet prie tai mums reikia isiaikinti su sekaniu FORM atributu METHOD.

METHOD
METHOD atributas kontroliuoja bda kuriuo informacija yra siuniama server. Kaip jau minjome anksiau tai gali bti atlikta dviem bdais. Tai GET ir POST metodai, juos galite naudoti sekaniai:
<FORM ACTION="test.php" METHOD=GET>

ar
<FORM ACTION="test.php" METHOD=POST>

I tikro yra ir daugiau reikmi kurias galima suteikti METHOD atributui, HEAD, PUT, LINK, UNLINK, OPTIONS, DELETE, TRACE ir CONNECT. Taiau ios opcijos naudojamos nedanai ir mes j plaiau neaptarinsime. Inagrinkime dvi METHOD reikmes plaiau.

GET
Mes pradsime nuo GET reikms. Tai pasako naryklei sujungti URL formos reikmes kurias vartotojas ved. Narykl prideda klausimo enkl URL gale, nurodydama kur baigiasi URL ir prasideda formos informacija. Tada formos informacija yra persiuniama vardas/reikm poromis. Lengviau parodyti, nei plaiau paaikinti. Vardas/reikm poros veikimas labai panaus kintamojo veikim. Pirmoji dalis yra vardas, kuris atlieka identifikatoriaus vaidmen. Antroji dalis yra reikm kuri priskirta vardui. Pavyzdiui:
?animal=cat

ia "animal" yra vardas, kai tuo tarpu "cat" yra reikm. Tai pridedama prie URL, kaip parodyta emiau:
http://www.nonexistentserver.com/test.php?animal=cat

Narykl automatikai prideda informacija prie URL kai siunia j server. Js galite pridti prie URL ir daugiau nei vien vardo/reikms por, jei atskirsite kiekvien por & enklu. Su dviem poromis URL gale tai atrodytu taip:
?furryanimal=cat&spikyanimal=porcupine

Kaip URL dalis, taip:


http://www.nonexistentserver.com/test.php?furryanimal=cat&s pikyanimal=porcupine

Dalis prikabinta prie URL yra inoma kaip uklausimo eilut (query string). Mes jau minjome, kad vardo/reikms pora yra labai panai kintamuosius. Tiesa pasakius kai jie patenki PHP visada padaro juos pasiekiamus kaip kintamuosius. Tad, jei js pasiuntte js form server ir persiklte kit puslap PHP padaro juos prieinamus kaip kintamuosius.

POST
Viena i uklausimo eiluts nepatogum yra jos vieas perdavimo bdas. Jei nenorite, kad informacija bt rodoma URL eilutje, jums reiks pasikliauti POST metodu. Jis veikia beveik identikai kaip ir GET metodas; skirtumas tas, kad informacija i formos yra siuniama HTTP uklausimo viduje, o ne URL. Tai

36

reikia, kad informacija yra nematoma visiems, nes ji neprikabinta prie URL. POST taip pat leidia sisti didesnius duomen kiekius yra fizinis limitas kiek informacijos gali bti pasista kaip URL dalis.

HTML Formos Elementai ir PHP


Mes jau isiaikinome proceso kai kurias detales, tad apvelkime daniausiai naudojamus HTML elementus kuriuos galite naudoti rinkdami informacij formoje, bei kaip naudoti PHP dirbant su ia informacija. Visi tolau toliau pateikiami pavyzdiai reikalauja dviej puslapi. Pirmojo puslapio pagalba gaunama informacija kuri pateikia vartotojas, o antrasis pasiunia jau apdorota informacija i web serverio ir PHP variklio atgal vartotojo narykl. Pirmasis puslapis neturi PHP kodo i viso. Tiesa pasakius, daugelis puslapi, kurie turs formas bus sudaryti grynai i HTML ir turs galnes .htm ar .html. Mes stebsime format visuose ms pavyzdiuose. Pradkime paint su populiariausiais kontrols elementais.

Teksto langeliai (Text Boxes)


Teksto langeliai turbt yra vieni inomiausi su kurias jums teko susidurti klaidiojant po Internet. Jie sukuriami naudojant <INPUT> element ir nustatant TYPE atribut tekstui.
<INPUT TYPE="Text" NAME="TextBox1">

J privalumas tas, kad jie gali priimti vis teksto sakin i vartotojo. Tai daro juos idealius, kai neinoma kiek atsakym (simboli ar odi) parays vartotojas. Tipinis teksto laukelis atrodo taip:

Mes gana ilgai nedarme praktini usimim, tad pereikime prie j. Mes paaikinsime, kas vyksta po to kai ibandysime pavyzd. iame pavyzdyje mes papraysime parayti vartotojo parayti jo mgstamiausi autori ir parodysime j kitame puslapyje.

Ibandykite Teksto langeli naudojimas


tekst:
<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="text.php"> Who is your favourite author? <INPUT NAME="Author" TYPE="TEXT"> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

1.

Atidarykite teksto redagavimo program ir paraykit sekant HTML

2.

Isaugokite it kod kaip text.html fail.

37

3. Udarykite it fail ir atsidar nauj, paraykite:


<HTML> <HEAD></HEAD> <BODY> Your favorite author is: <?php echo $Author; ?> </BODY> </HTML>

4. Isaugokite it kod kaip text.php fail. 5. Atidarykite puslap text.html savo naryklje, atsakykite klausim

6. Paspauskite ant Submit Query mygtuko ir js turtumte pamatyti js parayta vard, taip kaip pavyzdyje.

Kaip tai veikia


Vis pirma, atkreipkite dmes URL ankstesniame paveiksliuke (antras ms sukurtas puslapis). Prie text.php galo prikabinta uklausos eilut. Tai buvo pridta narykls, nes mes nurodme tai padaryti text.html, faile su sekaniu kodu:
<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="text.php"> Who is your favourite author? ...

38

Nustatydami atribut GET mes nurodme ms formos informacij sisti kaip uklausimo eilut. Inagrinkime pai uklausimo eilut. Apatiniame pavyzdyje ji rodo:
?Author=Juan+Rulfo

Mes jau sakme, kad uklausimo eilut susidaro i vardas/reikm poros. Jums nereikia bti Sherlock Holmse, norint suprasti, kad Author yra vardas, o Juan Rulfo reikm iame pavyzdyje. Uklausimo eilut paima Author kaip vard i parykinto kodo pirmame ms puslapyje, text.html:
Who is your favourite author? <INPUT NAME="Author" TYPE="TEXT"> <BR>

NAME atributas <INPUT> tago nustato kad io elemento vardas yra Author. Reikm iam elementui mes priskyrme para tekst, iuo atveju autoriaus pavard tekstiniame laukelyje. Gautoji uklausos eilut patenka ms antrj fail, tad inagrinkime ir j. Tiesa pasakius tai tik viena teksto eilut ir viena PHP kodo eilut:
Your favorite author is: <?php echo $Author; ?>

PHP komanda parodo kintamojo $Author turin. Ms kode mes niekur patys nesame sukr kintamojo $Author. Mes tik sukrme teksto laukl ir suteikme jam vard Author. Kai mes pasiuntme form web server ir PHP varikl jis pats sukr toki kintamj. Jei mes sukurtumme laukeli pavadint "Name", tada ms kintamasis btu $Name. Tai viskas k daro ms pavyzdio programa.

Teksto laukeliai (Text Areas)


Jei norite turti teksto lauk kuriame vartotojas galtu vesti kelet ir daugiau teksto linij, jums reiks visai kitokio HTML komponento. Js netgi nenaudosite HTML <INPUT> tago; vietoj jo js naudosite <TEXTAREA> tag. <TEXTAREA> turi kiek kit sandar ir jame js galite nurodyti kiek eilui ir stulpeli jis turi bti. Pavyzdiui:
<TEXTAREA NAME="WebSites" ROWS="30" COLS="50">

Kaip ir prie tai buvs komponentas jis skirtas priimti vis sakin i vartotojo. <TEXTAREA> privalimas, kad js galite nustatyti dyd, tad jis gali turti kelet teksto eilui. <TEXTAREA> reikalauj ir udaranio tago, tad tarp j js galite dti ir savo tekst. Pavyzdiui:

Pasiirkime kit pavyzd. iame mes darysime t pat kaip ir ankstesniame ir pateiksime visus puslapius, kuriuos ves vartotojas. Taiau mes padarysime vien esmin pakeitim perduodant informacij, kaip tuoj patys sitikinsite.

Ibandykite naudojimasis teksto laukeliais


1.
Dar kart atsidarykite savo patikim teksto redaktori ir paraykite:

39

<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="textarea.php"> What are your favourite web sites? <TEXTAREA NAME="WebSites" COLS="50" ROWS="5"> http:// http:// http:// http:// </TEXTAREA> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip textarea.html. 3. Udarykite prie tai redaguot fail ir pradkite nauj:
<HTML> <HEAD></HEAD> <BODY> Your favorite web sites are: <?php echo $WebSites; ?> </BODY> </HTML>

4. Isaugokite kaip textarea.php. 5. Atidarykite textarea.html savo naryklje ir paraykite keletos web puslapi adresus:

6. paspauskite ant Submit Query kai jau parate puslapi adresus. Js neturite upildyti j vis, net gi mes palikome vien tui. Panaus paveiksllis turtu atsirasti pas jus:

40

Kaip tai veikia


Ne taip grau ir tvarkinga kaip js ankstesniame pavyzdyje ar ne? Taiau neleiskite, kad atitrauktu jus nuo svarbaus dalyko URL kuris yra:
http://chrisu/textarea.php

ia nra prikabinta eiluts. Taip atsitiko todl, kad mes pasirinkome METHOD bda POST.
<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="textarea.php"> What are your favourite web sites? ...

Tai vienintelis dalykas kur mums reikjo padaryti, kad formos detals nebtu vieai matomos. Yra ir kit domi dalyk, <TEXTAREA> tago sintaks:
<TEXTAREA NAME="WebSites" COLS="50" ROWS="5"> http:// http:// http:// http:// </TEXTAREA>

Mes nustatme, kad teksto laukas turi bti 5 eili aukio ir 50 enkl ploio. Tekstas kitaip nei paprastame HTML nereikalauja perklimo kit eilut (su <BR> ar kitaip), utenka pradti nauj linij ir jis vaizduojamas naujoje. Mes nustatme, kad TEXTAREA vardas btu "WebSites", ir tada sekaniame puslapyje mes pasinaudojome iuo kintamuoju kaip $WebSites, kalbant dar kart mes turime identik situacij, kai formos elementas tampa kintamuoju:
... Your favorite web sites are: <?php echo $WebSites; ?> ...

Varnels (Check Boxes)


Varnels, kaip ir teksto laukeliai yra sukuriami HTML kalboje su <INPUT> tagu. Jas sudaro vienas laukelis, kur galima paymti. Tai nereikalauja joki duomen i vartotojo, iskyrus paspaudimo, tad visi duomenys kuriuos turs varnels smarkiai skirsis nuo teksto laukeli. HTML sintaks yra panai, skiriasi tik tipas:
<INPUT NAME="Choice" TYPE="Checkbox">

Varnels naudojamos kai uduodamas grietas klausimas taip/ne, nepaliekant kit variant:

41

Varnels taip pat turi CHECKED atribut (kuriam nereikia suteikti reikms). Jei js varnelei paraysite atribut, ji bus paymta i pat pradi
<INPUT NAME="Choice" TYPE="Checkbox" CHECKED>

Tuo paiu VALUE atributas yra "on" i pat pradi.

Visi varneli privalumai atsiskleis tik kai jas pradsite naudoti, tad negaidami laiko pairkime pavyzd.

Ibandykite varneli naudojimas

1.

Dar kart atsidarykite savo patikim teksto redaktori ir paraykite:

<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="checkbox.php"> Have you ever eaten haggis before? <INPUT NAME="Choice" TYPE="Checkbox"> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip checkbox.html. 3. Udarykite prie tai redaguot fail ir pradkite nauj:
<HTML> <HEAD></HEAD> <BODY> <?php echo $Choice; ?> </BODY> </HTML>

4. Isaugokite kaip checkbox.php. 5. Atidarykite checkbox.html


savo pasirinktoje naryklje:

42

Priklausomai nuo to ar buvo paymta varnel prie paspaudiant Submit Query, js galsite du rezultatus.

Kaip tai veikia


Js tikriausiai jau pripratote prie io ritualo. Dar kart, jei pairsite URL ia nra joki prikabint duomen. Taip yra todl, kad mes POST metod. Taip nurodyta ms pirmame faile, checkbox.html:
<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="checkbox.php">

Ms formos elementas yra varnel, tad j sukuriame su <INPUT> tagu:


Have you ever eaten haggis before? <INPUT NAME="Choice" TYPE="Checkbox">

Tai viskas k galima pasakyti apie ms pirmj fail. Antrajame, checkbox.php, mes naudojams PHP kintamuoju, kuris dar kart buvo toks pats kaip ir formos varnels vardas:
<?php echo $Choice; ?>

Visas skirtumas, kad dabar buvo sukurtas kintamasis su reikme kurios mes jam nesuteikme. Jei varnel buvo paymta, jos reikm yra 'on'. Jei ne tada reikms nra.

Keletas varneli
Kas atsitiks jei norsime naudoti daugiau nei vien varnel toje paioje formoje. Jei js susipain su pasirinkimo mygtukais, tai inote, kad pasirinkdami vien js tuo paiu metu nuimate paymjim nuo kit. Varnels dirba kitaip. J privalumas tas, kad kiekviena varnel yra atskiras elementas. Tad js galite paymti kelet varneli ra nepaymti nei vienos. Pavyzdiui mes galime modifikuoti ms prie tai buvus pavyzd, kad jis atrodytu taip:

Taip ir padarykime, mes grime atgal ir modifikuosime prie tai buvus pavyzd, taip kad jis turtu kelet varneli.

43

Ibandykite keletos varneli naudojimas

1. Atidarykite teksto redaktori, pakraukite checkbox.html, ir pagal pavyzd paraykite:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="checkboxes.php"> Have you ever eaten haggis before? <INPUT NAME="Choice1" TYPE="Checkbox" VALUE="Haggis"> <BR> Have you ever eaten snails before? <INPUT NAME="Choice2" TYPE="Checkbox" VALUE="Snails"> <BR> Have you ever eaten locusts before? <INPUT NAME="Choice3" TYPE="Checkbox" VALUE="Locusts"> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip checkboxes.html. 3. Udarykite it fail ir atsidarykite nauj:


<HTML> <HEAD></HEAD> <BODY> <?php echo "$Choice1<BR>"; echo "$Choice2<BR>"; echo "$Choice3<BR>"; ?> </BODY> </HTML>

4. Isaugokite kaip checkboxes.php. 5. Atidarykite checkboxes.html


savo naryklje.

6. Paspauskite kelet pasirinkim ir paspauskite siuntimo mygtuk, js turtumte gauti kak panaaus:

Kaip tai veikia


Mes nustatme VALUE atribut kiekvienai varnelei pirmajame faile:
Have you ever eaten haggis before? <INPUT NAME="Choice1" TYPE="Checkbox" VALUE="Haggis"> <BR>

44

Have you ever eaten snails before? <INPUT NAME="Choice2" TYPE="Checkbox" VALUE="Snails"> <BR> Have you ever eaten locusts before? <INPUT NAME="Choice3" TYPE="Checkbox" VALUE="Locusts">

Tai duod rezultat kiekvienai varnelei jei ji buvo paymta. Tad jei Choice1 varnel buvo paymta, jai suteikiama Haggis reikm (vietoj standartinio 'on'), ir i reikm mes perduodame $Choice1 kintamajam checkboxes.php puslapyje. Jei varnel nebuvo paymta tai nieko nra perduodama ir kintamasis negauna reikms. Antrame faile, checkboxes.php, mes parodysite i kintamj turin, tai taip:
echo "$Choice1<BR>"; echo "$Choice2<BR>"; echo "$Choice3<BR>";

I ekrano nuotraukos js turbt supratote, kad Haggis ir Snails varnels buvo paymtos, Locusts ne.

Pasirinkimo mygtukai (Radio Buttons)


Pasirinkimo mygtukai yra savotiki varneli pusbroliai. Jei jms reikalinga pasirinkimo galimyb, bet reikia tik vieno galimo atsakymo, turtumte naudoti pasirinkimo mygtukus. Pavyzdiui klausimas su keletu atsakymo variant:

Vlgi pasirinkimo mygtukai yra sukuriami su <INPUT> tagu, nustatant TYPE atribut kaip Radio.
<INPUT NAME="Question1" TYPE="Radio" VALUE="Porto">

Pasirinkimo mygtukai kaip ir varnels turi atribut CHECKED. Jei js suteiksite atribut, pasirinkimo mygtukas bus paymtas i pat pradi:
<INPUT NAME="Question1" TYPE="Radio" CHECKED>

Jei nesuteisite VALUE atributo, pasirinkimo mygtuko reikm bus "on". Norint sujungti grup pasirinkimo mygtuk, visikai prieingai nei varnelms, reiia suteikti vienodus vardus. Pavyzdiui:
<INPUT NAME="Question1" TYPE="Radio" VALUE="Porto"> <INPUT NAME="Question1" TYPE="Radio" VALUE="Lisbon"> <INPUT NAME="Question1" TYPE="Radio" VALUE="Madrid">

iuo bdu js sakote web serveriui, kad ie pasirinkimo mygtukai yra susyj. Jei suteikti jiems skirtingus vargus js galsite ymti juos visus, kas prietarauja paiai j paskiriai. Pabandykime atlikti pavyzd su sekani kodu.

Ibandykite pasirinkimo mygtuk naudojimas

1. Atidarykite savo redaktori ir kaip tikriausiai atspjote paraykite sekant


kod:

45

<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="radio.php"> What is the capital of Portugal? <BR> <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Porto"> Porto <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Lisbon"> Lisbon <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Madrid"> Madrid <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip radio.html. 3. Udarykite it fail ir sukurkite nauj:


<HTML> <HEAD></HEAD> <BODY> <?php echo "You selected the answer: $Question1"; ?> </BODY> </HTML>

4. Isaugokite kaip radio.php. 5. Atidarykite radio.html


savo naryklje ir pasirinkite atsakym:

6. Paspauskite Submit Query ir pamatysite savo pasirinkimo rezultatus:

46

Kaip tai veikia


Mes vl pasinaudojome GET metodu, tad rezultatai matomi URL eilutje. Pirmasis puslapis, radio.html, padaro tris pasirinkimo mygtukus. Jie visi turi t pat vard, Question1, bet su trimis skirtingomis reikmmis, atspindiniomis tris skirtingus atsakymus:
<INPUT NAME="Question1" TYPE="Radio" VALUE="Porto"> Porto <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Lisbon"> Lisbon <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Madrid"> Madrid

Tada ms antrasis puslapis, radio.php, pradeda dirbti jame esantis PHP kodas ir mums tereikia parodyti vieno kintamojo reikm, nes tegali bti tik vienas atsakymas ms klausim:
<?php echo "You selected the answer: $Question1"; ?>

Liko tik 2 formos elementai kuriuos mes turime apvelgti, tad nieko nelaukdami tai padarykime.

Srao langeliai (List Boxes)


Srao langeliai arba isiskleidiantys sraai paprastai pateikia kelet variant. HTML jie sukuriami su <SELECT> ir <OPTION> tagais. I esms jie suteikia tokias paias funkcijas kaip ir pasirinkimo mygtukai, paprastai suteikdami galimyb pasirinkti tik vien dalyk i srao. Pavyzdiui:

<SELECT> tagas, kuris sukuria sra turi kelet <OPTION> tag. <OPTION> tagai savyje turi kiekvien srao element.
<SELECT NAME="Price"> <OPTION>Under $5,000</OPTION> <OPTION>$5,000-$10,000</OPTION> <OPTION>$10,000-$25,000</OPTION> <OPTION>Over $25,000</OPTION>

47

</SELECT>

Taiau galima vartotojui pasirinkti ir kelet srao element vienu metu:

Js galite liesti keleto element pasirinkim nustatydami MULTIPLE atribut <SELECT> tage. Tai priveria PHP sukti galv dl dviej dalyk. Bet geriau atlikime pavyzd su abiems iais elementais ir visk patys pamatysime. Mes paklausime vartotojo apie mainos kain ir jos variklio tr. Pirmasis klausimas leis pasirinkti tik vien atsakym; antrasis leis pasirinkti kelet (tai daroma paspaudus Shift klavi).

Ibandykite srao langeli naudojimas

1. Atidarykite savo redaktori ir paraykite sekant kod:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="listbox.php"> What price of car are you looking to buy? <BR> <BR> <SELECT NAME="Price"> <OPTION>Under $5,000</OPTION> <OPTION>$5,000-$10,000</OPTION> <OPTION>$10,000-$25,000</OPTION> <OPTION>Over $25,000</OPTION> </SELECT> <BR> <BR> What size of engine would you consider? <BR> <BR> <SELECT NAME="EngineSize[]" MULTIPLE> <OPTION>1.0L</OPTION> <OPTION>1.4L</OPTION> <OPTION>1.6L</OPTION> <OPTION>2.0L</OPTION> </SELECT> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip listbox.html. 3. Udarykite it fail ir atsidarykite nauj:


<HTML> <HEAD></HEAD> <BODY> <?php echo "Price Range: $Price"; echo "<BR>Engine Size(s): $EngineSize[0]"; echo "$EngineSize[1]"; echo "$EngineSize[2]"; echo "$EngineSize[3]"; ?>

48

</BODY> </HTML>

4. Isaugokite kaip listbox.php. 5. Atidarykite listbox.html savo naryklje ir pasirinkite vien reikm i virutinio srao ir kelet i apatinio:

6. Paspauskite ant Submit Query:

Kaip tai veikia


Padalinkime ms paaikinim kiekvieno srao veikimo princip nagrinjim atskirai. Ms pirmame puslapyje listbox.html, mes sukrme srao pasirinkim su keturiom galimybm, galima buvo pasirinkti tik
<SELECT NAME="Price"> <OPTION>Under $5,000</OPTION> <OPTION>$5,000-$10,000</OPTION> <OPTION>$10,000-$25,000</OPTION> <OPTION>Over $25,000</OPTION> </SELECT>

Antrajame puslapyje, listbox.php, mes nusiuntme pasirinkim kintamj $Price.


<?php echo "Price Range: $Price"; echo "<BR>Engine Size(s): $EngineSize[0]"; ...

ia nieko ypatingo nra ir visa tai jums jau turtu bti paystama. Ms antrasis pasirinkimo sraas kiek skiriasi nuo ms jau matyt:

49

<SELECT NAME="EngineSize[]" MULTIPLE> <OPTION>1.0L</OPTION> <OPTION>1.4L</OPTION> <OPTION>1.6L</OPTION> <OPTION>2.0L</OPTION> </SELECT>

Na viskas irgi panau iskyrus virutin eilut. Virutin eilut nustato atribut NAME kaip EngineSize[]. Tok kintamj PHP skaitys kaip masyv (array), ia vienas kintamasis savyje gali turti daugyb kit, vis j vienas vardas, skiriasi tik pozicijos eilje numeris [1], [2], [3], ... Dabar tikiuosi jums kiek aikiau.
echo echo echo echo echo "Price Range: $Price"; "<BR>Engine Size(s): $EngineSize[0]"; "$EngineSize[1]"; "$EngineSize[2]"; "$EngineSize[3]";

Mes sakme, kad PHP kurdama masyv, sukuria nauj kintamj su tokiu paiu vardu, bei indeksu. Mes turime keturis elementus sra, tad bus keturi element masyvas. Juos reikia parodyti inoma jei jie pasirinkti. Masyvo indeksas visada prasideda nuo 0, $EngineSize[0] nurodo pirmj pasirinkim srae. Jie turs i reikm tik tuo atveju, jei jie mes j pasirinksime, kitu atveju pirmuoju numeriu eis bet kuris ms pasirinktas elementas i srao. iuo atveju mes tikrai j pasirinkome, tad $EngineSize[0] itikro turi reikm 1.0L. Tas pats vyksta su $EngineSize[1] kuris turi antrj reikm. $EngineSize[2] ir $EngineSize[3] neturi jokios reikms nes mes nepasirinkome daugiau reikmi.

Paslpti formos laukai


Yra atvju kai js norite paimti informacij esani web puslapyje ir perduoti j kitam puslapiui be vartotojo sikiimo. Yra dar vienas <INPUT> tipas kuris leidia dti informacija (ir j sisti) tekstin laukel, taiau vartotojui jis lieka nematomas. itas tipas inomas kaip paslpti formos laukai (hidden form field). Paslpti formos laukai veikia kiek kitaip nei ms prie tai aptarti formos elementai. Jie tikriausiai yra naudingiausi PHP puslapiuose kurie turi formas, nes js galite naudoti juos sisdami kintamj reikmes. Tipinis paslptas laukelis atrodo taip:
<INPUT TYPE=HIDDEN NAME=Hidden1 VALUE="Secret Message">

Mes negalime parodyti jo paveiksliuko, nes itas elementas nepasirodo ekrane. Bet kokia forma kuri buvo pasista turs kintamj $Hidden1 kurio reikm bus "Secret Message". Norint pasinaudoti paslptais laukais PHP puslayje js galite parayti vis HTML form per echo() komand tokiu bdu js galite sisti PHP kintamj reikmes per HTML elementus:
<?php $Message1="This message is invisible"; echo "<FORM>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden2 VALUE='$Message1'>"; echo "<INPUT TYPE=SUBMIT>"; echo "</FORM>"; ?>

ia pateikta itisa HTML forma parayta PHP komand viduje ir leidianti mums sukurti kintamj $Hidden2 ir suteikti jam $Message1 reikm. Padarykime pavyzd kuris tari <SELECT> srao laukel ir pateikia vartotojo pasirinkim bei kelet kit opcij sekaniame puslapyje. Mes taip pat vis i form paraysime terpt PHP echo() komandos rmus.

50

Ibandykite Paslpt laukeli naudojimas formose

1. Atidarykite savo redaktori ir paraykite sekant kod:


<HTML> <HEAD></HEAD> <BODY> <?php $Message1="Bugs Bunny"; $Message2="Homer Simpson"; $Message3="Ren & Stimpy"; echo "<FORM METHOD=GET ACTION='hidden2.php'>"; echo "Which of the following would win in a shootout?"; echo "<SELECT NAME='ListBox'>"; echo "<OPTION>$Message1</OPTION>"; echo "<OPTION>$Message2</OPTION>"; echo "<OPTION>$Message3</OPTION>"; echo "</SELECT><BR><BR>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden1 VALUE='$Message1'>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden2 VALUE='$Message2'>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden3 VALUE='$Message3'>"; echo "<INPUT TYPE=SUBMIT>"; echo "</FORM>"; ?> </BODY> </HTML>

2. Isaugokite kaip hidden.php. 3. Udarykite it fail ir atsidarykite nauj:


<HTML> <HEAD></HEAD> <BODY> <?php echo "The three options were:<BR>"; echo "$Hidden1<BR>"; echo "$Hidden2<BR>"; echo "$Hidden3<BR>"; echo "<BR>You selected:<BR>"; echo "$ListBox"; ?> </BODY> </HTML>

4. Isaugokite j kaip hidden2.php. 5. Udarykite it fail ir atsidarykite hidden.php su narykle, tada pasirinkite:

6. Paspauskite ant Submit Query:

51

Kaip tai veikia


Kai js imoksite kurti HTML formas echo() komandos viduje, vietoj paprastos HTML formos, js sitikinsite, kad tai labai paprasta. Mes pradjome sukurdami tris kintamuosius kurie suformuos pasirenkamo srao <SELECT> elementus:
$Message1="Bugs Bunny"; $Message2="Homer Simpson"; $Message3="Ren & Stimpy";

Jie atitinkamai yra $Message1, $Message2, ir $Message3. Po to mes sukurme HTML form naudodamiesi echo() komand. Visikai nieko skirtingo muo paprastos formos, tiktai tai, kad mes turjome naudoti ne dvigubas kabutes kaip HTML, o viengubas. Pirmoji linija paprasiausiai nurodo sisti informacij hidden2.php per GET metod:
echo "<FORM METHOD=GET ACTION='hidden2.php'>";

Mes parodome iek tiek paaikinamojo teksto ir pradedame <SELECT> sra:


echo "Which of the following would win in a shootout?"; echo "<SELECT NAME='ListBox'>";

Mes paraome tris galimus atsakymo variantus, kintamj $Message1, $Message2, ir $Message3 turin atitinkamai.
echo "<OPTION>$Message1</OPTION>"; echo "<OPTION>$Message2</OPTION>"; echo "<OPTION>$Message3</OPTION>";

Tada mes udarome <SELECT> sra ir paraome kelet perklim kit eilut:
echo "</SELECT><BR><BR>";

Dabar mes paimame tris kintamuosius kuriuos mes jau naudojome ir per paslptus laukelius pasiuniame juos ms form:
echo "<INPUT TYPE=HIDDEN NAME=Hidden1 VALUE='$Message1'>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden2 VALUE='$Message2'>"; echo "<INPUT TYPE=HIDDEN NAME=Hidden3 VALUE='$Message3'>";

ie trys kintamieji pasidarys reikmmis kit trij kintamj - $Hidden1, $Hidden2, ir $Hidden3 atitinkamai. Tada mes galime parayti Submit mygtuk, ir udaryti form:

52

echo "<INPUT TYPE=SUBMIT>"; echo "</FORM>";

Antrasis PHP puslapis parasiausiai parodo pirmojo sukurtus kintamuosius ir j reikmes. Vis pirma mes parodome tris paslptus laukelius:
echo echo echo echo "The three options were:<BR>"; "$Hidden1<BR>"; "$Hidden2<BR>"; "$Hidden3<BR>";

Tai yra labai naudinga nes paprastai visos srao laukelio reikms nra persiuniamos. Tiktai vartotojo pasirinktos reikms bus perduotos kit PHP puslap. Taiau kartais jums reikia turti visas srao reikmes pasiekiamas PHP puslapyje. Tai yra vienas efektyviausi metod persisti itokio tipo informacij. Paskutin linija parodo vartotojo pasirinkim.
echo "<BR>You selected:<BR>"; echo "$ListBox";

Mes ir toliau knygoje naudosime paslptus laukelius atlikdami tokio tipo uduotis.

Slaptaodiai
Slaptaodiai yra paprasiausi tekstiniai laukeliai, kurie pakeii vedam tekst vaigdutes. Jie saugo ir perduod informacij tokiu paiu bdu kaip ir tekstiniai laukeliai. Koks js slaptaodis?
<INPUT NAME="Password" TYPE="Password">

Mes neatliksime su jais praktinio pavyzdio, nes nra skirtumo tarp TEXT ir PASSWORD tipo lauk. Jei norite pamatyti kaip jis dirba, grkite atgal ir su prie tai buvusiame text.html pakeiskite tip PASSWORD. Taiau jei js sugalvosite sisti i informacij naudodami GET, pastebkite, kad i informacija nra ifruojama ir j gali matyti visi. Tai nereikia, kad POST yra saugus duomen siuntimo bdas, paprasiausiai informacija nebus matoma taip akivaizdiai. Jei norite saugumo jums reikia naudoti kak panaaus SSL (Secure Sockets Layer).

Submit ir Reset mygtukai


Mes jau naudojome Submit mygtukus pavyzdiuose iame skyriuje, tad nerodysime kaip jie veikia. Taiau yra keletas dalyk kuriuos reiktu paymti. Kas atsitiktu jei jums reiktu daugiau nei vieno Submit tipo mygtuko puslapyje? Tokiu atveju jums reiktu nurodyti mygtuko atributus NAME ir VALUE. Pavyzdiui:
<INPUT VALUE="Button 1 pressed" TYPE="SUBMIT" NAME="Submit1"> <INPUT VALUE="Button 2 pressed" TYPE="SUBMIT" NAME="Submit2">

Tai, kaip galite tiktis sukuria kintamuosius PHP su kuriais jis gali dirbti. Jei nagrinti viruje parayta kod, jis sukurs tik vien kintamj, priklausomai nuo to koks mygtukas buvo paspaustas. Jei paspausite Submit1 tada yra sukuriamas kintamasis pavadintas $Submit1. Jei paspausite Button 2, tada sukuriamas $Submit2. $Submit1 reikm yra "Button 1 pressed", tuo tarpu $Submit2 turinys yra "Button 2 pressed". Mes negalime daryti nieko naudingo kol kas, tad nerodysime pavyzdio. Ketvirtame skyriuje mes susipainsime su papildomom programavimo iniom ir panaudosime dvigubo mygtuko privalum.

53

Submit tipo mygtukas neleidia greitai itrinti informacijos jei ji buvo vesta neteisingai. Nors js negalite ataukti informacijos pasistos per Submit mygtuk, Reset mygtukas danai bna naudingas kai reikia sugrainti visus formos elementus j pradin bsen.
<INPUT TYPE="Reset">

Dabar kai susipainome su visais formos elementais kuriuos mes naudosime ioje knygoje, mes sudsime juos kartu ir padarysime vien didel pavyzd.

Reikmi gaut i formos naudojimas PHP skripte


Mes pademonstravome visu formos elementus ir kaip PHP su jais dirba, bet mes iki iol nepadarme nieko iskyrus gaut reikmi rodym kitame puslapyje. Reikia pripainti, kad be vis galimybi kurias mes nagrinsime kitame skyriuje tai padaryti sunku. Taiau mes jau imokome atlikti matematines ir tekstines operacijas prie tai buvusiame skyriuje, tad sujungia ias inias su dabar gauta informacija galime parayti praktin pavyzd. Paskutiniame io skyriaus pavyzdyje mes sukursime paskolos program (form), kuri klausia apie pinig kiek kur asmuo nori pasiskolinti, ir suskaiiuosime kiek ms sugalvotas bankas NAMLLU gali pasilyti klientui atsivelgdami jo ami ir udarb. Skaiiavimo gale mes pateiksime paprasiausia Taip arba Ne. Nors ms formul gali pasirodyti didel, ji yra paprasta ir nepagrysta realiom formulm kurios yra ymiai sudtingesns Paskolos suma ms programoje yra skaiiuojama pagal tris faktorius:
Vis pirma apskaiiuosime metins algos penktadal, taip gaudami algos dyd kur galima paskirti skolos imokjimui. Po to padalinsime praaniojo ami i 10, o gaut atsakym suapvalinsime iki artimiausio sveiko skaiiaus. Tada pasinaudoja antruoju skaiiavimu apskaiiuosime leistin ami.

Pati formul paima pirmj skaiiavim ir padauginsime i antrosios, taip gaudami ms paskutin atsakym leistinos paskolos dyd. Antrasis punktas reikalingas tam, kad bet kas turintis maiau nei 20 met btu ibrauktas i galim paskolos mj, nes formul visada pateiks 0. Pairkime pavyzd ir viskas taps aikiau.
First figure * (19/10 (19 Modulus 10) /10))-1

Atsiminkite, kad modulud operatorius naudojamas gauti dalybos liekan. Tada ms skaiiavimas bus panaudotas taip:
First figure * (1.9 0.9) 1

Kuris galiausiai pateikia 0


First figure * 0

Taigi jei js pateiksite ami jaunesn nei 20, formul visada pateiks 0 kaip atsakym. Nesvarbu kokie kiti skaiiai vedami, daugyba i nulio visada duos atsakym 0. Kai padauginame ms pirmj punkt i antrojo, gauname leistinos paskolos sum jei mogus nori maiau mes sakome Taip js galite skolintis, jei leistina suma maesn nes atsisakome iduoti paskol. Dar kart mus reiks dviej puslapi. Pirmasis bus paprasiausia forma kuriame mes suinosime kliento vard, pavard, ami, adres, alg, bei norimos paskolos dyd.

54

Mes naudosime beveik visus formos elementus aptartus iame skyriuje. Antrame, PHP tipo, puslapyje mes atliksime savo apskaiiavimus ir pateiksime verdikt.

Ibandykite paskolos praymo forma

1. Atidarykite savo fail redagavimo program ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Credit Bank Loan Application Form</B> <FORM METHOD=POST ACTION="loan.php"> First Name: <INPUT NAME="FirstName" TYPE="Text"> Last Name: <INPUT NAME="LastName" TYPE="Text"> Age: <INPUT NAME="Age" TYPE="Text"SIZE="3"> <BR> <BR> Address: <TEXTAREA NAME="Address" ROWS=4 COLS=40> </TEXTAREA> <BR> <BR> What is your current salary? <SELECT NAME="Salary"> <OPTION VALUE=0>Under $10000</OPTION> <OPTION VALUE=10000>$10,000 to $25,000</OPTION> <OPTION VALUE=25000>$25,000 to $50,000</OPTION> <OPTION VALUE=50000>Over $50,000</OPTION> </SELECT> <BR> <BR> How much do you want to borrow?<BR><BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=1000>Our $1,000 package at 8.0% interest <BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=5000>Our $5,000 package at 11.5% interest <BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=10000>Our $10,000 package at 15.0% interest <BR> <BR> <INPUT TYPE=SUBMIT VALUE="Click here to Submit application"> <INPUT TYPE=RESET VALUE="Reset application form"> </FORM> </BODY> </HTML>

2. Isaugokite kaip loan.html 3. Udarykite pirmj fail ir pradkite nauj:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Credit Bank Loan Application Form</B> <BR> <BR> <? $SalaryAllowance = $Salary/5; $AgeAllowance = ($Age/10 - ($Age%10)/10)-1; $LoanAllowance = $SalaryAllowance * $AgeAllowance; echo "Loan wanted:$Loan<BR>"; echo "Loan amount we will allow:$LoanAllowance<BR><BR>";

55

if ($Loan <= $LoanAllowance) echo "Yes, $FirstName $LastName, we are delighted to accept your application"; if ($Loan > $LoanAllowance) echo "Sorry, $FirstName $LastName, we cannot accept your application at this time"; ?> </BODY> </HTML>

4. Isaugokite kaip loan.php 5. Atidarykite loan.html savo interneto naryklje ir veskite kokius nors duomenis:

6. Paspauskite Submit application mygtuk ir turtumte gauti pana atsakym.

Kaip tai veikia

56

Js tikrai usitarnavote pertrauka po to kai mes inagrinsime pavyzd. Pirmasis HTML tipo puslapis yra gana paprastas, jo elementus mes inagrinjome anksiau. Mes i viso sudjome 8 formos elementus loan.html. Pirmieji trys yra:
First Name: <INPUT NAME="FirstName" TYPE="Text"> Last Name: <INPUT NAME="LastName" TYPE="Text"> Age: <INPUT NAME="Age" TYPE="Text"SIZE="3">

Visi ie elementai yra tekstiniai laukeliai, naudojami gauti vard, pavard ir ami. Dabar js jau turtumte suprasti, kad visi ie elementai sukurs kintamuosius $FirstName, $LastName, ir $Age ms PHP puslapyje. Adresas gaunamas per <TEXTAREA> tipo element:
<TEXTAREA NAME="Address" ROWS=4 COLS=40> </TEXTAREA>

Savo ruotu tai sukuria PHP kintamj $Address. Js tikriausiai jau pastebjote, kad mes nenaudojame vis gaut duomen, taiau vlesniuose skyriuose mes grime prie io pavyzdio ir naudosime ir kitus elementus. Sekantis elementas yra srao laukelis, kuriame mes pateikiame algos dyd:
<SELECT NAME="Salary"> <OPTION VALUE=0>Under $10000</OPTION> <OPTION VALUE=10000>$10,000 to $25,000</OPTION> <OPTION VALUE=25000>$25,000 to $50,000</OPTION> <OPTION VALUE=50000>Over $50,000</OPTION> </SELECT>

Mes i tikro negalime isaugoti skaii intervalo, tad mes vietoj to paimame maiausi intervalo skaii ir priskiriame i reikm prie kintamojo. Srao laukelis sukuria tiktai vien kintamj $Salary, ir suteikia jam reikm priklausomai nuo pasirinktos sumos. Jei nebuvo pasirinkta nieko srao laukelis nepateiks jokios reikms. Atkreipkite dmes, kad pirmam pasirinkimui mes suteikme reikm 0, tai utikrins, kad visi gaunantys maiau nei $10,000 automatikai bus atmesti. Kitas formos elementas yra trys susyj pasirinkimo mygtukai:
How much do you want to borrow?<BR><BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=1000>Our $1,000 package at 8.0% interest <BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=5000>Our $5,000 package at 11.5% interest <BR> <INPUT NAME="Loan" TYPE="Radio" VALUE=10000>Our $10,000 package at 15.0% interest <BR>

Jie visi turi t pat vard, nes kintamasis turi turti tik vien reikm, priklausomai nuo to k pasirinko vartotojas. i grup sukuria tik vien PHP kintamj - $Loan. Paskutiniai elementai yra Submit ir Reset mygtukai:
<INPUT TYPE=SUBMIT VALUE="Click here to Submit application"> <INPUT TYPE=RESET VALUE="Reset application form">

Submit mygtukas inicijuoja ACTION atribut, kuris paraytas formos pradioje, ir taip forma ino kur sisti savo duomenis:
<FORM METHOD=POST ACTION="loan.php">

57

Paskolos apskaiiavimo vykdymas


Mes aptarme informacijos gavim ir jos persiuntim; antrasis ms failas loan.php paima ias reikmes ir atlieka paprastus skaiiavimus taip isiaikindamas ar pritarti ar atmesti paskolos gavjo praym. Pairkime kaip jums seksi suprasti kas gi vyksta. Pirmoji linija sukuria nauj kintamj $Salary Allowance, kuriam priskiriama algos penktadalio reikm:
$SalaryAllowance = $Salary/5;

Antroji linija apskaiiuoja kiek sudtingesn leistin ami. ia formule mes norime gauti sveik skaii padalin praytojo ami i 10, jei po dalybos veiksmo lieka kokia nors reikm po kablelio, mes j su apvaliname iki artimiausio sveiko skaiiaus. Programuotojai kitomis kalbomis pastebs, kad tai k mes darome yra naudojame DIV funkcij. Deja PHP neturi tokios standartins funkcijos Apskaiiuodami likut mes panaudojame modulus operatori. Ms paskutin linija duos rezultat 0, jei amius bus tarp 0 ir 19, 1 jei amius bus tarp 20-29, 2 jei vesta bus 30-39 ir .t.t. io skaiiavimo rezultatai yra isaugomi naujame kintamajame $AgeAllowance:
$AgeAllowance = ($Age/10 - ($Age%10)/10)-1;

Gerai, kad sekanti kodo linija daug paprastesn. Ji paima ms k tik apskaiiuotus kintamuosius ir padaugina juos. Gauti duomenys vl gi isaugomi naujame kintamajame $LoanAllowance, kuris ir yra ms galutinis atsakymas kokio dydio maksimali paskola gali bti.
$LoanAllowance = $SalaryAllowance * $AgeAllowance;

Sekanios dvi linijos yra paprasiausiai echo() parodanios kiek vartotojas norjo gauti ir kiek mes galime jam duoti paskolos.
echo "Loan wanted:$Loan<BR>"; echo "Loan amount we will allow:$LoanAllowance<BR><BR>";

Jei iki iol supratote kaip viskas vyksta, labai gerai. Bet sekaniose dviejuose linijose mes truputli pasukiavome ir pristatme nauj galimyb <= (maiau arba lygu operatori). Tai leidia mus priimti sprendim, pagal gautus duomenis. is operatorius apskaiiuoja ar norima paskolos suma yra maesn ar lygi sumai kuri gali iduoti bankas. Jei maesn mes parodome praneim, kad paskola gali bti iduota. Mes isamiai inagrinsime i ir kitas slygos struktras sekaniame skyriuje, tad nepanikuokite jei dabar dar ne visk supratote. Mes taip pat personalizavome praneim pateikdami formoje vest vard ir pavard.
if ($Loan <= $LoanAllowance) echo "Yes, $FirstName $LastName, we are delighted to accept your application";

Paskutin kodo eilut yra prieingyb prie tai buvusiai. Jei paskolos dydis viryja banko nustatyt, mes patekiame praneim, kad paskola negalima.
if ($Loan > $LoanAllowance) echo "Sorry, $FirstName $LastName, we cannot accept your application at this time";

Tai tiek ms programos.

Galimas formos pagerinimas


Negalima pasakyti, kad ms forma ideali; jei gerai pasistengti galima j pergudrauti arba priversti rodyti nelogikas reikmes. Taip atsitinka nes mes nenaudojome jokios vestos informacijos patikrinimo. Kas gi neleidia vartotojui

58

vesti 965 kaip savo ami? Mes inome, kad tai ne tiesa, bet negalime tos sustabdyti. Sekaniame skyriuje mes apvelgsime bdus kaip ivengti panai situacij ir kaip tikrinti duomenis.

Apibendrinimas
is skyrius galjo pasirodyti kiek pedantikas, bet koncepcijos kurias mes nagrinjome yra vienos kertini PHP pagrind. Bet koks formos naudojimas reikia, kad js turite gerai mokti suvaldyti deimtis ir daugiau element, priversdami juos dirbti sau. Tad mes stengms sudlioti visk savo vietas, kad sekaniuose skyriuose nebtu problem ir nereiktu kartotis. Mes pradjome nagrindami HTML <FORM> tag su visomis detalmis ir suinojome apie du galimus informacijos siuntimo metodus. Pirmasis yra GET metodas, kuris vieai perduoda informacij prikabint prie URL. Antrasis yra POST metodas, kuris siunia formos informacij paslpt, HTML viduje, is bdas diskretikesnis, taiau i tikro ne k ne saugesnis. Mes isiaikinome, kad ACTION atributas naudojamas nurodant kok puslap siusti gaut informacij. Ms pagrindini HTML formos element nagrinjimas irgi dav naudos nes kaip tik per iuos elementus informacija pasiekia PHP ir ji gali dirbti su duotais duomenimis. Paioje pabaigoje mes panaudojome beveik visus mums inomus elementus dideliame pavyzdyje rinkome informacija, atlikome matematinius veiksmus bei pateikme rezultatus. iame pavyzdyje mes pristatme nauj sprendim primimo koncepcij. i sprendim primimo struktra, priklausomai nuo slyg, leis elgtis vienaip ar kitaip. Tai ir bus kito skyriaus pagrindin tema.

59

4
Sprendim primimas
Prie tai buvusiame skyriuje, mes imokome sisti formos informacij ir gauti dinamin atsakym i serverio, kur mes vliau pateikiame ms web puslapyje. Reikia pripainti, mes vis dar suvaryti dalyk visuma kuriuos mes galime atlikti. Paskutiniame pavyzdyje 3 skyriuje mes netgi truputi gudravome, panaudodami nauj galimyb, kuri parodo arba ne kodo linij priklausomai nuo slyg. Mes gilinsims paius PHP vidurius sekaniuose trijuose skyriuose, pradedant procesais kuriuos naudodama PHP priima sprendimus. Be to ankiau js PHP kodas buvo atliekamas grietai pagal eilikum pirma linija, antra linija ir t.t. Sprendim primimo galimyb leidia jums nusprsti ar vykdyti kakoki kodo dal, bei leis jums vykdyti palyginimus tarp kintamj ir j reikmi. Tai taip pat leis jums susipainti su kai kuriais loginiais (boolean) operatoriais kurie graina reikmes "true" ar "false"). Mes galjome juos pristatyti jau antrame skyriuje kartu su netematiniais ir eiluts tipo operatoriais, bet mes dar negaljome pademonstruoti j panaudojimo ir efektyvumo. Js sitikinsite, kad galimybs imoktos iame skyriuje leis jums rayti daug sudtingesnius PHP skriptus, be to mes juos panaudosime pagerindami 3 skyriaus baigiamj pavyzd. iame skyriuje aptarsime ias temas pagal eil Kaip akojimai takoja kodo vykdym Kasdieninis akojimo pavyzdys. If elementas Palyginimo operatoriai Lygybs operatoriai Loginiai operatoriai Switch elementas
Kaip patikrinti formos turin

60

Slygos arba akojimosi operatorius


Paia paprasiausia prasme, slygos kodas reikia, kad atlik vien kodo eilut arba neatlik jos, priklausomai nuo to ar atitinka nurodytas kriterijus. Kiek sudtingesnis variantais gali reikti, kad atlik i kodo eilut arba atlik it eilut, priklausomai nuo to ar atitinka nurodytas kriterijus. Js galite padidinti tai nurodydami atlikti vis kodo gabal vienu atveju, arba kakok kit kod prieingu atveju. Kad geriau visk suprastumte pateiksime ma pavyzdl. Jei kakoki apskaiiavim rezultatas yra 1 bus vykdoma pirmoji eilut, jei rezultatas 2 bus atliekama antroji eilut, jei 3 tai treioji ir t.t.

akojimosi pavyzdys i kasdieninio gyvenimo


Prie tai mes kalbjome daugiau abstraktikai, tad paremkime ms inias atlikdami pavyzd i kasdieninio gyvenimo. Apsipirkimas yra tikriausiai kasdienikiausias veiksmas apie kur mes galime galvoti, bet jis tinka parodant sprendim primimo pavyzd kur gali atlikti js programa. sivaizduokite jums reikia atlikti emiau pateikta sra: a) padaryti puodel arbatos b) pasigaminti sumutin su sriu c) pamaitinti gyvnus Jums taip pat reiks eiti ir nusipirkti visus produktus, jei js j neturite, taiau sakykime js teturite 5 dolerius. Dabar mes vis tai pavaizduosime lietuvi kalbos terminais:

1. Patikrink aldytuv ar jame yra pieno, srio ir sviesto, jei nra rayki sra. 2. Patikrink duonin ar joje yra duonos, jei nra rayk sra. 3. Patikrink bufet ar jame yra arbatos jei nra rayk sra. 4. Jei visi produktai yra norint atlikti pirmus tris punktus eikite prie 7ojo punkto. 5. Nueikite supermarket 6. Nusipirkite tiek produkt esani srae kiek uteks nusipirkti u 5 dolerius. 7. Jie turite gyvn dalo, pamaitinkite gyvnus. Jei neturite praleiskite 8 punkt. 8. Gyvnai yra laimingi. 9. Jei turite pieno ir arbatos, js galite pasidaryti puodel arbatos. Jei ne praleiskite 10 punkt. 10. Js nebesate itroks. 11. Jei turite duonos, sviesto ir srio, js galite pasidaryti sumutini su sriu. Jei taip nra, praleiskite 12 punkt. 12. Js nebe alkanas. 13. Pavargs isitieskite prieais televizori!

61

Labai maai tiktina, kad js atliksite visu 13 programos ingsni (nors tai ir nra tikra kompiuterin programas mes j taip vadinsime, nes ji turi toki paia logik). Priklausomai nuo ankstesni ingsni rezultat js praleisite tam tikrus punktus, arba jei bus patenkinti pirmi 3 punktai bus praleista didioji programos dalis. Taip pat yra manoma ir visai kitokia baigtis jei js neinaudosite savo pinig protingai. Tai tipikas sprendim primimas atliekamas PHP kalboje. Kai js raote PHP programas, dalis kodo bus skirta specifinms situacijoms, bet jei jos nekils tos kodo dalys bus praleistos kaip nereikalingos. Js gana lengvai galite pertekti vis pavyzd PHP programoje. Mes galtumme pavaizduoti kiekvien ms apsipirkimo ekspedicijos eilut kaip kod. Js turtumte pradti nuo pirmosios linijos kuriai pavaizduoti savo ruotu reiks trij kodo eilui, nes mums reiks atskir veiksm priklausomai nuo slyg. Patikrinti aldytuv ar jame yra pieno, patikrinti aldytuv ar jame yra srio, patikrinti aldytuv ar jame yra sviesto. Norint pavaizduoti pirmj veiksm mums tereikia vieno if operatoriaus kuria patikrintu slyg ir atliktu veiksmus jei rezultatas teigiamas:
if ($SaldytuveNeraPieno) $PirkiniuSarasas = $PirkiniuSarasas . "Pienas.";

Tariant kitas odiais, jei aldytuve nra pieno, mes pridedame pien prie pirkini srao. T pat mes turtumme atlikti ir su kitais produktais. Taiau vietoj pavertimo kiekvienos eiluts PHP kod, geriau judkime toliau ir apvelkite taisykles kurios valdo if operatori.

If operatorius
Mes jau minjome if operatori ankstesniame skyriuje, tad vl su juo susidr js jau turtumte numanyti kaip jis veikia. Abstrakiai pamus jis veikia tai taip: if (slyga yra teisinga) atlikti kodo linija If operatorius atliks bet kok kod jei slyga yra patenkinta. Jei slyga nepatenkinta, kodas bus visikai ignoruojamas, ir PHP jo visikai neatliks. Programa paprasiausiai prads vykdyti sekania kodo eilut. if (oras yra lietingas) usidedame skti einame laukan Antroji eilut bus atliekama neirint niek, taiau mes skti usidsime tik tuo atveju jei oras bus lietingas. Jei jums reikia atlikti vis kodo gabal, js turite parayti kod atskirose eilutse po slygos operatoriaus, tarp riestini skliausteli: if (slyga yra patenkinta) { Atliekamas kodas tarp i skliausteli } Tad norin iplsti ms lietsargio pavyzd mes galtume sakyti: if (oras yra lietingas) { usidedame skti usidedame lietpalt } einame laukan Dar kart einame laukan bus visuomet vykdoma, taiau skti ir lietpalt mes usidsime tik tuo atveju jei oras yra lietingas atitinka tikrov.

62

Dabar pairkime kaip js galite sukurti slygas remiantis kuriomis kodas bus atliekamas arba ne. Tiesa pasakius nra jokios reikms kas yra tarp skliausteli, if operatorius paprasiausiai patikrina slygos atitikim ir paleidi kod arba ne.

Logins reikms
Prie mums einant toliau, mes turime pristatyti jums logini reikmi svok. Prie tai buv kintamieji galjo turti skaitines arba tekstines reikmes, taiau logins reikms yra treias kintamj tipas, galintis turti vien i dviej absoliui reikmi true ar false. Js galite priskirti bet kokiam kintamajam vien i i reikmi:
$kintamasis = true;

Taiau jei js o to pavaizduosite reikm ekrane, js gausite skaitin reikm: 1 Tas pats vyksta su $kintamasis reikme false, bus pavaizduota: 0 Taigi js matote, logins reikms turi abidvi reikmes skaitines ir raidines. Savaime tai nra labai domu, taiau kai jums reiks priimti sprendimus gautose situacijose, tame tarpe kai rezultatas bus loginis- taip arba ne, is faktas bus labai svarbus.

Loginiai operatoriai.
Iki iol mes smulkiai nagrinjome matematines operacijas (kuri kaip matte nra labai daug), yra ir kit operatori grup kalb apie kuriuos mes atidjome. Taip padaryta todl, kad be akojimosi struktros ie operatoriai yra beveriai. Paskutiniame skyriuje mes jau pristatme kai kuriuos i j, kad galtumme atlikti sprendim paskolos davimo formoje. Tiesa pasakius bet kada kai jums reiks sukurti slyg norint priimti bet kok sprendim, js tursite naudotis iais operatoriais. Mes padalinsime juos keturias grupes ir pairsime kiekvienos grups operatorius pavyzdiuose.

> ir < operatoriai


Js jau turtumte inoti daugiau nei ir maiau nei operatorius - tai fundamentals operatoriai netgi paprastoje matematikoje, bei labai svarbs programavime. PHP kalboje mes galime juos panaudoti palygindami dvi konstantas, konstant su kintamuoju ar du kintamuosius. Priklausomai nuo palyginimo rezultat, tam tikra veiksm seka gali bti atliekama. Su iomis konstantomis rezultatas yra akivaizdus:
If (5 < 6) echo "Five is smaller than six";

Taiau mes vis tiek turime plaiau pavelgti kas gi vyksta. Slygos dalis if operatoriuje yra apgaubta skliausteliais. Ji gali apskaiiuoti ir gauti vien i dviej logini reikmi, true ar false. Arba slyga yra patenkinta arba ne. Ji negali bti dalinai patenkinta, ir PHP negali pateikti reikms Galbt ar A dar pagalvosiu. Taigi io kodo rezultatas yra true. If operatorius atliks veiksmus tik tada kai slyga yra true ji yra patenkinta. Ms pavyzdys nra labai naudingas js ir taip inote, kad 5 maiau nei 6. Taiau, jei mes lygintume kintamojo reikm su skaiiumi, viskas priklausytu nuo kintamojo reikms:

63

If ($Kintamasis < 6) echo ("Kintamasis yra maesnis nei ei");

Arba mes galime palyginti du kintamuosius:


If ($Kintamasis1 < $Kintamasis2) echo ("Ms kintamasis nr.1 maesnis nei kintamasis nr.2");

Ir inoma io palyginimo rezultatus mes galime naudoti, ne tik parodant praneim bet ir imantis tam tikr veiksm:
If ($Kintamasis1 < $ Kintamasis2) { echo ("Ms kintamasis nr.1 yra per maas"); $Kintamasis1 = $Kintamasis1+1; }

Gerai, atlikime nedidel pavyzd kuriame ms PHP programa sugalvotu skaii tarp 1 ir 10, o mums tektu j atspti. Tam, kad PHP sugalvotu skaii mes naudosime PHP atsitiktini skaii generavimo funkcij rand. Po to kai atliksime pavyzd mes paaikinsime funkcijos veikimo princip.

Ibandykite Palyginimo operatori naudojimas

1. Atidarykite savo teksto redagavimo program ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="guessgame.php"> What number between 1 and 10 am I thinking of? <INPUT NAME="Guess" TYPE="Text"> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip guessgame.html. 3. Udarykite it fail ir pradkite nauj:


<HTML> <HEAD></HEAD> <BODY> <?php $Number = rand(1,10); if ($Guess>$Number) { echo "Guess is too high"; echo "<BR>I was thinking of $Number, you don't "; } if ($Guess<$Number) { echo "Guess is too low"; echo "<BR>I was thinking of $Number, you don't "; } ?> win </BODY> </HTML>

4. Isaugokite kaip guessgame.php. 5. Atidarykite guessgame.html


savo naryklje, bei paraykite skaii:

64

6. Paspauskite Submit Query ir irkite ar pataikte:

Kaip tai veikia


Mes i tikro kiek sukiavome iame pavyzdyje, nes skaiius generuojamas jau po vartotojo vesto skaiiaus. Taiau tai neturi jokios takos rezultatui, nes ms generuojamas skaiius nepriklauso nuo vartotojo sptojo. Pirmoji programa paklausia vartotojo skaiiaus, o atsakym priskiria Guess kintamajam.
What number between 1 and 10 am I thinking of? <INPUT NAME="Guess" TYPE="Text">

Tada ms duomenys persiuniami guessgame.php programai kuri gali apdoroti reikm, nes jo reikm isaugota kintamajame $Guess, kuris buvo automati6kai sukurtas PHP. Pairkime paeiliui sekani program. Pirmoji linija generuoja skaii tarp 1 ir 10:
$Number = rand(1,10);

Rand funkcija yra labai paprasta, paprasiausiai paraote minimali ir maksimali reikm atskirt kableliu ir ji sugeneruos atsitiktin skaii tarp i dviej reikmi. Rezultatas yra isaugomas $Number kintamajame. Tada mes paimame skaii kur ved vartotojas, kuris saugomas $Guess, kintamajame ir palyginame kur sugalvojo PHP. Mes patikriname ar reikm, saugoma $Guess kintamajame yra didesn nei reikm esanti kintamajame $Number. Jei taip ir yra, mes vykdome sekanias kodo eilutes:
if ($Guess>$Number) { echo "Guess is too high"; echo "<BR>I was thinking of $Number, you don't "; }

Kodas tarp riestini skliausteli informuoja vartotoja, kad spjamas skaiius buvo per didelis, ir parao koks gi i tikro turjo bti skaiius. Taip pat jis prideda nepiln "you don't", kuri yra papildoma vliau.

65

Antrasis if operatorius patikrina ir vykdo od kai sptas skaiius buvo per maas:
if ($Guess<$Number) { echo "Guess is too low"; echo "<BR>I was thinking of $Number, you don't "; }

iuo atveju mes informuojame vartotoj, kad spjimas buvo per maas, ir vl gi paraome koks gi turjo bti skaiius, be to pridedame nepiln fraz "you don't". Sekanti kodo eilut ubaigia PHP skript, vliaus mes paraome eilut su vieninteliu tekstu "win".
?> Win

i eilut yra visada parodoma, ir js galite pastebti, kad mes j naudojame ubaigdami "you don't" fraz. Taiau, kaip galite spti, nieko neatsitinka, jei vartotojas atspja teising numer. iuo atveju, nei vienas i if operatori nra teisingas true. Viskas k mes parodome yra paprastas "win". Taigi, mes i tikro netikrinome ar vartotojas atspjo, mes tikjome, kad jei skaiius nra per maas ir jei nra per didelis, jis turi bti teisingas. K tik js susipainote su operatoriais kurie tikrina lygyb.

== ir === operatoriai
Mes jau naudojome lygybs enklus atlikdami kiek kitoki operacij PHP kalboje, js tikriausiai jau pastebjote, kad lygybs enklas turi dvi skirtingas panaudojimo galimybs. Vienas lygybs enklas yra priskyrimo operatorius, dvigubos lygybs enklas yra lygybs operatorius. Tai labai svarbus skirtumas, jei mes atliksime sekani operacij:
$Kintamasis = 5; $Kintamasis = 7;

Virutin linija priskiria kintamajam $Kintamasis reikm 5, o tada i reikm yra panaikinama ir kintamajam priskiriama naujoji 7. Taigi antroji linija perrao pirmj. Visas skirtumas tas, kad lygybs operatorius jokiu bdu netakoja kintamojo reikms. Sekanioje eilutje:
if ($Kintamasis == 7) echo ("Js kintamojo reikm yra septyni");

$Kintamasis nra niekaip pakeiiamas ios operacijos, jis tik palyginamas ar kintamasis lygus ar ne septyniems. Yra ir kitas lygybs operatorius, vestas visai neseniai PHP 4.01 versijoje. Jis raomas su trimis lygybs enklais ir teisingas bus tik tuo atveju, jei reikms ir kintamj duomen tipais sutaps:
if ($Kintamasis === $AtsitiktinisSkaicius) echo ("Js kintamasis sutampa su $AtsitiktinisSkaicius ");

The != and <> Operators


Lygybs operatoriaus == prieingyb yra nelygybs operatorius !=.
if ($Kintamasis != 7) echo ("Js kintamasis tikrai nra septyneri");

66

Yra ir kitas bdas nustatyti nelygyb, pasinaudojant daugiau nei ir maiau nei operatoriai. Jie naudojami sekaniu bdu:
if ($Kintamasis <> 7) echo ("Js kintamasis tikrai nra septyneri");

Vienintelis kartas kai i operatori rezultatas bus false neigiamas, kai $Kintamasis yra 7. Pasinaudodami skyriuje prie tai idstyta mediaga, padarykime pavyzd. Mes ne tik pateiksime klausim, bet ir pasakysime ar atsakymas buvo teisingas.

Ibandykite Lygybs ir nelygybs operatori naudojimas

1. Naujame faile paraykite sekant tekst:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="quiz.php"> What is the capital of Portugal? <BR> <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Porto"> Porto <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Lisbon"> Lisbon <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Madrid"> Madrid <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip quiz.html. 3. Udarykite senj ir atsidar dar vien fail paraykite:
<HTML> <HEAD></HEAD> <BODY> <?php if ($Question1=="Lisbon") echo "You are correct, Lisbon is the right answer"; if ($Question1!="Lisbon") echo "You are incorrect, Lisbon is the right answer"; ?> </BODY> </HTML>

4. Isaugokite kaip quiz.php. 5. Atidarykite quiz.html


ir pateikite atsakym

67

6. Jei js pasirinkote Lisbon, turtumte pamatyti sekant vaizd:

7. Grkite ir pabandykite pasirinkti kitok atsakymo variant, pairkite koks buvo atsakymas.
Kaip tai veikia
ia maai k tenk aikinti. Mes apvelgme pasirinkimo mygtukus prie tai buvusiame skyriuje, ir js jau turtumte inoti, kad ta opcija kuri yra pasirinkta ir suteikia savo reikm NAME atributui:
<INPUT NAME="Question1" TYPE="Radio" VALUE="Porto"> Porto <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Lisbon"> Lisbon <BR> <INPUT NAME="Question1" TYPE="Radio" VALUE="Madrid"> Madrid

Tada mes paimame i reikm, kuri PHP isaugoma kaip kintamasis $Question1, ir ms antrojoje programoje palyginame j su ms teisingu atsakymu "Lisbon" nordami pairti ar jos sutampa:
if ($Question1=="Lisbon") echo "You are correct, Lisbon is the right answer";

Jei sutampa, mes praneame "You are correct", jei ne, nieko neatsitinka. PHP toliau nuosekliai vygdo savo program ir sekanioje eilutje patikrina ar $Question1 nesutampa su "Lisbon":
if ($Question1!="Lisbon") echo "You are incorrect, Lisbon is the right answer";

Logikai tariant, vienas i i atsakym turi bti teisingas, arba atsakymas pasirinktas tas kuris ir turi bti arba ne.

68

Mums beliko tik apvelgti paskutini logini operatori grup.

Loginiai operatoriai (AND, OR, NOT )


Loginiai operatoriai nra tokie baiss kaip gali pasirodyti i pirmo vilgsnio. Tiesa pasakius j anglikos reiklms leidia suprasti j naudojimo paskirt PHP kalboje. Js galite pasakyti pavyzdiui jei iandiena etadienis ir oras yra geras, a eisiu paludim. Tas pats vyksta ir su PHP:
if ($diena == "etadienis" AND $oras == "Saultas") echo ("Laikas papludim");

AND taip pat gali bti raomas ir su dvigubu and enklu (&&), pavyzdiui:
if ($diena == "etadienis" && $oras == "Saultas") echo ("Laikas papludim");

OR ir NOT operatoriai yra lygiai taip pat suprantami koki1 ir turi reikm. Mes galime pasinaudoja OR operatoriu, pasakyti prieing login reikm:
if ($diena == "Pirmadienis" OR $oras == "lyja") echo ("Niekas neis papldim");

Jei yra pirmadienis ir lauke lyja, mes negalime eiti papldim. OR operatorius taip pat gali bti paraytas dvigubu || enklu. Taigi paskutin kod buvo galima parayti ir taip:
if ($diena == "Pirmadienis" || $oras == "lyja") echo ("Niekas neis papldim");

Vienas domus pastebjimas, kuris taiau neurtu takoti js kodo. && ir || operatoriai turi kiek skirting pirmenyb. Jei bus suformuotas loginis klausimas pasinaudojus iais operatoriais jie turs pirmenyb prie savo tekstines atitikmenis. Paskutinis operatorius apie kur lieka panekti turi tik vien form. Js negalite tiesiogiai naudoti odio NOT kaip operatoriaus. NOT operatorius vaizduojamas kaip auktukas, jei jis raomas skliausteli iorje, jis pakeiia prieinga reikme skliausteliuose esani reikm. Taigi, jei reikm teigiama, NOT operatorius j paveri neigiama ir atvirkiai. Pavyzdiui, jei diena ne etadienis, mes negalime eiti papldim.
if !($diena == "etadienis") echo ("Tada neinam papldim iandien");

kaip matote jis turi tok pat efekt kaip ir neigimo operatorius != kur mes pristatme ankiau. Tiesa pasakius jums nebtinai reikia turti kok nors operatori if eilutje. Js galite patalpinti kintamj slygos dalyje:
if !($Atsakymas) echo ("Nra jokio atsakymo");

i eilut kaip atsakym pateiks, kad nra jokios reikms priskirtos $Answer kintamajam, arba jei $Atsakymas turi nuline reikm (kas PHP kalboje tolygu bti tuiam). inote kodl tai atsitiks? Taip yra todl, kad ! operatorius paveria neigiamj teigiam-reikm kintamojo $Atsakymas, tad jei $Atsakymas sugraina neigiam reikm, !($Atsakymas) paveria j teigiama ir if eilut bus vykdoma. Yra ir daugiau detali apie loginius operatorius, bet padarykime pertrauk pavyzdiui. Ms programa bus skirta main nuomos kompanijai, kurios pagalba ji gals apskaiiuoti ar klientas gali vairuoti vien i j main. Norint tai padaryti reikia galiojani teisi ir turti daugiau nei 21 metus. Ms programa patikrins ias ir kelet kit detali.

69

Ibandykite Logini operatori naudojimas

1. Kaip jau turbt inote atsidarykite teksto redagavimo program ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Car Hire Company</B> <FORM METHOD=POST ACTION="car.php"> First Name: <INPUT NAME="FirstName" TYPE="Text"> Last Name: <INPUT NAME="LastName" TYPE="Text"> Age: <INPUT NAME="Age" TYPE="Text"SIZE="3"> <BR> <BR> Address: <TEXTAREA NAME="Address" ROWS=4 COLS=40> </TEXTAREA> <BR> <BR> Do you hold a current driving license? <INPUT NAME="License" TYPE="Checkbox"> <BR> <BR> <INPUT TYPE=SUBMIT VALUE="Click here to Submit application"> </FORM> </BODY> </HTML>

2. Isaugokite kaip car.html. 3. Atsidarykite nauj ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Car Hire Company</B> <?php if ($Age>20 AND $License=="on") echo ("Your car hire has been accepted."); if ($Age<21 OR $License=="") echo ("Unfortunately we cannot hire a car to you."); ?> </BODY> </HTML>

4. Isaugokite kaip car.php. 5. Atidarykite car.html


savo naryklje ir veskite duomenis:

70

6. Paspauskite ant Submit application nordami pamatyti rezultat:

Kaip tai veikia


HTML element kaip matote yra daug taiau mes naudojame tiktai du i j, tikriname ami ir vairuotojo teisi turjim.
<INPUT NAME="Age" TYPE="Text"SIZE="3"> <BR> <BR> Address: <TEXTAREA NAME="Address" ROWS=4 COLS=40> </TEXTAREA> <BR> <BR> Do you hold a current driving license? <INPUT NAME="License" TYPE="Checkbox">

Teksto laukelio NAME atributas pavadintas "Age", taigi $Age kintamasis yra sukuriamas ir jame saugojamas vartotojo vestas amius. Sekantis elementas klausiantis dl vairuotojo teisi turjimo gali bti paymtas arba ne. Taigi $License kintamasis gali turti "on" reikm arba neturti jokios. Reikm "on" priklauso nuo narykls kuri js naudojate, bet atsivelgiant tai, kad dauguma vartotoj naudojasi Internet Explorer, Netscape Navigator ir Opera naryklmis neturtu kilti problem. Mes panaudojame abu iuos kintamuosius ms PHP kode antrajame faile. Pirmoji linija car.php faile nurodo, kad jei vartotojas turi daugiau nei 20 met, bei vairuotojo teises, mes galime inuomoti jam main:
if ($Age>20 AND $License=="on") echo ("Your car hire has been accepted.");

Antroji linija sako prieingai:


if ($Age<21 OR $License=="") echo ("Unfortunately we cannot hire a car to you.");

71

Arba vartotojo amius maiau nei 21, arba neturi teisi ir mes atsisakome inuomoti jam main. Tai tiek ios programos. Vienos nenumatytos galimybs mes neaptarme kas atsitiks jei vartotojas ves met skaii tarp 20 ir 21, pavyzdiui 20.5? Taip mes galime gauti net du atsakymus kad nuoma yra galima ir, kad ne. Norint itaisyti i skyl mes turime kiek pataisyti skript ir tam pristatysime dar vienus loginius operatorius.

>= ir <= operatoriai


ie operatoriai jums turtu atrodyti jau gerai paystami, nes jie abu tra ankiau nagrintu operatori kombinacijos. Jei norite pasakyti, kad skaiius turi bti maesnis nei arba lygus kakokiai reikmei, tada naudokite <= operatori. Tas pats pritaikoma ir daugiau nei arba lygu operatoriui >=. Nors jie turi tik vien lygybs enkl, jie neatlieka priskyrimo operacijos ir yra naudojami iskirtinai palyginimui. Norint, kad ms paskutinis pavyzdys veiktu taip kaip ir turi veikti, mes turime pakeisti pirmj linij car.php failo:
if ($Age>=21 AND $License=="on") echo ("Your car hire has been accepted.");

Operatori kombinavimas
Mes jau kombinavime loginius operatorius su lygybs operatoriais, taiau nra PHP kalboje nra joki apribojim kiek operatori gali bti vienoje if iraikoje. Perfrazuojant ms pirmj klausim jei oras yra geras ir diena yra etadienis, mes eisime papldim, galima pasakyti ir kitaip jei diena ne pirmadienis, antradienis, treiadienis, ketvirtadienis, penktadienis ar sekmadienis ir nelyja mes eisime papldim:
if OR OR OR OR OR OR ($diena != "pirmadienis") ($diena !="antradienis") ($diena !="treiadienis") ($diena !="ketvirtadienis") ($diena !="penktadienis") ($diena !="etadienis") ($oras!="Lyja")) echo (" papldim!");

Vl gi tai panau ms kalb tik labai pedantika. Nra limito kaip mes galime kombinuoti iuos operatorius, ar kiek daug js galite parayti, paprasiausiai gali bti kiek sudtinga suprasti k login iraika reikia jei j danai naudojate. Kaip manote k sako sekantis kodas?
if (($diena == "Pirmadienis" AND $menesis != "Balandis") OR ($diena == "Antradienis" AND $laikas != "12") OR !($menesis != "Gruodis")) echo ("Paskirtas tarybos susitikimas")

Jis sako: jei ne Pirmadienis ir ne Balandis, arba jei Antradienis ir jei ne 12.00, arba ne Gruodis, tada mes turime paskirta tarybos susitikim. Js inoma tai suprasite, taiau tai uims laiko ir pastang. Pairkime kit pavyzd, kuris apskaiiuotu mainos draudimo mok, remdamasi duotais keturiais kintamaisiais vairuotojo amiumi, mainos verte, mainos maksimaliu greiiu ir jos variklio triu. ioje neegzistuojanioje draudimo bendrovje yra galimi tik trys draudimo variantai. Pirmasis variantas yra Visapusis draudimas kainuojantis $1500, kuris prieinamas ioms rizikos grupms:
vairuotojui maiau nei 25 metai mainos vert didesn nei $10,000

72

mainos variklis didesnis nei 1.5L mainos maksimalus greitis daigiau nei 200 kilometr per valand

Standartinis draudimo variantas - $1000, taikomas tiems kurie nepatenka nei vien viruje ivardyt rizikos grup. Treioji yra skirta pensijinio amiaus monms - $750, kuri taikoma iais atvejais:
vairuotojui daugiau nei 65, mainos vert nevirija $5,000, arba maksimalus greitis ne didesnis nei 140 km/h mogus nepatenka nei vien aukiau ivardyt rizikos grup

Ms puslapis apskaiiuos pagal pateiktus kriterijus koks draudimo variantas turi bti pasilytas.

Ibandykite Operatori kombinacij naudojimas

1. Dar kart atidarykite savo teksto redaktori ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <B>PHP Draudimo bendrov</B> <BR> <BR> <FORM METHOD=POST ACTION="quote.php"> Koks js amius? <INPUT TYPE=TEXT NAME="amzius" SIZE=3> <BR> <BR> Koks js mainos maksimalus greitis? <INPUT TYPE=TEXT NAME="greitis"> <BR> <BR> Kokia apytiksli js mainos vert? <SELECT NAME="kaina"> <OPTION VALUE=5000>Maiau nei $5,000</OPTION> <OPTION VALUE=7000>Tarp $5,000 ir $7,000</OPTION> <OPTION VALUE=10000>Tarp $7,000 ir $10,000</OPTION> <OPTION VALUE=25000>Daugiau nei $10,000</OPTION> </SELECT> <BR> <BR> Koks js mainos variklio tris? <SELECT NAME="variklioturis"> <OPTION VALUE=1.0>1.OL</OPTION> <OPTION VALUE=1.3>1.3L</OPTION> <OPTION VALUE=1.5>1.5L</OPTION> <OPTION VALUE=2.0>2.0L</OPTION> </SELECT> <BR> <BR> <INPUT TYPE=SUBMIT VALUE="Paspauskite ia"> </FORM> </BODY> </HTML>

2. Isaugokite kaip quote.html. 3. Udarykite pirm fail ir atsidar nauj, paraykite:


<HTML> <HEAD></HEAD> <BODY>

73

<B> PHP Draudimo bendrov </B><br> <?php if ($amzius<25 OR $greitis>200 OR $kaina>10000 OR $variklioturis>1.5) { echo ("Mes galime jums pasilyti $1500 kainuojant Visapusik draudimo paket"); } if ($amzius>=65 AND ($kaina<=5000 OR $greitis<=140) AND $kaina<=10000 AND $variklioturis<=1.5 AND $greitis<=200) { echo ("Mes galime jums pasilyti $750 kainuojant Pensinink graudimo paket"); } if (($amzius<65 OR $kaina>5000 AND $greitis>140) AND $amzius>=25 AND $greitis<=200 AND $kaina<=10000 AND $variklioturis<1.5) { echo ("Mes galime jums pasilyti $1000 kainuojant Standartin draudimo paket"); } ?> </BODY> </HTML>

4. Isaugokite kaip quote.php. 5. Atidarykite quote.html

6. Padarykite tai k sako mygtukas:

74

Kaip tai veikia


Taip yra ir lengvesni bdu atlikti iai uduoiai, nei ms pasirinktas, taiau mes norjome parodyti kaip sukombinuoti daug kombinacij vienoje iraikoje. Pirmoji programa quote.html yra paprasta HTML forma kuri paklausia js duomen ir juos isaugo. iame pavyzdyje mes pasinaudojome visais vartotojo vestais duomenimis. Mes nenagrinsime quote.html detaliau, tik paymsime, kad buvo sukurti tokie kintamieji - $amzius, $greitis, $variklioturis, ir $kaina. Mus labiau domina kompleksiniai slygos variantai, kurie turjo veikti quote.php faile. I viso mes turim atlikti tris testus, ir sitikinti, kad visi kandidatai kurie naudosis ia programa gaus atsakym ir tik vien atsakym. Pirmasis testas skirtas visapusiko draudimo paketui. Yra keturios slygos, ir jei bent viena j yra teisinga vartotojui gali bti rekomenduota tik pats brangiausias draudimo paketas. Mes patikriname kintakj $amzius, nordami suinoti ar jis maesnis nei 25, kintamj $greitis, nordami pairti ar jis didesnis nei 200, kintamj $variklioturis, nordami suinoti ar variklio tris didesnis nei 1.5L, ir mainos vert ar ji didesn nei $10,000. Jei nors viena i slyg patenkinta mes pateikiame atsakym apie silom visapusiko draudimo paket.
if ($amzius<25 OR $greitis>200 OR $kaina>10000 OR $variklioturis>1.5) { echo ("Mes galime jums pasilyti $1500 kainuojant Visapusik draudimo paket"); }

Antra, mes patikriname dl atitikimo pensijinio draudimo paketui. Jis taikomas kai $amzius didesnis nei 65,o $kaina yra 5000 ar maiau, arba $greitis yra 140 arba maesnis. Mes atliekame antrj test atskirt skliausteliais, nes tik viena i reikmi turi bti teisinga, nors gali bti ir abi. Mes taip pat turime patikrinti, kad vartotojas bdamas pensininku, nepaklitu kitas rizikos grupes, nes jas atitinkantiems klientams jau buvo pasilyti brangesni draudimosi paketai.
if ($amzius>=65 AND ($kaina<=5000 OR $greitis<=140) AND $kaina<=10000 AND $variklioturis<=1.5 AND $greitis<=200) { echo ("Mes galime jums pasilyti $750 kainuojant Pensinink graudimo paket"); }

Galiausiai, nordami pagauti visus kitus variantus mes patikriname ar $amzius yra tarp 25 ir 64, mainos vert didesn nei 5000, ir maksimalus greitis didesnis nei 80. tai reikia, kad ms vairuotojas nepatenka pensijinio amiaus grup, bet taip pat mes turime patikrinti, kad jam/jai virijus kitus kriterijus btu pasilytas brangiausias draudimo paketas. Taigi mes tikriname $greitis, $kaina, and $variklioturis kintamuosius.
if (($amzius<65 OR $kaina>5000 AND $greitis>140) AND $amzius>=25 AND $greitis<=200 AND $kaina<=10000 AND $variklioturis<1.5) { echo ("Mes galime jums pasilyti $1000 kainuojant Standartin draudimo paket"); }

75

Daugybins slygos else ir elseif


Mes apvelgme daugybines slygos variantus su vienu if elementu, bet kas atsitiktu jei mes nortumme vykdyti komand kai slyga yra teigiama ir kit komand kai neigiam? Js visada galite pakeisti slyg ir rayti if element, bet yra daug lengvesnis bdas tai padaryti. else elementas dirba taip: if (slyga yra patenkinta) { atliekamos komados iuose sklaisuteliuose } else { atliekamos komados iuose sklaisuteliuose } Mes galtumme perdaryti ms mainos nuomos pavyzd dar kart:
if ($Age>=21 AND $License=="on") { echo ("Your car hire has been accepted."); } else { echo ("Unfortunately we cannot hire a car to you."); }

Atkreipkite, kad mes komand eilut pradedame i naujos eiluts, tai nra privaloma norint, kad ms pavyzdys veiktu, bet taip yra lengviau skaityti. enkime dar vien ingsn, kas atsitiks jie js norsite patikrinti kintamj su keletu kitu, o ne vienu? Tai pads atlikti elseif elementas, leidiantis slyg tikrinti kelet kart: if (kintamasis yra lygus reiksme1) { atliekamos komandos iuose skliausteliuose } elseif (kintamasis yra lygus reiksme2) { atliekamos komandos iuose skliausteliuose } else { atliekamos komandos iuose skliausteliuose } Mes galime dar labiau patobulinti ms mainos nuomos program, vesdami atsakym, kad visi tarp 18 ir 21 gali isinuomoti main, jei pateiks garantuojanio asmens patvirtinim:
if ($Age>=21 AND $License=="on") { echo ("Your car hire has been accepted."); } elseif ($Age>=18 AND $License=="on") { echo ("Your car hire has been accepted, subject to you providing the name of a guarantor."); } else { echo ("Unfortunately we cannot hire a car to you."); }

76

Tai suderina tris galimas slygas, treioji yra else, kuri pagauna visus variantus jei pirmi trys nebuvo patenkinti. Niekas nemaio mums pridti dar ir dar elseif element ms program. Pavyzdiui programa apskaiiuojanti egzamin rezultatus, kuriuose galima gauti A, B, C, D ar E, gali bti pavaizduota tai taip:
if ($grade>70) elseif ($grade elseif ($grade elseif ($grade elseif ($grade else echo "You echo "You got an A"; > 60) echo "You got a B"; > 50) echo "You got a C"; > 40) echo "You got a D"; > 30) echo "You got an E"; failed";

Vis tiek tai neatsako vien klausim; kaip padaryti kad vieno palyginimo rezultatas but panaudotas kitame palyginime. Pavyzdiui, js norite patobulinti egzamin tikrinim, patikrindami ar asmuo gavs A vertinim taip pat nusipelno specialaus vertinimo u savo projekt. Tokiu atveju jums reikia patalpinti vien element if kitame.

terpti If element vienas kit


Vieno if elemento terpimas kit vadinamas terpimu (nesting). Taigi jei mes patobulintumme ms kod, mes galtumme terpti if element ms 'A grade' if element.
if ($Grade>70) { echo ("You got an A."); if ($ProjectGrade>70) { echo ("You also got a special merit"); } }

Js galite tai padaryti ir su keletu AND operatori, bet tok kod sunkiau skaityti. Jus nereikia sustoti ioje vietoje, nes terpimo procedra gali bti praktikai begalin, bet vl gi js kod btu sunku skaityti ir suprasti. Mes galime dar patobulinti kod, patikrindami ar lankomumas buvo imtaprocentinis ir jei tai apdovanoti mokin dl lankomumo:
if ($Grade>70) { echo ("You got an A."); if ($ProjectGrade>70) { if ($AttendanceRecord==100) { echo ("You also got a special distinction"); } else { echo ("You also got a merit"); } } }

Kaip matote skliausteli kuriuos reikia atidaryti ir udaryti skaiius vis didja, ir jei js paraysite j klaiding skaii pavyzdiui tursite trys atidarytus ir tik du udarytus skliaustelius, kodas neveiks ir bus praneta apie klaid. Jums labai atidiai reikia sekti iuos skaiius. Tai daro labai svarbiu kodo idstym. Jo raymo stilius niekaip netakos programos veikimo, taiau jums tikrai bus lengviau dirbant su didelm kodo dalim. Pavelkite sekant kod, kur viskas surayta be idstymo, ar jis tikrai aikus i pirmo vilgsnio?
if ($Grade>70) {

77

echo ("You got an A."); if ($ProjectGrade>70) { if ($AttendanceRecord==100) { echo ("You also got a special distinction"); } else { echo ("You also got a merit"); } }

Tiesa pasakius a specialiai praleidau vienus skliaustelius! Oops! Nedarykite taip Padarykime pavyzd kuriame btu naudojamos visos ankiau ivardytos galimybs. Mes darysime atostog rezervavimo form keletui marrut. Jis paskaiiuos kainas priklausomai nuo viebuio lygio ir js tikslo. Bus trys galimos vietos Praha, Barselona ir Viena, kiekviena i kuri palaipsniui didja kainos. Taip pat kiekviename mieste bus dviej ri viebuiai trij ir keturi vaigdui. Taiau kelioni kompanijos yra kelioni kompanijos ir pas juos kaina nebtinai kyla tolygiai. Tad skirtumas tarp trej ir keturi vaigdui viebui Barselonoje $1500 , tuo tarpu kai skirtumas tarp tokio paio tipo viebui Vienoje bus net $2250! Ms PHP programa turs atsivelgti visa tai.

Ibandykite sudting kompleksini slyg naudojimas

1. Atidarykite savo teksto redaktori ir raykite:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Holiday Booking Form</B> <FORM METHOD=GET ACTION="holiday.php"> Where do you want to go on holiday? <BR> <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Prague"> Prague <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Barcelona"> Barcelona <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Vienna"> Vienna <BR> <BR> What grade of hotel do you want to stay at? <BR> <BR> <INPUT NAME="Grade" TYPE="Radio" VALUE="Three"> Three Star <BR> <INPUT NAME="Grade" TYPE="Radio" VALUE="Four"> Four Star <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip holiday.html. 3. Udarykite fail ir pradkite nauj:

78

<HTML> <HEAD></HEAD> <BODY> <B>Namllu Holiday Booking Form</B> <BR> <BR> <?php $Price=500; $StarModifier=1; $CityModifier=1; if ($Grade=="Three") { if ($Destination=="Barcelona") { $CityModifier=2; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; } elseif ($Destination=="Vienna") { $CityModifier=3.5; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; } elseif ($Destination=="Prague") { $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; } else { echo ("You've not entered a value for destination, go back and do it again"); } } elseif ($Grade=="Four") { $StarModifier=2; if ($Destination=="Barcelona") { $CityModifier=2.5; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; } elseif ($Destination=="Vienna") { $CityModifier=4; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; } elseif ($Destination=="Prague") { $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; } else { echo ("You've not entered a value for destination, go back and do it again"); } } else { echo ("You've not entered a value for hotel grade, go back and do it again"); } ?> </BODY> </HTML>

79

4. Isaugokite kaip holiday.php prie tai atidiai j patikrin. sitikinkite, kad viskas parayta taip kaip reikia. 5. Atidarykite holiday.html
savo naryklje:

6. Paspauskite ant Submit Query nordami pamatyti kain:

Kaip tai veikia


Sukuriami du kintamieji, $Destination and $Grade, kurie turi vartotjo pasirinkim apie kelions tiksl ir viebuio tip. Antroji programa, holiday.php, yra ilgiausia PHP ptograma kuri mes iki iol parame. Taiau joje nra nieko apie mes nebtumme nekja iki iol, tad mes paingsniui j pervelgsime ir js suprasite, kad joje nieko sudtingo nra. Pirmosios tris linijos sukuria tris reikmes su nustatytomis vertmis:
$Price=500; $StarModifier=1; $CityModifier=1;

Dviej kintamjmodifikatori egzistavimas yra skirtas keisti brangesni viebui ir kelions tiksl kain. Jei mes naudosims keturi vaigdui viebuiu mums teks kaina padidinti dvigubai. Jei apsistosime Vienoje kaina teks padidinti tris kartus ir t.t. Nordami tai padaryti mes padauginsime ms vis kain i i dviej dviej kintamj reikms. Savait Prahoje trij vaigdui

80

viebutyje kainuoja 500 doleri ir nereikalauja joki pakeitim, tad mes paliekame jiems reikm 1; viskas kitas bus brangiau. Taigi ms pirmoji operacija patikrina viebuio lyg:
if ($Grade=="Three")

Jei jis lygus trims, mes pereiname prie sekanio testo nordami nustatyti tiksl:
if ($Destination=="Barcelona")

mes patikriname ar vartotojo pasirinkimas sutampa su Barcelona, ir jei ne, mes pesirenkame kit skaiiavim keli:
$CityModifier=2; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price";

Vis pirma mes pakeitme kintamojo $CityModifier reikm. Tada padauginome jo kain sekanioje eilutje, ir gavome naujj kain. Tada parodome kiek kainuoja ivyka Barcelona. Atkreipkite dmes, kad itos kodo eiluts bus atliekamos tik tuo atvju jei pasirinktas trij vaigdui viebutis, o kelions tikslas - Barcelona. Tai ubaigia ms pirmojj terpt if element. Antrasis testas patikrina ar tikslas yra Vienna:
elseif ($Destination=="Vienna")

Visa tai yra viena didelio terpto if elemento dalis. Mes atliekame sekanti koda tik tuo atvju jei lygis yra trys vaigduts ir kelions tikslas yra Vienna:
$CityModifier=4; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price";

$CityModifier kintamasis padidinamas iki 4, taip atsivelgiant padidjusi kain priklausomai nuo miesto. Mes padauginame j i $Price kintamojo sekanioje eilutje ir pateikiame rezultatus treiojoje. Tai pabaigia ms antraj veiksm kript. Ms treiasi tikrinimas skirtas nustatyti ar pasirinkta Praha ar ne:
elseif ($Destination=="Prague")

Jei taip yra, mes padauginame kaina i egzistuojanio $CityModifier kintamojo, kurio reikm iuo metu yra 1. Mes taip pat pateikiame kelions tiksl ir kain, bet vl gi tik tuo atvju jei kelions tikslas yra Praha ir pasirinktas trij vaigdui viebutis:
$Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price";

Tada mes traukeme eilut pakreipianius kodo veiksmus tuo atvju jei vartotojas nepasirinko kelions tikslo. Jei jie nepasirinko Prahos, Barselonos ar Vienos, mes turime suprasti, kad jie nepasirinko nieko ir praneame apie tai:
else {

echo ("You've not entered a value for destination, go back and do it again"); }

Tai ubaigia pus ms programos, taiau mes turime atlikti tas paias operacijas jei vartotojas pasirinko keturi vaigdui viebut. iuo atvju mes naudosime ir viebui lygio kintamj, padaugine j i dviej:
elseif ($Grade=="Four") { $StarModifier=2;

81

Tada mes patikriname paeiliui kiekvien miest, jei reikia padidindami kelions kain ir vis tai dar padaugindami i viebui lygio kintamojo. Pavyzdio kodas aptarnaujantis Barselon atrodo taip:
if ($Destination=="Barcelona") { $CityModifier=2.5; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; }

Kodas kiekvienam tiksliui yra gana panaus, tad mes nenagrinsime jo toliau. Mes tik vl paiursime gaudani kodo eilut, kuri pasirodo kai nepasirinktas nei vienas miestas. Jums gali ikilti klausimas, kam tai daryti jei vienas toks kodas jau buvo paraytas. Taiau ankiau buvs kodas veik tik tad, kai pasirinktas trij vaigdui viebutis, o dabar mes dirbame su keturi:
else { echo ("You've not entered a value for destination, go back and do it again"); }

Pagaliau mes turime patikrinti, gal kas nors nepasirinko viebuio lygio:
else { echo ("You've not entered a value for hotel grade, go back and do it again"); }

Tai buvo didelis, daugybs skliaustu reikalaujantis kodas. Taiau yra alternatyvi struktra PHP kalboje, kuri leidia paalinti skliaustelius kei naudojama daug slyg, o ir pats kodas atrodo daug suprantamesnis.

Switch elementas
Switch elementas atlieka panai funkcij kaip ir elseif struktroje, kuri mes nagrinjome prie tai. Taiau tai daro daug glausiau ir paprasiau skaityti, bei leidia atsisakyti beveik vis erzinani skliausteli. Jei mes pavelgsime ms paymi pavyzd jis gali atlikti tas paias funkcijas tik panaudojant switch element:
switch ($Grade) { case $Grade>70: echo ("You got an A."); break; case $Grade>60: echo ("You got a B."); break; case $Grade>50: echo ("You got a C."); break; case $Grade>40: echo ("You got a D."); break; case $Grade>25: echo ("You got an E. "); break; default: echo ("You failed"); }

Tai nesutaup labai daug kodo linij, bet paalino kodo dal. Vietoj if ir elseif dabar mes turime tik vien case element ir u jo sekanius veiksmus. Kiekvienu atvju PHP programa vygdo kiek kitok kod.

82

Js pastebjote, kad mes panaudojome komand break ms switch elemente. Kai PHP pasiekia break, ji nutraukia tai k daro, palieka vis switch struktr, ir pereina prie toliau sekanios programins eiluts. Programa nebetikrina atitikimo su kitais kriterijais, net jei 80 procent paimys atitiktu visus kriterijus. Tai yra naudinga, nes mes neturine rayti begaliuniu, ma case gaudytoj kiekvienai situacijai. Jei js norite, kad btu patikrinti visi kriterijai, paprasiausiai praleiskite konamd break, mors reikia paymti, kad i komanda veikia tik su switch elementu, ir neveikia su if. Jei js praleisite od breake, tada visi atvjai bus teisingi ir js gausite A, B, C, D, ir E:
switch ($Grade) { case $Grade>70: echo ("You got an A."); case $Grade>60: echo ("You got a B."); case $Grade>50: echo ("You got a C."); case $Grade>40: echo ("You got a D."); case $Grade>25: echo ("You got an E. "); default: echo ("You failed"); }

switch elementas pristato ir dom ma sutrumpinim:


switch ($State) { case "IL": echo ("Illinois"); break; case "GA": echo ("Georgia"); break; default: echo ("California"); break; }

Jei js nurodte reikm prie case elemento, ji yra automatikai tkrinama su kintamuoju kuris yra pateiktas switch elementu, norin suinoti ar jie sutampa, nesvarbu ar jis btu skaitinis ar raidinis. Atkreipkite dmes, kad po case mes naudojame dvitaki, o ne kabliataki. Kadandi js jau pakankamai geri suprantate k daro swich elementas, grkime prie ms ankstesnio pavyzdio ir panaudokime switch.

Ibandykite switch elemento naudojomas

1. Grkite prie holiday.php, itrinkite jo turin ir paraykite sekanti tekst:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Holiday Booking Form</B> <BR> <BR> <?php $Price=500; $StarModifier=1; $CityModifier=1; $DestGrade = $Destination.$Grade; switch($DestGrade) { case "BarcelonaThree": $CityModifier=2; $Price = $Price * $CityModifier;

83

} ?> </BODY> </HTML>

echo "The cost for a week in $Destination is $Price"; break; case "BarcelonaFour": $CityModifier=2; $StarModifier=2; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; break; case "ViennaThree": $CityModifier=3.5; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; break; case "ViennaFour": $CityModifier=3.5; $StarModifier=2; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; break; case "PragueThree": $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; break; case "PragueFour": $StarModifier=2; $Price = $Price * $CityModifier * $StarModifier; echo "The cost for a week in $Destination is $Price"; break; default: echo ("Go back and do it again"); break;

2. Isaugokite kaip holiday.php. 3. Atidarykite holiday.html paymkite savo pasirinkim ir jis veiks kai ankiaus:

Kaip tai veikia


Mes i karto pateikme pagyr switch elementui first, j lengviau skaityti, ir antra, jis naudoja maiau kodo eilui. Pirmasis tvirtinimas yra subjektyvus. Dl antrojo ms pirmoji programa turjo 58 PHP skripto eilutes, tuo tarpu kai holiday.php teturi 39 linijas, tai beveik tredaliu maiau. Paiurkime program, kaip tai buvo padaryta. Pirmosios tris linijos yra identikos ir nereikalauja paaikinimo:
$Price=500; $StarModifier=1; $CityModifier=1;

84

Ketvirtoji linija pristato naujj kintamaj, $DestGrade, kuris yra kintamj $Destination ir $Grade sjunga.
$DestGrade = $Destination.$Grade;

Taigi, jei js pasirinksite Barselon ir keturias vaigdutes, $DestGrade bus BarcelonaFour. Atkreipkite dmes, kad mes t pat galjome padaryti ir prie tai buvusiame pavyzdyje taip sutaup keleta eilui. Taiau tai nebtu labai didelis sumainimas ir neleistu mums pademonstruoti gryno if elemento. Sumainimas kur mes ia padarme yra jau ymus ir mes tik tikriname ms slygas su $DestGrade:
switch($DestGrade) {

Viskas k mums reikia padaryti yra sitikinti, kad mes perimame visus galimus variantus. Viskas kas netelpa tris viebutis padaugintus i dviej kain turi bti neteisingai upildyti uklausimai. Tai reikia,k da ms visi variantai yra BarcelonaThree, BarcelonaFour, PragueThree, PragueFour, ViennaThree, ir ViennaFour, taigi mums reikia perimti kiekvien i j. Vsi ie variantai atlieka panaius veiksmus, tad mes neaikinsime kiekvieno i j. Paiursime tik vien ir ppervelgsime j:
case "BarcelonaThree": $CityModifier=2; $Price = $Price * $CityModifier; echo "The cost for a week in $Destination is $Price"; break;

BarcelonaThree atvju, mes nustatme $CityModifier reikm du ir padauginome j i kainos. Tada pateikme atsakyma ekrane ir nutraukme tolimesn programos veikim. Jei reikm $DestGrade nesutampa su jokia, tai reikia, kad kakas yra blogai ir mes siuniame vartot atgal:
default: echo ("Go back and do it again"); break;

Laikantis ger programavimo manier mes gale raome break gale, nors jis nedaro nieko. Paprasiausiai maiau tiktina, kad js kodas sukels problem, net jei gale paraysite dar viena case po else. Viskas paprasta. Dabar kai apvelgme if ir susijusi switch elementus, padarysime praktin pavyzd.

Formos tikrinimas
Paskutiniame skyriuje mes minjome, kad yra imanoma su-lugdyti ms paskolos program atsitiktinai arba specialiai pateikiant klaiding informacija. Pavyzdiui, laukelyje kuris klausia amiaus, galima parayti Ne tavo reikalas. Kaip js PHP programa isprs ias problemas? Js galite tiktis, kad js vartotojai nerays nesamoni, bet kiekvienu atvju kai programa pateikiama vieumon, js bsite nusteb, dl galim atsakim gausos, pradedans "999", ir baigiant odine iraika "keturesdeimt keturi", bet js PHP programai tai visikai beveriai duomenys. i problema sprendiama udraudiant tam tikrus simbolius konkreiuose laukeliuose. Ms pavyzdyje, mes perduodame vartotojo ami kintamajam $Age. Tad PHP puslapyje mes galime patikrinti vesta reikm su realistik skaii eile:
if ($Age<1 or $Age>120) { echo "Incorrect Age value entered"; break;

85

ir tai utikrins, kad duomenys daugiau maiau teisingi.

Exit elementas
Js taip pat galite panaudoti kit element vietoj break, exit.
if ($Age<1 or $Age>120) { echo "Incorrect Age value entered"; exit; }

Jei mes tikriname form ir inome, kad kakas blogai ved duomenis, nra jokio tikslo juos tikrinti ir atlikti kitus veiksmus toliau, taigi mes galime tuoj pat sustoti panaudoja komand exit, kuri savo funkcijom yra tokia pati kaip ir ms jau inomas break. Daugiau nebus vygdoma nei HTML, nei PHP kodas, ar tekstas, jei if elemente bus vykdyta exit komanda. Taiau exit komanda staiga nutraukia puslapio vygdym ir tuo paiu serveris nebepateikia joki likusi simboli, tame tarpe neudaro ir jau atidarytu HTML tagu, tad exit komandos naudojimas turtu bti atsargus. Grkime prie ms paskolos programos ir apsaugokime j nuo vartotj klaid.

Ibandykite formos tikrinimas

1. Grkite ir atidarykite loan.php ir pakeiskite sekanti kod su jau egzistuojantiu:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Credit Bank Loan Application Form</B> <BR> <BR> <?php if ($Age<10 OR $Age>140) { echo "Incorrect Age entered - Press back button to try again"; exit; } if ($FirstName=="" or $LastName=="") { echo "You must enter your name - Press back button to try again"; exit; } if ($Address=="") { echo "You must enter your address - Press back button to try again"; exit; } If ($Loan!=1000 and $Loan!=5000 and $Loan!=10000) { echo "You must enter a loan value - Press back button to try again"; exit; } $SalaryAllowance = $Salary/5; $AgeAllowance = ($Age/10 - ($Age%10)/10)-1; ...

86

2. Isaugokite kaip loan.php. 3. Dabar grkite atgal ir pabandykite pasisti forma nevesdami visos
informacijos arba aikiai neteising ami.

4. Js turtumte gauti praneim apie klaid:

Kaip tai veikia


inoma js bet kad galite vesti kie nors kito adres, arba ne savo ami. Taiau PHP to niekaip negali patikrinti. Ms naujasis kodas paprasiausiai patikrina ar vartotojas netyia nepamiro vesti duomenis, ir ar specialiai neved aikiai klaiding savo met. Pirma patikrinama ar amius yra tarp 10 ir 140, kitu atvju mes galime bti tikri, kad asmuo meluoja:
if ($Age<10 OR $Age>140) { echo "Incorrect Age entered - Press back button to try again"; exit; }

Mes parodome atitinkam praneim ir baigiame vygdym. Mums nereikia daryti nieko daugiau jei i slyga nepatenkinta. Antras if elementas patikrina ar vestas vardas ir pavard. Eilut "" yra tuios eiluts kintamasis ir tai tai mes tikriname:

87

if ($FirstName=="" or $LastName=="") { echo "You must enter your name - Press back button to try again"; exit; }

Ta pat padarome ir su adresu, patikrindami ar kintamasis $Address nra tuias:


if ($Address=="") { echo "You must enter your address - Press back button to try again"; exit; }

Galiausiai, mes patikriname pasirinkimo mygtukus vienai i trij galim reikmi:


If ($Loan!=1000 and $Loan!=5000 and $Loan!=10000) { echo "You must enter a loan value - Press back button to try again"; exit; }

Jei paskolos suma nelygi vienai i nustatytu reikmi mes inome, kad vartotojas nepasirinko reikms.

Piktybikas skriptinimas HTMLSpecialChars


Tai visikai neisprend ms kodo patikimumo jei js teisingai upildte kod, bet parate sekanti vard <B>Abel</B>, turtumte pamatyti tai tai:

Js galite pagalvoti, kad neatsitiko nieko neprasto iskyrus vard Abel. Jis parykintas. Taip atsitiko todl, kad narykl interpretavo HTML tag <B>. Dabar sivaizduokite, kad kakas specialiai para piktybin HTML kod, arba kas dar pavojingiau skript. Tai gali priversti program dirbti jiems. Laimei PHP pateikia ger funkcij sustabdania tokius dalykus HTMLSpecialChars. Tam tereikia eiluts tipo argumento:
$String = HTMLSpecialChars("<B>This won't display the Bold tags </B>");

arba kintamojo vardo:

88

$String ="<B>This won't display the Bold tags </B>"; $String = HTMLSpecialChars($String);

i funkcija paveria bet kok HTML tag paprasta teksta kur mes norime pateikti, ie tagai nevygdomi narykls. Taigi jei norime tai sustabdyti turime kiekvienam teksto laukelio reikm paleisti per emiau pateikt funkcij:
$FirstName = HTMLSpecialChars($FirstName); $LastName = HTMLSpecialChars($LastName); $Address = HTMLSpecialChars($Address); $Age= HTMLSpecialChars($Age);

Mes turime pateikti kod kur nors failo pradioje ir vietoj HTML bus patekta

Dabar ms programa kiek saugesn.

Apibendrinimas
iame skyriuje mes pristatme pagrindin PHP kalbos dal sprendim primim. PHP kalboje sprendim pagrindas yra if elementas. Mes taip pat turjome galimyb susipainti su Loginiais operatoriais daugiaus nei, maiaus nei, lygybs, neligyvs, AND, OR, ir NOT. mes pamatme, kad if elementas turi kelet skirting format ir yra gana lankstus apdorojant daugybinius sprendimus ir jis gali bti prapleiamas elseif. Switch elementas pasil mums dar geresn sprendim apdorojim, taiau kai kyla klausimas k vartoti, if, elseif, ar switch, tai priklauso tik nuo programuotojo pasirinkimo. Mes pabaigme skyri pagerindami ms paskol program, pasinaudodami naujai imoktom galimybm. Taiau ios technikos bus naudojamos ir toliau visoje knygoje ir tai yra labai svarbu. Kaip js tikriausiai pastebjote, pavyzdiai vis didja, o kodas juose kartojasi. Kitame skyriuje mes susipainsime kaip PHP elgiasi su pasikartojimais pasinaudodama ciklais. Pagrindinis cikl vartojimo privalumas, tas, kad jie sumaina naudojamo kodo apimt. Jie taip pat gali bti panaudoti raant kintamuosius masyvus daug greiiau ir efektyviau, nei linijinis kodavimo bdas.

89

5
Ciklai ir Masyvai
Mes pristatme fundamentalius programavimo pagrindus prie tai buvusiame skyriuje sprendim primim. Mes suinojome, kad kodas gali bti vykdomas net tik paeiliui, bet ir priklausomai nuo tam tikr programuotojo sukurt slyg. iame skyriuje mes pristatysime tai k kompiuteris daro geriausiai ir tiesa pasakius tam jie ir buvo sukurti pasikartojani uduoi vykdymas. Jei js turite atlikti t pai uduoti kas dien, kas valanda, vl ir vl, js anksiau ar vliau vesite klaid. Panai uduot paskyrus kompiuteriui, jei jis pirm kart atliks j teisingai teisingai ji bus vykdoma ir visais kitais atvejais. Mechanizmas kur naudoja dauguma programavimo kalb, tame tarpe ir PHP, atliekant pasikartojanias uduotis yra ciklai (loops). PHP kalboje yra trij ri ciklai, ir mes ruoiams pus skyrius skirti juos visus nagrinjant. Kai jau baigsime su ciklais, persikelsime prie susijusi element masyv. Mes jau iek tiek minjome masyvus anksiau ioje knygoje. Masyvas yra eil suindeksuotu kintamj, kurie kartu su ciklais gali bti labai naudingi. Ciklai suderinti su masyvais gali sukurti imtus, net tkstanius kintamj, panaudojus tik tris ar keturias kodo eilutes. Kaip jau tapo prasta skyri pabaigsime praktiniu pavyzdiu kuris turs tiek ciklus tiek ir masyvus. iame skyriuje aptarsime ias temas pagal eil
While ciklas Do while ciklas For ciklas Masyv krimas Duomen gavimas i masyv Kaip masyvai yra indeksuojami Kaip masyvai gali bti saugomi Daugybiniai masyvai Praktinis cikl ir masyvu pavyzdys

90

Ciklai
Prie tai buvusiame skyriuje mes pristatme akojimosi (pasirinkimo) elementus, kurie leido pristatyti sprendim primim PHP kode. Ciklai kakuo panas akojimsi, nes abiejuose atvejuose priklausomai nuo slygos sekanti kodo eilut gali bti vykdoma arba ne. Taiau ciklai skiriasi nuo palyginimo operatori nes tas pats veiksmas gali bti kartojamas daugybe kart. Slyga yra patikrinama ir jei ji teigiamas kodas cikle yra vykdomas. Tada vl patikrinama slyga; jei vl teigiama ciklas atliekamas dar kart; jei ji vis dar teigiama, kodas dar kart vykdomas ir taip daugyb kart. Manau supratot esm. Tiesa pasakius ciklai turi dar t bendro su slygos operatoriais, mes matme kad pasirinkimo operacij galime atlikti trimis bdais, pasirinkdami t kuris mums konkreiu atveju geriausiai tinka. Panaiai, yra trys cikl tipai, kiekvienas kuris tina skirtingai situacijai. Dabar mes ianalizuosime kiekvien atskirai.

while ciklas
Mes pradsime while cikl, nes jis pats paprasiausias i trij, ir kiek panaus if element. Kaip ir if elementas, jis tikrina slygos rezultat. Priklausomai ar slyga buvo patenkinta ar ne, kodo dalis esanti tarp skliaustu yra vykdoma. while (slyga yra teigiama) { vykdomas kodas tarp skliaust } Kai ciklo kodas yra vykdomas, slyga viruje yra tikrinama vl ir kodas gali bti vykdomas vl jei ji teigiama (true). Jei slyga yra patikrinama ir gaunamas neigiamas rezultatas, kodas tarp skliaustu bus ignoruojamas ir PHP vykdys pirmj eilut sekania po riestini skliausteli. Pairkime ita pseudo-kodo pavyzd: while (mnulis yra pilnatyje) { vilkai staugs } Taigi jei mnulis nra pilnatyje, vilkai ne staugs, bet kol pilnatis vilkai staugs. Pairkime kit pavyzd. Tarkim mes norime informuoti vartotoj apsiperkanti e-parduotuvje, kad jo kredito limitas buvo virytas. Mes galime panaudoti tok kod nordami praneti vartotojui apie kredito limito virijim:
while ($VisoPirkiniu > $KreditoLimitas) { echo ("Js virijote savo kredito limit, tad paskutinis pirkinys bus paalintas i js usakymo srao"); $VisoPirkiniu = $VisoPirkiniu - $PaskutinisPirkinys; $PaskutinisPirkinys = $PriespaskutinisPirkinys; }

Taigi jei vartotojas virija kredito limit $KreditoLimitas, mes ataukiame paskutini pirkin ($PaskutinisPirkinys), paalindami jo reikm i visos pirkini kainos sumos ($ShoppingTotal). Tada mes pakaiiame kintamojo $PaskutinisPirkinys reikm prie paskutinio pirkinio reikm. iuo bdu mes galime kartoti cikl, paalindami viena po kito pirkinius, kol $VisoPirkiniu yra maesnis nei $KreditoLimitas.

91

Js gal bt pastebjote, kad is ciklas gali tsti aminai jei $KreditoLimitas btu pateiktas neigiamas skaiius. Jei js naudojate cikl kurio reikm visada gali btu true, gali susidaryti begalinis ciklas, neleisiantis js programai baigti darbo. Tai nesukels joki praneim apie klaid, paprasiausiai ciklas bus vykdomas vl ir vl. Kai raote kod kuriame bus cikl turkite tai galvoje.

do while ciklai
do while ciklas yra panaus while cilk, iskyrus vien aspekt: slygos operatorius yra tikrinamas ciklo pabaigoje, o ne pradioje. Tai turi i pirmo vilgsnio, bet i tikrj svarb skirtum ciklas bus atliktas bent vien kart, net jei patikrinta gale slyga bus neteisinga. do { vykdomas kodas tarp skliaust } while(slyga yra teigiama); grtama ir atliekama i naujo Taigi js turite naudoti do while jei norite, kad ciklas btu atliekamas bent kart, net jei slyga yra false. Tai svarbu. Jei mes grime prie ms pirkini kodo ir pakeisime cikl do while, tai paveiks vis ms kodo veikim:
do { echo ("Js virijote savo kredito limit, tad paskutinis pirkinys bus paalintas i js usakymo srao"); $VisoPirkiniu = $VisoPirkiniu - $PaskutinisPirkinys; $PaskutinisPirkinys = $PriespaskutinisPirkinys; } while ($VisoPirkiniu > $KreditoLimitas);

Dabar mes paraome spjant ura net gi prie patikrindami ar pirkjas tikrai virijo savo kredito limit. Tai tikrai ne tai ko mes norime! Paiurkime kokioje situacijoje do while ciklas gali bti naudojamas. Jei mes keliautumme autostrada nuo 1 poskio iki 10 tai galima btu parayti taip: do { Vauruojam iki kito poskio; } while ($poskis != 10); irint kod matosi, kad norint pasukti i autostrados, mes turime privaiuoti bent jau pirmj posk; taigi mums btinai reikia bent kart atlikti cikl. Kitas geras PHP pavyzdys btu tada jei jums tikrai reikia atlikti skaiiavimus bent kart, taiau t skaiiavim gali prireikti ir daugiau, kol gaunamas norimas rezultatas. Pavyzdiui mes turime pirminio skaiiaus paiekos program. Norint patikrinti ar skaiius yra pirminis, mes turime j dalinti i vis skaii pradedant dviems ir baigiant jo paio reikme minus vienas. Tai lengvai gali atlikti while loop cilkas:
do { $Remainder = $PossiblePrimeNumber%$Number; $Number=$Number+1; } while ($Remainder!=0 AND $Number<$PossiblePrimeNumber);

ia mes dalinome ms tikrinam skaii $PossiblePrimeNumber i vis skaii pradedant 2 ir baigiant vienu maiau nei pats $PossiblePrimeNumber, naudodamiesi modulus operatoriumi nustatydami ar yra dalybos likutis. Per kiekvien cikl mes atliekame dalyb ir patikriname jos likut. Jei nerandamas joks likutis per vis cikl, tai reikia, kad skaiius negali bti pirminis.

92

Mes turime atlikti bent vien cikl, nordami suinoti ar ms kandidatas dalinasi i kito skaiiaus taigi do while ia labiausiai tinkamas. Jei mes praeisime vis cikl su duotuoju skaiiumi neaptikdami nei vienos dalybos, inosime kad ms skaiius dalinasi tik i 1 ir savs paio taigi jis pirminis. Kita dana situacija kur do while yra labai naudingas yra tada kai mums reikia laukti vartotojo reakcijos. Pavyzdiui, ar atsimenate ms sukurta spjimo aidim 4 Skyriuje, kur PHP generuodavo atsitiktin skaii nuo 1 iki 10? Kas bus jei mes norsime taip pakeisti kod, kad vartotojas spliotu tol kol jo pasirinktas skaiius bus teisingas? Paprasiausias sprendimas yra program traukti do while cikl, kuris bt vykdomas, kol atspjamas teisingas skaiius. Dabar sustiprinkime ms do while ciklo painim pavydiu. Su jau anksiau pateiktu pirminio skaiiaus pavyzdiu mes sukursime pilnai veikiani PHP program.

Ibandykite do while naudojimas

1. Su savo teksto redagavimo programa sukurkite tok fail:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="check.php"> What is your Number: <INPUT NAME="Guess" TYPE="Text"> <BR> <BR> <INPUT TYPE=SUBMIT VALUE="Click here to check if it is prime"> <BR> </FORM> </BODY> </HTML>

2. Isaugokite kaip check.html. 3. Atsidarykite naujj lang ir paraykite sekant kod:


<HTML> <HEAD></HEAD> <BODY> <?php $Count=2; do { $Remainder = $Guess%$Count; $Count=$Count+1; } while ($Remainder!=0 AND $Count<$Guess); if (($Count<$Guess) || ($Guess==0)) { echo ("Your number is not prime"); } else { echo ("Your number is prime"); } ?> </BODY> </HTML>

4. Isaugokite kaip check.php. 5. Atidarykite check.html


savo naryklje ir veskite skaii:

93

6. Paspauskite ant mygtuko nordami suinoti atsakym:


Kaip tai veikia
check.html vienintelis tikslas yra gauti skaii i vartotojo:
What is your Number: <INPUT NAME="Guess" TYPE="Text">

is skaiius yra perduodamas $Guess kintamajam kuris naudojamas check.php faile. ia mes vis pirma nustatome skaiiavimo kintamojo reikm:
$Count=2;

Jis yra 2, mes nepradedame nuo 1 nes iaip ar taip bet koks skaiius dalinasi i 1. toliau prasideda ciklas:
do {

Ciklo viduje mes tikriname liekan likusi po $Guess ir $Count dalybos. Tada mes didiname ms $Count kintamojo reikm:
$Remainder = $Guess%$Count; $Count=$Count+1;

ios dvi linijos ir sudaro vis ciklo pagrind. Savo pavyzdyje mes vedme 25634, tad is ciklas dalino skaii 25634 i 2, 3, 4, 5, 6, 7, 8, ir taip iki pat 25633. Tai didelis kiekis operacij kurias turi atlikti ms ciklas. Kiekvieno ciklo pabaigoje mes patikriname ar nepatenkintos dvi slygos: ar nra dalybos liekanos ir ar kintamasis $Count nepasiek tiriamo skaiiaus reikms:
} while ($Remainder!=0 AND $Count<$Guess);

Savo cikl mes galime ubaigti tik tada kai bent viena i salyg buvo patenkinta. Jei ciklas usibaig, bet $Count nesutampa su $Guess, reikias tikrinamas skaiius buvo padalintas i skaiiaus esanio $Count kintamajame, tad $Guess nra pirminis. Taip pat mes turime prisiminti apie 0 i kurio dalinant visi atsakymai bus lygus nuliui, taiau pats 0 nra pirminis. I kitos puss jei du kintamieji sutampa, reikias vartotojo pateiktas skaiius yra pirminis.
if (($Count<$Guess) || ($Guess==0)) { echo ("Your number is not prime"); } else { echo ("Your number is prime"); }

94

Paskutinis btinas veiksmas yra pateikti vartotojui atsakym. Dabar laikas susipainti su paskutiniuoju cikl tipu.

for Loops
for geriausiai naudoti kai ciklas turi bti vykdomas i anksto nustatyt kart skaii. Tariant kitais odiais jis suteikia jums galimyb nurodyki kiek kart ciklas turi bti vykdomas. Slygos dalis yra kiek sudtingesn nei while ciklo, nes susideda i trij dali: for (ciklo skaitiklis; ciklo skaitiklio patikrinimas; skaitiklio keitimas)
{

vykdomas kodas tarp i eilui } Kartu su for ciklo mes pristatome ir nauj koncepcij ciklo skaitiklis. Tai kintamasis skirtas apkaiioti kiek kart reikia atlikti cikl ir j ubaigti kai is skaiius virijamas. Treioji slygos dalis utikrina, kad mes pakeiiame skaitiklio reikm kiekviename cikle. ios trys dalus utikrina, kad mes galime sukonstruoti sudtingas slygas ir cikl konstrukcijas. Taiau i tikro nei viena i dalis nra privaloma, taiau nordami geriau suprasti ciklo veikimo principus mes naudosime jas visas. Pairkime kaip for ciklas gali bti panaudotas. Pirmasis pavyzdys: atspausdinsime ms vard 10 kart stulpeliu. inoma mes galine pasinaudoti echo komanda deimt kart, taiau tai btu nelabai racionalu. Taip pat mes galtume naudoti k tik imokt while cikl, ir sukurti skaiiuojanti kintamj ciklo viduje, kaip pateikta emiau:
$counter=0; while ($counter<10) { echo "My name is Chris!"; $counter=$counter+1; }

Taiau kiek kartu btu atliekamas itas ciklas? Ar tai 9 nes kai pasiekiame 10 ciklas sustoja? Ar tai 11 nes ciklo slyga pradedame skaiiuoti nuo 0? I tikro jis bus atliktas 10 kart, taiau mes turime atlikti daug daugiau logini apmstym, kad sitikinti jog viskas gerai. Ciklo pasikartojimo skaii geriausiai skaiiuoti su for ciklu:
for ($counter=1; $counter<=10; $counter++) { echo "My name is Chris!"; }

Ciklo skaitiklis gali bti panaudotas ir paio ciklo viduje:


for ($counter=1; $counter<=10; $counter++) { echo $counter; }

Tai pateiktu toki iraik 12345678910. Js tikriausiai pastebjote, kad mes pristatme nauj termin kurio nenaudojome anksiau: didinimo operatori ++. Jis tapatus eilutei:
$counter=$counter+1;

Vlgi tai tik patogus sutrumpinimas.

95

Pabandykime padaryti pavyzd kuris sukurtu dinamin form. Jis paima reikmes i vartotojo ir jomis remiantis sukuria HTML elementus sekaniame puslapyje. Tada elementai pateikiami vartotojui treiajame puslapyje. Pabandykite, tai nra taip sudtinga.

Ibandykite for ciklo naudojimas

1. Neleiskite ilstis savo teksto redaktoriui ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=POST ACTION="dynamic.php"> How many children do you have? <INPUT NAME="Number" TYPE="Text"> <BR> <BR> <INPUT TYPE=SUBMIT> <BR> </FORM> </BODY> </HTML>

2. Isaugokite kaip dynamic.html. 3. Udarykite fail, ir sukurkite naujj:


<HTML> <HEAD></HEAD> <BODY> <FORM METHOD=GET ACTION="dynamic2.php"> <?php for ($Counter=0; $Counter<$Number; $Counter++) { $Offset = $Counter+1; echo "<BR><BR>Please enter the name of child number $Offset<BR>"; echo "<INPUT NAME=Child[] TYPE=TEXT>"; } if ($Counter==0) echo"Press the button to move on"; ?> <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

4. Isaugokite kaip dynamic.php. 5. Vl gi udarykite it fail ir sukurkite dar vien:


<HTML> <HEAD></HEAD> <BODY> <?php $Count=0; echo "Your children's names are:"; do { echo"<BR><BR>$Child[$Count]"; $CheckEmpty = "$Child[$Count]"; $Count=$Count+1; } while ($CheckEmpty!=""); if ($Count==1) echo "Not Applicable"; ?> </BODY> </HTML>

96

6. Isaugokite kaip dynamic2.php. 7.Udarykite j. Tada atidarykite dynamic.html savo naryklje ir paraykit skaii didesni nei 0, net jei neturite vaik:

8. Paspauskite ant Submit Query ir sekaniame puslapyje pamatysite tiek eilui kok skaii parate: 9. Paraykite kokius nors vardus:

10. Paspauskite ant Submit Query i js vesti vardai bus pateikti.

97

Kaip tai veikia


i paprasta uduotis nra tokia paprasta kaip gali pasirodyti i pradi. Mes pradedame paprastu HTML failu dynamic.html, kuris paprao vesti vaik skaii. is skaiius perduodamas kintamj $Number dynamic.php skripte.
How many children do you have? <INPUT NAME="Number" TYPE="Text">

Tada jau ms PHP programoje mes padarome nedidel triuk. 1 Skyriuje mes jau minjome, kad pasiuntus HTML tagus kaip tekst PHP skripte jis paveriamas HTML. Tas pats principas panaudotas ir ia. Taigi sisdami <FORM> tag kaip echo komand, mes nurodome naryklei, kad norime sukurti form.
<FORM METHOD=GET ACTION="dynamic2.php"> <?php echo

Kai jau esame <FORM> tagu viduje mums reikia sukurti norim teksto langeli skaii. Mes inome kiek j mums reikia, kadangi vartotojas jau ved skaii prie tai buvusiame puslapyje. is skaiius saugomas kintamajame $Number. Pats laikas pristatyti ir pat for cikl. Mes norime parodyti tiek teksto langeliu, kiek yra $Number reikm, taiau jei vartotojas neturi nei vieno vaiko mes neturime parodyti nei vieno tokio langelio. Tai reikia, kad mes trume pradti $Counter nuo nulio, ir jei kintamojo $Number reikm yra 0, mes i viso praleisime cikl jo neatlikdami. Tad ciklo skaitiklis pradeda skaiiuoti nuo nulio ir didja vienu vienetu kiekvien cikl. Ciklas kartojamas tol kol skaitiklio reikm maesn nei vaik skaiius:
for ($Counter=0; $Counter<$Number; $Counter++) {

Ciklo viduje mes susiduriame su kita problema. Mes turime personalizuoti kiekvien teksto langel juos sunumeruojant. Taiau jei mes naudosime skaitikl jo reikm bus vienetu maesn nei turtu bti. Tad mes turime apeiti $Counter, vesdami dar vien kintamj, kurio reikm btu $counter plius vienas:
$Offset = $Counter+1;

Ms programa jau gauna aikius bruous. Mes parodome praneim kuriame papraome vesti vaiko vard:
echo "<BR><BR>Please enter the name of child number $Offset<BR>";

Tada pateikiame teksto langel. Pastebkite, kad nurodydami teksto eiluts vardo atribut, mes parame lautinius skliaustus po jo, taip nurodydami, kad naujas kintamasis yra masyvas. Kiekvien kart kai vardas perduodamas kintamajam $Child, jis bus isaugotas naujame elemente: $Child[0], $Child[1], $Child[2] ir taip toliau:
echo "<INPUT NAME=Child[] TYPE=TEXT>"; }

Ciklas ia ir usibaigia. Tad viskas k mes padarme yra kiekviena karta vykdydami cikl pateikiame truputli teksto ir teksto laukel. Po to kai ciklas ubaigtas, mes einame toliau ir paraome Submit mygtuk, ir udarome pai form. Taiau prie tai padarant mums reikia patikrinti ar vartotojas neved nulio. Jei taip ir atsitiko, mes parodome kit praneim:

98

if ($Counter==0) echo"Press the button to move on"; ?>

Treioji programa paprasiausiai atspausdina vardus kurie saugomi masyve. Skamba gana paprastai, taiau vis pirma js turite turti omenyje, kad kintamasis $Number nebuvo perduotas naujajam skriptui. Jis egzistavo tik paskutiniame puslapyje dynamic.php. Taigi, ioje situacijoje mes numanome, kad masyve $Child[] yra vesti vaik vardai, taiau neinome kiek j yra. Tai reikia, kad mes turime pasinaudoti ms senu draugu do while ciklu ir apskaiiuoti vest vard skaii rankiniu bdu. Mes pradsime nuo nulio, nes ir vard gali bti nulis.
$Count=0;

Mes parodome tekst web puslapyje: echo "Your children's names are:"; Tada pradedame do while cikl, nes norime, kad ciklas btu vykdytas bent kart:
do {

Praddami cikl mes pateikiame pirmj masyvo element, $Child[0]. Jei jis tuias, tada nieko iskyrus tui eilut nebus parodyta. Kitu atveju bus pateiktas pirmojo vaiko vardas:
echo"<BR><BR>$Child[$Count]";

Tada kintamajam $CheckEmpty mes priskiriame $Child[0] reikm. Jei ji tuia, $CheckEmpty sukels ciklo pabaig. Jei ne, mes vykdysime cikl toliau.
$CheckEmpty = "$Child[$Count]";

Mes padidinsime skaitikl:


$Count=$Count+1;

Tada patikrinsime ar $CheckEmpty nra tuias. Jei taip ir yra mes ubaigsime savo cikl; jei ne, tesiame:
} while ($CheckEmpty!="");

Galiausiai, mes turime patikrinti, gal vest vaik skaiius buvo 0. Jei taip ir buvo mes pateikiame atitinkama praneim:
if ($Count==1) echo "Not Applicable";

itas pavyzdys ne tik pademonstravo for ciklo naudojim, bet ir pristat ms sekani tem masyvus. Prieastis, kodl mes tik dabar pradjome apie jas pokalb yra ta, kad masyv naudojimas labai palengvina darb, taiau be galimybi kurias mes dabar jau inome, jais sunku pasinaudoti. Kas btu jei jums reiktu vesti 20 vaik? Be cikl js kodas turtu 20 eilui nuskaityti vardam, ir dar 20, kad juos pateikti atgal. O dabar sivaizduokite programas kurios dirba su tkstaniais ir milijonais odi? Be cikl mes prarandame ir dal dinamikumo nes vedimo laukeli skaiius btu i anksto nustatyta, nebtu galima j generuoti dinamikai.

99

Masyvai
Mes jau trumpai pristatme masyvus ioje knygoje, ir k tik pasinaudojome jais vl. Atjo laikas apvelgti juos isamiau. Masyvai yra kintamj rinkinys turintis t pat vard, bet kiekvienas turi skirtinga indeks. Kiekvienas masyvo narys vadinamas elementu. Js galite sukurti masyvus tokiu pat bdu kaip ir paprastus kintamuosius, tik nepamirkite parayti lautini skliaust kuriuose raomas indeksas:
$StatesOfTheUSA[1] = "Washington"; $StatesOfTheUSA[2] = "California";

Js nebutinai turite priskirti reikmes i eils, galite praleisti kelet ar per tiek kiek norite:
$StatesOfTheUSA[49]="Alaska"; $StatesOfTheUSA[13]="Alabama";

Tiesa pasakius js galite visikai atsisakyti skaitins numeracijos ir naudoti raides. Tokie masyvai kaip is danai vaidinami asociaciniais masyvais:
$StateCapital["ca"] = "Sacramento"; $StateCapital["il"] = "Springfield";

Atkreipkite dmes, kad nordami pasiekti asociacinio masyvo elemento reikm, js galite nerayti kabui jei norite. Norint parayti Sacremento, galite rayti:
echo $StateCapital["ca"];

arba
echo $StateCapital[ca];

Abu pateiks tokius paius atsakymus. Dar vienas PHP masyvo privalumas tas, kad to paio masyvo elementams galite priskirti skirting tip duomenis. tai pavyzdys:
$Number[1]=24; $Number[2]="twenty three"; $Number[2]=$variable; $Number["ca"]=$variable;

Taiau ia kyla keletas klausimu. Kaip PHP ino kokio dydio masyvas turi bti? Ir kiek atminties ji turi skirti masyvui?

Masyv inicializacija
Pradini masyvo reikmi nustatymas vadinamas inicializacija. Mes jau susisdme su masyv inicializacija du kartus ioje knygoje: mes nesirpinome dl indeksavimo ir leidome visk padaryti paiai PHP. Mes sukuriame vien masyvo element, tada sekant tokiu paiu vardu:
$Author[]="William Shakespeare"; $Author[]="Franz Kafka";

Be lautini skliaust PHP neinot, kad mes operuojame masyvo elementais, ir pakaistu pirmj reikm antrj: lautiniai skliaustai nurodo, kad mes norime saugoti duomenis masyve. Kadangi nra indekso reikms PHP pati nusprendia kokias suteikti. Js sitikinsite, kad jei $Author[] masyvas nebuvo naudotas anksiau, reikms pateiktos viruje bus isaugotos kaip $Author[0] ir $Author[1]. PHP pati priskirs reikaling indeks.

100

Mes taip pat jau susidrme ir su kitu bdu priskirti nauj element masyvui nurodant element indeksus:
$Author[0]="William Shakespeare"; $Author[1]="Franz Kafka";

itame pavyzdyje mes patys nustatome masyvo element indeksus, neleisdami to padaryti PHP indeksavimas gali vykti ir ne pagal eil, kaip jau rayta anksiau. PHP skiriasi nuo daugelio programavimo kalb dviem aspektais. Vis pirma mums nereikia nustatyti duomen tipo saugomo masyve, tai susyja su visa PHP esme kai jums nereikia nustatinti kintamj tipo nes PHP puikiai tai padaro pati. Antrasis iskirtinumas yra tas, kad mums nereikia nurodyti kokio dydio bus masyvas prie pradedant juo naudotis. Dar karta pati PHP nustato kokio dydio turi bti maksimalus indeksas; pavyzdiui $Author[] tereikia dviej element. Yra dar bdai PHP kalboje sukurti masyvams. Abiejuose panaudota array () konstrukcija. Jei mes paimtumme ms autori pavyzd, jie masyv gali bti traukti iuo bdu:
$Author = array ("William Shakespeare", "Franz Kafka");

Dar kart PHP automatikai sugeneruos indekso reikmes. Dar kart indeksas prasids nuo nulio, ir naujosios reikms bus patalpintos maiausias dar neuimtas indekso reikmes. Jei jums reiktu pavaizduoti $Author[1] turin, tai btu Franz Kafka. Tokio tipo masyvams nra jokio dydio apribojimo, js taip pat galite parayti ir toki eilut:
$StatesOfTheUSA = array ("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

Vl gi pirmoji valstija gaus indeks 0, o Wyoming turs 49 indeks. Taiau tai yra kiek neintuityvu, js inote, kad JAV yra 50 valstij, tad paskutins valstijos indeksas 49 gali js kiek sutrikdyti. Norint to ivengti array() funkcija, leidia jums pradti indeks nuo to skaiiaus kokio js norite. Tam naudojamas => operatorius:
$StatesOfTheUSA = array (1 => "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

Tariant kitais odiais, js nurodote nuo kokio indekso pradti ir paraote => operatori, viskas kitas darosi pagal jau mums inomas taisykles. Dabar jei js

101

paraytumte $StatesOfTheUSA[50] turin tai btu Wyoming. Indeksas nebtinai turi prasidti 1, tai taip pat laisvai gali bti ir 101, tada Wyoming turtu 150 indeks. Jei js norite indeksuoti didel asociacin masyv, jums reiks kiekvien element nusakyti individualiai. Pavyzdiui tai gali bti padaryta tai taip:
$StatesOfTheUSA = array ("al" => "Alabama", "ak" => "Alaska", "az" => "Arizona", "ar" => "Arkansas", "ca" => "California", "co" => "Colorado", "ct" => "Connecticut", "de" => "Delaware", "fl" => "Florida", "ga" => "Georgia", "hi" => "Hawaii", "id" => "Idaho", "il" => "Illinois", "in" => "Indiana", "ia" => "Iowa", "ks" => "Kansas", "ky" => "Kentucky", "la" => "Louisiana", "me" => "Maine", "md" => "Maryland", "ma" => "Massachusetts", "mi" => "Michigan", "mn" => "Minnesota", "ms" => "Mississippi", "mo" => "Missouri", "mt" => "Montana", "ne" => "Nebraska", "nv" => "Nevada", "nh" => "New Hampshire", "nj" => "New Jersey", "nm" => "New Mexico", "ny" => "New York", "nc" => "North Carolina", "nd" => "North Dakota", "oh" => "Ohio", "ok" => "Oklahoma", "or" => "Oregon", "pa" => "Pennsylvania", "ri" => "Rhode Island", "sc" => "South Carolina", "sd" => "South Dakota", "tn" => "Tennessee", "tx" => "Texas", "ut" => "Utah", "vt" => "Vermont", "va" => "Virginia", "wa" => "Washington", "wv" => "West Virginia", "wi" => "Wisconsin", "wy" => "Wyoming");

Tai ltas darymas, bet jis atlieka savo darb.

Keliavimas per masyv


Kai jau js sukrte didel masyv su daugyb ra, jums tikrai nesinors grinti ir individualiai gauti duomenis i kiekvieno masyvo elemento. Tai labai didelis nereikalingas darbas. tai ia masyvai ranka rankon dirba su ciklais. Jei jums reikia atspausdinti vis valstij pavadinimus, for ciklas tai gali padaryti u mus. Norint pavaizduoti visas 50 valstij masyve kurio indeksai yra nuo 1 iki 50 mums tereiks 3 kodo linij, tame tarpe ir linijos kuri sukuria masyv:
for ($counter=1; $counter<51; $counter++) { echo"<BR>$StatesOfTheUSA[$counter]";

Linija tarp skliaustu parenka element i $StatesOfTheUSA masyvo, paraant kintamj $counter tarp lautini skliaustu kaip masyvo indeks. Kadangi $counter yra kintamasi, indeksas gali bti keiiamas keiiant $counter kintamojo reikm. Ms for ciklas sako: "Pradkite skaiiuoti nuo 1 ir kilkite iki 50, didinant reikm vienu vienetu" Taigi $counter kintamasis gauna reikmes 1, 2, 3, ir taip toliau:
echo"<BR>$StatesOfTheUSA[1]; echo"<BR>$StatesOfTheUSA[2]; echo"<BR>$StatesOfTheUSA[3]; t.t...

Niekas netrukdo mums naudotis while ar do while ciklus, nors jums tektu patiems sukurti ciklo skaitikl ir priversti j didti. Sekantis while ciklas, darytu tok pat veiksm kaip ir for ciklas:
$counter=1; while ($counter<51) { echo"<BR> $StatesOfTheUSA[$counter]"; $counter=$counter+1; }

Tereiktu parayti kelet papildom eilui ir viskas.

102

Dabar padarykime nedidel pavyzd kaip judama per masyv. Kadangi mes jau darme tai anksiau, mes kiek pasunkinsime js uduot. iame pavyzdyje mes sukursime du masyvus, vienas turs vis valstij pavadinimus, kitas turs vis valstij sostines. Js pasirinksite valstija i srao langelio ir programa iekos atitinkanios t valstij sostins. Mes panaudosime masyvus ir ciklus kelet kart , norint utikrint, kad mums nereiks sukurti 50 HTML linij norint parodyti vien atsakym.

Ibandykite judjimas masyve

1. Atidar savo teksto redaktori paraykite:


<HTML> <HEAD></HEAD> <BODY> <FORM ACTION="capitals.php" METHOD=POST> What state do you want to know the capital of? <SELECT NAME=State> <?php $StatesOfTheUSA = array (1 => "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "NewJersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"); for ($counter=1; $counter<51; $counter++) { echo"<OPTION>$StatesOfTheUSA[$counter]</OPTION>"; } echo "</SELECT><BR><BR>"; for ($counter=1; $counter<51; $counter++) { echo"<INPUT TYPE=HIDDEN NAME='HiddenState[]'VALUE='$StatesOfTheUSA[$counter]'>"; } echo "<INPUT TYPE=SUBMIT></FORM>"; ?> </BODY> </HTML>

2. Isaugokite kaip states.php, nieko tokio, kad tai PHP, o ne HTML


failas.

3. Atsidar nauj fail paraykite


<HTML> <HEAD></HEAD> <BODY> <?php $StateCapital = array (0 => "Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento","Denver","Hartford", "Dover","Tallahasse", "Atlanta", "Honolulu", "Boise", "Springfield","Indianapolis", "Des Moines", "Topeka", "Frankfort", "Baton Rouge","Augusta","Annapolis","Boston", "Lansing", "Saint Paul","Jackson", "Jefferson City", "Helena","Lincoln", "Carson City","Concord", "Trenton","Santa Fe", "Albany", "Raleigh","Bismarck","Columbus","Oklahoma City", "Salem", "Harrisburg", "Providence", "Columbia","Pierre", "Nashville", "Austin","Salt Lake

103

City", "Montpelier","Richmond","Olympia","Charleston", "Madison","Cheyenne"); for ($counter=0; $counter<50; $counter++) { if($HiddenState[$counter]==$State) { echo"The State capital is $StateCapital[$counter]"; } } ?> </BODY> </HTML>

4. Isaugokite kaip capitals.php. 5. Atidarykite states.php


ir pasirinkite valstij:

6. Paspauskite ant Submit Query mygtuko, nordami suinoti atsakym:

Kaip tai veikia


itas pavyzdys labai gerai pademonstruoja kiek kodo galima sutaupyti naudojant ciklus ir masyvus. Jums vien raymo sumajo daug kart. iame pavyzdyje mes taip pat pakeitme pirmojo puslapio tip PHP, nes norjome pasinaudoti PHP array() funkcija, kad nereiktu spausdinti 50 HTML linij <SELECT> srao laukelyje. Mes pradjome sukurdami HTML form:
<FORM ACTION="capitals.php" METHOD=POST> What state do you want to know the capital of?

Po to mes sukrme srao laukel:


<SELECT NAME=State>

104

Tada mes persiklme PHP ir pradjome pildyti valstij pavadinimus masyv pavadint $StatesOfTheUSA, praddami nuo indekso 1:
<?php $StatesOfTheUSA = array (1 => "Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

Tada mes sukrme ciklas kuris kartojosi 50 kart, patalpindami kiekvienos valstijos pavadinim srao laukel.
for ($counter=1; $counter<51; $counter++) { echo"<OPTION>$StatesOfTheUSA[$counter]</OPTION>"; } echo "</SELECT><BR><BR>";

Kai tik ciklas pasibaig mes udarme srao laukel. Js gal bt tikjots, kad kita linija bus Submit mygtukas ir formos udarymas. Taiau, ia ikyla problema jei js galvosite i karto ir apie sekant puslap. Visos valstijos mums reikalingos ir sekaniame puslapyje, ne tik iame. Kodl? Pagalvokite kaip mes surasime konkreios valstijos sostin. Me suinosime valstijos indeks $StatesOfTheUSA masyve, ir tada iekosime atitinkamo indekso sostini masyve $StateCapital. Pavyzdiui, $StatesOfTheUSA[1] turinys yra Alabama, taigi $StateCapital[1] turinys yra Montgomery. Mes galime atlikti tokius veiksmus, nes esama sitikin, kad indeksai abiejuose masyvuose sutampa savo reikmmis. Dabar jei mes persisime tik tai pasirinkt valstij kit skript, mes negalsime nustatyti ios valstijos indekso nes netursime paio masyvo. Be ios informacijos, mes negalsime surasti ir atitinkamo indekso $StatesOfTheUSA masyve. Be ios informacijos mes negalsime suinoti ir atitikmens $StateCapital masyve. K mums daryti? Mums tikrai reikia persisti duomenis apie pasirinktos valstijos indeks kit puslap. Vienas akivaizdus bdas yra persisti vis masyv sekant skript. Taigi mes taip ir padarysime. Mes sukuriame antr cikl, ir juo pasinaudodami sukuriame masyv turinti 50 paslpt laukeli, HiddenState. Mes upildome juos valstijomis esaniomis $StatesOfTheUSA masyve.
for ($counter=1; $counter<51; $counter++) { echo"<INPUT TYPE=HIDDEN NAME='HiddenState[]' VALUE='$StatesOfTheUSA[$counter]'>"; }

Po to jau galima sukurti Submit Query mygtuk ir udaryti form:


echo "<INPUT TYPE=SUBMIT></FORM>";

Ms antrasis puslapis susideda i dviej duomen altini. Pirmieji gauti i srao laukelio ir turi vienos valstijos pavadinim kur pasirinko vartotojas. Ji saugoma kintamajame $State. Antri duomenys yra visas 50 valstij sraas, alphabetine tvarka saugomas masyve $HiddenState. Taiau, kadangi PHP dar masyv jo indeksas prasideda 0 ir baigiasi 49. Tai nra problema, paprasiausiai reikia tai prisiminti. Ms pirmoji eilut ir sprendi klausim. Dabar mes sukuriame masyv su 50 valstij sostinmis. Taiau norint, kad is

105

masyvas sutaptu su indeksu esaniu $HiddenState masyve mums reikia, kad naujai kuriamas masyvas irgi prasidtu nuo 0 ir taip iki 49:
$StateCapital = array (0 => "Montgomery", "Juneau", "Phoenix", "Little Rock", "Sacramento","Denver","Hartford", "Dover","Tallahasse", "Atlanta", "Honolulu", "Boise", "Springfield","Indianapolis", "Des Moines", "Topeka", "Frankfort", "Baton Rouge", "Augusta","Annapolis","Boston", "Lansing", "Saint Paul","Jackson", "Jefferson City", "Helena","Lincoln", "Carson City","Concord", "Trenton","Santa Fe", "Albany", "Raleigh","Bismarck","Columbus","Oklahoma City", "Salem", "Harrisburg", "Providence", "Columbia","Pierre", "Nashville", "Austin","Salt Lake City", "Montpelier","Richmond","Olympia","Charleston", "Madison","Cheyenne");

Tai reikia, kad masyvas $HiddenState ir masyvas $StateCapital sutampa savo indeksais. Visa kita programos dalis yra pakankamai paprasta. Mums tereikia vieno ciklo kuris vyktu nuo 0 iki 49.
for ($counter=0; $counter<50; $counter++) {

Ciklo viduje mums reikia slygos elemento, kuris patikrintu ar dabartin valstija sutampa su vartotojo pasirinktj. Jei taip ir yra mes parodome $StateCapital reikm pasinaudodami indeks tapatumu tarp masyv:
if($HiddenState[$counter]==$State) { echo"The State capital is $StateCapital[$counter]"; } }

Tariant kitais odiais, jei $HiddenState turinys sutampa su vartotojo pasirinkta valstija, tada is indeksas atitinka ir valstijos sostins pavadinim i $StateCapital masyvo.

Ms programos patobulinimas
Tiesa pasakius, mes padarme kiek gremzdik program, nes norjome pademonstruoti dviej atskir masyv sry per indeks. Jei jums tikrai reiktu daryti tokio tipo program, btu daug paprasiau padaryti asociacin masyv:
$StateCapital = array ("Alabama" => "Montgomery", "Alaska" => "Juneau", "Phoenix" =>"Arizona", "Arkansas" => "Little Rock", "California" => "Sacramento","Colorado" => "Denver", "Connecticut" => "Hartford", "Delaware" => "Dover", "Florida" => "Tallahasse", "Georgia" => "Atlanta", "Hawaii" => "Honolulu", "Idaho" => "Boise", "Illinois" => "Springfield","Indiana" => "Indianapolis", "Iowa" => "Des Moines", "Kansas" => "Topeka", "Kentucky" => "Frankfort", "Louisiana" => "Baton Rouge","Maine" => "Augusta","Maryland" =>"Annapolis","Massachusetts" => "Boston", "Michigan" => "Lansing", "Minnesota" => "Saint Paul","Mississippi" => "Jackson", "Missouri" => "Jefferson City", "Montana" => "Helena","Nebraska" => "Lincoln", "Nevada" => "Carson City","New Hampshire" => "Concord", "New Jersey" => "Trenton","New Mexico" => "Santa Fe", "New York" => "Albany", "North Carolina" => "Raleigh","North Dakota" => "Bismarck","Ohio" => "Columbus","Oklahoma" => "Oklahoma City", "Oregon" => "Salem", "Pennsylvania" => "Harrisburg", "Rhode Island" => "Providence", "South Carolina" => "Columbia","South Dakota" =>"Pierre", "Tennessee" => "Nashville", "Texas" => "Austin","Utah" => "Salt Lake City", Vermont" => "Montpelier","Virginia" => "Richmond","Washington" => "Olympia","West Virginia" => "Charleston", "Wisconsin" => "Madison","Wyoming" =>"Cheyenne");

106

Tad jus galtumte pavaizduoti sostin pasinaudodami valstijos pavadinimo kintamuoju $State, kaip indeksu.

Judjimas per ne-nuosekl masyv


Taigi, kaip js matte yra pakankamai lengva judti per nuosekl masyv, kurio elementai buvo sudti i eils (masyvo indeksas yra didjantis nuosekliai). Bet kaip bti kai turime tokio tipo masyv:
$Array[56993]="absolutely huge"; $Array[1]="quite small"; $Array[499]="quite big";

Ne-nuosekls masyvai nra tokia didel problema, kaip gali pasirodyti i prai, nes visi ms jau aptarti metodai veikia. Jei duomenys saugomi ne i eils, tai nra svarbu PHP, nes jie yra suprantami kaip i eils einantys elementai. Vienintel problema yra ta, kad tikrinant visus masyvo elementus i eils js galite rasti daugybe tui indeks, kai tuo tarpu tik trys i j turi reikmes, kaip kad pateiktame pavyzdyje.

Current ir Key funkcijos


PHP naudoja ymekl (pointer) taip nustatydama kurioje masyvo vietoje ji yra, kai yra judame per masyv. itas ymeklis nurodo element kuris iuo metu yra naudojamas skripto. Js galite suinoti kuris masyvo elementas iuo metu naudojamas pasinaudodami current() funkcija, ir js galite suinoti io elemento indeks su key() funkcija.(Key yra kitas indekso pavadinimas.) Mes pasinaudosime kodo dalimis parodydami kaip veikia current() ir key() funkcijos. Dabar sivaizduokite kas atsitiktu jei js pridtumte dar vien reikm tokiam masyvui, ir nurodytumte, kad PHP tai padarytu automatikai. Kok indeks pasirinktu PHP?
$Director[4]="Orson Welles"; $Director[1]="Carol Reed"; $Director[93]="Fritz Lang"; $Director[24]="Jacques Tourneur";

Tai mes galime suinoti pridja kelet kodo linij. Jos parodo iuo metu naudojama $Director[], indeks:
$CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

Key() funkcija parodo reikm 4. Kodl? Nes jis graina indekso reikm pirmo elemento kur mes patalpinome masyv tai yra "Orson Welles" esantis 4 indekse. Jei naudosite current() funkcija ji grains reikm "Orson Welles":
$CurrentContents = current($Director); echo ($CurrentContents);

Dabar jei patalpinti sekani eilute masyv:


$Director[]="Alfred Hitchcock";

"Alfred Hitchcock" masyve btu patalpintas su indekso reikme 94. Kaip mes galime patikrinti kokia yra naujojo elemento reikm, turint omenyje, kad key() ir current() funkcijos graina informacija apie pirmj masyvo element?

107

Next() ir Prev() funkcijos


Norint suinoti naujai dto elemento indeks jums reiks naudotis next() ir prev() funkcijomis. ios funkcijos jums leidia judti per masyv, perkeldamos ymekl kit ar prie tai buvus masyvo element. Jiems abiems tereikia tik masyvo vardo kaip argumento. Dabar grkite prie jau anksiau daryto masyvo:
$Director[4]="Orson Welles"; $Director[1]="Carol Reed"; $Director[93]="Fritz Lang"; $Director[24]="Jacques Tourneur"; $Director[]="Alfred Hitchcock";

Mes ikvieiame next() funkcija, prie patikrindami esam indeks ir esamo elemento reikm:
next($Director); $CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

Gauta reikm yra 1, ir current() funkcija grains vard "Carol Reed". Jei ikviesime next() dar tris kartus:
next($Director); next($Director); next($Director); next($Director); $CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

Reikm bus 94. Jei dabar ikviestumme current() funkcija:


$CurrentContents = current($Director); echo ($CurrentContents);

Ms narykl parodytu Alfred Hitchcock. Prev() funkcija yra naudojama panaiu bdu. Mes pasinaudosime ms prie tai buvusiu pavyzdiu ir paraysime vien prev() einanti po keturi next():
next($Director); next($Director); next($Director); next($Director); prev($Director); $CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

kart mes gausime 24, kuris yra indeksas su juo susijusios reikms "Jacques Tourneur". Taip yra todl, kad mes pasistmjome prieki per keturis elementus ir sugrome atgal per vien. Tai gana tiesmukikas pavyzdys, nors gali kilti klausimas, kas atsitiks jei mes pasistmsime priek su next() esaniu u paskutinio masyvo elemento arba prev() prie pirma element?
prev($Director); $CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

Atsakymas: nieko. is kodas negraina jokios reikms. Tai nesukels klaidos (kaip kad yra kai kuriuose kituose programavimo kalbose); ymeklis paprasiausia pasislinks u masyvo ribos. Taiau mes jau negalsime grti atgal:
prev($Director); next($Director); next($Director);

108

$CurrentIndexValue = key($Director); echo ($CurrentIndexValue);

Tai vis dar neduos jokio atsakymo. Taigi mes matome, kad navigacija masyve nra tokia jau sudtinga. Nauja reikm yra patalpinama pirm neuimt indekso pozicij po paskutins didiausios reikms. Taigi jei didiausia reikm yra 34, kita indekso reikm btu 35. Norint judti masyvu mes naudojams next() ir prev() funkcijomis. Ms dabartins pozicijos parodymui naudojama current() ir key() funkcijos.

List ir Each funkcijos


Jei js judate per ne-nuosekl masyv, yra funkcij kurios tikrai palengvins jums gyvenim. Vietoj to, kad daryti ciklus su daugyb tui reikmi js galite pasinaudoti list() ir each() funkcijomis, kurios grains tik tuos masyvo elementus kurie turi reikmes. Tai leidia jums pavaizduoti visus masyvo elementus maiausiais vargais. Js galite naudoti while cikl nordami atlikti toki uduot: while (list(IndexValue,ElementContents) = each(ArrayName)) Tai isiveria taip: kiekvienam masyvo Arrayname elementui nustatyk IndexValue lygi elemento indeksui ir ElementContents lygu elemento reikmei. Jei js norite gauti tik indeks ar tik reikm js galite rayti tik reikiamus atributus: while (list(IndexValue) = each(ArrayName)) arba: while (list(,ElementContents) = each(ArrayName)) Ms autori kodo pavyzdiui mes galime parayti tok pavyzd, kuris parays visas masyvo reikmes:
while (list($ElementIndexValue, $ElementContents) = each($Director)) { echo "<BR>$ElementIndexValue - $ElementContents"; }

Jums nereikia rayti btent tokio pavadinimo kintamuosius $ElementIndexValue ir $ElementContents, tai daroma, kad kodas btu lengviau skaitomas. Js laisvai galite naudoti tokias reikmes:
while (list($MickeyMouse, $DonaldDuck) = each ($Director)) { echo "<BR>$MickeyMouse - $DonaldDuck"; }

Viskas k jums reikia prisiminti yra tai, kad list() graina vis pirma indekso po to elemento reikm. tai leidia pasinaudoti supaprastintais programavimo elementais, kurie taip pat tinka ir tuo atveju jei masyvo indeksas nra skaitins reikms.

Judjimas per tekstinio indekso masyvus


Taisykls leidianios judti per asociacinius masyvus yra tapaios kaip ir naudojamos skaitiniuose indeksuose, bet yra ir keletas skirtum. Pirmasis

109

skirtumas yra tas, kad emiau esantis kodas puikiai veiks skaitiniame masyve dabar sukurs skaitinio indekso masyv:
$StateCapital["ga"]="Atlanta"; $StateCapital["il"]="Springfield"; $StateCapital["ca"]="Sacramento"; $StateCapital[] = "Cheyenne";

Reikm "Cheyenne" bus isaugota masyve kaip $StateCapital[0]. Tai nestebina, jei prisiminsite, kad PHP neturi jokio supratimo koki indekso reikm js norite sukurti, kuri gali bti ir "WY", ir "AB", ar 4563, tad vietoj to PHP suras didiausiai skaitin reikm. kadangi mes dar nenaudojome joki skaii, didiausia reikm bus 0. Current() ir key() funkcijos vis tiek veiks taip kaip js ir numanote. Jei pabandysite sekant kod:
$WhatState = current($StateCapital); $WhatAbbreviation = key($StateCapital); echo "$WhatAbbreviation - $WhatState";

Js isiaikinsite, kad funkcijos graina pirmojo masyv vesto elemento reikm, kuris yra "ga" turintis "Atlanta" reikm. Ir js galite judti per masyv kaip ir anksiau.
$StateCapital["ga"]="Atlanta"; $StateCapital["il"]="Springfield"; $StateCapital["ca"]="Sacramento"; $StateCapital[] = "Cheyenne"; next($StateCapital); $WhatState = current($StateCapital); $WhatAbbreviation = key($StateCapital); echo "$WhatAbbreviation - $WhatState";

iuo atvju atsakymas btu il - Springfield. Funkcijos list() ir each() taip pat veikia tokiu paiu principu kaip ir masyvuose su skaitiniu indeksu. Mes galime parayti sekant kod:
$StateCapital = array ("ga" => "Atlanta", "il" => "Springfield", "ca"=>"Sacramento", "wy" => "Cheyenne");

Tada mes vis dar galime pasinaudoti abiejomis funkcijomis ir pasinaudoja list() funkcija parodyti atsakym kaip ir anksiau:
while (list($StateAbbreviation, $StateName) = each ($StateCapital)) { echo "<BR>$StateAbbreviation - $StateName"; }

Tai padarys abreviatr ir pavadinim sra, kurios bus pavaizduotos ta tvarka, kokia buvo sukurtos: ga - Atlanta il - Springfield ca - Sacramento wy - Cheyenne Mes apvelgme iuos du skirtingus masyvo tipus ir suinojome kaip PHP juds per jas indekso eilikumu, nepriklausomai nuo sukrimo eilikumo. Kas atsitiks jei js norsite sukurti arba isaugoti kitok eilikum?

Masyv riavimas

110

Yra keletas funkcij kurias pateikia PHP masyv riavimui. Mes apvelgsime penkias daniausiai naudojamas. Jos visos veikia sveikaudamos su list() ir each() funkcijomis kurias mes k tik patarme.

sort()
Sort funkcija yra pati pagrindin riavimo funkcija. Ji paima masyvo reikmes ir suriuoja jas pagal alfabet. Sort() funkcijai tereikia masyvo pavadinimo kur ji turi suriuoti: sort(ArrayName) Mes sukrme autori masyva:
$Director = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourneur");

Tada mes galime juos suriuoti para masyvo vard sort() funkcija:
sort($Director);

Norint pamatyti ios funkcijos efekt mes teturime vien galimyb, vl pasinaudoti list() ir each() funkcijomis. Mes jau pareikme, kad seka kuria elementai yra saugomi masyve yra ta pati kaip seka kuria jie buvo sukurti. Su aukiau esaniu masyvu, mes galime tiktis tokios sekos: $Director[0]= $Director[1]= $Director[2]= $Director[3]= "Orson Welles" "Carol Reed" "Fritz Lang" "Jacques Tourneur"

Taiau po sort() panaudojimo, mes gauname kitoki struktr: $Director[0]= $Director[1]= $Director[2]= $Director[3]= "Carol Reed" "Fritz Lang" "Jacques Tourneur" "Orson Welles"

Js galite tai patikrinti, pasinaudoja ms ankstesne kodo dalimi, kuri parodo masyvo reikmes ekrane:
while (list($IndexValue, $DirectorName) = each ($Director)) { echo "<BR>$IndexValue - $DirectorName"; }

Taigi ms masyvas buvo suriuotas pagal alfabet ir atitinkamai pakeisti indeksai. Taiau kas atsitiks jei mes pabandysime suriuoti asociacin masyv?

asort()
Asort() funkcija paima masyv sukurta su raidiniu indeksu ir suriuoja pagal reikmes. Sugrkime prie ms jau nagrinto pavyzdio:
$StateCapital = array ("ga" => "Atlanta", "il" => "Springfield", "ca"=>"Sacramento", "wy" => "Cheyenne");

Bus sukurtas tokio tipo masyvas:

111

$StateCapital["ga"]= $StateCapital["il"]= $StateCapital["ca"]= $StateCapital["wy"]=

"Atlanta" "Springfield" "Sacramento" "Cheyenne"

Jei atliksite riavim tokiu bdu:


sort($StateCapital);

Tada gausite tok masyv: $StateCapital[0]= $StateCapital[1]= $StateCapital[2]= $StateCapital[3]= "Atlanta" "Cheyenne" "Sacramento" "Springfield"

Tariant kitais odiais raidins indekso reikms yra pakeiiamos skaitinmis nelabai patogu ar ne? Taiau jei js vietoj to pasinaudosite asort() funkcija:
asort($StateCapital);

Seka bus tokia: $StateCapital["ga"]= $StateCapital["wy"]= $StateCapital["il"]= $StateCapital["ca"]= "Atlanta" "Cheyenne" "Sacramento" "Springfield"

kart, elementai buvo idstyti alfabetikai, taiau mes ilaikme ir susijus indeks. Vl gi js galite pasinaudoti list() ir each() nordami parodyti rezultatus:
while (list($StateAbbreviation, $StateName) = each ($StateCapital)) { echo "<BR>$StateAbbreviation - $StateName"; }

PHP taip pat pateikia ranki ir atvirktiniam riavimui. Pairkime.

rsort() ir arsort()
ios dvi funkcijos veikia panaiu bdu kaip ir sort() ar asort(). Vienintelis skirtumas yra tas, kad jos graima rezultatus suriuotus atvirktine alfabeto tvarka. Js galite pasinaudoti rsort() nordami prieingai suriuoti ms autori sra:
$Director = array ("Orson Welles","Carol Reed","Fritz Lang","Jacques Tourneur"); rsort($Director);

Js taip pat galite ikviesti arsort() prieingai suriuoti valstij sostines:


$StateCapital = array ("ga" => "Atlanta", "il" => "Springfield", "ca"=>"Sacramento", "wy" => "Cheyenne"); arsort($StateCapital);

Mes neirsime kokie yra atsakymai, i to k js jau inote turite patys mokti tai padaryti. Yra dar vienas riavimo tipas kur mes turime apvelgti, tai asociacini masyv riavimas pagal indeks

112

ksort()
Ksort() funkcija gali atlikti tokio tipo riavim. Ji atliekama tokiu paiu bdu kaip ir kitos riavimo funkcijos, bet vietoj to ji pagal abcl suriuoja indekso reikmes. Ms sostini pavyzdiu:
$StateCapital = array ("ga" => "Atlanta", "il" => "Springfield", "ca"=>"Sacramento", "wy" => "Cheyenne"); ksort($StateCapital);

Ksort() funkcija paradytu sekanius pakeitimus: $StateCapital["ca"]= $StateCapital["ga"]= $StateCapital["il"]= $StateCapital["wy"]= "Sacramento" "Atlanta" "Springfield" "Cheyenne"

vairios masyvo funkcijos


Yra didiuli kiekis funkcij kuriomis leidia naudotis PHP, taip padarydama darb labiau efektyvu. J yra taip daug, kad mes paprasiausiai neturime laiko jas kiek plaiau apvelgti, taiau yra keletas kurias js tikrai turite inoti, nes mes naudosime jas ioje knygoje ateityje.

array_push() ir array_pop()
Mes jau sakme, kad jei jau turite masyv ir j pridedate nauj element nenurodydami indekso reikms, naujasis elementas gaus viena reikme didesn indeks nei iki tol buvs didiausias indeksas. Tariant kitais odiais, jei mes pridsime nauj element $Director masyv emiau:
$Director[4]="Orson Welles"; $Director[1]="Carol Reed"; $Director[93]="Fritz Lang"; $Director[24]="Jacques Tourneur"; $Director[]="Alfred Hitchcock";

Naujasis elementas gaus indeks 94. Funkcija array_push() daro t pat dalyk. Norint traukti "Alfred Hitchcock" masyv mes raytumme:
array_push($Director, "Alfred Hitchcock");

Tam naudojami du argumentai, pirmasis tai masyvo pavadinimas, o antras tai reikm kuri norite traukti masyv. Taiau i funkcija gali bti naudojama ir keletos element traukimui, juos ivardinant:
array_push($Director, "Alfred Hitchcock", "FW Murnau", "Akira Kurosowa");

Array_pop() funkcija daro atvirkiai, paalindama paskutin dt masyv element. Tad jei mes paraytumme sekanti kod:
$Director[4]="Orson Welles"; $Director[1]="Carol Reed"; $Director[93]="Fritz Lang"; $Director[24]="Jacques Tourneur"; array_pop($Director);

113

Tai paalintu element turinti indekso reikm 24, kurio reikm "Jacques Tourneur", paliekant tris elementus masyve. Atkreipkite dmes, kad skirtingai nei array_push(), array_pop() reikalingas tik vienas elementas: masyvo pavadinimas. Abi funkcijos traktuoja masyv kaip kg: js patalpinate element at paio viraus, vir anksiau ten esani, taip pat jie ir paalinami.

Implode ir Explode
Abi ios funkcijos nra tokios griaunanios kaip js anglikos reikms. Jie leidia isaugoti viso masyvo reikmes isaugoti kaip eilute arba atvirkiai: padalinti ilg eilut gabalus ir iuos gabalus patalpinti masyv kaip atskirus elementus. Implode() funkcija paima jau esam masyv kaip argument, ir sujungia kiekvien masyvo element eilut. Js taip pat galite nurodyti ir special atribojimo argument funkcijoje, kuris naudojamas atskirti kiekvien masyvo element eilutje: $StringName = implode("delimiter", $ArrayName); Jie paimsime ms sostini pavyzd, mes galime sujungti visas sostimes kartu, atskirdami jas brkneliu:
$StateCapital ["ca"]= "Sacramento"; $StateCapital ["ga"]= "Atlanta"; $StateCapital ["il"]= "Springfield"; $StateCapital ["wy"]= "Cheyenne"; $AllCapitalsSeparatedByADash = implode("-", $StateCapital); echo ($AllCapitalsSeparatedByADash);

Echo selementas grains: Sacramento-Atlanta-Springfield-Cheyenne. Atvirktin funkcija yra atliekama explode(). Sakykime mes turime eilut kurioje mums reikalingi elementai yra atskirti bendru atribojimo enklu, tokiu kaip brknys ar tarpas. Mes galime suskaidyti eilut atskirus gabalus ir kiekvien nauj gabal patalpinti masyv. Vlgi, explode() paima du argumentus: eilut (arba eiluts kintamasis), ir atribojimo argumentas: $ArrayName = explode("delimiter", $StringName); Mes atversime atgal ms prie tai buvus pavyzd:
$AllCapitalsSeparatedByADash = "Sacramento-AtlantaSpringfield-Cheyenne"; $Capitals = explode("-", $AllCapitalsSeparatedByADash);

Norint pairti koks masyvas buvo sukurtas, mes galime pasikliauti jau anksiau iame skyriuje imoktu kodu:
$AllCapitalsSeparatedByADash = "Sacramento-AtlantaSpringfield-Cheyenne"; $Capitals = explode("-", $AllCapitalsSeparatedByADash); while (list($IndexValue, $CapitalName) = each ($Capitals)) { echo "<BR>$IndexValue $CapitalName"; }

Tai turtu grainti: 0 Sacramento 1 Atlanta 2 Springfield 3 Cheyenne

114

Taigi tai patvirtina, kad eilut pavadinta Capitals buvo sukurta, ir indeksas buvo pradtas nuo nulio. Kiekvienas eiluts elementas buvo paeiliui trauktas masyv. Kitaip tariant, explode() sukr masyv kuris yra identikas iam PHP kodui:
Capitals[0]="Sacramento"; Capitals[1]="Atlanta"; Capitals[2]="Springfield"; Capitals[3]="Cheyenne";

Abi ios funkcijos yra labai naudingos, ir mes jas naudosime ateityje ioje knygoje.

HTTP_GET_VARS ir HTTP_POST_VARS
Paskutiniai du elementai apie kuriuos mes paneksime yra ne funkcijos, o masyvai. Jie jau buvo sukurti PHP ir vadinasi HTTP_GET_VARS bei HTTP_POST_VARS. Kai mes nekjome apie formas 3 Skyriuje, mes paminjome du pagrindinius metodus perduoti duomenis i formos naudojantis GET ar POST. Mes pabrme, kad PHP automatikai sukuria kintamuosius u mus pagal formos element vardus. Kitaip tariant emiau esanios formos laukelis taps kintamuoju $TextBox32:
<INPUT TYPE=TEXT NAME="TextBox32">

itas teiginys yra teisingas. Taiau yra situacij kai kintamieji kurie js manymu turi bti sukurti automatikai nra sukuriami. Pavyzdiui jei naudosits kakieno teikiamom Interneto paslaugomis bei web serveriu. Norint kad ie kintamieji btu kuriami automatikai, konfigracijos punktas register_globals turi bti nustatytas kaip on js php.ini faile. Tai daroma automatikai instaliuojant PHP js serveryje, taiau kai kurie puslapiu talpinimo tiekjai saugumo sumetimais nustato register_globals kaip off. Rezultatas tas, kad kintamasis susyjs su viruje esaniu formos laukeliu $TextBox32 bus tuias. Jie js tiekjas taip padar neisigskite, kadangi informacija kuriuos jums reikia vis tiek pasiekiama per du masyvus pavadintus HTTP_GET_VARS ir HTTP_POST_VARS. Mes galime pasiekti informacija tai taip. Sakykime mes inome kintamj kuris buvo pasistas naudojantis GET metodu:
<FORM METHOD=GET ACTION="transfer.php"> <INPUT TYPE=TEXT NAME="TextBox32">

PHP skripte puslapyje transfer.php, mes galime gauti teksto laukelio duomenis i asociacinio masyvo HTTP_GET_VARS. Indekso vardas yra elemento pavadinimas "TextBox32" vardas kur mes sukrme su HTML elementais. Taigi jei norsite gauti duomenis paprasiausiai pasinaudokite tokiu kodu:
echo HTTP_GET_VARS["TextBox32"];

Tai veikia tiek su GET tiek su POST. Panaiai mes galime perduoti ias reikmes ir kintamjam:
$TextBox32 = HTTP_GET_VARS["TextBox32"];

Taigi tik viena papildoma kodo linija, ir mes apjome problem, kuri atsitinka kai register_globals yra ijungti. Taiau, tai gali bti tik problem pradia. Jei js web serverio tiekjas yra pakvais dl saugumo jis gal bt ijung ir nuostata pavadinta track_vars, kuri atsakinga u iuos du masyvus. iuo atveju paraykite savo tiekjui laik praydami pakeiti konfigracij, arba pasirinkite kit tiekja.

115

Mes naudosims ir iais dviem masyvais ios knygos ateityje.

Daugiamaiai masyvai
Yra manoma sukurti masyv masyve. Tokie monstrai inomi kaip daugiamaiai masyvai ,jie naudingi kai turimai informacijai reikia dvigubo indeksavimo, pavyzdiui koordinats emlapyje. Js galite kurti masyvus masyvuose tol kol PHP uteks operatyvios atminties, o tai tikriausiai yra daugiau nei 100 masyv vienas kitame. (Jei galite sugalvoti situacij kurioje jums reiks tokios struktros, ir jei sugebsite efektyviai j pasinaudoti, js ma maiausiai esate PHP genijus) Daugiamaiai masyvai yra daromi tokiu pat bdu kaip ir paprasti masyvai, iskyrus tai, kad js naudojate array struktra kaip argument pat save, tai taip: ArrayName = array (index => array (Array contents)) Pavyzdys gali bti masyvas kuriame kiekvienas elementas reprezentuoja vien mog, ir kiekvienas is elementas savo ruotu yra masyvas kuriame saugomi duomenys apie t mog:
$PhoneDirectory = array ("John Doe" => array ("1 Long Firs Drive","777-000-000"), "Jane Doe" => array ("4 8th and East","777-111-111"));

Ms masyvas dabar turi elementus "John Doe" ir "Jane Doe"; ir kiekvienas elementas reprezentuoja masyv su dviem elementas adresu ir telefono numeriu. Norint itai pavaizduoti ekrane jums reiks ir sudtingesnio ciklo:
$PhoneDirectory = array ("John Doe" => array("1 Long Firs Drive","777-000-000"), "Jane Doe" => array("4 8th and East","777-111-111")); while (list($Person) = each($PhoneDirectory)) { echo("<BR>$Person"); while (list(,$PersonalDetails) = each ($PhoneDirectory[$Person])) { echo (" $PersonalDetails"); } }

<BR> ir tarpas prie $PersonalDetails yra echo elemento dalis, ir naudojama tik pagerinti vaizduojamos informacijos pateikim. Daugiamaiai masyvai nra labai danai naudojami, tad mes nesustosime ties iuo klausimu.

Ibandykite Masyvo galimybi sujungimas su praktiniu udaviniu

1. Prikelkite savo teksto redaktori ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <?php echo"<FORM METHOD=POST ACTION='exam2.php'>"; $Student = array("Albert Einstein","Ivan The Terrible","Napoleon","Simon Bolivar","Isaac Newton"); while (list(,$Name)=each($Student)) { echo "What grade did $Name get in Math?"; echo"<BR><BR>"

116

echo"<SELECT NAME='Math[]'> <OPTION>Grade A</OPTION> <OPTION>Grade B</OPTION> <OPTION>Grade C</OPTION> <OPTION>Grade D</OPTION> <OPTION>Grade E</OPTION> </SELECT>" echo"<BR><BR>"; echo"<INPUT TYPE=HIDDEN NAME=Student[] VALUE='$Name'>"; } echo"<INPUT TYPE=SUBMIT></FORM>"; ?> </BODY> </HTML>

2. Isaugokite kaip exam.php. 3. Udarykite it fail ir sukurkite nauj:


<HTML> <HEAD></HEAD> <BODY> In Math the grades were in order: <BR> <?php while (list($Index,$Value)=each($Math)) { $GradeStudent[]=$Math[$Index].$Student[$Index]; } asort($GradeStudent); while (list($Index,$Value)=each($GradeStudent)) { echo "<BR>$Student[$Index] - $Math[$Index]"; } ?> </BODY> </HTML>

4. Isaugokite kaip exam2.php. 5. Atidarykite exam.php savo naryklje ir paraykite kokius nors paymius:

117

6. Paspauskite ant Submit Query ir paymiai bus suriuoti, ne tik pagal paymius, bet ir pagal abcl jei kurie nors mokiniai gavo tokius paius paymius:

Kaip tai veikia


itas pavyzdys nors ir yra gana trumpas, atlieka sudtingus riavimus, kaip js gal bt pastebjote. Mes norjome suriuoti paymi masyv, kuris indeksu atitinka student masyv. Bet kaip mes galime susieti jau suriuot paymi masyv su studentais? ia reikia kiek pasukti galv. Pirmoji programa exam.php dinamikai sukuria form. Ji parpina student vardus i masyvo pavadinto $Student:
echo"<FORM METHOD=POST ACTION='exam2.php'>"; $Student = array("Albert Einstein","Ivan The Terrible","Napoleon","Simon Bolivar","Isaac Newton");

Dabar mes pereiname prie while ciklo, kuris gauna kiekvieno studento varda ir pateikia klausim:
while (list(,$Name)=each($Student)) {

Kiekvienam studentui srae, mes pateikiame klausim klausianti koks jo paymys:


echo "What grade did $Name get in Math?";

dabar mes sukuriame srao laukel, kuris turi penkis galimus variantus, kiekvienas i kuri atstovauja paymiui, nuo A iki E. Nordami isaugoti paymius mes sukuriame masyv $Math kur PHP gali perduoti sekaniam skriptui:
echo"<SELECT NAME='Math[]'>

Mes paraome kelet linij atskyrimo element, kad viskas atrodytu ivaizdiau.
echo"<BR><BR>";

Taiau, kadangi mes sukrme masyv pirmame puslapyje jis nebus prieinamas antrajame kuris gaus ms vestus paymius. Kaip apeiti i problem? Mes galime perduoti iuos duomenis antrj puslap per paslpt element. is elementas turi tok pat pavadinim kaip ir masyvas kuriame

118

saugomos student pavards. Mes nurodome, kad elementas bus masyvas paraydami skliaustelius. Mes perduodame kiekvieno studento vard ir tada udarome cikl:
echo"<INPUT TYPE=HIDDEN NAME=Student[] VALUE='$Name'>"; }

Pabaigoje mums reikia parayti Submit mygtuk ir udaryti form:


echo"<INPUT TYPE=SUBMIT></FORM>";

Ms sekanti programa exam2.php, kuri gauna formos duomenis yra sudaryta i ciklo, riavimo ir dar viemo ciklo. Pirmasis ciklas yra skirtas susieti du masyvus gautus i pirmojo puslapio. Mes tai padarome susijungdami studento vard ir jo paym ir riuojame rezultatus naujame masyve pavadintame $GradeStudent.
while (list($Index,$Value)=each($Math)) { $GradeStudent[]=$Math[$Index].$Student[$Index]; }

Mes inome i pirmosios programos, kad Math masyvo indeksas yra susyjs su $Student masyvo indeksu. Gautas $GradeStudent masyvas atrodys tai taip: Grade Grade Grade Grade Grade CAlbert Einstein EIvan The Terrible BNapoleon DSimon Bolivar AIsaac Newton

Dabar mes galime suriuoti $GradeStudent ir turime gauti t tvark kokios ir norime:
asort($GradeStudent);

Taiau, vis tiek lieka problema kaip pavaizduoti atsakymus, nes dabar jie atrodo kiek keistokai. Mes galime pavaizduoti ms suriuot paymi sra kartu su studentu vardais, naudodamiesi ia kodo dalimi:
while (list($Index,$Value)=each($GradeStudent)) { echo "<BR>$Student[$Index] - $Math[$Index]"; }

Ar suprantate k mes padarme? Atsiminkite, kad $GradeStudent yra suriuota pagal paymius. Atsiminkite, kad riuojant elementai buvo sukeisti vietomis, bet kiekvienas indeksas vis dar turi tok pat turin kaip ir prie riavim. Taip pat mes jau matme, kad kiekvienas elementas $GradeStudent masyve tra paprasiausias $Math ir $Student masyvo reikmi sujungimas. Taigi, kas atsitiks jei mes pateiksime rezultatus i $Math ir $Student masyv, tiktai tai darysime pagal tvark kuri nustato suriuotasis $GradeStudent? Kadangi vis trij masyv indeksai sutampa, mes isiaikinsime, kad $Math ir $Student masyvai yra vaizduojami pagal paymius, taip kaip parodyta lentelje: $Index 4 2 0 $Student Isaac Newton Napoleon Albert Einstein $Math Sorted Grade A Grade B Grade C $GradeStudent "Grade AIsaac Newton" "Grade BNapoleon" "Grade CAlbert Einstein"

119

3 1

Simon Bolivar Ivan The Terrible

Grade D Grade E

"Grade DSimon Bolivar" "Grade EIvan The Terrible"

Mes inome, kad naudojantis list() ir each() pateiks indekso reikmes ta tvarka kokia kuria jie ir yra idstiti masyve. Taigi kodas pateiks elementus i $Math ir $Student masyv pagal paymius. Tai ubaigia ms antrj programos dal.

Naujos cikl ir masyv galimybs PHP4


Atsiradus PHP4 pasirod ir keletas nauj galimybi susijusi su ciklais ir masyvais. iame skyriuje mes apvelgsime pagrindinius.

Masyv multiriavimas (multisorting)


Pirmoji nauja galimyb kuria mes pristatysime yra array_multisort() funkcija, kuri pateikia kaip t veikim kurio mums reikjo ankstesniame Matematikos paymi pavyzdyje. Ji paima du masyvus kaip argumentus. Funkcija riuoja pirmj masyv ir pasiymi visus pasikartojani reikmi indeksus. Tada ji suriuoja ias pasikartojanias reikmes pagal atitinkam indeks reikmes antrajame masyve. Galiausiai funkcija riuoja antrj masyv pagal t pat princip kaip suriavo pirmj. Paimkime ms prie tai buvus pavyzd ir pairkime kaip j galima modifikuoti. Mes galime pakeisti ms kod exam2.php programoje, kad jis naudotu $array_multisort():
<?php array_multisort($Math,$Student); while (list($Index,$Value)=each($Student)) { echo "<BR>$Student[$Index] - $Math[$Index]"; } ?>

Dabar isiaikinkime kaip vyksta visas procesas: Albert Einstein - Grade A Ivan The Terrible Grade E Napoleon Grade D Simon Bolivar Grade D Isaac Newton Grade A $array_multisort() funkcija pirma suriuotu $Math[] masyv, paraydama A, A, D, D, E. kadangi mes turime dvi tokias paias A ir D reikmes, funkcija pasiymi A reikmi indeksus (0 ir 4) ir kreipiasi antrj masyv $Student[] ir suriuoja iuos du elementus 0 (Albert Einstein) ir 4 (Isaac Newton) pagal abcl. Tas pats vyksta ir su D reikmmis. Kai funkcija baigia darb su pirmuoju masyvu ji pereina prie antrojo ir atlieka tokius paius veiksmus. Dabar abu masyvai vis pirma suriuoti pagal paymius ir antra pagal pavardes. Taiau, tai nauja galimyb ir buvo praneim su jos naudojimu, todl mes ir nenaudojome jos savo pavyzdyje.

foreach ciklas

120

Taip pat yra for ciklo pltinys atsirads su PHP4. Tai paskutinis ciklo tipas kur mes aptarsime: foreach ciklas. Jis naudojamas kai turime cikl su neinomu element skaiiumi. Foreach ciklas tesiasi iki masyvo pabaigos. Jis turi du formatus. Pirmasis yra toks: foreach ($ArrayName As $ArrayItem)
{

execute the contents of these braces

} Tai reikia, kad dl kiekvieno elemento masyve bus atliekamas ciklas. Antrasis formatas yra foreach ($ArrayName As $ArrayIndexValue => $ArrayItem)
{

execute the contents of these braces

Tai tas pats kaip ir pirmasis formatas tik tiek, kad ia mes galime operuoti ir masyvo elemento indeksu. Padarykime nedidel foreach pavyzd. Mes vl pasinaudosime valstij srau ir paprasiausiai pavaizduosime valstij sra kartu su indeksu kok suteik PHP.

Ibandykite foreach naudojimas

1. Su savo teksto redaktoriumi paraykite sekanti kod:


<HTML> <HEAD></HEAD> <BODY> <? $StatesOfTheUSA = array ("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"); foreach($StatesOfTheUSA As $StateIndex => $State) { echo "<BR>$StateIndex - $State"; } ?> </BODY> </HTML>

2. Isaugokite kaip foreach.php. 3. Atidarykite foreach.php


savo naryklje:

121

4. Pairkite ar tikrai yra 50 valstij, kuri reikms yra nuo 0 iki 49.
Kaip tai veikia
Tai negali bti paprasiau. Mes vis pirma sukuriame masyv vis 50 valstij, kuris vadinasi $StatesOfTheUSA:
$StatesOfTheUSA = array ("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming");

Tada mes pateikiame masyvo vard kaip pirmj argument foreach ciklui:
foreach ($StatesOfTheUSA As $StateIndex => $State)

Antrasis ir treiasis argumentai yra kintamj vardai kuriuos mes patys sukrme, kurie laiko indekso ir atitinkamo elemento reikmes. Mes paraome kiekvien element vykdydami kod:
{ echo "<BR>$StateIndex - $State"; }

Reikia paymti kelet aspekt. Pirmasis tas, kad masyvo elementas ir indeksas yra du atskiri kintamieji . pastebkite, kad kiekvien kart vykdant cikl vis kitos reikms yra priskiriamos kintamiesiems. Antrasis dalykas yra tas, kad mes niekur programoje nenustatme kiek element yra masyve. PHP pati tai nustat, tai ir yra pagrindinis foreach privalumas. Tai leidia jums judti per masyv kuriame gali nebti jokiu skaitytini ar raidini element, taip pat gali bti praleisti masyvo elementai, bet jis neturi tikrinti kiekvieno masyvo indekso tik tuos kurie turi reikmes. Mes galtumme pridti prie sekanio kodo toki eilut:
$StatesOfTheUSA[100]="Atlantis";

Taiau foreach ciklas neitu per 50-99 elementus, jis nagrinja tik tuos kurie turi reikmes.

122

Apibendrinimas
itas skyrius pristat dvi skirtingas, bet susijusias temas: ciklus ir masyvus. Bdami konceptualiai skirtingi, ciklai ir masyvai yra tamprai susyja PHP kalboje, kaip kad mes ir parodme. Jums reikia ciklu norint atlikti pasikartojanius veiksmus, ir viena i toki operacij yra upildyti dideles indeksuotu kintamj (masyv) mases. Pirmoje skyriaus dalyje mes ityrme tris cikl tipus while, do while ir for. Mes nusprendme, kad kiekvienas i j tinka skirtingoms uduotims, tad pasirinkimas kok pasirinkti priklauso nuo situacijos. Tada mes pristatme masyvus, ir pademonstravome metodus kaip su jais elgtis. Mes apvelgme kaip judti per masyvus, net jei ie nra skaitiniai ar ne-nuosekls. Mes taip pat imokome riuoti masyvus. Galiausiai mes trumpai apvelgme daugybini masyv koncepcija ir paragavome nauj cikl ir masyv galimybi kurias mums pristat PHP4. Sekaniame skyriuje mes tesime ms kelione po PHP fundamentalius dalykus, pristatydami struktrinio programavimo kertin akmen funkcijas.

123

6
Js kodo organizavimas
Ankstesniuose savo skyriuose mes jau paminjome, kad kodo pakartojimo panaudojimas yra geras dalykas, plaiau nepaaikindami kodl. Dar kart, prie praddami aptarinti konkreius PHP programavimo aspektus, mes turime pasinerti fundamentalias programavimo struktras. Kai pirm kart pristatme akojimsi, mes pacitavome vien i pagrindini privalum, kad mums nebereikia vykdyti kodo paeiliui. Tai tiesa, taiau js kodui tampant vis sudtingesniam, js greitai suprasite, kad akojimai ir ciklai yra nepakankami norint parayti efektyv kod. Po ne didelio nukreipimo slygos struktras ar ciklus, js vis tiek grite prie pirmos toliau sekanios eiluts. Tiktai su funkcij pristatymu, js galsite rayti tikrai maas, nepriklausomas kodo dalis kurios gali bti ikviestos, i bet kurios kodo vietos. Funkcijos leidia suglausti kodo dal, lyg jis btu atskira programa. Js galite jiems perduoti duomenis ir gauti atsakymus. Js galite ikviesti funkcijas bet kada js kodo veikimo metu, taip nukreipdami kodo vykdym kita linkme. Mes taip pat apvelgsime kaip funkcijos gali veikti viena kitoje, vl ir vl. Ir kaip mes galime terpti atskir tekst ar PHP skript js web puslap. iame skyriuje aptarsime ias temas pagal eil Pakartotinio kodo naudojimo privalumai
Funkcijos Kaip ikviesti funkcijas web puslapyje Duomen perdavimas ir i funkcijos The scope of variables inside and outside functions Nesting functions Include failai

124

Pakartotinio kodo naudojimo privalumai


Mes nesiruoiame jums ia pateikti plaios programins rangos raymo paskaitos, bet reikia paymti, kad galimyb naudotis kodo dalimis daugiau nei kart suteikia daug privalum. Pirmas ir didiausias privalumas, kad reikia rayti maiau kodo, o tai reikia, kad maiau jo reikia ir tikrinti. Taiau tai ne visi privalumai. Kodo pakartotinis naudojimas leidia jums patogiau struktrizuoti js program. Kompiuteri jaunystje (devinto deimtmeio pradioje), dauguma programini kalb, neleido rayti struktrizuot program, ir tikrai neturjo toki galimybi kaip funkcijos. Taiau jos leido nukreipti programos vyksm pagal ugaida. Tipikai, kiekviena programos kodo linija turjo savo numer, daniausiai didjant 10, jei js k umirite ir vliau norsite k nors parayti. Taip pat buvo lidnai pagarsjusi GOTO komand, kuri nurodydavo perokti tam tikr eilut. Daugumos moni pirmoji programa atrodydavo tai taip:
10 PRINT" HELLO WORLD" 20 GOTO 10

Tai neivengiamai sukeldavo amin cikl spausdinanti HELLO WORLD ekrane, kol vartotojas nenutraukdavo ios nesamons. Dideliose programuose, net keletas GOTO komand padarydavo jas labai sunkiai suprantamas, nes kodo veikimo eilikumo kaip ir nebuvo. Jos netgi vadintos spageti kodu. Mes dabar ia nekdami jauiame savo pranauma, taiau ir kai kuriam ms sukurtam kodui trksta aikumo ir nuoseklumo jokio skirtumo nuo spageti kodo. Kaip to ivengti? Atsakymas yra, taiaus pasukime truputli on.

Modulizacija (modularization)
Kai js raote program, js vis pirma apmstote uduot kuri reikia atlikti, ir padalinate j kelet maesni uduotli. Galvokite apie ias uduotis kaip apie modulius. Dabartiniai programuotojai rao kod moduliais ir kompiliuoj iuos modulius vien didel program. J lengviau testuoti, jei konkreti programos dalis daro tik vien uuoti. Yra tik keletas reikmi kurios pateikiamos moduliams ir gaunami keli atsakymai. Sakykime mes inome, kad kakoks modulis veikia be klaid, ir tada duomenis perduodami kakokiam kitam moduliui kuris pateikia klaidingus atsakymus, i karto aiku kurioje kodo dalyje yra klaida ir galima iurti kur konkreiai ji atsitinka. Taip pat jei modulis atlieka konkrei funkcij, js galite ikviesti t moduli tiek kart keik jums reikia atlikti tai uduoiai. Js galite galvoti apie modulius kaip apie maas juodas des, kurias js dedate duomenis ir iimate atgal, ir tol kol duomenys yra teisingi jums visai nerpi kas vyksta viduje. PHP (ir daugelyje kit programavimo kalb) tokie moduliai vadinami funkcijomis.

Functions
Kaip mes jau sakme, funkcijos yra kodo dalys skirtos atlikti konkreiom uduotim. Mes jau matme, kad funkcijos gali paimti reikmes, vadinamas argumentais, atlikti kakokias operacijas ir tada grainti kit reikm. Funkcija perdaro bet kokius argumentus naujus kintamuosius, vadinamus parametrais, kurie vliau gali bti naudojami u funkcijos rib. Mes jau plaiai naudojoms funkcijomis ioje knygoje, pavyzdiui riavimo operacijose, kur bdavo pateikiamas masyvas ir gaunamas atsakymas (jau suriuotas). iame skyruje mes imoksime patys pasidaryti funkcijas. Ms funkcijos veiks tokiu pat principu kaip ir standartins, tad kai mes parpinsime joms argumentus, jos atliks veikspus ir suteiks mums atsakymus.

125

Funkcij apibrimas ir ikvietimas


Norint apibrti funkcij reikia suteikti jis vard. Norint tai padaryti naudojamas raktaodis function, ir po jo sekantis funkcijos vardas. Visi parametrai yra nurodomi skliaustuose po funkcijos vardo. Kodas kuris suformuoja kodo pagrind yra patalpinamas riestiniuose skliaustuose. Abstrakiai viskas veikia tai taip: function funkcijosvardas (parametrai) { funkcijos kodas... } Paiurkime pavyzd kaip PHP apskaiiuoja mokesius funkcijoje:
function mokesciai ($Alga) { $Alga = $Alga - (($Alga/100)*20); return $Alga; }

Pati funkcija gali turti tiek kodo eilui kiek tik norite, bet paskutinje eilutje (nordami gauti atsakym) js turite patalpinti galutin iraik ar apskaiiavim po return raktaodio. Tai pasako funkcijai, kad js baigte savo skaiiavimus ir funkcija ia pasibaigia. Taip pat tai gali reikti, kad apskaiiuota reikm turi bti grainta vl funkcij. Jums nebutinau reikia grainti atsakym, js galite vykdyti kod, kaip kad parodyta itam HTML pavyzdyje:
function html_header($page) { print "\n<HTML>\n<HEAD>\n<TITLE>My Website ::: " . $page . "</TITLE>\n</HEAD>"; print "\n<BODY>"; return; }

Return raktaodis ia naudojamas parodyti funkcijos pabaiga, o ne tam kad btu gauti atsakymai. Taiau jei js norite parodyti funkcijos sugraint rekm, js galite pasinaudoti echo komand. Return pati nepavaizduoja atsakymo; ji tik persiunia atsakymus (jei tokie yra). PHP kalboje funkcijos turinio vygdymas vadimamas funkcijos ikvietimu. Js galite funkcijai tiesiog pateikti skiai:
echo (mokesciai(1600));

arba galite jai duoti jau sukurto kintamojo vard:


$Alga=1600; echo (mokesciai($Alga));

Kad btu aikiau, js gal bt norsite priskirti funkcijos rezultatus kintamajam, o tada parodyti juos ekrane:
$Alga=1600; $ApskaisiuotaAlga = mokesciai($Alga); echo ($ApskaisiuotaAlga);

Jei norite funkcijai pateikti daugiau nei vien argument, js turite atskirti kintamuosius kableliais:
function mokesciai ($Alga,$Procentai) { $Alga = $Alga - (($Alga/100)*$Procentai); return $Alga;

126

Norint ikviesti funkcija, reikia suteikti jai du argumentus:


echo (mokesciai(1600,25));

arba du kintamuosius:
$Alga=1600; $Procentai=25; echo (mokesciai($Alga,$Procentai));

arba kaintamj ir reikmi miinys:


$Procentai=25; echo (mokesciai(1600,$Procentai));

Js galite ir nesutekti jokiu argument funkcijai:


function mokesciai () { $Alga = 2500; $Procentai = 15; $Alga = $Alga - (($Alga/100)*$Procentai); return $Alga; }

Gal js neinote kur parayti kintamuosius kurie bus naudojami kaip argumentai funkcijoje? Jie gali bti raomi prie funkcija:
<?php $Alga=1600; //Cia prasideda PHP kodo vykdymas $Procentai=25; echo (mokesciai($Alga,$Procentai)); //Cia iskvieciama funkcija function mokesciai($Alga,$Procentai) //Cia funkcija apibreziama { $Alga = $Alga - (($Alga /100)*$Procentai); return $Alga; } ?>

Bet taip pat lengvai jie gali eiti ir po funkcijos. Jei pairsite vis pavyzdin program:
<?php function mokesciai($Alga,$Procentai) //Cia funkcija apibreziama { $Alga = $Alga - (($Alga /100)*$Procentai); return $Alga; } $Alga=1600; //Cia prasideda PHP kodo vykdymas $Procentai=25; echo (mokesciai($Alga,$Procentai)); //Cia iskvieciama funkcija ?>

PHP kodo vykdymas prasids per programos vidur, su pirmj linija kuri nra funkcijoje. Ms funkcija nenaudojama tol kol ji neikvieiama paskutinje eilutje. Jei paalintumme paskutin eilut funkcija i viso nebtu vykdoma. Jei funkcijos nereikia jos galima i viso neikviesti. Arba naudotis j tiek kartu kiek tik reikia, k mes tuoj ir parodysime:
$Alga=1600; $Procentai=25; echo (mokesciai(2000,$Procentai)); echo (mokesciai($Alga,30)); echo (mokesciai(2000,30)); echo (mokesciai($Alga,$Procentai));

127

Galiausiai, js neapriboti naudoti t pati kintamj u funkcijos rib kaip ir argumentai. Mes darme pavyzdius su tokiais paiais kintamaisiais, nes norjome, kad viskas btu kiek galima aikiau:
$Karve=1600; $Pienas=25; echo (mokesciai($Karve,$Pienas)); function mokesciai($Alga,$Procentai) { $Alga = $Alga - (($Alga/100)*$Procentai); return $Alga; }

Svarbiausiai, kad funkcija paima argumentu kintamuosius ir priskiria j reikmes kintamiesiems kurie bus naudojami funkcijos viduje. Taigi $Alga gauna $Karve reikm funkcijos viduje, o $Proventai gauna $Pienas reikm. Prie darant pavyzd, trumpai apibendrinkime.
Funkcija turi turti vard Funkcijos paima argumentus kurie yra reikms ar kintamieji kurie raomi skliausteliuose po funkcijos vardo Jei yra keletas parametr, jie atskiriami kableliais Funkcijos kodas pateikiamas riestiniuose skliaustuose po funkcijos vardo ir parametr Js turite naudoti return raktaod funkcijos viduje, nordami gauti rezultat kur btu galima naudoti u funkcijos rib Jie nra rezultato kur reiktu grainti, return raktaodis paprasiausiai nurodo funkcijos pabaiga Funkcijos nevykdomos, kol kur nors PHP kode nra ikvieiamos Js galite ikviesti funkcija jai esant prie ar po ikvietimo, tai reikia, kad funkcija gali bti bet kurioje kodo vietoje Js galite ikviesti funkcija tiek kart kiek tik norite

Dabar mes inagrinsime atostog pavyzd kur jau darme ankstesniame skyriuje ir panaudosime funkcij apskaiiuodami atostog ilaidas. Kaip patys pamatysite mes paraysime daug maiau kodo eilui.

Ibandykite paprastos funkcijos naudojimas

1. Atidarykite savo redaktori ir susiraskite jau padaryta holiday.html, pakeiskite parykint linij. Jei nebeturite holiday.html paraykite vis emiau esant kod:
<HTML> <HEAD></HEAD> <BODY> <B>Namllu Holiday Booking Form</B> <FORM METHOD=GET ACTION="holiday3.php"> Where do you want to go on holiday? <BR> <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Prague"> Prague <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Barcelona"> Barcelona <BR> <INPUT NAME="Destination" TYPE="Radio" VALUE="Vienna"> Vienna <BR> <BR>

128

What grade of hotel do you want to stay at? <BR> <BR> <INPUT NAME="Grade" TYPE="Radio" VALUE="Three"> Three Star <BR> <INPUT NAME="Grade" TYPE="Radio" VALUE="Four"> Four Star <BR> <BR> <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML>

2. Isaugokite kaip holiday.html. 3. Udarykite it fail ir padarykite nauj:


<HTML> <HEAD></HEAD> <BODY> <B>Namllu Holiday Booking Form</B> <BR> <BR> <?php function Calculator($Price, $CityModifier, $StarModifier) { return $Price = $Price * $CityModifier * $StarModifier; } $Price=500; $StarModifier=1; $CityModifier=1; $DestGrade = $Destination.$Grade; switch($DestGrade) { case "BarcelonaThree": $CityModifier=2; break; case "BarcelonaFour": $CityModifier=2; $StarModifier=2; break; case "ViennaThree": $CityModifier=3.5; break; case "ViennaFour": $CityModifier=3.5; $StarModifier=2; break; case "PragueThree": break; case "PragueFour": $StarModifier=2; break; default: $CityModifier=0; echo ("Go back and do it again"); } if ($CityModifier<>0) { echo "The cost for a week in $Destination is " . "$" . Calculator($Price,$CityModifier,$StarModifier); } ?> </BODY> </HTML>

4. Isaugokite kaip holiday3.php. 5. Atidarykite holiday.html


savo naryklje.

129

6. Pasirinkite kelet opcij ir paspauskite Submit. 7. Js pavyzdys turtu veikti normaliai:

Kaip tai veikia


Atostog forma turtu bti labai paystama, ji perduoda tik du kintamuosius: kelions viet ($Destination) ir viebuio tip ($Grade). Mes pradedame PHP skript nuo funkcijos kuri apskaiiuoja atostog kain:
function Calculator($Price, $CityModifier, $StarModifier) { return $Price = $Price * $CityModifier * $StarModifier; }

Ji paima tris parametrus pagrindin atostog kain, kainos skirtum priklausomai nuo miesto, ir kainos skirtum priklausomai nuo viebuio lygio. Funkcija padaugina ias tris reikmes ir graina vien reikm bendr atostog kain. ie skaiiavimai ankstesniame pavyzdyje buvo atlikinjami daug kart, tuo tarpu ia mums tereikia isikviesti funkcija ir pateikti jai duomenis. Visa kita programos dalis irgi neturtu sukelti jums sunkum. Mes sujungiame kintamuosius $Destination ir $Grade:
$DestGrade = $Destination.$Grade;

Priklausomai nuo j reikms mes pasirenkame ir vykdome tam tikr kodo dal. Kodas su case pasirinkimu paprasiausiai priskiria reikmes kintamiesiems $CityModifier ir $StarModifier:
switch($DestGrade) { case "BarcelonaThree": $CityModifier=2; break; case "BarcelonaFour": $CityModifier=2; $StarModifier=2; break; case "ViennaThree": $CityModifier=3.5; break; case "ViennaFour": $CityModifier=3.5; $StarModifier=2; break; case "PragueThree": break; case "PragueFour": $StarModifier=2; break; default: $CityModifier=0; echo ("Go back and do it again"); }

130

Mes padarme viena ne didel pakeitim apaioje default opcijoje, pakeisdami kintamojo $CityModifier reikm nul, jei netiko nei viena i slyg. Prie vykdydami funkcija mes patikriname ar $CityModifier buvo nurodytas kaip nulis ar ne, jei nebuvo mes galime ikviest funkcija su echo() komand, pasinaudodami sujungimo operatoriumi (taku) pateikdami atsakymus:
if ($CityModifier<>0) { echo "The cost for a week in $Destination is " . "$" . Calculator($Price,$CityModifier,$StarModifier); }

i funkcija paima visus tris kintamuosius kaip argumentus ir pateikia atsakym.

Funkcijos ir switch()
Jei engsite dar vien ingsn toliau, nei padarme ms paskutiniame pavyzdyje kur naudojome switch() element, labai naudinga pasirinkti funkcijas konkreiam veiksmui su switch() elementu. sivaizduokime program, kurioje priklausomai nuo ms pasirinkto marruto tikslo paskaiiuojama reikalinga pinig suma ir ji savo ruotu paveriama vietin valiut:
switch ($City) { case "Oslo": echo(Norwegian_converter($MoneyAmount)); break; case "Stockholm": echo(Swedish_converter($MoneyAmount)); break; case "Copenhagen": echo(Danish_converter($MoneyAmount)); break; default: echo $MoneyAmount; } function Norwegian_converter($MoneyAmount) { ...apskaiiuoja ir pateikia sum Norvegika valiuta } function Swedish_converter($MoneyAmount) { ...apskaiiuoja ir pateikia sum vedika valiuta } function Danish_converter($MoneyAmount) { ...apskaiiuoja ir pateikia sum Danika valiuta }

Tai tikrai didelis kodo kiekis, taiau switch() elementas save traukia visas galimybes, pagerina program, be to prisiminkite, kad tik viena i vis i funkcij bus atliekama. Tai taip pat labai pagerina kodo skaitym, nes switch/case konstrukcija yra lengvai skaitoma. Mes matysime tokias konstrukcijas ir toliau ioje knygoje, kurioje mes imsime reikm i HIDDEN laukelio ir taip nustatysime tolimesn skaiiavim eig. Kiekviena veiksm eiga yra nurodoma funkcija, ir kai tik vartotojas pasirenka veiksm pvz. duomen perira ar j keitimas switch() elementas pakeiia funkcija kuri ir turi atilikti norimus veiksmus.

131

Reikmi sugraint funkcijomis priskirimas kintamiesiems


enkime dar vien ingsn pirmyn. Funkcijos sugraina reikmes, tad tas reikmes galima priskirti kintamiesiems. Galite padaryti paprasiausiai taip:
$HitCounter = number_of_hits();

Ms kintamasis $HitCounter gaus bet koki reikm, kuri jam sugrains funkcija number_of_hits(). Tada js galite patalpinti kintamj tarp switch() elemento skliausteli.
switch ($HitCounter) { case $HitCounter <100: echo "Not many hits this week"; break; case $HitCounter <1000: echo "Some hits this week"; break; case $HitCounter <10000: echo "Loads of hits this week"; break; }

i funkcija bus vykdoma tik kart ir priklausomai nuo rezultat mes imsims skirting veiksm.

Reikmi perdavimas
Mes jau apvelgme kaip funkcijos naudoja parametrus. Vienetins reikms kurias mes pasiuniame funkcijas vadinamos argumentais. Skirtumas tarp argument ir parametr yra tas, kad argumentus mes perduodame ikviesdami funkcij, o parametrai yra tai k mes naudojame funkcijos viduje. Mes nenagrinjome io proceso plaiau, ir mums reikia apvelgti klausim plaiau, nes yra du bdai perduoti argumentus funkcijai ir priklausomai nuo to kuris buvo panaudotas, mes galime gauti skirtingus rezultatus.

Perdavimas per Reikm


pirmj metod mes jau naudojome. Ms mokesi pavyzdys reikalavo perduoti j kontamj $Alga. Jie mes iek tiek pakeisime program, taip kad fizikai pasikeistu kintamojo $Alga reikm, mes galsime parodyti skirtum tarp i dviej metod.
function mokesciai ($Alga) { $Alga = $Alga - (($Alga/100)*20); return $Alga; } $Alga = 2500; echo (mokesciai($Alga)); // Tai pateiks 2000 echo $Alga; // Tai pateiks 2500

Tai niekaip nekeiia ms prie tai daryto pavyzdio, taiau du pateikti atsakymai vis tiek bus skirtingi. Viskas k mes padarme yra perdavme funkcijai kintamj kaip argument. iuo atvju buvo perduota reikm 2500 ir funkcijos viduje, po atlikt veiksm, buvo gautas naujas kintamasis, taip pat buvo pateikta kintamojo $Alga reim 2500:
function mokesciai (2500) { $Alga = $Alga - (($Alga/100)*20);

132

return $Alga; } $Alga = 2500; echo (mokesciai($Alga)); // Tai pateiks 2000 echo $Alga; // Tai pateiks 2500

is procesas inomas kaip argumento perdavimas per reikm. Ne svarbu kaip mes pakeisime reikm funkcijos viduje, reikm kuri mes suteikme kintamajam $Alga iliks tokia pati, tad jei js pateksite $Alga turin po funkcijos veikimo, ji vis tiek iliks 2500. Funkcija paprasiausiai pateikia naujai apskaiiuot reikm kuri yra 2000, ir daugiau nedaro nieko. Tai yra pagrindinis procesas kur js naudosite pateikdami reikmes funkcijai. Kas atsitiks jei js norsite, kad kintamasis $Alga i tikro turtu naujai apskaiiuot reikm?

Perdavimas per Referent (referente)


Tai yra antrasis metodas kurio mes dar nenaudojome, kai perduota reikm i tikro pakeiiama funkcijos viduje. is metodas vadinamas perdavimu per referent. Nordami nurodyti PHP, kad js norite naudoti kaip tik metod jums reikia parayti prie kintamj & enkl:
function mokesciai (&$Alga) { $Alga = $Alga - (($Alga/100)*20); return $Alga; } $Alga = 2500; echo (mokesciai($Alga)); // Tai pateiks 2000 echo $Alga; // Tai pateiks 2000

iuo atveju, kintamojo $Alga reikm yra pakeiiama, taip kad dabar io kintamojo reikm bus 2000.

Numatyt reikmi nustatymas


Kad dar laibiau visk sujaukti, js galite nurodyti js parametr reikmes pai argument viduje. Tai tampa numatytj reikme kai js nenurodote jokios kitos: Just to confuse matters, you can also set the values of your parameters within the arguments themselves. This becomes the default value for when you don't specify any parameters:
function mokesciai (&$Alga = 2500) { $Alga = $Alga - (($Alga/100)*20); return $Alga; }

Tai reiki, kad ikvieiant funkcij nenurodius jokio argumento:


tax();

bus automatikai panaudota reikm 2500. Taiau jei js pateiksite argumenta pvz.:
tax(3000);

tada bus naudojama pateikta reikm, o ne numatytoji, tai yra dirbama su 3000, o ne su 2500.

Parametr reikms
Jei js nenustatte numatytosios reikms, ar neperdavte funkcijai argumente PHP 4 pati priskirs argumentui nulin reikm. Tai reikia, kad jei

133

funkcijai turi bti pateikti du argumentai, o js perdavte tik vien, tada tas argumentas kurio js nepateikte gaus nulin reikm. Js galite gauti spjant praneim priklausomai nuo toki PHP versij js naudojate ir kaip sukonfigruoti PHP praneimai apie klaidas. Mes paimsime pavyzd kuriame funkcijai turi bti pateikti du argumentai:
function mokesciai($Alga, $Procentai) { return $Alga - (($Alga/100)*$Procentai); }

Dabar mes perduosime iai funkcijai tik vien argument:


echo (mokesciai (3000));

PHP tai interpretuos, kad reikm buvo suteikta tik pirmajam argumentui $Alga, ir pati suteiks nulin reikm $Procentai. Kaip rezultat funkcija pateiks toki paia reikm, nes deinje pusje buvo apkaiiuotas nulis:
3000 ((3000/100 * 0)

Tas pats principas pritaikomas ir dirbant su nustatytomis reikmmis, tad jei js paraysite pirmj parametr su numatytj reikme:
function mokesciai($Alga=2500, $Procentai) { return $Alga - (($Alga/100)*$Procentai); }

ir taip pat j ikviesite:


echo (tax(3000));

PHP supras, kad reikm 3000 yra perduodama $Alga ir nieko neperduodama kintamajam $Procentai, netgi jei $Alga turi numatytj reikm ir js nieko nenorite jai perduoti. Viso ito moralas tas kad parametrai funkcijoje ir funkcijos ikvietimas turi sutapti, tiek savo kiekiu tiek vietomis, nebent js naudojate numatytsias reikmes. Jei taip ir yra prisiminkite parametr sek. itas pavizdys nesukels joki klaid:
function mokesciai($Alga=2500, $Procentai) { return $Alga - (($Alga/100)*$Procentai); }

Taiau js visada tursite perduoti reikm kintamajam $Alga prie perduodami j $Procentai. Norint padaryti pavyzd normaliai veikianti, jums tereikia parametrus sukeisti vietomis:
function mokesciai($Procentai, $Alga=2500) { return $Alga - (($Alga/100)*$Procentai); }

ir ikviesti funkcij tai taip:


echo(tax(25));

Parametr su numatytomis reikmmis spstai


Yra dar vienas dalykas kur mes turime atkreipti dmes naudodamiesi parametrais; is funkcija i pirmo vilgsnio gali pasirodyti teisinga, taiau i tikro ji sugeneruos klaid:
function mokesciai (&$Alga) {

134

$Alga = $Alga - (($Alga/100)*20); return $Alga; } echo (mokesciai(1000));

Js gausite tai tok praneim, jei bandysite paleisti aukiau pateikt kod:

Prie tai buvusios PHP versijos, prie 4taj, leisdavo atlikti tok veiksm ir pranedavo tik spjim, taiau PHP 4 baig taip elgtis. Jei norite, kad kodas veiktu jums reikia pasisti kintamj, o ne skaitin reikm, tai taip:
$Alga = 20; echo (mokesciai(&$Alga));

Js negalite pasisti skaitins reikms, nes neturtu prasms keisti skaitin reikm. jei pasisite 1000, js nenorsite, kad i reikm pasikeistu. Ta pati taisykl taikoma ir konstantoms. Judkime priek ir apvelkime kitas funkcij galimybes.

Kintamj ris
io skyriaus viduje mes usiminm, kad kintamieji esantys funkcijos viduje nebutinai egzistuoja ir u jos rib. Tiesa pasakius dabar mes turime pristatyti visai nauj koncepcij kintamj egzistavimo trukm. Kintamj egzistavimo trukm yra laikotarpis nuo jo sukurimo iki egzistavimo pabaigos. Normaliai tai web puslapio egzistavimo laikotarpis. Taiau kai kintamieji yra naudojami funkcij viduje tai nevisada tiesa. Tai gali bti tik funkcijos egzistavimo laikotarpis. Funkcija yra ikvieiama ir kintamieji viduje pradeda egzistuoti. Js prieinate funkcijos gal, ir kintamieji udaromi. Bet kokie kreipiniai juos i u funkcijos rib yra klaidingi, nes ie kintamieji daugiau nebeegzistuoja.

Visuotiniai ir vietiniai kintamieji


(global and local)
Kintamieji sukurti u funkcijos rib egzistuoja per vis web puslapio egzistavimo laikotarp. Visa koncepcija yra pavadinta apimtimi (scope). Kintamieji funkcijos viduje yra apraomi kaip turintys vietin apimt, kai tuo tarpu kintamieji kurie egzistuoja per vis web puslapio egzistavimo laikotarp vadinami visuotins apimties. Paiurkime pavyzd kuriame pateiktos abidvi ios kintamj rys. is kodas pateikia pasisveikinim anglikai arba pranczikai:
<?php $WelcomeMessage = "Hello world"; Global Variable

135

function translate_greeting($WelcomeMessage) { $WelcomeMessage = "Bonjour Tout Le Monde"; Variable return $WelcomeMessage; } translate_greeting(); echo $WelcomeMessage; ?>

Local

Pirmoji kintamojo $WelcomeMessage reikm yra "Hello World". Tai visuotinis kintamasis. Funkcijos viduje mes $WelcomeMessage suteikiame reikm "Bonjour Tout Le Monde", ir tada vygdome funkcij $WelcomeMessage yra vietinis kintamasis. Jei vygdisite kod, puslapyje bus parayta "Hello World". Taip yra nes funkcijos viduje esantis kintamasis yra vietinis. Atkreipkite dmes tai, kad mes ia nepateikiame funkcijos rezultat, kaip kad darydavome anksiau patalpindami funkcij echo() komand. Taiau funkcija yra vygdoma, mes paprasiausiai nepateikiame jos rezultato. Jei mes pakeisme argument funkcijos parametruose ir kintamj paioje funkcijoje ir vl vykdysime program mes negausime jokio rezultato:
<?php $WelcomeMessage = "Hello world"; function translate_greeting($FrenchMessage) { $FrenchMessage = "Bonjour Tout Le Monde"; return $FrenchMessage; } translate_greeting(); echo $WelcomeMessage; echo $FrenchMessage; ?>

Taip yra, todl, kad kintamojo egzistavimas yra nutraukiamas kai tik funkcija pateikia atsakym.

Visuotini kintamj naudojimas funkcijose


Analogikai, jei mes nortumme pavaizduoti $WelcomeMessage turin funkcijos viduje, mes negaltumme to padaryti nes $WelcomeMessage neegzistuoja funkcijos viduje:
<?php $WelcomeMessage = "Hello world"; function translate_greeting($FrenchMessage) { echo $WelcomeMessage; $FrenchMessage = "Bonjour Tout Le Monde"; return $FrenchMessage; } translate_greeting(); echo $WelcomeMessage; echo $FrenchMessage; ?>

Tai turi savo prasme kas atsirtiktu jei mes turtumme vietin kintamj funkcijos viduje tokiu paiu vardu kaip ir globalus kintamasis u jos rib? Mes turi turti kakok bd identifikuoti visuotinius kintamuosius, nes turi bti tikri kad PHP juos supranta kaip tuos paius kintamuosius, o ne tik besidalinnaius vienodais vardais. Yra du bdai tai padaryti. Pirmasis parodytas emiau:
<?php $WelcomeMessage = "Hello World"; function translate_greeting($FrenchMessage) {

136

global $WelcomeMessage; echo $WelcomeMessage; $FrenchMessage = "Bonjour Tout Le Monde"; return; } translate_greeting(); echo $WelcomeMessage; ?>

iame pavyzdyje, mes nurodme, kad $WelcomeMessage yra globalus kintamasis. Kaip matme anksiau, jei mes pavaizduosime $WelcomeMessage funkcijos viduje prie tai nenurode jo kaip globalaus kintamojo, jis bus traktuojamas kaip naujai sukurtas kintamasis ir neturs jokios reikms. Dabar gi ms echo() komanda parao "Hello World" kaip ir buvo tiktasi nes kintamasis taro globalios apimties. Kitas bdas kaip pasiekti tok pat rezultat yra PHP kalboje naudoti $GLOBALS masyv. Norit pavaizduoti global kintamj funkcijos viduje pasinaudojus $GLOBALS masyvu jums reikia:
<?php $WelcomeMessage = "Hello world"; function translate_greeting($FrenchMessage) { echo $GLOBALS["WelcomeMessage"]; $FrenchMessage = "Bonjour Tout Le Monde"; return $FrenchMessage; } translate_greeting(); echo $WelcomeMessage; echo $FrenchMessage; ?>

Abiejuose pavyzdiuose js gausite du kartus parayt praneim "Hello World". Tai yra nes mes paraome j vien kart funkcijos viduje ir kit u funkcijos rib. Raktaod global gana lengva suprasti, taiau su $GLOBALS masyvu kiek sudtingiau. Pavelkime kiek atidiau kaip is masyvas veikia. Jis turi sekant format: $GLOBALS["KintamojoVardas"] Nordami apibdinti kintamj js paraote jo vard be $ simbolio tarp kabui ir lautini skliaust. Prie vis tai raosi $GLOBALS didiuosiomis raidmis. Tiesa pasakius jis veikia taip pat kaip ir eiluts tipo masyvas kur mes aptarme ankstesneme skyriuje.

Vietini kintamj reikmi ilaikymas


Kas atsitinka kai mes ikvieiame funkcija vl ir vl. Kaip mes jau sakme vietiniai kintamieji atsiranda kai funkcija yra ikvieiama ir nustoja egzistuoti kai ji baigia savo darb. Taiau gali bti toki situacij kai js norsite, kad vietini kintamj reikms iliktu tarp funkcijos ikvietim. Js galsite ikviesti funkcij dar kart ir ji operuos reikmmis isaugotomis nuo ankstesniojo karto. sivaizduokite, kad js atliekate kakokius pasttovius skaiiavimus, kuriuos atlieka funkcija. Bus negerai jei ji kiekviena kart prads dirbti su naujais kintamaisiais.
function number_of_hits_on_web_site() { return $number_of_people = $number_of_people+1; }

Kintamieji kurie egzistuoja tarp funkcijos ikvietim vadinami statiniais. Nordami apibrti tok kintamj js turite parayti raktaod static prie kintamj:

137

function number_of_hits_on_web_site() { static $number_of_people = 0; return $number_of_people = $number_of_people+1; }

Tai neatrodo visai logikai. Tiesa pasakius kiekviena kart kai ikvieiama funkcija kintamojo reikm vis tiek yra nulis. Static reikm tame, kad linija su static apibrtimi yra atliekama tik vien kart pirm kart ikvietus funkcij, kitais kartais ji yra praleidiama. Jei js paraysite kiekvien kart funkcijos pateikiam reikm, ji dids vienu skaiiumi:
echo(number_of_hits_on_web_site()); <-- would return 1 echo(number_of_hits_on_web_site()); <-- would return 2 echo(number_of_hits_on_web_site()); <-- would return 3

Mes apvelgme globalius, vietinius ir statinius kintamuosius pakartokime pagrindinius j skirtumus:


Globals kintamieji turi reikmes kurios egzistuoja vis programos veikimo laik, taiau norint juos panaudoti funkcijos viduje js turite juos apibrti su GLOBALS raktaodiu. Vietiniai kintamieji turi reikmes kurios egzistuoja tik funkcijos viduje ir tik t laikotarp kol vykdoma funkcija. Statiniai kintamieji yra vietiniai kintamieji kurie ilaiko savo reikm funkcijos viduje kievien kart kai funkcija yra ikvieiama.

Jei supratote iuos skirtumus, pats laikas atlikti nedidel pavyzd. Mes sukursime kikevienos ries kintamuosius ir pavaizduosime juos web puslapyje, nurodydami kada mes esame funkcijos viduje, o kad u jos rib.

Ibandykite Skirting ri naudojimas

1. Atidarykite savo teksto redaktori ir paraykite:


<HTML> <HEAD></HEAD> <BODY> <BR> <BR> <FONT SIZE=-1> <?php $GlobalVariable = "Global"; function local() { $LocalVariable="Local"; static $StaticVariable=0; echo "<BR>The contents of GlobalVariable are " . $GLOBALS["GlobalVariable"]; echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable"; return $StaticVariable=$StaticVariable+1; } echo "<B>Calling Our function for the first time...</B>"; local(); echo "<BR><BR><B>Outside the function again...</B>"; echo "<BR>The contents of GlobalVariable are $GlobalVariable"; echo "<BR>The contents of LocalVariable are $LocalVariable";

138

echo "<BR>The contents of StaticVariable are $StaticVariable"; echo "<BR><BR><B>Calling Our function for the second time...</B>"; local(); echo "<BR><BR><B>Outside the function again...</B>"; echo "<BR>The contents of GlobalVariable are $GlobalVariable"; echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable"; echo "<BR><BR><B>Calling Our function for the third time...</B>"; local(); echo "<BR><BR><B>Outside the function again...</B>"; echo "<BR>The contents of GlobalVariable are $GlobalVariable"; echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable"; ?> </FONT> </BODY> </HTML>

2. Isaugokite kaip scope.php. 3. Atidarykite savo naryklje scope.php:

Kaip tai veikia

139

i programa neturi praktins reikms, taiau skirtingos kintamj rys yra sudtindas dalykas ir mes norjome kiek galima isamiau paaikinti jo prigimt. Pirmoji ms programos eilut sukuria kintamj $GlobalVariable ir priskiria jam reikm:
$GlobalVariable = "Global";

Tada mes paraome ms funkcij:


function local() {

Viduje mes sukuriame vietin kintamj $LocalVariable, ir statin kintamj $StaticVariable:


$LocalVariable="Local"; static $StaticVariable=0;

Sekanios trys linijos parao globalaus, vietinio ir statinio kintamojo reikmes funkcijoje:
echo "<BR>The contents of GlobalVariable are " . $GLOBALS["GlobalVariable"]; echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable";

Galiausiai, return komanda didina statinio kintamojo reikm vienetu:


return $StaticVariable=$StaticVariable+1; }

Ms programa prasideda local()funkcijos ikvietimu:


echo "<B>Calling Our function for the first time...</B>"; local();

Mes matome globalaus, vietinio ir statinio kintamj reikmes kurios yra "Global", "Local", ir 0 funkcijos viduje. Kai funkcija yra pabaigiama, mes paraome i trij kintamj reikmes kokios jos yra u funkcijos rib:
echo "<BR><BR><B>Outside the function again...</B>"; echo "<BR>The contents of GlobalVariable are $GlobalVariable"; echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable";

U funkcijos, kaip ir galima tiktis vietinis ir statinis kintamasis yra tuti ir vienintelis $GlobalVariable turi reikm. Toliau, mes ikvieiame funkcij dar kart:
echo "<BR><BR><B>Calling Our function for the second time...</B>"; local();

Dar kart $GlobalVariable yra lygus "Global", $LocalVariable yra inicijuojama i naujo ir turi toki pai reikm, taiau $StaticVariable reikm yra kitokia, nes prie tai buvus kart ms funkcij j padidino vienetu. kart paraomas 1. Mes vl einame u funkcijos rib ir vlgi tik $GlobalVariable turi reikm:
echo "<BR><BR><B>Outside the function again...</B>"; echo "<BR>The contents of GlobalVariable are $GlobalVariable";

140

echo "<BR>The contents of LocalVariable are $LocalVariable"; echo "<BR>The contents of StaticVariable are $StaticVariable";

Galiausiai, mes ikvieiame funkcij treij kart ir kart vienintelis skirtumas yra tas kad statinis kintamasis padidjo dar vienu vienetu:
echo "<BR><BR><B>Calling Our function for the third time...</B>"; local();

U funkcijos rib, kaip tikriausiai ir spjote niekas nepasikeit. Laimei tai ubaigia ms program ir mes nesiruoiame toliau nagrinti ios temos. Jei js gavote kitokius atsakymus patikrinkite savo kod, js turite jau patys sugebti rasti klaidas.

Toliau neturiu nei laiko nei entuziazmo versti i knyg. Jei kas prats darb, kuo a beje labai abejoju, tik sveikinsiu.

141

142

You might also like