a php programozási nyelv (webes alkalmazásokra)users.atw.hu/galagonya/phpjegyzetgdf.pdfa php...
TRANSCRIPT
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" > </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> </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> </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> </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"> </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(); \" >>> vissza az index lapra>></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> </p><p> </p></td></tr><tr><td width="25%"> </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%"> </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> </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