király roland, dinamikus webprogramozás jegyzet v0.7

139

Upload: dinhtu

Post on 02-Feb-2017

235 views

Category:

Documents


1 download

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