király roland, dinamikus webprogramozás jegyzet v0.7
TRANSCRIPT
-
Eszterhzy Kroly FiskolaMatematikai s Informatikai Intzet
Dinamikus weboldalakfejlesztse
Kirly Roland
Eger, 2010
-
Tartalomjegyzk
1. Bevezets 41.1. Tartalom kezel rendszerek . . . . . . . . . . . . . . . . . . . 4
1.2. CMS teleptse . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 8
2. HTML s PHP hasznlata 92.1. Weboldalak programjnak elksztse . . . . . . . . . . . . . . 9
2.2. Futtat krnyezet tesztelse . . . . . . . . . . . . . . . . . . . 12
2.3. Kezdeti lpsek a programozshoz . . . . . . . . . . . . . . . 14
2.4. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 18
3. A PHP nyelv alapjai 203.1. Az output kezelse . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2. Vltozk s adatok . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3. sszetett adatok . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4. Vezrl szerkezetek . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5. Alprogramok . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.6. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 37
4. Adatbzisok elrse PHP programokban 394.1. DBMS rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2. Hozzfrs adatbzis kezelkhz . . . . . . . . . . . . . . . . . 40
4.3. Az els kapcsolat . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.4. Sajt fggvnyek kapcsoldshoz . . . . . . . . . . . . . . . . 46
4.5. Adatbzis kezel modul ksztse . . . . . . . . . . . . . . . . 47
4.6. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 54
5. Modulszerkezet 555.1. Modulris felpts . . . . . . . . . . . . . . . . . . . . . . . . 55
5.2. Menkezels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.3. A menkezel rutinjai . . . . . . . . . . . . . . . . . . . . . . 61
5.4. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 64
1
-
6. Adatkezel alkalmazsok ksztse 656.1. Adatbevitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.2. Adatfeldolgozs . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.3. Adatok kldse s beszrsa adatbzisba . . . . . . . . . . . . 73
6.4. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 79
7. Listk generlsa 807.1. Adatok megjelentse listkban . . . . . . . . . . . . . . . . . 80
7.2. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 84
8. Fjlkezels 868.1. Fjlok feltltse a szerverre . . . . . . . . . . . . . . . . . . . 86
8.2. Kpek kezelse s mretezse . . . . . . . . . . . . . . . . . . 89
8.3. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 93
9. Weboldalak adminisztrcija 949.1. Listk lapozsa . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.2. Rekordok trlse listbl . . . . . . . . . . . . . . . . . . . . . 96
9.3. Egyszer jelszavas vdelem . . . . . . . . . . . . . . . . . . . . 100
9.4. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 103
10.Regisztrci s munkamenet indts 10310.1. Felhasznlk nyomkvetse . . . . . . . . . . . . . . . . . . . 103
10.2. Felhasznli regisztrci . . . . . . . . . . . . . . . . . . . . . 107
10.3. Egyszer capcha ksztse . . . . . . . . . . . . . . . . . . . . 109
10.4. Munkamenetek hasznlata . . . . . . . . . . . . . . . . . . . . 116
10.5. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 120
11.Szrs s keress 12111.1. Listk szrse . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11.2. Keress az adatbzisban . . . . . . . . . . . . . . . . . . . . . 124
11.3. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 128
2
-
12.Kd jrahasznosts 12912.1. Alapelvek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.2. Objektum alap weboldal ksztse . . . . . . . . . . . . . . . 131
12.3. Ellenrz krdsek . . . . . . . . . . . . . . . . . . . . . . . . 137
Irodalomjegyzk 138
3
-
1. Bevezets
1.1. Tartalom kezel rendszerek
Telepthet tartalomkezel rendszerek. A tartalomkezel rendszerekterjedsvel egyre inkbb ltalnoss vlik az a nzet, hogy weboldalak
ksztshez elegend letlteni egy msok ltal erre a clra kifejlesztett CMS
rendszert, majd, a szolgltatnk ltal rendelkezsre bocsjtott trhelyre
msolni. Nmi kongurls utn elindthat a weboldal s a felhasznlk
nyugodtan hasznlhatjk.
Amennyiben nem akarjuk hossz napokra a gpe el szegezni magunkat,
s programkdok gpelsvel tlteni az idt azrt, hogy egy-kt oldalnyi
szveget megjelentsnk, vagy ppen blogot rjunk a nagyvilg szmra, az
elre gyrtott, Instant weboldalak knyelmes megoldst nyjtanak. gy
van ez akkor, ha a CMS rendelkezik azzal a szolgltatssal, amire ppen
hasznlni szeretnnk. Mert ha nem, akkor taln jobb, ha mi rjuk meg azt
a weboldalt, vagy modult, amire szksgnk van. s, ha ez nem elg, akkor
is van mg egy fontos szempont, ami miatt meg kell tanulnunk dinamikus
weboldalakat kszteni.
Tegyk fel magunknak azt a krdst, hogy hogyan szletnek a CMS
rendszerek. Hogyan jnnek ltre az Instant weboldalak. Bizonyosan nem gy
kszlnek, hogy letltnk az Internetrl egy elre legyrtott CMS kszt
CMS-t. Ha gy lenne, akkor is fennllna az a dilemma, hogy ez a letlthet
CMS kszt hogyan jn ltre.
Akrhogyan is ragozzuk a dolgot, rtennk kell a programozshoz, s
szmos esetben, mikor a CMS mr nem elegend, meg kell alkotnunk azokat
a programokat, melyek kielgtik a felhasznlk ignyeit, mert akrhogy
is tiltakozik ez ellen a programozk nagy csaldja, igenis a felhasznlk
tmasztotta ignyek tartjk letben s hajtjk elre ezt a tudomnygat.
Mi is az a Tartalom Kezel Rendszer, vagy az angol rvidts utn CMS?
Egy olyan flig elksztett weboldal, melyet nmi kongurci, jelsz bellts
s egyb kisebb trkkk segtsgvel nhny perc alatt be tudunk zemelni.
Egy ltalnos CMS az albbi elemeket tartalmazza:
4
-
Belptet rendszer
Adminisztrcis fellet a tartalom kezelshez
Hrek men s blog
Kpgalria
Kedvencek s RSS hrszolgltats
Frum (ez ltalban egy integrlt kls modul)
Naptr s a hozz tartoz szolgltatsok
Esemnykezel rendszer
Az oldal kls megjelensnek belltsai
Egyb, csak az adott CMS-re jellemz specilis funkcik
Weboldalak ksztsnl a fenti funkcik mindegyiknek a mkdsvel
tisztban kell lennnk. Fontos, hogy ezeket a gyakorlatban is lssuk mkdni,
mivel csak gy tudunk hasonl modulokat kszteni.
Ebben a jegyzetben a WordPress rendszert fogjuk telepteni. A vlaszts
azrt erre a rendszerre esett, mert igen elterjed, msrszt pedig hres az t
perces teleptjrl.
1.2. CMS teleptse
Els lpsknt le kell tltennk a Word Press aktulis verzijt. Nem kell
felttlenl ezt a CMS-t vlasztani. Amennyiben a kedves olvas ragaszkodik
egy msik rendszerhez, prblkozzon azzal, vagy akr egyszerre tbbet is
kiprblhat.
A Word Press esetn a letltst a http://wordPress.com weboldalon, a
letlts pontra kattintva indthatjuk el.
5
http://wordPress.com
-
Telept hasznlata. A teleptshez szksgnk lesz egy szolgltat ltala rendelkezsnkre bocsjtott trhelyre, vagy teleptennk kell egy olyan
CMS rendszert, ami Webszerver, PHP futtat krnyezet s adatbzis trhely
szolgltatsokat nyjt. Adatbzis kezel rendszernek vlasszunk SQL alapt,
lehetsg szerint MySQL alapokon mkd rendszert. Ez azrt fontos, mivel
ebben a jegyzetben MySQL nyelv lekrdezseket hasznlunk.
Jelenleg az XAMP s a WAMP szerverek elterjedtek a programozk
krben, gy ht mi az XAMP egy verzijt alkalmazzuk. Vegyk szre,
hogy a szerver oldali krnyezet kialaktst is egy Instant programmal
oldjuk meg kockztatva ezzel azt, hogy egy valdi szerver teleptst soha
nem tanuljuk meg.
Teht, ha nem talltunk ingyenes szolgltatt - aminek egybknt nagyon
kicsi az eslye -, akkor tltsk le a http://xamp.org weboldalrl az XAMP
egy vltozatt, majd teleptsk. (Windows esetn a teleptben val nmi
kattingats utn rendelkezsre is ll a webszolgltats.
Linux opercis rendszer esetn mindkppen olvassuk el a teleptsrl
szl fjlt mieltt hozzltunk a munkhoz. Egybknt a Linux vltozat
bezemelse sem tart tovbb nhny percnl.
Miutn elindtottuk a webszervert, csak annyi dolgunk marad, hogy a
Word Press fjljait bemsoljuk a htdocs knyvtrba. Ez az alaprtelmezett
knyvtr, mely a weboldalainkat trolja az XAMP rendszerben, de vltozhat
a kongurci sorn.
Indtsuk el a program teleptjt a kedvenc bngsznkben. A program
elkri az adatbzishoz tartoz felhasznl nevet s jelszt, Meg kell mg
adnunk az oldal adminisztrtornak a nevt s jelszavt, valamint nhny
olyan informcit, amit a program nem tud kitallni. (ha ezeket is ki tudn
tallni, taln nem is kellene hozz felhasznl.. ).
Ahogy elkszltnk a teleptssel, a program tjkoztat minket errl
s mindjrt el is kezdhetjk az oldalunk nomhangolst. Bellthatjuk
a kls megjelensre vonatkoz paramtereket, s a nyelvet.
Felvehetjk a felhasznlinkat, akik a leend oldalunkat hasznlhatjk,
tszervezhetjk a modulokat, s mindent olyat megtehetnnk, amit az oldal
6
http://xamp.org
-
megenged a szmunkra - komolyabb rendszerek esetn mr a fogd s vidd
technika segtsgvel is.
Ennyi az egsz. Ha a program README fjljban lertak szerint jrtunk el,
programozs nlkl ksztettnk el egy mkdkpes weboldalt, mely fel van
vrtezve az Interneten elterjedt modulok mindegyikvel. Sajnos ez az oldal
nem igazn alkalmas specilis feladatok elltsra, vagyis csak azt tudja,
amit a programozi beptettek a rendszerbe.
A rendszer tovbbfejlesztse. A frissen teleptett weboldal hasznlata,kongurlsa nagyon knyelmes s egyszer, de problmink tmadhatnak,
ha szeretnnk valami klnlegeset.
Amennyiben az oldalt egy felhasznlnknak ksztettk - zetett is a
programrt - akinek eszbe jut, hogy szksge volna sajt funkcikra a
programjban, melyet az ltalunk teleptett CMS nem tartalmaz, nehz
helyzetbe kerlhetnk.
A gyakorlott programoz ilyenkor tnzi a forrskdot s ha szerencsje
van, sikerl talaktania a programot gy, hogy a krt funkci integrlsra
lehetv vljon.
Szmos CMS tartalmazza a lehetsget a tovbbfejlesztsre, de ez soha
nem olyan egyszer, mintha sajt programjainkat alaktannk t.
Meg kell rtennk ms programozk forrskdjait s t kell alaktanunk
gy, hogy ne rontsuk el az eredeti funkcikat, de az jakat integrlni tudjuk.
Ez nehz feladat gyakorlott programozk szmra is.
Termszetesen ettl mg a CMS rendszerek nem rosszak, s nyugodtan
hasznlhatjuk ket. Nagyon jk ezek a szoftverek, de mindig csak arra a
meghatrozott clra, amire ksztettk ket.
Ezt szem eltt tartva gondoljuk t, hogy az adott rendszer megfelel-e a
szmunkra hosszabb tvon is. Ha igen, akkor btran alkalmazzuk, ha viszont
nem vagyunk ebben biztosak, inkbb fogjunk bele a fejlesztsbe.
Ez a jegyzet ebben nyjt segtsget, mivel bevezeti az olvast a dinamikus
weboldalak programozsnak tudomnyba, s lpsrl lpsre bemutatja a
CMS rendszerek csak a fejlesztk ltal ismert vilgt.
7
-
1.3. Ellenrz krdsek
1. Mit jelent a dinamikus jelz a weboldalak vilgban?
2. Milyen komponenseket tartalmaz a webszerver, ha adatbzis alap,
PHP kd weboldalakat futtatunk rajta?
3. Milyen feladatokat lt el a webszerver?
4. Lehet-e mdostani a webszerverek kongurcijt?
5. Mit jelent a CMS sz?
6. Mi az elnye a modulokra bonts technikjnak?
7. Mit jelent a modulris felpts weboldalak esetn?
8. Milyen protokoll segtsgvel futnak a weboldalak?
9. Mi a webszerver feladata a PHP programok futtatsa esetn?
10. Hogyan lehet publikus domain cmhez jutni?
11. Milyen fbb funkcii vannak egy CMS alap rendszernek?
animaciok/TAMOPweb0006.avi
animaciok/TAMOPweb0007.avi
8
animaciok/TAMOPweb0006.avianimaciok/TAMOPweb0007.avi
-
2. HTML s PHP hasznlata
2.1. Weboldalak programjnak elksztse
Ahhoz, hogy weboldalakat tudjunk szerkeszteni, ismernnk kell a HTML
nyelv alapjait. Tudnunk kell formzni a programok kimenett, vagyis a
webbngszben megjelen tartalmat.
A HTML nyelv hasznlhat szvegek, tblzatok, s kpek eszttikus
megjelentsre. Segtsgvel kpesek vagyunk denilni a karakter kdolst,
a klnleges karaktereket, valamint utastani tudjuk a kliens oldali bngsz
programot, hogy ne az alaprtelmezett formzsi belltsokat hasznlja.
Lehetsgnk nylik egyedi megjelens oldalak ksztsre. A weboldal
tulajdonosra jellemz sznvilg s tartalom megjelentsre.
Sajnos a HTML nyelv nem alkalmas arra, hogy az interakcikat kezelni
tudja. HTML forrsszvegekben nem tudunk szelekcit, itercit szervezni.
Nem tudunk adatbzisokhoz kapcsoldni, vagy fggvnyeket, eljrsokat
kszteni.
A pusztn HTML nyelven elksztett weboldalak htrnya, hogy statikus
mkdsek, ami azt jelenti, hogy a weboldalon megjelen szveg, kp s
egyb informci nem vltozik meg csak akkor, ha az oldal ksztje trja
a HTML fjlokat szvegszerkeszt segtsgvel.
Gondoljunk bele abba, hogy ez mit jelentene egy valuta rfolyamokat s
azok vltozsait ler grakonokat tartalmaz weboldal esetn.
A feladat megoldsa szinte lehetetlen. Vltoz tartalom kezelshez, vagy
interakci kezelshez mindenkppen szksg van programozsi nyelvre s
programra. Szksg van tovbb adatbzisokra - az adatok trolshoz - s
elgazsokra, ciklusokra, fggvnyekre, valamint eljrsokra.
A programok futtatshoz futtat rendszert kell telepteni, mely kpes
a szvegszerkesztben megrt forrsszveg helyessgt ellenrzi, fordtani s
futtatni.
A programok, forrskdok vdelme is fontos feladat, mivel a weboldalak
tartalmt a felhasznlk letltik a szmtgpkre. A letlttt szveget az
opercis rendszerre teleptett bngsz program rtelmezi s futtatja, vagyis
9
-
megjelenti a bennk trolt s lert informcit.
A bngsz program bvtmnyek segtsgvel kezeli a kp s hang-
fjlokat, kpes a Flash s a JavaScript alap programok futtatsra. PHP,
vagy ms programozsi nyelveken rt forrskdok futtatsra viszont nem
kpes, de erre nincs is szksge.
Senki nem vrja el a felhasznltl, hogy PHP alap oldalak futtatshoz
letltse a szmtgpre a nyelv fordtprogramjt, kongurlja a futtat
krnyezetet, tesztelje azt, majd javtsa a felmerl hibkat.
A PHP nyelv hasznlata esetn a weboldalak programja szervereken fut.
A szerver zemeltetje kongurlja a futtatsi krnyezetet s az adatbzis
kezel rendszert. Ez tbb szempontbl is jobb gy, mint a kliens oldali
programok hasznlata esetn.
A forrsszvegek szerver oldali fordtsa s futtatsa komoly erforrs
megtakartst eredmnyez a kliens szmtgpeken. Az adatok trolsa is a
szerveren trtnik, ami az erforrsokkal val gazdlkodst tekintve szintn
nem elhanyagolhat, nem beszlve a biztonsgrl.
A programok forrskdja nem lthat a kliens szmtgpeken, mivel
oda csak a programok eredmnye, vagyis az ellltott HTML tartalom kerl
letltsre.
A programok biztonsgos futtatsa egyszerbb feladat, mivel a forrskd
s a forrskd logikja nem lthat az rt szndk felhasznlk szmra.
Az 2.1 bra bemutatja a kliens s a szerver oldal mkdst.
PHP programok begyazsa. A PHP programok szervereken futnak, aHTML szveget viszont a kliens szmtgp rtelmezi. Az adatok a szerveren
troldnak, de a kliens szmtgpeken jelennek meg.
Ez els ltsra ellentmondsosnak tnik. A forrskd klnbz rszei
klnbz helyeken, ms-ms alkalmazsok segtsgvel futnak, viszont a
forrskdot egy fjlban is trolhatjuk.
A legtbb fordtprogram, valamint a futtat krnyezet egyarnt kpes
detektlni a szmra rtelmezhet forrsszveget, gy a PHP programokat
is tetszs szerint be lehet gyazni HTML forrsba.
10
-
2.1. bra. Kliens szerver kapcsolat
2.1. program. PHP begyazsa HTML forrsszvegbe
Trtnhet ez pontosan fordtva is. PHP programokban is generlhatunk
HTML kimenetet a szmtgpek bngszje szmra.
11
- for ( $ i =0; $i
-
A szerver szmtgp webknyvtrban ksztsnk egy fjlt index.php
nven. gyeljnk arra, hogy a webszerver a klnbz kiterjeszts fjlokat
ms-ms sorrendben veszi gyelembe. Amennyiben van a knyvtrban egy
index.html nev fjl, az fog futni s nem a php kiterjesztssel rendelkez.
A futtats sorrendje egybknt nagyban fgg a webszerver belltsaitl.
A szerver web-knyvtrai. A knyvtr, amiben a fjlt el kell helyeznnkLinux opercis rendszer esetn a var/www knyvtr valamely alknyvtra.
A Linux rendszerre felvett felhasznli knyvtrak esetn ez a felhasznl
home knyvtrnak a gykerbl nyl public_html knyvtr, vagy annak
valamely alknyvtra.
Ahny alknyvtr kszl a public_html knyvtrba, annyi klnbz
weboldalt kpes az adott felhasznl mkdtetni.
A mkdsi elv a kvetkez: A kliens szmtgp bngsz programja
kapcsolatot ltest a szerverrel.
A kapcsolat alaprtelmezs szerint a szerver szmtgp 80-as virtulis
portjn keresztl jn ltre [1].
A szerver a bejv krs hatsra megkeresi a bngsz ltal hivatkozott
knyvtrat, majd a knyvtrban lv index.php fjlt. A fjlban tallhat
forrskdot rtelmezi s vgrehajtja.
Amennyiben az index fjlban PHP programszveget tall, lefuttatja a
PHP program rtelmez-fordt programja segtsgvel.
A ksz HTML kdot - amit a fjlban tallt, vagy a PHP program generlt
- elkldi a kliens szmtgpnek, ami rtelmezi s megjelenti a kliens oldal
bngszjben.
2.2. bra. Webbngsz URL svja
Ahhoz, hogy mindez megtrtnjen, a kliens bngszjbe (2.2 bra) az
albbi URL-t, vagyis webcmet kell begpelni: http:\www.weboldalneve.hu
13
http:\www.weboldalneve.hu
-
2.1. megjegyzs. A cm regisztrlt domain nv esetn, a .hu tartomnyban
lehetne rvnyes . . .
Felhasznlk webknyvtrai esetn az oldalt a szerver neve, a felhasznl
neve, s annak az alknyvtrnak az elrsi tja azonostja, ahol az index fjl
tallhat. http:\\szerverneve.hu\~felhasznlneve\alkonyvtar
Ebben az esetben a www eltag elhagysa ktelez. A cmben a ~ karakter
a felhasznl neve el kerl s arra utal, hogy egy felhasznli knyvtrban
kell keresni az index fjlt.
Miutn elksztettk az index fjlt, nyissuk meg a kedvenc szerkeszt
programunkkal, majd rjuk bele a kvetkez nhny sort:
2.3. program. Webszerver ellenrzse
A phpinfo a nyelv egy beptett fggvnye, ami tblzatos formban
megjelenti a szerver belltsait, a vltozkat, melyek jellemzik a futtat
krnyezetet, s minden olyan informcit, ami a programozs s zemeltets
szempontjbl szksges lehet.
A tblzat amellett, hogy informcikat szolgltat, megmutatja azt is,
hogy a szerver megfelelen mkdik-e.
A 2.3 brn lthat kimenethez hasonlt kell ltnunk a bngszben.
2.3. Kezdeti lpsek a programozshoz
Mieltt elmlyednnk a PHP nyelv szablyaiban, ksztsnk el egy egyszer
programot, amely amellett, hogy motivl bennnket, pldaknt szolgl a
komolyabb programok kivitelezsnl.
Igaz, hogy a PHP OOP [2] nyelv. Az is igaz, hogy, teljesen kln lehet
vlasztani a HTML szveget a forrskdtl s a CMS-ek kszti is gy jrnak
el, mi mgis gyazzuk be a forrsszveget a HTML kdba.
14
-
2.3. bra. Webszerver informcis panel
Ez a megolds hossz tvon is hasznlhat, ha nem akarunk OOP alap
programokat rni, vagy kisebb fejlesztseket vgznk, de ne feledjk, az OOP
programok kdjt jra lehet hasznostani, valamint knnyebb ket tovbb
fejleszteni s karbantartani.
Els lpsknt ksztsnk egy programot, mely rvid szveges zenetet
jelent meg a bngszben. A kirt szvegnk legyen a klasszikuss vlt
Hello Vilg. A forrskd kizrlag HTML nyelv hasznlatval a kvetkez:
15
-
tesztprogram
Hel lo Vi lg
2.4. program. HTML fejlc
Mivel a programszveg kizrlag HTML tag-eket, valamint a kirsra sznt
szveget tartalmazza, fejlesszk tovbb.
Hogyan tudnnk a szveget tbbszr, egyms al kirni gy, hogy a
sorokat megszmozzuk?
Kis szm sor esetn a msols-beilleszts technolgia segthet rajtunk,
de mit tehetnk mondjuk 1000 sor esetn, vagy ha nem egy konstans szveget
kell kirni a kliens oldal kpernyjre.
rhatunk programot, hasznlhatunk ciklus utastst, s kiolvashatjuk az
adatokat adatbzisokbl.
A dinamikus weboldalak erssge pontosan ebben a technikban rejlik.
Ksztnk egy rvid, de kifejez PHP programot, az adatainkat adatbzisban
trolhatjuk s HTML alapokon jelenthetjk meg. gy a bngsznek sznt
szveget a PHP program generlhatja az adatbzisbl rkez adatok alapjn.
Mivel adatbzisokat mg nem tudunk hasznlni, helyezzk el a kirand
16
-
szvegrszeket egy tmbben (tmbkrl ksbb). Ezutn egy egyszer for-
ciklus segtsgvel generljuk le a megfelel HTML tegeket.
tesztprogram
2.5. program. HTML generlsa
A fenti forrskd sokkal ltalnosabb, mint a statikus HTML vltozat,
mivel az adatokat egy tmbbl veszi, a kimenetet (2.4 bra) pedig intelligens
mdon a rendelkezsre ll adatokbl s a kirand mondat prexbl lltja
17
-
ssze.
2.4. bra. A fldrszes program kimenete
Ne rettenjnk meg a forrskdban tallhat specilis elemektl. A kd
els rnzsre bonyolultnak tnik, de nagyon hasonlt a C, C++ nyelvekre,
vagy a Linux shell programjainak nyelvezetre.
A $ jelek a vltozkat jellik, a kir utastsban tallhat HTML tegek
pedig mr ismersek lehetnek szmunkra.
Azt viszont meg kell szoknunk, hogy a PHP programok ksztsekor
felvltva kell hasznlnunk klnbz programozsi, vagy formtum ler
nyelveket, radsul egymsba kell tudnunk gyazni ezeket. A programunk
kimenete a 2.4 brn lthat.
2.4. Ellenrz krdsek
1. Hova kerl a PHP program kimenete?
2. Milyen lpsek hajtdnak vgre a PHP alap weboldalak bngszben
val futtatsa esetn?
3. Mit jelent az URL rvidts?
18
-
4. Milyen ismert programozsi nyelveken tudjuk megszltani a MYSQL
adatbzis kezel rendszert?
5. Hogyan kell a PHP forrsszvegeket a HTML kdba gyazni?
6. Mi a weboldalak f fjljnak a neve (alapbellts esetn)?
7. Milyen kiterjesztssel rendelkeznek a PHP programokat trol fjlok?
8. Milyen sorrendben veszi a kvetkez kiterjesztseket a webszerver?
.htm, .html, .php
9. Fordt-e a PHP trgykdot?
10. Alaprtelmezs szerint hol troldik a weboldalak programja?
animaciok/TAMOPweb0001.avi
animaciok/TAMOPweb0002.avi
animaciok/TAMOPweb0008.avi
animaciok/TAMOPweb0009.avi
animaciok/TAMOPweb0010.avi
19
animaciok/TAMOPweb0001.avianimaciok/TAMOPweb0002.avianimaciok/TAMOPweb0008.avianimaciok/TAMOPweb0009.avianimaciok/TAMOPweb0010.avi
-
3. A PHP nyelv alapjai
3.1. Az output kezelse
Mivel a PHP programok rsa, s a klnbz szerver oldali alkalmazsok
hasznlata a programozs sorn nem a megszokott egy fejleszteszkz-egy-
program stlusban trtnik, a nyelv megismerst is kezdjk rendhagy
mdon.
Nem a vezrlszerkezeteket s az alap utastskszletet vesszk sorra.
Helyette megvizsgljuk azt, hogy a programjaink kimenete hogyan llthat
el a kliens szmtgpek bngszje szmra. Hogyan tudjuk a vltozk,
vagy a kifejezsek rtkt kirni HTML szvegekbe gyazva.
A PHP programrszeket a vagy a jelek kz kell gpelni,
ugyanis ez alapjn tudja a webszerver kikvetkeztetni, hogy PHP nyelv
forrsszveg kvetkezik, s azt, hogy az meddig tart.
A PHP nyelvben a szvegek kirshoz hasznlhatjuk az echo, vagy a
print fggvnyt. Az echo jobban tlthatv teszi a programok forrskdjt
(a kevesebb zrjel miatt) s egy kicsit gyorsabb is.
3.1. program. Szveg kirsa
A kirand tartalmat " " s ' ' jelek kz kell zrni. mindkt formnak
ms a jelentse s ms-ms hatst gyakorolnak a szveg tpus adatokra, a
vltozkra ($a) s a kifejezsekre ($a + 2).
A ' ' jelek kz rt vltozk nem helyettestdnek be, rtkk helyett a
kdban szerepl azonostjuk rdik ki.
20
-
3.2. program. Idzjelek hasznlata
A forrskd eredmnye nem a 2, hanem a $a szveg. Ez azrt van gy,
mert a ' ' kz rt karakterek gy jelennek meg a kpernyn, vagyis a
kliens szmtgp bngsz programjnak a felletn, ahogy azokat lerta a
programoz, teht minden lert jelet karakterr knyszertve.
Amennyiben a vltoz tartalmt szeretnnk kiratni, a " " aposztrfokat
kell hasznlnunk. Igazsg szerint, ha nem kvnunk a vltoz tartalmn kvl
ms szveget kirni, a dupla " el is hagyhat.
3.3. program. Idzjelek hasznlata
Ahogy a forrskdban lthat, minden utastst ; zr le. Az elhagysa
szintaktikai hibt eredmnyez, ami nem tl szerencss weboldalak esetn,
ahol a programot a szerver minden futtatskor jra lefordtja s a hiba
minden futskor lthatv vlik a kpernyn.
Ez a mkdsi elv, ahogy a ksbbiek sorn lthatjuk, szmos lehetsget
hordoz magban, de a lehetsgek mellett komoly hibkat is eredmnyezhet,
mely hibkat a rendszer azonnal meg is mutat a felhasznlnak.
sszetett adatok s kifejezsek megjelentse. Sokkal bonyolultabb akirs s a megfelel formtum ellltsa sszetett adatok, tmbk, vagy a
21
-
kifejezsek hasznlata mellett.
3.4. program. Adatok megjelentse
A fenti (3.4) forrsszvegben a ciklus nem a $i + 1 kifejezs rtkt rja
ki, hanem a $i vltoz rtkt, valamint minden rtk utn a +1 szveget.
0 + 1
1 + 1
2 + 1
3 + 1
3.5. program. A kirs eredmnye
Ez azrt van gy, mert a kir utastsban a $i + i nem rtkeldik ki.
A kifejezs rtkt elszr ki kell szmtani, s csak ezutn lehet kirni.
A j megolds az, ha a kifejezst a szvegtl elklntve, egy msik echo
hasznlatval rjuk ki. Ebben az esetben a kir utasts mr az rtket,
vagyis az eredmnyt jelenti meg.
22
-
3.6. program. Szvegrszek kirsa
Lehetsgnk van arra is, hogy a kirsra sznt szveget darabokbl
illesszk ssze. Erre a feladatra a PHP nyelvben nem a C, C++, vagy C#
megszokott + jelet hasznljuk, hanem a "."-ot. Sajnos a . opertor nehezen
olvashatv teszi a forrskdot, de nmi gyakorlssal, gyorsan meg lehet
bartkozni ezzel a szintaxissal.
?>
$t = array ( 1 , 2 , 3 , 4 ) ;$db = count ( $t ) ;$e = " . tmbelem = " ;
for ( $ i = 0 ; $ i < $db ; $ i++){
echo $ i . $e . $t [ $ i ] . "" ;}
?>
3.7. program. Szveg darabjainak sszeillesztse
A program futsnak az eredmnye:
23
-
1 . tmbelem : 1
2 . tmbelem : 2
3 . tmbelem : 3
4 . tmbelem : 4
3.8. program. Tmb elemeinek listja
Ahogy lthatjuk a forrskdban, kiss krlmnyes az adatok kirsa, de
ne csodlkozzunk ezen. Tbb nyelvet gyazunk egymsba, s tbb rendszert
hasznlunk egyszerre.
Miutn elsajttottuk a PHP programok hasznlatt, ezt a tulajdonsgot
ki is hasznlhatjuk olyan feladatok megoldsra, mint a forrskd generls,
vagy a dinamikus adatbzis lekrdezsek ksztse.
3.2. Vltozk s adatok
A PHP a gyengn tpusos nyelvek kz tartozik. A programokban hasznlt
egyszer skalr vltozkat (egszek, szvegek, trtek, vagy a karakterek)
nem kell deklarlni. A deklarci elhagysa mellet azrt vannak kiktsek a
vltozk hasznlatra vonatkozan, de ezek nem tl bonyolultak.
Mieltt hasznlunk egy vltozt, rtket kell adnunk neki. Ha ezt nem
tesszk meg, a futtatrendszer lelltja a program futst, s hibazenetet
r a kpernyre (vagy a szerver kongurcijban megadott helyre).
3.9. program. rtkads
24
-
Az sszetett adatszerkezetek esetn viszont, mint a tmbk, rekordok,
osztlyok, vagy fjlok, a tpust be kell vezetni.
3.10. program. Osztlyok denilsa
A gyenge tpusossg nem jelenti azt, hogy a rendszer a tpusokkal nem
trdik, vagy nem kezeli ket. Inkbb csak rugalmasabb a vltoz kezels,
ami rengeteg lehetsget rejt magban a dinamikusan mkd weboldalak
programozsa sorn.
Ne feledjk el azt sem, hogy a szm tpus, valamint a klnbz szveges
adatok megjelentse is szveges formtumban trtnik, mivel a bngsz
egyszer HTML kdot kap a szerver oldali programtl.
Az adatok s a kifejezsek minden esetben szvegg konvertldnak, ha
kirsban szerepeltetjk ket, gy a formzs s a darabok sszeillesztse a
direkt adatkonverzik elhagysa mellett sem okoz klnsebb problmt. Ez
a lehetsg is a gyenge tpusossg eredmnye.
Egy vltozt akr tbb cllal, tbbfle tpus adat trolsra is alkalmas.
A $a = 1 rtkadst kvetheti a $a = "szveg", majd a $a = 5 jbli
rtkcsere utn az $a vltoz szerepelhet akr egy kifejezsben is.
A nyelv tpusrendszere megenged, de vigyzzunk, a sok lehetsg sok
hibalehetsget is magban hordoz.
Elkvethetnk olyan hibkat, melyeket a program tesztelse sorn szre
sem vesznk, de a felhasznl bizonyosan az els alkalommal el fogja lltani
25
-
ezeket.
A teljes kr tesztels egyszer programok esetn is nagyon krlmnyes.
Nhny elgazst tartalmaz forrsszveg tbb milli klnbz vgrehajtsi
gat eredmnyezhet. Nem beszlve arrl, hogy a tesztels nagyon kltsges
dolog. tgondoltan s krltekinten bnjunk a tpusokkal s a vltozkkal,
hogy ne kelljen hossz rkat forrskdjavtssal tltennk.
3.3. sszetett adatok
Ahhoz, hogy az sszetett adatszerkezetek hasznlatt jobban megrthessk,
csoportostsuk a PHP nyelv tpusait. Hromfle tpus ltezik. A legegyszerbb
a skalr, vagyis a szmok, karakterek s minden egyszer tpus.
A msik nagy csoport az sszetett adatok csoportja. Ide tartoznak a
tmbk, listk, string-ek s az osztlyok.
A tmbket a nyelv ktflekppen is kpes kezelni. Hivatkozhatunk a
tmbkre indexelhet vektorokknt, vagyis hash tblaknt. Ezt a tpust
asszociatv tmbnek is nevezzk.
Asszociatv tmb esetn az egyes elemeket kulcsokkal rhetjk el. Ez a
gyakorlatban azt jelenti, hogy nem a $tomb[$index], vagy $tomb[1], hanem
a $tomb["kulcs"] formulval rhetjk el az adott elemet.
Mikor vektorknt kezeljk a tmbket, egyszeren indexek segtsgvel
hivatkozunk az elemeikre. Minden elem elrshez az indexn keresztl vezet
az t, vagyis, ha ismerjk az adott elemnek a tmbben elfoglalt helyt
(sorszmt), a $tombvaltozo[$index] formulval hivatkozhatunk r.
Termszetesen a PHP nyelv is ismeri a tbb dimenzis tmb fogalmt.
$t [ 0 ] [ 0 ] = " 0 .0 " ;
$t [ 0 ] [ 1 ] = " 0 .1 " ;
3.11. program. Tbb dimenzis tmb
Az elemekre minden dimenziban tetszleges mdon hivatkozhatunk,
vagyis az egyik dimenziban indexekkel, a msikban asszociatv mdon.
26
-
$t [ 1 ] [ " e l s o " ] = 1 ;
echo $t [ 1 ] [ " e l s o " ] ;
3.12. program. Tmbelemek felhasznlsa
Ltrehozhatunk tmb tpus vltozt az array, vagy a list fggvnyek
segtsgvel, esetleg direkt mdon, az elemek megadsval.
$t1 = array ( 1 , 2 , 3 ) ;
$t2 [ 0 ] = 1 ;
$t2 [ 1 ] = 2 ;
$t2 [ 2 ] = 3 ;
3.13. program. Elemek megadsa
Asszociatv tmbket is knnyen kszthetnk az elem index prosok
denilsval, vagy az array fggvnnyel.
$a1 [ " e l s o " ] = 1 ;
$a1 [ "masodik" ] = 2 ;
$a2 = array ( " e l s o " => 1 , "masodik" => 2 ) ;
3.14. program. Az array kulcssz
Az a1 s a a2 tmbk ugyanazokat az elemeket tartalmazzk, csak ms
az elemek neve.
Nzznk meg egy bonyolultabb pldt, ami szemlletes mdon mutatja
be a tmbk hasznlatt. A pldaprogramban feltltnk egy n x m mret
mtrixot vletlen szmokkal.
A mrtix elemeit kt egymsba gyazott ciklus segtsgvel hozzuk ltre.
A trolt rtkeket direkt mdon adjuk meg s egy vletlen szm genertorral
hozzuk ltre.
27
-
3.15. program. Tmb feltltse
A tmbk kiratst a vezrl szerkezetek ciklusokrl szl rszbben
vizsgljuk meg rszletesebben, de a 3.15 program eredmnyt megmutatjuk.
28
-
8 2 4 6 4 5 8 3 4 7
8 1 2 6 3 1 7 4 8 4
3 5 7 8 4 6 4 7 6 7
5 5 9 8 1 3 3 9 6 7
6 4 7 8 9 1 8 7 4 7
2 6 2 8 5 6 4 8 4 1
6 8 5 5 6 6 7 9 5 4
6 2 7 3 9 7 3 8 5 7
5 7 3 7 5 8 4 9 6 7
1 3 6 5 7 3 2 5 2 6
3.16. program. Mtrix kirsa
A mtrix feltltst, s kirst kln ismtlsekben valstottuk meg,
mert alapvet programozsi hiba ugyanabban ciklusban kiratni a tmbk
s listk elemeit, amelyben feltltjk ket.
A listk feldolgozshoz sokkal jobb, ha a foreach vezrl szerkezetet
hasznljuk.
3.4. Vezrl szerkezetek
A PHP nyel tartalmazza a C, C++ s a C# programoknl megszokott vezrl
szerkezeteket, elgazsokat, ciklusokat s a foreach listakezelt.
Vizsgljuk meg a vezrl szerkezeteknek a PHP nyelv vltozatait.
Elgazsok. A nyelv tartalmazza a feltteles elgazs egyszer s sszetettformjt. rhatunk if {} else {}, vagy switch tpus elgazsokat.
29
-
3.17. program. Feltteles elgazs
Termszetesen egy utasts esetn a { } jelek el is hagyhatak, de az
elhagysuk nem javasolt, mivel a program jabb utastsokkal val bvtse
setn nagyon krlmnyes utlag kitenni ket.
Termszetesen rhatunk tbb ggal rendelkez elgazsokat is az elif
gak bevezetsvel, vagy a switch feltteles utasts hasznlatval. Az elif
gak hasznlata nehzkes, ezrt lehetsg szerint vlasszuk a switch tpus
elgazst, amit a kvetkez plda be is mutat szmunkra:
30
-
3.18. program. switch vezrl szerkezet
A switch feltteles utastsban az egyes gakat a case kulcssz vezeti be.
Az gak vgn a break sznak s egy ;-nek kell szerepelnie. Ha ezt elhagyjuk,
az adott g utn kvetkez minden egyes g le fog futni a kvetkez break;
kulcsszig.
A default sz az egyb gat vezeti be, mely el is hagyhat. (A napok
neveit kir programrszlet termszetesen egy tmb s egy ciklus utasts
segtsgvel hatkonyabban megvalsthat.)
A switch utasts kitnen hasznlhat weboldalak menkezelsnek a
megszervezsre. Erre a lehetsgre ksbb mg visszatrnk.
Ciklus utastsok. Ciklusokbl a PHP nyelveben hromfle tpus ltezik,kiegsztve a foreach utastssal, amit listk, valamint tmbk bejrsra
hasznlhatunk.
31
-
3.19. program. Ismtlsek
A fenti hrom ciklus utasts ugyanazt a feladatot vgzi el, vagyis kirjk
a kpernyre a 0-9 szmokat, mindegyiket j sorba. A while s a do-while
ciklusok esetn gondoskodnunk kell a ciklusbl val kilpsrl. A do-while a
C, C++ s a C# programok mintjra a ciklusban marads s nem a ciklusbl
val kilps felttelt tartalmazza.
A foreach kiss eltr a megszokott C formtl. A PHP nyelvben nem a
foreach ( s k a l r v l toz in l i s t a k i f e j e z s )
, hanem a
32
-
foreach ( l i s t a k i f e j e z s as l i s t a k i f e j e z s ). . .
formt hasznljuk.
$t = array ( 1 , 2 , 3 , 4 , 5 , 6 ) ;foreach ( $t as &$ i ){
echo $ i ;}
3.20. program. Foreach listk feldolgozsra
A &$t azrt szksges, mert a foreach utastsban nem a tmb, vagy
a lista elemeire hivatkozunk, hanem magra a tmbre, gy azt nem skalr
tpus vltozknt kell kezelnnk, hanem tmb tpusknt.
3.5. Alprogramok
A nyelv alapjai nem bonyolultak, klnsen nem azok szmra, akik mr
megtanultak ms nyelveken programozni.
Adatbzisbl szrmaz adatokkal mkd oldalak ksztshez viszont
mindenkppen el kell sajttanunk a fggvnyek s eljrsok hasznlatt.
3.1. megjegyzs. Az alprogramokat a tovbbiakban egysgesen fggvnynek
fogjuk nevezni. Ahol szksges, kitrnk a tpusokra s a visszatrsi rtk
kezelsre is. . .
Ahhoz, hogy fggvnyeket tudjunk kszteni, tisztban kell lennnk a
formlis, s aktulis paramterek fogalmval, valamint a fggvnyhvsok
mdjval.
Fggvnyek hasznlata. Az alprogramokat a function kulcssz vezetibe. Ezutn kvetkezik a paramterlista () kztt, majd a fggvny blokkja,
melyet {} zrjelek kz zrunk.
33
-
A () zrjelek a paramterekkel nem rendelkez fggvnyek esetn sem
hagyhatk el.
A fggvny blokk tartalmazza az utastsokat s a return kulcssz utn
fggvny a visszatrsi rtkt megad kifejezst.
A return kulcssz s az utna ll kifejezs elhagyhat, ha tpussal s
visszatrsi rtkkel nem rendelkez fggvnyt szeretnnk ellltani.
Vizsgljuk meg a kvetkez programlistt, aminek a fggvnyei nagyon
szemlletesek, s a ksbbi munknk sorn hasznosak lehetnek.
Figyeljk meg, hogy a fggvnyek paramtereinek nem kell tpust adni.
A paramtertads a fggvnyek esetn nagyon fontos s elhagysa komoly
hibkhoz vezethet, mivel a globlis vltozk kzl csak azok lthatak a
fggvnyek trzsben, amelyeket regisztrltunk globlis vltoznak
34
-
3.21. program. Fggvnyek hasznlata
35
-
Az els fggvny nagyon egyszer, s a hasznossga is vitathat (Hasonl
a helyzet a msodikkal is.). Paramtere nincs, s ha meghvjuk, akkor kirja
a Hello szcskt, vagyis rnk kszn.
A msodik fggvny mr nmikpp nagyobb tuds. Ennek a bemenete
egy nv (vagy egy tetszleges szveg). Ahogy meghvjuk, a kapott paramter
el rja Hi szt, majd a vgre egy felkilt jelet ragaszt.
Az amount fggvny a paramterknt kapott kt szmot sszeadja, majd
visszatr az sszeggel. A sum egy listt kap paramterknt, majd visszaadja
a listban szerepl elemek sszegt.
3.2. megjegyzs. Szveges adatok esetn a szvegrszek konkatenltjval tr
vissza minkt fggvny . . .
A trim mr valamivel hasznosabb, mivel ez a fggvny a paramterknt
kapott szvegbl trli, vagyis res szvegre cserli a msodik paramterben
megkapott rszsz sszes elfordulst.
A fggvnyben lert mveletsor webprogramok rsakor rutin feladatnak
szmt, ha beviteli mezk, vagy rlapok adatait dolgozzuk fel.
A createID a trim-hez hasonlan mkdik, de ennek a paramtere egy
azonost, vagy nv. A nemkvnatosnak vlt elemeket ($BADList) lecserli
a j elemeket tartalmaz listban ($GOODList) szerepl prjukra, majd az
eredmny el ragaszt egy viszonylag nagy egsz szmot, gy biztostva annak
egyedisgt.
Ez a fggvny egyedi azonostk, vagy fjlnevek generlsnl szinte
elengedhetetlen, de nagyon hasznos kpek, vagy szveges fjlok kezelshez.
3.3. megjegyzs. A digitlis fnykpezgpek generlt neveket hasznlnak
a fnykpek trolshoz. A nvadsi konvenci legtbbszr igen egyszer
algoritmussal trtnik. A kp neve az Image szval kezddik, majd a kszts
sorrendjben egy sorszm kveti.
A sorszmot sokszor szkz elzi meg s () zrjelek kzt szerepel.
Vgl a kiterjeszts kvetkezik, amit a felhasznlk szmtgpe, vagy mr
a fnykpez is nagybetsre alakt.
Ez egy Unix-Linux opercis rendszeren fut webszerver szmra ksz
rmlom. A nvben szerepl szkz, a zrjelek s a nagybets kiterjeszts
36
-
(.JPG, .PNG) lehetetlenn teszi a kpek szerverre trtn msolst s a
nvre val hivatkozst. . .
Ahogy a lista vgre rnk, lthatjuk, hogy PHP nyelven fggvnyt rni
knnyed s hasznos elfoglaltsg.
Mindezek mellet az osztlyok ksztse (OOP), a kd jrahasznosts,
a knyvtri modulok rsa, s ezltal hatkony programok ellltsa szinte
elkpzelhetetlen alprogramok hasznlata nlkl.
3.6. Ellenrz krdsek
1. Hogyan kell vltozt deklarlni PHP programban?
2. Milyen tpus tmbk lteznek a PHP nyelvben?
3. Hogyan lehet tmbket hatkonyan feldolgozni a PHP programokban?
4. Hogyan tudunk PHP forrsszvegbl HTML kdot generlni?
5. Hogyan kell fggvnyeket denilni PHP programokban?
6. Hogyan lehet egy PHP fggvnyben elrni a globlis vltozkat?
7. Milyen sszetett adatszerkezetek denilhatak a PHP nyelvben?
8. Hogyan hivatkozunk a skalr vltozkra PHP-ban?
9. Hogyan mkdik a foreach utasts PHP-ban?
10. Milyen vezrlszerkezeteket tartalmaz a PHP nyelv?
11. Milyen ciklusutastsok hasznlhatak PHP-ban?
12. Mivel jelljk a PHP programokban a vltozkat?
13. Milyen lehetsgeket knl a PHP nyelv az adatok megjelentsre,
kirsra?
14. Mit jelent az asszociatv tmb fogalma?
15. Milyen tpusokat denilhatunk PHP-ban?
37
-
16. Hogyan hivatkozhatunk asszociatv tmbk elemeire?
38
-
4. Adatbzisok elrse PHP programokban
4.1. DBMS rendszerek
A dinamikus webmotorok nagy rsznek adatai, menpontjai s minden
vltoz tartalom, mely az oldalakon elfordul adatbzisokban troldik.
Ez nagyon hasznos tulajdonsg, mivel az adatbzis-kezelk (DBMS -
Database Management System) segtsgvel az adatok bevitele, kirsa s
az adatbiztonsg kezelse lnyegesen egyszerbb.
Az adatbzis kezel rendszerek a szoksos feladatok mellet az olyan
jelleg problmkat is megoldjk, amelyekkel a hlzaton mkd adatkezel
alkalmazsoknl felttlenl szmolni kell.
Az adatokat egy idben tbb felhasznl is elrheti, ezrt biztostani
kell a prhuzamos hozzfrst.
Adatbevitel esetn biztostani kell a kizrlagos hozzfrst, hogy ne
forduljanak el klnfle anomlik [4]
Az adatok trolsa nem felttlenl egy gpen trtnik, ezrt biztostani
kell az elosztott adatelrst
Az adatbzisok tblinak indexeit karban kell tartani
A hozzfrsi szinteket szablyozni kell
Biztostani kell trolt eljrsok [3] rsnak lehetsgt, valamint az
adathozzfrst klnbz hlzati eszkzkn keresztl
Szmos feladat van teht, amitl egy j adatbzis kezel megkmli a
programozt.
Sokfle adatbzis kezel ltezik. Kztk vannak jobbak, rosszabbak. A
megfelel kivlasztsa sarokpontja lehet a j webprogram elksztsnek. Ha
a gyorsasg a cl s az adattrols sorn kevs informcit trolunk elg
valamely kisebb s kevsb hatkony rendszert vlasztanunk, mint a MySQL.
Abban az esetben viszont, ha nagy mennyisg adatot trolunk, vagy
mozgatunk vlasszuk az erteljesebb s nagyobb tuds PSQL vagy MSSQL
39
-
rendszereket. Soha ne kvessk el azt a hibt, hogy mi magunk akarjuk az
adatkezelst programjt megoldani, hacsak nem ez a feladatunk.
4.2. Hozzfrs adatbzis kezelkhz
Brmilyen adatbzis kezelt is vlasztunk, az els feladatunk az lesz, hogy
megvizsgljuk a programozsra hasznlt nyelv adatbzis kezel rutinjait, s
azokat a knyvtri modulokkal, amelyek az adatbzis kezelvel folytatott
prbeszdek lebonyoltsrt felelsek.
Emlkezznk vissza, hogyan mkdnek a weboldalak. A kliens gpek
kapcsoldnak a webszerver 80-as portjhoz. A szerver a hozz intzett krs,
vagyis az URL alapjn megkeresi a krshez tartoz knyvtrat s azon bell
az index fjlt.
Abban az esetben, ha a fjlban tallhat PHP forrsszveg, a rendszer a
PHP fordtprogramjt segtsgl hvva lefordtja, s a programban szerepl
utastsokat vgrehajtja.
Az adatbzis kezelst ezen a ponton lehet megvalstani a programokban
elhelyezett adatbzis kezel rutinok segtsgvel.
Ez a gyakorlatban azt jelenti, hogy a nyelv ltal biztostott fggvnyeket
a megfelel paramterekkel elltva a forrsszvegbe gyazzuk.
Mi az egyszersg kedvrt a MySQL rendszert fogjuk hasznlni, mert
nyitott forrskd [5], ingyenesen hozzfrhet, knnyedn kongurlhat
s nagyon elterjedt alkalmazs.
4.3. Az els kapcsolat
Adatbzis kapcsolat ltestshez rendelkeznnk kell sajt adatbzis-kezel
rendszerrel, vagy hozzfrst kell szereznnk egy msok ltal zemeltetett
DBMS vltozathoz.
Mindegy, hogy az els fejezet sorn bemutatott webszervert mi magunk
ksztettk el, s annak adatbzis kezeljt hasznljuk, vagy a hozzfrs
ignylst vlasztottuk, mindkt esetben rendelkeznnk kell egy felhasznli
nvvel s egy jelszval.
Ezekre az adatokra szksgnk van a program megrsa kzben.
40
-
A legtbb szolgltat nagyon gyel a felhasznlk s a sajt adataik
vdelmre, ezrt a szerverhez val hozzfrst a lehet legszigorbb mdon
korltozzk.
Mindezek miatt elfordulhat, hogy az adott szerverre SSH, vagy Telnet
kapcsolattal nem, kizrlag FTP-vel frhetnk hozz.
Sajnos ebben az esetben kizrt, hogy a MySQL rendszert kzvetlenl,
vagyis parancsosbl hasznlhassuk a tblk ltrehozsra.
A megolds a problmra az, hogy a tblk ltrehozst is programok
segtsgvel vgezzk el, de mieltt ezt megtennnk, tervezzk meg azt a
tblt, melyben az adatainkat trolni fogjuk.
Gyakorlsnak ksztsnk egy egyszer alkalmazst, amely felhasznlk
adatait trolja egy kezdetleges MiniFaceBook alkalmazs szmra.
A kpen lthat tbla megfelel lesz a trolsra:
4.1. bra. A MiniFaceBook tblja
Ksztsk el azt az SQL query-t, mely a tblnkat ltrehozza. Az albbi
lista tartalmazza az SQL nyelv utastst, melyet a ksbbiekben a PHP
programunk segtsgvel elkldnk a DBMS szmra.
41
-
CREATE TABLE use r s
(
id i n t primary key auto_increment ,name varchar (255) ,
p i c tu r e varchar (255) ,
cv text
)
4.1. program. Felhasznlk tblja
Kezdetnek ennyi is elg lesz. Ha szksgnk lesz tovbbi adatokra, a
tblt kiegszthetjk az alter table utasts segtsgvel. Most inkbb
vizsgljuk meg, hogy mit jelent s milyen mezket tartalmaz az SQL utasts.
Az id mez a tbla elsdleges kulcsa (primary key). Erre minden
tbla esetn szksg van, mivel ez a mez azonostja a rekordokat. A
mez tpusa int, vagyis egy eljeles egsz szm.
Az auto_increment mdosts azt jelenti, hogy az adatbzis kezelre
bzzuk ennek a meznek a karbantartst. A rendszer adja az rtket
s a trlsek, mdostsok utn is gondoskodik a megfelel kvetkez
rtk megadsrl. A mdostt hasznlva, a mezt a beszrsok s
trlsek sorn sem kell kezelnnk.
A msodik mez a rekordokban szerepl szemlyek neveit hivatott
trolni. A tpusa egy 255 karakter hossz varchar, mely a MySQL
lekrdez nyelvben a STRING tpus megfelelje.
A picture mez a szemlyekhez tartoz kpeket fogja kezelni.
A kpeket nem az adatbzisban troljuk majd, hanem a httrtron
a programjainkat tartalmaz fjlok mellett. A tblba csak a kpek
neveit s a hozzjuk tartoz elrsi utakat szrjuk be, ezrt itt is
elegend a varchar tpus.
Az utols mezbe a szemlyek nletrajzt vihetjk be. Erre e clra
42
-
egy 255 karakter hossz vltoz nem elegend, ezrt vlasztottuk a
text tpust.
Ahhoz, hogy a tblt ltre is hozzuk, kapcsoldnunk kell az adatbzis
kezelhz s el kell kldennk feldolgozsra az elksztett query-t.
A kvetkez programlista tartalmazza a forrskdot, ami ezt a feladatot
el is vgzi.
A forrst egy fjlba kell lernunk, majd el kell helyeznnk a weboldalunk
gykrknyvtrban. Ahhoz, hogy le is fusson, a bngszben, a tanult
mdon hivatkozni kell r.
43
-
4.2. program. Tbla ltrehozsa PHP programbl
Semmi esetre ne frisstsk a bngszben a programot, mert a tbla
ltrehozsa utn az jra nem tud ltrejnni, s csak jabb hibazeneteket
kapnnk eredmnyl. Hibs program esetn sem fog a program a frisstsek
hatsra megjavulni.
A program futsa utn az A tbla sikeresen ltrejtt feliratnak kell
megjelenni a bngszben. Hiba esetn viszont az adatbzis kezeltl rkez
44
-
hibazenetnek, vagy az ltalunk kirt hibnak.
Ha a Hiba a kapcsolds sorn... kezdet sort ltjuk, a mysql_connect
fggvny krnykn keressk a hibt. A Hiba a ltrehozs sorn zenet,
akkor jelenik meg, ha a query szvegt rontottuk el.
Ha tl vagyunk a hibakeressen, vizsgljuk meg a forrsszveget (ennl
a programnl nem gyeltnk sem a karakterek megfelel kdolsra, sem
a HTML kimenet minsgre. Ne csodlkozzunk ht, ha az kezetes betk
helyett furcsa karakterek jelennek meg a kpernyn.)
A kd els sora a mysql_connect fggvny hvst tartalmazza. Ennek
a fggvnynek tbbfle paramterezse ltezik.
A mi programunkban a fggvny els paramtere a localhost sz, mivel
az adatbzis kezel s a webszerver egyazon gpen foglal helyet.
A localhost jelentse az, hogy a helyi hurokra kell kapcsoldni, vagyis
a 127.0.0.1 IP cmre [1]. Ez a paramter kiegszlhet az adatbzis elrshez
hasznlt virtulis port szmval.
A msodik, s a harmadik paramter az adatbzisok elrshez szksges
felhasznl nevet, s jelszt tartalmazza. Ezeket az adatokat rdemes vdeni
s egy helyen trolni. Egyrszt azrt, hogy ne trhessk fel a rendszernket,
msrszt, ha megvltoznak, ne keljen ket a program tbb pontjn trni.
A fggvny visszatrsi rtkt troljuk egy vltozban $conID abbl
a clbl, hogy a kvetkez feltteles elgazsban a kapcsolds sikeressgt
meg tudjuk llaptani. Sikertelensg esetn hibazenetet runk ki a bngsz
ablakba.
A mysql_select_db fggvny paramtere az adatbzis nevt tartalmaz
vltoz. A nv s a jelsz mellet ezzel az informcival is rendelkeznnk kell.
az adatbzis azonostjt a szolgltatnktl kapjuk, vagy mi hoztuk ltre
sajt rendszernkn. Ebben az adatbzisban troldnak a tblink, gy a
jelenleg hasznlt users tbla is.
A $querySTR vltozban helyeztk el a tbla ltrehozst ler parancsot.
Az SQL utastsokat nem kell felttlenl vltozban trolnunk, de rdemes,
mivel gy hiba esetn ki tudjuk ratni ket a kpernyre hibajavtsi, vagy
ellenrzsi cllal.
45
-
A mysql_query fggvny elkldi az SQL parancsot a DBMS szmra. Ha
fggvny valamilyen okbl elbukik, a kzvetlenl utna rt kivtelkezel
tveszi az irnytst s kirja a hiba lehetsges okt.
A mysql_close fggvnynek a kapcsolat megszntetse a feladata. Erre
minden esetben szksg van, mert igaz, hogy a nyitva maradt kapcsolatok
elbb utbb bezrdnak, de a nyitott kapcsolat mg sebezhetbb teszi a
knnyen tmadhat webes alkalmazsokat.
Az adatbzisokkal dolgoz alkalmazsok rsakor mindig gyeljnk arra,
hogy a kapcsolatokat a lehet legrvidebb idn bell zrjuk le.
Msrszt ne szmtsunk arra sem, hogy a kapcsolat a kvetkez percben
mg nyitva van. Gondoljuk vgig, hogy a weben tevkenyked felhasznlk
miknt hasznljk a programokat. Nha kattintanak, elszednek egy rgebbi
cmet, majd frisstik a bngsz ablakt. Akr hosszasan is vrhatnak a
monitor eltt, mire jra kattintanak valamire.
Azt felttelezni, hogy a kapcsolat a kt kattints kztt eltelt id alatt is
fenn ll, butasg. Ha rosszul rjuk meg a programot s nem gondolunk erre
a krlmnyre, knnyen elfordulhat, hogy a kapcsolat magtl bezrdik
mire a felhasznlnk rkattint a kvetkez lekrdezsnkre. A programunk
a legjobb esetben is egy hibazenetet biggyeszt a kpernyre.
A mi programunk ennl sokkal okosabb. Ha befejezte a munkjt, lezrja
a kapcsolatot, majd tjkoztat minket a sikerrl.
4.4. Sajt fggvnyek kapcsoldshoz
Az adatbzisokkal val kommunikci az albbi, egymstl jl elklnthet
lpsekbl ll:
Kapcsolds a rendszerhez
Adatbzis kivlasztsa
Query ellltsa
Query elkldse a szervernek
Eredmny feldolgozsa
46
-
Kapcsolat bontsa
Hiba esetn a hiba kezelse
Ezek a rutinok ugyanabbl a nhny lpsbl, vagy utasts sorozatbl
llnak, melyek szinte csak a paramterekben trnek el (a felhasznl neve,
a jelsz, vagy az SQL utasts, amit a szervernek kldnk).
Kzenfekv megolds a klnbz rutinokat csoportokba foglalni, majd
fggvnyeket rni, amely fggvnyek bemen paramterei lerjk a vltoz
informcit.
4.5. Adatbzis kezel modul ksztse
Az adatbzis kezel fggvnyeket rdemes nll modulba helyezni, mert
gy a modult ksbb brmely ltalunk ksztett weboldal programja mell
elhelyezhetjk, s a benne trolt fggvnyeket tetszs szerint meghvhatjuk.
Ez a kd jrahasznosts elve, amit tovbb javthatunk azzal, hogy a
fggvnyeket osztlyokba helyezzk, s az osztly pldnyt hasznljuk fel
a programjainkban. Ne felejtsk el, hogy a PHP objektum orientlt nyelv.
Ez a megolds akkor is nagyon hasznos, ha ksbb a weboldalhoz tartoz
adatbzis kezel rendszert lecserljk.
Az adatbzis-kezel fggvnyek egy helyen vannak, ezltal knnyebb
megtalljuk ket.
Az alacsony szint adatbzis kezel mveleteket ki tudjuk cserlni gy,
hogy a fggvnyeink interface rszt nem alaktjuk t, csak a fggvnyek
blokkjban szerepl utastsokat.
Ha ezutn az adott fggvny nem egy MySQL rendszerhez kapcsoldik,
azt a program tbb rsze szre sem fogja venni.
Az, hogy a programjainkat platform fggetlenre ksztjk el egy alapvet
programozsi technolgia. Ezt kztes middleware-ek, vagy ms nven layer-
ek elhelyezsvel valstjk meg.
A kvethetsg s az egyszersg elvt kvetve mi a fggvnyes megoldst
vlasztjuk s az osztly ksztst ksbbre hagyjuk.
47
-
Mr csak az a krds, hogy milyen csoportokba soroljuk az adatkezel
lpseit.
A csoportostst rdemes a klnbz funkcik mentn elvgezni. Kell
egy csoport a kapcsolat ltrehozshoz, egy a query-k elkldshez, s egy
a platform fggetlensg megtartsa rdekben a kapcsolat bontshoz. (Ez
egy igen rvid fggvny lesz, de hasznos)
Ksztsk el az adatbzis kezel modulunkat s ezt is helyezzk el a
megfelel knyvtrba, az index.php fjl mellett.
A korbban megrt tbla ltrehozs rutint nem kell ebbe a modulba
integrlni, mert annak minden funkcijt kivltjuk a modul fggvnyeivel.
-
#TYPE: : s e l e c t_db (DBNAME: s t r i n g ) : vo id
f unc t i on se lect_db ($DBNAME)
{
mysql_select_db ($DBNAME) ;}
#TYPE: : query1 ( querySTR : s t r i n g ) : vo id
f unc t i on query1 ( $querySTR)
{
mysql_query( $querySTR)or die ( " e r r o r " .mysql_error ( ) ) ;
}
#TYPE: : query2 ( querySTR : s t r i n g ) : array
f unc t i on query2 ( $querySTR)
{
$ r e s u l t = mysql_query( $querySTR) or die( " e r r o r " .mysql_error ( ) ) ;
r e turn $ r e s u l t ;
}
#TYPE: : c l o s e (ID : i n t ) : vo id
f unc t i on c l o s e ( $ID )
{
mysql_close ( $ID ) ;
}
?>
4.4. program. Adatbzis kezel modul
Vegyk sorra, hogy milyen elemeket tartalmaz a knyvtri modulunk.
Rgtn az elejn tallhat a modulra vonatkoz minden fontos informci.
Ez a rsz komment, s nem tartalmaz semmi olyat, ami a program futst
befolysoln, de ennek ellenre mgis nagyon fontos szerepe van. A fejlesztk
az itt lert informcik segtsgvel tjkozdhatnak a forrskd letciklust
rint minden fontosabb informcirl.
49
-
A fggvnyek eltti TYPE kezdet rszek a fggvnyk s a paramtereik
tpusrl tjkoztatjk a programozt. A program mkdst ez a rsz sem
befolysolja (akr el is hagyhat), de alkalmas dokumentci generlsra,
s arra, hogy a fggvny sszes fontos tulajdonsgt lerjuk, megknnytve
ezzel a program tovbbfejlesztst.
Erre a clra hasznlhatunk mr ltez dokumentcis eszkzket, vagy
kitallhatunk sajtot. Az utbbi sokkal hasznosabb, mivel a hozz tartoz
elemz program megrsval nagyon sokat tanulhatunk.
A connect, a select_db s a close fggvnyek a korbban megismert
funkcikat ltjk el.
A kt klnbz query fggvny feladata viszont eltr, ezrt is van
bellk kett.
A query1 a beszrs, mdosts s trls tpus lekrdezseket hajtja
vgre, mg a query2 azokat, melyek adatokat szolgltatnak a programunk
fel tovbbi feldolgozsra.
4.1. megjegyzs. Vegyk szre, hogy a fggvnyek blokkjainak cserje, vagy
trsa ms adatbzis kezel utastsaira egyltaln nem vltoztatjk meg a
fggvnyek felhasznlsnak a mdjt. . .
Mivel a PHP nem kszt trgykdot, a ksz modult elg az alkalmazs
tbbi fjlja mell msolni, majd minden olyan helyen lthatv tenni, ahol
hasznlni szeretnnk.
Ez a gyakorlatban azt jelenti, hogy azokban a programokban, melyekben
a modul fggvnyeit hasznlni akarjuk, el kell helyezni egy include, vagy
egy require fggvnyt a modul nevvel paramterezve.
50
-
4.5. program. Modulok linkelse
Platform-fggetlen adatbziskezel ksztshez a fenti query2 fggvny
nem elegend. A fggvny hvsi helyn sajnos szksg van mysql specikus
fggvnyekre ahoz, hogy a DBMS fell rkez adatokat feldolgozzuk.
4.6. program. Adatok feldolgozsa
A problma a mysql_fetch_row fggvnnyel van, mivel a fprogram
minden olyan rszn meg kell hvnunk, ahol az adatokat fel szeretnnk
dolgozni.
Megoldsknt talakthatjuk a query2 fggvnyt gy, hogy a fetch_row
funkciit valsitsa meg, vagyis bontsa sorokra a rekordlistt, majd helyezze
egy asszociatv tmbbe az eredmnyt.
51
-
#TYPE: : query2 ( querySTR : s t r i n g ) : array
f unc t i on query2 ( $querySTR)
{
$ l i s t a = array ( ) ;$ r e s u l t = mysql_query( $querySTR) or die
( " e r r o r " .mysql_error ( ) ) ;while ( $ l i n e = mysql_fetch_assoc ( $ r e s u l t ) ){
$ l i s t a [ ] = $ l i n e ;
}
re turn $ l i s t a ;
}
4.7. program. Mdostott query
A mdostott query2 fggvny els sora denil egy tmbt az array()
fggvny meghvsval. Az SQL lekrdezs eredmnyt egy while ciklusban
soronknt belerakja a $line tmbbe.
A kapott tmbt a fprogram a kvetkezkpp tudja feldolgozni: kt
foreach egymsba gyazsval minden hasznos informci kinyerhet a
az eredmny listbl. A kls ismtls a sorokat adja, a bels pedig egy
mintailleszts segtsgvel kivlasztja az adott sorbl a mezneveket, s a
mezk tartalmt.
52
-
. . .
$ l i s t a = query2 ( ' s e l e c t from tablename ' ) ;foreach ( $ l i s t a as $ l i n e ){
foreach ( $ l i n e as $k => $v ){
echo "$v a kulcs , $k az adat" ;}
}
. . .
4.8. program. Adatfeldolgozs mintaillesztssel
Az adatfeldolgozsnak ez a mdja elg ltalnos ahhoz, hogy a fprogram
brmely rszn, vagy akr ms programokban is fel tudjuk hasznlni az
adatbzis kezel moduljt. A forrsszvegben mr csak egy olyan rsz van,
melyrl eddig nem beszltnk, a mintailleszts a bels foreach-ben.
foreach ( $ l i n e as $k => $v ) . . .
4.9. program. Modulok linkelse
A $line vltoz tartalma - ami egybknt egy asszociatv tmb egy
elemnek felel meg - egy key => value formj adat. Az els rsze a tmb
adott elemnek a kulcsa (neve), a msodik pedig a kulcshoz tartoz adat
(rtk).
A mintailleszts sorn a $k vltozba bekerl a kulcs, a $v vltozba
pedig a kulcshoz tartoz, ezrt van szksg a formulban a => szelektor
hasznlatra.
4.2. megjegyzs. Ha ezutn sem rtjk a kdot, olvassuk el gyelmesen a
tmbk kezelsrl szl fejezetet. . .
A modult ezzel a kis mdostssal ltalnos felhasznlsv alaktottuk,
mivel gyeltnk arra, hogy a fggvnyek paramterezstl fggen minl
53
-
tbb programban fel lehessen azokat hasznlni.
Az adatbzis kezelst tltszv tettk a platformfggetlen interface
elksztsvel, gy az adatbzis kezel rendszer cserje sorn a fprogramot
nem kell megvltoztatni.
Minden olyan mdosts, ami az adatkezelst rinti elvgezhet a modul
fggvnyeinek talaktsval, vagy az inteface megtartsa mellett a modul
teljes cserjvel.
A befektetett energia, s a rengeteg forrsszveg haszontalannak tnhet,
de hosszabb tvon mindenkppen megri.
4.6. Ellenrz krdsek
1. Milyen lpsekbl ll az adatbzis kapcsolat felptse?
2. Hogyan ellenrizhet le az adatbzis kapcsolat felptsnek sikere?
3. Hogyan kszthetnk SQL tblkat PHP programokban?
4. Hogyan kell feldolgozni a tbb rekorddal visszatr SQL lekrdezs
eredmnyt?
5. Milyen elnykkel jr az adatbzis fggvnyek modulokba sorolsa?
6. Hogyan hozhatunk ltre SQL tblkat.
7. Hogyan adhatunk parancsokat a DBMS szmra.
8. Milyen eszkzket biztost a PHP nyelv az adatbzis kezelshez?
9. Hogyan kell lezrni az adatbzis kapcsolatot:
10. Hogyan kerlhet el a tbbszrs include, vagy require fggvnyek
hasznlata esetn a tbbszrs fjl linkels?
animaciok/TAMOPweb0003.avi
animaciok/TAMOPweb0005.avi
54
animaciok/TAMOPweb0003.avianimaciok/TAMOPweb0005.avi
-
5. Modulszerkezet
5.1. Modulris felpts
Miutn elksztettk az adatok trolshoz szksges tblt, megrtuk az
adatbzis kezel rutinokat tartalmaz knyvtri modult, ne feledkezznk
meg arrl sem, hogy a hlzaton mindenki szmra elrhet, bngszben
mkd alkalmazst fogunk kszteni. A programot valsznleg fokozatosan
tovbb kell fejlesztennk a felmerl ignyek alapjn.
Ha mindezeket szem eltt tartva jratervezzk a programunkat, hamar
belthatjuk, hogy szksgnk van egy keretrendszerre, amelyben lerhatjuk
a menkezelst, a menpontokat s a tartalmukat trol fjlokat.
5.1. bra. Modulris felpts
A klnbz oldalak forrsszvegeit rdemes csoportostanunk.
Gondoljunk vissza az els fejezetben megismert CMS moduljaira, vagy
menszerkezetre.
Mieltt teht hozzkezdennk az adatkezel megrshoz, ksztsk el a
keretprogramot, melyet az index.php fjlban fogunk eltrolni.
Ebben a fjlban fogjuk lerni az oldal HTML kdjt, vagyis a megjelenst.
Ide linkeljk a menkezel programrszeket, a menpontok ellltshoz
55
-
szksges kdot, s a menk hatsra megjelen oldalak kdjnak betltse
is ebben a rszben kap helyet.
Ha ez sikerl, akkor az index.php fjlt mr csak arra hasznljuk, hogy
az jabb menk, vagy funkcik programjait integrlhassuk. Az oldalunk
felptse gy nmikpp hasonltani fog a CMS rendszerek szerkezetre.
Ez bizonyra azrt van gy, mert a CMS-ek programozi is logikusan
gondolkodva ptik fel a programjaik szerkezett. A 5.1 brn lthatjuk
a modulris szerkezet rajzt. Az bra abban lesz a segtsgnkre, hogy a
modulszerkezetet jobban tlssuk s megrthessk.
56
-
tesztprogram
5.1. program. Modulszerkezet
Az 5.1 lista, amely a modulszerkezet programjt mutatja be, a HTML
kd mellett tartalmazza a stluslapra mutat hivatkozst is, valamint PHP
blokkokat. A blokkok ktelezen a jelek kztt foglalnak helyet, hogy
a webszerver felismerje a forrsszvegben lert utastsokat.
57
-
5.1. megjegyzs. A stluslapot ler .css kiterjeszts fjlokat az index
mellett kell elhelyezni, vagy gondoskodni a hozzfrsrl.. . .
A forrskd nhny pontjn elhelyezett include fggvnyek paramtere
az adott ponton betltend fjlok neve (vagy elrsi tja s neve).
Most ksztsk el fejlc HTML kdjt, amely segtsgvel betltnk egy
kpet, valamint elhelyeznk egy rvid szveget, ami a weboldal cmeknt
funkcionl. Ezt a programot el kell mentennk a header.php fjlba.
Weboldal f e j l c e
5.2. program. Fejlc szerkezete
Az program gy fog mkdni, mintha futs kzben msolnnk a helyre
a paramterknt kapott fjlban lert forrskdot, majd le is futtatnnk azt.
Az include fggvny szmos lehetsget knl a programoz szmra a
dinamikus kdgenerls, s kdtalakts terletn. Ezeket a lehetsgeket
mi is ki fogjuk hasznlni, mghozz arra, hogy a menpontokhoz tartoz
tartalmak kzl mindg csak az adott mennek megfelelt mutassuk meg a
bngszben.
A menpontokat tartalmaz kdrszlet lehet akr egyszer HTML szveg
is, de a menket generlhatjuk listkbl is.
5.2. megjegyzs. Az elgazsban szerepl, de eddig mg hinyz fjlokat
ksztsk el, majd msoljuk ket a weboldal knyvtrba, ha nem szeretnnk
tovbbi hibazeneteket kapni.. . .
Azrt, hogy a weboldal a CMS rendszerekhez hasonl mdon mkdjn,
trolhatjuk a menket is adatbzisban. A kvetkez rszben mindkt, vagyis
a statikus, s a dinamikus megoldsra is mutatunk pldt.
58
-
5.2. Menkezels
Menpontok ltrehozsa. A menpontok, valamint a hozzjuk tartozlinkek trolsra ltre kell hoznunk a mgfelel tblt. A tbla az 5.2 brn
lthat mezket tartalmazza, s a korbban tanult mdon hozhatjuk ltre.
CREATE TABLE menutable
(
id i n t primary key auto_increment ,name varchar (255) ,
l ink varchar (255))
5.3. program. Menpontok trolsa
5.3. megjegyzs. Vegyk szre, hogy a linkeket tartalmaz mez igen rvid,
mindssze 255 karakter hossz. Szerencsre ez nem baj, mivel a mezben
nem az interneten hasznlt hossz URL-eket troljuk, hanem az index.php
fjl nevt, s nhny vltoz tartalmt (lsd ksbb). Hosszabb linkek esetn
hasznlhatunk nagyobb teherbrs mezket. . .
A menpontok tblban val trolsa lehetv teszi szmunkra, hogy
ksbb a menk ksztshez biztostsunk olyan adminisztrcis felletet,
ahol a felhasznlink j menpontokat adhatnak a programhoz, trlhetik,
s mdosthatjk azokat.
A menkezel forrskdjt az 5.4 programlista tartalmazza. A modul a
korbban elksztett, s az adatbzis kezel modulban megrt fggvnyeket
hasznlja az adatok elrshez.
59
-
5.4. program. Menpontok trolsa
A forrsszveg els nhny sora az adatbzis kapcsolat felptshez
szksges forrskdot tartalmazza, a tovbbi rszek pedig a menpontok
lekrdezst.
jdonsg az eddigiekhez kpest az a ciklus, amely a menpontok nevbl,
s a hozzjuk tartoz linkekbl felpti a menszerkezetet ler HTML forrst
a bngsz szmra.
A while ciklus addig fut, amg a lekrdezs rekordokat ad vissza, vagyis
ha az eredmny 4 rekord, akkor ngyszer.
A ciklus minden futsa sorn a list fggvnyben elhelyezett vltozkba
tltdik a mysql_fetch_row fggvny ltal visszaadott rekordban szerepl
mezk rtke. Az els rekord mezje az els vltozba, a msodik mez a
msodik vltozba, s gy tovbb.
A mi esetnkben a $menutitle vltozba a name mez rtke, a $link
vltozba a link mez rtke kerl.
A link mez csak a menpont szmt tartalmazza, s nem a menpont
60
-
tartalmt ler fjl nevt (URL). Sajnos ez a megolds kls hivatkozsok
kezelst nem teszi lehetv.
A mezk s a vltozk sorrendje s darabszm is fontos. Amennyiben
hrom vltozba szeretnnk betlteni ngy mez rtkt az utols mez
elveszik. A vltozk neve viszont nem lnyeges, de a program rthetbb
s olvashatbb, ha a funkcionalits utn nevezzk el ket. A nv lehetsg
szerint legyen hasonl a mez nevhez, de utaljon a funkcira.
A forrskdban a ciklus blokkja a kapott adatok alapjn ellltja a
menpontokat, berja a nevket a tegek kz, s a href=
rszhez elhelyezi az oldalra mutat hivatkozs linkjt.
5.3. A menkezel rutinjai
-
sok az eslye az oldal els beletrdsekor, a d vltoznk ltre sem jn, de a
kvetkez sorban mr hivatkozunk r.
Ez slyos hiba, ezrt kell odarni a forrskd elejre az elgazst, ami ezt
a lehetsget vizsglja.
Az isset fggvny a paramterknt kapott vltozrl megmondja, hogy
az ltezik, vagy sem. Mivel a feltteles elgazsban a ! opertorral tagadtuk
az eredmnyt, a felttel akkor teljesl, ha mg nincs d vltoz.
Ilyenkor a d a 0 rtket kapja, mert ez jelenti a programunk szmra az
alaprtelmezett mveletet, vagyis a kezdlap betltst.
Minden ms esetben, vagyis amikor a d-nek mr van rtke, nem kell
hozznylni, mivel az rtk a menpontokra val kattints sorn jtt ltre.
Az oldalunk teht gy mkdik, hogy az els betltskor, vagyis amikor
a kliens szmtgp hivatkozik r, a d rtke automatikusan 0 lesz. Ekkor a
switch default ga fut le s betlti a kezdlapot.
Ha az oldal hasznlja valamely menpontra kattint, az megvltoztatja
a d rtkt s az rtknek megfelel gban denilt oldal fog betltdni.
Annak az oka, hogy a d vltozra a $_GET["d"] kifejezssel hivatkozunk,
az az oka, hogy az Apache webszervereken a globlis vltozk hasznlatt
korltoztk a REGISTER_GLOBALS direktva OFF rtkre lltsval.
Ez nem minden szerveren van gy. Termszetesen a rendszer zemeltetje
megvltoztathatja a direktva rtket. Szerencsre a mi programunk minden
esetben jl mkdik, mivel az oldalhoz tartoz munkamenetben trolja az
rtkeit.
5.4. megjegyzs. Ezt a megoldst hasznljk a FORM s a fjlkezels esetn
is, csak az adattvitelre hasznlt tmbk neve ms ($_POST $_FILE). . .
A menk kezelsre hasznlhatunk ms mdszert is, de a kvetkezt
semmikpp ne tegyk: Ne adjuk t a fjlok neveit URL-ben a kvetkez
mdon:
http : // . . . index . php?d=f i l e . php
Ha gy tesznk, akkor a fjl nevt trva brmilyen ms, a szerveren
62
-
elrhet fjl tartalmt megjelenti a kliens oldal bngszje.
Ehhez csak annyit kell tenni, hogy az URL-t trjuk:
http : // . . . index . php : d=/e t c /passwd
Az eredmny katasztroflis lesz, mivel a menkezel kdrszlet a passwd
fjlt az include fggvny segtsgvel beolvassa, majd kirja a bngsz
ablakba.
Ez a biztonsgi rs a webszerverek fejldsvel egyre kevsb hasznlhat
ki, de akkor is biztonsgi rs, amire gyelni kell.
Abban az esetben, ha nem akarunk dinamikus menkezelst, a menk
forrskdjt egyszeren csak bele kell rnunk HTML kdba. Ekkor sajnos j
menpont hozzadsa csak a forrskd szerkesztsvel lehetsges.
Az 5.6 programlista tartalmazza a statikus menk lerst:
Kezdlap
Men1
Men2
. . .
5.6. program. Statikus men ksztse
Termszetesen a menpontok kivlasztsa esetn lefut forrskd nem
vltozik, mivel az csak a menpontok hatsra ltrejv d vltoz rtkt
gyeli, egybknt teljesen fggetlen.
63
-
5.4. Ellenrz krdsek
1. Hogyan kell modulokat, fjlokat PHP programokba linkelni?
2. Milyen webszerver belltsok teszik szksgess a $_GET, $_SET s a
$_FILES tmbk hasznlatt?
3. Hogyan kezeljk a dinamikus weboldalak esetn a globlis adatokat?
4. Milyen protokollok segtsgvel rhet el a webszerver knyvtra?
5. Milyen kvetkezmnyekkel jr a REGISTER_GLOBALS paramter OFF
rtkre lltsa?
6. Mit azonostanak az URL-ek klnbz rszei?
7. Lehet-e adatokat, fjlokat mozgatni a kliens s a szerver szmtgp
kztt?
8. Hogyan rhetjk el az elre kidolgozott PHP fggvnyeket tartalmaz
modulokat?
9. Mirt rdemes a weboldalak egyes funkciit kln fjlokban elhelyezni?
10. Mivel jelezzk a webszerver szmra, hogy a HTML kdban PHP
szkript kvetkezik?
11. Lehet-e indexek segtsgvel elrni az asszociatv tmbk elemeit?
64
-
6. Adatkezel alkalmazsok ksztse
6.1. Adatbevitel
Az weboldal modulokra bontsnak mintjra prbljuk meg az adatbevitelt
is a lehet legegyszerbben megoldani.
A webes fellet nem teszi lehetv az adatok kzvetlen beolvasst. Mivel
nem tudunk egyszer beolvas utastsokat hasznlni, el kell gondolkodnunk
a lehetsgeinken.
Hogyan is mkdnek a dinamikus weboldalak? A webbngsz elkldi
a krseit a szerver 80-as portja fel. A webszerver feldolgozza a krsben
szerepl URL-t, s a benne hivatkozott oldalt megkeresi a gykrknyvtrban,
majd a fjlban tallhat PHP forrsszveget lefuttatva ellltja a kimenetet,
amit visszakld a bngsznek.
6.1. bra. Adatok ramlsa a weben
Lthatjuk, hogy a felhasznltl jv adatok megszerzse lnyegesen
bonyolultabb, mint az opercis rendszeren fut, s felhasznli fellettel
rendelkez programoknl.
Webalkalmazsok inputjnak kezelshez kzenfekv megolds a webes
65
-
rlapok, kzismert nevkn a form-ok hasznlata. A form a HTML nyelvben
hasznlhat egysg, mely kontrollokat tartalmazhat.
A kontroll felhasznli interakcit segt elem, melynek szmos fajtja
ltezik. Az elemek listjt gyakran kiegsztik - kliens oldali szkriptnyelven
rt specilis kontrollokkal.
6.1. megjegyzs. Legtbbszr Java alap kontrollokat hasznlunk. . .
A formokat a HTML kdba, vagy PHP programokba gyazva rhatjuk le
ahogy ezt a 6.1 programlistban is lthatjuk.
6.2. megjegyzs. A form-ok hasznlatt csak annyira rszletezzk, amennyire
a feladatok megoldsnl szksgnk lesz erre.
Megprblunk kizrlag azokra az attribtumokra koncentrlni, amik az
adatkezelsnl elengedhetetlenek. . .
6.1. program. Formok ksztse
Vizsgljuk meg az ptelemeket, amelyek segtsgvel a 6.1 programban
szerepel form-ot ltrehoztuk :
Az action=use.php rsz azt jelenti, hogy a form adatait az use.php
fjlban elhelyezett programmal dolgozzuk fel.
A method=post arra utal, hogy a form POST tpus, vagyis tovbbkldi
az adatokat a feldolgoz rutinokat ler programrsz fel.
66
-
a multipart/form-data attribtumra azrt van szksg, hogy ksbb
a fjlok kezelsnl a $_FILES vltozba bekerljenek a feltltsre sznt
fjlokat ler, s azok feldolgozshoz szksges adatok.
Az rlapokban hasznlhat kontrollok elegend tmogatst nyjtanak,
hogy brmilyen adatot el tudjunk juttatni a kliens oldaltl a szerverig s
vissza, ezrt rdemes megvizsglnunk a fontosabbakat.
a text mez a rvid szveges adatok beolvassra hasznlhat.
a textarea egy pros HTML nyelvi elem, mely egy tbb soros szveg
bevitelre alkalmas szvegdobozt hoz ltre.
A s a tag-ek kz rhatunk szveget, ami
megjelenik a kontroll felletn. A rows s a cols attribtumokkal a
szvegdoboz sorainak s oszlopainak a szmt adhatjuk meg, a name
attribtum pedig a kontorllhoz rendelt vltoz nevt denilja.
a checkbox, segtsgvel a tbb lehetsg kzli vlasztst tehetjk
lehetv a felhasznlk szmra. A checkbox-okat csoportosthatjuk,
s a csoportbl egyszerre tbb, vagy akr mindegyik elem lehet aktv
mikor a form elkldsre kerl.
6.3. megjegyzs. Termszetesen az is lehetsges, hogy a felhasznl
egy elemet sem jell ki a csoportbl. Ezt a lehetsget gyelembe
vve rdemes gondoskodni a vltoz alaprtelmezett rtkrl, hogy
az adatok feldolgozsa sorn az res, vagy nem ltez vltozk ne
okozzanak problmt.
Mint azt mr tudjuk, a PHP nyelvben a vltozk akkor jnnek ltre, ha
rtket kapnak s ez komoly problmkhoz vezet, ha a checkbox-ok
kzl egy sincs kijellve, viszont a feldolgozsrt felels programrsz
hivatkozik a csoport nevre. . .
radio nev elem egy hagyomnyos radiobutton-t hoz ltre a form
felletn. A checkbox-okhoz hasonlan ezeket az elemeket is tudjuk
67
-
csoportostani. Az elemek neveinek egyeznie kell, az rtkknek viszont
klnbzni egymstl (value). A csoportban egyszerre csak egy elem
lehet kijellve, gy a csoport segtsgvel a felhasznlt eldntend
krdsek megvlaszolsra ksztethetjk.
Ltezik fjlok tallzsra alkalmas kontroll is, ami a kvetkez sor
felhasznlsval kszthet el:
.
Ahogy lthatjuk, a kontroll tpusa file, a neve pedig file1.
Ne hasznljuk a tpussal megegyez nevet, mert ezzel sok problmt
okozhatunk magunknak a vltozk feldolgozsa sorn. Ez az elem
gy mkdik, hogy a nyomgombja elindt egy fjl tallz varzslt,
melyben a feltltsre sznt fjlt tudjuk kivlasztani. Ha nem akarunk
tallzni, begpelhetjk az elrsi utat s a fjl nevt.
A fjltallzs sorn egyszerre csak egy fjl vlaszthat ki feldolgozsra.
Knyvtr kivlasztsra alkalmas tallzt ne is keressnk. A tbb
fjl, vagy knyvtr kezelse alapvet biztonsgi rs lenne, mivel ebben
az esetben a szerver oldali szkripteknek lehetsget kellene adnunk a
felhasznlk helyi knyvtrainak az olvassra(Linux esetn az X jog
hasznlatra is).
6.4. megjegyzs. Amennyiben tbb fjlt szeretnnk feltlteni, egyesvel
kell kivlasztania azokat A fjlkezelsre ksbb mg visszatrnk, s
megmutatjuk a feltlts technikai, s biztonsgi krdseit.
Most elgedjnk meg annyival, hogy els lpsknt megteremtjk a
fjlkezels lehetsgt. . .
A form-on elhelyezhet elemek kzl szmunkra ennyi elegend lesz.
Segtsgkkel minden olyan adatot be tudunk olvasni, amire szksg lehet,
a beolvasshoz viszont ennyi tuds mg nem elegend.
A form segtsgvel megszerzett informcit fel kell dolgozni, a megfelel
helyre eljuttatni, trolni, valamint reaglni kell a felmerl hibkra.
68
-
A fejezet kvetkez rszben ezekkel a problmkkal foglalkozunk. A mr
elkszlt weboldalunkba modulknt helyezzk el az adatbevitelt megvalst
programrszeket, majd az adatbzis kezel modul segtsgvel troljuk a
felhasznltl jv informcit.
6.2. Adatfeldolgozs
A form-tl az adatokat el kell juttatnunk az adatfeldolgozshoz ksztett
programrszig. Ez nem bonyolult feladat, de a mkdst mindenkppen meg
kell rtennk ahhoz, hogy hatkonyan tudjuk kezelni a berkez informcit.
Ha az adatramls mkdst vizsgljuk, ki kell trnnk a WEB sajtos
llapotnlklisgre. Ellenttben az kliens gpeken mkd programokkal, a
weboldalak egy sajtos, gynevezett llapot nlkli llapotban lteznek.
Valjban ez az els ltsra ellentmondsos helyzet teszi biztonsgoss
a webes felletet s a weboldalak egyms kztti, valamint a weboldalak s
a webszerver kzti adatramlst.
Ha egy oldal cmt begpeljk a bngszbe, akkor az letlti a szerverrl
a cmben krt tartalmat. A weboldal forrsban szerepl programrszek
ltrehoznak vltozkat s feltltik azokat adatokkal.
Az gy ltrejtt vltozk, valamint adatok halmazt nevezzk a program
llapotternek.
A weboldal hasznlja kattint egyet az oldalon, vagy egyszeren csak
frissti a bngszjt, a program ltal hasznlt vltozk nagy rsze teljesen,
msoknak csak a tartalma vsz el, mivel a frissts esetn a program jra
lefut s minden olyan utastst vgrehajt, amit az elz futsa sorn is
vgrehajtott. gy sajnos fellrja a korbban rtkkel elltott vltozit.
Az ppen fut weboldalak kzti adatcsere csak specilis mdon oldhat
meg. Globlis rtkek trolsra hasznlhatunk munkamenet vltozkat,
vagy kls trolkat, fjlt, esetleg adatbzist.
6.5. megjegyzs. A session kezelsrl ksbb mg lesz sz, mert a hasznlata
elengedhetetlen a felhasznlk belptetshez s nyomkvetshez. . .
A form-ok esetben az adattvitel nem ennyire knyelmetlen, de itt is
oda kell gyelnnk, ha mindent szpen s helyesen akarunk megvalstani. A
69
-
webszerver belltsaitl fggen, ktflekppen lehet az adatokat a form-tl
megszerezni.
A rossz megolds az, ha a form-ban denilt vltozkra a feldolgozst
vgz programban kzvetlenl hivatkozunk ($szovegdoboz1, $file1).
Ahogy azt korbban mr emltettk, ez a megolds egyes szervereken
mkdik, ahol a REGISTER_GLOBALS direktva alaprtkre van lltva, de
ezeknek a szervereknek a szma egyre kevesebb, s abban sem lehetnk
biztosak, hogy a szerver zemeltetje nem vltoztatja meg a belltsokat.
A j megolds az, ha a $_GET, a $_POST, s fjlok esetn a $_FILES
tmbket hasznljuk az adatok feldolgozsra. A rendszer ezekbe helyezi
el a form-oktl rkez adatokat. A post tpus form-ok esetn a $_POST
asszociatv tmbbe, a get tpusnl a $_GET-be. A $_FILES tmbbe a fjl
tallz fell rkez fjl adatai kerlnek bele.
Minden tmbbelem az adott kontroll nevvel megegyez nev vltoz
rtkt tartalmazza, melyre a vltoz nevvel megegyez cmke segtsgvel
hivatkozhatunk: $_POST['kontroll_neve'].
Igazsg szerint ezek a tmbk a weboldalunk globlis vltozi, melyek
segtsgvel megoldhatjuk az adatok trolst s tvitelt az egyes oldalak s
aloldalak vltogatsa kzben. Minden weboldalhoz, illetve minden weboldal
egy pldnyhoz ltrejn egy munkamenet, vagy ms nven session, melybe
szabadon trolhatunk akrmit.
6.6. megjegyzs. Az adatok vdelme a munkamenetek hasznlata esetn is
fontos. Lehetsg szerint vdjk meg ket az rt szndk felhasznlktl.
Prbljuk meg a lehet legtbbet kihozni a programjainkbl az adatvdelem
terletn. . .
Most, hogy ismerjk az adattads elmleti krdseit, nzzk meg, hogy
jut el az informci a form-tl a feldolgozst vgz modulig.
Emlkezznk vissza, hogy a korbban elksztett rlapra, ami egy fjlra
hivatkozik. Ennek a fjlnak az a feladata, hogy az rlap adatait feldolgozza.
Ez valjban azt jelenti, hogy ha a felhasznl a submit gombra kattintva
aktivizlja a form-ot, a bngszje megkri a webszervert a fjlban tallhat
forrskd rtelmezsre.
70
-
Ez a fjl nem r semmit a kpernyre, csak elvgzi a szmra elrt
feladatokat. Ha elvgezte a munkjt, visszaadja a vezrlst egy msik
programrszhez, ami informlja a felhasznlt a trtntekrl.
A 6.2 kp ezt a folyamatot illusztrlja. Ahogy a kpen lthatjuk, ez
pontosan gy mkdik, mint amikor a fprogram meghv egy fggvnyt,
ami elvgzi a feladatait, majd visszatr az eredmnnyel a fprogramhoz.
6.7. megjegyzs. A mi esetnkben a fggvny egy fjlba lert programrsz,
vagy ha gy tetszik egy alprogram sajt feladatokkal s llapottrrel.. . .
Miutn lttuk, hogyan hvdik meg s tr vissza a program, ksztsk el
azt a modult, ami az adatok felvitelre szolgl. Folytassuk teht a harmadik
fejezetben elkezdett modult.
A szemlyek adatainak felvitelhez szksgnk lesz egy rlapra, valamint
egy olyan programra, ami a felvitt adatokat trolja, s meg tudja jelenteni.
6.2. bra. Fggvny s modulhvs
Ksbb kszthetnk keresst, valamint klnbz szrseket is az adatok
rendszerezshez.
6.8. megjegyzs. Az adatbzis kelez rutinok, valamint az adatok trolsra
hasznlhat tbla rendelkezsre llnak, mivel ezeket korbban elksztettk
71
-
CREATE TABLE use r s
(
id i n t primary key auto_increment ,name varchar (255) ,
p i c tu r e varchar (255) ,
cv text
)
6.2. program. Felhasznlk tblja
Az rlap forrskdjt a 6.3-as programszveg tartalmazza:
6.3. program. Adatbeviteli rlap
6.9. megjegyzs. A felvitelt segt rlapot rdemes egy css fjlban lert
formtum segtsgvel megformzni, de lagalbbis egy tblzatba illeszteni,
hogy tlthatbb s knnyen kezelhet legyen. . .
Most, hogy elkszlt a forrskd, mentsk el az useradd.php nev fjlba,
majd a menkezel modulban helyezznk el egy hivatkozst a fjlra.
72
-
. . .
switch ($_GET[ "d" ] ){
. . .
case 1 : include "useradd . php" ; break ;case . .
}
. . .
6.4. program. Az j funkci menje
Helyezzk el az j menpontot a rgiek kztt. Dinamikus men esetn
ez a mvelet azzal jr, hogy a menpontok tbljba felvisszk a megfelel
rekordot. Amennyiben statikus ment ksztettnk, egyszeren rjuk a kdba
a kvetkez linket:
. . . MiniFaceBook . . .
6.5. program. j menpont elhelyezse
Ki is prblhatjuk a munknk eredmnyt. Ha mindent jl csinltunk, a
menpontra kattintva az 6.3 brn szerepl rlapot kell ltnunk.
Termszetesen az adatbevitel mg nem mkdik, mivel a beszrst vgz
programot nem ksztettk el.
6.3. Adatok kldse s beszrsa adatbzisba
Ha minden megfelelen mkdtt, folytassuk a munkt. Hozzuk ltre a
programot, ami az adatok trolsrt felel.
73
-
6.6. program. Form adatainak beszrsa adatbzisba
A forrskd els ltsra bonyolultnak tnik, de ha jobban megvizsgljuk,
rjvnk, hogy minden karakternek megvan a szerepe.
Az els sorban, a require_once fggvny betlti a korbban elksztett
adatbzis kezel modult.
6.10. megjegyzs. Amennyiben azt egy msik programrsz betlttte volna,
a program akkor is helyesen mkdik, mivel a require_once fggvny nem
engedi meg a tbbszrs betlts kezdemnyezst . . .
A connect, s a selectdb fggvnyek a mr ismert mdon kapcsoldnak
az adatbzis kezelhz, s kivlasztjk azt az adatbzist, amire a programnak
szksge van.
A kvetkez nhny sor, ahol a $querystring nev vltozt ellltjuk,
a program legfontosabb s egyben legbonyolultabb rsze.
Ezt a string-et kldjk el az adatbzis-kezelnek, ami majd elvgzi az
ltalunk sszelltott rekord beszrst.
A rekord a form adataibl pl fel. Sorban a megadott nvbl, amely a
$_POST['nev'] formulbl kerl ki. A $_POST tmb a post tpus form-hoz
74
-
6.3. bra. Minialkalmazs kimenete
ltrejtt asszociatv tmb, melynek a 'nev' cmkvel hivatkozott eleme a
form $nev vltozjt tartalmazza.
6.11. megjegyzs. Valjban ez a tmbbelem csak a vltoz tartalmt veszi
t, s nem a vltozt, de egyszerbb, ha gy tekintnk r, mintha maga a
vltoz lenne a tmbben. . .
A $_POST['cv'] elemmel ugyan ez a helyzet, csak ebben nem egy nevet,
hanem egy hosszabb szveget trol a rendszer. Ezt az adatot is hozzfzzk
a beszrand rekordhoz, vagyis aahhoz az sql nyelv utastshoz, amit a
$querystring vltozban ksztnk el.
A $_FILES tmbben elhelyezett $kep vltoz valamivel bonyolultabb az
elzeknl, mivel minden eleme egy, a felhasznl ltal feltltsre kivlasztott
fjl adatait tartalmazza.
Teht minden eleme egy sszetett adatszerkezet, amely a fjl neve, elrsi
tja, tpusa s mrete mellet minden olyan informcit tartalmaz, ami a fjl
feldolgozshoz szksges.
A fjl neve s elrsi tja segtsgvel fel kell azt msolnunk a webszerver
egy erre a clra kijellt knyvtrba. Ltre kell hoznunk az j nevt, majd
az gy ltrejtt elrsi utat s fjlnevet sszeragasztva hozz kell fzni azt
75
-
az sql parancshoz.
6.12. megjegyzs. A fjl nevnek megvltoztatsa nagyon fontos lps, ha
nem akarunk hibkat kapni a feltlts sorn. Egyrszt azrt van szksg r,
mert a feltlttt kpek nevei tartalmazhatnak olyan karaktereket, amiket
a webszerver elrsi tknt nem tud kezelni. Ilyen pldul a szkz, ami
egyes opercis rendszerek esetn az elrsi t vgt jelenti, s ami ezutn
kvetkezik azt az opercis rendszer nem veszi gyelembe.
Msrszt arrl is gondoskodnunk kell, hogy a feltlttt fjlok nevei ne
egyezzenek meg. Ebben az esetben vagy sikertelen lenne a feltlts, vagy a
rgebben feltlttt fjlokat egyszeren fellrnnk.
Ezt a problmt ksbb megoldjuk egy rvid fggvnnyel, ami eltvoltja
a nemkvnatos karaktereket a nvbl, valamint el helyez egy viszonylag
hossz vletlen szmot. Ezzel a mdszerrel mr majdnem garantlhatjuk a
fjlnevek egyedisgt.. . .
A fjl feltltst egy msik fejezetben oldjuk meg, most elgedjnk meg
azzal, hogy a nevet s az elrsi utat beszrjuk az adatbzisba, s az adatok
kirsakor csak a fjl nevt rjuk ki a weboldalra.
Visszatrve a forrskdhoz, lthatjuk, hogy a query1 fggvnyt szintn
az adatbzis kezel modulbl hvtuk meg. Ez a fggvny felels az adatok
elkldsrt.
Az adatbzis kezel fel kldtt SQL parancs viszont rdemel egy kis
gyelmet. Mr az is rdekes, hogyan lltottuk ssze a tartalmt. Ez a
technika a dinamikus weboldalak programozsnl elengedhetetlen s taln
az egyik legrdekesebb dolog.
Az adatbzis kezel szmra kldtt, SQL parancsokat a program futs
kzben, felhasznli beavatkozsok hatsra lltja ssze. Ez a gyakorlatban
azt jelenti, hogy a query-ket a form-ok adataibl ltrejv vltozkbl, s
a megfelel SQL nyelvi elemekbl lltjuk el, gy azok minden esetben a
megfelel eredmnyt szolgltatjk. Erre a dinamizmusra azrt is szksg
van, mert a lekrdezseket lehetetlen lenne elre leprogramozni.
A 6.6 forrsszvegben ellltott SQL parancs a kvetkezkpp ll ssze:
Az query els rsze tartalmazza magt az SQL utastst, vagyis lerja
76
-
a mveletet, amit el kell vgezni. Ez a beszrs. Tartalmazza tovbb
a tbla nevt, amibe be kell szrni a rekordot.
A kvetkez rsz a values kulcssz eltt, zrjelek kztt megadja
azokat a mezket, amelyekbe az adatok bekerlnek. A felsorolsra
azrt van szksg, mert az id mez, vagyis a tbla elsdleges kulcsa
automatikusan kap rtket. Ezt a mezt ki kell hagynunk a listbl, s
elem kihagysa csak gy lehetsges, ha a beszrs sorn rtket kap
mezket felsoroljuk, a tbbit meg kihagyjuk a felsorolsbl.
A kvetkez zrjeles lista tartalmazza a beszrand rtkeket. Ez a
rsze a query-nek elg kompliklt, mivel tele van aposztrfokkal, idz
jelekkel, vesszkkel s zrjelekkel.
Erre a sajtos, bonyolult lersra azrt van szksg, mert kt nyelvet
hasznlunk egyazon kdban, s ezt a keverket egy harmadik nyelvbe,
a HTML-be gyazzuk.
Az sql rszekhez hozz kell fznnk a PHP nyelven denilt vltozk
tartalmt, amik radsul egy munkamenet vltozban troldnak. Az
aposztrfok s az idz jelek ebben az esetben nem rtanak, inkbb
hasznosak, mivel ezltal a fordt, s rtelmez programok meg tudjk
klnbztetni egymstl a felhasznlt nyelveket.
Hogy a ('".$_POST['nev']."','. kifejezst rtelmezni tudjuk, nzzk
meg egy statikus lekrdezs esetn hogyan nzne ki a beszrand elemek
listja.
i n s e r t i n to u s e r s (name , p i c ture , cv ) va lue s
( ' Szemly Neve ' , ' kepe01 ' , ' n l e t ra j z . . . ' )
6.7. program. Statikus sql utasts
Lthatjuk, hogy a beszrni kvnt adatokat az sql stringknt rtelmezi,
ha '' jelek kz rjuk azokat. Az egyes elemeket vesszvel kell elvlasztani
77
-
egymstl. A dinamikus lekrdezsben is ezrt van szksg az aposztrfokra
s a vesszkre ','" . $_POST['nev'] . "','.
A "" idzjelek a PHP programokban a karakterlncokat kezdik s zrjk
le. Az sql nyelv darabok elejn s vgn is ezt a szerepet tltik be.
6.13. megjegyzs. Vegyk szre, hogy a query-k egyszer szvegek, amelyek
csak sszeillesztve s az adatbzis kezelnek elkldve nyernek rtelmet. Csak
akkor vlnak valdi utastss, ha az adatbzis kezel rtelmezi ket. . .
A "" jelekkel elvlasztott rszek kztt a pontok (.) a PHP nyelvben
szveges adatok sszefzst jelentik. Az sql parancsban a szerepk az, hogy
a PHP vltozinak a tartalmt hozzfzzk az SQL parancs darabjaihoz.
Termszetesen az SQL utasts sszelltst mskpp is meg tudtuk
volna oldani.
Lehetne a query egyszerstsn is gondolkodni, de a hasznlt megolds
brmilyen szerver krnyezetben jl mkdik, s ha megszokjuk a benne
szerepl jelek hasznlatt, tlthatv vlik a szmunkra.
A forrsszveg utols nhny sora azrt felel