89
A PHP programozási nyelv (webes alkalmazásokra) *iERU'pQHV)LVNROD e-jegyzet Dr. Medzihradszky Dénes )RQWRV$MHJ\]HWNtVpUOHWLMHOOHJpVIRO\DPDWRVIHMOHV]WpVDODWWiOO (Van néhány üres címsor is. Kiegészítésként használja a kézikönyvet!) $IRUUiVNyGPHOOpNOHWQHPVRNiUDHOpUKHW OHV] (]D]HOVDONDORPKRJ\HJ\IDNXOWDWtYWDQWiUJ\HVHWpEHQD]RNWDWyLDQ\DJRWWHOMHVHJ é- V]pEHQHOHNWURQLNXVIRUPiEDQDGMXNN|]UH(QQHNI RNDD]~MWDQWiUJ\PiUPRVWHO UH OiWKDWyGLQDPL]PXVDEL]WRVKRJ\DM|Y pYUHDMHJ\]HWHWWHOMHVHJpV]pEHQiWNHOOGR l- JR]QLD]~MSURJUDPQ\HOYLIHMOHPpQ\HNQHN3+3PHJIHOHO HQ(]pUWHJ\DPiUNL a- GiVDNRUHODYXOWQDNWHNLQWKHW Q\RPWDWRWWMHJ\]HWPHJMHOHQWHWpVHQHPOHQQHV]HUHQFVpV Ugyanakkor a tantárgy pozíciója csak mostanában körvonalazódik a tanári gárda és a KDOOJDWyN HOV YLVV]DMHO]pVHLQHN KDWiViUD pV V]HUHWQpP KD PD[LPiOLVDQ D IHOPHUO igényekhez és a szakmai követelményekhez tudnánk szabni a tantárgyat. Ez természetesen most plusz feladatokat ró hallgatóra, oktatóra egyaránt, de ha valóban NRUV]HUWXGiVWDNDUXQNiWDGQLDNNRUH]~J\pU]HPYiOODOKDWypVV]HUHWQpPKDSDUWQ e- rek lenQpQNDWDQWiUJ\YpJV pVGLQDPLNXVIRUPiMiQDNNLDODNtWiViEDQ Budapest, 2004. június 14.

A PHP programozási nyelv (webes alkalmazásokra)users.atw.hu/galagonya/phpjegyzetgdf.pdfA PHP programozási nyelv (webes alkalmazásokra) *iERU'pQHV)˘LVNROD e-jegyzet Dr. Medzihradszky

  • Upload
    others

  • View
    15

  • Download
    1

Embed Size (px)

Citation preview

A PHP programozási nyelv

(webes alkalmazásokra)

*iERU�'pQHV�)�LVNRODe-jegyzet

Dr. Medzihradszky Dénes

)RQWRV��$�MHJ\]HW�NtVpUOHWL�MHOOHJ&�pV�IRO\DPDWRV�IHMOHV]WpV�DODWW�iOO�(Van néhány üres címsor is. Kiegészítésként használja a kézikönyvet!)

$�IRUUiVNyG�PHOOpNOHW�QHPVRNiUD�HOpUKHW��OHV]�

(]�D]�HOV��DONDORP��KRJ\�HJ\�IDNXOWDWtY�WDQWiUJ\�HVHWpEHQ�D]�RNWDWyL�DQ\DJRW�WHOMHV�HJé-

V]pEHQ�HOHNWURQLNXV�IRUPiEDQ�DGMXN�N|]UH��(QQHN�I��RND�D]�~M�WDQWiUJ\�PiU�PRVW�HO�UHOiWKDWy�GLQDPL]PXVD��EL]WRV��KRJ\�D�M|Y��pYUH�D� MHJ\]HWHW� WHOMHV�HJpV]pEHQ�iW�NHOO�GRl-JR]QL�D]�~M�SURJUDPQ\HOYL�IHMOHPpQ\HNQHN��3+3����PHJIHOHO�HQ��(]pUW�HJ\��D�PiU�NLa-

GiVDNRU�HODYXOWQDN�WHNLQWKHW��Q\RPWDWRWW�MHJ\]HW�PHJMHOHQWHWpVH�QHP�OHQQH�V]HUHQFVpV�Ugyanakkor a tantárgy pozíciója csak mostanában körvonalazódik a tanári gárda és a

KDOOJDWyN� HOV�� YLVV]DMHO]pVHLQHN� KDWiViUD�� pV� V]HUHWQpP�� KD� PD[LPiOLVDQ� D� IHOPHU�O�igényekhez és a szakmai követelményekhez tudnánk szabni a tantárgyat.

Ez természetesen most plusz feladatokat ró hallgatóra, oktatóra egyaránt, de ha valóban

NRUV]HU&�WXGiVW�DNDUXQN�iWDGQL��DNNRU�H]�~J\�pU]HP�YiOODOKDWy�pV�V]HUHWQpP��KD�SDUWQe-

rek lenQpQN�D�WDQWiUJ\�YpJV��pV�GLQDPLNXV�IRUPiMiQDN�NLDODNtWiViEDQ�

Budapest, 2004. június 14.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

2/89

Tar talomjegyzék

TARTALOMJEGYZÉK .................................................................................................................................2

A0,7�$�-(*<=(75�/�78'1,�.(//.............................................................................................................4

JAVASLATOK A JEGYZET HASZNÁLATÁHOZ, (/�,60(5(7(.....................................................................5

BEVEZETÉS ..............................................................................................................................................6

KLIENS - SZERVER ARCHITEKTÚRA ..........................................................................................................7

AMIRE TEKINTETTEL KELL LENNI ALKALMAZÁS-FEJLESZTÉS SORÁN .....................................................10

JAVASCRIPT, VBSCRIPT - AZ "EGYETLEN" KLIENS OLDALI ESZKÖZ.......................................................12

A SZERVER OLDALI PROGRAMOZÁS ESZKÖZEI........................................................................................14

Adatforrások.....................................................................................................................................14

CGI programozás.............................................................................................................................16

Perl ...................................................................................................................................................17

Python...............................................................................................................................................18

Java ..................................................................................................................................................19

ASP...................................................................................................................................................20

A PHP NYELV ........................................................................................................................................21

A PEAR.................................................................................................................................................23

PROGRAMOZÁS PHP NYELVEN ..............................................................................................................23

Nyelvi jellegzetességek: ....................................................................................................................24

EGY APACHE + PHP + MYSQL )(-/(6=7�5(1'6=(5�g66=(È//Ë7È6$, TELEPÍTÉSE.............................31

A telepítés menete Windows rendszeren: ..........................................................................................32

MySQL Front telepítése....................................................................................................................34

PHPEdit telepítése............................................................................................................................35

EGY VEGYES KÓDOLÁSÚ (PHP + HTML + JAVASCRIPT) WEBOLDAL ELKÉSZÍTÉSE...............................36

GYAKORLATI FELADATOK......................................................................................................................39

Jelszavas belépés..............................................................................................................................39

$�J\DNUDQ�KDV]QiOW�3+3�I�JJYpQ\HN�NLJ\&MWpVH�pV�OLQNHOW�OLVWD�NpV]tWpVH .........................................44

'iWXP�pV�LG��PHJMHOHQtWpVH ..............................................................................................................47

5HJLV]WUiFLy��DGDWIHOYLWHO��DGDWIHOYLWHO�HOOHQ�U]pV .............................................................................48

7|EEQ\HOY&�ROGDODN���HJ\�UHJLV]WUiFLyV�&UODS���Q\HOYHQ...................................................................54

Névnapozás, az aktuális névnap kiírása ...........................................................................................58

'iWXP�pV�LG�NH]HOpV�IHOV�IRNRQ ........................................................................................................60

5HJXOiULV�NLIHMH]pV�DONDOPD]iVD�EHYLWHOL�PH]�N�HOOHQ�U]pVpUH..........................................................63

%DQQHUFVHUpO�N .................................................................................................................................65

'%0�DGDWEi]LV�NH]HOpV���XWROVy�OiWRJDWiV�LG�SRQWMD ........................................................................69

DBM adatbázis kezelés - jelszavas beléptetés...................................................................................72

(J\V]HU&�IyUXP���]HQ�IDO..................................................................................................................77

/iWRJDWy�V]iPOiOiV���HJ\V]HU&..........................................................................................................77

Látogató számlálás - statisztika........................................................................................................78

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

3/89

Képek kirakása, képgalériák.............................................................................................................78

Dinamikus képek - feli rat készítés.....................................................................................................79

'LQDPLNXV�NpSHN���HJ\V]HU&�LGRPRN�NLUDM]ROiVD ..............................................................................79

Dinamikus képek - oszlopdiagram kirajzolása .................................................................................82

Dinamikus képek - vonaldiagram kirajzolása...................................................................................85

Szavazógép kódolása........................................................................................................................86

Felmérés készítése ............................................................................................................................86

Tesztprogram kódolása.....................................................................................................................87

E//(1�5=��.e5'e6(. ..........................................................................................................................87

IRODALOMJEGYZÉK................................................................................................................................87

Perl ...................................................................................................................................................87

PHP ..................................................................................................................................................88

PHP )(-/(6=7�(6=.g=g. .....................................................................................................................88

HASZNOS LINKEK ...................................................................................................................................88

0DJ\DU�Q\HOY&�ROGDODN .....................................................................................................................89

$QJRO�Q\HOY&�ROGDODN ........................................................................................................................89

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

4/89

$PLW�D�MHJ\]HWU�O�WXGQL�NHOO.HGYHV�2OYDVyP��$�NH]pEHQ�WDUWRWW���YDJ\�LQNiEE�D�NpSHUQ\�MpQ�OiWKDWy���MHJ\]HW

KiURP�I��UpV]E�O�iOO��$]�HOV��UpV]pEHQ�U|YLGHQ�|VV]HIRJODORP�PLQGD]W��DPLW�V]HUYHUoldali programozás néven oktatunk, kiemelve az architektúrális sajátosságokat és a

szerver-kliens közötti kommunikáció problémakörét. A második részben ennek a téma-

N|UQHN�D]�HJ\LN���pV�WDOiQ�D�OHJGLQDPLNXVDEEDQ�IHMO�G��HV]N|]pW��D�3+3�SURJUDPR]iVLnyelvet ismertetem dióhéjban. A harmadik rész a tantárgy oktatási keretének megfelel�-

HQ�HOV�VRUEDQ�J\DNRUODWL�LVPHUHWHN�DG��NRQNUpW�ZHEHV�SpOGiNRQ�NHUHV]W�O�LVPHUWHWHP�DQ\HOY�DONDOPD]iVDLW��(]�D�SpOGDJ\&MWHPpQ\�LV�IRO\DPDWRVDQ�IHMO�GLN��WHUYHLP�V]HULQW�D]RNWDWiV�VRUiQ�IHOPHU�O��|WOHWHN��PHJROGiVRN�LV�IRNR]DWRVDQ�EHOHNHU�OQHN��tJ\�UHPpOHP�KRJ\�LG�YHO�HJ\�PLQGHQNL�V]iPiUD�MyO�KDV]QiOKDWy��JD]GDJ�DONDOPD]iVL�PLQWDNpV]OHWhalmozódik majd fel.

ÏULiVL�DQ\DJUpV]�D�V]HUYHU�ROGDOL�SURJUDPR]iV��PHUW�D�J\RUVDQ�IHMO�G��ZHEHVWHFKQLNiN���DNiU�D]�HJ\V]HU&�LVPHUHWQ\~MWiV��DNiU�D�FVRSRUWPXQND�V]LQWMpQ���PHJN|Ye-

telik a változatos eszköztár létrehozását. Ugyanakkor szeretném bemutatni, hogy mint

PLQGHQ�DONDOPD]iV�IHMOHV]WpV�HVHWpEHQ�D�JRQGRONRGiV�HOVDMiWtWiVD�D]�HOV�GOHJHV��PHUW�D]HJ\HV�PHJYDOyVtWiVL�PyGRN�V]iPRV�IRUUiVEyO�KR]]iIpUKHW�N��(]pUW�NpUHP�D]�ROYDVyW�hogy az elvi megoldásra koncentráljon és ne a konkrét megvalósításokra. Nem kell a

I�JJYpQ\N|Q\YWiUDNDW�NtY�OU�O�LVPHUQL��HOpJ��KD�NL�WXGMXN�NHUHVQL�D�PHJIHOHO��I�Jg-

vényt, metódust.

$�MHJ\]HWEHQ�W|UHNHGWHP�D�OHJNRUV]HU&EE��GH�PiU�QHP�NtVpUOHWL��EpWD��VWiGLXPEDQOHY��IHMOHV]W�HV]N|]|NHW�LVPHUWHWQL��GH�PLYHO�D�SURJUDPR]iVQDN�HJ\�YDOyEDQ�V]pG�OHWHVWHPSyEDQ�IHMO�G��V]HOHWpW�WiUJ\DOMXN��D]�LQIRUPiFLy�QDJ\�YDOyV]tQ&VpJJHO�D�OHtUiVVDOegyütt el is avul /��(UUH�My�SpOGD��KRJ\�D�MHJ\]HW�HOV��Q\HUV�YiOWR]DWiQDN�HONpV]�OWH�yWD(2003. október-november) megjelent a PHP nyelv 5 verziója, amely alapjaiban változ-

tatja majd meg a PHP nyelven végzett programozást. Ez még jelenleg csak béta válto-

]DWEDQ�NHU�OW�NL��D�VWDELO�NLDGiV�HJ\HQO�UH�YiUDW�PDJiUD��EiU�D�WDQpY�YpJpUH�YiUKDWyDQ�D]is megjelenik, így a jegyzet átdolgozására máris fel kell készülni. Ennek ellenére jó ki-

indulópontot adhat ezekhez a technológiákhoz, de nyomatékosan felhívom a figyelmet

az internet használatára - ami persze együtt jár az angol nyelvismeret szükségességével.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

5/89

$�IHQWLHN�PLDWW�KLYDWNR]iVNpQW�OHKHW�OHJ�D]RNDW�D�ZHEKHO\HNHW�DGRP�PHJ��DPe-

lyek az egyes technikák hosszú távon is érvényes forrásai találhatók meg és kiindulási

pontot biztosíthatnak az egyéb webes források felé.

-DYDVODWRN�D�MHJ\]HW�KDV]QiODWiKR]��HO�LVPHUHWHN1HP�HJ\�WHOMHV��D�3+3�SURJUDPR]iVL�Q\HOYHW�D]�DODSMDLWyO�LVPHUWHW��MHJ\]HW�HONé-

szítésére vállalkoztam. Ezt a feladatot mások már elvégezték, magyar nyelven is szám-

WDODQ�My�Np]LN|Q\Y�NDSKDWy��&pORP�D�PLQWiN�DODSMiQ�W|UWpQ��WDQtWiV��D]D]�D]�HOPpOHWLösszefoglaló után a gyakorlati webes megoldásokra helyezem a hangsúlyt és konkrét

alkalmazási példákon keresztül mutatom be a PHP nyelv használatát, annak speciális

OHKHW�VpJHLW�NLHPHOYH��9pOHPpQ\HP�V]HULQW�QHP�HJ\�HJ\�HV]N|]E�O���DGRWW�HVHWEHQSURJUDPQ\HOYE�O���NHOO�PLQGHQW��NLIDFVDUQL���H]pUW�NHU�OW�EHOH�D�IRQWRVDEE�V]HUYHU�ROGDOLtechnikák ismertetése is, hogy az olvasó elhelyezhesse ezt az eszközt a webes alkalma-

zások fegyvertárában.

Kezdetnek javaslom az amúgy is olvasmányosnak szánt elméleti rész átnézését,

elolvasását, hogy helyre tudjuk tenni a dolgokat és felfrissítsük webes, hálózati ismere-

WHLQNHW��3UyEiOMXN�PHJ�iWJRQGROQL�PLQGD]RQ�HO�Q\|NHW�pV�QHKp]VpJHNHW��NRUOiWRNDW�amit egy kliens-szerver architektúra hoz magával.

Ajánlatos felfrissíteni programozási ismereteinket is, mert sem a strukturált prog-

ramozás alapjait, sem az objektumorientált programozás elveit nem fogom részleteiben

ismertetni, csupán utalok rá, mint ismertnek feltételezett fogalmakra.

Hasonlóképpen javaslom az adatbázis-kezelési ismeretek megújítását is. A dina-

mikus webes alkalmazások létrehozását az adatok, dokumentumok perzisztens tárolása

WHV]L�OHKHW�Yp���MHOHQW�V�PpUWpNEHQ�D]�HOV�VRUEDQ�ZHEHV�HV]N|]|NK|]�NLIHMOHV]WHWW��HJy-

V]HU&HQ�KDV]QiOKDWy�DGDWEi]LV�UHQGV]HUHN�OpWUHM|WWH�DGWD�D�G|QW��O|NpVW�D�GLQDPLNXV�Dl-NDOPD]iVRN�XJUiVV]HU&�HOWHUMHGpVpKH]��$�J\DNRUODWL�DONDOPD]iVRN�VRUiQ�D]�HJ\V]HU&lekérdezések, rekordbeszúrások, adatmódosítások, néhány táblás adatbázisok létrehozá-

VD�UXWLQV]HU&�OpSpVHN�OHV]QHN�Javasolom az internet alapos és kriti kai tanulmányozását! Szeretném, ha a hall -

JDWyN�NHOO��NtYiQFVLViJJDO�iOOQiQDN�KR]]i�HKKH]�D]�HOV�VRUEDQ�J\DNRUODWL�LVPHUHWHNHWnyújtó tantárgyhoz és arra próbálnának a tantárgy keretén belül választ találni, hogy az

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

6/89

LQWHUQHWHQ�J\DNUDQ�HO�IRUGXOy�PHJROGiVRN�KRJ\DQ�KR]KDWyN�OpWUH��pV�H]HNHQ�EHO�O�KROalkalmazhatók az itt elsajátítható ismeretek!

,VPHUWQHN�WpWHOH]HP�IHO�D�+70/��-DYD6FULSW�DODSYHW��LVPHUHWpW��HUUH�QHP�IRJRNkitérni a jegyzetben, de akik eddig csak HTML formátumba mentéseket csináltak, azok

számára melegen javasolom a HTML szintaktika átnézését.

$�J\DNRUODWL�SUREOpPiN�PHJROGiViW�FVDN�V]iPtWyJpS�HO�WW�pUGHPHV�YpJH]QL��(]pUWV]HGWHP�|VV]H�D�NpV�EE�LVPHUWHWpVUH�NHU�O��V]RIWYHU�HV]N|]|NHW�LV��KRJ\�EiUNL�|VV]HWXGMRQ�UDNQL�PDJiQDN�HJ\�IHMOHV]W��N|UQ\H]HWHW�pV�RWWKRQ�LV�IHMOHV]WKHVVHQ�HJ\V]HU&EEvagy bonyolultabb alkalmazásokat. Ne nézzük le ezt a környezetet, bár kétségtelen,

KRJ\�HJ\�LJD]L�ZHEV]HUYHU�HJ\HV�HVHWHNEHQ�PiVNpQW�P&N|GLN��D]�tJ\�IHMOHV]WHWW�DQ\a-

gokat minden további nélkül át lehet tenni egy valódi szerverre, jól elrendezett alkalma-

zás esetén csupán a beállításokat, konfigurációs fájlokat kell átírni a környezetnek meg-

feOHO�HQ�A tanuláshoz sok sikert kívánok és minden észrevételt, javaslatot szívesen veszek

a tantárggyal, jegyzettel kapcsolatban - munkámban sokat segítenek az olyan gyakran

IHOPHU�O��NpUGpVHN�LV��PLQW�SpOGiXO��(]W�D�NRQNUpW�SUREOpPiW�KRJ\DQ�OHKHW�PHJROGDQL"

Bevezetés

A számítógépeken alapuló informatika hajnalán már felmerült, hogy az egyes

GUiJD��iP�QDJ\�WHOMHVtW�NpSHVVpJ&�V]iPtWyJpSHN�VRN�NLVHEE�WHOMHVtWPpQ\&�JpSHW�NL�WXd-

nak szolgálni információval, futtatható programokkal. Ezt az elvet gyorsan belátták és

hamar alkalmazásra került, így a szerver-kliens közötti munkamegosztás fogalma na-

gyon hamar bekerült a köztudatba. Az egyes számítógépek teljesítményének megnöve-

NHGpVpYHO�NpV�EE�D�V]HUYHUHN�MHOHQW�VpJH�NLVHEE�OHWW��iP�LVPpW�Q|YHNHGpVQHN�LQGXOW�Dszámítógépek közötti kommunikáció elterjedésével és általánossá válásával párhuzamo-

VDQ��1DSMDLQNEDQ�D�V]HUYHUNpQW��]HPHO��V]iPtWyJpSHN�I��IHODGDWD�D]�LQIRUPiFLy�V]Rl-JiOWDWiV��DNiU�HJ\V]HU&�V]|YHJHV�pV�NpSL�IRUPiEDQ��ZHEHV�DONDOPD]iVRN���DNiU�SHGLJstrukturált adatok formájában (adatbázis szerverek). Ez a két forma természetesen keve-

UHGKHW�LV��QDJ\RQ�VRNV]RU�HO�IRUGXO��KRJ\�D�GRNXPHQWXP�MHOOHJ&�LQIRUPiFLyNED�NLVHEE�nagyobb mértékben adatbázisokból nyert információt ágyazunk bele. Szerverek intézik

még az ember-ember közötti kommunikáció elosztását is, ezek az egyes szolgáltatók

által üzemeltetett e-mail szerverek. A jegyzetben a dinamikus webes alkalmazások által

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

7/89

biztosított információ szolgáltatás eszközeit ismertetjük, a hangsúlyt a szerver oldalon

megvalósítható alkalmazásokra helyezve. A technika azonossága miatt nem csak a

:RUOG�:LGH�:HE�NHUHWHLQ�EHO�O�NpS]HOKHW��HO�D�NLIHMOHV]WHWW�DONDOPD]iV��KDQHP�KHO\LKiOy]DWRNRQ�pV�HJ\HGL�JpSHNHQ�LV��]HPHOWHWKHW���EiU�QHP�H]HN�YROWDN�D�PHJFpO]RWW�We-

rületek a jegyzet írása során.

Kli ens - szerver architektúra

$�QDJ\N|]|QVpJ�V]iPiUD�KR]]iIpUKHW��LQIRUPiFLy�G|QW��W|EEVpJpW�PD�D]�LQWHUQHWszolgáltatja. A fogalom mögött egy többszörösen - redundáns módon - összekapcsolt

YLOiJPpUHW&�V]iPtWyJpS�KiOy]DW�iOO��HQQHN�FVRPySRQWMDLW�DONRWMiN�D]�HJ\HV�WDUWDORm-

szolgáltató szerverek és az ezek azonosítását szolgáló névszerverek. A tartalomszolgál-

tató számítógépek ill etve a rajtuk futó szerver funkciót ellátó alkalmazások a kliens gé-

SHNW�O�EHpUNH]��NpUpVHN�DODSMiQ�D�+7731 protokoll szerint fájl l ekéréseket hajtanak vég-

re és ezeket a fájlokat az egyes kliens számítógépeken futó alkalmazások, a böngész�-

programok értelmezik. Amennyiben szükséges, a tartalomszolgáltató szerverek adatbá-

zis szerverekhez is fordulhatnak a kért információért. Az információ hagyományos do-

NXPHQWXP�MHOOHJH�YLV]RQW�QHP�WHUHPWL�PHJ�D�OHKHW�VpJHW�J\RUVDQ�YiOWR]y��GLQDPLNXVDGDWRN�EHLOOHV]WpVpUH�pV�tJ\�PiU�W|EE�pYH��H[SRQHQFLiOLVDQ�IHMO�GYH�Q��D]RQ�DONDOPD]á-

VRN�V]iPD��DPHO\HN�D�EHpUNH]��+773�NpUpVHNUH�YiODV]XO�QHP�VWDWLNXV��KDQHP�D�NpUpVUH|VV]HiOOtWRWW�GRNXPHQWXPRW�N�OGHQHN�HO�D�E|QJpV]�SURJUDPQDN��7HUPpV]HWHVHQ�HEEHQ�Ddinamikusan összeállított dokumentumban már helyet kaphatnak adatbázisokban tárolt

YDJ\�V]iPtWRWW�DGDWRN�LV��(QQHN�PHJIHOHO�HQ�EHV]pO�QN�PD�NpWUpWHJ&��WZR�WLHU��pV�Ká-

URPUpWHJ&��WKUHH�WLHU��DONDOPD]iVRNUyO2��DKRO�D�NpWUpWHJ&�DONDOPD]iV�DODWW�pUWM�N�D�NpWRl-GDO~�NOLHQV�V]HUYHU�WtSXV~�DONDOPD]iVW�pV�KiURPUpWHJ&�DONDOPD]iVQDN�QHYH]]�N�D]W�ahol egy harmadik szolgáltató, egy adatbázis szerver is bekapcsolódik az információ

HO�illításába.

1 HTTP - hypertext transfer protocol; a hipertextes alkalmazások átviteli protokoll ja2 A jegyzetben a többé-kevésbé meghonosodott réteg elnevezést használom, bár ez nem fedi teljesen az

eredeti angol szakkifejezést. Nagyon fontos megjegyezni, hogy ez a réteg elnevezés semmiféle kapcsolat-

ban nincs az OSI rétegmodell elemeivel, nincs egymásra épülés, inkább azt kívánja kifejezni, hogy több,

HJ\PiVWyO�I�JJHWOHQ��VSHFLiOLV�IHODGDWRNDW�HOOiWy�UHQGV]HU�HJ\�WWP&N|GpVpQ�DODSXOy�DONDOPD]iVUyO�EHV]é-

lünk.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

8/89

1. ábra.�$]�HOV��UpWHJHW�NpSH]L�D�PHJMHOHQtWpV��D]�LQWHUQHWWHO�PLQW�V]iOOtWy�N|]Hg-

JHO�pV�D�E|QJpV]�YHO��PLQW�D�UHQGHUHOpV�HV]N|]pYHO��$�PiVRGLN�UpWHJ�D]��]OHWL�ORJLND��H]tartalmazza szerver oldali szkriptjeinket és a harmadik réteg az adattárolás eszköze, a

megIHOHO�HQ�YiODV]WRWW�DGDWEi]LV�7HUPpV]HWHVHQ�H]�FVDN�HOYL�PHJN|]HOtWpV��D]�HJ\HV�V]HUYHUIXQNFLyW�EHW|OW��pV�NOi-

HQV�SURJUDPRN�V]pOV��HVHWEHQ�D]RQRV�IL]LNDL�HJ\VpJHQ�LV�IXWKDWQDN���SpOGiXO�HJ\�IHj-OHV]W�UHQGV]HU�YDJ\�RNWDWyUHQGV]HU�HVHWpEHQ���pV�IXWWDWKDWyN�HJ\PiVWyO�WiYRO�HV��I|Od-

UDM]L�KHO\HNHQ�LV��$]�HJ\PiVWyO�WiYRO�HOKHO\H]NHG��HJ\VpJHN�N|]|WWL�NRPPXQLNiFLyWebben az esetben biztosíthatja az Internet fizikai hálózata vagy kisebb távolságok esetén

helyi hálózatok is (intranetes alkalmazások egy-egy intézményen belül, LAN3). A fel-

KDV]QiOyN�pV�D�IHMOHV]W�N�V]HPSRQWMiEyO�H]�J\DNRUODWLODJ�PLQGHJ\��DPHQQ\LEHQ�D�NRm-

3 LAN Local Area Network; helyi hálózat

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

9/89

munikáció a TCP/IP4�SURWRNROO�pV�D]�HUUH�pS�O��+773�SURWRNROO�DODSMiQ�W|UWpQLN��D]LQIRUPiFLyW�V]ROJiOWDWy�DONDOPD]iV�P&N|GpVL�HOYH�PLQGHQ�HVHWEHQ�D]RQRV�OHV]�pV�D]DONDOPD]iV�D�KiOy]DW�JHRPHWULiMiWyO�pV�NLWHUMHGpVpW�O�I�JJHWOenül létrehozható.

$�NOLHQV�JpSHQ�IXWy�E|QJpV]�SURJUDPEyO�LQGtWRWW�NpUpVHNUH�YiODV]XO�OHN�OG|WW�Go-

kumentumok feldolgozásához csupán a dokumentumok leíró nyelvét, a HTML5 nyelvet

NHOO�D�E|QJpV]�QHN�pUWHOPH]QL�pV�HQQHN�PHJIHOHO�HQ�PHJMHOHQWHWQL�D�GRNXPHQWXPRW�DNOLHQV�JpS�NpSHUQ\�MpQ��1HP�LJpQ\HO�N�O|Q|VHEE�PDJ\DUi]DWRW��KRJ\�HJ\��D�GRNXPHn-

WXP�V]HUNH]HWpW��N�OV��PHJMHOHQpVpW�OHtUy�Q\HOY�QHP�DONDOPDV�DUUD��KRJ\�YiOWR]y�WDUWDl-PDW�KRUGR]]RQ�pV�MHOHQtWVHQ�PHJ��YDODPLQW�OHKHW�Yp�WHJ\H�D�IHOKDV]QiOy�iOWDO�EHYLWWadatok manipulálását. Erre azonban kétségtelenül szükség van és így adatbeviteli funk-

FLyW�PiU�D�+70/�Q\HOY�NRUDL�YiOWR]DWDLED�LV�EHpStWHWWHN��H]]HO�OHKHW�Yp�WpYH�D�IHOKDVz-

QiOyL�DGDWRN�EHYLWHOpW�D�E|QJpV]�SURJUDP�VHJtWVpJpYHO��(]�D]�HV]N|]�D�+70/�&UODS�IRUP��REMHNWXPD�pV�DQQDN�J\HUPHNREMHNWXPDL��D]�HJ\HV�VSHFLDOL]iOW�EHYLWHOL�PH]�N�DPHO\HN�iOODQGy�IHMO�GpVEHQ�YDQQDN�D�E|QJpV]�SURJUDPRNNDO�HJ\�WW��KLV]HQ�H]HNmegjelenítését a bönJpV]��YpJ]L�

+D�MyO�PHJILJ\HOM�N��HJ\�HOV��UiQp]pVUH�PHJOHKHW�VHQ�ERQ\ROXOW�pV�EL]RQ\WDODQP&N|GpV&�UHQGV]HU�iOO�WHKiW�D�UHQGHONH]pV�QNUH��9DQ�HEEHQ�D�UHQGV]HUEHQ�HJ\�YDJ\W|EE�V]HUYHU��DPHO\�HN��GRNXPHQWXPRNDW�WXGQDN�V]ROJiOWDWQL��(]HN�WHWV]�OHJHV�UHQd-

V]HUEH�|VV]HI&]KHW�HN�D�KLSHUWH[W�HOHPHN�VHJtWVpJpYHO��D�NOLHQV�JpSHQ�PHJMHOHQtWHQG�GRNXPHQWXP�HJ\HV�HOHPHL�W|EE�V]HUYHUU�O�LV�V]iUPD]KDWQDN��$�+70/�iOWDO�EL]WRVtWRWWnavigáció segítségével tetszés szerinti számú szervert járhatunk be, de nem tudjuk elle-

Q�UL]QL��KRJ\�D�NtYiQW�LQIRUPiFLy�D�OHNpUpV�LG�SRQWMiEDQ�UHQGHONH]pVUH�iOO�H��%iU�OHKe-

W�VpJ�QN�YDQ�V]LQWH�EiUPLO\HQ�LQIRUPiFLy��QXPHULNXV�pV�V]|YHJHV�DGDWRN��NpS���V]|YHJ���PXOWLPpGLD�IiMORN��IHOYLWHOpUH�D]�HJ\HV�V]HUYHUHNUH�D�NOLHQV�JpSHQ�IXWy�E|QJpV]�SURg-

UDPRN�VHJtWVpJpYHO��H]�D]�LQIRUPiFLy�QHP�pUKHW��HO�N|]YHWOHQ�O��D]�DGDWRN�IHOGROJR]iVDa dokumentum-kezelés szintjén nem valósítható meg. Bár fontos és kényelmes lenne a

fogadó oldal, a kliens számítógép képességeinek ismerete, azok fel- és kihasználása, ez

EL]WRQViJL�RNRNEyO�QHP��YDJ\�FVDN�HU�VHQ�NRUOiWR]RWWDQ�YDOyVtWKDWy�PHJ���HJ\�V]HUYHUne kezelhesse a kliens számítógépet, ne kezeljen fájlokat, ne indíthasson programokat

4 TCP/IP Transmission Control Protocol/Internet Protocol; az Internet rendszerében alkalmazott csomag-

küldésen és -fogadáson alapuló átviteli protokoll .5 HTML HyperText Markup Language; hipertext leíró nyelv.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

10/89

UDMWD��0LQGHQ�DGDWiWDGiV��NRPPXQLNiFLy�V]�NVpJV]HU&HQ�NpW�YDJ\�W|EE�V]iPtWyJpS�Nö-

]|WW�]DMOLN��DPHO\HNHW�HQQHN�PHJIHOHO�HQ�NHOO�YpGHQL�pV�D]�DGDWRNDW�LV�HOOHQ�UL]QL�NHOO��$EL]WRQViJL�HOYHNQHN�PHJIHOHO�HQ�FVDN�D�NOLHQV�JpS�LQGtWKDVVRQ�GRNXPHQWXP�OHNpUpVHNHW- HTTP lekérések - ezeket a szerver szolgálja ki, de regisztráljon minden kérést. Kínál-

MRQ�IHO�V]LQWH�PLQGHQ�NpQ\HOPL�OHKHW�VpJHW�D�OHKHW��OHJPDJDVDEE�V]LQW&�NLV]ROJiOiV�pr-GHNpEHQ��GH�DNNRU�LV�PHJIHOHO��OHJ\HQ�D��WiODOiV���KD�D�NOLHQV�ROGDORQ�QHP�iOO�UHQGHONe-

zésre az ideálisnak tekintett háttér. Fontos az is, hogy a gyorsabb "ügyintézés" érdeké-

EHQ�D�OHKHW��OHJW|EE��J\RUV�UHDJiOiVW�LJpQ\O��YiODV]W�pV�OHKHW�VpJHW�D�NOLHQV�ROGDORQ�Ne-

]HOM�QN�OH��V]iPROYD�D�JpSHN�N|]|WWL�NRPPXQLNiFLy�V]&N�NHUHV]WPHWV]HWpYHO��SpOGiXOmodemes kapcsolat).

Amire tekintettel kell l enni alkalmazás-fej lesztés során

)HQWLHN�WHOMHV�N|U&�PHJYDOyVtWiVD�HJ\�KiURPUpWHJ&�ZHEHV�DONDOPD]iV�NHUHWHL�Nö-

]|WW�QHP�HJ\V]HU&�GRORJ��pV�EL]WRV��KRJ\�W|EE�N�O|QE|]���VSHFLDOL]iOW�HV]N|]�P&N|GpVpWkell összehangolnunk a jó eredmény érdekében. Nézzük meg tehát, hogy mi mindenre

kell figyelmet fordítani egy tipikus webes alkalmazás elkészítése során.

♦ $�IHOKDV]QiOy�ROGDOiQ�RO\DQ�E|QJpV]��SURJUDPRN�iOOQDN�UHQGHONH]pVUH��DPe-

O\HN�WtSXVD�pV�HEE�O�DGyGyDQ�NpSHVVpJHLN�V]pOHV�VNiOiQ�YiOWR]QDN��H]pUW�J\a-

NRUODWLODJ�OHKHWHWOHQ�PLQGHQ�HVKHW�VpJUH�IHONpV]tWHQL�D]�DONDOPD]iVXQNDW��OiVGMicrosoft Explorer, Netscape Navigator, Mozill a, Opera és mások, valamint

H]HN�J\DNUDEEDQ�HO�IRUGXOy�YHU]LyL��D]�,(�����WyO�pV�D]�11������WyO�NH]GYH�D����pV�����YHU]LyNLJ�NE������N�O|QE|]��HV]N|]��QHP�EHV]pOYH�D�YDNRN�iOWDOKDV]QiOKDWy�VSHFLiOLV�E|QJpV]�SURJUDPRkról).

♦ 6]iPRV�HVHWEHQ�D�NLHJpV]tW��LQIRUPiFLy�KRUGR]yN�PHJIHOHO��PHJMHOHQtWpVpKH]N�O|QE|]��OHMiWV]y�pV�NLHJpV]tW���SOXJLQ��SURJUDPRNUD�YDQ�V]�NVpJ��)ODVK�mozgókép, hang, stb.), ezek hozzáférését illi k megadni.

♦ A felhasználó egyéni meglátásai és indítékai alapján ki- ill etve bekapcsolhat

NOLHQV�ROGDOL�HV]N|]|NHW��-DYD6FULSW��FRRNLHV�pV�N�O|QE|]��-DYD�pUWHOPH]�N��Ezek alkalmazását vagy kerülni kell , vagy az alkalmazásunk feltételeként meg

kell adni - és persze a feltétel nem teljesülését is le kell kezelni.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

11/89

♦ $�IHOKDV]QiOy�ROGDOiUyO�D]�DGDWEHYLWHOW�HOOHQ�UL]QL�NHOO�pV�H]W�IHOKDV]QiOyEDUiWPyGRQ�NHOO�HOYpJH]QL��UpV]EHQ�NRUOiWR]YD�D�EHYLKHW��DGDWRNDW��OHJ|UG�O��OLs-WiN��UpV]EHQ�NOLHQV�ROGDORQ�HOOHQ�UL]YH��HQQHN�HV]N|]HL�YLV]RQW�NLNDSFVROKa-

WyN��OiVG�-DYD6FULSW��pV�D�V]HUYHU�ROGDORQ�IHOWpWOHQ�O�~MUD�HOOHQ�UL]QL�NHOO��We-

kintettel a kliens oldal manipulálhatóságára. Nem szabad elfelejteni, hogy a

NOLHQV�ROGDORQ�HJ\�&UODS��IRUP��WHWV]pV�V]HULQW�PHJYiOWR]WDWKDWy�D�NyG�~MUDtUá-

sával.

♦ A webes alkalmazáshoz nincs kidolgozott súgórendszer, tehát a felhasználó

informálását és támogatását a web szövetébe kell ágyazni, a navigálás kiala-

NtWiViQiO�HJ\pUWHOP&VpJUH�NHOO�W|UHNHGQL�♦ A felhasználókat azonosítani is kell és esetenként személyre/kategóriára sza-

bott megjelenítést kell biztosítani - ehhez a belépéseket és a navigálást regiszt-

rálni, követni kell szerver oldali eszközökkel.

♦ $�ZHEHV�DONDOPD]iVRNQDN�DQQ\L�EHOpSpVL�SRQWMD�OHKHW��DKiQ\�N�O|QE|]��85/6

létezik az adott webhelyen belül. Ezek mindegyikét figyelni, kezelni kell . En-

QHN�PHJIHOHO�HQ�WHUPpV]HWHVHQ�D�NLOpSpVL�OHKHW�VpJHN�V]iPD�LV�QDJ\��PLQGHQegyes oldal lefutásakor gondoskodni kell például a fájlok, adatbázisok zárásá-

ról.

♦ $�E|QJpV]�N��D]�D]RNDW�IXWWDWy�RSHUiFLyV�UHQGV]HUHN�DODSpUWHOPH]HWWHQ�U|YLGés hosszú távon tárolják a meglátogatott weboldalak URL címeit és navigációs

HV]N|]|NHW�EL]WRVtWDQDN��HO�UH�pV�YLVV]D�JRPERN��KLVWRU\���(]HNHW�V]LQWpQ�Ii-gyelembe kell venni, védett oldalak esetében kezelni kell a tárolt adatok alap-

ján megkísérelt belépéseket.

♦ $�NOLHQVUH�OHN�OG|WW�+70/�NyG�pV�IiMORN�SXEOLNXVQDN�WHNLQWHQG�N��6HP�NpS�VHP�NyG�QLQFV�EL]WRQViJEDQ��H]HNEHQ�NpQ\HV�LQIRUPiFLy�QHP�KHO\H]KHW��HO�MHOV]y��D]RQRVtWy��UHMWHWW�PH]�N��-DYD6FULSW�NyG���$]�LG�QNpW�D�ZHEHV�IyUXPo-

NRQ�IHOUHSSHQ��KLHGHOPHNNHO�V]HPEHQ�QLQFV�OHKHW�VpJ�NpSHN��IiMORN�YpGHOPé-

6 URL Uniform/Universal Resource Locator, az egységes forrás azonosító, az Internetes források

�ZHEODSRN��HJ\HGL�FtPH��ÒMDEEDQ�KHO\HWWH�HO�V]HUHWHWWHO�KDV]QiOMiN�D]�iOWDOiQRVDEE�pUWHOPH]pV&�85,�W��D]Universal Resource Identifier elnevezést, a napjainkban leggyakrabban használt URI az URL.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

12/89

re, maximum a laikus felhasználó dolgát lehet kismértékben megnehezíteni,

de a jó öreg Print Screen ellen semmi sem véd meg…

♦ A kliens - webszerver közötti kommunikáció lassú és megbízhatatlan, és

amennyiben az adatbázis szerver külön gépen, külön URL címen helyezkedik

el, az adatbázis - webszerver közötti kommunikációra is ugyanez áll . Ezért

PLQGLJ�ILJ\HOHPEH�NHOO�YHQQL�D�KiOy]DW�WHOMHVtW�NpSHVVpJpW��PRGHPHV�NDSFVo-

ODW�HVHWpQ�QHP�WHUYH]KHWM�N�QDJ\PHQQ\LVpJ&�LQIRUPiFLy�J\RUV�OHN�OGpVpW�Ugyanakkor mindig számolni kell a webszerver és az adatbázis szerver id�-

V]DNRV�HOpUpVL�QHKp]VpJHLYHO��/HKHW�OHJ�LO\HQNRU�QH�D]�HV]N|]|N�EHpStWHWW�Ki-ED�]HQHWHL�NHU�OMHQHN�HO���KDQHP�D�IHOKDV]QiOókat informáló hibajelentések.

$PHQQ\LEHQ�D]�DONDOPD]iV�I�OHJ�GLQDPLNXVDQ�YiOWR]y�DGDWRNNDO�GROJR]LN��pV�D]HPEHU�GRNXPHQWXP�V]HUNHV]W��WHYpNHQ\VpJpW�D�PLQLPiOLVDQ�V]�NVpJHV�PpUWpNUH�DNDr-juk visszaszorítani, ezeket az alapelveket fokozott mértékben kell betartani. Nyilvánva-

Oy��KRJ\�VWDWLNXV�DGDWRN�HVHWpEHQ�W|EE�OHKHW�VpJ�YDQ�D]RN�PHJIHOHO��pV�VSHFLiOLV��WiODOá-

sára" míg dinamikus adatok esetében nehéz az általánosan alkalmazható keretrendszer

NLDODNtWiVD��(]HN�HJ\HQV~O\iWyO�I�JJ�D]�DONDOPD]iV�PLQ�VpJH��$]�DOiEELDNEDQ�HJ\J\RUV�iWWHNLQWpVW�DGXQN�D]�HJ\HV�HV]N|]|NU�O��D]RN�V]HUHSpU�O�pV�KHO\pU�O�D�NRPSOH[webes alkalmazások fejlesztésben.

JavaScript, VBScript - az " egyetlen" kliens oldali eszköz

+D�HJ\HWOHQ��DNNRU�PLpUW�NHWW�"�PHU�OKHW�IHO�D�MRJRV�NpUGpV��D�YiODV]�SHGLJ�HJy-

V]HU&HQ�DQQ\L��KRJ\�D�NpW�V]NULSWQ\HOY�XJ\DQD]W�D�IHODGDWRW�OiWMD�HO��iP�D�-DYD6FULSWQpSV]HU&VpJH��LVPHUWVpJH�MyYDO�QDJ\REE���N|U�OEHO�O������DUiQ\EDQ�WDOiOXQN�D�ZHEHQJavaScript-tel foglalkozó oldalakat a VBScript oldalakkal szemben. Mindkét nyelv ter-

mészetesen megfelel céljainak, nem kívánok egyik mellett sem állást foglalni, ez éppen

olyan értelmetlen lenne, mint a legjobb programnyelv meghatározása. Míg a JavaScript

HJ\�&�Q\HOY�WtSXV~�REMHNWXP�DODS~�Q\HOY��D�9%6FULSW�QHYpQHN�PHJIHOHO�HQ�D�%DVLFQ\HOYFVDOiG�WDJMD��tJ\�D]�HJ\HV�VWUXNWXUiOLV�HOHPHNHW�HQQHN�PHJIHOHO�HQ�MHOHQtWL�PHJ�(O�UHERFViWRP��KRJ\�D�-DYD6FULSW�Q\HOYQHN�VHPPL�N|]H�D�-DYD�Q\HOYKH]��FVXSiQ�D]�V�N��D�&�Q\HOY�D]RQRV�pV�D�ORJLNXV�IHMO�GpV�KR]]D�H]HNHW�N|]HO�HJ\PiVKR]��0LYHO�DWDQWiUJ\�NHUHWpEHQ�I��Q\HOYNpQW�HJ\�PiVLN�&�WtSXV~�Q\HOY��D�3+3�RNWDWiViUD�NHU�O�VRU�ezért fontosabbnak tartom a JavaScript ismertetését a szükséges minimális mértékben,

hogy az elkerülhetetlen esetekben alkalmazása ne okozzon problémát.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

13/89

Természetesen a JavaScript nem szerver oldali eszköz, bár vannak próbálkozások

a nyelv kiterjesztésére szerveren futó alkalmazásokra is. Bár ez az egyetlen interaktív

HV]N|]��DPL�D�NOLHQV�ROGDORQ�IXWWDWKDWy��QHP�WHNLQWKHW��WHOMHV�SURJUDPR]iVL�Q\HOYQHN�EL]WRQViJL�RNRNEyO�WHOMHVHQ�KLiQ\]LN�EHO�OH�D�IiMONH]HOpV�PHJYDOyVtWiVD��QHP�ROGKDWyPHJ�ROYDViV��tUiV�P&YHOHW�VHP��8J\DQDNNRU�V]iPWDODQ�DONDOPD]iV�PHJYDOyVtWKDWy�Ve-

JtWVpJpYHO��D]�HJ\V]HU&�HVHPpQ\NH]HOpVHNW�O�D�NRPSOH[�MiWpNSURJUDPRNLJ��-DYD6FULSWVHJtWVpJpYHO�YDOyVtWKDWy�PHJ�D]�|VV]HV�NOLHQV�ROGDOL�LQWHUDNWtY�WDUWDORP��D�N�O|QE|]�PHQ�NW�O�NH]GYH�D]�&UODSRN�HOOHQ�U]pVpLJ���HQQHN�NRUOiWMDLW�PiU�HPOtWHWWHP���pV�D�IHl-KDV]QiOy�YiODV]WiViQDN�PHJIHOHO�HQ�PyGRVXOy�WDUWDOPDNLJ��$�E|QJpV]��GRNXPHQWXP(document) és window objektumait is kezelni tudjuk JavaScript segítségével, de a

webes alkalmazásokban gyakran használt ablaknyitások, egérmozgásra érzékeny tartal-

mak, egérkattintásra reagáló elemek megvalósítása is JavaScript segítségével történhet.

2O\DQ�NRUV]HU&�UHQGV]HUHN��PLQW�SpOGiXO�D]�,%0�:HEVSKHUH�DONDOPD]iVD�LVJavaScript nyelvet használ a kliens oldalon. Kihasználható a szerver és a kliens oldali

SURJUDPQ\HOYHN�pV�D�+70/�V]LQWH�NRUOiWODQ�NHYHUKHW�VpJH��QHP�ULWND�HJ\�RO\DQ�DONDl-mazás, ahol például az adatbázisban tárolt információ alapján egy szerver oldali nyelv

-DYD6FULSW�NyGRW�iOOtW�HO���H]�D�NOLHQVW�O�LQGXOy�NpUpVUH�OHNHU�O�D�IHOKDV]QiOy�JpSpUH�pV�D]RWW�IXWy�E|QJpV]�SURJUDP�D�-DYD6FULSW�iOWDO�HO�iOOtWRWW�+70/�NyGRW�DODSMiQ�MHOHQtWL�PHJD]�LQIRUPiFLyW��$�NOLHQV�ROGDOL�LQWHUDNWLYLWiV�NXOFVD�LV�D]��KRJ\�D�-DYD6FULSW�iOWDO�HO�il-OtWRWW�+70/�NyG�pUWHOPH]KHW��D�E|QJpV]�EHQ��LOOHWYH�D�'207 biztosít olyan elemeket,

amelyek értéke változtatható, így a megjelenített tartalom is változik ezek felülírásával.

(]HQ�DODSV]LN�VRN�HJ\V]HU&EE�YDJ\�ERQ\ROXOWDEE��iP�UHQGNtY�O�KDWiVRV�ZHEHV�DONDOPa-

zás kliens oldali eleme - órák, számológépek, értékszáPtWy�&UODSRN��NRQYHUWHUHN�1HP�KDOOJDWKDWMXN�HO�D]W�VHP��KRJ\�PLYHO�D�-DYD6FULSW�D�E|QJpV]�EHQ�IXW��DQQDN

típusa, változata nagymértékben befolyásolja a JavaScript alkalmazhatóságát. A

-DYD6FULSW�HV�DONDOPD]iVRN�N�O|Q�IHMH]HWpW�DONRWMiN�D�E|QJpV]��GLDJQRV]WLNiN��RO\DQ 7�'20�'RFXPHQW�2EMHFW�0RGHO��GRNXPHQWXP�REMHNWXP�PRGHOO��$]�~MDEE�WtSXV~�E|QJpV]�N�V]iPiUD�D+70/�GRNXPHQWXP�QHP�HJ\V]HU&�V]|YHJHV�iOORPiQ\��KDQHP�HOHPHL���HJ\PiVVDO�IDV]HUNH]HW&�NDSFVo-

ODWEDQ�iOOYD���HJ\�HU�VHQ�KLHUDUFKLNXV�REMHNWXPRW�DONRWQDN��H]HN�FVRPySRQWMDL�KLYDWNR]iVRN�DODSMiQ�N|z-

YHWOHQ�O�LV�HOpUKHW�N��(J\�&UODS��IRUP��SpOGiXO�D�GRNXPHQWXP�J\HUPHNREMHNWXPD��QHYpYHO�KLYDWNR]KDWypV�HOHPHL���D]�HJ\HV�EHYLWHOL�PH]�N���V]LQWpQ�KLHUDUFKLNXVDQ�DOiUHQGHOW�J\HUPHNREMHNWXPRN��ËJ\�Ddocument.form.szovegmezo objektum tulajdonságai változtathatók, a .value értéke változtatható. Hason-

lóképpen hivatkozhatunk egy névvel ellátott anchor tag-re is.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

14/89

SURJUDPRN��DPHO\HN�D�E|QJpV]��HOWpUpVHNHW�LJ\HNH]QHN�ILJ\HOHPEH�YHQQL�pV�D]�HOWpU�E|QJpV]�NEHQ�N|]HO�D]RQRVDQ�P&N|G��NyGRW�WXGQDN�HO�iOOtWDQL��1HP�V]DEDG�DUUyO�VHPPHJIHOHGNH]QL��KRJ\�D]�HJ\HV�E|QJpV]�N�PiVNpQW�pUWHOPH]LN�D�GRNXPHQWXP�REMHNWXPPRGHOOW�LV��H]]HO�IRNR]YD�D�]&U]DYDUW«

A jegyzet célja nem a JavaScript ismertetése, így nem tárgyalhatjuk részletesen a

gyakorlati alkalmazásait. Számos oktatóprogram, könyv áll rendelkezésre és az egyes

ZHEHV�IRUUiVRN�NLPHUtWKHWHWOHQ�WiUKi]DL�D�-DYD6FULSW�HV�DONDOPD]iVRNQDN��0LQW�HU�VHQREMHNWXP�DODS~�Q\HOY��LVPHUHWH�pUWpNHV�VHJtWVpJHW�DG�DONDOPD]iVDLQN�PDJDV�V]LQW&�PHg-

YDOyVtWiViEDQ�GH�PLQLPiOLV�LVPHUHWH�QpON�O�HJ\V]HU&�IHOEXNNDQy�DEODN�Q\LWiVRN�YDJ\egy, az egérmozgatás hatására dinamikusan változó link sem hozható létre. Bár a leg-

W|EE�+70/�IHMOHV]W�HV]N|]�EL]WRVtW�HJ\V]HU&�-DYDVFULSW�DODS~�V]NULSWHNHW�D�UXWLQIHOa-

GDWRN�PHJROGiViUD��SURJUDPR]iVL�WXGiV�QpON�O�H]HN�FVDN�D�IHMOHV]W�HV]N|]�iOWDO�NRUOiWo-

zott körben alkalmazhatóak.

Általában sok problémát okoz, hogy kevesen ismerik jól a JavaScript szintaktikát

és a nyelvbe beépített objektumokat, függvényeket. Az alábbiakban megadok egy

ZHEHV�KLYDWNR]iVW��DPL���PLYHO�D�-DYD6FULSW�NLIHMOHV]W�LQHN�ZHEROGDOiUD�PXWDW���DXWHQWi-NXVQDN�WHNLQWKHW��UHIHUHQFLiNDW�WDUWDOPD]�[http://devedge.netscape.com/central/javascript/]

$]�DQJRO�Q\HOY&�-DYD6FULSW�����UHIHUHQFLD�J\&MWHPpQ\�pV�D�-DYD6FULSW�����Q\HOY�OHtUiVD�Np]LN|Q\Y��OHW|OWKHW��D�N|YHWNH]��PDJ\DURUV]iJL�KRQODSUyO�LV�www.medzi.hu/javascript

A szerver oldali programozás eszközei

Adatforrások

Dinamikus webes alkalmazások készítése nem oldható meg adatok tárolása nél-

N�O��(UUH�HOYLOHJ�NpW�OHKHW�VpJ�QN�YDQ��D]�DGDWRN�WiUROKDWyN�IiMORNEDQ��DNiU�HJ\V]HU&szöveges fájlokban - ebben az esetben az adatok kikeresését le kell programoznunk és a

felvitelüket is meg kell oldani - vagy tárolhatók adatbázisokban - ebben az esetben az

DGDWRN�NLQ\HUpVH�pV�U|J]tWpVH�D]�DGDWEi]LV�PRWRU�IHODGDWD�pV�PLYHO�IHOWpWHOH]KHW�HQ�UHOá-

FLyV�DGDWEi]LVRNDW�IRJXQN�KDV]QiOQL��H]�64/�SDUDQFVRNNDO�HJ\V]HU&HQ�PHJROGKDWy�1DJ\RQ�VRN�HVHWEHQ�H]�D�NHWW��NHYHUHGLN�LV��PHUW�YDQQDN�RO\DQ�DGDWRN��DPHO\HNHW�QHPpUGHPHV�HJ\V]HU&EE�DONDOPD]iVRN�HVHWpEHQ�DGDWEi]LVED�UDNQL��HOpJ�KD�tUKDWy�ROYDVKDWy

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

15/89

fájlban tároljuk. Ilyen lehet egy szimpla látogató számlálás vagy fájlokból olvashatók ki

D]�HJ\HV�OHJ|UG�O��PHQ�N�YiODV]WKDWy�WpWHOHL�LV��PLQW�SpOGiXO�RUV]iJQpY�OLVWiN�YDJ\�Ka-

VRQOy�HJ\V]HU&�OLVWDDGDWRN��7HUPpV]HWHVHQ�PLQGH]�PHJROGKDWy�DGDWEi]LVEyO�LV��GH�VRNesetben az adatbázis hozzáférés korlátozott az egyes internetes szolgáltatóknál és ilyen-

NRU�D�OHKHW�VpJHN�V]DEMiN�PHJ�D]�DONDOPD]iVXQNEDQ�IHOKDV]QiOKDWy�WHU�OHWHNHW��3HUV]HHJ\�NRPRO\DEE�DONDOPD]iV�HVHWpEHQ�QHP�NHU�OKHW��PHJ�D]�DGDWEi]LV�DONDOPD]iVD�Ka-

csak nem akarunk saját adatbá]LV�NH]HO�W�tUQL«Az egyes rendelkezésünkre álló programnyelvek számos adatbázis rendszerrel ké-

SHVHN�HJ\�WWP&N|GQL��tJ\�HUU�O�D]�ROGDOUyO�J\DNRUODWLODJ�QLQFV�NRUOiWR]iV��$]�DGDWEi]LVUHQGV]HU�NLYiODV]WiViQiO�D]RQEDQ�pUGHPHV�QpKiQ\�DODSYHW��V]HPSRQWRW�PHJYL]VJiOQL�

Általában relációs adatbázisokat használunk, de olyan alkalmazás esetében, ahol

FVDN�LJHQ�HJ\V]HU&�DGDWRNDW�NHOO�NH]HOQL��HJ\�DVV]RFLDWtY�NXOFV�pUWpN�SiURNRQ�DODSXOyDGDWEi]LV�W|NpOHWHVHQ�HOHJHQG��OHKHW��(UUH�DONDOPDV�D�3+3�GEDB �I�JJYpQ\FVRPDJMD�H]HN�VHJtWVpJpYHO�NH]HOKHW��V]iPRV�IiMO�DODS~�DGDWEi]LV��0LHO�WW�D]RQEDQ�H]W�D�I�Jg-

YpQ\FVRPDJRW�KDV]QiOQL�NtYiQMXN�D�MHOHQ�IHMOHV]W�N|UQ\H]HWEHQ��D�SKS�LQL�IiMOEDQ(C:/apache/php/php.ini) ki kell venni a megjegyzés (komment) „ ;” jelét a php_dba.dll

NLWHUMHV]WpV���H[WHQVLRQ SKSBGED�GOO��HO�O��KRJ\�D�UHQGV]HU�LQGtWiVDNRU�H]�D�PRGXO�LVregisztrálva legyen.

0LO\HQ�DGDWW|PHJHW�NHOO�NH]HOQ�QN"�*\RUVDQ�YiOWR]y�pV�QDJ\PHQQ\LVpJ&�V]|Ye-

ges adat (például napilap és folyóirat cikkek) kezelése esetében ajánlatos olyan adatbá-

]LV�NH]HO�W�YiODV]WDQL��DPHO\�HJ\V]HU&HQ�pV�J\RUVDQ�NpSHV�NH]HOQL�KRVV]DEE�V]|YHJHNHW�EL]WRVtWMD�D]RN�NHUHVKHW�Végét.

0HNNRUD�D�FpON|]|QVpJ�QN��DNLN�D]�DGDWRNDW�KDV]QiOQL�IRJMiN"�$]D]�LG�HJ\VpJDODWW�PHQQ\L�OHNpUGH]pVW�NHOO�NLV]ROJiOQXQN��(QQHN�PHJIHOHO�HQ�NHOO�MyO�WHUKHOKHW��DGDt-bázis rendszert választani.

Mennyire értékesek az adatok? Természetesen minden adat értékes, de van olyan

HVHW��DPLNRU�QHP�HQJHGKHW��PHJ��KRJ\�HJ\�NRPELQiOW�WUDQ]DNFLyW�QH�OHKHVVHQ�YLVV]a-

görgetni annak hibája, megszakadása esetében - képzeljük el mi történne, ha egy banki

tranzakció végrehajtása során a pénzösszeget az egyik számláról már leemeljük, de mi-

HO�WW�D�PiVLNRQ�MyYitUQiQN��PHJV]DNDG�D�WUDQ]DNFLy�pV�D]�|VV]HJ�HOYpV]���LO\HQ�HVHWEHQFpOV]HU&�RO\DQ�DGDWEi]LV�NH]HO�W�YiODV]WDQL��DPHO\EHQ�D�WUDQ]DNFLy�NH]HOpV�EHpStWHWWfunkció.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

16/89

Milyen bonyolult lekérdezéseket kell végrehajtani? Nem mindegy, hogy relációs

DGDWEi]LV�NH]HO�QN�NpSHV�H�EHOV��VHOHFW�64/�XWDVtWiVRNDW�YpJUHKDMWDQL�YDJ\�WXGMD�H�Ne-

zelni az idegen kulcsokat.

0HO\LN�DGDWEi]LV�NH]HO�UH�YDQ�V]pOHVN|U&�WiPRJDWiV�N�O|QE|]��RSHUiFLyV�UHQd-

szerekben? A webes alkalmazások esetében egy-egy adott esetben természetesen tud-

juk, hogy milyen webszerverre fejlesztünk, de törekedni kell arra, hogy a kész kompo-

QHQVHLQNHW�OHKHW�OHJ�W|EEV]|U�LV�IHO�WXGMXN�KDV]QiOQL��$�NpW�OHJHOWHUMHGWHEE�ZHEV]HUYHUma a Linux/Unix/FreeBSD rendszeren futó Apache (kb. 60% piaci részesedéssel) és a

:LQGRZV������V]HUYHUHQ�IXWy�,,6�UHQGV]HU��NE������SLDFL�UpV]HVHGpVVHO���(]HN�HU�VHQbehatárolják az alkalmazható adatbázis rendszert is.

)HQWLHNHW�ILJ\HOHPEH�YpYH�D�NpW�OHJLQNiEE�DMiQOKDWy�UHOiFLyV�DGDWEi]LV�NH]HO��PDD�0\64/�D�KDJ\RPiQ\RV��N�O|Q|V�EL]WRQViJRW�QHP�LJpQ\O��ZHEHV�DONDOPD]iVRNUD�pV�D3RVWJUH64/�D�QDJ\�EL]WRQViJRW�LJpQ\O��DONDOPD]iVRNUD��(]�XWyEEL�REMHNWXP�UHOiFLyVDGDWEi]LV�NH]HO��Q\HOY��tJ\�VSHFLiOLV�PHJROGiVRNDW���D�WiEOiN�|U|NO�GpVpW���LV�OpWUHKRz-

hatunk a segítségével. Ismertebb rendszer még webes fejlesztésekre az MSSQL, az

,QIRUPL[�YDJ\�D�'%��DGDWEi]LV�NH]HO��LV��(]HNU�O�UpV]OHWHV�LQIRUPiFLy�V]HUH]KHW��D],QWHUQHWU�O��V�W�D]�LURGDORPMHJ\]pNEHQ�PHJDGMXN�D�0\64/���3RVWJUH64/�UHQGV]HUHNösszehasonlító elemzésének referenciáját is.

CGI programozás

0pJ�D�VSHFLiOLVDQ�ZHEHV�FpOUD�NLIHMOHV]WHWW�Q\HOYHN�PHJMHOHQpVH�HO�WW�IHOPHU�OW�D]LJpQ\�DGDWIHOGROJR]iVUD�pV�D]�DGDWRN�DODSMiQ�N�O|QE|]��NLPHQHWHN�NpV]tWpVpUH��%iUPHO\programnyelven megoldható az, hogy a program kimenete egy HTML fájl l egyen, amit

YLV]RQW�D�E|QJpV]�SURJUDPRN�NpSHVHN�pUWHOPH]QL��tJ\�YpJV��VRURQ�EiUPHO\�SURJUDm-

Q\HOY�VHJtWVpJpYHO�NpV]tWKHW��ZHEHV�NLPHQHW��(QQHN�PHJYDOyVtWiViUD�D]RQEDQ�EL]WRVtWa-

QL�NHOO��KRJ\�HJ\�&UODSUyO�EHpUNH]��DGDWRN�HJ\VpJHV�IRUPiEDQ��SDUDPpWHUNpQW�HOMXVVa-

nak a programhoz, és ez a program a kimenetet a webszerveren keresztül, HTTP kérésre

MXWWDVVD�HO�D�E|QJpV]�EH��(KKH]�KR]WiN�OpWUH�D�&*,�W��&RPPRQ�*DWHZD\�,QWHUIDFH��Nö-

]|V�NDSXLQWHUIpV]��DPHO\�H]HNHW�D]�LJpQ\HNHW�NpSHV�NLHOpJtWHQL�pV�D�WHWV]�OHJHV�Q\HOYHQmegírt és lefordított programok (Pascal, C, C++, Java, Delphi, stb.) a webszerver cgi-

bin könyvtárából futtatva létrehozzák a kívánt HTML kimenetet. Természetesen a prog-

ram meg tud valósítani adatbázis kapcsolatot is és így megoldható az adatbázisba törté-

Q��DGDWEHYLWHO�YDJ\�DQQDN�OHNpUGH]pVH�LV�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

17/89

$�UHQGV]HU�HO�Q\H��KRJ\�WHWV]�OHJHV�Q\HOY�DONDOPD]KDWy��D]D]�PLQGHQNL�D]�iOWDODjól ismert programnyelven dolgozhat, az eredmény pedig nyelv-független lesz. Hátrá-

nya, hogy minden egyes módosítás a lefordított program újraírását, -fordítását igényli és

minden esetben egy teljes weblap lesz a kimenet, nem oldható meg az így nyert infor-

máció beépítése egy már kész weboldalba. További hátránya az is, hogy a nem interp-

UHWiOW�Q\HOYHNHQ�tUW�&*,�SURJUDPRN�QHP�KRUGR]KDWyDN��N�O|QE|]��RSHUiFLyV�UHQGV]e-

UHNUH�N�O|QE|]��SURJUDPRNDW�NHOO�tUQL��SRQWRVDEEDQ�N�O|Q�N�O|Q�OH�NHOO�IRUGtWDQL�D]egyes programokat). Talán nem véletlen, hogy ezt az eszközt ma már inkább a számítás-

igényesebb alkalmazások esetén használják és visszaszorul a szerver oldali nyelvek

mellett. Ugyanakkor van bizonyos specifitása is. Míg nagyon ritkán találunk CGI-ként

IXWWDWRWW�3+3�SURJUDPRW��D�3HUO�SURJUDPRN�I�OHJ�LWW�W|UWpQ��IXWWDWiVUD�NpV]�OQHN�pV�Hl-vétve találunk webszerver modulként futtatott Perl szkripteket. Ennek igazi racionális

DODSMD�QLQFV��HJ\V]HU&HQ�tJ\�DODNXOW�NL«Perl

$�3HUO��3UDFWLFDO�([WUDFWLRQ�DQG�5HSRUW�/DQJXDJH��PDJDV�V]LQW&�V]NULSWQ\HOYHW/DUU\�:DOO�KR]WD�OpWUH������EHQ��0LQW�Q\tOW�IRUUiVNyG~�Q\HOY��D]yWD�QDJ\PpUWpN&�IHj-OHV]WpVHQ�PHQW�NHUHV]W�O��7|EE��VH�OHOKHW��IHO��OHJQDJ\REE�PpUWpNEHQ�D�&�Q\HOYUH�Wá-

PDV]NRGLN�GH�VRN�PiV�Q\HOYE�O�LV�|U|N|OW�HOHPHNHW�pV�PD�PiU�W|EE�SODWIRUPUD�NLIHj-lesztették. Mint szkriptnyelv, természetesen a Perl kód platform független (persze csak

DNNRU��KD�QHP�KDV]QiOXQN�VSHFLiOLV�SODWIRUP�I�JJ��HOHPHNHW�D�NyGEDQ��pV�D�PHJIHOHO�LQWHUSUHWHU�HJ\HV�RSHUiFLyV�UHQGV]HUHNEHQ�V]LQWH�EHpStWHWW�HOHPQHN�WHNLQWKHW��

/HJQDJ\REE�HU�VVpJH�D�V]WULQJHN�NH]HOpVpEHQ�YDQ��D�EHpStWHWW�UHJXOiULV�NLIHMH]pV8támogatás a szöveges adatok szinte egyedülállóan jó feldolgozó nyelvévé teszik. Ezt a

reguláris kifejezés támogatást napjainkban már több más szkriptnyelv is átvette a nép-

V]HU&VpJH�PLDWW��$�3HUO�OHJMHOHQW�VHEE�DONDOPD]iVL�WHU�OHWH�D�&*,�V]NULSWHN�tUiVD��3Ui-mitív adattípusai rugalmasan egymásba alakíthatók, ami persze növeli a programozó

IHOHO�VVpJpW�pV�D�3HUO�EHQ�MHOHQW�PHJ�HO�V]|U�D�V]WULQJJHO�LQGH[HOW�W|PE���DVV]RFLDWtYtömb - mint aggregált adattípus. A nyelv kezeli az objektumokat, de strukturáltan is

8�UHJXOiULV�NLIHMH]pV���RO\DQ�MHO�pV�NDUDNWHU�NRPELQiFLyN��DPHO\HN�VHJtWVpJpYHO�NLMHO|OKHW�N�DGRWW�PLQWá-

QDN�PHJIHOHO��NDUDNWHUVRUR]DWRN��(QQHN�OHJHJ\V]HU&EE�PHJMHOHQpVL�IRUPiMD�D�:LQGRZV�'26�UHQGV]HUHNNHUHV�LEHQ�KDV]QiOKDWy�KHO\HWWHVtW��NDUDNWHUHN��D�� ��DPL�WHWV]pV�V]HULQWL�V]iP~�NDUDNWHUW�KHO\HWWHVtWKHW�pVa (?) ami egy karakter helyett állhat.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

18/89

programozható. A Perl dinamikusan kezeli a memóriát (a Lisp örökség része) és a sze-

PpWJ\&jtést (a már nem referált változók által elfoglalt memóriaterület felszabadítását).

0LQW�PLQGHQ�Q\tOW�IRUUiVNyG~�Q\HOY��IRO\WRQRVDQ�IHMO�GLN�pV�QHKp]�D�M|Y�MpW�PHg-

MyVROQL��HU�VHQ�I�JJ�D�Q\HOY�DGRWWViJDLQ�W~O�D�GLYDWWyO�pV�HJ\pE�IDNWRURNWyO��$]�EL]WRVDQállítható, hogy a CGI programozásban még hosszú ideig nem veszít a fontosságából,

YLV]RQW�QHP�OHV]�EHO�OH�XQLYHU]iOLV�ZHEHV�V]HUYHU�ROGDOL�SURJUDPQ\HOY��$�Q\HOY�V]DEa-

don és anyagi ellenszolgáltatás nélkül felhasználható bármely alkalmazásra, de termé-

V]HWHVHQ�YDQQDN�PHJYiViUROKDWy�IHMOHV]W�UHQGV]HUHL�LV��DPHO\HN�VRN�H[WUD�V]ROJiOWDWiVWEL]WRVtWDQDN�D�IHMOHV]W�PXQNiKR]�Python

A Python programnyelvet 1990-ben kezdték kifejleszteni. A nyelv maga egy in-

terpretált, hordozható, objektum-alapú programnyelv, amelynek C-ben ill etve C++-ban

tUW�Q\tOW�IRUUiVNyGMD�LJpQ\�V]HULQW�NLHJpV]tWKHW���PyGRVtWKDWy��1HKp]�Q\HOYFVDOiGED�Vo-

UROQL��PHUW�EiU�PXWDW�&�V]HU&�HOHPHNHW��QDJ\RQ�VRN�HVHWEHQ�D�V]LQWDNWLNiEDQ�HJ\pQLXWDNDW�MiUQDN�D�IHMOHV]W�N��(OVDMiWtWiVD�YLV]RQ\ODJ�N|QQ\&��pV�LQWHUSUHWHUMpW�PiU�PLQGe-

J\LN�MHOHQW�VHEE�RSHUiFLyV�UHQGV]HUUH�NLIHMOHV]WHWWHN��&�SURJUDPR]yL�WXGiVVDO�WHWV]pVszerint új függvények, osztályok adhatók hozzá [http://www.python.org/].

$�3HUO�Q\HOYKH]�KDVRQOy�PyGRQ�HU�VVpJH�D�V]WULQJNH]HOpV��NH]HOQL�NpSHV�D�UHJXOá-

ULV�NLIHMH]pV�LOOHV]WpVHNHW��%HpStWHWW�PHPyULDNH]HOpVH�HJ\V]HU&VtWL�D�SURJUDPR]y�PXn-

NiMiW�pV�HJ\V]HU&�V]LQWDNWLNiMD�OHKHW�Yp�WHV]L�DONDOPD]iViW�SURWRWtSXVRN�NLIHMOHV]WpVpEHQill etve ideális kisebb programozói feladatok ad hoc megoldására.

1DJ\REE�SURJUDPRN�LV�PHJtUKDWyN�3\WKRQ�Q\HOYHQ��H]W�VHJtWL�HO��D�Q\HOY�NLYpWHl-kezelése és a számos már kifejlesztett kiterjesztési modul - ezek egy része standard esz-

köz, mint például a matematikai könyvtár, mások alkalmazás-speciális feladatokat lát-

nak el, mint például a képfeldolgozó vagy hangfeldolgozó modulok. Beépített módsze-

rek vannak a nyelvben egy objektum bájtsorozattá alakítására ill etve ennek fordított

P&YHOHWpUH��tJ\�LPSOHPHQWiOKaWyN�N�O|QE|]��HORV]WRWW�REMHNWXP�PRGHOOHN�D�Q\HOYEHQ�Teljes mértékben szabad felhasználású nyelv, szabadon alkalmazható és terjeszt-

KHW��NHUHVNHGHOPL�DONDOPD]iVRNEDQ�LV�D�V]HU]�L�MRJRVXOWViJ�IHOW�QWHWpVH��FRS\ULJKW�mellett.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

19/89

Java

A Java egy általánosan alkalmazott platform független, objektum orientált nyelv,

amely több szerepben is megállj a a helyét a webes alkalmazásokban. Alkalmazzák mint

&*,�SURJUDPR]iVL�Q\HOY��GH�MHOHQW�V�WpUW�KyGtWRWW�PDJiQDN�PLQW�EHpS�O��Q\HOY�LV��$]úgynevezett Java Server Pages (JSP) oldalakon a HTML kóddal keverve felhasználható

dinamikus tartalmak megjelenítésére [http://java.sun.com/webservices/index.jsp]. Eze-

NHW�HJpV]tWLN�NL�D�-DYD�DODS~�V]HUYOHW�DONDOPD]iVRN��DPHO\HN�QHY�NQHN�PHJIHOHO�HQ�Dszerveren futó Java alkalmazások, az ezekben létrehozott osztályok, objektumok viszont

HOpUKHW�N�D�-63�N�iOWDO�LV��ËJ\�HQQHN�D�NHWW�QHN�|VV]HNDSFVROiViYDO�NRPSOHWW�DONDOPD]á-

sok írhatók, kiegészítve a Java Enterprise Bean technológiával, amelyek többé-kevésbé

önálló, egy-egy speciális feladatot - például adatbázis kapcsolat - ellátó programok. Bár

UiQp]pVUH���NyGV]LQWHQ���D�-63�D�3+3�YHO�|VV]HYHWYH�pSSHQ�RO\DQ�EHpS�O���I�JJHWOHQ�Oértelmezett nyelvet sejtet, a JSP oldalak feldolgozása speciális módon történik.

A Java kóddal kombinált oldalak kezelésére egy külön webszervert is létrehoztak

[Tomcat szerver verziók: http://jakarta.apache.org/tomcat/] amely több platformon is

WHOHStWKHW��WHOMHV�pUWpN&�ZHEV]HUYHU��NH]HOQL�NpSHV�D]�HJ\V]HU&�+773�NpUpVHNHW��GH�DEHpStWHWW�PRGXOMDLYDO�-63�ROGDODN�OHNpUpVH�HVHWpQ�H]HNHW�IHOGROJR]]D�pV�HO�V]|U�V]DEá-

O\RV��MDYD�IiMO�NLPHQHWHW�NpV]tW�EHO�O�N��(EEHQ�D]�HUHGHWL��FVXSiQ�D]�DGDWRN�N�OV��PHg-

jelenítésének leírására használt HTML kódokat már Java-specifikus kiíró utasítások

�RXW�ZULWH����YHV]LN�Np]EH��PDMG�D�V]RNiVRV�-DYD�WHFKQLNiQDN�PHJIHOHO�HQ�OHV]�EHO�O�N.class fájl és végül ezt értelmezi a Java Virtuális Gép (JVM). Ennek segítségével kezelni

WXGMD�D�V]HUYOHW�NyGRNDW�LV��tJ\�WHOMHV�N|U&�V]ROJiOWDWiVRNDW�Q\~MW�D�-DYD�DONDOPD]iVRk-

KR]��(]�D�ZHEV]HUYHU�W|EE�NRUV]HU&�IHMOHV]W�L�UHQGV]HU�EHpStWHWW�HOHPH�pV�NRPRO\�HU�Ie-

V]tWpVHNHW�WHV]QHN�D�IRO\DPDWRV�IHMOHV]WpVpUH��%iU�|QiOOyDQ�LV�WHOHStWKHW���$SDFKHZHEV]HUYHU�KR]]iIpUKHW�VpJH�HVHWpQ�pUGHPHVHEE�DQQDN�PRGXOMDNpQW�WHOHStWHQL��PHUW�D]HJ\V]HU&�+773�OHNpUpVHNHW��VLPD�+70/�ROGDODN��EHpS�O��WDUWDORP�QpON�O��D]�$SDFKHgyorsabban képes kiszolgálni.

$�-DYD�Q\HOY�V]DEDGRQ�IHOKDV]QiOKDWy��D�PHJIHOHO��RSHUiFLyV�UHQGV]HUHQ�D�IRUGtWyiOWDO�HO�iOOtWRWW�EiMWNyGRW�pUWHOPH]��LQWHUSUHWHU�V]DEDGRQ�OHW|OWKHW��pV�D�IHMOHV]W�NpV]OHW�-'.��LV�V]DEDGRQ�IHOKDV]QiOKDWy��DKRJ\�XJ\DQLO\HQ�KR]]iIpUpV&�D�7RPFDW�ZHEV]HUYHUis. Természetesen komolyabb alkalmazások fejlesztése esetén szükség lehet a munkát

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

20/89

OpQ\HJHVHQ�PHJJ\RUVtWy�LQWHJUiOW�IHMOHV]W�L�N|UQ\H]HWUH�pV�H]�PiU�MHOHQW�V�PpUWpN&anyagi befektetést jelent, amely az alkalmazás-fejlesztés felgyorsításával térülhet meg.

ASP

Az Active Server Page (ASP, aktív szerver oldal) olyan szerveren tárolt weblap,

DPHO\�D�NyGMiEDQ�D�V]RNiVRV�+70/�HOHPHNHQ�W~O�D�V]HUYHUHQ�IHOGROJR]iVUD�NHU�O��Nó-

GRW�LV�WDUWDOPD]��(]HN�NLWHUMHV]WpVH��KWP�YDJ\��KWPO�KHO\HWW��DVS�pV�HEE�O�WXGMD�DZHEV]HUYHU��KRJ\�D�+773�NpUpVUH�QHP�FVDN�OH�NHOO�N�OGHQLH�D�PHJIHOHO���DVS�ROGDOW�hanem azt fel is kell dolgozni. A feldolgozó modul a <% %> jelek közé zárt kód helyett

D]�HO�iOOtWRWW�+70/�NLPHQHWHW�N�OGL�HO�D�NOLHQV�E|QJpV]�SURJUDPQDN��DPLW�D]�D�V]RNá-

VRV�PyGRQ�pUWHOPH]��$�0LFURVRIW�&RUSRUDWLRQ�iOWDO�NLGROJR]RWW�WHFKQROyJLD�OHKHW�YpWHV]L�GLQDPLNXV�WDUWDOPDN�EHLOOHV]WpVpW��D]�HJ\V]HU&�GiWXP�pV�IHOKDV]QiOyL�LQIRUPiFLyWyOD]�DGDWEi]LVEyO�Q\HUW�DGDWRNLJ��7HUPpV]HWHVHQ�OHKHW�VpJ�YDQ�D�IHOKDV]QiOyWyO�NDSRWWDGDWRN��&UODS�DGDWRN��V]HUYHU�ROGDOL�IHOGROJR]iViUD�LV�D]�$63�WHFKQROyJLával.

$]�$63�WHFKQROyJLD�OHKHW�Yp�WHV]L�D�NOLHQV�ROGDOL�pV�D�V]HUYHU�ROGDOL�NyGRN�WHOMHVkeverését, azaz mindegyiket az arra legalkalmasabb eszközzel készíthetjük el. Népsze-

U&VpJH�MyUpV]W�HQQHN�N|V]|QKHW��pV�IXWWDWiVD�QHP�RNR]�JRQGRW�,,6�DONDOPD]iVD�HVHWpQ�Nem platform független, bár az Apache webszervernek is létezik ASP interpreter mo-

dulja, így Linux rendszereken is jól futtatható. Természetesen az ASP eredeti környe-

]HWH�D�:LQGRZV�N|UQ\H]HW�pV�N�O|Q|VHQ�D��1(7�DONDOPD]iVRN�KDV]QiOMiN�HO�V]HUHWHWWHO�V�W�J\DNRUODWLODJ�NL]iUyODJ�D]�$63�WHFKQROyJLiW�DONDOPD]]iN�

%iU�PDJD�D�NyG���KLV]HQ�QHP�QHYH]KHW��N�O|Q��|QPDJiEDQ�LV�DONDOPD]KDWynyelvnek, inkább csak egy hatékony technológia Basic programozási alapokon - minden

NRUOiWR]iV�QpON�O�HO�iOOtWKDWy��DPHQQ\LEHQ�:LQGRZV�RSHUiFLyV�UHQGV]HUHQ�DNDUMXN�IXt-tatni, az operációs rendszer szoftver li cencét meg kell vásárolni, különösen, ha kereske-

GHOPL�FpOUD�NtYiQMXN�DONDOPD]QL��(]�SHUV]H�HONHU�OKHW��$SDFKH�ZHEV]HUYHU�DONDOPD]á-

ViYDO��ËJ\�D�V]DEDGRQ�IHOKDV]QiOKDWy�V]RIWYHUHNNHO�|VV]HYHWYH�HJ\V]HU&�DQ\DJL�RNRNEyOháttérbe szorul a kereskedelmi alkalmazásoknál. Maga a technológia ismerete azonban

PLQGHQNpSSHQ�HO�Q\|V��N|QQ\HQ�HOVDMiWtWKDWy�pV�NRPSOH[�DONDOPD]iVRN�NpV]tWKHW�N�HOKDV]QiODWiYDO��.HGYFVLQiOyQDN�iOOMRQ�LWW�NpW�U|YLG��iWIRJy�RNWDWySURJUDP��DPHO\�NHOO�betekintést biztosít a technológiába: [http://www.asptutorial.info/;

http://www.w3schools.com/asp/default.asp].

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

21/89

A PHP nyelv

$�WDQWiUJ\�J\DNRUODWL�UpV]pQHN�I�V]HUHSO�MH�D]������yWD�IHMOHV]WHWW�3+3�Q\HOY��Hn-

nek segítségével készítjük el alkalmazásainkat, így ezt a szkriptnyelvet részletesebben

LVPHUWHWM�N��$�EHW&V]y�HO�V]|U�D�5DVPXV�/HUGRUI�iOWDO�NpV]tWHWW�3HUVRQDO�+RPH�3DJHTools-ra utalt, majd ennek teljes átdolgozása óta rekurzív módon a PHP Hypertext

3UHSURFHVV]RU��3+3�KLSHUWH[W�HO�IHOGROJR]y��V]DYDN�NH]G�EHW&LW�UHMWL��GH�GLQDPLNXVIHMO�GpVH�VRUiQ�PiU�PHVV]H�HOWiYRORGRWW�HWW�O�D�V]LPSOD�MHOHQWpVW�O��1\tOW�IRUUiVNyG~�objektum alapú szerver oldali szkriptnyelv, szabadon felhasználható bármely web al-

NDOPD]iV�HVHWpEHQ��/HKHW�VpJHW�EL]WRVtW�D�3+3�SDUDQFVRN�N|]YHWOHQ�EHiJ\D]iViUD(<?php utasítások ?> vagy a szintén használt rövid szintaxis <? utasítások ?>) a HTML

kódba9, ezeket a szerver oldali szkript nyelveknél már megszokott módon a

ZHEV]HUYHUEH�EHpS�O��LQWHUSUHWHU�PRGXO�pUWHOPH]L�pV�D]�HO�iOOtWRWW�+70/�NLPHQHWHW�DOHN�OGpVUH�NHU�O��ZHEODSED�LOOHV]WL��7HUPpV]HWHVHQ�QHP�FVDN�D�+70/�NyG�PyGRVtWKDWy�KDQHP�SpOGiXO�D�V]LQWpQ�D�E|QJpV]��iOWDO�pUWHOPH]HWW�-DYDVFULSW�NyG�LV��tJ\�PDJD�D�NOi-ens oldali Javascript program is dinamikusan változtatható.

$�3+3�V]LQWD[LVRQ�HU�VHQ�OiWKDWy�D�&�Q\HOY�|U|NVpJH��GH�PDJD�D�Q\HOY�LV�&�EHQLOOHWYH�&���EDQ�tUyGRWW��ÈWYHWWH�D�3HUO�QDJ\�HU�VVpJpW��D�UHJXOiULV�NLIHMH]pVHN�KDV]QiOa-

WiW��tJ\�XJ\DQRO\DQ�V]LQW&�V]|YHJ�PDQLSXOiFLyN�KDMWKDWyN�YpJUH�D�VHJtWVpJpYHO��$�Q\tOWIRUUiVNyG�OHKHW�VpJHW�DG�~M�VSHFLiOLV�PRGXORN��PHWyGXVRN�HONpV]tWpVpUH�pV�D�V]pOHV�IHj-OHV]W�L�Ei]LV�DODSR]]D�PHJ�D�3+3�Q\HOY�J\RUV�IHMO�GpVpW��3URJUDPR]yNQDN�KDWiUR]RWWDQpUGHPHV�PHJOiWRJDWQL�D�>ZZZ�]HQG�FRP@�ZHEKHO\HW��DKRO�PHJWHNLQWKHW��D]�|VV]HV�IHj-OHV]WpV�DODWW�OHY��PHWyGXV�LV�&�IRUUiVIiMO�IRUPiMában.

A PHP 3 verziót 1998-ban adták ki és gyors karriert futott be a webes alkalmazá-

sok terén. A sikerre való tekintettel átdolgozták az interpretert - Zend engine - és a PHP

4 már az új interpreterrel került a felhasználók kezébe. Mivel a Zend engine nem egy

HJ\V]HU&�LQWHUSUHWHU��KDQHP�LQNiEE�D�-DYD�-,7�LQWHUSUHWHU�HOYHLW�DONDOPD]]D���tJ\�SpOGiXOD]�|VV]HV�I�JJYpQ\�HO�UH�OHIRUGtWiVUD�NHU�O��YDJ\�D]�HJ\HV�NyGUpV]OHWHN�J\DNRUODWLODJtárolásra kerülnek és nem szükséges ezeket - például egy ciklus magját - újra és újra

9�$�3+3�Q\HOY�DONDOPD]yL�QHP�HJ\VpJHVHN�HQQHN�HO�Q\�KiWUiQ\�PHJtWpOpVpEHQ��%iU�MyPDJDP�D]�HVHWHNW|EEVpJpEHQ�HO�V]HUHWHWWHO�KDV]QiORP�D�NyGRN�NHYHUpVpW�pV�D�MHJ\]HWKH]�LV�HQQHN�DODSMiQ�NpV]�OWHN�Dpéldák, sokan a sablonok alkalmazását tartják az egyedül elfogadható megoldásnak. Bízzuk ennek eldön-

WpVpW�D]�HON|YHWNH]��pYHNUH���

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

22/89

pUWHOPH]QL��H]]HO�MHOHQW�VHQ�PHJQ|YHOWpN�D�VHEHVVpJHW��)�JJHWOHQ�PpUpVHN�V]HULQW�Dteljesítmény a teljesen újraírt interpreter hatására minimáliVDQ�|WYHQV]HUHVpUH�Q�WW�

A PHP 4 már gyakorlatilag az összes általánosan használt kereskedelmi és szaba-

GRQ�IHOKDV]QiOKDWy�DGDWEi]LVW�NpSHV�N|]YHWOHQ�O�NH]HOQL�D�PHJIHOHO��PRGXORNRQ�Ne-

resztül (Informix, Microsoft SQL Server, mSQL, MySQL, PostgreSQL, ODBC, Oracle

pV�6\EDVH��KRJ\�t]HOtW�W�DGMXQN�D�OHKHW�VpJHNE�O���.�O|QE|]��N�OV��PRGXORN�VHJtWVpJé-

YHO�3')�GRNXPHQWXPRNDW�WXG�HO�iOOtWDQL�YDJ\�pUWHOPH]QL�WXGMD�D]�;0/�NyGRW�GH��UWIIiMOW�LV�HO�iOOtWKDWXQN�D�VHJtWVpJpYHO�

$�3+3�HOV�GOHJHV�IHOKDV]QiOyL�D�/LQX[�UHQGV]HUHNHQ�$SDFKH�V]HUYHUW�IXWWDWy�IHj-OHV]W�N��GH�KDVRQOy�My�HUHGPpQ\HNHW�OHKHW�HOpUQL�EiUPHO\�8QL[�YDJ\�:LQGRZV�SODWIRr-mon is (a gyakorlat során is egy Windows rendszeren futó változatot alkalmazunk a

fejlesztéseinkben). A PHP támogatja a HTTP session-öket, Java kapcsolódásokat és

számos protokollt . A PHP jelenleg mintegy 9 milli ó webszerveren fut

[http://www.netcraft.com/survey/ felmérés] és folyamatosan nöYHNV]LN�D�QpSV]HU&VpJH�$�3+3�Q\HOY�D�UHQGHONH]pVUH�iOOy�LQIRUPiFLyN�V]HULQW�D�M|Y�EHQ�LV�IHQQWDUWMD�D�Gi-

namikus növekedést. A jegyzet írása idején (2003 nov. - 2004 márc.) bocsátották ki a

PHP 5 béta verzióját, amely ismét egy új interpretert kapott, a Zend Engine 2-t. Ennek

VHJtWVpJpYHO�MHOHQW�VHQ�NLE�YtWHWWpN�D�3+3�PiU�NRUiEEDQ�LV�OpWH]��REMHNWXP�RULHQWiOWOHKHW�VpJHLW��EHYH]HWWpN�D]�RV]WiO\RN�PLQ�VtWpVpW��DEVWUDFW��ILQDO��SURWHFWHG��pV�W|EEegyéb pattern (minta) mellett implementálták a Template Method design patternt (terve-

zési minta) a kód újrafelhasználás tökéletesítésére. Ennek egyenes következménye,

hogy mire ez a jegyzet a hallgatóság kezébe kerül, neki lehet állni az új változat írásá-

QDN�pV�D�SpOGiN�LV�iWV]HUNHV]WKHW�N�D�3+3���OHKHW�VpJHLQHN�D�WHOMHV�NLKDV]QiOiViUD�����5|YLGHQ�|VV]HIRJODOYD�D�3+3�Q\HOY��IHOQ�WW��D]�REMHNWXP�RULHQWiOW�Q\HOYHN�YLOá-

JiED�pV�H]�HJ\HQO�UH�FVDN�QHKH]HQ�VHMWKHW��WiYODWRNED�YH]HW��(QQHN�D�WiYODWQDN�D�IHOPé-

réséhez segítséget nyújthat az a bejelentés, hogy a Zend Technologies Ltd., a Zend

Engine létrehozója részt vesz a Sun Microsystems Java Specification Request (JSR)

kezdeményezés kifejlesztésében, amelynek célja Java-alapú rendszerek standard elérése

V]NULSWQ\HOYHNE�O��HOV�VRUEDQ�WHUPpV]HWHVHQ�3+3�E�O��(]�HJ\UpV]W�D�3+3�pUWpNpW�Q|YHOL�PiVUpV]W�OHKHW�Yp�WHV]L�3+3�ZHEHV�DONDOPD]iVRN��IURQW�HQG��pV�-DYD��]OHWL�ORJLND�LQWHg-

UiFLyMiW��$]�HONpS]HOpV�WiPRJDWyL�N|]|WW�YDQQDN�D�N|YHWNH]��QHYHV�FpJHN�LV��$SSOH�Borland, Macromedia, MySQL, Sun, Oracle és persze a Zend Technologies.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

23/89

A PEAR

$�IHOQ�WWVpJHW�EL]RQ\tWMD�D]�LV��KRJ\�HONpSHV]W��PpUWpNEHQ�PHJQ�WW�D]�LQWHUQHWHQ�DPHP programok, megoldások száma. Gyakorlatilag szinte minden témára van csokornyi

PHJROGiV�pV�D]�tJ\�yKDWDWODQXO�OpWUHM|Y��NiRV]W�IHOLVPHUYH�PHJLQGXOW�D]�LQIRUPiFLyUHQGV]HUH]pVH�LV��(QQHN�WDOiQ�OHJMHOHQW�VHEE�ÄJ\�P|OFVH´�D�3($5���Ä3+3�([WHQVLRQDQG�$SSOLFDWLRQ�5HSRVLWRU\´��3+3�NLWHUMHV]WpV�pV�DONDOPD]iV�J\&MWHPpQ\��D�Q\tOW�IRUUá-

sú PHP kódok rendezett könyvtára. Ugyanakkor kicsit többet is jelent, mert rendszert

teremtett a kódok terjesztésében és a kódcsomagok fenntartásában, egységes kódolási

stílust követ, megalapozza a PHP Foundation Classes-t, azaz a PHP osztálykönyvtárát,

DKRYD�D�3+3�N|]|VVpJ�MyYiKDJ\iViYDO�NHU�OKHWQHN�EH�PLQ�VpJL��iOWDOiQRVDQ�DONDOPDz-

KDWy�pV�NRPSDWLELOLV�RV]WiO\RN��DPHO\HN�NpV]tW�L�NLFVLW�HO�UH�LV�WHUYH]QHN��ÄIRUZDUG�FRPSDWLEOH´��D]D]�HO�UH�JRQGROQDN�D�IHMOHV]WpVL�OHKHW�VpJHNUH���KRJ\�HJ\�iOWDOiQRVDQhasználható rendszert hozzanak létre. Ennek és az itt tárolt osztályoknak a leírását is

megtalálhatjuk már részben magyar nyelven a http://pear.php.net/manual/hu/

webhelyen.

Programozás PHP nyelven

$�3+3�V]LQWD[LVD��Q\HOYL�HOHPHL�±�QpKiQ\�J\RUVDQ�HOVDMiWtWKDWy�NLYpWHOW�O�HOWe-

NLQWYH���N|QQ\HQ�pUWKHW��PLQGD]RN�V]iPiUD��DNLN�D�&�&���SURJUDPQ\HOYEHQ�YDJ\�DJavaban otthon vannak. Ezért ebben a jegyzetben nem akarom részletesen tárgyalni,

FVXSiQ�IHOVRURORP�D]�LVPHUWQHN�IHOWpWHOH]KHW��HOHPHNHW��YLV]RQW�U|YLG�OHtUiVW�DGRN�D]RQHOHPHNU�O�pV�DONDOPD]iVXNUyO�DPHO\HN�D�3+3�Q\HOY�VDMiWRVViJDLW�WHVWHVtWLN�PHJ��(]HNN|]�O�LV�HOV�VRUEDQ�D]RNDW�HPHOHP�NL��DPHO\HN�D�WDQDQ\DJ�HOVDMiWtWiViW�VHJtW��SpOGiNEDQHO�IRUGXOQDN��$�WDQDQ\DJ�HOHNWURQLNXV�MHOOHJ�PHJIHOHO�HQ�XWDORN�LWW�Dhttp://hu.php.net/manual/hu/langref.php�ZHEKHO\UH���H]�D�PDJ\DU�Q\HOY&�Np]LN|Q\YOHO�KHO\H����DKRO�PLQGHQ�3+3�YDO�NDSFVRODWRV�LVPHUHW�PHJWDOiOKDWy��(QQHN�OHW|OWKHW�változata megtalálható továbbá a tantárgyak weboldalán is a

http://www.gdf.hu/iai/Segedletek/Segedlet.htm, címen, valamint a háttérként használt

saját magam által üzemeltetett oldalon is www.medzi.hu/php.

A kódolás során igyekezzünk következetesek lenni változó elnevezéseinkben, je-

O|OpVHLQNEHQ��VWtOXVXQNEDQ��%�VpJHVHQ�KDV]QiOMXQN�PHJMHJ\]pVHNHW��KRJ\�NpV�EE�LVpUWKHW��PDUDGMRQ�V]iPXQNUD�D]�HJ\V]HU�NLWDOiOW�NyG��$�VRN�OHONHV�SURJUDPR]y�iOWDO�IHj-OHV]WHWW�Q\HOYEHQ�PHJOHKHW�VHQ�QDJ\�D�UHGXQGDQFLD��J\DNUDQ�WDOiOXQN�N|]HO�D]RQRV

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

24/89

funkciókat biztosító függvényeket, nyelvi elemeket. Érdemes kialakítani egy saját stílust

pV�NLYiODV]WDQL�HJ\�V]&NHEE�HV]N|]WiUDW��GH�D]W�DODSRVDQ�NLLVPHUQL��PLQW�PLQGLJ�~M�pV�~Mmegoldásokat alkalmazni. PerV]H�QH�IpOM�QN�H]HNW�O��KD�KDWiUR]RWW�HO�QQ\HO�MiUQDN«�Nyelvi jellegzetességek:

Változók, típusok

(kézikönyv::language.variables.html; kézikönyv::language.types.html)

A PHP-ban a változókat nem kell külön deklarálni, a változó nevének leírásával

OpWUH�LV�M|Q��0LQGHQ�YiOWR]yW�PHJHO�]�D�$ jel, ez bizonyos értelemben könnyíti a kód

ROYDViViW�pV�KDPDU�PHJV]RNKDWy��7tSXViW�QHP�N|WHOH]��PHJDGQL��DODSpUWHOPH]pVEHQattól függ, hogy milyen érték kerül bele - ez a kódban mindenütt igaz, ha egy tömböt

tartalmazó változóba integert rakunk, az attól kezdve integer típusú lesz. Hat típust kü-

O|QE|]WHW�QN�PHJ��H]HN�D�N|YHWNH]�N��integer (int), double, boolean (bool), str ing,

arr ay, object. A $tortszam = 2.14 ; kód például egy double típusú $tor tszam�QHY&YiOWR]yW�KDWiUR]�PHJ��7tSXVNRQYHU]LyYDO���KD�HUUH�OHKHW�VpJ�YDQ�D]�pUWpN�NHUHWHLQ�EHO�O��tetszés szerint átalaNtWKDWMXN�D�YiOWR]yNDW��$�N|YHWNH]��NyG�SpOGiXO�P&N|GLN�

$egyik = "szöveg" ;

$masik = (bool) $egyik ;

echo $masik ;

pV�HJ\�HJ\HVW�tU�NL��PHUW�KD�QHP��UHV�V]WULQJU�O�YDQ�V]y��DNNRU�D]W�true értéknek tekinti,

HQQHN�PHJIHOHO�MH�D]���pUWpN��(QQHN��PHJIRUGtWRWWMD��D�N|YHWNH]��NyG�$egyik = false ;

$masik = (int) $egyik ;

echo $masik ;

ami viszont nullát ír ki, a false�pUWpNQHN�PHJIHOHO�HQ�A változók tartalmazta értékek átalakítására - pontosabban más típus szerinti

értelmezésére - ill etve a változók vizsgálatára több függvény áll rendelkezésre. A gya-

NRUODWRN�VRUiQ�LV�HO�NHU�O�PDMG�D]�LQWYDO���I�JJYpQ\��DPHO\�PHJSUyEiOMD�D�SDUDPpWHr-ként kapott változót vagy karaktersorozatot egész számként értelmezni, így például az

echo(intval("123asdf")) kód a "123" egész számot írja ki. Ha a változó karakterrel kez-

G�GLN��DNNRU�D�YLVV]DNDSRWW�pUWpN������$�N�O|QE|]��LVBERROHDQ����LVBDUUD\���LVBQXPHULF����VWE��I�JJYpQ\HNNHO�QHY�NQHN�PHJIHOHO�HQ�YL]VJiOKDWy�D�YiOWR]y�DNWXiOLV

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

25/89

WtSXVD�pV�D�V]LQWpQ�LWW�HPOtWKHW��LVVHW���LOOHWYH�HPSW\���I�JJYpQ\HN�VHJtWVpJpYHO�HOG|Qt-KHW���KRJ\�HJ\�YiOWR]y�NDSRWW�H�PiU�pUWpNHW��3pOGiXO�HJ\�ZHEHV�&UODS�UiGLyJRPE�FVo-

portja esetében, ha egyiket sem kattintják be, a hozzátartozó változóra az

isset($radiogombcsoport) függvény hamis értéket fog adni. Egy sztring típusú változó

esetében viszont az üres sztringet csak az empty() függvénnyel vizsgálhatjuk! Ezeket a

I�JJYpQ\HNHW�QDJ\RQ�MyO�OHKHW�DONDOPD]QL�&UODSRN�pV�V]|YHJHV�IiMORN�IHOGROJR]iViQiO�így ismeretük ajánlott (legalább tudjunk annyit, hogy hol kell keresni).

A PHP specifikus dinamikus változók�VRN�QDJ\V]HU&�OHKHW�VpJHW��HOHJiQV�PHg-

ROGiVRNDW�EL]WRVtWDQDN�D�SURJUDPR]yQDN��EiU�D�IRJDORP�HOVDMiWtWiVD�HO�V]|U�JRQGRNDWszokott okozni. Röviden arról van szó, hogy a változó nevét (pl. $lakcim) egy másik

változóban akarjuk tárolni, valahogy így: $cim = "lakcim". Ekkor a $$cím jelöléssel

hivatkozhatunk a $ODNFLP�YiOWR]y�WDUWDOPiUD��(QQHN�MHOHQW�VpJH�D�ZHEHV�DONDOPD]iVRk-

nál nagy, ezért egy tipikus példán mutatjuk be a használatát.

)HODGDWXQN�HJ\�VRN�NpUGpVE�O�iOOy�IHOPpUpV�OpWUHKR]iVD�+70/�&UODS�IRUPiMiEDQ�ahol minden egyes kérdés mögött egy-egy változó áll . Az egyes változók nevei utalnak

a kérdés sorszámára, de nem akarunk 50-100 változót külön-külön leírni a kódban. Ar-

ról nem is beszélve, hogy ezeket majd végül adatbázisba kell vinni… Egy lehetséges

PHJYDOyVtWiV�NyGMD�D�N|YHWNH]��<?php��D]�&UODS�HON�OGpVH�XWiQ�PHJV]iPROMXN��KiQ\�PH]�W�QHP�W|ltöttek ki$hibaszam = 100 ;for ( $i =1; $i <=100 ; $i ++){ $kerdes = "kerdes" . $i ; if (!empty( $$kerdes )) $hibaszam --;}

if ( $hibaszam < 10) echo( �$�NLW|OWpV�VLNHUHV��D]�&UODS�HON�OGKHW���);

��EHYLWHOL�PH]�N�NLUDNiVDfor ( $i =1; $i <=100 ; $i ++) echo( "<input type= \" text \" name=\" kerdes" . $i . " \" >\n " );echo( "<input type= \" submit \" name=\" submit \" value= \" Mehet! \" >" );?>

/iWKDWy��KRJ\�D�V]i]�YiOWR]yQ�HJ\V]HU&HQ�YpJLJ�WXGWXQN�IXWQL�for ciklus segítségével,

összeraktuk a nevét egy változóban ($kerdes), majd ezt a változót dinamikus változó-

NpQW�NH]HOYH����NHUGHV��PHJYL]VJiOWXN��KRJ\�D]�DNWXiOLV�pUWpNpQHN�PHJIHOHO��IHOPpUpVLkérdést azonosító változó üres-e.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

26/89

$�ZHEHV�DONDOPD]iVRN�HO�UH�GHILQLiOW�YiOWR]yL(kézikönyv::reserved.variables.html)

Ezek a változók szolgáltatják számunkra az átadott értékek feldolgozásakor vagy

PiV�HVHWHNEHQ�V]�NVpJHV�DGDWRNDW��%�YHEEHQ�OiVG�D�SKSLQIR���PHWyGXV�WiUJ\DOiViQiO�$PHP_SELF az éppen futó szkript fájlneve elérési úttal együtt, jól használható

látogatási statisztikákhoz;

$HTTP_GET_VARS az újabb nyelvi változatokban (4.1.0 felett) $_GET, a

HTTP GET metódussal elküldött kulcs-érték párok asszociatív tömbjét tartalmazza,

D]D]�D�IHQWL�SpOGiEDQ�D]�&UODSRQ�WDOiOKDWy��NHUGHV���QHY&�YiOWR]y�pUWpNpW�D�N|YHWNH]�-

képpen kapjuk meg: $HTTP_GET_VARS["kerdes89"] ill etve $ _GET["kerdes89"];

$HTTP_POST_VARS az újabb nyelvi változatokban $_POST, a fentiekkel teljes

mértékben analóg változó, csupán ez a POST metódussal elküldött kulcs-érték párok

asszociatív tömbjét tartalmazza;

$_REQUEST csak az újabb nyelvi változatokban megtalálható szuperglobal10

asszociatív tömb, amely tartalmazza a $_GET, $_POST, $_COOKIE változókat együtt;

$GLOBALS az összes global tartományban deklarált változó asszociatív

tömbje, úgynevezett szuperglobal, azaz nem kell a metóduson belül külön hivatkozni a

változó globális érvényességi tartományára.

Konstansok

(kézikönyv::language.constans.html)

Állandókat létrehozhatunk a define() metódus használatával, de nagyon sok eset-

EHQ�HO�Q\|VHQ�DONDOPD]KDWyDN�D]�HO�UH�GHILQLiOW�NRQVWDQVRN��DPHO\HN�VRN�pUWpNHV�Ln-

IRUPiFLyW�HOiUXOQDN�D�N|UQ\H]HWU�O��YDJ\�pSSHQ�D�NH]HOW�IiMOUyO�echo PHP_VERSION. " \n " ;

echo __FILE__ . " \n " ;

10 Minden programnyelvben fontos ismerni a változók érvényességi körét. A PHP esetében ha egy függ-

YpQ\��PHWyGXV�EHOVHMpE�O�HO�DNDUXQN�pUQL�HJ\�NtY�O�GHNODUiOW�pV�pUWpNHW�NDSRWW�YiOWR]yW��DNNRU�D�JOREDOkulcsszóval kell rá hivatkozni. Ekkor a változó értéke mintegy bemásolódik a metódusba és kiolvasható.

A szuperglobal jelleg ezt automatikusan megteszi, nincs szükség külön global hivatkozásra.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

27/89

echo __LINE__ . " \n " ;

H]�D�KiURP�XWDVtWiV�NLtUMD�D�KDV]QiOW�pUWHOPH]��YHU]LyV]iPiW��D�IXWWDWRWW�IiMO�QHYpW�HOpUpVLúttal együtt és annak a sornak számát, ahol a harmadik utasítás (__LINE__) megtalál-

ható - ez nagy segítség lehet például hibakeresés közben. A pont, mint konkatenációs

RSHUiWRU�VHJtWVpJpYHO�KR]]iI&]|WW�V]WULQJ��D��?Q��NDUDNWHUVRUR]DW��WHUPpV]HWHVHQ�D�VRr-emelést biztosítja.

9H]pUO��V]HUNH]HWHN(kézikönyv::control-structures.html)

Reguláris kifejezések

(kézikönyv::ref.regex.html)

Függvények, metódusok

(kézikönyv::funcref.html)

A példákban gyakrabban használt függvények, metódusok, nyelvi szerkezetek

Ezek pontos és hivatalosan elfogadott specifikációja - nagyon gyakran példákkal

HJ\�WW���PHJWDOiOKDWy�D�3+3�PDJ\DU�Q\HOY&�Np]LN|Q\YpEHQ��$�WDQXOiV�pV�D�J\DNRUODWLmunka segítésére az alább felsorolt függvényekre a HTML forma változatlan megtartá-

sával referenciát11��MHJ\]HW�KWP��NpV]tWHWWHP�D�Np]LN|Q\Y�PHJIHOHO��ODSMDLQDN�OLQNHOpVé-

vel. Ezúton is köszönet ill eti a kézikönyv magyar fordítóit és gondozóit.

include(), include_once() ���.�OV��IiMORN�EHLOOHV]WpVpW�YpJ]L�D�NyGED��6HJtWVpJé-

YHO�RV]WiO\RNDW��NRPSRQHQVHNHW��J\DNUDQ�LVPpWO�G��NyGUpV]OHWHNHW�LOOHV]WKHW�QN�EH�Ilyen megoldásokat alkalmazunk az adatbázis kapcsolatokhoz szükséges állandó kód-

részletek bevitelére. Az include_once() alkalmazása esetében a rendszer figyel arra,

hogy a kérdéses beill esztett kód csak egyszer szerepeljen a fájlban pl. ne legyen két

osztályleírás.

11 A PHP kézikönyv sok fájlból álló csomagját (php_kezikonyv.zip a Tantárgyi segédletek oldaláról, vagy

bármely más forrásból) tegyük egy könyvtárba kibontva és ugyanott helyezzük el a jegyzet.htm fájlt. Ezt

E|QJpV]�EHQ�LQGLWYD�UHQGHONH]pVUH�iOO�D�J\RUV�UHIHUHQFLDOLVWD�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

28/89

echo(), print() – Kiíró utasítások, gyakran használjuk a generált HTML kód fájlba

írására.

VWUOHQ����VWUWRN����VXEVWU����H[SORGH����WULP���±�6]WULQJNH]HO��PHWyGXVRN��D�VWUOHQ���Dsztring hosszát adja vissza, strtok(), explode() a sztring részekre bontását végzi, adott

karakternél a sztringet szétvágja és darabjait egy tömb elemeiként adja vissza, a trim()

PHWyGXV�HOWiYROtWMD�D]��UHV�NDUDNWHUHNHW�D�V]WULQJ�NpW�YpJpU�O��D�VXEVWU���N�O|QE|]�Npp-

SHQ�SDUDPpWHUH]KHW��pV�VHJtWVpJpYHO�WHWV]pV�V]HULQWL�GDUDE�YiJKDWy�NL�D�V]WULQJE�O�±�H]MyO�DONDOPD]KDWy�DGDWEi]LVEDQ�WiUROW�V]WULQJHN�IHOGROJR]iViUD��SpOGiXO�D�0\64/�LG�Eé-

lyeg]�MH12 (timestamp) esetében.

tömbök és kezelésük

(kézikönyv::language.types.array.html; kézikönyv::function.array.html)

array();

array_push();

array_merge();

array_rand();

Adatbázis kapcsolatot, kezelést biztosító függvények

(kézikönyv::function.mysql-*.html; kézikönyv::function.dbm*.html)

12�$GDWEi]LVRNEDQ�V]LQWH�PLQGHQ�WW�PHJWDOiOKDWy�D]�LG�EpO\HJ]���WLPHVWDPS��IXQNFLy��(QQHN�VHJLWVpJpYHOD�WUDQ]DNFLy�SRQWRV�LGHMH�U|J]LWKHW��D�JpSLG��DODSMiQ��8J\DQ�D�V]iPLWyJpSHN�EHOV��yUiL�ULWNiQ�SRQWRVDN�GH�HJ\�MyO�EHiOOLWRWW�V]HUYHU�NRPPXQLNiO�D�YLOiJKiOyQ�HOKHO\H]HWW�LG�V]LQNURQL]iOy�V]iPLWyJpSHNNHO��LJ\�DJpSLG�W�PLQGLJ�PHJIHOHO��SRQWRVViJJDO�NpSHV�EL]WRVLWDQL��,G�EpO\HJ]�W�V]LQWH�PLQGHQ�WW�KDV]QiOXQN�DUHNRUGRN�IHOYpWHOH�VRUiQ���PpJ�DNNRU�LV��KD�H]�QHP�HO�LUiV�D�NpUGpVHV�DGDWEi]LV�VSHFLILNiFLyMiEDQ�±�PHUWIHOEHFV�OKHWHWOHQ�HO�QQ\HO�MiU�D�UHNRUGRN�UHQGH]pVHNRU�pV�EiUPLO\HQ�EL]WRQViJL�SUREOpPD�PHJROGiViEDQ�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

29/89

Osztályok, objektumok

(kézikönyv::language.oop.html)

A phpinfo() metódus

Ha egy weboldalba beill esztjük ezt a metódus nevet a <?php és ?> jelölések közé

és lefuttatjuk, csodát látunk. Ez ugyanis kiírja az összes PHP beállítást, konfigurációt, a

környezeti változókat és adatokat, a PHP beépített változóinak aktuális értékét, a tele-

pített programcsomagokat, azok beállításait és még sok mást. Itt van például az én saját

számítógépem PHP környezeti beállításainak egy részlete:

Itt látható ugyanakkor az installált egyéb csomagok egy részlete is, történetesen

'%0�DGDWEi]LVRN�NH]HOpVpKH]�pV�D�GLQDPLNXV�NpSHN�HO�iOOtWiViKR]�V]�NVpJHV�I�Jg-

vénykönyvtárak csomagjai:

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

30/89

Sablonok

Különlegességek, speciális függvények

$�Q\HOYHW�J\DNUDQ�KDV]QiOMXN�V]|YHJHN�NH]HOpVpUH��tJ\�N�O|Q|VHQ�HU�V�pV�YiOWo-

zatos a sztringkezelése rendelkezésre álló eszköztára. Ennek egyik példája az EOD

szerkezet használata, amit egy SQL select utasítás összeállításával szemléltetünk:

<?php

$nev = "Kovács Bence" ;

$irszam = 1194 ;

$select = <<<EOD

insert into szemely (nev, lakcim, telszam) values

(' $nev ', ' $irszam Budapest, Etele út 68', '(06-1) 280-6207')

EOD;

echo $select ;

?>

A <<<EOD - soremelés - tetszés szerinti szöveg és változó kombináció feloldó karakte-

rek és konkatenálás nélkül - soremelés és EOD; lezárás egy sztringet határoz meg és ez

a szokásos módon kii ratható egy echo utasítással.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

31/89

(J\�$SDFKH���3+3���0\64/�IHMOHV]W�UHQGV]HU�|VV]HiOOtWiVD��WHOHStWpVH$KKR]��KRJ\�3+3�DONDOPD]iVRNDW�PLQLPiOLV�LG�UiIRUGtWiV�PHOOHWW�WXGMXQN�IHj-

OHV]WHQL��W|EE��MyO�HJ\�WWP&N|G��V]RIWYHU�HV]N|]UH�YDQ�V]�NVpJ�QN��.HOO�KR]]i�HJ\+70/�V]HUNHV]W��SURJUDPUD��KRJ\�QH�Np]]HO�NHOOMHQ�D]�|VV]HV�+70/�NyGRW�EHtUQL�7HUPpV]HWHVHQ�NHOO�KR]]i�D�PHJIHOHO��ZHEV]HUYHU��DPHO\QHN�EHpS�O��PRGXOMD�D�3+3LQWHUSUHWHU��0DJD�D�3+3�NyG�HJ\DUiQW�V]HUNHV]WKHW��D�OHJHJ\V]HU&EE�V]|YHJV]HUNHV]W�-

YHO�pV�SHUV]H�D�+70/�V]HUNHV]W�SURJUDP�NyGV]HUNHV]W�MpYHO��D�PRGHUQ�+70/�V]Hr-NHV]W�N�YDJ\�N|]YHWOHQ�O��YDJ\�EHLOOHV]WKHW��PRGXO�IRUPiMiEDQ�EL]WRVtWMiN�D�V]LQWD[LVNLHPHOpVHV�3+3�NyGV]HUNHV]WpVW���GH�MREEDQ�iWWHNLQWKHW��D�NyG��KD�HUUH�D�FpOUD�NLIHj-OHV]WHWW�3+3�V]HUNHV]W�SURJUDPRW�KDV]QiOXQN�KR]]i��1HP�XWROVy�VRUEDQ�D]�HJ\HV�HONé-

V]�OW�UpV]SURJUDPRN��PRGXORN�NLSUyEiOiViW�LV�HJ\V]HU&HQ�HOYpJH]KHWM�N�HJ\�I�JJHWOHQ3+3�HGLWRU�VHJtWVpJpYHO��6]�NVpJ�QN�YDQ�WRYiEEi�DGDWEi]LV�NH]HO�UH�LV��DPHO\�YDJ\PDJD�WDUWDOPD]]D�D�NH]HO�IHO�OHWHW��DPHO\�VHJtWVpJpYHO�HJ\V]HU&HQ�OpWUHKR]KDWMXN�D]adatbázis szerkezetét, bevihetjük az adatait, vagy szükséges még hozzá egy külön ke-

]HO�Ielület is.

(]HNHW�D�IHMOHV]W�UHQGV]HU�NRPSRQHQVHNHW�DODSYHW�HQ�NpWIpOH�PyGRQ�V]HUH]KHWM�NEH��0HJYiViUROKDWXQN�NpV]�IHMOHV]W�UHQGV]HUHNHW��DPHO\HN�EL]WRVtWMiN�D]�|VV]HV�NRPSo-

QHQVW�pV�D�N|]|WW�N�OHY��NDSFVRODWRNDW��LOOHWYH�NLKDV]QiOYD�D�ZHEHV�IHMOHV]WpVHN�pV�DPHP sok esetben alkalmazott GNU13 li cencét, szinte minden egyes komponens esetében

WDOiOKDWXQN�V]DEDGRQ�WHOHStWKHW��YiOWR]DWRW�pV�tJ\�PLQLPiOLV�N|OWVpJUiIRUGtWiVVDO���GHWHUPpV]HWHVHQ�HQQHN�PHJIHOHO�HQ�QDJ\REE�PHQQ\LVpJ&�PXQNiYDO�pV�D]�HJ\HV�NRQILJu-

UiFLyV�IiMORN�EHiOOtWiVD�QpPL�V]DNpUWHOPHW�LV�LJpQ\HO���|VV]HiOOtWKDWMXN�IHMOHV]W��N|UQ\e-

zetünket.

$�J\DNRUODWEDQ�pV�tJ\�D�MHOHQ�HVHWEHQ�LV�D�KHO\]HW�QN�OpQ\HJHVHQ�HJ\V]HU&EE��$fejlesztési munkákat Windows rendszeren (Win98 - WinXP) végezzük, a webszervert

(Apache), annak PHP modulját (PHP 4) és az adatbázis szervert (MySQL) a PHPTriad

programcsomaggal együtt telepítjük. HTML szerkesztésre a Microsoft FrontPage al-

NDOPD]KDWy���H]�D�SURJUDP�D�0LFURVRIW�&DPSXV�/LFHQV]�UpV]HNpQW�KR]]iIpUKHW����pV�D 13 GNU General Public Licence, általános közösségi li censz, a Szabad Szoftver Alapítványhoz (Free

6RIWZDUH�)RXQGDWLRQ��WDUWR]y�SURJUDPRN�OLFHQV]H��DPHO\�EL]WRVtWMD�D�V]HU]�L�MRJ�PHJWDUWiVD�pV�pUYpQ\HVí-WpVH�PHOOHWW�D]�pUYpQ\HVpJH�DOi�WDUWR]y�V]RIWYHUHN�V]DEDG�WHUMHV]WpVpW��IHOKDV]QiOiViW��PyGRVtWiViW��(WW�OfügJHWOHQ�O�D]�H]HQ�V]RIWYHUHNNHO�YpJ]HWW�PXQNipUW��D�WHUMHV]WpVpUW�DQ\DJL�HOOHQV]ROJiOWDWiV�NpUKHW��

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

32/89

PHP kód szerkesztését ill etve az egyes modulok kipróbálását a PHPEdit szintén szaba-

GRQ�WHUMHV]WKHW��V]HUNHV]W�SURJUDPPDO�YpJH]KHWM�N��+D�NRPRO\DEE�DGDWEi]LVRNDW�DNa-

runk létrehozni és ezeket kezelni is szükséges, akkor a MySQL esetében érdemes meg-

V]HUH]QL�D�0\64/�)URQW���V]LQWpQ�V]DEDGRQ�WHUMHV]WKHW����DGDWEi]LV�NH]HO��SURJUDPRWLV��DPHO\�VHJtWVpJpYHO�N|]YHWOHQ�O�OpWUHKR]KDWMXN�D�WiEOiNDW�pV�D�PH]�NHW��(]HNHW�DSURJUDPRNDW�PpJ�NL�NHOO�HJpV]tWHQL�D�PHJIHOHO��GRNXPHQWiFLyYDO�LV��HKKH]�V]�NVpJHV�D],QWHUQHWHQ�IHOOHOKHW��3+3�0DQXDO��DPHO\�+70/�IRUPiEDQ�WiUROMD�D]�|VV]HV�SURJUDPo-

záshoz szükséges leírást, ill etve az irodalomjegyzékben megtalálható ennek részben

PDJ\DUUD�IRUGtWRWW�YiOWR]DWiQDN�OHO�KHO\H�LV��$�IHQW�IHOVRUROW�SURJUDPRN�W|EE�KHO\U�OJ\&MWKHW�N�|VV]H��D�NpQ\HOHP�NHGYppUW�H]HN�PLQG�OHW|OWKHW�N�YLV]RQW�DZZZ�PHG]L�KX�SKS�ZHEKHO\U�O�LV��D]�DQJRO�Q\HOY&�Np]LN|Q\YYHO�HJ\�WW��V�W�Dwebhelyen megtalálható a Javascript nyelv referencia anyaga is.

A telepítés menete Windows rendszeren:

Ahhoz, hogy eredményes legyen a telepítés, a Win2000 és a WinXP rendszereken

rendelkeznünk kell adminisztrátori jogokkal. Ennek hiányában is sok minden megvaló-

VtWKDWy��GH�D]�HUHGPpQ\�EL]RQ\WDODQ�OHV]��(O�V]|U�D�3+37ULDG�FVRPDJRW�WHOHStWM�N�DWHOHStW�NpV]OHW��H[H�IiMO�HOLQGtWiViYDO���DMiQODWRV�H]W�D�)XWWDWiV�PHQ�SRQWEyO�YpJH]QL��$IRO\DPDW�DXWRPDWLNXV�pV�PLQGHQW�EHiOOtW�HJ\�DODSpUWHOPH]pVQHN�PHJIHOHO�HQ��D]D]�OpWUe-

hoz egy apache könyvtárat a C: meghajtón és abban helyezi el az összes szükséges fájlt

és könyvtárat, így például a htdocs könyvtárat is, amely a webszerverünk gyökér-

könyvtára lesz. Ebben már van egy-két információs fájl , egy index.php fájl és a

phpadmin könyvtár is, amely egy php nyelven írt MySQL adatbázis adminisztrációs

program. A telepített Apache webszerver az alapértelmezett konfigurációs beállítások-

QDN�PHJIHOHO�HQ�D�ORFDOKRVW�,3�FtPHQ�WDOiOKDWy�PHJ��������������$�ZHEV]HUYHUW�D]RQEDQmint szolgáltatást el kell i ndítani (Futtatás menüpontból c:\apache\Apache.exe; a

webszerver DOS ablakban fut, amely természetesen minimalizálható) és csak ez után

LQGtWMXN�D�E|QJpV]�W��DPHO\EHQ�D�ORNiWRUVRUED�D�KWWS���ORFDOKRVW�FtPHW�tUMXN�pV�HUUH�DHTTP kérésre a webszerver a c:\apache\htdocs könyvtárban található index.php fájlt

szolgáltatja ki. Amennyiben 404-es hibát (azaz a kért fájl nem található) kapunk, el�-

V]|U�PLQGLJ�J\�]�GM�QN�PHJ��IXW�H�D]�$SDFKH���D�:LQGRZV�YLOiJiEDQ�LJHQ�N|QQ\&�Hl-feledkezni a manuális indításról. A modulként dolgozó PHP interpreter már lefuttatta a

3+3�NyGRNDW�pV�D�PHJIHOHO��+70/�NLPHQHWHW�GROJR]]D�IHO�D�E|QJpV]���W|NpOHWHVHQ

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

33/89

azonos rendszerben, mint egy távoli szervernél. Ezért természetesen a közvetlenül a

E|QJpV]�EHQ�NLQ\LWRWW��SKS�IiMORN�QHP�pUWHOPH]KHW�N��D�E|QJpV]��|QPDJiEDQ�FVDNHTML és Javascript nyelveken ért.

Ezzel lényegében kész a webszerverünk, de még számos probléma lehet. Gya-

korlati tapasztalat, hogy amennyiben IIS szervert telepítünk az Apache szerver után, az

operációs rendszer (WinXP) felülbírálja a localhost alapértelmezett könyvtárát és a saját

rendszere szerint a C:\ meghajtón az Inetpub\wwwroot könyvtár lesz a gyökérkönyvtár.

$PHQQ\LEHQ�D�3+37ULDG�RW�~MUDWHOHStWM�N��DNNRU�YLVV]DiOO�D�UHQGV]HU��GH�KD�PLQGNHWW�Whasználni kívánjuk, akkor az Apache konfigurációs fájlt kell beállítani. Ezt az

c:\apache\conf könyvtárban találjuk meg, httpd.conf14 néven és a Jegyzettömb, vagy

PiV�HJ\V]HU&�V]|YHJV]HUNHV]W��VHJtWVpJpYHO�NpW�KHO\HQ�iW�NHOO�tUQL�D]�DSDFKH�KWGRFVbejegyzést Inetpub/wwwroot bejegyzésre (rákeresünk és átírjuk, az egyik a

DocumentRoot, a másik a Directory neve). Természetesen a konfigurációs fájl módosí-

tását addig nem veszi figyelembe a rendszer, amíg le nem fut, azaz az Apache szolgál-

WDWiVW�OHiOOtWMXN��EHFVXNMXN�D�'26�DEODNRW��EHFVXNMXN�D�E|QJpV]�W��pV�~MUDLQGtWMXN�D]Apache webszervert a már ismert módon.

A telepítéssel nem csak a webszerver, hanem egy MySQL adatbázis - továbbá an-

nak kiszolgáló program csomagja - is felkerült a rendszerünkre. Mivel dinamikus webes

alkalmazások szinte elképzelhetetlenek adatbázis nélkül, ez nagy segítség a számunkra,

FVDN�PHJ�NHOO�WDQXOQXQN�D�KDV]QiODWiW�pV�OHJHO�V]|U�D�Eeállítását.

A MySQL a telepítés során szintén alapbeállításokat kap, azaz nem kell sokat

EDMOyGQXQN�YHOH��EiU�D�UHQGV]HU�PDJD�D�VRNIpOH�IHODGDWQDN�PHJIHOHO�HQ�ERQ\ROXOW���$]adatok az apache\mysql\data könyvtárba kerülnek, ide a telepítéssel együtt már bekerül

egy teszt adatbázis és egy mysql adatbázis, ez utóbbi a felhasználók nyilvántartását

szolgálja és a rendszer saját adatainak tárolását végzi. NE NYÚLJUNK HOZZÁ!

Alapértelmezésben települ egy adminisztrátor felület is, ez a winmysqladmin,

DPHO\HW�V]�NVpJ�HVHWpQ�D]�D]RQRV�QHY&��H[H�IiMO�VHJtWVpJpYHO�LQGtWKDWXQN�D]

14�KWWSG�FRQI�KLSHUWH[W�WUDQV]IHU�SURWRNROO�GpPRQ�NRQILJXUiFLyV�IiMO��D�/LQX[�8QL[�UHQGV]HUHN�HJ\V]HU&szöveges konfigurációs fájl szerkezete. Érdemes áttanulmányozni, mert sok minden állí tható itt be,

DPHO\UH�NpV�EE�HVHWOHJ�V]�NVpJ�QN�OHKHW��$�# jelzi a megjegyzéseket, az Apache induláskor nem veszi

figyelembe az ezzel védett sorokat.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

34/89

apache\mysql\bin könyvtárból. Amennyiben feltelepült, akkor minden Windows indí-

WiVQiO�PHJMHOHQLN���D]�PVFRQILJ�ED�EHNHU�O��P\VTOG�RSW�SURJUDP�LQGtWMD���pV�D�WiOFiQN|]OHNHGpVL�OiPSD�LNRQNpQW�OiWKDWy��+D�D�]|OG��YLOiJtW��D]�DGPLQ�IHO�OHW�P&N|GLN�pV�D]DGDWEi]LVRN�UHQGHONH]pVUH�iOOQDN��$PHQQ\LEHQ�QHP�P&N|GLN�YDJ\�QHP�LV�OiWKDWy��DIHQWHEE�OHtUW�SURJUDPPDO�PDQXiOLVDQ�LQGtWKDWMXN��LOOHWYH�D]�~V]yPHQ�MpE�O�LQGtWKDWy�D]adatbázisszerver (jobb egér klikk az ikonra, Show me hozza be az ábrán is látható ke-

]HO�IHO�OHWHW�LOOHWYH�D�:LQ�[�LOOHWYH�:LQ17�PHQ�SRQWRNEyO�pUKHW��HO�D]�LQGtWiV�OHiOOtWiVPHQ�SRQW���8J\DQDNNRU�H]�D�NH]HO�IHO�OHW�FVDN�D]�DGDWEi]LVRN�PHQHG]VHOpVpW�NpSHVelvégezni és a kapcsolatokat tartja nyilván, az egyes adatbázisok ugyan itt is létrehoz-

hatóak (Admin felület - Databases fül - jobb egér klikk a LOCALHOST gyökérelemen)

GH�WiEOiN�PiU�QHP�KR]KDWyN�OpWUH�H]HQ�D�PyGRQ��64/�V]DNpUW�NQHN�RWW�D�P\VTO�Sa-

UDQFVVRURV�NH]HO�IHO�OHWH��D�0\64/�0RQLWRU��DSDFKH?P\VTO?ELQ?P\VTO�H[H��DPHO\HQkeresztül minden megvalósítható az SQL ismeretében, kevésbé gyakorlottaknak pedig a

KWWS���ORFDOKRVW�SKS0\$GPLQ�LQGH[�SKS�HOpUpVL�~WRQ�WDOiOKDWy�D]RQRV�QHY&�DGDWEi]LV�NH]HO��SURJUDPRW��YDJ\�D�PpJ�EDUiWViJRVDEE�0\64/�)URQW�SURJUDPRW�DMiQORP��OiVGNpV�EE���3HUV]H�D]�DGDWEi]LV��D�WiEOiN��D�PH]�N�PLQG�OpWUHKR]KDWyN�3+3�SURJUDPEyO�LV�erre majd a gyakorlati részben találunk példákat.

MySQL Front telepítése

Beszerzését lásd fentebb, telepítése is a fentebb leírtakkal azonos módon, az .exe

fájl i ndításával, simán megy. Mindenképpen egy MySQL adatbázis szerver felrakása

XWiQ�WHOHStWV�N��(OV��LQGtWiVDNRU�NpU�HJ\�ORJLQW�pV�MHOV]yW�D]�DGDWEi]LV�V]HUYHUKH]��W|UWé-

Q��NDSFVROyGiVKR]��H]�YLV]RQW�PHJHJ\H]LN�D�ZLQP\VTODGPLQ�NH]HO�IHO�OHWHQ�OiWKDWylogin/jelszó kombinációval, ami viszont - ha csak nem állítottuk át - megegyezik a gé-

pünk operációs rendszerének loginjével és jelszavával. Ez után létre kell hozni magát az

adatbázis kapcsolatot, megadva az adatbázis szervert futtató számítógép IP címét vagy

domain nevét és a felhasználó nevet. Itt viszont alapértelmezésben a fenti rendszert lo-

gikusan követve a localhost lesz a domain név és root lesz a felhasználónevünk. Ez után

egy sokoldalú felületen tudjuk kezelni az adatbázisainkat, mindenkinek javasolom a

rendszer kiismerését és alapos kipróbálását, de részletes ismertetése egy újabb jegyzet

anyaga lehetne. Ismerete viszont bármiféle adatbázis kezelési problémánkban segíthet,

hiszen kattintásokkal és SQL parancsokkal egyaránt alakíthatjuk adatbázisunkat és meg

is tanulhatjuk ezzel az eszközzel egy komolyabb adatbázis kezelését.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

35/89

PHPEdit telepítése

PHPEdit 0.6 verzió:�(]�D�V]HUNHV]W�SURJUDP���W|EE�PiV�KDVRQOy�WDOiOKDWy�D]interneten szerteszét - kényelmessé teheti a munkát, mert a PHP szintaxis kiemelésével,

D�NyG�DXWRPDWLNXV�VWUXNWXUiOiViYDO�pV�KHOS�IiMORN�LQWHJUiFLyMiYDO�HU�WHOMHV�HV]N|]UH�We-

szünk szert.

A fentebb megadott helyen található install programot elindítva simán feltelepít-

KHW��pV�PiU�FVDNQHP�KDV]QiODWUD�LV�NpV]��$ODSpUWHOPH]HWWHQ�D�3URJUDP�)LOHV�PDSSiEDtelepül PHPEdit mappát hozva létre. A telepítés során - francia nyelven - felkínálja a

.php és az .inc kiterjesztések regisztrálását a programhoz - fogadjuk el, ha nincs más

távolabbi elképzelésünk - és máris írhatjuk PHP programjainkat. A programok az F9

J\RUVELOOHQW\&YHO�YDJ\�D]�HV]N|]VRURQ�WDOiOKDWy�5XQ�]|OG�Q\tO�JRPEEDO�IXWWDWKDWyN�pV�Dkimenet - némi kommentár mellett - a View → Debugger Windows → Output ablakban

látható. Vigyázni kell azonban, mert ez a kimenet egy hagyományos szöveges felület és

ezért itt a soremelés például \n és nem <br> mint a webszerveren futtatott PHP kód

HVHWpEHQ��(]�SHUV]H�ORJLNXV��LWW�QHP�+70/�NLPHQHW�NpV]�O��KDQHP�HJ\V]HU&�V]|YHJHV�A help rendszert viszont ki kell egészíteni. A Program Files → PHPEdit → map-

pában találunk egy help mappát, azon belül a chm mappába telepíthetjük a .chm típusú

PHP kézikönyvet és a PHP mappába a html típusú kézikönyvet helyezhetjük el. Ezeket

V]LQWpQ�PHJWDOiOKDWMXN�D�IHQWHEE�PHJDGRWW�ZHEKHO\HQ�pV�D]�HJ\V]HU&�EHPiVROiV�XWiQmár csak a PHPEdit.ini fájlt kell szerkesztenünk a webhelyen megadott minta .ini fájl

szerint. Ezzel részben helyzetérzékeny súgót kapunk, ami az egyes metódusok begépe-

OpVpQpO�PiU�IHONtQiOMD�D�OHKHW�VpJHNHW�LOOHWYH�D]�HJ\HV�I�JJYpQ\HN�QHYpQ�iOOYD�D�KHOSHO�KtYiVDNRU�PHJMHOHQLN�D�KWPO�IRUPiEDQ�KR]]iIpUKHW��LQIRUPiFLy�D]�DGRWW�Q\HOYL�HOHm-

U�O��$�UHQGV]HU�YLV]RQ\ODJ�HJ\V]HU&��iP�HU�WHOMHV���VHJtWVpJpYHO�WHV]WHOKHWM�N�NtVpUOHWLkódjainkat webszerver nélkül is és minden további nélkül használhatjuk adatbázis kap-

csolatokkal is - jómagam a webes programozástól függetlenül, számos szöveg feldolgo-

]iVL�SUREOpPiW�pV�DGDWEi]LV�IHOW|OWpVW�ROGRWWDP�PHJ�H]HQ�HJ\V]HU&�HV]N|]�VHJtWVpJpYHO�Nem hallgathatom el, hogy mint minden fejlesztés alatt álló eszköznek, ennek is vannak

KLEiL��LG�QNpW���IUDQFLD�Q\HOY&���KLED�]HQHWHNNHO�ERPEi]��GH�KD�D�NyGROiV�N|]EHQ�W|EE�kevesebb rendszerességgel mentettünk, ezeket nyugodt szívvel figyelmen kívül hagy-

hatjuk - legfeljebb újraindítjuk a programot, ha nagyon okvetetlenkedik.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

36/89

PHPEdit 0.8 verzió: A jegyzet írása során került kezembe ennek a programnak

HJ\�PDJDVDEE�V]LQW&�YiOWR]DWD��DPLW�V]LQWpQ�EHUDNWDP�3+3(GLW��QpYHQ�D�WDQWiUJ\�SURg-

UDPFVRPDJMiED��(]�PiU�D�����YiOWR]DW��WHUPpV]HWHVHQ�W|EEHW�WXG��PLQW�HO�GMH��D�OHJIRn-

WRVDEE�D�KHOSUHQGV]HU�PHJROGiVD��$�WHOHStWpVKH]�YDJ\�D]�LQWHUQHWU�O�NHOO�OHW|OWHQL�D�Ni-HJpV]tW�NHW��YDJ\�D�PL�HVHW�QNEHQ�PHOOpNHOWHP�D��]LS�IiMOEDQ�D]RNDW�D��JLS�NLWHUMHV]WpV&fájlokat, amelyek mindezeket tartalmazzák. Egy közös könyvtárba kell kibontani és

onnét indítani a telepítést és a rendszer mindent felismer és helyre tesz. Jöhet a kódolás!

Végre elkészült a rendszerünk, most már csak egy-két tanács az összehangolás-

hoz. Természetesen mindenki maga alakítja ki a munkamódszerét, én csupán az általam

alkalmazott és számomra bevált rendszert ismertetem.

%iUPHO\�NRPRO\DEE�+70/�V]HUNHV]W�UHQGV]HUEHQ�YDQ�OHKHW�VpJ�D�V]HUNHV]WpValatt álló webhely modellezésére. Így a Microsoft FrontPage esetében is beállítható,

hogy webhelyen dolgozzunk, ez annyit jelent, hogy kijelölhetünk egy gyökérkönyvtárat

a gépünkön, amelynek könyvtárszerkezete meg fog egyezni a tényleges webhely szer-

kezetével (fájl – létrehozás – lap vagy webhely – üres webhely – (beállítj uk a kívánt

N|Q\YWiUDW�����2.���6]iPXQNUD�H]�pUWHOHPV]HU&HQ�D]�&�?DSDFKH?KWGRFV�PDJD�YDJ\�Dn-

QDN�YDODPHO\LN�EHOV��PDSSiMD�OHV]��(]�XWiQ�D�V]HUNHV]W�SURJUDP�IHOLVPHUL�pV�UHJLV]t-UiOMD�D�ODSRN�N|]|WWL�NDSFVRODWRNDW��KD�D]RNDW�LWW�KR]]XN�OpWUH��0iV�V]HUNHV]W�SURJUDPRNáltalában alapértelmezetten tudják, de a FrontPage esetében is beállítható, hogy a .php

és .inc kiterjesztéseket is megnyissák, ne a Jegyzettömböt kínálja fel ezek szerkesztésé-

KH]��HV]N|]|N�±�EHiOOtWiVRN�±�V]HUNHV]W�SURJUDPRN�SDQHO��LWW�DGKDWy�PHJ��KRJ\�PHO\LNNLWHUMHV]WpVKH]�PHO\LN�V]HUNHV]W�SURJUDPRW�KDV]QiOMD�DODSpUWHOPH]HWWHQ����8J\DQH]W�DJ\|NpUN|Q\YWiUDW�KDV]QiOMXN�D�3+3(GLW�V]HUNHV]W�SURJUDPPDO�LV��FVDN�D]W�NHOO�pV]EHQtartani, hogy éppen mikor melyik programmal szerkesztjük a fájlt és mentsünk prog-

UDPYiOWiV�HO�WW��$�OiWV]yODJ�ERQ\ROXOW�EHiOOtWiV�pUWHOPH��KRJ\�J\RUVDQ�pV�PLQLPiOLV�Ki-bával dolgozhatunk a PHP részeken, de ugyanakkor nem kell hosszadalmas HTML kó-

GRNDW�Np]]HO�EHtUQL��7HNLQWV�N�~J\��KRJ\�D�+70/�V]HUNHV]W�QN�EL]WRVtWMD�D�YL]XiOLVprograPR]iV�HV]N|]HLW�pV�D�3+3(GLW�D�NyGV]HUNHV]W�QN�

Egy vegyes kódolású (PHP + HTML + Javascript) weboldal elkészítése

A webes alkalmazások sok szempontból különlegesek, de a legfontosabb az ada-

tok kezelése. Olyan szoftver alkalmazást kell készíteni, amely sok önálló kisebb prog-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

37/89

ramból áll , sok belépési ponttal és ugyanannyi kilépési ponttal (nem hagyhatunk például

egy fájlt vagy adatbázist nyitva egy lap elhagyása esetén) és ezek még nem is ismerik

egymás adatait, azok átadásáról külön gondoskodni kell . Az adatbevitel és feldolgozás

külön egységen történik, a felhasználó megnyilvánulásaira csak egy másik gép tud rea-

JiOQL��LOOHWYH�HO�UH�OH�NHOO�SURJUDPR]QL�D�YiUKDWy�DGDWRNWyO�I�JJ��OHKHW�VpJHNHW��KD�QHPDNDUMXN�D]�|VV]HV�YiODV]OpSpVW�D�V]HUYHUHQ�OHNH]HOQL���DPL�pV]OHOKHW��LG�EHOL�NpVOHNHGé-

seket okoz. Nem használhatjuk a kliens gép memóriáját adatok tárolására, az összes

DGDWIRUJDORP�V]�NVpJV]HU&HQ�D�NOLHQV�pV�D�V]HUYHU�N|]|WW�]DMOLN��(]pUW�D]�HJ\LN�OHJIRn-

tosabb dolog az adatforgalom és a navigáció megtervezése, hogy minimalizálni tudjuk a

szerver felé irányuló kérések számát.

$�IHOKDV]QiOyL�IHO�OHWHN�HVHWpEHQ�PpJ�KD�HJpV]HQ�HJ\V]HU&�LV�D�IHODGDW��PLQGLJtervezzünk! Érdemes akár egy darab papírra felvázolni a webes felületeknél a már is-

PHUWHWHWW�iOWDOiQRV�HOYHN�PLDWW�RO\�IRQWRV�N�OV��PHJMHOHQpVW��7HUYH]�SURJUDP�KLiQ\iEDQ��NLKDV]QiOYD�D�ZHEHV�DONDOPD]iVRN�HU�VHQ�GRNXPHQWXPRV�MHOOHJpW���DNiU�QpKiQ\�$��HVODSRQ�LV�HONpV]tWKHW��D]�HJ\HV�ODSRN�Yi]ODWD�pV�MHO|lKHW��D]RN�ORJLNDL�NDSFVRODWD�

Gondoljuk végig, mit is kell csinálni az adott weblapon! Adatbevitel vagy adat-

PHJMHOHQtWpV�D�G|QW��IXQNFLyMD"�+RYD�NHU�OQHN�D]�DGDWRN"�0iVLN�ZHEODSUD�YDJ\�DGDt-Ei]LVED"�(]HNW�O�I�JJ��KRJ\�PHO\LN�ODSRQ�PLO\HQ�NyGRW�NHOO�HONpV]tWHQL��+RO�pV�KRJ\DQHOOHQ�UL]]�N�D�EHYLWHOUH�NHU�O��DGDWRNDW"�&pOV]HU&�ERQ\ROXOWDEE�DGDWRN�HVHWpQ�D�NOLHQVROGDORQ�LV�HOYpJH]QL�D]�DGDWRN�HOOHQ�U]pVpW��GH�VHPPLNpSSHQ�VHP�PHOO�]KHWM�N�D�V]Hr-ver olGDOL�HOOHQ�U]pVW�

1HP�V]pS�GRORJ�LO\HW�IHOWpWHOH]QL�M|YHQG��OiWRJDWyLQNUyO��GH�JRQGROMXQN�D�URVVz-

indulatú felhasználókra! Az internet publikus, nem tudjuk meghatározni, milyen felté-

telek mellett böngészhet a felhasználó - egy internet kávézóban bárki válla felett más is

ILJ\HOKHWL�D�NpSHUQ\�Q�W|UWpQ�NHW�pV�D]�RWWKDJ\RWW�JpSHQ�WiUROW�ZHEODSRN�VHP�YpGKHW�N�+D�YDQ�PLW�YpGHQ�QN���EHOV��DGDWRN��pU]pNHQ\�DGDWRN���D]RNDW�EL]WRQViJRV�PyGRQ�HONHOO�]iUQL�D]�LOOHWpNWHOHQHN�HO�O��QHP�NHU�OKHWQHN�NL�VHPPLNpSSHQ�VHP��(]HNHW�PLQG�Dnavigáció során, mind a belépéseknél észben kell tartani, például GET metódussal nem

adunk át érzéNHQ\�DGDWRW��D]�85/�KH]�I&]L�KR]]i�D]�DGDWRNDW���A szkriptnyelvek esetében éppúgy érvényesek az általános programozási elvek,

mind a hagyományos programozásnál. Igyekezzünk ismételten felhasználható kódot

tUQL��PHJpUL��$�ZHEHV�DONDOPD]iVRN�VWDQGDUG�pStW�HOHPHLW�HOpJ�HJ\V]HU�SUHFt]HQ�HONé-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

38/89

V]tWHQL��pV�EiUPHO\�DONDOPD]iVXQNED�EHLOOHV]WKHW���)yUXPRN��GiWXP�pV�LG�NH]HOpVHN�szavazógépek, látogató számlálás, jelszógenerálás és még sok egyéb újrafelhasználható

komponens PHP kódja hozható létre mint osztály és ezt már csak példányosítani kell

(objektum létrehozása!) az újrafelhasználáshoz. A forráskód megjegyzésekkel való el-

látása rendkívül fontos, hogy a HTML kóddal felhígított forrásban tájékozódni tudjunk.

Én például minden oldal elején leírom magamnak, mit akarok megvalósítani az adott

IiMOEDQ�pV�D]�HJ\HV�P&YHOHWHNHW�NyGROiViW�LV�PHJMHJ\]pVHNNHO�NtVpUHP«$]W�YLV]RQWVRKDVHP�IHOHMWV�N�HO��KRJ\�V]NULSWQ\HOYU�O�OpYpQ�V]y��D�IRUUiV�RWW�YDQ�D�ZHEV]HUYHUHQ�pVD�3+3�pUWHOPH]��HJ\�HVHWOHJHV�KLEiMD�PLDWW��QHP�pUWHOPH]L�D�NyGRW�WHOMHV�HJpV]pEHQ��D]egész esetleg kikerülhet a felületre - határozottan kínos, ha ilyenkor a felhasználó meg-

tudja, hogyan vélekedtünk róla kódolás közben - egyszóval csínján bánjunk a jópofa

megjegyzésekkel…

Ha már mindent végiggondoltunk, megterveztünk, jöhet a kódolás. Ha grafika is

YDQ�D]�ROGDORQ��DNNRU�D]W�NHOO�HO�V]|U�HONpV]tWHQL��KRJ\�D]�HJ\HV�NLtUiVRN�HOKHO\H]KHW�Nlegyenek az elképzelés szerint. Ennek hiányában vagy ennek kiegészítéseként készítjük

HO�D�+70/�Yi]DW��SpOGiXO�D]�&UODSRN�HOHPHLW�IHOUDNMXN��HOUHQGH]]�N��SpOGiXO�WiEOi]Dt-ban) majd beállítj uk. Ekkor már tudnunk kell a szükséges adathordozó változókat, hi-

V]HQ�D]�&UODSPH]�N�QHYHL�OHV]QHN�D�YiOWR]yN�QHYHL�LV�&pOV]HU&�HONpV]tWHQL�D]�|VV]HV�V]�NVpJHV�ZHEODSRW��PpJ�D�3+3�iOWDO�JHQHUiOWDN

vázát is és érdemes létrehozni a navigációs kapcsolatokat. Felbukkanó ablakoknál meg-

tUKDWyN�D�V]�NVpJHV�-DYDVFULSW�NyGRN�pV�DNiU�LGHLJOHQHV�OLQNHN�VHJtWVpJpYHO�WHV]WHOKHW��DP&N|GpV��6RNV]RU�LO\HQNRU�GHU�O�NL��KRJ\�YDODPL�W~O�QHKp]NHVUH�VLNHU�OW��GH�LO\HQNRUminimális pluszmunkával még átalakítható a rendszer.

(]W�D�V]HUNHV]WpVW�NHOO��UXWLQQDO�J\RUVDQ�PHJYDOyVtWKDWMXN�D�+70/�V]HUNHV]W�programok segítségével, könnyen "összekattinthatók" az oldalak. Megjegyzem, hogy ez

nem pótolja a HTML tudást, mert a PHP kóddal sokszor kell HTML elemeket kiíratni,

GH�D�YL]XiOLV�V]HUNHV]W�SURJUDP�VHJtWVpJpYHO�J\RUVDEEDQ�PHJWDQXOKDWyN�D�V]�NVpJHVkódok is. Arról semmiképpen ne feledkezzünk el, hogy a nyers HTML kód sokszor üt-

N|]LN�D�3+3�NyGRNNDO�tJ\�D�Np]L�V]HUNHV]WpV�PHJLQW�FVDN�QHP�PHOO�]KHW���$�PDJDPUpV]pU�O�H]pUW�NHGYHOHP�MREEDQ�D�NHYHVHEE�DXWRPDWL]PXVW�KDV]QiOy�UpJHEEL�ZHEHV�V]Hr-NHV]W�SURJUDP�YiOWR]DWRNDW��SpOGiXO�'UHDPYHDZHU����GH�H]�QHP�LQJ\HQHV��PHJ�NHOOvásárolni /).

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

39/89

1H�IHOHGNH]]�QN�PHJ�D�J\DNRUL�WHV]WHOpVU�O��$GDWEi]LVEyO�Q\HUW�DGDWRN�V]pSHQPRGHOOH]KHW�N�GHILQLiOW�YiOWR]yNNDO��tJ\�DGDWEi]LV�LJpQ\EHYpWHOH�QpON�O�NLSUyEiOKDWyN�DNyGRN��)iMO�tUiVRN�pV�ROYDViVRN��V]WULQJIHOGROJR]iVRN�V]LQWpQ�MyO�PRGHOOH]KHW�N�SpOGiXOD�3+3(GLW�VHJtWVpJpYHO��ÒM�RV]WiO\RN��PRGXORN�HVHWpEHQ�LV�pUGHPHV�HJ\V]HU&VtWHWW�WHV]t-UHQGV]HUHNHW�OpWUHKR]QL��%iU�IHQWHEE�D�JUDILND�HOV�GOHJHVVpJpU�O�tUWDP��WHUPpV]HWHVHQnem érdemes egy bonyolult logikai rendszert a grafikai realizálás HTML kódjai között

tesztelgetni.

Természetesen még sok elméleti ismeretet lehetne felsorolni, de térjünk át a sok-

kal szórakoztatóbb gyakorlati megvalósításokra. Mostantól kezdve kedves olvasóm el-

mélettel csak az esetleges magyarázatoknál fog találkozni és programozási feladatokon

iW�PXWDWRP�EH�D�ZHEHV�IHMOHV]WpVHN�J\DNUDEEDQ�HO�IRUGXOy�HOHPHLW��1HP�IRJODONR]RP�DN�OV��PHJMHOHQpVVHO��V]tQHNNHO��KRJ\�D�VRN�IRUPi]y�NyG�QH�IHGMH�OH�D�OpQ\HJHW��$�MREEiWWHNLQWKHW�VpJ�PLDWW�tJ\�I�OHJ�WiEOi]DWRkban rendezzük el az egyes elemeket

Gyakor lati feladatok

Jelszavas belépés

specifikáció

%L]WRVtWVXQN�HJ\V]HU&�ORJLQ�MHOV]DYDV�EHOpSpVW�YpGHWW�]yQiED�pV�D�MHOV]y�PHJYil-WR]WDWiViW�LV�WHJ\�N�OHKHW�Yp��$GDWEi]LV�PRVW�QHP�iOO�UHQGHONH]pVUH��WHKiW�D�OHKHW��OHg-

HJ\V]HU&EE�PHJROGiVW�NHOO�YiODV]WDQXQN���IiMOEDQ�WiUROMXN�D]�DGDWDLQNDW�a feladat elméleti háttere

$�IHODGDW�NpW�N�O|Q�UpV]E�O�iOO��H]HN�HJ\PiVKR]�FVDN�OD]iQ�NDSFVROyGQDN��&pOV]e-

U&�D�ZHEKHO\�Q\LWyODSMiQ�YDJ\�EiUPHO\�PiV�IHO�OHWHQ��OLQNNpQW�HOKHO\H]QL�D�MHOV]y�Yil-WR]WDWiVL�OHKHW�VpJHW��DPHO\UH�NDWWLQWYD�IHOEXNNDQy�DEODNEDQ�YpJH]KHWL�HO�D�IHOKDV]QiOy�DMHOV]yFVHUpW��WHUPpV]HWHVHQ�N|WHOH]��D]�~M�MHOV]y�NpWV]HUL�EHtUiVD��8WiQD�YLVV]DQDYLJá-

lunk a beléptetést biztosító felületre, hogy rögtön kipróbálható legyen az új jelszavas

belépés. Mind a jelszócsere, mind a belépés HTML form��&UODS��VHJtWVpJpYHO�W|UWpQLN�D]�DGDWRNDW�D�V]HUYHUHQ�HOOHQ�UL]]�N�pV�D]RN�KHO\HVVpJH�HVHWpQ�HOIRJDGMXN�D]�DGDWRW��MHl-szócsere esetében megkívánhatunk bizonyos bonyolultságot is, például regulár is kife-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

40/89

jezés15 ill esztéssel) ill etve átirányítjuk a felhasználót a védett zónába. A jelszavas belé-

pés a védelem mellett elegáns módon alkalmazható a felhasználó azonosítására, például

Q\HOYKDV]QiODW��HJ\pQL�SURILO�V]HPSRQWMiEyO�YDJ\�EL]RQ\RV�V]LQW&�KR]]iIpUpVHN�EL]Wo-

sítására.

tervezés

.pW�&UODSRW�IRJXQN�OpWUHKR]QL��D]�HJ\LNHW�PDJiQ�D]�ROGDO�IHO�OHWpQ��D�PiVLNDW�Fpl-V]HU&HQ�N�O|Q�IiMOEDQ��DPL�FVDN�H]W�WDUWDOPD]]D�pV�HQQHN�PpUHWH�D�IHOEXNNDQiVW�EL]WRVtWy-DYD6FULSWE�O�V]DEiO\R]KDWy���HUUH��J\HOM�QN�D]�&UODS�REMHNWXPRN�HOKHO\H]pVHNRU��$bevitel természetesen POST metódussal történik, hogy ne legyen látható az URL-ben.

$]�HJ\V]HU&VpJ�NHGYppUW�D�SHU]LV]WHQFLiW16�EL]WRVtWy�IiMOEyO�D�MREEDQ�NH]HOKHW��DVV]RFi-DWtY�W|PEEH�pV�RQQpW�D�IiMOED�YLVV]DtUiVW�YpJ]��I�JJYpQ\HNHW�N�O|Q���LQF��IiMOEDQ�Ke-

lyezzük el (tombok.inc ), hiszen ezeket két helyen is használni kívánjuk.

%iU�D�VSHFLILNiFLyEDQ�N�O|Q�QHP�WpUW�QN�NL�HUUH��EL]RQ\RV�HOOHQ�U]pVHNHW�LV�Ypg-

]�QN�PDMG�pV�KLED�HVHWpQ�D�PHJIHOHO��KHO\HQ��]HQHWEHQ�pUWHVtWM�N�D�IHOKDV]QiOyW��KRJ\hol és mit hibázott.

megvalósítás (kód)

tombok.inc fájl kódja:<?php//fuggveny, amely beolvas egy fajlt asszociativ tombbe es visszaadja atombotfunction tomb_feltolt( $filenev ){ if (! $fp = fopen( $filenev , "r" )) //ha nem nyithato meg, hamiserteket ad vissza return false ; while (!feof( $fp )) { $sor =fgets( $fp , 256 ); list( $kulcs , $ertek ) = split( " \t " , $sor ); $asszoc_tomb [ $kulcs ] = $ertek ; } fclose( $fp ); return $asszoc_tomb ;}

/*

15�0HJIHOHO��V]DEiO\RN��KHO\HWWHVtW��NDUDNWHUHN�DONDOPD]iViYDO�HO�iOOtWKDWy�PLQWD��DPHO\HW�I�JJYpQ\segítségével i llesztünk a kérdéses karaktersorozatra. Reguláris expresszióval például meghatározhatjuk,

PL�D]�HOIRJDGKDWy�WHOHIRQV]iP�YDJ\�HPDLO�FtP�IRUPiWXP�HJ\�EHYLWHOL�PH]�EHQ�16�3URJUDPR]iV��V]RIWYHUWHUYH]pV�VRUiQ�SHU]LV]WHQFLD�DODWW�D]�DGDWRN�HOYL�WiUROiVL�OHKHW�VpJpW�pUWM�N�iOWDOá-

nosViJEDQ��HQQHN�PHJYDOyVtWiVD�OHKHW�HJ\�DGRWW�IRUPiWXPX�IiMO�YDJ\�WHWV]�OHJHV�DGDWEi]LV�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

41/89

* fuggveny, amely kiir egy asszociativ tombot fajlba,* ha sikerul, igaz erteket ad vissza*/function tomb_kiir( $tomb , $filenev ){ if (! $fp = fopen( $filenev , "w" )) return false ; while (list( $kulcs , $ertek ) = each( $tomb )) { $ertek = trim( $ertek ); $sor = $kulcs . " \t " . $ertek . " \n " ; fputs( $fp , $sor ); } fclose( $fp ); return true ;}?>

index.php fájl kódja:<?php//ez tartalmazza a fajl kiolvasashoz szukseges fuggvenytinclude ( "tombok.inc" );

//ha kitoltottek a login es jelszo mezoketif ( $login != "" && $pwd != "" ){ //feltoltunk egy asszociativ tombot a tarolo fajlbol $tomb = tomb_feltolt( "jelszo.txt" ); /* * megnezzuk, van-e ilyen login - jelszo par a tombben * a trim az esetleges sorveg es egyeb nem lathato * karakterek eltavolitasara szolgal */ if (trim( $tomb [ $login ]) == trim( $pwd)) { echo ( "<script>location.replace('belso.php');</script>" ); exit(); }}?><html><head><title>Jelszavas belépés</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"><style type="text/css"><!--td {font-family: Arial, Helvetica, sans-serif;font-size: 10pt}.table {font-weight: bold;color: #330000;background-color: #FFFFCC; border: 1px #CC9933 solid}--></style></head>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

42/89

<body bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="6"align="center"><tr><td colspan="2"><p><b>Nyitóoldal</b></p></td></tr><tr><td width="358" >&nbsp;</td><td align="right" width="225"><form name="belepes" method="post" action="" ><table width="220" cellspacing="0" cellpadding="3" class="table"><tr><td><div align="center"> <p>Jelszavas belépés</p> <p >login: <input type="text" name="login" size="15" maxlength="15"> </p> <p >jelszó: <input type="password" name="pwd" size="15" maxlength="15"> </p> <p > <input type="submit" name="Submit" value=" Belépés "> </p></div></td></tr></table></form><p>&nbsp;</p><p align="center"><b><a href="javascript:void()"onClick="window.open('jelszomod.php','JELSZOMOD','width=400,height=400')">jelszócsere</a></b></p></td></tr></table></body>

</html>

jelszomod.php fájl kódja:

<?php//ez tartalmazza a fajl kiolvasashoz, irasahoz szukseges fuggvenyeketinclude ( "tombok.inc" );

$hiba = "" ;$loginhiba = "" ;$siker = "" ;//ha a login, regi jelszo kitoltveif ( $login != "" && $regipwd != "" ){ //feltoltunk egy asszociativ tombot a tarolo fajlbol $tomb = tomb_feltolt( "jelszo.txt" ); if (trim( $tomb [ $login ]) == trim( $regipwd )) { if ( $ujpwd1 == $ujpwd2 && $ujpwd1 != "" ) {

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

43/89

$tomb [ $login ] = $ujpwd1 ; tomb_kiir( $tomb , "jelszo.txt" ); $siker = "<br>A jelszó módosítás megtörtént!" ; } else $hiba = "<br>Nem egyezik a két jelszó!" ; } else $loginhiba = "<br>Nem jó a belépési jelszó/login!" ;}?><html><head><title>Jelszómódosítás</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"><style type="text/css"><!--td {font-family: Arial, Helvetica, sans-serif;font-size: 10pt}.table {font-weight: bold;color: #330000;background-color: #FFFFCC; border: 1px #CC9933 solid}--></style></head>

<body bgcolor="#FFFFFF"><p align="center"><b>Jelszómódosító felbukkanó oldal</b></p><p>&nbsp;</p><form name="modositas" method="post" action=""><div align="center"></div><table width="220" cellspacing="0" cellpadding="3" class="table"align="center"><tr><td colspan="2" ><p align="center">Jelszó módosítás</p></td></tr><tr><td width="53%" >login</td><td width="47%" ><input type="text" name="login" size="15" maxlength="15" value= <? echo$login ; ?>></td></tr><tr><td width="53%" >régi jelszó: </td><td width="47%" ><input type="password" name="regipwd" size="10" maxlength="15"value= <? echo $regipwd ; ?>><? if ( $loginhiba != "" ) echo ( "<font color=#FF0000 size=-2>" . $loginhiba . "</font>" ); ?></td></tr<tr>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

44/89

<td width="53%" >új jelszó: </td><td width="47%" ><input type="password" name="ujpwd1" size="10" maxlength="15"></td></tr><tr><td width="53%" >új jelszó ismét: </td><td width="47%" ><input type="password" name="ujpwd2" size="10" maxlength="10"><? if ( $hiba != "" ) echo ( "<font color=#FF0000 size=-2>" . $hiba . "</font>" ); ?></td></tr><tr><td colspan="2"><div align="center"><input type="submit" name="Submit" value=" Módosítás "></div><?if ( $siker != "" ) //siker eseten kiirjuk es/vagy becsukjuk az ablakot{ echo ( "<font color=#FF0000 size=-2>" . $siker . "</font>" ); echo ( "<script>window.close(self);</script>" );}?></td></tr></table><div align="center"></div></form></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN$�EHYLWHOL�LQIRUPiFLyN�HOV��V]&UpVpW��DGDWRN�PHJOpWpW��IRUPiMiW��GH�VHPPLNpSSHQ

VHP�N�OG�QN�OH�MHOV]yW�D�NOLHQVQHN�HOOHQ�U]pVUH�����PHJYDOyVtWKDWMXN�-DYD6FULSW�VHJtWVé-

gével a kliens oldalon, ezzel gyorsítható a használat, de nem pótolja - manipulálhatósá-

JD�PLDWW���D�V]HUYHU�ROGDOL�HOOHQ�U]pVW��6]�NVpJ�HVHWpQ�D�MHOV]yW��ORJLQW�NyGROKDWMXN�LV�SpOGiXO�0'��NyGROiV��pV�UHJXOiULV�NLIHMH]pV�VHJtWVpJpYHO�YDJ\�PiV�PyGRQ�HOOHQ�ULz-

KHW���KRJ\�D]�HO�tUiVRNQDN��ERQ\ROXOtságnak) megfelel-e a bevitt/megváltoztatott jelszó.

$�J\DNUDQ�KDV]QiOW�3+3�I�JJYpQ\HN�NLJ\&MWpVH�pV�OLQNHOW�OLVWD�NpV]tWpVH

specifikáció

7DQXOiVXQN�WiPRJDWiViUD�J\&MWV�N�NL�PDJXQNQDN�D�J\DNUDEEDQ�KDV]QiOW�3+3függvényeket egy külön könyvtárba. A könyvtár tartalmát jelenítsük meg egy HTML

ODSRQ��OLQNHNNHO�HOOiWYD��KRJ\�D�PHJWHNLQWHQL�NtYiQW�I�JJYpQ\�OHtUiViW�J\RUVDQ�HO�V]Hd-

KHVV�N��$�OLVWD�D�N|QQ\HEE�NHUHVKHW�VpJ�pUGHNpEHQ�OHJ\HQ�$%&�UHQGEHQ�pV�NpW�KDViEED

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

45/89

V]HGYH��7HUPpV]HWHVHQ�D�N|Q\YWiUDW�WHWV]pV�V]HULQW�E�YtWM�N��PyGRVtWMXN��HQQHN�PHJIe-

OHO�HQ�D�+70/�ROGDO�pV�D�OLQNHN�LV�IULVV�OMHQHN�a feladat elméleti háttere

A feladat megoldásához tudnunk kell egy könyvtárat listázni - ez nem sokban

N�O|QE|]LN�D�IiMO�ROYDViVWyO��KLV]HQ�D�N|Q\YWiU�HJ\�RO\DQ�VSHFLiOLV�IiMOQDN�WHNLQWKHW��amely más fájlokra mutató bejegyzéseket tartalmaz. Mivel a könyvtár csak virtuálisan

V]HGKHW��$%&�UHQGEH��KD�pSSHQ�~J\�NtYiQMXN�PHJWHNLQWHQL��H]pUW�HJ\�W|PEEH�J\&MWM�NHO�V]|U�D�IiMQHYHNHW��DQQDN�UHQGH]pVpUH�XJ\DQLV�YDQQDN�HV]N|]HLQN��SpOGiXO�D�sort()

függvény). Meg kell oldani azt is, hogy amikor táblázat sorokat írunk ki, mindig két

I�JJYpQ\QHYHW�NHOO�HJ\PiV�PHOOHWW�PHJMHOHQtWHQL��GH�D]RN�QHP�HJ\PiVW�N|YHW��HOHPHNa rendezett tömbben. Végül az egyes függvénynevek linkek lesznek, ahol viszont a link-

szöveg ne a függvényt tartalmazó fájl neve legyen (például function.array-rand.html a

függvénynév, de mi array-rand nevet akarunk megjeleníteni a link szövegében).

tervezés

Egy lista.php fájlt és egy konyvtar �QHY&�PDSSiW�KR]XQN�OpWUH�pV�D�PDSSiED�Ee-

másoljuk a számunkra fontos fájlokat. Relatív elérési utat alkalmazunk, a lista.php és a

mappa ugyanazon könyvtárban legyen a webszerver gyökérkönyvtárán belül valahol. A

3+3�NyGGDO�YpJLJROYDVVXN�D�PDSSiW��NLV]&UM�N�D�V]iPXQNUD�IHOHVOHJHV�IiMORNDW�pV�Dtöbbit array_push() �I�JJYpQ\�VHJtWVpJpYHO�W|PEEH�W|OWM�N��DPLW�PiU�HJ\V]HU&HQ�WXGXQNrendezni. Ezt egy függvény valósítja meg, paraméterül kapva a mappa nevét és visszaté-

rési értéke a feltöltött rendezett tömb lesz. A rendezett tömböt a HTML kódban for

ciklus segítségével táblázat soraiban jelenítjük meg, a kéthasábos megjelenítés miatt

ILJ\HOQL�NHOO�D�SiURV�SiUDWODQ�IiMOV]iPUD�pV�HQQHN�PHJIHOHO�HQ�NHOO�HJ\�SOXV]�VRUW�LV�Ee-

iktatni. A linkszöveghez a kiolvasott fájlnevet szét kell darabolni, míg a link megvaló-

sításához a mappa nevét hozzá kell ill eszteni a fájlnévhez.

megvalósítás (kód)

li sta.php fálj kódja

<?php$dirnev = "fuggvenyek" ;//ez a fuggveny egy ABC szerint rendezett tombben adja vissza a mappatartalmatfunction dir_lista( $dirnev ){ $lista = array();

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

46/89

if (! $dp = opendir( $dirnev )) //ha nem talalhato, hamis a visszateresiertek return false ; while ( $fajl = readdir( $dp )) if ( $fajl != "." && $fajl != ".." ) //kiszurjuk a "." es ".." nevufajlokat array_push( $lista , $fajl ); sort( $lista ); //rendezes a tombben closedir( $dp ); return $lista ;}

?><html><head> <title>Kedvenc PHP függvényeim</title></head><body><?php$lista = dir_lista( $dirnev ); //megadjuk a dir nevet$fileszam = count( $lista );if ( $fileszam != 0) //ha nem ures a konyvtar{ echo ( "<table width = \" 70%\" align= \" center \" >" ); echo ( "<tr><td colspan= \" 2\" >Kedvenc PHP függvényeim</td></tr>" );

for ( $i =0; $i <$fileszam / 2; $i ++) //feltoltjuk a tablat { list( $func , $nev , $kit ) = explode( "." , $lista [ $i ]); echo ( "<tr><td><ahref= \" " . $dirnev . "/" . $lista [ $i ]. " \" >" . $nev . "</a></td>" ); list( $func , $nev , $kit ) = explode( "." , $lista [ $i +$fileszam / 2]); echo ( "<td><ahref= \" " . $dirnev . "/" . $lista [ $i +$fileszam / 2]. " \" >" . $nev . "</a></td></tr>" );

} if ( $fileszam % 2 != 0) //ha paratlan a fileszam, egy plusz sor kell { list( $func , $nev , $kit ) = explode( "." , $lista [ $i ]); echo ( "<tr><td><ahref= \" " . $dirnev . "/" . $lista [ $i ]. " \" >" . $nev . "</a></td><td>&nbsp;</td></tr>" ); } echo ( "</table>" );}?></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHNHa egészen precíz megvalósítást akarunk, akkor ki kell cserélni a "-" karaktereket

a függvénynevekben "_" karakterekre is (ereg_replace() ), ill etve meg kell oldani az

egyéb kategóriák kezelését is, esetleg külön táblázatokat alkalmazva.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

47/89

'iWXP�pV�LG��PHJMHOHQtWpVH

specifikáció

$]�DGDWEi]LVWyO�iWYHWW�GiWXP�LG��DGDW��LG�EpO\HJ]���DODSMiQ�NpV]tWV�N�HO�D�N|YHt-NH]��GiWXP�pV�LG�SRQW�NLtUDWiVW�HJ\�ZHEODSRQ�$]�gQ�XWROVy�OiWRJDWiViQDN�LG�SRQWMD�H]HQ�D]�ROGDORQ��������IHEUXiU�����������feladat

*\DNUDQ�NHU�O�HO��D]�D�SUREOpPD��KRJ\�DNiU�HJ\�DGDWEi]LVEyO�YHWW�DGDW�HVHWpEHQ�akár a honlap futtatása, az egyes lapok lekérése esetén meg kell j elenítenünk a dátumot

pV�D]�LG�W��$]�DGDWEi]LV�NH]HO�N�W|EEIpOH�GiWXP�pV�LG�IRUPiWXPPDO�GROJR]KDWQDN�pVSHUV]H�D�QHP�NHOO��JRQGRVViJJDO�PHJWHUYH]HWW�DGDWEHYLWHOHN�HVHWpQ�LV�OpWUHM|KHWQHN�IXr-FVD�IRUPiWXPRN��GH�|VV]HVVpJpEHQ�DMiQODWRV�UDJDV]NRGQL�D]�DGDWEi]LV�NH]HO��EHpStWHWWIRUPiWXPiKR]�pV�DUUD�pStWHQL�IHO�D�PHJMHOHQtW��UXWLQRNDW���H]]HO�OHKHW�VpJHW�DGXQN�DWiUROW�GiWXP�LG��DGDW�NpV�EEL�WHWV]pV�V]HULQWL�IHOGROJR]iViUD��1HP�XWROVy�VRUEDQ�tJ\EL]WRVtWKDWMXN��KRJ\�D]�HJ\V]HU�OpWUHKR]RWW�GiWXP�LG��PHJMHOHQtW��PRGXOXQN�NyGMDW|EEV]|U�LV�IHOKDV]QiOKDWy�OHV]��$�YpJV��FpO�HJ\�IHMOHV]W��UpV]pU�O�PLQGLJ�D�NyG�W|EEV]ö-

UL�IHOKDV]QiOiViUD�W|UHNYpV��tJ\�NLIHMOHV]WHQG��GiWXP�LG��PRGXOXQNDW�FpOV]HU&�RV]WiOy-

ként létrehozni és ennek példányosításával megoldani a megjelenítési igényeket. A

gyakran használt Linux/Unix webszerverek dátumformátumát és az általánosan alkal-

PD]RWW�LG�EpO\HJ]�N�IRUPiWXPiW�ILJ\HOHPEH�YpYH�NpV]tWM�N�HO�NyGXQNDW�tervezés

$]�DGDWEi]LVWyO�iWYHWW�GiWXP�LG��DGDWRW�PRVW�HJ\�$datum változóba beolvasott

sztringgel modellezzük és ez kerül feldolgozásra. A kiíratás az oldal tetején történik,

grafikai vagy táblázatos struktúra nélkül. A hónapok magyar neveit tömbben tároljuk és

onnét az indexük alapján vesszük ki.

megvalósítás (kód)

<?php

$honapok = array( "" , "január" , "február" , "március" , "április" , "május" , "jú-nius" , "július" , "augusztus" , "szeptember" , "október" , "november" , "decem-ber" );

$datum = "2002-02-24 15:10:32+01" ;

��V]pWV]HGM�N�GiWXPUD��LG�UHlist( $datum_resz , $ido_resz ) = explode( " " , $datum );

��HOGREMXN�D]�LG�]yQD�UpV]W��D�����MHOW�O�D�UpV]�V]WULQJHW�NLYiJMXN

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

48/89

$ido_resz = strtok( $ido_resz , "+" );

// az idõ elemeit kivesszük változókbalist( $ora , $perc , $mperc ) = explode( ":" , $ido_resz );

//szétszedjük év, hó, nap értékekre, másként$datum_resz = explode( "-" , $datum_resz );

// a hónap számot int értékké alakítjuk a tömb indexhez$ho = intval( $datum_resz [1]);

//kiírjuk az elõállított adatokatecho ( �$]�gQ�XWROVy�OiWRJDWiViQDN�LG�SRQWMD�D�KRQODSRQ���);echo ( $datum_resz [0]. ". " . $honapok [ $ho ]. " " . $datum_resz [2]. ".," . $ora . ":" . $perc );

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN$�0\64/�DGDWEi]LV�NH]HO��WLPHVWDPS��LG�EpO\HJ]���WtSXVD�QHP�D�IHQWL��KDQHP

14 karakteren folytonosan írja ki az évszámot, hónapot, napot, órát, másodpercet, azaz

HJ\�WHWV]�OHJHV�LG�EpO\HJ]��tJ\�Qp]�NL��������������������ËUMXQN�HJ\�I�JJYpQ\W�amely ezt a formátumot átalakítja a $datum változó formátumába.

5HJLV]WUiFLy��DGDWIHOYLWHO��DGDWIHOYLWHO�HOOHQ�U]pV

specifikáció

9HJ\�QN�IHO�N�O|QE|]��V]HPpO\L�pV�IHOPpUpVL�DGDWRNDW�pV�D]RN�UHDOLWiViW��PHJOpWpWHOOHQ�UL]]�N�OH��PLHO�WW�D]�DGDWEi]LVED�EHYLWW�N�YROQD��$]�HOOHQ�U]pV�DOi�YRQW�EHYLWHOLPH]�N�OHJ\HQHN�HJ\V]eU&HQ�IHOYHKHW�N��PyGRVtWKDWyN�a feladat elméleti háttere

$]�DGDWEHYLWHO�&UODS�VHJtWVpJpYHO�W|UWpQLN�pV�PiU�HQQHN�PHJV]HUNHV]WpVHNRU�Fpl-V]HU&�D�EHYLWHOUH�NHU�O��DGDWRN�NRUOiWR]iVD��D]D]�DKRO�FVDN�OHKHW��DGDWYiODV]WiVW�NtQil-MXQN�IHO��1HP�V]DEDG�HOIHOHMWHQL��KRJ\�D�+70/�IRUP��&UODS��REMHNWXPRN�NpV]OHWH�V]e-

gényes más programnyelvek komponenseivel összehasonlítva, és bár JavaScript segít-

VpJpYHO�J\DNRUODWLODJ�EiUPL�PHJYDOyVtWKDWy��DQQDN�pUWHOPH]pVH�HU�VHQ�E|QJpV]��I�JJ�pV�QHP�YiUKDWy�HJ\VpJHVtWpVH�D�N|]HOL�M|Y�EHQ�/��7|UHNHGQL�NHOO�WHKiW�D]�HJ\V]HU&�pV|WOHWHV�PHJROGiVRNUD��D�SULPLWtY�PRVW�NLIHMH]HWWHQ�HO�Q\|V��pV�PLQGLJ�NL�NHOO�HJpV]tWHQLD�EHYLWHOW�V]HUYHU�ROGDOL�DGDWHOOHQ�U]pVVHO��&pOV]HU&�DPLW�OHKHW�OHJ|UG�O��OLVWiEyO�IHONí-QiOQL��D�OLVWiN�IHOW|OWpVH�N|QQ\HQ�PHJYDOyVtWKDWy�HJ\V]HU&�V]|YHJIiMORNEyO�pV�YDJ\DGDWEi]LVRNEyO��LWW�HOV�VRUEDQ�QHP�D�NRPRO\�DGDWEi]LV�NH]HO�NUH�JRQGRORN��KDQHP�Dfájlból dolgozó adatbázisokra).

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

49/89

Tipikus beviteli feladat személyes adatoknál a dátumok felvitele, ez jól és bizton-

ViJRVDQ�PHJROGKDWy�SpOGiXO�KiURP�OHJ|UG�O��OLVWiYDO�D]�pYHN��KyQDSRN�pV�QDSRN�IHOYi-telére. Igény szerint a gyakran használt dátum (például az aznapi dátum) könnyen be is

állítható alapértelmezettként egy bizonylat kitöltése esetén, ahol általában, de nem fel-

tétlenül az aznapi dátumot kell megadni. Országnevek a hivatalos megnevezés szerint,

NDWHJyULiN�PLQG�OHJ|UG�O��OLVWiEyO�V]HGKHW�N�+D�HJ\�EHYLWHOL�PH]�K|]�W|EE�HJ\HGL�DGDW�WDUWR]LN���SpOGiXO�W|EEIpOH�pUGHNO�GpV��

H]HN�HJ\V]HU&HQ�PHJROGKDWyN��KD�D�OHJ|UG�O��OLVWiW�W|EEV]|U|V�NLYiODV]WiV~Yi�WHVV]�N�pVD�P|J|WWH�HOKHO\H]NHG��YiOWR]y�W|PE�OHV]��(KKH]�FVXSiQ�D�select �PH]��QDPH�DWWULEú-

tumában a változó név mögé szögletes zárójelet kell írni:

<select name="ertekek[]" size="3" multiple> <option value="érték1">címke1</option> <option value="érték2">címke2</option> <option value="érték3">címke3</option> </select>

/HJ|UG�O��OLVWD�NyGMD�W|EEV]|U|V�NLYiODV]WiV�EL]WRVtWiVD�HVHWpQ0HJMHJ\]HP��KRJ\�V]LQWH�EiUPHO\LN��HUUH�HJ\pENpQW�DONDOPDV�EHYLWHOL�PH]��HVe-

WpQ�DONDOPD]KDWy�H]�D�WHFKQLND��gVV]H�OHKHW�tJ\�NDSFVROQL�MHO|O�GRER]RNDW��FKHFNER[��V]|YHJHV�EHYLWHOL�PH]�NHW��WH[W���DPLNRU�W|EE�HOHP�QHYH��D]�pUWpNHW�WDUWDOPD]y�YiOWR]y�azonos és a változó tömb jellegét a név mögé írt szögletes zárójel mutatja. Ezt a lehet�-

VpJHW�D�+70/�V]HUNHV]W�N�QHP�WiPRJDWMiN��D]D]�QHN�QN�NHOO�ILJ\HOQL�DUUD��KRJ\�LO\HQbeállításokat tegyünk. Tömbök adatbázisba vitele azonban nem megy közvetlenül, vagy

mi írjuk meg a tömböt sztringgé alakító rutint, vagy a PHP serialize() függvényét

KDV]QiOMXN��HQQHN�NLPHQHWH�HJ\��D]�DGDWEi]LVED�HJ\V]HU&HQ�EHYLKHW��VSHFLiOLV�V]WULQJ�pVa tárolt információ alapján az unserialize() segítségével az eredeti tömb helyreállítható

EHO�OH�7DOiQ�D�OHJIRQWRVDEE�IHODGDW�D]�DGDWHOOHQ�U]pV�NRUUHNW�PHJROGiVD��$ODSHOY��KRJ\

maximális szabadságot biztosítsunk a felhasználónak, de a fontos adatok esetén ez a

szabadság elkerülhetetlenül csorbul. Ugyanakkor a leggondosabb tervezés sem zárja ki

D]W��KRJ\�D���WUpIiV�NHGY&��YDJ\�FVDN�HJ\V]HU&HQ�URVV]LQGXODW~���IHOKDV]QiOy�YDOyGLQDNOiWV]y��GH�pUWHOPHWOHQ�DGDWRNDW�N�OGM|Q�EH��(EE�O�N|YHWNH]LN�D�V]DEDGRQ�KR]]iIpUKHW�ZHEHV�IHO�OHWHQ�iW�N�OG|WW�DGDWRN�NRUOiWR]RWW�PHJEt]KDWyViJD��DPL�Q|YHOKHW��EL]RQ\RVtrükkökkel, de teljesen nem valósítható meg. Célunk a felhasználó érdekeltté tétele a

precíz adatszolgáltatásban.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

50/89

(OOHQ�UL]KHW��YLV]RQW�PLQGHQ�WRYiEEL�QpON�O�D]�DGDWRN�PHJDGiVD��*\DNRUODWL�Wa-

SDV]WDODW��KRJ\�HJ\�KRVV]DEE�&UODS�HVHWpEHQ�J\DNUDQ�PDUDG�NL�HJ\�HJ\�OpQ\HJHV�DGDt-PH]��pV�HUUH�IHOWpWOHQ�O�ILJ\HOPH]WHVV�N�D�IHOKDV]QiOyW��6RNV]RU�D]�LV�HJ\V]HU&HQ�HOOe-

Q�UL]KHW���KRJ\�HJ\�HJ\�DGDW�HOIRJDGKDWy�H��YDJ\�WpYHV�EHJpSHOpV�HUHGPpQ\H��-HO|OM�NPHJ�YDODPL�PyGRQ�D�N|WHOH]��DGDWRNDW�pV�D]RNDW�HOOHQ�UL]]�N�OH��D�W|EEL�HVHWpEHQ�D]�UHV�PH]��YLV]RQW�HOIRJDGKDWy��(]HN�HOOHQ�U]pVpQHN�D�OHJHJ\V]HU&EE�PyGMD�D�IHOGROJo-

zás logikai döntés mögé rejtése, ha a feltétel nem teljesül, visszakapja a felhasználó az

&UODSRW�DGDWKHO\HVEtWpVUH��1pKiQ\�DGDW�HVHWpEHQ�H]�W|NpOHWHVHQ�P&N|GLN��GH�KD�PiU�����vizsgálandó adat van, senki sem akar ennyi logikai részfeltételt megadni a feldolgozás-

KR]�YH]HW��V]HOHNFLyV�iJEDQ�(J\V]HU&�PHJROGiV�D]�~J\QHYH]HWW�N|WHOH]��PH]�N�QHYHLQHN��YiOWR]yQHYHN��

W|PEEH�J\&MWpVH�pV�WiUROiVD��)HOYHV]�QN�PpJ�HJ\�KLEiNDW�WDUWDOPD]y�DVV]RFLDWtY�W|PE|WLV��DPHO\�D]�pV]OHOW�KLEiN�V]|YHJHV�OHtUiViW�IRJMD�WDUWDOPD]QL�(J\�FLNOXV���FpOV]HU&HQ�HJ\for ciklus, vagy foreach�V]HUNH]HW���YpJLJPHJ\�D�N|WHOH]��PH]�N�W|PE|Q�pV�D�3+3GLQDPLNXV�YiOWR]y�NH]HOpVpW�IHOKDV]QiOYD�HOOHQ�U]L��KRJ\�D�IHOVRUROW�PH]�N�pUWpNH�PHg-

felel-e a kívántaknak, ha nem, az asszociatív hiba tömbbe "belenyom" (array_push() )

egy aktuális hibaüzenetet, ahol az asszociatív tömb elemének kulcsa lesz a beviteli me-

]��QHYH��PLQW�D]RQRVtWy�pV�D�KLED�]HQHW�D�PH]�K|]�WDUWR]y�pUWpN��(]]HO�OHKHW�HOHJiQVDQPHJROGDQL��KRJ\�D]�HJ\HV�EHYLWHOL�PH]�NK|]�WDUWR]yDQ�MHOHQtWV�N�PHJ�D�KLED�]HQHWHW�pVne egy olyan, a JavaScript aler t metódusával közvetített általános üzenet jelenjen meg,

KRJ\��.pUM�N�D]�|VV]HV�PH]��NLW|OWpVpW����0RVW�PiU�FVDN�D�KLED�W|PE|W�NHOO�HOOHQ�UL]QL�KD�QLQFV�EHQQH�pUWpN��PHKHW�D�IHOGROJR]iV��KD�YDQ��DNNRU�D�PHJIHOHO��KHO\UH�HJ\�NLtUiVWkészítünk a hibáról.

$]�&UODSRN�HON�OGpVpW�iOWDOiEDQ�3267�PHWyGXVVDO�YpJH]]�N��KD�DGDWEi]LVED�Ee-

YLWHOU�O�YDQ�V]y��DNNRU�D�OHJHJ\V]HU&EE�HVHWEHQ�D�form önmagát hívja meg (action me-

]���UHV�YDJ\�D�IiMO�VDMiW�QHYH���D]D]�~MUD�OHIXW�D]�HJpV]�&UODSRW�WDUWDOPD]y��SKS�IiMO�Számolnunk kell azzal tehát, hogy egy-egy hiba esetén a felhasználó nem akarja újra

kitölteni az összes adatot, így ne feledkezzünk meg arról, hogy a már elfogadottakat

tUMXN�YLVV]D�D�PHJIHOHO��&UODS�PH]�NEH�echo() vagy prin t () utasítások segítségével.

tervezés

$]�HOV��IHODGDW�D]�&UODS�HUJRQyPLNXV�PHJWHUYH]pVH��/HJ\HQ�ORJLNXV��HJ\V]HU&HQiWOiWKDWy�pV�HJ\pUWHOP&��NHU�OM�N�D�IHOHVOHJHV�PDJ\DUi]DWRNDW��$]�HJ\V]HU&VpJ�NHGYppUW

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

51/89

H]W�iOWDOiEDQ�+70/�V]HUNHV]W�EHQ�WHUYH]]�N�PHJ��RWW�OHKHW�VpJ�YDQ�D�IRUPD�SRQWRVEHiOOtWiViUD��(VHW�QNEHQ�QHYHW��V]�OHWpVL�pYHW��D]�LOOHW��QHPpW�NpUGH]]�N�PHJ��UiNpUGe-

]�QN�MHO|O�GRER]RN�VHJtWVpJpYHO�V]DNpUWHOPpUH�pV�J|UGtWKHW��OLVWD�VHJtWVpJpYHO�V]RIt-verismeretére. Ezeket mind egy táblázat soraiban, celláiban helyezzük el, hogy egysze-

U&HQ�iWWHNLQWKHW���NH]HOKHW��OHJ\HQ��$]�LVPpWO�G��IHOYLWHOL�PH]�N�NLUDNiViW�LV�3+3�NyGsegítségével végezzük.

Az adatfelvitel adatbázisba történik, így a kapcsolódás utasításait - hiszen ezt

adott rendszerben sokszor használjuk - külön fájlban helyezzük el, amit egy include()

utasítás visz be a kódba (connect_local.php ).

megvalósítás (kód)

connect_local.php fáj l kódja

<?php //konfigurációs rész // host neve $host = "localhost" ; // adatbazis felhasznaloi neve - a Windows felhasznalo neve $username = "24-t" ; // adatbazis felhasznaloi jelszava - a Windows belepesi jelszo $userpass = "" ; //adatbazis neve - mindig az aktualis adatbazis neve kerul ide $database = "adatok" ;

//kapcsolati rész //kapcsolat letrehozasa a mysql adatbazis kezelovel, illetvehibauzenet $conn = mysql_connect ( " $host " , " $username " , " $userpass " ) or die ( "<br>nem lehet csatlakozni a kiszolgalohoz" );

//ellenorizzuk a kerdeses adatbazis letet if (!mysql_query( "use $database " )) echo ( "<script> alert('Az adatbazis nem áll készen!');</script>" );?>

ur lap.php fáj l kódja

<?php/**Denes Medzihradszky * @version 1.0 * @copyright 2004 **/

//hibakat tartalmazo tombot deklaralunk$hibak = array();//kulcsmezot jelolunk kiif ( $nev != "" ){ //atalakitasok es ellenorzesek //tabulatorral tagolt sztringbe fuzzuk a jelolodobozokra adottvalaszokat

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

52/89

if (isset( $szakertelem )) { $szakert = "" ; for ( $i =0; $i <count( $szakertelem ); $i ++) if ( $i == count( $szakertelem )- 1) $szakert .= $szakertelem [ $i ]; else $szakert .= $szakertelem [ $i ]. " \t " ; } else $hibak [ "szakertelem" ] = "Nem adott meg szakértelmet!" ;

//sztringbe fuzzuk a gorditheto listara adott valaszokat is if (isset( $szoftverek )) { $szoftver = "" ; for ( $i =0; $i <count( $szoftverek ); $i ++) if ( $i == count( $szoftverek )- 1) $szoftver .= $szoftverek [ $i ]; else $szoftver .= $szoftverek [ $i ]. " \t " ; } else $hibak [ "szoftverek" ] = "Nem adott meg szoftvert!" ;

//a nevet korrekt formara alakitjuk, a szavak elso betuje legyennagybetu $nev = ucwords(strtolower( $nev ));

//regexp segitsegevel ellenorizzuk a szuletesi evet (19xx lehet) if (!ereg( "^19([0-9]{2})" , $szulev )) $hibak [ "szulev" ] = "Nem jó a születési év!" ;

//ha minden rendben, feltoltheto az adatbazis if (count( $hibak ) == 0) { include ( "connect_local.php" ); $sql = "insert into szemelyek (nev, szulev, nem, szakertelem,szoftverek) " ; $sql .= "values (' $nev ', ' $szulev ', ' $nem', ' $szakert ',' $szoftver ') " ; mysql_query( $sql ); mysql_close( $conn ); //ertesites es atiranyitas mas lapra echo ( "<script language=JavaScript1.2>" ); echo ( "alert('Az adatokat felvittük');" ); echo ( "location.reload('tovabb.php');" ); echo ( "</script>" ); } else //ez itt csak tesztelesi celokra van, kiiratjuk a hibakat! while (list( $kulcs , $ertek ) = each( $hibak )) echo ( $ertek . "<br>" );}?><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"><title>Regisztráció</title>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

53/89

</head><body bgcolor="#FFFFFF"><p align="center">Adatbevitel</p><form method="POST" action=""> <div align="center"> <table width="700" cellspacing="0" cellpadding="6" border="0"> <tr> <td width="267" align="right">név</td> <td width="409"><input type="text" name="nev" size="30"maxlength="30"></td> </tr> <tr> <td width="267" align="right">születési év</td> <td width="409"><input type="text" name="szulev" size="4"maxlength="4"></td> </tr> <tr> <td width="267" align="right">nem</td> <td width="409"> <input type="radio" value="férfi" checked name="nem">férfi <input type="radio" name="nem" value="nõ">nõ</td> </tr> <tr> <td width="267" align="right">szakértelem</td> <td width="409"> <div align="center"> <? //checkbox csoport kirakasa tomb ertekek alapjan $szakert_tomb = array( "video szerkesztés" , "audio szerkesztés" , "grafika" , "programozás" , "animáció" , "webszerkesztés" ); echo ( "<table border= \" 0\" cellpadding= \" 0\" cellspacing= \" 0\" >" ); //hogy ne kelljen olyan hosszu sort irni... $input = "<input type= \" checkbox \" name=\" szakertelem[] \" " ; for ( $i =0; $i <count( $szakert_tomb ); $i +=2) { echo ( "<tr><td>" . $input . "value= \" " . $szakert_tomb [ $i ]. " \" >" . $szakert_tomb [ $i ]. "</td>" ); echo ( "<td>" . $input . "value= \" " . $szakert_tomb [ $i +1]. " \" >" . $szakert_tomb [ $i +1]. "</td></tr>" ); } //paratlan elemszam eseten ujabb sort kell kirakni itt a ciklusutan! echo ( "</table> " ); ?> </div> </td> </tr> <tr> <td height="19" width="267" align="right">ismert szoftverek</td> <td height="19" width="409"> <? //tobbszoros kivalasztasu lista kirakasa $szoftvertomb = array( "MS Office" , "Corel" , "Adobe Photoshop" ,"Dreamweaver" , "After Effects" , "Flash" ); echo ( "<select size= \" 4\" name=\" szoftverek[] \" multiple>" ); foreach ( $szoftvertomb as $szoftver ) echo ( "<option value= \" " . $szoftver . " \" >" . $szoftver . "</option>" ); echo ( "</select>" ); ?> </td>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

54/89

</tr> <tr> <td width="267">&nbsp;</td> <td width="409"> <p align="center"><input type="submit" value="Elküldés"name="submit"></td> </tr> </table> </div></form></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN.pUGH]]�N�PHJ�D]�LOOHW��V]DNpUWHOPL�V]LQWMpW�UiGLyJRPE�FVRSRUW�VHJtWVpJpYHO

�~J\QHYH]HWW�/LNHUW�VNiOiW�YDOyVtWRWWXQN�PHJ�H]]HO��pV�PLQG�D�MHO|O�GRER]RNEyO���H]Hk-

KH]�NDSFVROMXQN�KR]]i�HJ\�V]|YHJPH]�W��DPHO\EH�D]�HJ\pE�V]DNpUWHOPpW�tUKDWMD�EH�DIHOKDV]QiOy���D]�HJ\pE�PH]�YHO�HJ\�WW�NpV]tWV�QN�RV]WiO\W��KRJ\�OHJN|]HOHEE�QH�NHOOMHQennyit gépelnünk, csak az osztályt fogjuk példányosítani, paraméterként átadva az érté-

NHNHW��FpOV]HU&HQ�HJ\�W|PE��pV�D�YiOWR]y�QHYpW��HVHWOHJ�HJ\pE��D]�HOUHQGH]pVUH�XWDOyadatokat.

7|EEQ\HOY&�ROGDODN���HJ\�UHJLV]WUiFLyV�&UODS���Q\HOYHQ

specifikáció

Egy nemzetközi oldalt kell készítenünk, ahol a bejelentkezéskor nyelv választható

�PDJ\DU��DQJRO��QpPHW��IUDQFLD��pV�D�UHJLV]WUiFLyV�NpUG�tYHW�HQQHN�DODSMiQ�NtQiOMXN�IHO�9HJ\�QN�IHO�V]HPpO\L�DGDWRNDW�pV�YLJ\�N�D]RNDW�DGDWEi]LVED��GH�UHJLV]WUiOMXN�D]�LOOHW�Q\HOYL�SUHIHUHQFLiMiW�LV��.pV�EE�PDMG�D�EHMHOHQWNH]pVNRU�DXWRPDWLNXVDQ�D�V]iPiUD��pUt-KHW���Q\HOYHQ�NtQiOMXN�D�WDUWDlPDNDW��$GDWHOOHQ�U]pVW�PRVW�QHP�NHOO�YpJH]Q�QN�a feladat elméleti háttere

$�ZHE�LQGXOiVD�yWD�LVPHUW�D�SUREOpPD��D�GLQDPLNXV�OHKHW�VpJHN�PHJWHUHPWpVHHO�WW�H]W�D�ODSRN�SiUKX]DPRV�Q\HOYL�YiOWR]DWDLQDN�HONpV]tWpVpYHO�OHKHWHWW�FVDN�PHJROGa-

ni, ill etve a GET metódussal átadott nyelvre utaló változóval JavaScript segítségével is

lehetett alternatív kiírásokat is tenni - ezt utóbbi bonyolult kódot és a JavaScript rendel-

NH]pVUH�iOOiVW�LJpQ\HOWH��H]W�YLV]RQW�D�IHOKDV]QiOy�V]DEiO\R]]D��PtJ�D]�HOV��YiOWR]DWRW�különösen annak módosítását, senkinek sem kívánom. Dinamikus megoldás többféle is

YDQ��D�KHO\]HWW�O�I�JJ��OHKHW�VpJHNNHO��9DODPL�RO\DQ�PHJROGiV�NHOOHQH��DPL�V]yWiUV]e-

U&��HJ\UpV]W�H]�YDQ�OHJN|]HOHEE�D]�HPEHUL�JRQGRONRGiVKR]��PiVUpV]W�PLQGLJ�OiWMXN�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

55/89

hogy mi helyett mi áll - nem kell nekünk ismerni az összes nyelvet, bárki elkészítheti

KHO\HWW�QN�D�Q\HOYL�YDULiFLyNDW��7RYiEEi�tJ\�E�YtWKHW��LV�OHKHW��FVDN�HJ\�V]yWiU�IiMOW�NHOOkicserélni és máris rendelkezésre áll az új nyelvi változat. Az oldal grafikai-szerkezeti

váza viszont állandó lehet. Az adott oldal nyelv specifitását egy átadott változó vagy

DGDWEi]LVEyO�D�PLQGHQ�ROGDO�HOHMpQ�NLROYDVRWW�YiOWR]y�EL]WRVtWKDWMD��(O�UH�OiWKDWy��KRJ\VZLWFK�YH]pUO��V]HUNH]HWHW�pUGHPHV�KDV]QiOQL��PHUW�VRN�SiUKX]DPRV�YiODV]WiV�YDQ�pV�D]LV�HONpS]HOKHW���KRJ\�HJ\HV�NpSNpQW�PHJYDOyVtWRWW�IHOLUDWRNDW�LV�Q\HOYI�JJ�Yp�NHOO�WHQQL�Használjuk ki a PHP asszociatív tömbjeit, mert az pontosan a kívánt rendszer szerint

dolgozik! Egy sztring - a magyar elnevezés - az index és értéke a kívánt nyelvi változat.

Ez egyúttal azt is jelenti, hogy a kódban az index keretében mindig látni fogjuk a ma-

gyar jelentést, nem kell külön keresgélni!

tervezés

Elkészítjük a regisztrációs oldal vázát, magyar feli ratokkal. Minden nyelvnek ké-

szítünk egy-egy specifikus fájl (magyar.inc, angol.inc, nemet.inc, francia.inc), amely

egyetlen $szotar �QHY&�YiOWR]yEDQ�DVV]RFLDWtY�W|PE|W�WDUWDOPD]��DPHO\QHN�LQGH[HL�D�PiUPHJIRJDOPD]RWW�PDJ\DU�IHOLUDWRN��pUWpNHL�D]�DGRWW�Q\HOY�PHJIHOHO��IHOLUDWDL��1H�IHOHMWV�Nel, hogy kell egy magyarról-magyarra fájl i s, mert a magyar változatot ugyanezen tech-

nikával kell megvalósítani az egység érdekében! Ezeket a fájlokat include utasítással

visszük majd be, egy switch�YH]pUO�V]HUNH]HW�NHUHWpEHQ��ËJ\�D�$szotar változónak min-

GLJ�D]�DGRWW�Q\HOYQHN�PHJIHOHO��W|PEpUWpNHL�OHV]QHN��$�Q\HOY�VSHFLILNXV�YiOWR]yW��$lang���PRVW�HJ\V]HU&HQ�D�EHMHOHQWNH]��ROGDOUyO��index.html) kapjuk a link kiegészíté-

sével, az URL-hez kapcsoltan (ebben semmi titkolandó nincs). Az regisztrációt egy kü-

lön, felbukkanó ablakban végezzük, amit viszont JavaScript segítségével hívunk meg.

Az adatok felvétele után biztosítani kell a visszalépést, továbbá el akarjuk tüntetni az

ROGDO�LVPpWHOW�OHIXWiVDNRU�D�EHYLWHOL�PH]�NHW���H]�PHJROGKDWy�W|EEIpOHNpSSHQ��SpOGiXO�DHTML rész megjegyzésbe zárásával, kommentezésével, amelynek kiíratása viszont egy

logikai változó értéke szerint fog megtörténni, vagy egy exit() utasítás segítségével,

amikor a kód végrehajtása megszakad és a HTML rész már nem jelenik meg az oldalon.

megvalósítás (kód)

regform.php

<?php/* ez a kod a nyelvi valtozatokat hivatott lekezelni, az atvett $langvaltozo

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

56/89

* alapjan egy include beleviszi a megfelelo $szotar valtozot */

$rendben = false ;switch ( $lang ){ case "ger" : include ( "nemet.inc" ) ; break ; case "fra" : include ( "francia.inc" ) ; break ; case "eng" : include ( "angol.inc" ) ; break ; default : include ( "magyar.inc" ) ;}// eddig a nyelv kivalasztasa?><html><head><title>Regisztráció</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><?if (isset( $vnev ) && $vnev != "" ){// Gyartunk egy random jelszot, amit majd kikuldunksrand((float) microtime() * 10000000 );$pswd = strval(rand( 10000 , 100000 ));

// Benyomjuk a torzsadatokat es atalakitjuk a kisbetusen irt neveket$knev = ucwords(strtolower( $knev ));$vnev = ucwords(strtolower( $vnev ));

//osszeallitjuk az email cimet$fullemail = " $email_azon @$email_path " ;

//osszeallitjuk az adatbazisba bevitelre kerulo ertekekkel az sql//utasitast

/*elkuldjuk emailben a jelszot es a logint,* ez csak akkor mukodik, ha a szerveren illetve a php.ini-ben be van* allitva a mail program* mail($fullemail, "Regisztráció", "Loginja: $login, Ideiglenes jel* szó: $pswd");* helyette: */echo( "E-mail címe: " . $fullemail . "<br>Regisztráció <br> Loginja:$login , Ideiglenes jelszó: $pswd " );

//ertesitjuk a felhasznalotecho ( "<body bgcolor= \" #FFFFFF\" ><p>Az adatokat rendben felvet-tük</p>" );echo ( "<a href= \" javascript:void() \"onClick= \" window.close(); \" >&gt;&gt; vissza az index lapra&gt;&gt;</a>" );echo ( "</body>" );//ezzel tuntetjuk el a HTML kodot sikeres adatfelvetel eseten$rendben = true ;

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

57/89

}if ( $rendben ) echo ( "<!--" );?><body ><p align="center"><b> <? echo $szotar [ "Regisztrációs adatok (a *-galjelölt kötelezõ)" ]; ?></b><br></p><form method="POST" action=""> <table width="500" border="0" cellspacing="0" cellpadding="6"align="center"> <tr> <td width="192"> <? echo $szotar [ "vezetéknév*" ]; ?></td> <td width="284"> <input type="text" name="vnev" value=" <? echo $vnev ; ?>"> </td> </tr> <tr> <td width="192"> <? echo $szotar [ "keresztnév*" ]; ?></td> <td width="284"> <input type="text" name="knev" value=" <? echo $knev ; ?>"> </td> </tr> <tr> <td width="192"> <? echo $szotar [ "megjelenõ név (login)*" ]; ?> </td> <td width="284"> <input type="text" name="login" maxlength="12" value=" <? echo$login ; ?>"> </td> </tr> <tr> <td width="192"> <? echo$szotar [ "foglalkozás/szakterület*" ]; ?></td> <td width="284"> <input type="text" name="szakma" value=" <? echo $szakma ; ?>"> </td> </tr> <tr> <td width="192">e-mail*</td> <td width="284" valign="middle"> <input type="text" name="email_azon" size="8" value=" <? echo$email_azon ; ?>"> @ <input type="text" name="email_path" size="20" value=" <? echo$email_path ; ?>"> </td> </tr> <tr> <td width="192"> <? echo $szotar [ "telefon" ]; ?></td> <td width="284"> <input type="text" name="tel" value=" <? echo $tel ; ?>"> </td> </tr> <tr> <td width="192"> <? echo $szotar [ "város" ]; ?>*</td> <td width="284"> <input type="text" name="varos" value=" <? echo $varos ; ?>"> </td> </tr> <tr>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

58/89

<td width="192"> <? echo $szotar [ "irányítószám, házszám, ut-ca" ]; ?></td> <td width="284"> <input type="text" name="cim" value=" <? echo $cim ; ?>"> </td> </tr> <tr> <td colspan="2"> <div align="right"> <input type="hidden" name="lang" value=" <? echo $lang ; ?>"> <br> <input type="submit" name="submit" value=" <? echo$szotar [ "regisztrálás" ]; ?> "> </div> </td> </tr> </table></form><? if ( $rendben ) echo ( "-->" ); ?></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN(J\�ERQ\ROXOWDEE�UHQGV]HUEHQ�HJ\V]HU&EE��KD�session segítségével kezeljük a

$lang változót és minden oldal elején a felhasználót azonosítva töltjük be számára a

PHJIHOHO��Q\HOYL�ROGDOW��(O�IRUGXO�D]�LV��KRJ\�Q\HOY�VSHFLILNXV�JUDILNiW�KDV]QiOXQN��(b-

EHQ�D]�HVHWEHQ�D�NpSHN�IiMOQHYHLKH]�DGMXQN�KR]]i�HJ\�Q\HOYUH�MHOOHP]��HOHPHW�pV�H]�Dswitch szerkezetben kapjon értéket, majd a képek a megjelenítés helyén ezzel a válto-

zóval kiegészített URL-t kapjanak.

Névnapozás, az aktuális névnap kiírása17

specifikáció

Készítsünk weboldalunk nyitólapjára az adott naphoz tartozó névnapokat feltün-

WHW��PRGXOW��7|UHNHGM�QN�D]�REMHNWXP�RULHQWiOW�PHJN|]HOtWpVUH�a feladat elméleti háttere

Adatbázisban fogjuk tárolni a névnapok dátumhoz rendelését biztosító rekordokat.

Ezek egy azonosító mellett - bár a hónap sorszáma és a nap sorszáma is egyedi kulcsot

ad - tárolni fogják a hónap sorszámát, a nap sorszámát és karaktersorozat formájában,

N|]YHWOHQ�O�PHJMHOHQtWKHW��PyGRQ�D]�DGRWW�QDSKR]�WDUWR]y�QpYQDSR�ND�W��LOOHWYH�EL]Wo-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

59/89

VtWVXQN�OHKHW�VpJHW�iOODPL��QQHS�HVHWpQ�D]��QQHSQDS�QHYpQHN�PHJMHOHQtWpVpUH�LV��$UHQGV]HUW�O�OHNpUM�N�D�GiWXPRW�pV�D]W�IHOGROJR]YD�HO�iOOtWMXN�D�KyQDS�pV�QDS�pUWpNHNHW�DPHO\HN�VHJtWVpJpYHO�D]RQRVtWKDWMXN�D�PHJIHOHO��UHNRUGRW�tervezés

$]�DGDWEi]LV�WiEOD�D]�D]RQRVtWyQ��LG��NtY�O�QpJ\�PH]�E�O�iOO��H]HN��KyQDS�KRQDS���QDS��QDS���QpYQDS��QHYQDS����QQHS��XQQHS���/pWUHKR]KDWy�HJ\�PiU�PHJOHY�adatbázis névnap táblájaként .sql fájlból, vagy a táblát külön létrehozva, egy Excel táb-

lázatból tabulátorral elválasztott formában lementett szöveges fájlból az SQL copy pa-

UDQFViYDO��(O�V]|U�HONpV]tW�QN�HJ\�VWUXNWXUiOW�PHJYDOyVtWiVW��PDMG�H]W�NLHJpV]tWYH��it-dolgozva elegáns megoldásra törekszünk, - csak nem fogunk külön kódot írni minde-

gyik alkalommal ha használni kívánjuk a rendszert! (a gyakorlatban a webhely több

ROGDOiQ�LV�PHJ�NHOO�MHOHQWHWQL�D�QpYQDS�LQIRUPiFLyNDW��QHP�FVDN�D�I�ODSRQ�����WHKiW�RVz-

WiO\W�NpV]tW�QN�pV�DQQDN�SpOGiQ\RVtWiViYDO�iOOtWMXN�HO��D�NHUHV]WQHYHN�LOOHWYH�D]�HVHWOHJHVünnep kimenetét. A használandó adatbázis referenciáját, a dátum értéket paraméterként

adjuk át, a kimenet sztring.

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN(a) 9HJ\�N� ILJ\HOHPEH� D� V]|N�pYHN� HOWpU�� QpYQDS� KR]]iUHQGHOpVpW� �KLYDWDORVDQ

IHEUXiU�����D�V]|N�QDS�� tJ\�V]|N�pYEHQ�D� IHEUXiUL�QpYQDSRN�����XWiQ�D�����WNLKDJ\YD��HJ\�QDSSDO�FV~V]QDN���pV� tUMXN�PHJ�D�V]|N�pYHNHW�PHJDGy�DOJRULt-must18. Ebben az esetben vizsgálnunk kell az év értékét is a rendszerdátumból.

17 Ne felejtsük el, hogy a névnapok ünneplése nem általános szokás még az úgynevezett nyugati kultúrájú

világban sem! Ne próbáljunk egy angolszász közösségnek névnapozást csinálni, mert nem fogják tudni,

PLU�O�LV�YDQ�V]y«�(]�D�NpUGpV�IHOPHU�OW�HJ\�ZHEIHMOHV]W�L�IyUXPRQ��H]pUW�KtYRP�IHO�Ui�LWW�LV�D�ILJ\HOPHW�18�7|UHNHGM�QN�D�SUHFL]LWiVUD�pV�JRQGROMXQN�D�M|Y�UH�-��1HP�FVDN�HJ\V]HU&HQ�D�QpJJ\HO�RV]WKDWy�pYHNHWNHOO�ILJ\HOHPEH�YHQQL��PHUW�QHP�V]|N�pYHN�D�V]i]]DO�RV]WKDWy�pYHN��XJ\DQDNNRU�D]RQEDQ�V]|N�pYHN�DQpJ\V]i]]DO�RV]WKDWyDN��8J\DQ�D�N|YHWNH]�UH�VRNDW�NHOO�YiUQL��GH������W|UWpQHWHVHQ�QHP�YROW�V]|N�pY,

míg 2000 az volt, így van némi ráció ennek figyelembe vételében egy általánosan használható algoritmus

kidolgozása során.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

60/89

(b) Nem mindig áll rendelkezésünkre szerveren telepített adatbázis! Dolgozzunk

ki olyan adattárolási formá(ka)t, - természetesen a kiolvasó rutinokkal együtt -

amelyek segítségével adatbázis nélkül is megoldható a névnapok kikeresése.

'iWXP�pV�LG�NH]HOpV�IHOV�IRNRQ

specifikáció

.pV]tWV�QN�N�O|QE|]��DGDWIRUUiVRNEyO��N�O|QE|]��PDJ\DU�Q\HOY&�GiWXP�pV�LG�NLtUiVL�IRUPiNDW�PHJYDOyVtWy�RV]WiO\W��$]�RV]WiO\�OHJ\HQ�WRYiEEIHMOHV]WKHW���D]D]�V]�k-

ség esetén újabb és újabb kiírásokat megvalósítható metódusokat adunk majd hozzá és

újabb adatforrásokat is be kell tudnunk építeni a rendszerbe.

a feladat elméleti háttere

$�PDJ\DU�Q\HOY&�GiWXP�NLtUiVRNKR]�D]�REMHNWXP�DGDWDL�N|]|WW�NHOO��KRJ\�V]HUe-

SHOMHQHN�D�KyQDSRN�QHYHL�pV�D�KpW�QDSMDLQDN�QHYHL��FpOV]HU&HQ�HJ\�HJ\�W|PE�HOHPHi-NpQW���$�V]iPtWiVED�M|Y��DGDWIRUUiVRN��/LQX[�8QL[�UHQGV]HULG���:LQGRZV�UHQGV]HULG��PostgreSQL adatbázis és MySQL adatbázis timestamp adatformátuma. Az objektum

létrehozása a konstruktor metódussal történik, ennek lefutása feltölti a hét napjai és a

KyQDSRN�W|PE|W��PDMG�D]�REMHNWXPRW�D�NtYiQW�GiWXP�LG��pUWpNUH�iOOtWMXN�D�PHJIHOHO�init() �PHWyGXV�PHJKtYiViYDO��&pOV]HU&�D�N�O|QE|]��DGDWIRUPiWXPRNDW�HJ\VpJHV�V]Hr-NH]HWEH�KR]QL�pV�HJ\�RV]WiO\V]LQW&�YiOWR]yEDQ�WiUROQL��(QQHN�DODSMiQ�N|YHWNH]KHWQHN�DNLtUiVRN��HO�V]|U�FVDN�QpKiQ\�IRUPiWXPRW�NpV]tW�QN�HO��GH�H]�NpV�EE�LJpQ\�V]HULQW�E�-

YtWKHW���$]�RV]WiO\�NyGMD�HJ\�N�O|Q��LQF�IiMOEDQ�NDS�KHO\HW��DONDOPD]iVNRU�H]W�D]include_once() szerkezettel visszük be a kódba. Fontos az include_once() változatot

használni, hogy az osztály kódja biztosan csak egyszer szerepeljen a teljes kódban.

tervezés

Az osztály neve legyen Mydatum. Az objektum adatai: $honapok , $napok tömbök,

$datum változó, amely a közös formátumra hozott dátumértéket fogja tárolni (ez ebben

D]�HVHWEHQ�D�81,;�GiWXP�LG��NH]HOpVpQHN�PHJIHOHO�HQ�D]�������MDQXiU���yWD�HOWHOW�Pá-

sodpercek számát fogja tárolni). Az objektumot létrehozó konstruktor az osztály nevé-

YHO�NDUDNWHUUH�PHJHJ\H]��QHY&�PHWyGXV���HEEHQ�D]�HVHWEHQ�D�0\GDWXP���PHWyGXV���H]tölti fel az adat tömböket és az utána meghívott most_init() ill etve mysql_init() metódus

D�NtYiQW�GiWXP�LG��pUWpNUH�iOOtWMD�EH�D]�REMHNWXPRW��UHQGV]HULG�UH�LOOHWYH�D�0\64/

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

61/89

DGDWEi]LVEyO�YLVV]DNDSRWW�LG�EpO\HJHW�IHOGROJR]YD�D]�DGDWEi]LVEDQ�WiUROW�LG�UH��$�NLtUyPHWyGXVRN�D�N|YHWNH]��GiWXP�LG��IRUPiWXPRNDW�DGMiN�YLssza:

ev_ho_nap_napneve() 2004. áprili s 22. csütörtök

ev_honap_nap() 2004. áprili s 22.

ev_ho_nap() 2004-04-22

honap_nap() áprili s 22.

ora_perc() 15:14

megvalósítás (kód)

mysql_datum.inc fájl - a Mydatum osztály kódja

<?php/* copyright 2004; Denes Medzihradszky, Peter Szabo *//* Osztaly, ami mysql datumformatumbol is tud magyar datum-ido* kiirasokat csinalni. */class Mydatum{ var $datum , $honapok , $napok ;

function Mydatum() //konstruktor, ami erteket ad a honap, napoktomboknek { $this -> honapok = array( "" , "január" , "február" , "március" , "ápri-lis" , "május" , "június" , "július" , "augusztus" , "szeptember" , "októ-ber" , "november" , "december" ); $this -> napok = array( "vasárnap" , "hétfõ" , "kedd" , "szerda" , "csü-törtök" , "péntek" , "szombat" ); }

function most_init() //a jelenlegi datumra allitja az objektumot { $this -> datum = time(); }

function mysql_init( $datum ) //mysql timestamp adatformatumot veszat parameterkent { $ev = intval(substr( $datum , 0, 4)); $ho = intval(substr( $datum , 4, 2)); $nap = intval(substr( $datum , 6, 2)); $ora = intval(substr( $datum , 8, 2)); $perc = intval(substr( $datum , 10, 2)); $mperc = intval(substr( $datum , 12, 2)); $this -> datum = mktime( $ora , $perc , $mperc , $ho , $nap , $ev ); }

function ev_ho_nap_napneve() //ev. honap nap., het napjaformatumban irja ki {

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

62/89

return date( "Y" , $this -> datum). ". " . $this -> honapok[ intval( date("m" , $this -> datum ))]. " " .intval( date( "d" , $this -> datum )). "., " .$this -> napok[ date( "w" , $this -> datum )]; }

function ev_honap_nap() //ev. honap nap. formatumban irja ki { return date( "Y" , $this -> datum). ". " . $this -> honapok[ intval( date("m" , $this -> datum ))]. " " .intval( date( "d" , $this -> datum )). "." ; }

function ev_ho_nap() //ev-ho-nap formatumban irja ki { return date( "Y" , $this -> datum). "-" .date( "m" , $this -> datum ). "-" .date( "d" , $this -> datum ); }

function honap_nap() //honap nap. formatumban irja ki { return $this -> honapok[ intval( date( "m" , $this -> datum ))]. "" .intval( date( "d" , $this -> datum )). "." ; }

function ora_perc() //ora:perc formatumban irja ki { return date( "H" , $this -> datum ). ":" .date( "i" , $this -> datum ); }

}?>

mysql_datum.php fájl - a megjelenítést végzi<?phpinclude ( "mysql_datum.inc" );$dt = new Mydatum();?><html><head><title>Untitled Document</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"></head><body bgcolor="#FFFFFF"><?//adatbazis idobelyegzot modellezunk$db_stmp = "20040505203452" ;//"adatbazisbol" vett datumra allunk ra$dt -> mysql_init( $db_stmp );echo $dt -> ev_ho_nap_napneve();echo "<br>" ;echo $dt -> ev_honap_nap();echo "<br>" ;echo $dt -> ev_ho_nap();echo "<br>" ;echo $dt -> honap_nap();echo "<br>" ;echo $dt -> ora_perc();echo "<br>" ;

$dt -> most_init(); //a jelenlegi datumra allunk ra

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

63/89

echo $dt -> ev_ho_nap_napneve();?></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHNËUMXQN�RO\DQ�PHWyGXVW��DPHO\�iWYHV]�NpW�GiWXP�LG�W�UHSUH]HQWiOy�REMHNWXPRW�pV�D

N�O|QEVpJ�NHW�tUMD�NL�PHWW�O�PHGGLJ�IRUPiWXPEDQ��GH�FVDN�D]RNDW�D]�HOHPHNHW��DPe-

lyekben eltérés van, azaz például 2004-03-15 és 2004-03-17 esetében a kiírás március

15-17. lesz!

gU|NO�GpVVHO�NpV]tWV�QN�~M�RV]WiO\W��DPHO\�PiV�Q\HOYHNHQ�LV�NpSHV�GiWXPRNDWPHJMHOHQtWHQL��(KKH]�WHUPpV]HWHVHQ�IHO�O�NHOO�tUQL�D�NRQVWUXNWRUNpQW�P&N|G��PHWyGXVWés egyik-másik kiíró metódust is.

5HJXOiULV�NLIHMH]pV�DONDOPD]iVD�EHYLWHOL�PH]�N�HOOHQ�U]pVpUH

specifikáció

2OGMXN�PHJ�D]�HPDLO�FtP�EHYLWHOL�HOOHQ�U]pVpW19, ill etve biztosítsuk hogy egy be-

YLWHOL�PH]�EH�FVDN�WHOHIRQV]iPRW��DQQDN�MHOOHP]��NDUDNWHUHLW�pV�HOUHQGH]pVpW��OHKHVVHQEHYLQQL��3UyEiOMXN�PHJYDOyVtWDQL�D�OHKHW��OHJMREE�PHJN|]HOtWpVW��KD�W|NpOHWHVHW�QHP�LVtudunk alkotni!

a feladat elméleti háttere

Mindenki használt már reguláris kifejezést, ha nem is tudta róla, hogy így neve-

]LN��$]�HJ\V]HU&EEHN�N|]�O�YDOy�D]��DPLNRU�HJ\�IiMOQpY�NHUHVpVEHQ��""QDS �GRF��PLQWiWadunk meg, mert rákeresünk minden olyan fájlnévre, amely két tetszés szerinti karakter

után a "nap" részláncot tartalmazza, majd tetszés szerinti hosszúságú karaktersorozat

jöhet és a kiterjesztése "doc" legyen. Ezt továbbfejlesztve a szövegfeldolgozásra szako-

sodott nyelvekben (Perl, PHP) standardizált jelöléseket vezettek be és így gyakorlatilag

EiUPLO\HQ�PLQWiW�LOOHV]WKHW�QN�D�PHJIHOHO��I�JJYpQ\�VHJtWVpJpYHO��ereg() és a kisbe-

19�(QQHN�D�UHJXOiULV�NLIHMH]pVQHN�D]�HUHGHWLMpW�D]�LQWHUQHWHQ�WDOiOWDP��PDMG�SURJUDPR]y�LVPHU�V|P�DONDl-PD]WD���W�OHP�I�JJHWOHQ�O�V]LQWpQ�D]�LQWHUQHWU�O�EHJ\&MWYH���HJ\�&UODS�HOOHQ�U]pV�HONpV]tWpVH�VRUiQ��$]&UODS�WHV]WHOpVpQpO�D]RQEDQ�NLGHU�OW��KRJ\�QHP�P&N|GLN�MyO��V�W�D]�HUHGHWL�LV�KLEiV��tJ\�D]�LWW�N|]UHDGRWWmár a javított változat. Ez mellesleg igen jól alátámasztja azt a gyakorlati tapasztalatot, hogy soha ne

fogadjuk el a "talált" kódokat kritika és alapos tesztelés nélkül!

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

64/89

W&�QDJ\EHW&�N�O|QEVpJHNHW�ILJ\HOHPEH�QHP�YHY��eregi() függvények), ha a minta il -

OHV]NHGLN��D�I�JJYpQ\�YLVV]DWpUpVL�pUWpNH�LJD]��KD�QHP��pUWHOHPV]HU&HQ�Kamis.

Ezekkel a jelölésekkel megadhatjuk, hogy milyen karakterek, azokból egymás

XWiQ�PHQQ\L�IRJDGKDWy�HO��KiQ\V]RU�LVPpWO�GKHW�HJ\�HJ\�HOHP��pV�PpJ�VRN�PiVW�LV�HO�-

tUKDWXQN��(O�tUKDWMXN�D]W�LV��KRJ\�KRYD�LOOHV]NHGMHQ�D]�HOHP��D�NDUDNWHUVRUR]DW�HOHMpUH�DYDJ\�D�YpJpUH��,JD]iQ�My�UHJXOiULV�NLIHMH]pVW�tUQL�P&YpV]HW��PHUW�iW�NHOO�OiWQL�D]�LOOHVz-

NHGpV�W|UYpQ\V]HU&VpJHLW�pV�HO�UH�WXGQL�NHOO��KRJ\�PHO\HN�OHKHWQHN�D�PHJHQJHGKHW�esetek.

Természetesen egy reguláris kifejezéses ill eszkedés nem jelenti azt, hogy az email

SpOGiXO�YDOyV�FtP��H]�D�PyGV]HU�FVDN�D�IRUPDL�HOOHQ�U]pVUH�DONDOPDV��+D�IRQWRV�V]á-

munkra, hogy a felhasználó valóban a saját email címét adja meg, tegyük ebben érde-

keltté, például a belépési jelszót vagy a regisztrációs felület linkjét a megadott email

FtPUH�N�OGM�N�HO��HVHWOHJ�PpJ�LG�NRUOiWRW�LV�IHOiOOtWKDWXQN�D�EHMHOHQWNH]pVpKH]�tervezés

(O�V]|U�LV��D]W�NHOO�EHOiWQXQN��KRJ\�PLO\HQ�HJ\�HPDLO�FtP�OHKHWVpJHV�IRUPiWXPD�$]�HOV��UpV]EHQ�D��#��MHOLJ�EHW&N�pV�V]iPRN�OHKHWQHN��EHW&YHO�NHOO�NH]G�GM|Q�pV�SRQWvagy aláhúzás karakter lehet benne. Egy és csak egy "@" karakter legyen benne, majd a

domén név részben tetszés szerinti számú aldomén lehet ponttal elválasztva, amelyek

WDUWDOPD]KDWQDN�PpJ�N|W�MHOHW��GH�DOiK~]iV�NDUDNWHUW�QHP��9pJ�O�D�FtP�OH]iUiVD�RO\DQkaraktersorozattal történik, amely a pont után minimum két karaktert tartalmaz. Nincs

helye különleges karaktereknek sem, általában nem engednek meg speciális karaktere-

ket a szolgáltatók. Erre kell tehát mintát írni.

$�WHOHIRQV]iP�HVHWpEHQ�D�V]iP�NH]G�GKHW�SOXV]�MHOOHO�pV�YDJ\�]iUyMHOOHO�pV�WHUPé-

szetesen számmal (országkód és körzetkód) amit lezárhatunk zárójellel, és amit követ-

KHW��UHV�NDUDNWHU�PDMG�LVPpW�V]iP��GH�H]HNHW�PHJV]DNtWKDWMXN�N|W�MHOOHO�YDJ\��UHV�Na-

UDNWHUHNNHO��%HW&�YLV]RQW�HJpV]HQ�EL]WRVDQ�QHP�V]HUHSHOKHW�EHQQH�20

20�(J\HQO�UH��$�WHOHIRQV]iPRN�N|QQ\HEE�PHJMHJ\H]KHW�VpJH�pUGHNpEHQ�D]�(J\HV�OW�ÈOODPRNEDQ�PiUHOpJ�J\DNRUL�D�EHW&NNHO�NLIHMH]HWW�WHOHIRQV]iP��DPLNRU�D�FpJ�U|YLG�QHYpQHN�YDJ\�V]ORJHQMpQHN�PHJIHOHO�V]iPRNDW�YiODV]WMiN�WHOHIRQV]iPNpQW��(]]HO�PRVW�HJ\HQO�UH�QHP�IRJODONR]XQN«

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

65/89

megvalósítás (kód)

ellenorzes.inc fáj l kódja

<?php//ellenorzo funkciok regexp alaponfunction check_email( $email ){ if (ereg( "^([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,-]([0-9,a-z,A-Z,-]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$" ,$email )) return true ;}

function check_telszam( $telszam ){ if (ereg( "^([0-9,\(,+]+)([-,\(,\)]([0-9]+))*[/,0-9]([0-9]+)?$" ,$telszam )) return true ;}?>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN7HUYH]]�QN�PHJ�HJ\�HOOHQ�U]��RV]WiO\W��DPHO\QHN�N�O|QE|]��PHWyGXVDL�OHV]QHN

D]�HJ\HV�J\DNUDQ�KDV]QiOW�EHYLWHOL�pUWpNHN�UHJXOiULV�NLIHMH]pVHNHQ�DODSXOy�HOOHQ�U]�függvényei. A jól megfogalmazott és kitesztelt függvényekkel szinte mindent le lehet

HOOHQ�UL]QL��pV�QHP�FVDN�D�V]HUYHU�ROGDORQ��PHUW�D�-DYD6FULSW�LV�LVPHUL�pV�NH]HOQL�WXGMD�Dreguláris kifejezéseket!

%DQQHUFVHUpO�N

specifikáció

(a) 9pOHWOHQV]HU&HQ�DNDUXQN�PHJMHOHQtWHQL�Flash segítségével készített

bannereket, azaz olyan hirdetési célokat szolgáló képeket, ahol a képhez tarto-

zó linket nem az img tag köré írt HTML kód biztosítja, hanem az a képben

magában van kódolva. Az egyes hirdetéseket bannercsere egyezség keretében

azonos gyakorisággal akarjuk megjeleníteni.

(b) $�YpOHWOHQV]HU&HQ�PHJMHOHQtWHWW�NpSHN�HJ\V]HU&�.jpg vagy .png képek21 és en-

nek következtében a hirdetett link nem a képfájlban van kódolva. A megjele-

nítési követelmények azonosak.

21 Ismert, hogy gyakran használnak animált .gif gépeket bannerként. Fontos megjegyezni, hogy a gif

technika alkalPD]iVD�OLFHQV]HW�LJpQ\HO��H�QpON�O�IHOKDV]QiOiVD�V]HU]�L�pV�V]RPV]pGRV�MRJRNDW�VpUW�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

66/89

a feladat elméleti háttere

Az (a) esetben a képfájl hordozza az összes információt, azaz csak ezek véletlen-

V]HU&�+70/�ROGDOED�LOOHV]WpVpU�O�NHOO�JRQGRVNRGQL��D�W|EEL�PHJ\�PDJiWyO��$�ZHEKHO\�]HPHOWHWpVH�VRUiQ�FpOV]HU&�OHQQH��KD�FVDN�IHO�NHOOHQH�W|OWHQL�D�NpSHNHW�HJ\�EDQQHUHNHOQHYH]pV&�PDSSiED��DKRQQDQ�V]NULSW�QN�YpOHWOHQV]HU&HQ�NLYHV]�HJ\�HJ\�NpSHW�pV�D]WPHJMHOHQtWL�D�+70/�ROGDOED�iJ\D]YD��$�SUREOpPiW�WHKiW�OHV]&NtWHWW�N�DGRWW�PDSSD�WDr-WDOPiQDN�NLROYDViViUD��D]RNEyO�YpOHWOHQV]HU&�NLYiODV]WiVUD��$�3+3�PLQW�V]HUYHU�ROGDOLszkriptnyelv képes fájlkezelésre (a JavaScript a kliens oldalon nem!) és a könyvtárak

kezelésének mechanizmusa megegyezik a fájlkezeléssel (ne felejtsük el a Linux/Unix

IHOIRJiVW��D�N|Q\YWiU�LV�IiMO��FVDN�N�O|QOHJHV�WXODMGRQViJDL�YDQQDN����D]D]�HO�V]|U�PHg-

Q\LWMXN��D�WDUWDOPiW�NLROYDVVXN��YpOHWOHQV]HU&HQ�NLYiODV]WXQN�HJ\�NpSIiMOW��PDMG�PHJMe-

lenítjük.

A (b) esetben két, egymáshoz kapcsolódó információra van szükségünk, a képfájl

QHYpUH�pV�HOpUpVL�~WMiUD��YDODPLQW�D�KLUGHWHQG��OLQNUH��(]HNHW�WiUROKDWMXN�DGDWEi]LVEDQYDJ\�IiMOEDQ��V�W�PDJiEDQ�D�NyGEDQ�LV�HOKHO\H]KHW�QN�HJ\�DVV]RFLDWtY�W|PE|W��DKRO�DNXOFV�OHKHW�D�IiMOQpY��D]�pUWpN�D�OLQN�85/�MH��(]HNE�O�NHOO�D]�|VV]HWDUWR]y�LQIRUPiFLó-

SiUW�YpOHWOHQV]HU&HQ�NLYiODV]WDQL�pV�PHJMHOHQtWHQL��$]�HJ\pUWHOP&��KRJ\�~M�NpSHN�pV�Dhozzájuk tartozó link távoli feltöltése csak adatbázison át történhet, a másik két esetben

akár az információt hordozó fájlt , akár a kódot manuálisan szerkeszteni kell .

tervezés

$�3+3�Q\HOYEHQ�HJ\�N|Q\YWiU�PHJIHOHO��PyGRQ�W|UWpQ��pV�VLNHUHV�PHJQ\LWiVDesetében (opendir() ) egy azonosítót kapunk vissza, amelynek segítségével kiolvashat-

juk soronként a mappát (fájlonként) majd bezárjuk. Minden mappa tartalmaz egy "." és

HJ\������IiMOW�LV��H]HNUH�SHUV]H�YL]VJiOQL�NHOO�D�NLROYDViVW�pV�NL�NHOO�V]&UQL��$�NLROYDVRWWfájlokat egymás után egy erre a célra létrehozott tömbbe ($bannerek ) nyomjuk bele

(array_push() függvény) majd az array_rand() �VHJtWVpJpYHO�YpOHWOHQV]HU&HQ�LQGH[HWválasztunk ki és kiolvassuk/megjelenítjük az index alapján a képfájlokat tartalmazó

W|PE�PHJIHOHO��HOHPpW�A (b) esetben kicsit bonyolultabb a helyzet. Adatbázis alapú megoldás esetén ki

kell olvasni az összes aktuális rekordot, meg kell számolni (az SQL count() függvénye)

majd az így megismert határok között véletlenszámot generálunk és annak alapján a

UHFRUGVHW�E�O�NLHPHOM�N�D]�tJ\�NLYiODV]WRWW�VRUW��(]W�IHOGROJR]YD�NDSMXN�PHJ�D�PHJMHOe-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

67/89

QtWHQG��NpSIiMO�85/�MpW�pV�D�OLQNHW��+D�QHP�iOO�UHQGHONH]pV�QNUH�DGDWEi]LV��DNNRU�YDJ\fájlban tároljuk a kép URL - hozzátartozó link párokat egy-egy sorban, vagy magában a

kódban asszociatív tömb formájában. Fájlból kiindulva a fájlt megnyitjuk, a kapott fájl -

D]RQRVtWy�DODSMiQ�VRURQNpQW�NLROYDVVXN�pV�D]�HOYiODV]Wy��FpOV]HU&HQ�WDEXOiWRU��PHQWpQszétbontjuk, majd az információkat két párhuzamos tömbbe belenyomjuk és visszave-

]HWM�N�D�PHJROGiVW�D�IHQWHEE�OHtUWUD��.yGEDQ�W|UWpQ��WiUROiV�HVHWpEHQ�D�OHJHJ\V]HU&EE�KD�D�NpS�pV�OLQNLQIRUPiFLy�HJ\�DVV]RFLDWtY�W|PEEHQ�WDOiOKDWy�pV�HEE�O�W|UWpQLN�D�YpOHt-lenszeU&�NLYiODV]WiV�

$�KiURPIpOH�PHJROGiVW��HOYLOHJ�FVDN�NHWW����IRJMXN�|VV]H�HJ\�RV]WiO\�NHUHWpEHQ�8WiQD�PiU�FVDN�H]W�NHOO�SpOGiQ\RVtWDQL�pV�D�PHJIHOHO��PHWyGXV�PHJKtYiViYDO�WHWV]pVszerinti fájlEDQ�PHJYDOyVtWKDWy�D�EDQQHUFVHUpO��P&N|GWHWpVH�megvalósítás (kód)

index.html fáj l kódja:

<?phpinclude_once ( "banner.inc" );

?><html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"><title></title></head>

<body><div align="center"> <center> <table border="0" cellpadding="6" cellspacing="0" width="700"> <tr> <td>Asszociativ tömb tartalmazza a képfájlok neveit és elérésiútját (kulcs) valamint a hozzájuk tartozó linket (érték)</td> <td> <? $tomb = array( "images/kek.gif" => "http://www.medzi.hu/php" ,"images/okker.gif" => "http://www.gdf.hu" , "images/piros.gif" => "http://www.index.hu" , "images/zold.gif" =>"http://www.greenpeace.org" ); $bn = new Banner(); $hivatkozas = $bn ->standard( $tomb ); echo $hivatkozas ; ?> </td> </tr> <tr> <td>Egyszerû szöveges fájl tartalmazza a képneveket elérési út-tal együtt

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

68/89

valamint a hozzájuk tartozó linket</td> <td> <? $bn = new Banner(); $hivatkozas = $bn ->standard_file( "bannerek.txt" ); echo $hivatkozas ; ?> </td> </tr> <tr> <td>A kép hordozza a link információt, csak kiolvassuk amegfelelõ könyvtár tartalmát</td> <td> <? $bn = new Banner(); $kepurl = $bn ->flash( "images" ); echo ( "<img border= \" 0\" src=" . $kepurl . " >" ); ?> </td> </tr> </table> </center></div></body></html>

banner.inc fáj l kódja:

<?php

class Banner{ //visszaad a konyvtarban talalhato fajlok kozul egyet, randomkivalasztva function flash( $konyvtar ) { $bannerek = array(); $dp = opendir( $konyvtar ) or die( "nem sikerült a könyvtár megnyitá-sa!" ); while ( $file = readdir( $dp )) { if ( $file != "." && $file != ".." ) array_push( $bannerek , $file ); } closedir( $dp ); srand ((float) microtime() * 10000000 ); $index = array_rand ( $bannerek ); return $konyvtar . "/" . $bannerek [ $index ]; }

//visszaad a tomb alapjan egy random kivalasztott kepet es ahozzatartozo linket function standard( $tomb ) { srand ((float) microtime() * 10000000 ); $index = array_rand( $tomb ); return "<a href=" . $tomb [ $index ]. "><img src= \" " . $index . " \"border= \" 0\" ></a>" ; }

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

69/89

//visszaad egy textfajl alapjan egy random kivalasztott kepet es ahozzatartozo linket function standard_file( $filenev ) { $kepek = array(); $linkek = array(); $fp = fopen( $filenev , "r" ) or die( "nem sikerült a fájl megnyitá-sa!" ); while (!feof( $fp )) { $puffer = fgets( $fp , 128 ); $sor = explode( " \t " , $puffer ); array_push( $kepek , $sor [ 0]); array_push( $linkek , $sor [ 1]); } fclose( $fp );

srand ((float) microtime() * 10000000 ); $index = array_rand( $kepek ); return "<a href=" . $linkek [ $index ]. "><imgsrc= \" " . $kepek [ $index ]. " \" border= \" 0\" ></a>" ; }};

?>

bannerek.txt fájl tartalma

images/piros.gif http://www.index.huimages/kek.gif http://www.medzi.hu/phpimages/zold.gif http://www.greenpeace.orgimages/okker.gif http://www.gdf.hu

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN&VDOMXQN�HJ\�NLFVLW��%iU�D�EDQQHUFVHUpO��PHJYDOyVtWiVD�VRUiQ�DODSYHW�HQ�D�YpOHt-

OHQV]HU&�NLYiODV]WiVUD�W|UHNHGW�QN�±�HJ\HQO��HVpO\W�DGYD�PLQGHJ\LN�PHJMHOHQpVQHN�±�GHHO�IRUGXOKDW�RO\DQ�LJpQ\��EL]WRVtWVXQN�HJ\�LG��±�SRQWRVDEEDQ�OHW|OWpV�±�DUiQ\RV�PHJMe-

lenítést. azaz valósítsuk meg, hogy adott bannerre beállítható legyen a kódban a száza-

OpNRV�HO�IRUGXOiV�pUWpNH�'%0�DGDWEi]LV�NH]HOpV���XWROVy�OiWRJDWiV�LG�SRQWMD

specifikáció

:HEV]HUYHU�QN|Q�QHP�iOO�UHQGHONH]pVUH�64/�DGDWEi]LV�NH]HO��UHQGV]HU��0iU�D3+3�IXWWDWiVL�OHKHW�VpJHW�LV�FVDN�QDJ\�QHKH]HQ�WXGWXN�HQJHGpO\H]WHWQL��GH�DGDWEi]LVUyOszó sem lehet! Mi mégis szeretnénk nyilvántartani, hogy az egyes látogatók esetében

mikor történt a legutóbbi belépés - és ezt közölni is akarjuk velük az üdvözlésben.

Valahogy így:

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

70/89

6]LD�[\��(]�D]�HOV��OiWRJDWiVRG�QiOXQN�,OOHWYH�YLVV]DWpU��OiWRJDWyknál:

6]LD�[\��/HJXWROVy�OiWRJDWiVRG�LG�SRQWMD���������������������YROW�a feladat elméleti háttere

Tipikus adatbázisos feladat, de ha nincs adatbázis? Van viszont a PHP nyelvnek

RO\DQ�I�JJYpQ\FVRPDJMD��DPHO\�DONDOPDV�HJ\V]HU&�NXOFV�pUWpN�SiURNRQ�DODSXOy�DGDWEá-

zisok kezelésére (ilyen lehet a Berkeley DB, a Gdbm, egyes rendszerkönyvtárak). Az

DGDWEi]LV�H]HNEHQ�D]�HVHWHNEHQ�HJ\HWOHQ�IiMO�DPLW�D�3+3�PHJIHOHO�HQ�NH]HOQL�NpSHV��GHD]�HJ\V]HU&�IiMONH]HOpVHQ�W~O�Q\LWiVNRU�HJ\��OFN��ORFN��IiMO�OpWUHKR]iVD�VHJtWVpJpYHO�VDMiWzárolást is csinál, a felülírások elkerülésére.

A login alapján tároljuk a belépéseket, mindenki esetében az utolsót (most nem

HOOHQ�UL]]�N�D�ORJLQ�HJ\HGLVpJpW��PDMG�D�WRYiEEIHMOHV]WpVEHQ���+D�QLQFV�LO\HQ�D]RQRVí-WyYDO�UHQGHONH]��IHOKDV]QiOy��DNNRU�~M�UHNRUGRW�NpV]tW�QN�pV�DUUyO�LV�JRQGRVNRGQL�NHOO�KRJ\�D]�HOV��KDV]QiODW�HVHWpQ�OpWUHKR]]XN�D]�DGDWRNDW�WDUWDOPD]y�IiMOW�LV��(KKH]�Ddbmopen() függvényben megnyitási típusként a "c" jelölést használjuk (olvasás, írás,

létrehozás).

1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�OHJW|EE�HVHWEHQ�H]�D�I�Jg-

vénycsomag alapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a

php.ini fájlban a kiterjesztések (Windows extensions) részben az extension=php_db.dll

EHMHJ\]pV�HO�O�NL�NHOO�YHQQL�D�NRPPHQWH]pVUH�KDV]QiOW�����MHO|OpVW�tervezés

$�ORJLQ��HJ\HGL�D]RQRVtWy��EHNpUpVH�HJ\�&UODS�VHJtWVpJpYHO�W|UWpQLN��KD�H]�D]�D]o-

QRVtWy�OpWH]LN�DGDWEi]LVXQNEDQ��DNNRU�D]�&UODS�HON�OGpVH�XWiQ�NLtUMXN�D]�XWROVy�EHOpSpVid�pontját, ha nem, csak tájékoztató szöveg jelenik meg.

A logint kulcsként alkalmazzuk és értékként a time() függvénnyel lekérdezzük a

UHQGV]HULG�W�PyGRVtWiVNRU�LOOHWYH�~M�UHNRUG�IHOYpWHOHNRU��NLtUiV�HVHWpEHQ�SHGLJ�H]�V]ROJiOLG�EpO\HJ]�QHN�D�GDWH���I�JJYpQ\KH]��DPLW�D�VSHFLILNiFLyQDN�PHJIHOHO��IRUPi]yV]WULQJJHO�KtYXQN�PHJ��$]�DODSHVHWHNQHN�PHJIHOHO��NLtUiVW�LV�NpV]tW�QN�D�V]HOHNFLyegyes ágaihoz.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

71/89

megvalósítás (kód)

adatbazis.php fáj l

<html><head><title>DBM adatbázis kezelése</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"></head><body bgcolor="#FFFFFF"><?

if ( $userid != "" ){ $dbm = dbmopen ( "legutobb.db" , "c" ) or die( "nem sikerült adatbázistnyitni!" ); if (dbmexists ( $dbm, $userid )) { $latogatas = dbmfetch( $dbm, $userid ); echo ( "Kedves " . $userid . "! <br>Az utolsó látogatásod ideje:" .date( "Y-m-d H:i:s" , $latogatas )); dbmclose ( $dbm); $dbm = dbmopen ( "legutobb.db" , "w" ); $time = strval(time()); dbmreplace ( $dbm, $userid , $time ); dbmclose ( $dbm); } else { echo ( "Kedves " . $userid . "! Üdvözöljük honlapunkon!" ); dbminsert ( $dbm, $userid , time()); dbmclose ( $dbm); }}?>

<form method="POST" action=""> <table width="50%" cellpadding="6" border="0" cellspacing="0"> <tr> <td> Login: <input type="text" name="userid"> <input type="submit" name="Submit" value="Elküldés"> </td> </tr> </table></form></body></html>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHNHozzá lehetne szerkeszteni egy látogatási számot is, amely személyekre meg-

mondja, ki hányszor járt már az adott lapon - ez átvezet minket a statisztikákhoz, ami-

kor figyelni akarjuk az egyes látogatókat, kinek mi tetszik, merre barangol a lapon.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

72/89

DBM adatbázis kezelés - jelszavas beléptetés

specifikáció

:HEV]HUYHU�QN|Q�QHP�iOO�UHQGHONH]pVUH�64/�DGDWEi]LV�NH]HO��UHQGV]HU��PpJPLQGLJ���0iU�D�3+3�IXWWDWiVL�OHKHW�VpJHW�LV�FVDN�QDJ\�QHKH]HQ�WXGWXN�HQJHGpO\H]WHWQL�GH�DGDWEi]LVUyO�V]y�VHP�OHKHW��0L�PpJLV�OpWUH�DNDUXQN�KR]QL�EHOV��KDV]QiODWUD�HJ\�Ió-

rumot, ahol jelszavas belépés van és csak a társaságunk tagjai üzenhetnek egymásnak a

fórum hasábjain. Tárolnunk kell a tagok loginját (azonosítóját) - ez a rendszeren feltét-

OHQ�O�HJ\HGL�OHJ\HQ����MHOV]DYiW��HPDLO�FtPpW��/HJ\HQ�OHKHW�VpJ�D�MHOV]y�N|]YHWOHQ�PHg-

YiOWR]WDWiViUD�D�WDJRN�UpV]pU�O��$�IyUXPRW�PRVW�QHP�NHOO�PHJYDOyVtWDQL�pV�YpGHWW�QDYi-gációt sem kell l étrehozni.

a feladat elméleti háttere

Meg kell tehát oldani, hogy csak login/jelszó ismeretében léphessenek be a tagok,

de azért ahhoz sokan vagyunk, hogy mindezt az információt fájlban tároljuk és minden

változtatáshoz kézzel szerkesszük át az adatokat tartalmazó fájlt . Tipikus adatbázisos

feladat, de ha nincs adatbázis? Van viszont a PHP nyelvnek olyan függvénycsomagja,

DPHO\�DONDOPDV�HJ\V]HU&�NXOFV�pUWpN�SiURNRQ�DODSXOy�DGDWEi]LVRN��LO\HQ�OHKHW�D�%HUNe-

ley DB, a Gdbm, egyes rendszerkönyvtárak) kezelésére. Kulcsként adódik a login, hi-

V]HQ�HO�tUiV��KRJ\�HJ\HGL�OHJ\HQ�D�UHQGV]HU�QNEHQ��D]�pUWpNUH�XJ\DQ�W|EE�HOHP�LV�YDQ�GH�QHP�RO\DQ�ERQ\ROXOW�NpW�YDJ\�W|EE�HOHP�|VV]HI&]pVpYHO�HJ\�WiUROKDWy�V]WULQJHW�HO�-

állítani. Itt most tömbökbe szervezzük a kulcshoz tartozó egyéb adatokat, ezeket kell

majd az adatbázisba felvinni.

.LKDV]QiORP� D� OHKHW�VpJHW� D]� HJ\PiVUD� pS�O�� VWtOXVODSRN� �&DVFDGLQJ� 6W\OHSheets, CSS) rövid gyakorlati bemutatására is. Az egyes fájlokon belül a weblapba épí-

WHWW�VWtOXVODSRN�DGMiN�PHJ�D�EHYLWHOL�PH]��N�ODODNMiW��D�V]tQHNHW��D�NHUHWHNHW��~J\�KRJ\átdefiniáljuk a táblacellákat (td) és új osztályt hozunk létre (.table), amit majd a táblázat

fejlécében helyezünk el, hogy a táblázat egészére vonatkozzon.

1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�OHJW|EE�HVHWEHQ�H]�D�I�Jg-

vénycsomag alapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a

php.ini fájlban a kiterjesztések (Windows extensions) részben az extension=php_db.dll

EHMHJ\]pV�HO�O�NL�NHOO�YHQQL�D�NRPPHQWH]pVUH�KDV]QiOW�����MHO|OpVW�

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

73/89

tervezés

+iURP�IiMOW�KR]XQN�OpWUH��D]�LQGH[�SKS�IHODGDWD�D�MHOV]DYDV�EHOpSpVKH]�D]�&UODSPHJMHOHQtWpVH�pV�D�EHYLWW�DGDWRN�HOOHQ�U]pVH��PDMG�D]RN�HOIRJDGiVD�HVHWpQ�D]�iWLUiQ\tWiVD�EHOVR�SKS�ZHEODSUD��(]HQ�D�ODSRQ�HJ\�~MDEE�&UODS�VHJtWVpJpYHO�D�IHOKDV]QiOy�PHJYil-WR]WDWKDWMD�D�MHOV]DYiW��$]�D]RQRVtWyW�QHP�LV�NpUM�N�EH�~MEyO��KLV]HQ�FVDN�D�PHJIHOHO�login/jelszó ismeretében kerülhet ide22. A harmadik fájl a regform.php, nevének meg-

IHOHO�HQ�H]HQ�D�ODSRQ�HJ\�HJ\V]HU&�UHJLV]WUiFLy�KDMWKDWy�YpJUH��DKRO�~M�HJ\HGL�D]RQRVtWyW(login), jelszót, e-mail címet vihetünk fel. Ezeket a login egyediségén kívül külön nem

HOOHQ�UL]]�N��$�UHJLV]WUiFLy�XWiQ�D�IHOKDV]QiOyW�iWLUiQ\tWMXN�D]�LQGH[�SKS�ODSUD��DKRO�EHtud lépni a rendszerve, immár regisztrált felhasználóként.

$]�LQGH[�SKS�EHOpSpVL�&UODSRW�DNNRU�GROJR]]XN�IHO��KD�PLQGNpW�PH]�W�NLW|OW|WWpN�(O�V]|U�PHJYL]VJiOMXN�D�ORJLQ�PHJOpWpW�D]�DGDWEi]LVEDQ��KD�YDQ�LO\HQ��OHNpUM�N�HQQHNDODSMiQ�D�KR]]iWDUWR]y�pUWpNHW��QH�IHOHGM�N��HJ\V]HU&�NXOFV�pUWpN�SiUUyO�YDQ�V]y���Ni-V]HGM�N�EHO�OH�D�MHOV]y�V]WULQJHW�pV�|VV]HKDVRQOtWMXN�D�EHYLWWHO��,JD]�HUHGPpQ\�HVHWpQJavaScript segítségével megoldjuk az átirányítást, az URL-ben átadva a logint is.

Ha nincs ilyen login, figyelmeztetést írunk a $loginhiba változóba, amit majd meg

is jelenítünk újratöltéskor, ha nem azonos a bevitt és a tárolt jelszó, ugyanezt csináljuk a

$jelszohiba változóval.

$�UHJIRUP�SKS�UHJLV]WUiFLyV�&UODS�HVHWpEHQ�KDVRQOyNpSSHQ�MiUXQN�HO��PLQGKiURPPH]��NLW|OWpVH�XWiQ�NH]G�QN�HO�IRJODONR]QL�D]�DGDWRNNDO�pV�HO�V]|U�HOOHQ�UL]]�N��YDQ�Hmár ilyen azonosító az adatbázisban. Ha igen, ezt a melléírásos technikával jelezzük is a

EHYLWHOL�PH]��N|]HOpEHQ��PtJ�D�W|EEL�PH]��pUWpNpW�YLVV]DtUMXN��QH�NHOOMHQ�D]RNDW�~MUDkitölteni a felhasználónak. Siker esetén egy JavaScript üzenet után átirányítjuk a fel-

használót a regisztrált belépésekhez.

$�MHOV]yPyGRVtWiVW�KRUGR]y�EHOVR�SKS�IiMO�KDVRQOyNpSSHQ�P&N|GLN��PLYHO�D�ORJLQWPiU�WXGMXN�D]�85/�E�O���IHOWpWHOH]pV�QN�V]HULQW�LGH�FVDN�UHJLV]WUiOWDQ�OpSKHW�EH�D�IHl-

22�)HOWpWHOH]pV�QN�V]HULQW��(J\�pOHV�UHQGV]HU�HVHWpEHQ�H]W�PLQGLJ�OH�NHOO�HOOHQ�UL]QL�D�V]HUYHUROGDORQ�pVLG�NRUOiWRW�NHOO�IHOiOOtWDQL�D�EHOpSpVKH]��KLV]HQ�D]�RWWKDJ\RWW��D�NOLHQV�JpSHQ�OHPHQWHWW�ODS�DODSMiQ�N�O|n-

EHQ�PiV�LV�EH�WXGQD�OpSQL��LOOHWYH�HJ\V]HU&EE�OHQQH�D�KDFNHU�pOHWH��KD�D]�D]RQRVtWyW�PiU�QHP�NHOOHQH�PHg-

keresni.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

74/89

használó - csak az új jelszót gépeltetjük be vele, a szokásos ismétléssel és átírjuk az

adatbázisban annak értékét a kulcshoz tartozó szerializált sztringben.

$�NyGEDQ�FVDN�D�UHJIRUP�SKS�W�PXWDWMXN�EH�WHOMHV�HJpV]pEHQ��D�PiVLN�NHWW�E�Ocsak a PHP kód részletet másoljuk be ide.

megvalósítás (kód)

regform.php fájl kódja<?php//csak akkor foglalkozunk vele, ha ki vannak toltve a mezok$hiba = "" ;if ( $login != "" && $pwd != "" && $email != "" ){ //megvizsgaljuk, egyedi-e a login es ha nincs adatbazis, letrehozzuk $dbm = dbmopen( "tagok.db" , "c" ) or die( "nem sikerült adatbázistnyitni!" ); if (!dbmexists( $dbm, $login )) // ha nem foglalt { $tomb = array( $pwd, $email ); $ertek = serialize( $tomb ); dbminsert( $dbm, $login , $ertek ); dbmclose( $dbm); //regisztralt belepeshez atiranyitas JavaScript segitsegevel echo ( "<script>" ); echo ( "alert('A regisztráció sikeres');" ); echo ( "location.replace('index.php');" ); echo( "</script>" ); exit(); } else $hiba = "ilyen login már van!" ;}?><html><head><title>DBM adatbázis - jelszavas belépés</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"><style type="text/css"><!--td {font-family: Arial, Helvetica, sans-serif;font-size: 10pt}.table {font-weight: bold;color: #330000;background-color: #FFFFCC; border: 1px #CC9933 solid}--></style></head>

<body bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="6"align="center">

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

75/89

<tr><td colspan="3"><p>&nbsp;</p><p>&nbsp;</p></td></tr><tr><td width="25%">&nbsp;</td><td width="50%" ><form name="regisztracio" method="post" action=""><div align="center"><table width="350" cellspacing="0" cellpadding="3" class="table"><tr> <td colspan="2" > <div align="center"> <p>Regisztrálás</p> </div> </td></tr><tr> <td width="100">login: </td> <td> <input type="text" name="login" size="15" maxlength="15"value=" <? echo $login ; ?>"><? if ( $hiba != "" ) echo ( "<font color=#FF0000 size=-2>" . $hiba . "</font>" ); ?> </td></tr><tr> <td width="100">jelszó:</td> <td> <input type="password" name="pwd" size="15" maxlength="15"value=" <? echo $pwd; ?>"> </td></tr><tr> <td width="100">email: </td> <td> <input type="text" name="email" size="30" maxlength="30"value=" <? echo $email ; ?>"> </td></tr><tr> <td colspan="2" > <div align="center"> <input type="submit" name="Submit" value=" Belépés "> </div> </td></tr></table></div></form></td><td width="25%">&nbsp; </td></tr></table></body></html>

index.php fájl kódrészlete

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

76/89

<?php//ha kitoltottek a login es jelszo mezoket$loginhiba = "" ;$jelszohiba = "" ;if ( $login != "" && $pwd != "" ){ //eloszor megnezzuk, van-e ilyen login $dbm = dbmopen ( "tagok.db" , "w" ) or die( "nem sikerült adatbázistnyitni!" ); if (dbmexists( $dbm, $login )) { //kiszedjuk a tarolt jelszot es osszevetjuk $tomb = unserialize(dbmfetch( $dbm, $login )); dbmclose( $dbm); if ( $tomb [ 0] == $pwd) { echo( "<script>location.replace('belso.php?login=" . $login . "');</script>" ); exit(); } else { $jelszohiba = "nem jó a jelszó!" ; } } else { $loginhiba = "nincs ilyen login!" ; dbmclose( $dbm); }}?>

belso.php fájl kódrészlete<?php//ha kaptunk egy jelszomodositasi kerelmet: (mar tudjuk a logint is)//ha a jelszavak rendben vannak, kitoltve es azonosakif ( $ujpwd1 != "" && $ujpwd1 == $ujpwd2 ){ //fel kell tolteni a szerverre egy tagok.db fajlt legelso alkalommal $dbm = dbmopen ( "tagok.db" , "w" ) or die( "nem sikerült adatbázistnyitni!" ); $tomb = unserialize(dbmfetch( $dbm, $login )); $tomb [ 0] = $ujpwd ; $ertek = serialize( $tomb ); dbmreplace( $dbm, $login , $ertek ); dbmclose( $dbm);}?>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHNSzerkesszük össze a két DBM adatbázis példát egyetlen alkalmazásba és oldjuk

PHJ�D]W�LV��KRJ\�OHJ|UG�O��PHQ�E�O�NLYiODV]WYD�D�WDJRN�ORJLQMiW���]HQHWHW�N�OGKHVV�QNadott személynek, aki ezt belépésekor rögtön láthatja is a belso.php fájl erre a célra

fenntartott paneljában.

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

77/89

(J\V]HU&�IyUXP���]HQ�IDO

specifikáció

+R]]XQN�OpWUH�HJ\V]HU&�IyUXPRW��DKRO�D�KR]]iV]yOiVRNDW�LG�UHQGEHQ�W�QWHWM�N�IHOés lapozgathatunk a régebbi-újabb közlemények között, egyszerre adott számú tételt

jelenítve meg. Mindenki hozzászólhat korlátozás nélkül, a hozzászóló nevét, becenevét

(nick) és e-mail címét, valamint hozzászólását és annak rövid összefoglalását tüntetjük

fel. Gondoskodjunk arról, hogy a szöveggel ne lehessen "elrontani" a fórumot!

a feladat elméleti háttere

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

/iWRJDWy�V]iPOiOiV���HJ\V]HU&

specifikáció

Számolni akarjuk látogatóinkat és ezt az adatot tárolni is akarjuk. Ki akarjuk vé-

GHQL�YLV]RQW�D�PDQLSXOiOiVL�OHKHW�VpJHNHW��D]D]�QH�OHKHVVHQ��S|UJHWpVVHO���IULVVtWpVJRPEEDO�~MUDW|OWYH�D]�ROGDOW��OiWRJDWyV]iPRW�Q|YHOQL��9DODPLO\HQ�V]LQW&�OiWRJDWy�D]o-

nosítást (például IP cím) is el akarunk végezni.

a feladat elméleti háttere

tervezés

megvalósítás (kód)

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

78/89

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Látogató számlálás - statisztika

specifikáció

$]�HO�]��IHODGDW�WRYiEEIHMOHV]WpVH��H]~WWDO�D�V]iPROiV�PHOOHWW�D]�HJ\HV�ROGDODNlátogatottságát is fel akarjuk mérni. Külön kérésre kapjunk táblázatos összefoglalást az

ROGDODN�OiWRJDWRWWViJiUyO��D�PHJIHOHO��V]&UpVHN�PHOOHWW��.L�DNDUMXN�YpGHQL�YLV]RQW�D�Pa-

QLSXOiOiVL�OHKHW�VpJHNHW��D]D]�QH�OHKHVVHQ��S|UJHWpVVHO���IULVVtWpV�JRPEEDO�~MUDW|OWYH�D]ROGDOW��OiWRJDWyV]iPRW�Q|YHOQL��9DODPLO\HQ�V]LQW&�OiWRJDWy�D]RQRVtWiVW��SpOGiXO�,3�FtP�is el akarunk végezni.

a feladat elméleti háttere

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Képek kirakása, képgalériák

specifikáció

Egy könyvtárba töltjük fel képeinket és ezeket akarjuk megmutatni, egyszerre

PLQGLJ�FVDN�DGRWW�V]iP~�GDUDERW��%HPXWDWiVXNKR]�HO�V]|U�N|U|PQ\L�PpUHW&�WKXPEQDLO���DGRWW�pV�HJ\VpJHV�V]pOHVVpJ&�NpSHNHW�UHQGH]�QN�HO�D�IHO�OHWHQ��H]HNUH�NDt-tintva viszont megjelenítM�N�D�WHOMHV�PpUHW&�NpSHW�HJ\�IHOEXNNDQy�DEODNEDQ�a feladat elméleti háttere

1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�JUDILNDL�I�JJYpQ\FVRPDJalapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a php.ini fájlban

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

79/89

D�NLWHUMHV]WpVHN��:LQGRZV�H[WHQVLRQV��UpV]EHQ�D]�H[WHQVLRQ SKSBJG�GOO�EHMHJ\]pV�HO�Oki kell venni a kommentezésre használt ";" jelölést.

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Dinamikus képek - feli rat készítés

specifikáció

)RWyJ\&MWHPpQ\�QNHW�V]HUHWQpQN�PHJMHOHQtWHQL�D�ZHEHQ��GH�QHP�DNDUMXN��KRJ\bárki letölthesse és felhasználhassa. Ennek egyik lehetséges megoldása, hogy minde-

J\LNHQ�HOKHO\H]�QN�HJ\�V]HU]�L�MRJXQNDW�GHNODUiOy�IHOLUDWRW��GH�H]W�QHP�DNDUMXN�Npp-

szerkesztéssel megoldani, nem akarjuk "elrontani" a képeinket.

a feladat elméleti háttere

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

'LQDPLNXV�NpSHN���HJ\V]HU&�LGRPRN�NLUDM]ROiVD

specifikáció

+R]]XN�OpWUH�HJ\�SLURV�KiWWpUV]tQ&�NpSHW��DPHO\EHQ�NpW�NpN�KDViERW�KHO\H]�QN�HO�$�KDViERN�V]pOHVVpJH�DGRWW���PLQGLJ����SL[HO�PpUHW&HN���GH�PDJDVViJXN�YiOWR]y��D]egyik a mindenkori képmagasság 50, a másik a 75 százaléka. A kép mérete legyen vál-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

80/89

WR]WDWKDWy�&UODSRQ�NHUHV]W�O�W|UWpQ��DGDWEHYLWHOOHO��V]pOHVVpJ��PDJDVViJ���GH�D�KDViERNmindig az kép alapjához igazodjanak. Készítsünk egy feli ratot is a képre, a "Hasábok"

V]yW�tUMXN�NL�D�NpS�IHOV��UpV]pUH��1HP�NHOO�N�O|Q�HOOHQ�U]pVW�YpJH]QL�D]�HJ\HV�HOHPHNelhelyezéséhez, tételezzük fel, hogy a képméret változtatásánál nem visznek be irreális

értékeket.

a feladat elméleti háttere

A feladat lényege a PHP képkezelési elvének megértése. Az ezt szolgáló függvé-

Q\HNHW�D�*'�QHY&�FVRPDJ�WDUWDOPD]]D��DPHO\HW�EH�NHOO�iOOtWDQL�D�I�JJYpQ\HN�HOpUpVHpUGHNpEHQ��$�NpS�OpWUHKR]iVD�D�N|YHWNH]��OpSpVHNE�O�iOO�

Alapelv, hogy HTML oldalba ill esztett kép esetén létre kell hozni az oldalon a kép

HTML hivatkozását, azaz bele kell írni/szerkeszteni a kódba az <img src=kep.php

width="ddd" height="ddd"> képet meghatározó tag-et, amelyben a kep.php fájlnév a

létrehozandó kép leírását tartalmazó PHP fájl neve és a szélesség, magasság attribútu-

mok opcionálisak, ill etve általában a képet leíró fájlban adjuk meg (ez különösen akkor

igaz, ha dinamikusan változik a képméret adott határok között).

$�NpSHW�OHtUy�IiMO�YDOyEDQ�HJ\�IiMO�KR]�OpWUH��WHKiW�HO�V]|U�HJ\�KHDGHU�XWDVtWiVW�N�l-dünk ki, meghatározva a kép típusát (jpg, png, stb.). Ezt követi a kép alapjának23 létre-

hozása az imagecreate() függvénnyel, amelynek paraméterei a kép szélesség, magasság

adatai és visszatérési értéke a szokásos logikai értéken túl (sikeres/sikertelen végrehaj-

tás) a kép azonosítója (például $img ). Utána színeket határozhatunk meg, alapértelme-

]pVEHQ�D]�HOV��PHJKDWiUR]RWW�V]tQ�D�KiWWpU�V]tQH��(]HNHW�N|YHWLN�D�NLtUy�XWDVtWiVRN�DPHO\HN�D�*'�FVRPDJ�YHU]LyMiWyO�pV�D�N|UQ\H]HWW�O�I�JJ�HQ�HOWpUKHWQHN��D]D]�H]W�DMin-

latos kipróbálni a megcélzott futtató rendszeren is. Ha szöveget is ki akarunk írni, akkor

HO�V]|U�PHJ�NHOO�KDWiUR]QL�D�KDV]QiODQGy�IRQWNpV]OHWHW��PHJ�NHOO�DGQL�DQQDN�HOpUpVL�~t-MiW��KD�D]�DODSpUWHOPH]HWW�O�HOWpU��IRQWRNDW�DNDUXQN�KDV]QiOQL��PDMG�SR]LFLRQiOW�NLtUiVWNpV]tW�QN��$]�XWDVtWiV�VRUR]DWRW�D�NpSQHN�PHJIHOHO��imagepng($img) vagy

imagejpg($img) �I�JJYpQ\�]iUMD�OH��DPHO\�OpWUHKR]]D�D�IiMOEDQ�D]�HO�EEL�XWDVtWiVRNNDOlert képet. Természetesen a kép akkor is létrejön, ha nem HTML-be ágyazva készítjük,

DNNRU�HJ\�N|]|QVpJHV�NpSIiMO�NDSXQN�D�OHtUiVQDN�PHJIHOHO�HQ��H]W�D�YLVHONHGpVW�NL�OHKHWSpOGiXO�KDV]QiOQL�GLQDPLNXVDQ�PHJMHOHQ��IHOLUDWRN�NpV]tWpVpUH�� 23 grafikai rendszerekben ez a "canvas", azaz vászon, az olajfestmények ugyanis vászonra készültek -

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

81/89

)RQWRV��1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�JUDILNDL�I�JJYpQy-

csomag alapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a php.ini

fájlban a kiterjesztések (Windows extensions) részben az extension=php_gd.dll bejegy-

]pV�HO�O�NL�NHOO�YHQQL�D�NRPPHQWH]pVUH�KDV]QiOW�����MHO|OpVW�tervezés

3URJUDPWHUYH]pVU�O�LWW�QHP�QDJ\RQ�EHV]pOKHW�QN��LQNiEE�D�JUDILNDL�WHUYH]pV�Dfontos. Létre kell hozni a képet leíró kep.php �HV�D]�H]W�PHJMHOHQtW��kephtml.php fájlokat.

(]�XWyEEL�WDUWDOPD]�HJ\�EHYLWHOL�&UODSRW�LV��D�PpUHW�YiOWR]WDWiViKR]��+D�QLQFV�pUWpN�PHg-

adva, alapértelmezett méreteket határozunk meg. Felhívom a figyelmet egy JavaScript

trükkre - a form objektum nevet kapott (bevitel) és így hivatkozni tudunk annak

submit() metódusára (javascript: document.bevitel.submit() ) így egy linkre kattintva,

DXWRPDWLNXVDQ�D]�RQ&OLFN�HVHPpQ\NH]HO�K|]�NDSFVROWDQ�LV�PHJYDOyVtWKDWy�D�IRUP�Hl-küldése.

megvalósítás (kód)

kephtml.php fájl kódja<html><head><title>Kepek megjelenitese</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"></head><body bgcolor="#FFFFFF"><?if ( $sz != "" && $m != "" ) echo ( "<p><img src= \" kep.php?sz=" . $sz . "&m=" . $m. " \" ></p>" );else echo ( "<p><img src= \" kep.php \" ></p>" );?><p>&nbsp;</p><form name="bevitel" method="post" action=""> <table width="50%" border="0" cellspacing="0" cellpadding="6"align="center"> <tr> <td>képszélesség</td> <td> <input type="text" name="sz" size="3" maxlength="3" value= <?echo $sz ; ?> > </td> </tr> <tr> <td>képmagasság</td> <td> <input type="text" name="m" size="3" maxlength="3" value= <?echo $m; ?> > </td> </tr>

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

82/89

<tr> <td><a href="javascript:document.bevitel.submit()"><fontsize="2" face="Arial" color="#FF0000" ><b>Adatbevitel</b></font></a> </td> <td> <input type="submit" name="Submit" value=" Adatbevitel "> </td> </tr> </table></form></body></html>

kep.php fájl kódja<?php//keptipus meghatarozasaheader ( "Content-type: image/png" );//alapertelmezett ertekek kiosztasaif (!isset( $sz ) && !isset( $m)){

$sz = 200 ;$m = 200 ;

}//kepalap letrehozasa$img = @ImageCreate ( $sz , $m)

or die ( "Nem inicializalodik az uj GD image stream" );//szinek meghatarozasa$hatter_szin = ImageColorAllocate ( $img , 255 , 0, 0);$szoveg_szin = ImageColorAllocate ( $img , 0, 0, 255 );//sikidomok kirajzolasaImageRectangle( $img , $sz / 2, $m/ 2, $sz / 2+20, $m, $szoveg_szin );ImageFill( $img , $sz / 2+5, $m/ 2+5, $szoveg_szin );ImageRectangle ( $img , $sz / 4* 3, $m/ 4* 3, $sz / 4* 3+20, $m, $szoveg_szin );ImageFill( $img , $sz / 4* 3+5, $m/ 4* 3+5, $szoveg_szin );//fontkeszlet meghatarozasa$font = "c:\windows\fonts\arial.ttf" ;//felirat elkesziteseImageTTFtext( $img , 12, 0, 10, 20, $szoveg_szin , $font , "Hasábok" );//a kep osszeallitasa az utasitasoknak megfeleloenImagePng ( $img );?>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN�D��.pV]tWV�QN�N�O|QE|]��NLW|OW|WW�pV�N|UYRQDODV�VtNLGRP�NLUDM]ROiVRNDW��E��+R]]XQN�OpWUH������YpOHWOHQV]HU&HQ�PHJMHOHQ��WpJODODSRW�D�NpSHQ��DPHO\HN

színei is változnak minden egyes kirajzoláskor.

Dinamikus képek - oszlopdiagram kirajzolása

specifikáció

.pW�IHODGDWRW�ROGXQN�PHJ�HEEHQ�D�SpOGiEDQ��D]�HOV��HVHWpEHQ�D�JUDILNRQ�RV]ORSDi-nak adatait egy tömb biztosítja és elrendezésüket a kép leírásában meghatározzuk, a

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

83/89

második esetben viszont majdnem mindent a kép méreteihez viszonyítva rajzolunk ki és

az adatokat fájlból vesszük. Ebben az esetben az az összehasonlítandó elemek száma is

változhat bizonyos logikus határok között, de a kép kirakásakor egyenletesen elosztjuk

az oszlopokat a rendelkezésre álló képfelületen.

a feladat elméleti háttere

$]�HOPpOHW�OpQ\HJpEHQ�PHJHJ\H]LN�D]�H]W�PHJHO�]��IHODGDWEDQ�OHtUWDNNDO��LWW�FVDND�OHJIRQWRVDEE�UpV]pW�LVPpWHOM�N�PHJ��KRJ\�D�IHODGDW�|QPDJiEDQ�LV�pUWKHW��OHJ\HQ�

$�NpSHW�OHtUy�IiMOEDQ�HO�V]|U�HJ\�KHDGHU�XWDVtWiVW�N�OG�QN�NL��PHJKDWiUR]YD�D�NpStípusát (jpg, png, stb.). Ezt követi a kép alapjának létrehozása az imagecreate() függ-

vénnyel, amelynek paraméterei a kép szélesség, magasság adatai és visszatérési értéke a

szokásos logikai értéken túl (sikeres/sikertelen végrehajtás) a kép azonosítója (például

$img ���8WiQD�V]tQHNHW�KDWiUR]KDWXQN�PHJ��DODSpUWHOPH]pVEHQ�D]�HOV��PHJKDWiUR]RWW�V]tQD�KiWWpU�V]tQH��+D�V]|YHJHW�LV�NL�DNDUXQN�tUQL��DNNRU�HO�V]|U�PHJ�NHOO�KDWiUR]QL�D�KDVz-

nálandó fontkészletet majd pozicionált kiírást készítünk. Az utasítás sorozatot a képnek

PHJIHOHO��imagepng($img) vagy imagejpg ( $img) függvény zárja le, amely létrehozza a

IiMOEDQ�D]�HO�EEL�XWDVtWiVRNNDO�OHtUW�NpSHW��'LQDPLNXVDQ�YiOWR]y�HOHPHN�HVHWpEHQ���PLQWpéldául ezek az oszlopdiagrammok - gondoskodni kell az elemek algoritmus segítségé-

YHO�W|UWpQ��HOUHQGH]pVpU�O�LV��LOOHWYH�IiMOE�O�W|UWpQ��DGDWiWYpWHO�HVHWpQ�D�IiMO�NLROYDViVá-

ról. Látható, hogy a képet leíró fájl egy teljes PHP program, amely minden szükséges

adatot és adatforrást önmagában kezelni képes, azonban paraméterként is átvehet érté-

keket (például egy adatokat tartalmazó tömböt).

1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�JUDILNDL�I�JJYpQ\FVRPDJalapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a php.ini fájlban

D�NLWHUMHV]WpVHN��:LQGRZV�H[WHQVLRQV��UpV]EHQ�D]�H[WHQVLRQ SKSBJG�GOO�EHMHJ\]pV�HO�Oki kell venni a kommentezésre használt ";" jelölést.

tervezés

Egy grafikonok.php fájl biztosítja a HTML környezetet a megjelenítéshez és az

adatok.txt a kirajzolásra váró adatokat. A grafikon_1.php és a grafikon_2.php biztosítja

a kétféle grafikon leírását.

megvalósítás (kód)

grafikon_1.php fájl kódja

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

84/89

<?phpheader ( "Content-type: image/png" );

$tomb = array( 100 , 120 , 190 , 250 , 40);

$img = @ImageCreate ( 400 , 300 ) or die ( "Nem inicializalodik az uj GDimage stream" );$hatter_szin = ImageColorAllocate ( $img , 255 , 0, 0);$szoveg_szin = ImageColorAllocate ( $img , 0, 0, 255 );$x = 50;for ( $i =0; $i <count( $tomb ); $i ++){

ImageRectangle ( $img , $x , ( 300 - $tomb [ $i ]), ( $x +20), 300 ,$szoveg_szin );

ImageFill( $img , ( $x +2), 290 , $szoveg_szin );$x += 70;

}$font = "c:\windows\fonts\arial.ttf" ;ImageTTFtext( $img , 12, 0, 10, 20, $szoveg_szin , $font , "Grafikon PHP-vel megjelenitve" );//ImageColorTransparent($img, $hatter_szin);ImagePng ( $img );?> <?phpheader ( "Content-type: image/png" );

$tomb = array( 100 , 120 , 190 , 250 , 40);

$img = @ImageCreate ( 400 , 300 ) or die ( "Nem inicializalodik az uj GDimage stream" );$hatter_szin = ImageColorAllocate ( $img , 255 , 0, 0);$szoveg_szin = ImageColorAllocate ( $img , 0, 0, 255 );$x = 50;for ( $i =0; $i <count( $tomb ); $i ++){

ImageRectangle ( $img , $x , ( 300 - $tomb [ $i ]), ( $x +20), 300 ,$szoveg_szin );

ImageFill( $img , ( $x +2), 290 , $szoveg_szin );$x += 70;

}$font = "c:\windows\fonts\arial.ttf" ;ImageTTFtext( $img , 12, 0, 10, 20, $szoveg_szin , $font , "Grafikon PHP-vel megjelenitve" );//ImageColorTransparent($img, $hatter_szin);ImagePng ( $img );?>

grafikon_2.php fájl kódja

<?phpheader ( "Content-type: image/png" );//header ("Content-type: image/jpeg");

$kep_szeles = 400 ;$kep_magas = 300 ;$szeles = 15;$tav = 50;$font = "c:\windows\fonts\arial.ttf" ;

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

85/89

$fp = fopen( "adatok.txt" , "r" );$sor = fgets( $fp , 1024 );$tomb = explode( " \t " , $sor );fclose( $fp );

$tav = ( $kep_szeles - count( $tomb )* $szeles )/(count( $tomb )+ 1);

$img = @ImageCreate( $kep_szeles , $kep_magas ) or die ( "Neminicializalodik az uj GD image stream" );$hatter_szin = ImageColorAllocate ( $img , 254 , 207 , 137 );$szoveg_szin = ImageColorAllocate ( $img , 166 , 64, 0);$x = $tav ;for ( $i =0; $i < count( $tomb ); $i ++){

ImageRectangle ( $img , $x , ( $kep_magas - intval( $tomb [ $i ])),( $x +$szeles ), $kep_magas , $szoveg_szin );

ImageTTFtext( $img , 11, 0, $x , ( $kep_magas - 10 -intval( $tomb [ $i ])), $szoveg_szin , $font , " $tomb [ $i ]" );

ImageFill( $img , ( $x +2), ( $kep_magas - 2), $szoveg_szin );$x += $tav + $szeles ;

}ImageTTFtext( $img , 12, 0, 10, 20, $szoveg_szin , $font , "Grafikon PHP-vel megjelenitve, \n\r adatok fajlbol es auto rendezes" );ImagePng( $img );//ImageJpeg ($img, '', 100);?>

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Dinamikus képek - vonaldiagram kirajzolása

specifikáció

ÈEUi]ROMXQN�HJ\�LG�EHQ�YiOWR]y�WXODMGRQViJRW���SpOGiXO�D�QDSL�N|]pSK�PpUVpNOe-

WHNHW�HJ\�KpWHQ�NHUHV]W�O���YRQDODV�GLDJUDPPRQ��$]�HJ\V]HU&VpJ�NHGYppUW�D]�DGDWRNDWHJ\�W|PEE�O�YHVV]�N��GH�PiV�DGDWIRUUiVRN�LV�V]yED�M|KHWQHN�D�WRYiEEIHMOHV]WpV�VRUiQ�a feladat elméleti háttere

1H�IHOHMWV�N�HO�HOOHQ�UL]QL�D�SKS�LQL�IiMO�EHiOOtWiVDLW��$�JUDILNDL�I�JJYpQ\FVRPDJalapértelmezetten nem áll rendelkezésre, a PHPTriad esetében például a php.ini fájlban

D�NLWHUMHV]WpVHN��:LQGRZV�H[WHQVLRQV��UpV]EHQ�D]�H[WHQVLRQ SKSBJG�GOO�EHMHJ\]pV�HO�Oki kell venni a kommentezésre használt ";" jelölést.

tervezés

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

86/89

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Szavazógép kódolása

specifikáció

.pV]tWV�QN�V]DYD]yJpSHW��DPHO\�WHWV]pV�V]HULQW�HOKHO\H]KHW��D]�ROGDORQ��I�JJ�Oe-

JHV�HOUHQGH]pVEHQ�D�NpUGpVHN�V]iPiQDN�PHJIHOHO��V]iP~�UiGLyJRPEEyO�pV�IHOLUDWEyO�iOOés a szavazógép beill esztéséhez csupán a kérdéseket kellj en megadni, akár fájlban, akár

tömb formájában, onnét minden automatikus legyen. Egy Szavazok és egy a Szavazás

állása�IHOLUDW~�JRPE�OHJ\HQ��PLQGHJ\LN�D�IHOLUDWiQDN�PHJIHOHO�HQ�P&N|GM|Q��$�V]DYa-

]DWRNQiO�QHP�NHOO�D�IHOKDV]QiOyNDW�D]RQRVtWDQL�pV�D�OHJHJ\V]HU&EE�YiOWR]DWQiO�D��S|UJe-

tést" sem védjük ki (az oldal frissíWpVVHO�W|UWpQ��~MUDW|OWpVH��a feladat elméleti háttere

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Felmérés készítése

specifikáció

a feladat elméleti háttere

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

87/89

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

Tesztprogram kódolása

specifikáció

a feladat elméleti háttere

tervezés

megvalósítás (kód)

WRYiEEIHMOHV]WpVL�OHKHW�VpJHN

(OOHQ�U]��NpUGpVHN

I rodalomjegyzék

Perl

• Programming Perl, Larry Wall és Randal L. Schwartz, O'Reil ly & Associates, Inc.

Sebastopol, Kali fornia ISBN 0-93715-64-1

• Learning Perl, Randal L. Schwartz, O'Reil ly & Associates, Inc., Sebastopol, Kali -

fornia

• Perl 1-2. Michael McMill an, Panem Könyvkiadó, Budapest, 1998

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

88/89

• www.perl.com

PHP

• http://www.developerfusion.com/php/ - PHP oktatóanyagok, cikkek, gyakorlati pél-

dák

• http://pear.php.net/���D�3($5�RV]WiO\N|Q\YWiU�pV��FVRPDJRN�OHO�KHO\H• http://www.php.net/ a PHP "hivatalos" webhelye

• http://www.zend.com/ D�3+3�LQWHUSUHWHU�NLIHMOHV]W�LQHN�ZHEROGDOD��NHUHVNHGHOPLmegoldások is!

• http://pointernet.mirrors.phpclasses.org/browse.html/browse.html - PHP osztályok

lel�helye, leírások

3+3�IHMOHV]W�HV]N|]|N• Abriasoft Merlin Server www.abriasoft.com

• FoxServer www.foxserv.net

• FoxSev http://foxserv.linuxmax.net/portal.php

apache+php+mysql+perl+python+myadmin 37mb xp-n is fut

• merlin server http://www.abriasoft.com/ 28mb

• phptriad http://sourceforge.net/projects/phptriad/ 11mb xp-n is megy

• EasyPHP

Hasznos linkek

(mind a szerver oldali , mind a kliens oldali programozáshoz)

$]�HJ\HV�ZHEROGDODN�QDJ\RQ�J\DNUDQ�UHIHUHQFLD�MHOOHJ&HN��WHKiW�D�NtQiOW�SpOGiN��RNWDWó-

DQ\DJRN��IRUUiVNyGRN�W|EE�N�O|QE|]��KHO\HQ�IRUGXOQDN�HO��pV�SHUV]H�NHUHV]WKLYDWNR]á-

VRN�LV�HO�IRUGXOQDN��$�KLYDWNR]iVRN�iOWDOiEDQ�NHOO��LQIRUPiFLyW�N|]|OQHN�D]�HOLJD]o-

dáshoz (mit találhatunk a hivatkozott webhelyen), amennyiben erre nem történik utalás

D�OLQN�V]|YHJpEHQ��RWW�W|EEQ\LUH�J\&MWHPpQ\HV�ZHEROGDODNUD�KLYDWNR]QDN��6]iQGpNRVDQnincs megadva fontossági sorrend, ezt mindenki tegye meg saját ízlése és egyéni igé-

Q\HL�DODSMiQ��$�OLQNHN�PLQG�HOOHQ�U]|WW�pV�pO��ZHEKHO\HNUH�PXWDWWDN�D�Np]LUDW�OpWUHM|WWe-

PHP programozási nyelv *iERU�'pQHV�)�LVNROD

89/89

NRU��������RNWyEHU���������PiUFLXV��GH�WHUPpV]HWHVHQ�H]�QHP�JDUDQFLD�D�NpV�EEL�IHOWa-

OiOKDWyViJUD��$]�|VV]HiOOtWiV�PHVV]H�QHP�WHOMHV�pV�WHUPpV]HWHVHQ�W�NU|]L�D�V]HU]��V]e-

PpO\HV�WDSDV]WDODWDLW��LUiQ\XOWViJiW��8J\DQDNNRU�PLQGHQ�LWW�QHP�V]HUHSO���QHP�KLYDWNo-

]RWW��GH�D]�ROYDVy�iOWDO�MyO�KDV]QiOKDWyQDN�WDUWRWW�ROGDOW�V]tYHVHQ�EHLOOHV]WHN�D��J\&MWe-

PpQ\EH���NpUHP��KRJ\�H]HN�OLQNMHLW�MXWWDVViN�HO�KR]]iP�D�MHJ\]HW�IRO\DPDWRV�E�YtWpVHés naprakész jelleJH�PHJ�U]pVH�pUGHNpEHQ�0DJ\DU�Q\HOY&�ROGDODN- http://www.ats-group.net/webmaster többféle téma a webfejlesztés témakörében

- www.prog.hu sokféle programozási téma, csoportosítva

- www.weblabor.hu cikkek, ötletek, sok PHP

- http://hu.php.net/manual/hu/�D�3+3�PDJ\DU�Q\HOY&�GRNXPHQWiFLyMD- www.javascript.lap.hu���PLQGHQ�DPLW�D�-DYD6FULSW�U�O�WXGQL�OHKHW«$QJRO�Q\HOY&�ROGDODN- http://www.evilwalrus.com/codearchive.php

- www.hotscripts.com

- http://php.resourceindex.com/Complete_Scripts/

- px.sklar.com/�HOV�VRUEDQ�3+3- http://www.phporacleadmin.org/

- http://www.phpbuilder.com

- http://www.zend.com/zend/tut/ PHP oktató cikkek (tutorial)

- http://www.onlamp.com/php/ vegyes anyagok, PHP cikkek

- http://phplens.com/lens/ néhány érdekes alkalmazás

- http://phpnuke.org/ automatikus portálrendszer PHP-ben

- http://www.mysql.com/ minden, amit a MySQL adatbázisról tudni kell/l ehet

- http://www.weberdev.com/ JavaScript, PHP, MySQL cikkek, forráskódok