Agytornáztató tanfolyam

A gy hullám:

Fedezd fel a dinamikus, adatbázis-vezérelt webhelyek mögött rejlő titkokat!

Töltsd be a kulcsfontosságú nyelvtani szabályokat köz­ vetlenül az agyadba!

Kerüld el a kínos hibákat a webes űrlapokon!

L

Kapcsold össze a PHP és MySQL ___ L___kódot!

Erősítsd meg parancsfájl­ készítési tudásodat gya­ korlatok tucatjaival!

O R E IL L Y

Lynn Beighley, Michael Morrison

Az Agyhullám: PHP & MySQL-ről írták
„A PHP és a MySQL napjaink legnépszerűbb webfejlesztési technológiái közé tartoznak - ebből a könyv­ ből kiderül, hogy miért. Az, hogy nélkülük építsünk fel egy w ebhelyet, ma már ugyanannyira elképzelhe­ tetlen, mint a w ebtervezés a CSS nélkül. Ez a kötet nagyszerű bevezetést nyújt a tém ába, és hihetetlenül szórakoztató. Bárcsak én is ebből a könyvből tanultam volna!” - Harvey Quamen, a z angol nyelv és a hum á n inform atika adjunktusa, University ofAlberta „Ez a könyv elvet mindent, ami szárazzá és unalmassá teszi a műszaki oktatást, és szokatlanul szórakoztató módját nyújtja a tanulásnak. Teljes bizonyossággal állíthatom, hogy az Agyhullám sorozat kötetei forradal­ masítani fogják a szakkönyvkiadást, és a bennük követett m ódszerek válnak majd az új szabvánnyá. Lefo­ gadom, hogy ha ezt a könyvet egyszer végigolvasná, a m inden műszaki dologtól irtózó nagymamám is meg tudná tanulni a PHP és a MySQL használatát - és még élvezné is!” - Will Harris, adatbázis-rendszergazda, Powered by Geek „Ezt a könyvet olyan olvasni, mintha egy igazán „jó fej” tanártól tanulnánk. Az em ber alig várja az órákat!” - Stephanie Liese, webfejlesztő „A képeknek és a hum ornak köszönhetően könnyen emészthető, ugyanakkor valódi műszaki tudást nyújtó kötet.” - Jereme Allén, webfejlesztő „Miután egy ültő helyem ben végigolvastam a könyvet, és végigcsináltam az olyan bizarr feladatokat, mint „a kutyámat elrabolták az idegenek” vagy az „össze nem illő párok párkereső ügynöksége”, alig várom, hogy a PHP erejével ruházzam fel a w ebhelyeim et.” - Dávid Briggs, szoftvermérnök, szakkönyinm

Agyhullám: PHP & MySQL ?
Nem lenne m eseszáp, ha lenne egy könyv a P H P -ró1 ¿5 a M yS Q L-ro), amib<51 úgy tű n n e , m in th a az a d a tb á z is o k a t és a k iszo lg á ló o ld a ll w e b p ro g ra m o z á s t az ég is e g ym á sn a k te r e m te tte volna? Ez persze c s a k á lo m ...

Lynn Beighley Michael Morrison

K IS K

O’REILLY

<> S

B e ijin g • B u d a p e s t • C a m b rid g e • K ö ln • S e b a s to p o l • T a ip e i • 7ö/ryo

A kiadvány a következő angol eredeti alapján készült:
Head First PHP & MySQL
C opyright © 2009 by O'Reilly M edia, Inc. All rights reserved! © K iskapu Kft. 2009 A uthorized translation of th e English edition o f HEAD FIRST PHP & MYSQL ISBN 9^80596006303 © 2009 O'Reilly M edia, Inc. This translation is p u b lish e d an d sold by p erm issio n o f O'Reilly M edia, Inc., th e o w n e r o f all rights to p u b lish a n d sell th e sam e. N o p art o f this b o o k , in clu d in g interio r d esig n , co v e r design, a n d icons, m ay b e re p ro d u c e d o r transm itted in an y form , by an y m ea n s (electro n ic, p h o to co p y in g , recording, o r o th erw ise ) w ith o u t th e p rio r w ritten p erm issio n o f th e publisher. T rad em ark ed n am e s a p p e a r th ro u g h o u t this b o o k . R ather th a n list th e n am e s a n d entities th a t o w n th e trad em ark s o r insert a trad e m a rk sym bol w ith ea ch m en tio n o f th e tra d e m a rk e d nam e, th e p u b lish e r states that it is using the n a m e s for editorial p u rp o se s only a n d to th e b en efit o f th e trad em ark ow ner, w ith n o intention o f infringing u p o n th at tradem ark.

Series Creators: K athy Sierra, Bert Bates Series Editor: Brett D. M cLaughlin Editor: S anders K leinfeld Design Editor: Louise Barr Cover Designers: Louise Barr, Steve F ehler Production Editor: Brittany Smith Proofreader: C olleen G orm an Indexer: Julie H aw ks Page Viewers: Ju lien a n d D rew Printing History: D ecem b er 2008: First Edition.

hum

Wi*\” í I T
Drew ebben a pillanatban új konyhát s z e re l fel Lynn felújított régi házában.

segítsen a könyv m e la b a n .

Fordítás és m agyar változat © 2009 K iskapu Kft. M inden jog fenntartva! A szerző k és a k iad ó a leh ető leg n ag y o b b k örültekintéssel járt el e kiadvány elkészítésekor. Sem a szerző, se m a k iad ó n em vállal sem m in em ű felelősséget vagy garanciát a könyv tartalm ával, teljességével kapcsolatban. Sem a szerző, sem a k iad ó nem v o n h a tó felelősségre bárm ilyen b aleset vagy k áresem én y miatt, m ely közvetve vagy közvetlenül k a p c so ­ latba h o z h a tó e kiadvánnyal.

Lektor: Rézműves László Fordítás: G ilicze Bálint, R ézm űves László, Varga P éter Műszaki szerkesztő: C sutak H offm ann L evente
Felelős k iad ó a K iskapu Kft. ü g y v ezető igazgatója © 2009 K iskapu Kft. 1134 B udapest, C sángó u. 8.; Fax: (+36-1) 303-1619; h ttp ://w w w .k isk a p u k ia d o .h u /; e-m ail: kiado@ kiskapu.hu

ISBN: 978 963 9637 63 4
Készült a d eb recen i Kinizsi N yom dában Felelős vezető: B ördős Ján o s

Szüleimnek, akik gyakran használnak webes alkalmazásokat, és akikre m indig számíthatok. - Lynn Beighley

Rasmus Lerdorfnak, akinek a fejéből kipattant a nyelv, amelyet ma PHP-ként ismerünk, m aradandó bizonyítékaként annak, hogy tényleg elég egyetlen ember, aki új, felvilágosultabb útra vezet bennünket. - Michael Morrison

a szerzők

Az Agyhullám: PHP & MySQL szerzői

Mfetoel M c^so r,

Lynn Beighley egy szakkönyvíró testébe zárt szépíró, de amikor felfedezte, hogy a szakkönyvek írásával valódi pénzt lehet keresni, elfogadta és m egkedvelte a műszaki könyveket is. Miután visszatért az iskolá­ ba, hogy megszerezze számítástechnikai diplomáját, az NRL és LANL betűszavaknál dolgozott. Aztán felfe­ dezte a Flash-t, és megírta az első sikerkönyvét. Katasztrofális időzítéssel éppen az előtt költözött a Szilícium-völgybe, hogy az internetes lufi kipuk­ kadt. Néhány évig a Yahoo!-nak dolgozott, könyve­ ket ín és tanfolyamokat vezetett, de végül nem tud­ ván megtagadni szépírói vénáját New Yorkba költö­ zött, hogy kreatív írói diplom át szerezzen. Az Agy­ hullám (H ead First) sorozat stílusában megírt szakdolgozatát egy tanárokkal és diáktársakkal zsúfolt te­ rem ben védte meg. A mű nagyon jó fogadtatásban részesült, Lynn m egkapta a diplomáját, megírta a Head First SQL-1, és már itt is az újabb műve, az Agyhullám: PHP & MySQL.
Lynn imád utazni és írni, és bonyolult háttértörténe­ teket kanyarítani teljesen ismeretlen em berek köré. Az ufóktól viszont fél egy kicsit.

Michael Morrison azóta lelkes résztvevője a hálózat vi­ lágának, hogy elektronikus faliújságot m űködtetett a Com m odore 64-esén, akkor, am ikor kockafejnek lenni még m essze nem volt olyan divatos dolog, mint m anapság. Ma, néhány ezer bauddal később, Michael még mindig ámul azon, hogy milyen gyor­ san milyen messzire jutottunk. Ma már nem m űköd­ tet elektronikus faliújságot, de a m odern megfelelői­ vel és az építésükhöz szükséges eszközökkel ma is sok időt tölt. „Hivatalos m unkaidejének'’ nagy részét a w ebes technológiákról szóló m űvek írása teszi ki: több mint ötven könyvnek volt szerzője vagy társ­ szerzője, am elyek témája a mobiljátékok program o­ zásától az XML-ig terjed. Az Agyhullám sorozatba a Head First JavaSc?ipt-te\ kapcsolódott be, és azóta sem nézett vissza.
Michael egyben a Stalefish Labs (www. s t a l e f i s h l a b s . com) nevű, játékokra és interaktív médiára szakosodott szórakoztatóipari cég alapítója, emellett pedig köztudott róla, hogy néha a hálózaton kívül is tölt némi időt (ugye elállt a lélegzetünk?): gördeszkázik, jéghokizik, vagy a japán pontyokat nézi a kis ha­ lastava partjáról a feleségével, M asheeddel. Egyszer­ egyszer még aludni is szokott!

Tartalomjegyzék (áttekintés)
Hogyan használd ezt a könyvet 1. 2. 3. 4. 5. 6. 7. 8. 9. Keltsd életre a statikus oldalakat! Kapcsolódás a MySQL-hez Adatbázis létrehozása és feltöltése Valószerű, gyakorlati alkalmazások Fájlokban tárolt adatok kezelése Az alkalmazás biztonságossá tétele Személyre szabott w ebalkalm azások építése Urald az adataidat, és uralni fogod a világot! Karakterláncok kezelése és egyéni függvények xxvii 1 59 103 159 223 295 345 417 427 501 561 605 657 713 731 749 755

lm . A többször szereplő kódok kiküszöbölése

10. Szabályos kifejezések 11. Az adatok m egjelenítése... és még annál is több! 12. Tartalomsugárzás és webszolgálta tások i. ii. M aradékok Fejlesztői környezet kialakítása Tá rgymutató

iii. A php bővítése

Tartalomjegyzék (a részletes)
Hogyan használjuk ezt a könyvet?
Kinek szól ez a k ö n y v ? ................................................................. xxviii Tudjuk, mire gondolsz? ................................................................. xxix Metakogníció: gondolkodás a g o n d o lk o d ásró l..........................xxxi Ezt teheted TE, hogy engedelm ességre bírd az a g y a d :......... xxxiii F o n to s !..............................................................................................xxxiv A szakmai lektorok csapata ........................................................ xxxvi K öszönetnyilvánítás...................................................................... xxxvii

a tartalom jegyzék

Keltsd életre a statikus oldalakat!
Nagyszerű weboldalakat készítesz a HTML és egy csipet CSS segítségével, de rájöttél. hogy a látogatóid az oldalak passzív nézegetésére vannak kárhoztatva. A kom ­ munikáció egyirányú, és ezen változtatni szeretnél. Először is tudni szeretnéd, hogy mire gondol a közönséged. Ehhez azonban lehetővé kell tenned, hogy a fel­ használók információkat adjanak meg egy w ebes űrlapon keresztül, hozzá kell jut­ nod ezekhez az információkhoz, majd fel kell tudnod dolgozni azokat. Nos, úgy tűnik, hogy a HTML-nél többre lesz szükséged ahhoz, hogy a w ebhelyedet m agasabb szintre emeld. A HTML statikus és u n a lm a s ............................................................... 2 A PHP életre kelti a w e b o ld a la k a t......................................................3 Kutyák az űrben .................................................................................... 4 O w en űrlappal nyom oz ...................................................................... 5 Az űrlapok HTML-ből á lln a k ............................................................... 6 A HTML-űrlappal gondok v a n n a k ......................................................8 A HTML az ÜGYFÉLEN m űködik ................................................... 10 A PHP a KISZOLGÁLÓN m űködik ................................................. 11 A PHP-parancsfájlok a kiszolgálón f u tn a k ..................................... 12 Az űrlapadatok elérése a PHP se g ítsé g é v e l................................... 16 A PHP-parancsfájloknak a kiszolgálón kell lakniuk! ...................18 Töltsd fel a PHP-parancsfájlokat a kiszolgálóra! ..........................19 A kiszolgáló HTML-lé alakítja a P H P -t............................................ 22 O w en PHP-parancsfájlja részekre bontva ..................................... 24 Néhány PHP-szabály a k ó d o lá s h o z ................................................. 25 Megtalálni a tökéletes v á lto zó n ev e t................................................. 26 A változók a parancsfájlok adatainak tárolására szolgálnak . . . . 31 A S_POST egy különleges változó, ami űrlapadatokat tárol . . . 33 A S_POST szállítja az űrlapadatokat a parancsfájlodnak ............34 Az e-mail üzenettörzsének létrehozása a PHP segítségével . . . . 44 Még a sima szöveg is form ázható...egy k i c s i t .............................. 46 Az újsor karaktereket kettős idézőjelek közé kell z á r n i..............47 O w en levelének összeállítása .......................................................... 48 Az e-mail részeit változók tá ro ljá k ................................................... 49 E-mail küldése a PHP segítségével ................................................. 50 O w enhez dőlni kezdenek a levelek ...............................................53 O w en elveszít néhány l e v e l e t .......................................................... 54

Tartalomjegyzék

Tartalom jegyzék

Kapcsolódás a MySQL-hez
Nem árt, ha tudod, hogyan állnak össze a dolgok, mielőtt építkezni kezdesz. Elkészítetted az első PHP-parancsfájlodat, és a program jól is működik. Az űrlapadatok elkül­ dése levélben azonban már nem elég jó megoldás. Az űrlap adatait mentened kell valahogy, hogy megőrizhesd, amíg szükséged nem lesz rájuk, és ha eljön az idő, kinyerhesd ő két. Az adataid biztonságos tárolásában egy iMySQL-adatbázis segít­ het - ahhoz azonban, hogy ez működjön, a PHP-parancsfájlt hozzá kell kapcsol­ ni a MySQL-adatbázishoz.

O w en PHP-űrlapja jól működik. Túl jól........................................... 60 A MySQL kiválóan alkalmas adatok tárolására ............................ 61 O w ennek egy MySQL-adatbázisra van s z ü k s é g e ..........................62 MySQL-adatbázis és -tábla létrehozása .......................................... 64 Az INSERT utasítás m űködés közben ............................................ 67 Tábla adatainak kiolvasása a SELECT u ta s ítá s s a l..........................70 Hagyd a PHP-re az unalm as S Q L -t!................................................. 73 A PHP révén az adatok vezérlik O wen w ebes ű r la p já t.............. 74 Kapcsolódás az adatbázishoz a PHP se g ítsé g é v e l....................... 76 Adatok beszúrása PHP-parancsfájl segítségével ..........................77 Társalgás az adatbázissal P H P-függvényekkel.............................. 78 Csatlakozás a mysqli_connect() seg ítség év el.................................80 Az INSERT lekérdezés felépítése a P H P -b e n .................................85 A MySQL-adatbázis lekérdezése ......................................................86 A kapcsolat bezárása a mysqli_closeO függvénnyel ...................87 Az űrlapadatokat a SJPOST adja m e g ............................................ 91 O w ennek segítségre van szüksége az adatok átvizsgálásához . 96
Kla&ez ez az új bejelenti űrlap, de most meg tdl &ok levelet kapok. Nem tudok annyi koffeint elfogyasztani, hogy mindet el tudjam olvasni, amint megérkeznek.

O wen jó úton jár, hogy megtalálja A g y a r t..................................... 98

■/ i

m ost rtt vagy

xi

Adatbázis létrehozása és feltöltése
A szükséges adatok nem mindig állnak rendelkezésre. Néha létre kell hoznod az adatokat, mielőtt használhatnád őket. Az adatok táro­ lásához pedig néha táblákat kell létrehoznod. Az is előfordulhat, hogy létre kell hozjiod a z adatbázist , amely majd azokat az adatokat tárolja, am elyeket létre kell hoznod, mielőtt használhatnád őket. Elvesztetted a fonalat? Majd megtalá­ lod. Készülj fel: most meg fogod tanulni, hogy miként hozhatod létre a saját adatbázisaidat és tábláidat. És ha ez még nem lenne elég, közben felépíted a legelső PHP/MySQL-alkalmazásodat. Az Elvis-bolt m e g n y ito tt!........................................................ 104 Elmernek egy alkalmazásra van s z ü k s é g e ..........................105 Rajzold le Elmer alkalmazásának sze rk e z e té t!...................106 Minden egy táblával kezdődik ............................................ 109 Lépj kapcsolatba a MySQL-kiszolgálóval! ..........................110 Hozd létre az Elmer e-mail címeit tároló adatbázist! . . . . 111 Hozz létre egy táblát az adatbázison b e lü l! ....................... 112 Meg kell határoznod az adatokat ........................................113 Ismerkedj meg a MySQL néhány adattípusával! Kösd a táblát az adatbázishoz! .............. 114 Hozd létre a táblát egy lek é rd e zéssel!.................................117 ............................................ 119 Vedd használatba az adatbázist, m ielőtt...használnád . . . 120 A DESCR1BE felfedi a táblák sz e rk e z e té t............................ 123 Elmer készen áll az adatok tá r o lá s á r a .................................125 Hozd létre az Add Email parancsfájlt! .................................126
Ez túl tok* lg i s r t. Jobbnn szeretném EMe utánzásával töKcn\ az időmet, mint a levelek tMjit kezű , __

Elmer alkalmazásának másik fele ........................................133 A Send Email parancsfájlt összetartó csavarok ................ 134 Először fogjuk az adatokat...................................................... 135 A mysqli_fetch_arrayO kiolvassa a lekérdezés eredményét 136 Ismételd, am íg............................................................................ 139 Adatok bejárása a w hile segítségével .................................140 Az em ber néha szabadságra vágyik ................................... 146 Törlés a DELETE se g ítsé g é v e l...............................................147

k Uz Cevi QöQtéée

B19 sál* thi* hm* «t
C c o jin e * a o r * «

s i a r f w r c . » 20% o t t

atx2 aon't fc*xq*c tb* iA»y
fre* *' ía ia u r c c c ly

9 **
tfc r«-* 6 * ys

W t*

Meghatározott adatok törlése a DELETE és a WHERE záradék seg ítség é v el....................................... 148 Csökkentsd a minimumra a véletlen törlés kockázatát! . . 149 A MakeMeElvis.com egy webalkalm azás ..........................154

xii

Tartalom jegyzék

Tartalom jegyzék

Valószeru, gyakorlati alkalmazások
Néha szembe kell nézned a valósággal, és újra kell gondolnod a terveidet. Vagy már az elején gondosabban kell tervezned. Amint az alkalmazásod kikerül a Webre, rájössz majd, hogy nem tervezted m eg elég körültekintően. Amiről azt hitted, hogy m űködni fog, a való világban nem elég jó. Ebben a fejezetben olyan valós problémákkal foglalkozunk, am elyekbe beleütközhetsz, amikor az alkalm azásodat a tesztgépedről éles környezetbe viszed át, közben pedig újabb fontos PHP- és SQL-kódokat mutatunk.

Elmer egyes vásárlói e lé g e d e tle n e k ...............................................160 Védd meg Elmert...Elmertől .......................................................... 163 ftOO M a^M eEtVís.coi
E r » r y o u r f c * " a r * . ■••» ^ 10 “ °

Követelj meg helyes ű rlap ad ato k at!...............................................164 A levélküldő űrlap ellenőrzése mögötti logika ..........................165 Döntéshozatal a kódban az IF se g ítsé g é v e l.................................166 Az igazságot k e r e s v e .........................................................................167 Az IF nem csak az egyenlőséget tudja vizsgálni ....................... 168

r* Matt V*

rm*l« Q f>

Fr.*i

A levélküldés ellenőrzése mögötti logika ................................... 171 PHP-függvények változók e lle n ő rz é s é re ..................................... 172 Több feltétel vizsgálata az AND és az OR segítségével ............179 Az űrlap felhasználójának visszajelzésre van s z ü k s é g e ............183 Akkor kapd elő a PHP-t, ha szükséges ........................................193
Mák« M« Sbü - Send txr-.ái:

Ma^MeELvrs.coM
Pr*vat*; Fór Fihi*- s
acC

Használj jelzőt a többször szereplő kódok e lk e rü lé sé re !......... 194 A HTML-űrlap kódját csak egyszer add m e g !.............................. 195 Egy űrlap, amely önm agára h iv a tk o z ik ........................................199 Irányítsd az űrlapm űveletet a parancsfájlra!.................................200 Ellenőrizd, hogy az űrlap be lett-e n y ú jtv a !.................................202 Még most is vannak m orgolódó fe lh a s z n á ló k ............................ 206 A táblák sorainak egyedileg azonosíthatónak kell lenniük . . . 208 Az elsődleges kulcsok kikényszerítik az egyediséget .............. 210 A jelölőnégyzetektől a v ásárlóazonosítókig.................................215 Tömb bejárása a foreach s e g ítsé g é v e l.......................................... 216 Uw »t

ONLY
u*

ár ar!^ c

E x o md KJyfe a B -í 2C óff! %

....

~

WCeíl r*he^

* < » - C ftvw tfcy» Vty uT n>y

“ '*»*■9 » ? ' <* «

MakÉMÉtLVfé.ecw
a rrf

Dn yBb <tD e n uD* n
O h-m* Vtortitz

) rcm ve . o a
cen

• Elt^r Ktpi,#« .0 *1 □ Don O rapéfdrso«rC*^rtirg<ooper ar.

<= 5

most itt vagy ► xiii

a tartalom jegyzék

Fájlokban tárolt adatok kezelése

5
í.uliar War» - High Scores Administration
KÉtom> %«rpma >4

Ne dőlj be a felhajtásnak...mármint ami az adatbázisokat illeti. Tény, hogy kitűnően alkalmasak mindenféle szöveges adat tárolására, de mi a hely­ zet a bináris adatokkal' Tudod, az olyanokkal, mint a JPEG-képek és a PDF-dokumentumok? Tényleg van értelme az értékes gitárpengető-gyűjteményedről készült képe­ ket egy adatbázis-táblában tárolni? Nos, általában nincs. Az ilyesfajta adatokat jel­ lemzően fájlok tárolják, és ott is fogjuk hagyni őket. Mindazonáltal van rá mód, hogy a virtuális kecske is jóllakjon, és a virtuális káposzta is megmaradjon - ebben a fejezetben megmutatjuk, hogy a fájlokat és adatbázisokat együtt használva olyan PHPalkalmazásokat építhetsz, amelyek bináris adatokkal vannak tele. A virtuális gitárosok szeretnek v e rse n y e z n i.................................224 A kép a bizonyíték ...........................................................................225 Az alkalmazásnak tárolnia kell a képeket ................................... 226 A képfájlok feltöltésének megtervezése a Guitar Wars alk alm azásb an ...........................................................231 A rekordadatbázist módosítani kell az ALTÉR paranccsal . . . . 232 Hogyan szerezzünk képeket a felhasználóktól?..........................236 A kép fájlnevének beszúrása az a d a tb á z is b a .............................. 238 A feltöltött fájl nevének k id e ríté s e ................................................. 239 Hová tűnt a feltöltött fájl?..................................................................244 Építs házat a feltöltött képfájloknak! ............................................ 248 A közösen használt adatokat megosztva kell h a s z n á ln i............254

t M r V« I i .l

M lilknj

^1)11»4V ct »^ 1 ¿ ltíDx
¿ OtUJ411**0 ftatpr; 4

1 / -----1 r**

*«*r? Urta

Guitar W a n • kcmot e a liifch Score A» > j » « ** •& Ate* de Mi*««! ® >? **> S«»*». »Aw Srpm IW 3**44.^
V w V A I2 T

*

Megosztott adatok igénylése a require p a ra n c c sa l..................... 255 Gondolj úgy a require_once-ra, mint egy „beszúrásra” ............256 A rekordoknál a sorrend a lé n y e g ................................................. 258 A legjobb gitárhős elismerése ........................................................ 261 A legmagasabb pontszám formázása HTML és CSS segítségével . 262 Csak a kis képek en g ed ély ezettek ................................................. 267 Tervezz felügyeleti oldalt! ............................................................... 272
11»c w
smihí: K líi: C». we T

* Yo O ># GujUr Wars - Remove u Hlfth Jkort

• a> O

¿»i* "t

Guitar W an - Hi^h Scotch
•w r-c . W utvx. «Wm i h a *

Top Score: 389740
3**740 '»•me: J ^ v b ^ ’r K y w D * r. .M •>

A rekordeltávolító hivatkozások létrehozása a felügyeleti oldalon ........................................................................ 275 A parancsfájlok képesek társalogni egymással ..........................276 GET-ek és P O S T -ok...........................................................................278 A GET, a POST és a rekordok e ltá v o lítá sa ................................... 280 A törlendő rekord e lk ü lö n íté s e ......................................................283 A törlés szabályozása a LIMIT z á ra d é k k a l................................... 284

G ui ta r

^

S c o re

í

.N lH * 3 (J A i IM .*a4xK24 * lJJ.I*

Hant:

nini

xiv

Tartalomjegyzék

Tartalom jegyzék

Az alkalmazás biztonságossá tétele

6
Guitar Wars - High Scores Administration
Jacoh Scorctocnon 2008-05-01 20:36:45 389740 Remove Hefcu Che*}' 2008-05-01 20:36:07 282470 Remove Jean Paul Jooes 20WM)5-01 20:3«;23 243260 Remove Phi/ Ia ir* o n P»c« Jas lurius Nevű Johansson Kenny I.avltz 20CS-05-01 20:37:40 1865«) & m * fia 2008-05 01 20:37:23 1276J0 &£roov£ 2008-0501 20:37:02 98430 Remove 200*^ * To v>ew this p*ge. Y&- »*«<*10 lc 3 in 10 ■Guitar or «ov' c - t t

A szüleid igazat mondtak: ne állj szóba idegenekkel! Vagy legalábbis ne bízz bennük. Ha pedig m inden kötél szakad, akkor se adj nekik kulcsot a z alkalm azásaid adataihoz , abban bízva, hogy nem élnek vissza vele. A világ kegyetlen, és nem bízhatsz abban, hogy m indenki becsületes. Webalkalmazás-fejlesztőként valójában részben cinikusnak kell lenned, részben olyasvalakinek, aki hisz az összeesküvés-elm életekben. Igen, az em berek több­ sége rossz, és valóban rád feni a fogát! Na jó, lehet, hogy egy kicsit túloztunk, de nagyon fontos, hogy komolyan vedd a biztonságot, és az alkalmazásaidat úgy ter­ vezd meg, hogy védve legyenek bárkivel szem ben, aki ártani akar nekik. A nap, amikor m eghalt a z e n e ........................................................ 296 Hová tűntek a re k o rd o k ? ................................................................. 297 Kerítés a vad hordák e ll e n ............................................................... 299 A Guitar Wars felügyeleti oldalának védelm e ............................ 300 A HTTP-hitelesítés fejléceket ig é n y e l............................................ 302 A fejlécek vezérlése a PHP segítségével ..................................... 305 Hitelesítés fejlécekkel ...................................................................... 306 A hitelesítő parancsfájl létrehozása ...............................................314 Guitar Wars - II. rész: A kiónok tá m a d á s a ................................... 318 Kivonás hozzáadással ...................................................................... 319 A biztonság em bert k ö v e te l.............................................................320 Az em beri felügyelet megtervezése a Guitar Wars alk alm azásb an .......................................................... 321 Csinálj helyet a jóváhagyásnak az ALTÉR se g ítsé g é v e l!............322 A jóvá nem hagyott rekordok nem s z á m íta n a k ..........................327

Bclo* it a lta o f all Guiar Wars high scores. Use thii page to ren»vc sc<xc> a* needed

H*rr*
Password

, -------------------- (

n Remember thii password hi my k*r<Mr>

£C e* f-'tog } an
fcjjtam aztán nem k e re tzt# j ham\6 dokumen­ tum ok... öö. rekordok. Alspoe vagyok, é s ritkán hibizom.

A millió pontos c s a l á s ...................................................................... 330 A m oderálás m indent megold? ......................................................331 Pontosan hogyan csinálta?............................................................... 333 A MySQL átverése megjegyzésekkel ............................................ 334 Az Add Score űrlap SQL-befecskendezés áldozata lett ............335 Az adatok védelm e az SQL-befecskendezéssel s z e m b e n ......... 336 Egy biztonságosabb INSERT (p a ra m é te re k k e l)..........................337 Az űrlapellenőrzés soha nem lehet elég in te llig e n s...................339 Tüzel szüntess! ..................................................................................341

most itt vagy >

xv

a tartalom jegyzék

Személyre szabott webalkalmazások építése
Senki sem szereti, ha elfelejtik - a webalkalmazások felhasználói különösen nem. Ha egy alkalmazás ismeri a „tagság” fogalmát, tehát a felhasználók személyre sza­ bottan használhatják az alkalmazást, akkor az alkalmazásnak emlékeznie kell a fel­ használókra. Szörnyű lenne, ha minden alkalommal be kellene mutatkoznunk a családunknak, amikor hazaérkezve belépünk az ajtón. Erre azért nincs szükség, mert az em bereket egy csodálatos dolog segíti: a memóriájuk. A webalkalmazások azonban nem emlékeznek automatikusan az emberre - egy ügyes webfejlesztőnek kell a rendelkezésére álló eszközökkel olyan személyre szabható wrebalkalmazást készítenie, amely képes megjegyezni a felhasználóit. Azt mondják, az ellentétek vonzzák egymást ............................ 346 A Misma teli a személyes adatokra tám aszkodik ....................... 347 A Mismatch alkalmazásban bejelentkezésre van szükség . . . . 348 A felhasználói bejelentkezés m e g te rv e z é se .................................349 Az adatbázis felkészítése a b e je le n tk e z é se k re ............................ 351 A bejelentkezési felület kialakítása ..................... ......................... 353
' V _____ ---------------------------------------------------------------- ------------

A jelszavak titkosítása az SHAO se g ítség é v el.............................. 354 A jelszavak visszafejtése ................................................................. 355 A felhasználók hitelesítése a HTTP segítségével ....................... 358 A felhasználók beléptetése a HTTP-hitelesítés segítségével . . . 361 Feliratkozási űrlap az új felhasználók számára . . ..................... 365

Mismatch - W here oppositcs attrart!

To r>cw thJl p»o*. you M.iíTuitb- ^

to lop n »0 a r c

Adj esélyt a felhasználóknak a feliratkozásra! ............................ 370 Néha kell egy süti ............................................................................. 374 Mi van a sü tik b e n ? .......................................................... .................. 375 Sütögetés a PHP segítségével ................ ....................................... 376 A bejelentkezés m enetének újragondolása .................................379 Sütivezérelt b e je le n tk e z é s ............................................................... 380 Mozgás a Mismatch a lk a lm a z á sb a n ...............................................382

W SiVwcrd «m

int ,

Pln.woid.

1

|

You ere

úr u r jn en b s.

M ixm atch - E d it P r o fik
PcrvKial In/orroitior. MH'.rtfKh
You c rt U 9# ed in ü jjn e o k l, > M is m a t c h - V i c * P r o f i l t

A kijelentkezés a sütik törlését jelenti .......................................... 385 A m unkam enetek nem függnek az ü g y fé ltő l.............................. 389 A m unkam enetek élete és k o r a ......................................................390 A m unkam enet-adatok nyom on k ö v e té s e ................................... 391 A Mismatch alkalmazás felújítása m unkam enetekkel .............. 392 Kijelentkezés m unkam enetek segítségével .................................393 A m unkam enetekre való áttérés teljessé tétele ..........................398 A felhasználók úgy érzik, kívül tá g a sa b b ..................................... 404 A m unkam enetek rövid életű ek .......................................................406 ...d e a sütik örökké ta rth a tn a k !......................................................407 M unkam enetek + sütik = A legm aradandóbb bejelentkezési adatok ...................................................................... 409

Flr* oame:
Ijw x n a ia e :

K**r

m*?. Btrthdate: 5®Ti.

GcMk r z

C ky:

l Hrrnaov: Ca
First niuni: Johuc O tt»«! L« 4 nai»c: Ncaki

StM r:
P ic lu rt:

(ieader: Mák Birthdatt:
LotAÜun: A ócn *, GA

2*0
Picttirc:

xvi

Tartalomjegyzék

Tartalom jegyzék

A többször szereplő kódok kiküszöbölése
Nem csak esernyőn lehet osztozni. Bármely w ebalkalm azás esetében törvényszerűen találkozol majd olyan helyzet­ tel, ahol ugyanaz a kódrészlet több helyen is előfordul Ez pedig azon felül, hogy pocsékolás, még meg is fájdítja a programkód karbantartásával foglalatoskodó személy fejét - hiszen a kódban elkerülhetetlenül szükség lesz változtatásokra, és ezeket a változtatásokat több különböző helyen kell majd megejteni. A helyzet megoldása az, ha a kérdéses kódrészleteket megosztva egyszerűen megszünteted a kód­ részletek többszöri előfordulását. Más szóval, a többször előforduló kódrészt egyet­ len helyen hagyod meg, és erre az egyetlen másolatra hivatkozol ott, ahol szük­ séges. A kódrészletek többszöri előfordulásának kiküszöbölésével hatékonyabb, egyszerűbben karbantartható és szilárdabb alkalmazás születik. Darabokra szedjük a Mismateh alkalmazást ....................... A Mismateh alkalmazás újraépítése s a b lo n b ó l..................... A Mismateh alkalmazás újraépítése s a b lo n o k k a l................ A Mismatch-alkalmazás ismét teljes... és a felépítése most már sokkal jo b b ...........................................................................
A fejléc a Mismateh alkal­ mazás minden oldal tetején megjelenik, és az alkalma­ zás nevét, valamint az adott oldal címét jeleníti meg.

421 422 424 426

J
^^startsession.php header, php

A Mismateh alkalmazás minden, az egyes felhasználókhoz sze­ mélyre szabott oldalán olyan bejelentkezés-kezeló' programkód szükséges, amely nyomon követi a felhasználókat.

^

navmenu.php

A lábléc a Mismatch alkalma­ zás minden oldalán megjeleníti a szerzői jogi információt.

A navigációs menü közvetlenül a fejléc alá kerül, és a Mismateh alkalmazás minden oldalán egysé­ ges menüt jelenít meg, amellyel lehetséges a főbb oldalak bejárása.

Most, hogy oly sok egyéb parancsfájl segíti, az index.php feladata egyedül a felhasználók listájának megjelenítése maradt; csak erre kell figyelnie.

most itt vagy ► xvii

a tartalom jegyzék

Urald az adataidat, és uralni fogod a világot!
Semmi sem érhet fel az adatok őszi learatásával. Bőséges információk, amelyek csak arra várnak, hogy megvizsgáld, rendezd , összehasonlítsd és kom bináld őket, illetve általában véve azt csinálj velük, amire csak a király w ebalkalm azásodnak szüksége van - jól hangzik? Persze. De a va­ lódi aratáshoz hasonlóan az adatok kézben tartása egy MySQL-adatbázisban kem ény m unkát és jelentős szakértelmet igényel. A w ebes felhasználók többre vágynak régi, megfáradt, unalmas, érdektelen adatoknál. Olyan adatokat akarnak, am e­ lyek gazdagítják és elégedetté teszik őket...olyan adatokat, amelyek jelentőség­ gel bírnak. Mire vársz hát? Bőgesd fel a MySQL-traktorodat, és m unkára fel! Tökéletes ellentétek ........................................................................ 428

A félrepárosítás az adatokon m ú l i k ...............................................429
Utalom okét!
c

Adatbázis m odellezése sé m á v a l......................................................431 Több tábla összedrótozása .............................................................436 Az idegen kulcsok m űködés k ö z b e n ............................................ 437 Soronkénti illeszkedés a tá b lá k b a n ...............................................438
Szeretem

Horrorfilmek

0
Ellentétpár!

Sidney horrorfilmek iránt érzett utálata e l­ lentétpárt eredményez.

Amikor egy sorhoz több sor kapcsolódik ................................... 439 Amikor több sorhoz több sor illeszk ed ik ..................................... 440 A Mismatch-kérdőív felépítése ......................................................445 A vélem ények bevitele az adatbázisba ........................................446 Egy űrlapot adatokkal is v ez é re lh e tü n k ........................................450 A Mismatch-kérdőívet tartalmazó űrlap létrehozása ................ 456 Csináld n o rm álisan !...........................................................................462 Normalizáláskor gondolkodj atomokban! ................................... 463 Három lépés a normalizált adatbázis felé ................................... 465 A Mismateh adatbázis m ó d o s ítá s a ................................................. 469 A Mismateh adatbázis most már tényleg normalizált? .............. 470 Lekérdezésen belüli lekérdezésen belüli lekérdezés.................. 472 Kapcsoljuk össze a táblákat! .......................................................... 473 Kösd össze a pontokat ....................................................................474 A belső összekapcsolás ennél biztosan többre is képes ......... 475

\
Horrorfilmek

őket!

mismatch

u*er

id

Becenevek a táblák és oszlopok számára ................................... 477 M egmentőnk, az ö sszek ap cso lás................................................... 478 A sikeres félrepárosítás öt lé p é s e ................................................... 485
m ahM fem opí«
topic_id
nam t

u sern a m e

paw word
*join_date first n am e lo s L n a m e gender

Felkészülés az ellentétpárok keresésére ..................................... 486 A felhasználók „ellentétességének” v iz sg á la ta ............................ 487 Csak egy FÓR ciklusra van sz ü k s é g ...............................................488

birthdate city

category

picture

xviii Tartalom jegyzék

505 Karakterláncok szétdarabolása s z a v a k k á ............................................................................... ic Ha az IF nem elég ........ 502 A keresés.............. 554 557 A teljes Search parancsfájl ö ssze á llítása.. Ha ezen túlestél.........................S y e%h J j s ..e e V c i:i* e C taxW i .............S earch Fir.......lr D in g or] Your ¿ re a rc jo b à* o u f the*» Do y o u n a v e th e g u t? t o o o Hud if? Risky Jolw • Search Results jot> iid e IXscrfpfcor ^ ***: w w M ao * itw B p r v x t a i ..................... «r. ahol nem h ib á z h a tu n k ...** *vc » * lk on « u n e ......b A találatok több lekérdezéssel rendezhetők .. /V 1 Food TcMCf :o œ S n t '*> ö»4c o m t h v j o n ) n v g o o J o u r p< Now * o u « jr rx*p « à U o<.........................542 Rendezés a build_query() függvényben ..... 551 Az oldalakra bontáshoz szükséges változók meghatározása ........csak merészen! ..................Tartalom jegyzék Karakterláncok kezelése és egyéni függvények 9 « A függvényekkel újabb szintre emelheted az alkalmazásaidat... ....c 5 tfcOb............................... ........................... ........d your riskyjob: { Submit ' R is k * Ju... most pedig m egism erkedhetsz egy valóban hasznos függvénycsaláddal.......................... M um rove M - ............... 510 Karakterláncok egyesítése az im plodeO függvénnyel .............. 545 A keresés eredm énye oldalakra b o n th a t ó ... e ip e jv * ............ 552 A lekérdezés m ódosítása az oldalakra bontáshoz ......... hogyan készíts egyéni függvényeket.. Jkfuu pom M tlc bu* U ccuk 8ül* ftrço.....528 Karakterláncok elejének és végének kiolvasása .................... 550 Az oldalak adatainak nyomon követése .......... ............. M unkakeresés ................... 548 A kívánt sorok kiolvasása a LIMIT se g ítsé g é v e l.549 Oldalhivatkozások meghatározása a LIMIT se g ítsé g é v e l....... M l fc«J «AD Ívm ailre R is k ! D tn g o f! Y our joto i s eu e ch« f t O o you fcavo th e « « 1 » Io p o iln o u t R is k y J o b s ..... 0 « * <•12340... 529 R l s k f D a n g e r! Y o u r « r e a m jo b I * o u t th e re ... Mank> Tc*k « w i .. <ape v * v ................S e a r c h R e s u lts Job Tick I>C -TipK K ior ** o ....... T V C ity o f Dac*v«Ue « cifw áeocec vo* u iU b e rx A ^ most /fr vagy ► xix ...... 520 A lekérdezésben valódi keresőkifejezésekre van szükség . wskyJ9te..S e a r c h R e s u lts Job Tîüe Custard W ilkct SKiA ltu ...........................................itt a SWITCH! .. O o y o u h a v * th e g u t * to 9 0 fin d H t R isky J o b s .......... Clam R is k * T vpC W tfchU ûlltc-c I nxnei ............. 536 Lekérdezés felépítése egyéni függvénnyel ^ t t f tfccoc 1« é !l a w m I Y o u ' d / w m jo b i% o « t Oo * o * rw ve th e g u t s to g o f* \4 t% 7 R is k y J o b s ..... 519 A nem kívánatos keresőkarakterek c s e ré je ................. f c p t u * F r m i t e i t o + t t y o u fix ........... ......................525 Megeshet........................függvényekkel .................. A PHP beépített függvényeit a korábbiakban is használtad különféle célok elérésé­ re..... amelyekkel át­ lépheted a képzeleted határait .............................ter .................... m egtanulod...537 D ucnçaon We ceed people * i'•!........... 553 Az oldalnavigációs hivatkozások előállítása e* v fee*»....513 A keresőkifejezés elő feld o lg o zása.... a kódjaidat m indenképpen áttekinthetőbbé és egyes részeit újrahasznosíthatóvá teheted a segítségükkel..ha nem is segítenek a lézercápák kiképzésé­ ben.... hogy a karakterláncnak csak egy részére van s z ü k s é g .... .. 532 Újrahasznosítható kód ....... 524 A nem üres elem ek átmásolása egy új töm bbe ........... 504 ^ : ......... Rugalmasabb SQL-lekérdezések a LIKE seg ítség év el.>W joci> < L ovely h n r * * t for you* u ifc n .................

........ 569 Mintaillesztés szabályos kifejezések seg ítség év el.........591 First Name: Jimm y Last Name: Swift Email: JS@ sim -u-duck...... Persze el tudják árulni neked egy karakterlánc hosszát...... ... le tudják vágni a végét.............. m égpedig nem egyetlen feltétel. ......................... ... hanem szabályok halmaza alapján.. hogy összetettebb szövegkezelési felada­ tokat hajthass végre.................. 584 A telefonszámok e g y sé g e síté se .. 570 Mintaépítés m etakarakterek seg ítség év el.... 600 Hibaüzenetet kaptam............................ aztán beírtam a teljes telefonszámomat..com Phone: 636 4652 Desired Job: Ninja Szabadulj meg a nemkívánatos k arak terek tő l!...........a képességeik azonban ugyanakkor korlátozottak........ amelyekkel precízen m ódosíthatsz karakterláncokat.. ... hogy milyen formátumú adatokat szeretnél kapni! .. és bizonyos karaktereket más karakterekre tudnak cserélni benne......com Phone: (555) 636 4652 Desired Job: Ninja XX Tartalomjegyzék ................................................ 566 A telefonszám ok mintájának m eg h a tá ro z á sa .............a tartalom jegyzék Szabályos kifejezések A karakterlánc-kezelő függvények szeretetre méltóak ....... 592 Az e-mail címek illesztése nem feltétlenül egyszerű ....598 A tartomány ellenőrzése a PHP s e g ítsé g é v e l................ 572 A minták finomhangolása karakterosztályok segítségével .................... A R iskyjobs oldal lehetővé teszi a felhasználóknak az önéletrajzuk feltöltését .................... 579 Mintakeresés a preg_match() seg ítség év el............. .......... Ebben segíthetnek a szabályos kifejezések (regular expression)........... 599 Az e-mail cím érvényességének ellenőrzése ..... é& állást kaptam nln^izsaténtl First Name: Jimmy Last Name: Swift Email: JS@slm-u-duck..............összefoglalás ...................... Néha azon­ ban ki kell szabadulnod a ketrecükből............. 596 Tartománynév-utótagok m in d e n ü tt.... 562 Döntsd el......

.................. ...................................... . H ÍR Í1 S c o r e * A d i n i n i s í i Ez novctségce............ ...................... 639 A kategóriák megrágása ............ 630 Az ellenkezés á b rá z o lá sa ........632 Tömbből tö m b b e ....... ...... vagy ahogy akarod. ......C a Score: G u ita r W ars • Add Your H igh Score T b*nU fee «Id«.. 618 Szövegrajzolás adott betűtípussal .......... Add Y our His H a * A í tor addin* > w r e » h i ^ A ■ed adfcd to high sew « Um w _» ...... ....631 Az oszlopdiagram adatainak tá ro lá sa .... .................. . 607 Válaszd el az em bert a g é p tő l!........................... 638 Az oszlopdiagram felépítésének m e g te rv e z é s e ........... ha az adatokat más....... ......... hogy micsoda hatalma van egy jó lekérdezésnek és egy halom szaftos eredménynek........ ......................« y o « n e w h * » Urc................ I I | I I | ... ... ........ .. ... ........ ami segít a felhasználóknak.... . . mi az m m frc*neyl S A<tl Az oszlopdiagram ok a la p ja i........ oszlopdiagramon. 9W99W G d fear I ..... 614 A GD könyvtár grafikai függvényeinek belső m űködése ....... Lehetetlen ^ meQ*rumi az &t*ze* b e n y ito tt MdMtot... 640 A kategóriák összegzése ..• ílStít -WyW«S*»'AW » ® m ost itt vagy > xxi ............... Tudtad például.............................. Néha segít....... . 650 A Mismatch felhasználói csípik az oszlopdiagram okat ............... Bármi megteszi. A PHP lehetővé teszi... 636 Az ellentétes véleményt kiváltó témák töm bjének felépítése . ..... 620 Véletlenszerű CAPTCHA-kép előállítása ................ .. ...II »etc 1 W “ ps>< c* b\ Az ellenkezés öt s z in tje ..... 611 A CAPTCHA-jelszó előállítása ......folytatás .. 653 »xöM*13 '-M™1w iW N 5’ JWT* «WWW 1 ....... ......... 608 Az automatizálást automatizálással győzheted l e .... ......... 627 A CAPTCHA hozzáadása az Add Score parancsfájlhoz 2KBXÍE5Kr s s s r-... . ..«..... 613 A CAPTCHA-kép megrajzolása ...616 A GD könyvtár grafikai függvényei ... 623 Vess véget az őrületnek a Guitar Wars alkalmazásban! G u ita r W ars ............ ....................... .......... hogy dinamikusan létrehozott képekkel megakadályoz­ hatod az űrlapkitöltő reklámrobotok működését? Guitar Wars újratöltve: A gépek lá z a d á sa ..ZÍV. .................... A PHP-alkalmazásoknak azonban nem m inden lényeges grafikája ered a te adatbázisodból.......Tartalom jegyzék Az adatok megjelenítése...... ................. . .......................... ..... ...... ......... ...... .. 606 Egyetlen beviteli űrlap sincs biztonságban ... ..... ............. Azt Mm tudom........... Rorschach-ábrán........ ................... hogy jobban m egértsék az alkalm azáson átfolyó adatok jelen­ tését.......... „láthatóbb” fényben nézed. ..... ................. 625 ............. Mindnyájan tudjuk. ....................M-» {laiW V jortii.... .....Add Y our H igh Score G u itar W a r s ....... ..... XM&...... ... .. ..... I* 1:4*12 1 A**-' 2a»a*/ j» ................. 647 Külön oszlopdiagram ot m indenkinek!. hogy egy adatbázis adatait képi ábrázolással jelenítsd meg: tortadiagramon..... 644 Az oszlopdiagram megrajzolása és megjelenítése .....^* srf a d d1 *e de 0 Smut: wwwAö» ncycc«nlr<im Sc^r.. ....... A lekérdezések eredm énye ugyanakkor nem mindig beszél önmagáért........ és még anna'l is több! ............. 641 *MK W W étM O W ftM PI. .................. Venn-diagramon................. .. aminek a naqy rfcze ráiuiíeul j ezemét.. ............

.................. Az egyik legkitűnőbb módja annak................ ha az adataidat sugárzásra alkalmassá teszed................... 702 A videóadatok formázása a m eg jelen ítésh ez......................694 Az XML-videóadatok képi ábrázolása .......... Btff«» f W kokNj/cn................................................... és mások adatait felhasználva gazdagabb élm ényt nyújthat a felhasználóknak........a tartalom jegyzék Tartalomsugárzás és webszolgáltatások A világ óriási........... így nem kell mindig meglátogatniuk a w ebhelyet......................hAű lár 2*** v » 12 » JMMMJ:** % «*« ^ A** *ai^ta *«*«** 1*I4M4 rv\M uc«M f»r \h k 4 M o trtta a : Webes tartalom lehívása m á so k tó l.... 661 Az adatbázistól a h íro lv a só ig .............699 Egyre többen látják Agyart ....686 A YouTube az XML nyelvén b e s z é l ....... 678 *11.................................701 A videók elrendezése a m eg jelen ítésh ez........ 682 O w en készen áll.................... 680 YouTube-videók s u g á r z á s a ............... 658 Az idegenekkel kapcsolatos adatok eljuttatása az emberekhez .. ha a világ hagyná figyelmen kívül a te webalkalmazásaidat................. Az alkalmazás emellett w ebszolgáltatásokon keresztül más alkalmazásokkal is kapcsolatot tarthat....... O wen mindenkivel tudatni szeretné....... hogy a felhasználók előfizethetnek a w ebhelyed tartalmára............................................. 672 Hivatkozás az RSS-hírfolyamra ..................................................................... hogy mi történt Agyarral .............. 698 Névtér nélkül s o h a ! ............................................................... ha új informá­ ciókat szeretnének................. 697 Az XML-adatok kinyerése objektum ok segítségével ........................ ............................................. 695 XML-adatok elérése objektum ok se g ítsé g é v e l.. ................. hogy a világot a webalkalmazásaidra hangold......... 660 Az RSS valójában X M L................ Ami pedig talán m ég ennél is fontosabb: nyilván nem szeretnéd.................................................. hogy felépítsen egy REST-kérelm et...................... és ezt a te webalkalmazásaid sem hagyhatják figyelmen kívül.......669 WútmtfM M M fc RSS-hírfolyam dinamikus előállítása .............. 703 < «m it TV/ »*«4 :*co ^ ......... ? l * W ) > : K K * Mi.......676 Egy kép ezer szóval f e lé r ... 666 Az XML felépítésének képi ábrázolása -fincL Alítns Abducted Mt ................................................................................ 696 Az XML-elemektől a P H P -o b jek tu m o k ig..« xtoa xxii Tartalom jegyzék ...................690 A YouTube XML-válaszának megfejtése ................................ 659 Webes tartalom sugárzása az RSS seg ítség év el................................................ ami azt jelenti....681 YouTube-videókérelem kiadása .....................................

. 721 #6.... 725 *8........... 730 m o s t itt va g y ► xxiii ............. akkor már csak pár további függelék van...... még akkor is................. ám de tanulságos ínyencségeket.................718 #4.... fussuk át a PHP-ről és a MySQL-ről szó­ ló alábbi rövid.. 714 #2..... Óvd meg az alkalmazásodat az idegen parancsfájloktól! .................... Különbségek a PHP 5 és a PHP 6 k ö z ö tt.............. Műveleti sorrend ......... Hibák jelzése a M ySQ L -ben.. Felhasználói jogosultságok a MySQL-ben .......... .......................... akkor jöhet a desszert.............. még mielőtt letennéd a könyvet..... A PHP-alkalmazások biztonságossá t é t e l e ........................... Biztatásul megígérjük................ Komolyan! #1................. meg a szószedet............... 719 #5............. 716 #3.. 727 #9..................... 728 #10.... ha elég épp csak érintenünk őket..................... esetleg egy-két hirdetés................. aztán vége....... Kivételkezelés P H P -m ódra.......Tartalom jegyzék függelék: maradékok Ha az eddigieket megrágtad és lenyelted........ hogy ha ezt is elolvastad....... Van m ég pár dolog. A könyv használata a PHP 4-es változatával és a m ysql-függvényekkel.... Olyan témákról van szó....... 723 #7.. Mások PHP-kódjának h a s z n á la ta .................................... Szóval................................ amiket helytelen lenne kihagynunk... amit érdem es lehet tudnod............. O bjektum központú PHP .

............. 732 Milyen operációs rendszered v a n ? ..................... mielőtt elérhetővé tennéd az egész világon (világhálón)...... 739 A PHP engedélyezése Mac OS X-en .......................................és MySQL-ismereteidet kipróbálhatod......... vagyis egy biztonságos sarkot kialakítani..................... 736 A MySQL te le p íté s e ................... Ez a függelék se­ gít beüzem elni a webkiszolgálót és telepíteni a MySQL-t és a PHP-t...........738 A MySQL telepítésének lépései Window’s o n .........................................744 írasd lemezre az adataidat (m eg a tábláidat i s ) ! .................................... Teremts PHP-fejlesztői környezetet! Kiszolgáló számítógép ......... ahol újsütetű PHP...........735 A PHP telepítése ...........................745 Előkészületek a lemezre írt adatok felh aszn álására....................... Mindig hasznos..............733 Van PHP a gépeden? Melyik változat? .....................................745 A lemezre írt adatok áthelyezése az éles k isz o lg á ló ra ............................... 742 Átállás éles k ö rn y e z e tre .................................................................................................................................................................... ha egy PHP-alkalmazást biztonságos helyen fejlesztesz és tesz­ telsz................................. ahol dolgozhatsz és gyakorolhatsz......a tartalom jegyzék függelék: fejlesztői környezet kialakítása Szükséged lesz egy olyan helyre........................................ anélkül....................................................747 X X Í V Tartalomjegyzék ..... 746 Kapcsolódás az éles kiszolgálóhoz . 742 A MySQL telepítése Mac OS X -re ... hogy az adataidat kitennéd a webes támadások veszélyének.. 733 Van MySQL a gépeden? Melyik v á lto z a t? ........... 734 Kezdd a webkiszolgálóval! .................................................................. 732 Van webkiszolgáló a gépeden? .

..... amelyik a géf>eden PHP-változatnak megfelelő...... amikor hasznos..-PHP PHP .......... A PHP b ő v íté s e ................................ hogy nem ennyiből áll a világ ...............ttV rtp » « fo r cw w ühj Art a mysqli-változatot töltsd to WY80L le.....vannak ugyanis olyan helyzetek.... Léteznek további PHP-bővítmények is ...... Tárgymutató 755 most itt vagy ► xxv .................. ha elégedetlenkedsz................. 750 Ha Maced v an ..... de azért érzed.....................és igazad is van........Tartalom jegyzék függelék: a php bővítése Igen... nagyszerű webalkalmazásokat tudsz írni a PHP és a MySQL segítségével....................... 753 Oowrtfoad Connector. Ez a nyúlfarknyi függe­ lék a mysqli bővítmény és a GD grafikuskönyvtár-bővítmény telepítését mutatja be..

akt /veteti ash «1«.. " o l e z a könyv’ v alja.. hogy ilyesmit t e t t e k egy P H P -M yS Q L könyvbe! £ ** fir %*? '/• a *«?!.« vereti«»!. Pfdig nagys/öü E* a könyvet bárk. M iért tettek i l y e n t egy PHP-MySUU xxvii .Hogyan használd ezt a könyvet? Bevezetés Nem hiszem el. e& rf kte e ht .

amely az idegenek által elrabolt szem élyeket tartalmazza? . mint a száraz és unal­ mas iskolai előadásokat? .. © Halvány fogalmad sincs. aki a weboldalait m agasabb szintre szeretné emelni? ( 2) Túl szeretnél lépni az egyszerű HTML oldalakon. hogy egy szakkönyv nem lehet komoly. \h eladási osztály megjegyzése. hogy megtanuld.akkor ez a könyv neked szól. ha példaként egy olyan adatbázist hozunk benne létre... mint hogy kockáshoz csíkosat vegyél fel? M eggyőződésed. és referenciakönyvet keresel? Félsz attól. hogyan készíthetsz webalkalmazásokat a PHP és a MySQL segítségével? Jobban szereted az inspiráló beszélgetéseket vacsora közben.akkor ez a könyv nem neked szól.) ® ( 3) Menő PHP-webfejlesztő vagy... hogy mit jelentenek az olyan programozási kifejezések.hogyan használd ezt a könyvet? Kinek szól ez a könyv? Ha az alábbi kérdések m indegyikére igennel felelsz. megértsd és megjegyezd.vagy XHTML-tapasztalattal rendelkező webfejlesztő vagy. Ki tartsa magát távol ettől a könyvtől? Ha az alábbi kérdések bármelyikére igennel felelsz. ha van hi­ telkártyád. hogy kipróbálj valami újat? Inkább választanál egy gyökérkezelést. HTML. mint a „változó" vagy a „ciklus"? (A kulcsfogalmakat persze ebből a könyvből is m egtanulhatod. ha még soha­ sem programoztál korábban. akkor ez 3 könyv neked s z ó lj xxviii Bevezetés ..

Beindulnak a ké­ m iai reakciók. akkor is m uszáj elraktároznod. amiről a főnököd azt hiszi. ezek nem jutnak át az „ez nyilvánvalóan nem fontos” szűrőn. de nem számít. így épül fel. Innen tudja az agyad. és egy vizsgára készülsz. hogy ezek a dol­ gok megzavarják az igazi munkáját . De honnan tudja az agyad. Egy ufós VouTube-videó nyilvánvalóan érdekesebb az agyadnak. Az agyad megpróbál szívességet tenni neked. tigrismentes környezetben. Ez fontos! Jegyezd meg! De tegyük fel.” frz agyaá hoJ< EZT nem érde­ mes eiraWározm*. hogy „Hé. mindennapi dolgokkal talál­ kozik? Nos. ha szokványos. hogy egy hét. vagy valamilyen bonyolult műszaki tudást próbálsz a fejedbe töm ­ ni. Csakhogy van egy kis bökkenő. amelyet igazán fontos dolgokra fordít­ hatnál. Felgyorsul a pulzus. és mennyire nem hoz lázba. Mi történik a fe­ jedben és a testedben? Felizzanak az idegsejtek.Bevezetés Tudjuk. és gondoskodik róla. hogy mi fontos? Tegyük fel. hogyan működik az agyad Az agyad újdonságra vágyik: mindig a szokatlant keresi-ku tatja. Az agyadnak nem m ondhatod azt egyszerűen. milyen unalmas ez a könyv. hogy otthon vagy egy könyvtárban ülsz. mint egy számítógépes szakkönyv. bármit. hogy eltüntesd az űrlényes YouTube-videót a böngészőablakból. hogy milyen veszélyes a tűz. Vagy arra. biztonsá­ gos.> most itt vagy ► xxix . amikor jön a főnök. mire gondolsz? „Hogyan lehetne e z egy kom oly PHP-iMySQL könyv? „Minek ez a sok kép?” „Tényleg lehet így tanulni ?” Tudjuk. Vagy hogy mi a leggyorsabb módja annak. koszi szépen. amivel megakadályozhatja. hogy. agy. és egyszer csak egy tigris ugrik eléd. hogy ez a nyilvánvalóan nem fontos tartalom ne kössön le drága erőforrá­ sokat és tárolókapacitást. Az unalmas dolgok elraktározására nem pazarolja az energiát.. mert ez segít életben maradni.---------. de legfeljebb tíz nap alatt megtanulható.. De mit csinál az agy. hogy ki­ rándulsz. Például tigrisekre.a fontos dolgok rögzítését. meleg.

hogy emlékszünk-e valamire. Az agyunk sokkal gyorsabban tanul. aztán meg kell je ­ gyeznünk. Mindnyájan ismerjük a „tényleg meg szeretném ezt tanulni. amit „én ehhez jobban értek” Bob. A kognitív tudom á­ nyok. mint hogy elolvasunk egy szöveget. személyre szabott stílust használunk. a kíváncsiság. hogy tanulni szeretnének Mi kell ahhoz. valamint ösztönözni kell. gondolatébresztő kérdések és olyan feladatok kellenek. a döbbenet („Hát ez meg mi a . hogy a tanulók akár 40%-kal jobb eredményt érnek el az utólagos teszteken. A képek emellett érthetőbbé is teszik a dolgokat. hogy tu­ dunk valamit. Egy nehéz műszaki tém át boncolgató k ö n y v n e k sem kell unalm asnak lennie. mert megoldottunk egy feladatot. hogy tényeket töm ködünk a fejünkbe.. társalgási stílusra van szükség. a neurobiológia és a tanulás pszichológiája terén folytatott kutatások legfrissebb eredm é­ nyei szerint tanulni sokkal többet jelent annál. fel kell kelteni és le kell kötni a figyelmét. vagy ha előadást hallgatunk? Hiba! Is m e re tle n je ls z ó Az olvasót mélyebb gondolkodásra késztetjük. az agyunk takarékra kapcsol. hogy feladatokat oldjon meg. különös. akár a kétszeresére nőhet annak a valószínűsége. Az Agyhullám sorozat alapelvei többek között a következők: Vizuális élményt nyújtunk. Arra emlékszünk.?”). hogy nehéz. Persze nem egy kutyás kisfiú szívfacsaró történetére kell gondolni. gyakorlatok.. Megragadjuk az olvasó figyelmét. de az első oldal után elalszom ” érzést. akinek a kutyáját elrabolták az idege­ nek. és segítenünk kell megkeresni. és nem szabad túl komolyan venni magunkat. amiről mindenki úgy gondolta. ami szokat­ lan. meg kell értenünk . hanem olyan érzelmekre. hanem hétköznapi nyelven. vagy rájöttünk. nagyrészt az érzelmi kötő­ déstől függ. Valójában van egy szívfacsaró történe­ tünk egy fiúról. hogy7az. hogy mi villanyozza fel az agyad. Az agyaink csak arra figyel. megtanultunk valamit. A képeket sokkal könnyebb megjegyezni. közvetlenül hozzájuk szól. ha nem az. és sokkal hatékonyabbá teszik a tanulást (az em lékezet területén végzett kutatások sze­ rint akár 89% lehet a javulás). A legújabb vizsgálatok kimutatták. amibe mindenkinek beletört a bics­ kája. Az érzelmekre hatunk. XXX Bevezetés . vagy arra. Hétköznapi. Már tudjuk. Ehhez kihívások. feltűnő vagy váratlan. mint a meglepetés. hogy m egtanuljunk valamit? Először is. Kis korrekció. Mi tudjuk. hogy istenkirályok vagyaink. Ha az agysejtjeinket nem tartjuk edzésben. mint a szavakat önm aguk­ ban. a rendszergazda nem. vagy amikor úgy érezzük. Mikor figyelünk jobban: ha a barátainkkal beszélgetünk. am elyeknek a megoldása mindkét agyfélte­ két és valamennyi érzékszervet igénybe veszi. ^ hogy az olvasó képes lesz m egoldani a tartalomhoz kapcsolódó feladatokat. Az olvasót motiválni kell.hogyan használd ezt a könyvet? Az „Agyhulla'irT olvasóiról feltételezzük. és amit átérzünk. ha a szöveg nem hivatalos stílusú. nem pedig a lap aljára vagy egy másik oldalra. következtetéseket vonjon le. érdekes. Ha a szöveget velük kapcsolatban álló képekbe vagy azok mellé helyezzük. amikor jól szórakozunk. A tanulás nem arról szól. és új tudást halm ozzon fel. Értekezés helyett történetekre és laza. ami fontos nekünk.

ami növeli az agytevékenységet különösen ha az agyadat más-más m ódon dolgoztatja meg. hogy megértse. mintha egy előadást hallgatnál egy teremnyi passzív hallgató között . és reagáljon rá. akkor tényleg meg akarod tanulni. hogyan tanulsz. Hogyan vehetem rá az agyamat. m ost itt vagy ► XXXI . Ha elégszer ismétled. például egy ábraaláírásba vagy a szövegtörzsbe). az agyad megpróbálja kitalálni. hogy a könyv tartalma ne ragadjon meg az em ékezetedben. hogy mit olvastál. hogy a PHP-t és a MySQL-t egyenrangúnak tekintse egy éhes tigrissel? Van egy lassabb. Tanuld meg. amik segítenek. Nyilván tudod. Ha az olvasott szöveg stílusa ezzel szem ben száraz és hivatalos.? Mi azonban feltételezzük. vagy közted és egy könyv között zajlik.. Az előző oldalon felsorolt dolgok nagy szerepet játszanak a megoldásban. hogy ne kövessen el m indent annak érdekében.. hogy az agyadat meg kell győznöd. hogy hogyan gondolkodsz. M áskülönben folyamatosan harcol­ hatsz az agyaddal. hogy tanuljunk. és egy gyorsabb. kikapcs”. Gondolkodj el azon.. A lassú m ódszer lényege egyszerűen az ismétlés. hogy emlékezzen erre a cuccra. Ha hasznát akarod venni annak. A hétköznapi nyelv is segít: a legtöbb em ber jobban figyel. mintha fontos lenne neki. hogy az agyad neked dolgozzon. Elvárták tőlünk. az agyad ugyanúgy érzékeli. ami több agysejtet izzít be. amit m ond. hogy a lehető legtöbbet hozd ki ebből a könyvből .és valószínűleg nem akarsz túl sok időt rászánni. hogy ha egy szöveget egy hozzá tartozó kép belsejébe tesznek (nem pedig az oldal más részére. ami ebben a könyvben szerepel. ehhez pedig m eg kell értened az olvasottakat. hogyan kell tanulni. és bizonyítottan olyasmik. mivel a másik el­ várja. de újra és újra és újra ugyanazt olvassa. fárasztó módszer. hogy a „beszélgetés” közted és egy másik ember. m égpedig gyorsabban és alaposabban. hogy képes vagy m egta­ nulni és megjegyezni még a legunalm asabb anyagot is. hogy erre összpontosítson. de nem igazán tanították meg . Vajon hogy tudnám rávenni az agyam. ha beszélget. illetve tanórából . hogy figyelnie és az olvasottakat valószínűleg rögzítenie kell. hogy ha a kezedben tartod ezt a könyvet. A képek és a társalgási stílus azonban csak a kezdet.vagy bármilyen könyvből. hatékonyabb út is. hogy hogyan figyelsz. emlékezned kell rá. figyelj arra.Bevezetés Metakogníció: gondolkodás a gondolkodásról Ha tényleg tanulni szeretnél. A trükk az. hogy a m egtanu­ landó anyag Tényleg Fontos. úgyhogy' biztos az. az agyad ezt mondja: „Nem érződik úgy. Ahhoz. Olyan fontos. rá kell venned az agyad..” A cél gyorsabb elérését bármi segítheti. A jólétedhez elengedhetetlen.. hogyan építhetsz adatbázis-vezérelt w ebhelyeket a PHP és a MySQL segítségével . G yerekkorunkban a legtöbbünk nem vett leckéket m etakognícióból vagy tanuláselméletből. mint egy tigris. ha újra és újra begyöm öszö­ löd az agyadba. hogy a szavak és a kép miként kapcsolódnak össze. Több dolgozó agysejt = nagyobb esély az agynak. hogy kövesse. Az agyad azonban csodálatos m ódon nem \ feltétlenül törődik vele. A kutatások azt mutatják például.„ébrenlét nem szükséges.

többször is elismételtük. mert minél jobban lekötjük az agyunkat. amire vonatkozik. hogy az agyad csak a megfelelő dolgokra fordítson energiát. hogy neked mi a kedvenc tanulási m ódszered. Az agyad akkor is így működik. nem pedig egy ábraaláírásban vagy elásva az oldal mélyén. ha dolgozik. A tartalmat többféle stílusban tálaltuk. még ha csak annyiról is van szó. társalgási stílust használtunk. ha arra kényszerül. ha ugyanazt a tartalmat többféle tálalásban látja. ahogy m á­ sok gyúrnak az edzőterem ben. annál való­ színűbb. ha csinálsz valamit. hogy a tartalom az agyad több részén is rögzüljön. szakzsargonnal teli. Amivel kapcsolatban érzéseink vannak. mert az agyad akkor tanul. mert az agy figyel az érzelm ek biokém i­ ájára. másrészt olyan kérdésekkel amelyekre nincs mindig egyértelm ű válasz. A történetekben. Történetekkel és többféle nézőpontot bem utató feladatokkal is színesítettük a könyvet. és olyanok is akadnak. és annál hosszabb ideig tudunk össz­ pontosítani. mert az agyad képekre van hangolva. . mert az agyad hatékonyabban tanul és em lé­ kezik. N e m illenek össze! Horrorfilmek ^ Próbáld ki ezt! * Mindkét agyféltekére gondoltunk. Ami az agyat illeti. Ugyanazt a dolgot többféleképpen. egy kép valóban száz szóval felér. arra valószínűbb. amikor olvasol Több mint 80 gyakorlatot mellékeltünk. hogy em lékezni fo­ gunk. hogy megfejtsen egy bonyolult példát vagy egy súlyos. mint más dolgokra. és ném i érzelmi töltetet is vittünk beléjük. hogy elem ezzen és értékeljen. iMiközben az egyik agyfélteke dolgozik. míg m ások először átfogó képet szeretnének kapni. Személyre szabott. mert vannak. és ne kelljen egyetlen agysejtet sem arra áldoznia. nem szövegre. mint ha csak olvasol róla. mert te is em ber vagy7 és az agyad több figyelmet fordít az emberekre . Kihívások elé fogunk állítani. mert a legtöbben az ilyen feladatokat szeretik. ha csak nézed . a szöveget a képek belsejébe ágyaztuk. Ugyanakkor m indent elkövettünk.hogyan használd ezt a könyvet? Horrorfilmek Ezt tettük Ml: Képeket használtunk. Amikor egy szövegrészhez képek kapcsolódtak. ha azt hi­ szi. vagy vala­ mi felkeltette az érdeklődésünket. mert az agyad alaposabban tanul. A fogalmakat és a képeket váratlan m ódon használtuk. mint ha úgy gondolja. hogy kihívást jelentsenek. különböző érzékszervekre ható módon. A feladatokat úgy terveztük meg. hogy beszélgetsz. mert az agyad jobban figyel. akik csak egy példát akarnak látni. a másik agyfélteke gyakran pi­ henhet. ha a szöveg abban van. mert az agy hatékonyabban működik. hogy passzívan hallgatsz egy előadást. a példákban és a képeken emberek szerepelnek. de azért m egoldhatók legyenek. meglepődtünk . egyrészt a gyakorlatokkal. Attól függetlenül azonban. hogy nevettünk egy jó t. Tesztút mm xxxii Bevezetés . Gondolj csak bele: a testedet nem tudod form ában tartani. hogy növeljük az esélyét annak. száraz szöveget. hogy em lékezni fogunk a tanultakra. ami meghosszabbítja a hatékony tanulás időtartamát. mert az agy az újdonságot sze­ reti. m indenkinek a hasznára válik. akik a lépésről lépésre haladó leírá­ sokat részesítik előnyben.

hogy amit tanulsz.és ebben a könyvben pon­ tosan ezt fogod tenni. Sok gyakorlási lehetőséged lesz: minden fejezethez tartoznak m egoldandó feladatok. Lefekvés . mert a legtöbbet éppen a feladatok m egol­ dásából tanulhatsz. ami nem. hogy ne terheld túl az agyad. annál kevesebbet kell bemagolnod. mert ez olyan len­ ne.» ■ “ 1 B‘ V™ ' éS Ezt teheted TE. Igyál sok vizet! Az agyad akkor működik a legjobban. vegyél elő egy ceruzát. Ne csak úgy olvass. hogy emlékezni fogsz a tanultakra. annál nagyobb az esé­ lyed arra. ami a te esetedben is m ű­ ködik. Ha azt ve­ szed észre. hogy. mint semmit sem érezni. hogy szomjas lennél). ha folya­ dékban lubickol.nyugodtan less. Képzeld úgy’. és feltétlenül tedd m űködőképessé. Nem kihagyható lábjegyzetek. mielőtt folytatnád a könyvet. hogy a tanulás közbeni fizikai tevékenység növeli a tanulás hatékonyságát. ha gyakoroljuk. az fontos. A kiszáradás (ami jóval azelőtt bekövetkezhet.csak felszínesen futod át a szö­ veget. ideje pihenőt tartanod. Ha m egérteni próbálsz valamit.« . hogy később em lékezz • rá. hanem a lényegi tartalom részei. amin nem tudsz átlendülni).. hogy mi az. ^ Figyeld az agyad! Ügyelj rá. de előtte m indenképpen próbál­ kozz valamilyen megoldással. csökkenti a felfogóképességet. A gyakorlatok megoldását ugyancsak mellékeltük . és olyan dolgokat is felfedezhetsz. Állj meg. Ha a feldolgozásra szánt idő­ ben valami mást is az agyadba tömsz. És próbálj ki új dolgokat! ( J ) Lassíts! Minél többet értesz meg. mintha valaki tényleg kér­ dezne tőled valamit. Még jobb. ( 3 ) Olvasd el a „Nincsenek hülye kérdések" részeket! Úgy értjük. Ne csak n ézd a gyakorlatokat. m o st itt vagy ► xxxiii .figyeld az agyad üzeneteit. Ha a könyv feltesz egy kérdést. hogy leteszed a köny­ vet (például ekkor tölti be a tanultakat a hosszú távú memóriába). az éppen m egtanult anyag egy része kihullik a fejedből. sőt a hatás akár ellen­ tétes is lehet. így gyorsabban fogsz tanulni. hogy engedelmességre bírd az agyad: Mi megtettük. mintha edzésképpen valaki mással végeztet­ néd a felüléseket. vagy növelni sze­ retnéd az esélyét annak. A kódolás egy készség. ha még több infor­ mációt lapátolsz a fejedbe. A PH P és a MySQL segítségével valós webalkalmaza'sokat készíthetsz. Ne ugord át őket. Ne felejtsd el feltölteni és egy igazi webkiszolgálón kipróbálni ölcet. vagy elfelejted. Ne ugord át őket! ( 6 ) Beszélj róla! Hangosan! A beszéd az agy egy másik részét kapcsolja be. Egy gyenge viccen ki­ akadni még mindig jobb. ha elakad­ nál (mindig akadhat valami apróság. amit csak úgy lehet elsajátítani. ha m egpróbá­ lod valakinek elmagyarázni. amit ép p en most olvastál. mindet. és gondolkodj. a többi rajtad áll. ( ö ) Érezz! Az agyadnak tudnia kell. m ondd ki hangosan. ami tőlünk telt. Az agynak a feldolgozáshoz időre van szüksége.vagy leg­ © alábbis a előtt ez a könyv legyen az utolsó amit olvasol! legkevésbé megterhelő dolog . ne ugorj egyből a válaszra. Az alábbi tippek csak a kezdőlökést adják meg . Merülj el a történetekben. Egy bizonyos ponton túl már nem tanulsz meg többet. Minél jobban rákényszeríted az agyad a gondolkodásra.( U « . amik olvasás közben fel sem tűntek. hogy el is végezzük őket helyetted. ( 2 ) Végezd el a gyakorlatokat és jegyzetelj! A gyakorlatokat nem azért tettük a könyvbe. és állapítsd meg. Gyárts saját képaláírásokat a fotókhoz. és mi az. Az agyad az után is tanul. Rengeteg dolog tanúsítja. ( g ) írj sok kódot! • A programozást csak egyféleképpen lehet megta­ nulni: sok kódolással .* .

A könyv írásakor a PHP 5-öt és a MySQL 5-öt tartottuk szem előtt. végül pedig az összett alkalmazásokhoz kapcsolódó tudnivalók. igyekeztünk kerülni a PHP 4-re. hogy tanulj belőle. hanem arra. hogy az alkotás izgalomba hozzon. hogy a w ebes program on keresztül adatokat vigyenek be és olvassanak ki.0-ra támaszkodik. függelék 1. m iközben ügyeltünk rá. A PHP-t egy w ebkiszolgálón keresztül kell futtatni ahhoz. hogy a korábban olvasottakat megtanultad. és am elyeket az idő 95 százalé­ kában használni fogsz.hogyan használd ezt a könyvet? Fontos! Ezt a könyvet nem referenciakönyvnek szántuk. és III. az elején kell kezdened.és MySQL-utasításokat m utatunk be. Először az egyszerű programozási fogalmakat és az adatbázis-kapcsolatok alapjait ta­ nítjuk meg. függvényeket és kulcsszavakat tanulhatod meg azokat. Ebben az I. függelék ad bővebb felvilágosítást.és adatbázis-ter­ vezési eljárásokkal. Amikor pedig először olvasod a könyvet. Ezért először olyan PHP. hogy befejezd az éppen megírt tuti al­ kalmazásodat. és az eljárások. Ha elolvastad a könyvet. amelyeket magad is kipróbálhatsz. de úgy gondoltuk. hogy helyesen működjön. A Pl IP és a MySQL telepítésének és bővíté­ sének módjáról a II. amelyek lehetővé teszik a felhasz­ nálóknak. ezt követik a bonyolultabb PHP-függvények és MySQL-utasítások. Szándé­ kosan kigyomláltunk belőle mindent. pontja igazít el. hogy MySQLparancsokat adhass ki az adatok kezeléséhez. így rögtön kezdhetsz is valamit a PHP-vel és a MySQL-lel. Szükséged lesz egy webkiszolgálóra. mie­ lőtt ezt m egtehetnéd. illetve a MySQL 5 vagy 6 használatát javasoljuk. hogy a kódok a későbbi kiadásoknak is megfeleljenek. ami nehezítheti a tanulást a kötet adott pontján. Mivel sokan még mindig a PHP 4-es vagy 5-ös változatát használják. függvényét és kulcsszavát. hogy olyan alkalmazásokat hozz létre. am elyekre tényleg m indenképpen szükséged lesz. Bár a lényeg az. mint az Apache. mert a fejezetek egy­ másra épülnek. Addigra biztos tudással fogsz rendelkezni a szükséges nyelvtanról. _ A könyv a PHP 5-re és a MySQL 5. 5-re és 6-ra jellemző kódokat. xxxiv Bevezetés . Nem mutatjuk be a PHP és a MySQL minden utasítását. megtanulására összpontosíthatsz. vagyis feltételezzük. függvényét és kulcsszavát. hogy milyen egyéb függvényeket kell használnod ahhoz. A könyvben ismertethettük volna a PHP és a MySQL m inden utasítását. már m agabiztosan utánanézhetsz. A tanuláshoz a PHP 5 vagy 6. a könyv későbbi részében pedig megismertetünk az ajánlott alkalmazás. amely ismeri a PHP-t. jobban örülnél egy könnyebben kézbe vehető kötetnek. amelyet telepítened kell a sa­ ját szám ítógépedre vagy egy általad legalább részben elérhető gépre. amelyből a legfontosabb utasításokat. Tehát szükséged lesz egy olyan webkiszolgálóra. meg kell értened a PHP és a MySQL nyelvtanát. ~ ~ A könyvben tanultakat a kódok apró módosításával a PHP 4-ben is kipróbálhatod.

mások az anyag mélyebb megértését célozzák. Senki se várja.com/books/hfphp/. Ebben a könyvben a példákat a lehető legrövidebb környező kódba ágyaztuk. Ha m inden parancs m inden utasí­ tásformáját sorra vettük volna a kötetben. hogy helyesek-e a válaszaid. a könyv sokkal több oldalból állt volna. hogy befejezted a könyvet. amit meg kell érteniük. m iközben azt a két sort keresik. és az után is em ­ lékeznél rájuk. ezért egyes fogalmakat többször is átismétlünk. ahonnan lem ásolhatod és be­ illesztheted őket egy szövegszerkesztőbe vagy MySQL-terminálba. de mi ebben a könyvben a MySQL változatot vesszük alapul. Ezeknek a gyakorlatoknak az esetében előfordul. ha tényleg megértenéd a tanultakat. A könyvben szereplő kódok néhány apróbb nyelvtani változtatással használhatók Oracle. Az egyik legfontosabb dolog. ezért a MySQL-re összpontosítottunk. DB2 és még jónéhány más relációs adatbázis-kezelő (RDBMS. Az SQL nyelvnek létezik szabványos változata is (Standard SQL). A cím: http://www. hogy nincs helyes megoldás. MS SQL Server. Relational D atabase M anagement System) rendszeren is. hogy a megjegyzen­ dő rész világos és egyszerű maradjon. hogy te döntsd el. mi vi­ szont szeretjük a fákat. nézz utána. Egyes gyakorlatoknál tippeket adtunk. Ne ugord át a gyakor­ latokat! A keresztrejtvények az egyetlenek. hogy a tanult szavakat és kifejezéseket más környezetben is képes legyen felidézni. am elyeknek az a célja. amelyek a tanultak alkalmazásában segítenek. A gyakorlatok kötelezőek. A gyakorlatok nem tekintendők elhagyható kiegészítő anyagnak: hozzátartoznak a könyv lé­ nyegéhez. hogy milyen PHP-függvényeket és -utasításformákat kell használnod. Az ismétlés szándékos és lényeges. hogy bosszantó 200 sornyi kódon átevickélniük. és vannak olyanok is. hogy m eg­ tanuljuk. Az olvasók gyakran panaszkodnak. Ha az említett RDBMS-ek valamelyikét szeretnéd használni. illetve feltöltheted a sa­ ját webkiszolgálódra.Bevezetés Mi a MySQL nyelvet használjuk. A példák a lehető legkarcsúbbak. PostgreSQL. de vannak köztük olyanok is. ezt a kötetet azonban tanulásra szántuk. A példakódokat és -alkalmazásokat megtalálhatod a Weben. am iben az Agyhullám sorozat kötetei különböznek más tan­ könyvektől.kifejezetten a tanulást szolgálják. A példák közül több is teljes értékű webalkalmazás. Egyes feladatok a memóriát edzik.headfirstlabs. m o s t itt vagy ► x x x v . amely elég komoly dolgokra képes. hogy m űködnek. A legtöbb kézikönyv nem arra való. ami benne van. amelyek a helyes irányba terelhetnek. vagyis nem feltét­ lenül m űködőképesek önm agukban. de ezek is jó alkalmat adnak az agyadnak arra. Az Agytorna gyakorlatokhoz nem tartoznak megoldások. hogy7m inden példa masszív vagy teljes legyen . hogy kipróbáld. hogy mi azt szeretnénk. amiket nem m uszáj megcsinálnod.

Cleóval. Swiperrel szereti tölteni. operációs rendszereket. Chris a PHPvel és a webalkalm azások biztonságával foglalkozó kö­ zösségek egyik szellemi vezére. C h m £ K .. Amikor nem a szabvány követő kódok előnyeit ecseteli. a 20. a MySQL-t. Day Job™ számára. s Stephanie Liese. ahol a w ebalkalm azások gyakorlati biztonságával foglalko­ zik és webfejlesztési projekteket irányít. Harvey Quamen. akinek a ve­ zetése alatt álló informatikai osztály 4 kontinens 11 vál­ Biancát. az O nion Flavored Ringsszel játszik egy szellőzés nél­ küli pincében. Szakoktató és webfejlesztő a kaliforniai Sacramentóból. ahol a kiberkultúráról. Jelenleg adjunktusként oktat angolt és hu­ mán informatikát az albertai egyetemen. és olyan könyvek szerzője.ic U Dávid Briggs. hogy az adatelérési felületeik rugalmasak. a különféle keretrendszereket. és emberi párját.tart kurzusokat. Világszerte népszerű előadója az iparági konferenciáknak. mint sétálni a helyi parkban a feleségével. Server) Las Vegas-i szárnyának alelnöke. Harvey a számítógép-programozói karri­ erjét adta fel a tanári lét elegáns. aki otthonos a csúcstechnológiás webalkalmazások készítése terén is. belebújik Web 2. Ralphot. Ha nem azzal foglalatosko­ dik. Az idejét emellett feleségével. és több mint kilenc éve használja a PHP-t. akinek a w ebnaplóját sokan olvassák a shiflett. és a kutyájával. hordozha­ tók. semmit sem ked­ Steve Milano. Paulette-tel és a család kutyájával. karbantarthatok és GYORSAK legyenek. csodálatos gyerm eke­ ikkel. Chris Shiflett. lesifotósokkal teli. Vezető technikus az OmniTI-nél. programozási nyelveket és fejlesztőprogramokat. vagy punk-rock zenekarával. vagy egy CSS-elrendezés hibáit vizs­ latja. hogy útmutatást adjon a felhasználóknak egy kü­ lönösen rázós szoftver használatához. o xxxvi Bevezetés . valamint a Rails segítségével támogatja a Pow ered By Geek tervezőit és programfejlesztőit.org-on. alapítója a PHP Security Consortium-nak.beleértve a PHP-t és a MySQL-t . Heatherrel. Szakkönyvíró és szoftverhonosító m érnök az angliai Birminghamből.hogyan használd ezt a könyvet? A szakmai lektorok csapata Jcvcmc Allén Dávid Bviaas MII ttavris Slepham e Liese S-tcve Milarvo tta rv e y <$ua»r*en Szakmai lektorok: Jereme Allén. valószínűleg otthon ül a laptopjával. W ill Harris. századi irodalomról és a webfejlesztésről . és a MySQL. jógagyakorlatokkal izzasztja magát. Tapasztalt webfejlesztő. Éjszaka bepattan egy telefonfülkébe. lalatának nyújt szolgáltatásokat. mint az Essential PHP Security (O ’Reilly) vagy a HTTP Developer’ Handbook (Sams). A PASS (Professional Association fór SQL nem számítva macskatársát. iri­ gyelt világáért. Marával és Ellie-vel. Amikor éppen nem kódot körmöl a The vel jobban.0-s ruhájába.

Nagyszerű m unkát végzett . Reméljük.mikor mivel zsonglőrködtünk). B veit MdLaugMi* Az O'Reilly csapata: Köszönet jár Lou Barrnak a fenomenális oldalterve­ kért. és Laurie Petryckinek. hogy csak egy mezei. aki összerakta a 12. am inek köszönhetően képileg ilyen izgalmas könyv születhetett. Neki mindig sikerült elkapnia a labdát (vagy ép p en macskát . valamint Caitrin McCullogh-nak. barlanglakó művészeti vezető. ha végül leejtettünk egyet (vagy hármat). fejezet űrlényes YouTube-videóját.különösen ha figyelembe vesszük. hogy néhány napig lógathatja a lábát. türelm e és kitartása nélkül. Hálásak vagyunk Brittany Smith-nek is az utolsó pilla­ natokban végzett kem ény munkájáért. ami a helyes irányba terelt minket. és ezért nagyon hálásak vagyunk. és a kognitív tanulás iránti kérlelhetetlen elkötelezettségéért. mielőtt egy ehhez hasonlóan nehéz feladatot kapna. Ez a könyv nem készülhetett volna el Sanders Kleinfeld hősies erő­ feszítései. hogy egy újabb nagyszerű Agyhullám-kötet fog kikerülni a kezünk közül.Bevezetés Köszönetnyilvánítás Szerkesztőink: Ezer köszönet Brett McLaughlinnak az elképesztő képes forgatókönyvért. a ki m űködésre bírta a példaw ebhelyeket. nagy-nagy köszönet jár Elvis Wilsonnak. aki hitt benne. m o st itt vagy ► XXXVÍi . Sattders We'míeld Lou Ba Továbbá: Végül.

A szolgál­ tatás ingyenesen kipróbálható a http://safari. és ha a legfrissebb.com címen. műszaki témájú könyvben kereshetsz. összeollózhatod a példakódokat. hogy a könyv elérhető az O'Reilly Network Safari Bookshelf nevű elektronikus könyvtárban.oreilly. ham ar választ kaphatsz a kérdéseidre. letöltheted az egyes fejezeteket. az arra utal. A Safari az e-könyveknél színvonalasabb szolgáltatás: olyan virtuális könyvtár. XXXV iii Bevezetés .hogyan használd ezt a könyvet? Safari® Books Online Bo^u oniine kedvenc szakkönyved borítóján felfedezed a Safari* ikont. am elyben több ezer kiváló. legprecízebb információra van szükséged.

hogy a HTML-nél többre lesz szükséged ahhoz. A kommunikáció egyirányú. hogy a látogatóid az oldalak passzív nézegetésére vannak kárhoztatva. hogy u n a lm a s v a g y o k . majd fel kell tudnod dolgozni azokat. és ezen változtatni szeretnél. de rájöttél. hozzá kell jutnod ezekhez az információk­ hoz. m o s t m ondja.1 Keltsd életre a statikus oldalakat! él! Na... Először is tudni szeretnéd. ez egy új fejezet 1 . * w\ $ Nagyszerű weboldalakat készítesz a HTML és egy csipet CSS segítségével. hogy a w ebhelyedet m agasabb szintre emeld. Ehhez azonban lehetővé kell tenned. Nos. hogy mire gondol a közönséged. úgy tűnik. hogy a felhasználók információ­ kat adjanak meg egy w ebes űrlapon keresztül.

és fe ltö lti a webkiszolgálóra Webkiszolgáló A Az ügyfél webböngészője webkiszolgáló a sta tikus HTML-oldalakat csak egyesével tudja szolgáltatni. Ahhoz. fejezet 3 .néha a HTML önmagában nem elég A HTML statikus és unalmas Annyit már tudunk. A HTML klassz.az ebedről. amikor megírja ókét. ami csak tartalom­ megjelenítésre alkalmas. ha a fejlesztő módosítja a -html fá ilt. hiszen csak olyan információk megjelenítésére tervezték. weboldalakhoz a kiszolgáló statikus HTML-kódot szol­ gáltat. a kiszolgáló átadja neki a HTML-kódot. mar nem olyan király* Ezek az emberek választ várnak! Ezeknek az oldalaknak a HTML-kódját a fejlesztő határozza meg. hogy a HTML kiválóan alkalmas w eboldalak készítésére. A statikus HTML-oldalak csak akkor vál­ toznak meg. dinam ikusabb szerepet kell betöltenie . 2 7. Az élettelen HTML-lel kapcsolatos gondok nagy része a webkiszolgálótól ered. mivel a kiszolgáló unott kézbesítőként viselkedik: a böngésző kér egy oldalt. de ha a webhelyed látogatóival interaktív kapcsolatót akarsz kialakítani.hogyan teheted meg? A HTML m eglehetősen élettelen nyelv o r lévén itt már kudarcot vall. amelyek csinálnak is valamit? Tegyük fel. De mi a helyzet akkor. ha olyan w eboldalakat szeretnél. vagy e-mailt szeret­ nél küldeni . hogy' egy adatbázisban kell keresned.ezt pedig a PHP teszi lehetővé. hogy egy wrebhely interaktív webalkalmazássá változhasson. amelyek soha nem változnak. itt a vége. fuss el véle. ha csak meg W // / m ^ szeretnél osztani egy képet I --------. a webkiszolgálónak új.

i It m i |J I I *3111 É H I l»lL ~ 0ldén3k< n» Ezeknek az oldalaknak a HTMLkódját egy PHP-program állítja elő. ame­ • MySQL-adatbázis lyeket beépít az elő állíto tt HTMLkódba.Keltsd életre a statikus oldalakat! * k“ a '»íl< « * » S t a j í « ! A PHP életre kelti a weboldalakat A PHP lehetővé teszi. i . ♦ most itt vagy ► 3 . A böngésző továbbra is szok­ ványos HTML-oldalakat kap. 3? eredmén^ M íg H ™ L -o ld a lk é n t küldi el a böngészőnek. hogy a kiszolgálón egy PHP-parancsfájl fut. A PHP-parancsfájlokat 3 webki^ l 9áló tárolja és fu t- ű r t ' . hogy a kiszolgálón a PHP segítségével módosították a HTML-t. A PHP seqítséqével * * g W ebkÍSZOl{)álÓ dínálT lÍkuS3l1 i .Í!.!ka’ 15 * j .. - n* hogy m it kell tenni a HTML-lel. í ! P H P -fro9ram«»así. Webkiszolgáló Webböngésző A dinamikus HTML-oldalak a PHP-parancsfájlok programlogikájának megfelelően változ nak. a webalkalmazas igényei szerint változhatnak. amely igény szerint állítja elő vagy módosítja a HTML-kódot.__ ITlfiflfit kÖZDSfl kfip 6 $ 6 l0 á llf ~ . . de a kódot a PHP állítja elő dinamikusan a kiszolgálón. ami hihetetlenül rugal­ massá teszi őket. A HTML-oldalt ugyanakkor továbbra is a böngészőnek kell elküldeni. A dolog úgy működik. hogy egy w eboldal tartalmát a kiszolgálón módosítsuk. amely nem tudja (és nem is érdekli). mielőtt az oldal a böngészőprogram hoz kerülne. A PHP egy adatbázisban tárolja ésonnan olvassa ki az adatokat. ezért dinamikusan.

aki elvesztette a kutyáját. hogy megosszák vele a sa­ ját elrablási élményeiket. hogy egy weboldal. ezért O w ennek ki kell terjesztenie a keresést az egész galaxisra. Owen konyít vala­ melyest a HTML-liez és a CSS-hez.Kutyák az űrben Bemutatjuk Owent. ugyanis Agyart idegenek rabolták el. és úgy véli. Ahhoz azonban. segíthet a kutatásban. Az eb megtalálásához azonban nem elég a környéken kutatni.a IITML-ben egy csom ó olyan elem van. Gyerekjáték . Fang-et (vagyis Agyart). Nem lá tta ezt a kutyát? . amelyen lehetővé teszi másoknak. amivel össze lehet ütni egy w ebes űrlapot. amelyet a látogatók kilökhetnek és eljuttathatnak hozzá. Owennek egy w ebes űrlapra lesz szüksége. hogy (jó sok) információhoz jusson.

és tudhatnak valamit Agyar eltűnéséről. Ide további megjegyzése­ ket lehet írni. Hogy erre valaki igennel felel majd. akiket szintén elraboltak az idegenek.ö e je le n t ó í a p Ossza meg velem az Idegenekkel kapcsolatom élményeit: keresztnév: Vezetéknév: Mi az ön e-mail címe? Mikor történt az elrablás? Mennyi ideig volt távol? Hány Idegent láto tt? írja le az Idegeneket: M it tettek önnel? Nem látta a kutyámat.Keltsd életre a statikus oldalakat! Owen űrlappal nyomoz O w en új webhelyének. What did they do to you? Have you seen my dog Fang? Owen reméli. tehát látta Agyart az idegenek űrhajóján. 1 0 0 % -o s . hogy a csillagközi utazásuk során nem futottak-e össze Agyarral.com-nak („ElraboltakAzIdegenek. Owen fizikai leírást sze retne az idegenekről. hogy a látogatóitól egy HTML-űrlap segítségével kérdezheti meg az elrablásuk történetét. O wen tudja. és valamiképp ki kell derítenie. amikor a látogató kitöltötte az űrlapot. Agyart? Igen/Nem Szeretne még hozzáfűzni valamit? És végül egy gomb: Aliens Abducted Me . Ebben viszont a te segítségedre lesz szüksége. Mi a véleményed Owen űrlapjáról? Ez az űrlap tiszta. ami az eszedbe jut: m ost itt vagy ► 5 . az AliensAbductedMe.Report an Abduction Share your story of alien abduction: Elrablás b e je \ e n t é e e First name: Last name: What is your email address When did it happen? How long were you gone? How many did you see? Describe them: Ide írhatja be a látogató az e-m ail címét. ha a fenti űrlappal próbál adatokat szerezni az idegenek tevékenységéről? Ide leírhatod.com") az a célja. hogy kapcsolatot teremtsen Owen és azok között. Owen egy e-m ailt szeretne kapni. első osztályú HTML! Milyen problém ákba ütközhet O w en. Valami ilyesmit szeretne az űrlapon: ^ P> O O Aliens Abducted Me - Elraboltak az id e g e n e k .

Ha ki akarod próbálni az űrlapot. IV ) j \ ^ A „submit” gomb utasítja az űrlapot az űrlapművelet végrehajtására._________________ ___________________________________ c 2 a2 ^ é k mondta meg a kiszolgalonak.Owen űrlapjának HTML-kódja Az űrlapok HTML-bol állnak kapcsolatban fel kell frissítened n emlékezetedet." /xbr /> clabel for="other">Anything else you want to add?c/label> ctextarea id="other" name="other">c/textarea>cbr /> cinput type="submit" value="Report Abduction" name="submit" /> c/form> ^ Az űrlapot nyitó és záró < fo rm > elemek zárják közre. j <form method="post" action="mailto:owen0aJLiensabductediDe. írd Owen címének helyére a tiédet. . hogy szöveges adatot kell várnia. hogy az űrlapadatokat e-mailben küldjük el. .jpg" width="100" height="175" alt="My abducted dog Fang. H . 100%-os HTML-kód! 6 7...com"> <input type="text" id=. . A legtöbb kérdéshez egysoros szövegmezők tartoznak.küldeti el magának. fejezetét.az űrlap tiszta. olvasd el például O wen „Elraboltak az idegenek” bejelentő űrlapja teljes egészében HTML-elemekből és a p. 3 7 3 <label for="aliendescription">Describe them:</label> cinput type="text" id="aliendescription" name="aliendescription" size="32" /xbr /> clabel for="whattheydid">VJhat did they do to you?</label> <input type="text" id="whattheydid" name="whattheydid" size="32" / x b r /> clabel for=”fangspotted">Have you seen my dog Fang?</label> Yes <input id="fangspotted" name="fangspotted" type="radio" value="yes" /> No cinput id="fangspotted" name="fangspotted" type="radio" value="no" /xbr /> <img src="fang. <label for="whenithappened">VJhen did it happen?</label> <input type="text" id="whenithappened" name="whenithappened" /xbr /> <label for="howlong">How long were you gone?</label> <input type="text" id="howlong" name="howlong" / x b r /> <label for= "howmany">How many did you see?</label> ^ «tyPe tulajdonság itt 3zt jelzi a urlapmúvez <input type= text" id= howmany ~ name= howmany ¡7 “ ~ / x b r /> 77 létnek. ^ eriék . amely lehetővé teszi..firstnaIne. hogy clabel for="firstname">First name:c / l a b e l > " -- milyen formában kell elküldeni az adatokat. A „mailto" egy protokoll. H L megjegyzésekhez egy többsoros szövegmező. két választógomb.get" lehet. a kölönbsé- ^ k s b magyarázzuk el. <label for="lastname">Last name:</label> --------------------. cinputf~type="text" id="email" name="email" /xbr /> H v bevitt információkra kell számítania. ahhoz a kérdéshez pedig. hogy látták-e Agyart. name="firstname" / x b r /> . fejezet . Az űrlap tartalma't Owen erre az e-mail címre s . 'N <p>Share your story of alien abduction:</p> J / . éőb <input type="text" id="lastname" name=" last name" / x b r /> <label for="email">'What is your email address?</label> Az < input> elemek jelzik az űrlapnak. Nincs meglepetés . p o s t " v a g y .rst H L with CSS & TM -tulajdonságokból áll. a további X TM 14. Az űrlap a bevitt adatokat O w en e-mail címére küldi el..

Nyisd meg a r e p o r t . adj meg néhány elrablási adatot az űrlapon.h t m l fe n g . ezért ezt a feladatot a felhasználó saját levelezőprogramjára bízza.com/books/hfphp címről.Report an Abduction Share your story of alien abduction: First name: Last name*.. Alt ajf*£t*<ryr«ilig<e*p com m n . és módosítsd O w en e-mail címét a sajátodra. Anything else_you warn to add' { Report A bduato^' Owen nem kapja meg az urlapadatokat.html) mellett egy stíluslapot (style. A HTM L-íírlap nem tudja.jp g Az űrlap benyújtása az adatok Aliens Abducted Me . W hat b your email address? When did it happen? How Ioiir were you gone? How many did you see? Describe them: What did they do to you? Have you wen my dOR Fane? tittíc yree" elküldését eredményezi e -m a ilb e n . a www. jpg).Keltsd életre a statikus oldalakat! Tesztűt Próbáld ki az „Elraboltak az idegenek" űrlapot! Töltsd le a Report an Abduction (Elraboltak az idegenek) w eboldalt a Head First Labs w ebhelyéről. hacsak a felhasználó nem küldi el saját kezűleg ezt a bizarr külsejű levelet.css) is találsz. M it gondolsz? Megérkezett az űrlapadatokat tartalmazó e-mail a levelesládádba? m ost itt vagy ► 7 . és kattints a Report Abduction gombra. Itt O wen w ebes űrlapja (report.o 7**cd me ábovT u ro Yes O N o 0 Ptca*c vete for me.. Ez után nyisd meg az oldalt egy w ebböngészőben.headfirstlabs. hogyan kell e-m ailt küldeni. r e p o r t . Az oldal a chapterOl könyvtárban található. htm l oldalt egy sima szöveg szerkesztésére alkalmas szövegszerkesztőben. majdnem. valamint egy képet Agyarról (fang.

a k á rm i is legyen az. m e rt a w ebböngészátnnek nincs alapértelm ezett e-mail ügyfélprogramja. .. Agyar elrablása valóban ennyi re elszigetelt esem ény lenne? Vagy az űrlappal van valami gond? Lássuk. mit gondolnak a felhasználók: A T á rg y mezőben va la m i ily e s m it lá tta m : ?When=&Where=.m ailto .rossz ötlet A HTML-űrlappal gondok vannak O wen „Elraboltak az idegenek” űrlapja készen van és m űködőképes. 3 wefefceíy látogatóit. „ . de a felhasználóktól nem érkeznek információk. i folyik itt? Van valamilyen ötleted. amij„ o ? ’ H “» k tn a a tt. S em m i sem tö r té n ik . hogy miként lehetne kijavítani az űrlapot? 8 7 fejezet .. 0 » w ÍW. p j . K ic s it ö s s z e z a v a ro d ta m .

amíg a Report Abduction gombra nem kattintasz. de a mailto nem alkalmas az űrlapadatok elküldésére.márpedig ez így nem lesz jó.w^ . o*» W v ■ » . és biztosítsd a levél elküldését. mailto stb. hogy az adatok a rendeltetési helyükre jussanak! Az e-mail elküldése felett tehát nincs ha­ talmunk: az adatok vagy eljutnak sikeresen a w ebes űrlapról a böngészőn és a leve­ lezőprogramon keresztül hozzánk. amíg a felhasználó a Report Abduction gombra nem kattint. és a levél elküldésére nem kerül sor automatikusan . Ekkor azonban a mailto -n ak kell az űrlapadatokat egy levélbe csomagolnia. Valahogy tehát tudnod kell irányítani a w ebes űrlap elküldését. O w en űrlapja addig tökéletesen megfelel.Az igazi há­ tulütő pedig az. Y<* L S o r j How Ion* w«re "Tun did ihej dn to you? Az űrlap csodás . hogy az űrlapadatokat egy e-mailbe csomagold. Ehhez pedig a figyelmedet az ügyfélről (HTML. AHem Abducted M e . im fw m a i_ _ .. . A HTML-űrlapkód rendben van.R eport an A bducüo„ i Jtvr nanic: Wta tejtxir ctfufl addrc*? itnf d boppeo? t>*ra clh B «c » « : H ouavrfki . amikor is minden törlődik! Havcjmj « t í » you m ost itt vagy ► 9 .) a kiszolgálóra (PHP) kell fordítanod. hogy a felhasználónak magának kell elküldenie az e-mailt ahhoz. Egészen pontosan a PHP-re lesz szükséged ahhoz.azt a felhasználó számítógépén. vagy nem ..Keltsd életre a statikus oldalakat! O Igen. az alapértelmezett levelezőprogramban kell létrehozni.

más néven az ÜGYFÉL ^ A kiszolgáló visszaadja a kért weboldal HTMLkódját. a kitöltése és a feldolgozása teljes egészében a felhasználó w ebböngészőjében történik. Itt fut Owen webkiszolgáló szoft vére. amelyen az űrlap található. 10 1.ez a kiszolgáló feladata. Bár a report . Q A felhasználó levelezőprogramja létre­ hoz egy e-mailt az űrlapadatokkal de azt a felhasználóra bízza. Hm. A kiszolgáló soha nem nyúl a m ailto -t használó webes űr­ lapokon beírt adatokhoz. hogy kitalálja. Az ügyfél nem képes űrlapadatok elküldésére . és benyújtja. a böngésző (az ügyfél!) egyedül kell. I n fut a számítógép böngészőprogramja.ügyféloldal és klszolgálóoldal . A HTML az ÜGYFÉLEN működik O w en űrlapja tiszta HTML-kódot tartalmaz.html weboldal egy webkiszolgálóról származik. ^ M o s t el s z e re tn e m küldeni Owen ű rla p já t a fe lh a s z n á ld á lta l b e írt a d a to k k a l. hogy va­ lóban elküldi-e Owennek. hogy kérje meg a felhasználó levelezőprog­ ramját egy e-mail létrehozására. más néven a KISZOLGÁLÓ. A felhasználó kitölti az űrlapot. A kiszolgáló feladata itt arra korlátozódik. hogy a w eboldalt kézbesítse a böngészőnek. am elyben egy mailto űr­ lapm űvelet kísérli meg e-m ailben elküldeni az űrlapadatokat. Owen „R e p o rt an A b d u c tio n ’ w e b o ld a lá t s ze re tn é m . hogyan küldje el e-mailben az űrlapadatokat. A A böngésző Owen weboldalát kéri. ^ A <form action> elem arra utasítja a böngészőt. Nekem i t t sem m i dolgom . fejezet . Amikor a felhasználó benyújtja az űrlapot.

és készen is van! A PHP-kód létrehozza és elküldi neked az e-mailt. ás m agam küldöm el az e -m a ilt. átadva az űrlapadatokat egy a kiszolgálón található PHPparancsfájlnak. hogy észrevétlenül elküldi neked azokat e-mailben. wen garantáltan szépen Jelöld be. a Report Abduction gombra kat­ tint. és elkül­ di az űrlapadatokat Owennek. A A kiszolgáló HTML formátumú meg erősítést küld a böngészőnek. és benyújtja. m ost itt vagy > 11 . ^ A kiszolgáló a weboldal HTML-kódjával válaszol. M ajd én feldolgozom az u ria p a d a to k a t. hogy m egszerezd a felhasználó által az űrlapra beírt adatokat. 0 % A böngésző Owen weboldalát kéri. hogy szerinted hová tartoznak a PHP-parancsfájlok: | | Ügyfél Kiszolgáló [ Mindkettő | j Egyik sem formázott e-m ailt kap. majd egy megerősítő oldalt állít elő és jelenít meg a felhasználó számára.Keltsd életre a statikus oldalakat! A PHP a KISZOLGÁLÓN működik A PHP úgy teszi lehetővé. A fel­ használó beírja az elrablása történetét. Owen „R e p o rt an A b d u c tio n ’ w e b o ld a lá t s ze re tn é m . A felhasználó kitölti az űrlapot. A PHP-parancsfájl előállít egy megerősítő HTML-oldalt.

Nézzük meg közelebbről.a p h p kiszolgálóoldali nyelv A PHP-parancsfájlok a kiszolgálón futnak A PHP-kódok a kiszolgálón futnak.php fájlkiterjesztésű PHP-parancsfájlok (szkriptek) tárolják azokat. hogyan változtatja meg egy PHP-parancsfájl O wen w ebes űrlapjának feldolgozását: O A böngészőügyfél egy HTML-weboldalt kér.és CSS-kódot egyaránt tartalmaznak. mire a böngésző átadja az űrlapadatokat egy a kiszolgálón található PHP-parancsfájlnak. miután be­ fejezte a m űködését a kiszolgálón. a végeredm ény mindig tiszta HTML és CSS lesz. és benyújtja. Valójában am ikor a kiszolgáló egy PHPparancsfájlt futtat. mivel HTML. A Report Abduction gombra kattintás benyújtja az űrlapadatokat a kiszolgá­ lón található PHP-parancsfájlnak. és általában . ami esetünkben a Report an Abduction űrlap. Alién* A bducted M e s-'u.-c )M «wy »*•>«' * Ö £ ÍC 0Ó ‘ FMMM* report. A PHP-parancsfájlok gyakran nagyon hasonlítanak a szokványos HTML-weboldalakra.html Hwl* J»* o m *** \ «o md ym«• to u } id o A kiszolgáló visszaadja a HTML-weboldalt. o A felhasználó kitölti az űrlapot. tehát m inden PHP-parancsfájl végsősoron HTML-lé és CSS-sé alakul. .

php «1 a böngészőben.Keltsd életre a statikus oldalakat! A PHP kiszolgálóoldali programozási nyelv . iíto weboldalt lát. Az e-mail megérkezik Owen levelesládájába.p h p Q A böngésző megjeleníti a megerősítő weboldalt. az oldal ezen a ponton tisztán HTML-böl áll rep o rt. amely e-mailt küld. O A PHP-paranesfijl a kiszolgálón fut! A kiszolgáló egy tisztán HTML-ből álló weboldalt ad vissza. amelyet a PHP-parancsfájl állított elő.p h p A felhasználó egy megeró'- ^ A kiszolgáló futtatja a PHP-parancsfájlt. és előállít egy megerősítő weboldalt. o Owen megkapja az e-m ailt. Aiiens A bducted M e . Bar az oldal nevének végén .R eport an A bduction Y ou « b o n c rd fa* N ovem ber maS n o t f a J 1 U *ux W ® p « 4 d o »? » y o u r a m U « t a r * a i i m « ibevnaüfcntffl -cax rep o rt. m ost itt vagy ► 13 .tehát egy webkiszolgálo'n fut.

az űrlap­ művelet a report .a form action jellem ző Az űrlapot a < fo rm > elem action jellemzője kapcsolja egy PHP-parancsfájlhoz.php.php parancsfájlt indítja el a kiszolgálón az űrlapadatok fel­ dolgozásához. és m inden <form> elem nek van egy action (művelet) jellemzője. Űrlapot a HTML <form> elem ének használatával készíthetünk. amikor az űrlapot benyújtják reportphp 14 1. akkor az ezt a parancsfájlt az űrlaphoz kapcsoló <form> elem így fog kinézni: < fo rm a c tio n = " r e p o r t . Tehát ha O w en PHP-parancsfájljának a neve report: . R e p o rt an A bductio n < /ti? . Amikor a felhasználó a Report Abduction gom bra kattint az űrlapon. fejezet . amelyiknek a nevét értékül adták az action jellemzőnek. és a parancsfájl ennek hatására indul el. amikor az űrlapot benyújtják. A webkiszolgáló azt a parancsfájlt indítja el az űrlap feldolgozásához.p h p " m e th o d = "p o s t"> Ez a PHP-parancsfájl fájlneve.l e > A < f o r m > elem action je l­ lemzője indítja el a PHPparancsfájlt a kiszolgálón.

php-re végződik. I C l De hát minden weboldal . amit a PHP-kód futtatása eredm ényez a kiszolgálón. A HTML. A kiszolgáló te­ hát egy PHP-kódot futtat. a böngésző ezt a kódot soha nem látja. ami vi­ szont tiszta HTML és CSS.php. mielőtt a böngészőhöz kerülne. nem? V \ De igen. hiszen a rövidítésen belül maga a PHP rövidítés is szerepel. de HTML-kóddá alakul. am elyet HTML-lé alakít. mert az oldal a kiszolgálón eredeti­ leg PHP-kódként kezdi a pályafutását.beleértve a . hogy a webböngészőm egy olyan oldalt mu­ tat. hogy mi is van bennük.és CSS-állományokat. A PHP-fájlok azonban mások.e s s . és így tovább . Annak ellenére. m ost itt vagy ► 15 . mert olyan kódot tartalmaznak. csakhogy nem mindegyiket dolgozza fel. A w ebhelyek minden - . aminek a neve . de a jelen­ tése időközben PHP: Hypertext Processor-ra (PHP: hiperszöveg-feldolgozó) változott. mie­ lőtt az oldalt elküldené megjelenítésre a böngészőnek.Keltsd életre a statikus oldalakat! Nincsenek hülye kérdések J V M it jelent a PHP? V !A PHP egy betűszó.php fájlok PHP-kódot tartal­ maznak. Hogy is van ez? V !Ez azért lehetséges. anélkül. A böngésző nem a PHP-kódot kapja meg. hogy foglalkozna vele.fájlját a kiszolgáló tárolja. . csak azt a HTML-t. Ügyes? Bosszantó? Döntsd el te. az oldal tiszta HTML. amely eredetileg a Personal Home Pages (személyes honlapok) rövidítése volt. amelyet a webkiszolgáló fut­ tat és feldolgoz. valamint a képfájlokat közvetlenül küldi el az ügyfél­ böngészőnek. .html fájlokban tárolt tiszta HTML-oldalakat is . Ez persze egy önhi­ vatkozó betűszó. hanem a PHP-kód futtatásának eredményét. hogy bár a .a kiszolgálóról származik.h tm l. Ez azt jelenti.

J <head> <title>Aliens Abducted Me . I ?> </body> </html> Ez a PHP-parancsfájl a normál weboldalakhoz hasonlóan a megnyitott HTML-elemek bezárásával végződik. itt kezd érdekes lenni a dolog — jff kezdődik a tényleges PHP-kód.. $alien_description = $_POST[’ description’]. $fang_spotted . Ez a PHP-kódrész rögzíj $how_long = $_POST[*howlong’]. $fang_spotted = $_POST[’fangspotted’]. $email = $ POST[1email1].az első php-parancsfájlod Az űrlapadatok elérése a PHP segítségével O w ennek tehát egy olyan PHP-parancsfájlra van szüksége. 16 1. fejezet . $how_long .. echo ’Your email address is ' . hogy egy PHP-parancsfájl szok­ ványos HTML-elem eket és -jellem zőket tartalmazzon. $when_it_happened = $_POST[1 whenithappened1]. echo ’ and were gone for ’ .Report an Abduction</h2> P H P . 1<br />’. $when_it_happened. $alien_description . hoM meg lehessen jeleníteni I azokat egy megerősítő oldal részeként. ’<br echo ’ Describe them: ' . Készítsd el neki! Ne aggódj. ké­ sőbb m indent elmagyarázunk: <html> A PHP-parancsfájlok gyakran ugyanúgy kez­ dődnek. amely megbízha­ tóbban el tudja juttatni hozzá az idegenekkel kapcsolatos információkat. echo ’ You were abducted ’ . echo ’Thanks for submitting the form. mint a H T M lwebotdalak.cbr />'.Report an Abduction</title> </head> Ez az egész kódblokk <boay> <h2>Aliens Abducted Me . Itt a PHP segítségével | HTML-kódot állítunk e i j az ¡alapadatokból. még nem kell m indent értened. $email. echo 'Was Fang there? ’ . ti az űrlapadatokat. Teljesen normális. mint a mailto. 1<br />’.a parancsfájl többi része azonban normál H TM L <?php Na.

.. *.. ezért először meg kell nyitnod a r e p o r t . Ez a parancsfájl fogja feldolgozni O w en w ebes űrlapját. htm l oldalt egy szövegszerkesztőben. ________ Dc^cnWihcm. és kattints a Report Abduction gombra. hogy egy PHP-parancsfájl segítségével dolgozza fel az űrlapadatokat! Hozz létre egy új szövegfájlt report ..php parancsfájl PHP-forráskódja.happened. ?> m ___________ 7 r a r . A PHP-parancsfájl most még nem kapcsolódik az űrlaphoz.s it io Q a i//g u * lDDxcei/?/ftil .w 3 .h tm l oldalt egy w ebböngészőben.. $ahcn_descriptk>n: ccho' W «S Fang Your email address is .Keltsd életre a statikus oldalakat! Tesztút Módosítsd Owen űrlapját.. php" m ethod = " p o st" > Nyisd meg a r e p o r t . h t m l ' g / 1 999 x <head> M 1 1l 4 n « on* 0 ^ H p -o q u iv »r nn « « s i« vote (or me . vagy csak a report.Report an Abduction You were tbductcd' Swh«. és az űrlapm űve­ letet a m a ilto helyett a r e p o r t .«.... adj meg néhány infor­ mációt az idegenekkel kapcsolatban az űrlapon.php néven. Allens Abducted Me • Report an Abduction Share your story of alien abduction: First name: Last name: What is your email address? When did it happen? How long were you gone? How many did you see? Describe them: What did they do to you? Rave you seen my dog Fang? Aif N ¿ t í n & h w Y ' t M t g rcp tmf x o last November A lie n s A b d u a c d Aliens Abducted Me .. /m — ° ^ /h tn i. < bodyN -< h 2 > > li< a i < /h e a d > - *ep o rt “c t x o n K / t i t le> Anything else you want to add' "R^oort A bortion } A bductod Mo - f lO D o r.. coho and were gone for ■ 1 bá i on d w* on WM Yes O N o « m e about UfO --- .. «cport A iO < bduct I> /h2> Szerinted így kell működnie a PHP-parancsfájlnak? írd le..Reszort ar. és írd bele az előző oldalon látható kódot.. .. Aboucüor» report.. 0 r . t ‘ ?ypo' . Scmaii. hogy miért vagy miért nem./..htm l reportphp n9 jp g A használt böngészőtől függő­ en vagy egy zavaros szöveget tartalmazó tveboldal jelenik meg.php-re kell állítanod: < fonn a c t io n = " r e p o r t .. és hogy szerinted mi történik itt: m ost itt vagy ► 17 .

A leggyorsabban úgy állapíthatod meo ^ °9Y egy weboldal egy webkiszolgálóról Hl?i SZaf. hogy m . és hogyan kell azokat a böngésző számára értelmezhető HTML-weboldalakká alakítani. a PHP-parancsfájlokat hogy futhasson . mint egy PHP-támogatással rendelkező webkiszolgáló. Emlékezz vissza. fejezet . hogyan kell futtatni a PHP-parancsfájlokat. W. ^ ^ en te^plM t Webkiszola report. A helyi E l k e n t m egnyitott weboldalak U R L-je A PHP-parancsfájloknak egy webkiszolgálón kell futniuk.j e „h ttp:"-ve i kezdődik-e. A PHP-t ismerő webkiszolgálók tudják.ez a környezet pedig nem más.php-parancsfájlok elhelyezése a kiszolgálón A PHP-parancsfájloknak a kiszolgálón kell lakniuk! Hacsak nincs véletlenül egy m űködő webkiszolgáló a számítógépeden. helyben megnyitk atők egy webböngészöben. amelyek fájlrendszerből. egy webkiszolgálóról kell „m egnyitni". és lefut­ tatja a parancsfájlt. közvetlenül „Elraboltak az idegenek” űrlapot. A webböngészők semmit sem tudnak a PHP-ről. hogy a PHP egy a számítógépeden is kipróbálhatod programozási nyelv: megfelelő környezetre van szüksége ahhoz. Ez a PHP-parancsfájl a webböngésző számára csak egy rakás értelmetlen kód. 3ZÍl(' 6' hoM me9" 6 m 'zed. ezért nem képesek futtatni a PHPparancsfájlokat. php parancsfájl nem tud lefutni. A PHP-parancsfájlokat és a rájuk tám aszkodó w eboldalakat egy valódi webkiszolgálón kell elhelyezni. A webkiszolgáló viszont érti a PHP-kódot. a PHP-parancsfájlokat mindig egy URL-en keresztül.ndi9 8 J i l e : " elolaggal kezdődik 18 1. különben nem működnek. am ikor benyújtod az 9a 0 > ami ismer? a PHP-f. nem csak megnyitni egy parancsfájlt közvetlenül a helyi £ HTMl-weboldalaktóI eltérően.

hogy információt jelenítsen meg saját magáról. A függelékben utasításokat találsz a PHP beüzem elésére a webkiszolgálón. A fájlok feltöltése egy webkiszolgálóra valamilyen segédprogram . ahol a w eboldalak elérhetik azokat.k egy mappában 3 webkiszolgálón.css fang. hogy a webkiszolgálóm ismeri-e a PHP-t? M egkérdezheted a w ebes rendszergazdát vagy a weboldalaidnak helyet adó szolgáltatót. de ahhoz. például egy FTP-program segítségével tör­ ténik. m o s t itt vagy > 19 . Ez a kód arra utasítja a P H P -t. többek között a változatszáma.a webkiszol­ gálóra telepítve kell lennie a PHP-nek is.php style.html v report. A PHPparancsfájlok feltöltése a w ebkiszolgálóra nem igényel semmilyen varázslatot . ?> Most töltsd fel a test . függeléket. A PHP-fájlok gyakran HTML-fájlokkal együtt tárolódnak a webkiszolgálón. hogy futtatni lehessen őket. A webkiszolgálón általá­ ban egy mappa tárolja a legtöbb (ha nem az összes) webes fá jlt. de magad is végrehajthatsz egy rö­ vid ellenőrzést. és írd bele az alábbi kódot: < ? p h p o Ha a webkiszolgálód nem ismeri a PHP-t. report. Ha a kiszolgálóra telepítették a PHP-t. és írd be az URL-jét egy w ebböngészőbe. Nincsenek hülye kérdések Honnan tudhatom.rövidítése.) A le3tSbb PHP-parancs fái! mas fáJlokkal együtt tárolod. Hozz létre egy szövegfájlt test . Bingó! Ne felejtsd el törölni a phpinfo() ó o amikor készen vagy.ebben az esetben azonban nem. phpinfo(). mindenféle részletes információ jelenik meg a PHP-ről.fájlátviteli protokoll . hogy senki mas ne láthassa. m ások azonban nem.php-t a webkiszolgálóra. a fájlokat fel kell tölteni egy webkiszolgálóra.csak egy olyan helyre kell tenned a fájlokat. Egyes webkiszolgálók alapállapotban tartalmaz­ zák a PHP-t. (Az FTP a File Transfer Protocol . A PHP-parancsfájlok feltöltése egy webkiszolgálóra önm agában nem elég .php néven. lapozd fel a II.Keltsd életre a statikus oldalakat! Töltsd fel a PHP-parancsfájlokat a kiszolgálóra! A PHP-parancsfájlok létrehozása és szerkesztése a helyi szám ítógépen tökéletesen rend­ ben van.jpg A képeket rendszerezési okok­ ból néha külön mappában tárol ják a webkiszolgálón .

Anything else you want to add ' Rep©« Abductior *---.Report an Afaduct. fejezet . php A Nade' »Unj?t**Yr<aJlQrecn com t*jt NovemDc^ 1 hus 1 or dozen» PHP-parancsta]I n iu iw dik.on______ Aliens Abducted Me .teszteld a php-parancsfájlt! report.— i — — 20 1. 0 ^ 0 M tem AbUucicd Me .Report an Abduction You were abducted last November and were gone for 11 hours Describe them: Was Fang there? no Your email address is alfc@theyreaDgrcen. és megjeleníti az űr­ lapadatokat egy megerősí tn weboldalon.corr.

hogy mi legyen a levélben. amelyik elküldi a testrabló idegenekkel kapcsolatos információkat Owennek.php parancsfájlból még hiányzik az a kódrész. Alihoz tehát. hogyan m űködik az eredeti report. A report. hogy levélküldési képességgel ruházhasd fel O w en report. Ez azonban nem jelent gondot. így igaz. mert a PHP-nek van egy függvénye (vagyis egy beépí­ tett. Idót kérek1 Még azt sem tu d ju k . és m á r előreszaladunk a levélküldésre? Helló! Nem lesz ez így túl sok egyszerre? Q Igazad van. és meg kell értened a pa­ rancsfájl jelenlegi változatának m űködését.php parancsfájlját. kicsit m élyebbre kell m erülnöd a PHP-ben. hogy többre legyél képes a PHP-vel.php p a ra n c s fá jl. most itt vagy ► 21 . többet is kell tudnod a PHP-ről. ami g o n d o sko d ik az ű rla p a d a to k e-m ailben történő elküldéséről.Keltsd életre a statikus oldalakat! KJasszI M o s t m á r c s a k némi P H P -kódra van szükség. amelyet elektronikus levelek küldésére használhatsz. és a PHP segítségével elkészítheted és elküldheted. Ahhoz. Csak azt kell kitalálnod. újrahasznosítható kódelem e).

hogy a kiszolgáló HTML-ként átadná az egészet az ügyfélböngészőnek.hogyan lesz a p h p -k ó d b ó l html? A kiszolgáló HTML-lé alakítja a PHP-t A PHP-parancsfájl m űködésének m egértéséhez igen lényeges. 5. amely az űrlapra be­ írt adatokat tartalmazza. hogy tudd. am ikor lefut a kiszolgálón. 2. hogy mi történik a parancsfájllal. Ez a HTML-kód változatlanul kerül a böngészőhöz.és HTML-kódot egyaránt tartalmaz. Ezt a PHP-kódot a kiszolgáló fu tta tja . ech o ech o ech o ech o echo ech o További statikus HTML a kiszolgáló változtatás át a böngészőnek. 1. php parancsfájljában PHP-kód állítja elő a m egerősítő oldal HTML-tartalmának nagy részét. 6. és a PHP futtatására és HTML-lé alakítására az előtt kerül sor. O w en report. A legtöbb PHP-parancs­ fájl PHP. és olyan HTML-kódot á llít elő'.php . 4. report. a PHP-részt körülfogó HTML-kód pedig változatlan form ában kerül a böngészőhöz. 3.

com rep o rt.p h p ancsfájl végeredtiszta HTMLamely dinamikusan A . Was Fang there? no Your email address is alfn® thcyrcailgreen.R eport Abduction _______ Aliens Abducted Me .<br /> You were abducted last November and were gone fo Describe them: <br /> Was Fang there? nocbr /> Your email address is alfn@theyreallgreen. ami lehetővé teszi.com a kiszolgálón. hogy olyan dolgo­ kat foglalj bele.nem változik Ezt a HTML-kódot menet közben a PHP-parancsfájl á llítja elő.Report an Abduction You were abducicd Iasi November and were gone for 11 hours Describe them.Q O ___ S A)* n s Abdu c tc d Me . most itt vagy ► 23 .Keltsd életre a statikus oldalakat! Statikus . m int az imént be­ ír t ürlapadatok Thanks for submitting the form.

M i. fejezet .c b r / > ' . de igyekeztünk egyszerűsíteni a dolgot. $ f a n g _ s p o t t e d = $ _ P 0 S T [ ' f a n g s p o t t e d '] $ e m a il = $_PO ST[ 1e m a i l ’ ] . $ a l i e n _ d e s c r i p t i o n . Az alábbi kód fogja az űrlapadatokat. k . A ?> cím ke a nyitó <?php párja.S( ezért a HTM l-kódot le kell zárnod.— Ezzel zárjuk le a PHP-kódot . p h p Igen. '< b r / > ' .R e p o r t an A b d u c tio n < /h 2 > re port. hogy az oldalon bezárjuk a korábban megnyitott HTML-elemeket: < /b o d y > < /h tm l> N . hogy kitörjünk a HTMLből. Ez a PHP-kód ille szti be . egy < m e ta > címke. amit közvetlenül visszaadhatunk a w ebböngészőnek: ech o ech o ech o ech o ech o ech o ’ Thanks f o r s u b m i t t i n g t h e f o r m . Lássuk. $ w h e n _ it_ h a p p e n e d = $ _ P 0 S T [ 1 w h e n ith a p p e n e d ’ ] . 1< b r / > ' . 'Was Fan g t h e r e ? ' . és egy PHP-kódrészt zár le.R e p o r t an A b d u c t i o n < / t i t l e > < /h e a d > <body> < h 2 > A lie n s A b d u cted Me . „ „ t ó e lf . le jt . legyenek azok számok. ideális esetben szerepelne itt a dokumentumtípus (DOCTYPE). * 24 7. szövegek vagy más­ fajta adatok. $h ow _lon g = $_POST[ ’ h o w lo n g ' ] . változókat a böngészőnek elküldött HTML-kódba. A PHP-ben a változók teszik lehetővé az értékek tárolását. <?php Innen kezdve PHP-kóddal lesz dolgunk.innen kezdve ismét szokványos HTM t-lel van dolgunk. Minden PHP-kódsor egy-egy urlapmezo adatait rendeli egy új változóhoz. $h ow _lon g .owen php-parancsfájljának anatómiája Owen PHP-parancsfájlja részekre bontva A r e p o r t . és fejest ugorjunk a PH P-kódba. Az ech o parancs olyan HTMLkódot küld a kimenetre. ?> < — ----------------. ' < b r / > ’ . $ w h e n _ it_ h a p p e n e d . A <?php cím ke egy PHP-kódrészt nyit. $ e m a i l . és így tovább. tiszta PHP. 'Y o u r e m a il a d d r e s s i s 1 . Készen állunk rá. ez meglehetősen m ini­ mális HTML-kód. és (je le n pillanatban) az a feladata. ami ezt a cím két követi. és külön-külön változókba írja azo­ kat. tehát minden. ' and w ere gone f o r ’ . Ez a rész csu pán felállítja a felép íten ­ dő oldal vázát néhány olyan HTM L-elem m el.php parancsfájlt a Report an A bduction űrlap indítja el. hogyan! A kód első része tiszta HTML. 'D e s c r i b e th em : ' . vagyis itt visszatérünk a szokványos HTML-kódhoz. Erről van szó! Az imént létrehozott változókat már munkára foghatjuk. hogy később könnyen elérhetők legyenek. legalábbis amíg a záró ? > címkéhez nem érünk. 'Y ou w e re a b d u c te d ’ . $ a l i e n _ d e s c r i p t i o n = $_PO ST[ ' d e s c r i p t i o n 1] . Most már csak annyi van hátra. Itt kezd érdekes lenni a dolog. és beszúr­ hatjuk a dinamikusan előállított HTML-kódba.$ f a n g _ s p o t t e d . am ire m inden oldalon szükség van: <htm l> <head> < t i t l e > A l i e n s A b d u cted Me . hogy az űrlapadatok felhaszná­ lásával egy m egerősítő w ebold alt hozzon létre.

php kiterjesztéssel ellátni. hogy nem felejtetted-e el a pontosvesszőt. mint hinnéd. am e­ lyek minden PHP-parancsfájl esetében érvényesek.<br Ha egy kód nem működne.php-t írni .) kell végződnie. ^ --^ $email = $_POST [ email' . ellenorizd. e f A PHP-ben a változóneveknek egy dollárjellel kell kezdődniük. É fa lft j|p report.p h p parancsfájlja rávilágít a PHP nyelv néhány alapvető szabályára. írd ide őket: parancsfájlon belül. amelyek a változókra vonatkoznak? Ha igen.html helyett.Keltsd életre a statikus oldalakat! Néhány PHP-szabály az élethez a kódoláshoz O w en r e p o r t . -----------? > < -------- n t o U t f t a u ő r l PHP 9 *1 0 « . most itt vagy ► 2 5 . ami inform ációt tárol a PHPA report. célszerű a webkiszolgálón a fájl nevének végére . Vizsgáljuk meg őket közelebbről! g f A PHP-kódokat mindig a <?php és ? > címkék zárják körül. ' ] A dollárjel világosan azonosít­ ja. VioflV ho ®r az utasítás. de jó ötlet a PHPparancsfájlok nevét .php parancsfájlban használt változókat megvizsgálva észreveszel más PHP-szabályokat is. <?php ^ ^ A legtöbb PH Ida jön a PHP-kód. Gyakrabban előfordul. ^ e r Ha egy weboldalon PHP-kód található. echo 1 Thanks fór submitting the form. h jy to(J pNp B f Minden PHP-utasításnak pontosvesszőre (. hogy változóról van szó. A pontosvessző tudatja a PHP-vel.php Nem kötelező.

a kód m űködésképtelenné válik. illetve szóközt. 26 7. és biztosan találkozni fogsz olyan PHP-programokkal. ha érvényes változóneveket szeretnél adni: A változó olyan tárolóf amelybe adatokat helyez­ hetsz. A dollárjel utáni első karakter egy betű vagy egy aláhúzásjel (_) le­ het. Fogtam! N „ « M M ■« ‘f * ? _ Jen vóltoíóeév elejét. am elyek biztosan gondot okoznak. ^ A több szóból álló változónevekben a szavakat aláhúzásjellel — válaszd el. am elyek nem kötelezőek ugyan. hogy ezek a szabályok csupán egy ajánlott kódolási stílust határoznak meg .és nagybetűk különbözősége is számít. fejezet . mégis megfelelően működnek. e f Az _ és a $ kivételével semmilyen különleges karakter. hogy egy dollárjellel kell kezdődniük. i s $fang-spotted Nem érvényes! A kötőjelek nem megengedettek a PHPváltozónevekben. de a kódolás során ajánlott betartani őket. Ezeket a sza­ bályokat kell követned. Minden változónak egyedi neve van. bölcs PHP-programozóktól. 1 Az utolsó két szabály figyelmen kívül hagyása nem akadályozza meg a kód mű­ ködését. Ennek az az oka. az utána következő karakterek pedig betűk. to te le n - SÍ A változóneveknek legalább ecjy karakter hosszúságúnak kell lenniük. am ikor nevet adsz a változóidnak. a PH P-változónevekben a kis. de vannak további szabályok is. ha fi­ gyelm en kívül hagyod őket. Ezek között vannak nyelvtani szabályok. De ez még nem minden: más fontos szabályok is vannak. illetve számok lehetnek. w h e n -it h ap p en ed — A Érvényes $ h o w _ _ lo n g Nem érvényes! A PHP-változóneveknek egy dollárjellel ($) kell Ha nem követed ezeket a szabályokat. Kezdjük a hivatalos szabályokkal.változó-elnevezési szabályok Megtalálni a tökéletes változónevet Azon kívül. amelyek nem kö­ vetik ezeket a szabályokat. am elyeknek a m egszegése m űkö­ désképtelenné teszi a kódot. mert a PHP-kódot egy ség esebbé és könnyebben olvashatóvá teszik: dodniiik. SÍ Az első karakternek dollárjelnek ($) kell lennie. aláhúzásjelek. míg más szabályok csak jótanácsok a régi. |el kell kezdődni»! és nem tartalmazhatnak szóközöket. $ e m a il Erve'nyes Nem érvényes! A PHP-va'ltozónevek nem tartalmazhatnak kötő­ jelet. illetve szóköz nem lehet a változónevek egyik részében sem. / \ P H P -b e n a v á lto z ó k n e ve in e k egy d o lU r je l- A változóneveket csupa kisbetűvel írd. am elyek a változók elnevezésére vonatkoznak.a saját vál­ tozóid létrehozásakor és elnevezésekor azonban jó szolgálatot tehetnek.

Változókban tárol­ lyos módja a PHP használatának. K * Szóval keverhetem a kis. Valójában gyakran szükséges gyük például a Report an Abduction egy-egy PHP-kódrészletet a HTMLparancsfájlban használt $ e m a il válto­ kódba ékelni. logi­ kus. hogy zunk. például egy bevásárlókosár megrendeléseinek összege. keli engedélyezni. verhetősége alól a nagy kivételt a vál­ nincs korlátozás arra nézve. amely az érték hiá­ K i Ha a webkiszolgáló mindig tiszta HTMLnyát jelzi. vagy $ e M a il. és következetesen pontos (tizedesjegyeket tartalmazó) számok. A PHP-ben minden K i Olyan PHP-kóddal is találkoztam. és ezen a PHP sem változtat. tehát a legtöbb utasítás­ ban megúszhatod. a számadatok változónév betűállás-érzékeny. például olyan dol­ gokat szúrj be. A PHP-parancsfájlokat ugyanúgy kell kérelmezni. hogy minden web­ oldal kétirányú kommunikáció ered­ ménye: a böngészőtől kérelem érke­ zik a kiszolgálóhoz.mutatják? a böngészőknek. miért a PHP-parancsfájl nevét . a webkiszolgáló pedig válaszol a kérelemre. hogy a PHP-utasításokat kisbetű­ vel vagy nagybetűvel írom? V . amelyek adatok gyűjteményét nevekről hamarosan további részlete­ megengedett ugyan. hogy e ch o . tehát erre a változóra nem értékét állítod be.például hogy HTML-weboldalakat szolgáltat az NULL-nak tekintendő. sőt sok esetben muszáj is dik. hanem pedig lehetnek egész vagy lebegő­ lényeges. A PHP tehát lehetővé teszi. aminek igaz/hamis) értékeket. ha kevered a kisés nagybetűket: amikor tartalmat íratsz ki. meg nem is. mint a mai dátum. hogy a „PHP-oldalak” URL-je miért a PHP-parancsfájl nevét mutatja. V ¡Emlékezz vissza.és nagybetűk ke- V ¡Azon kívül. hogy ne statikusan.és nagybetűket a PHP-kódokban (még ha ez rossz kódolási szokás is)? önálló sorba kell kerülniük. A legtöbb PHP-programozó a PHPkód túlnyomó részét kisbetűvel írja ezért láthatod az e ch o formát K ^ A HTML-fájlokba ágyazott PHP-kódoknak a könyv összes példájában. A szokványos és PHP-kódot is tenni? A tömbökre a fejezet későbbi részé­ <?php címke viszont mindig műkö­ ben még visszatérünk. például egy HTML-elem jellemzőjének részeként? V ¡Nem egészen. hogy a rövid nyitócímke (< ? ) adatok gyűjteményét társítják az ada­ működjön. A PHP csak azt teszi lehetőm ost itt vagy ► 27 V . hogy $ EMAIL V ¡T erm észetesen . az URL-ek nem rendeltek értéket. ezért célszerűbb azt használni. Ebben a változónévben számít HTML-elem valamelyik jellemzőjének hatnak? a betűállás. Léteznek úgynevezett töm­ hivatkozz rájuk a kódban. Nem véletlen tehát. míg az objek­ ‘ Totálisan. vagy beágyaz­ hatok egy HTML-kódsorba is. Alihoz. példáuk amikor egy K i A PHP változói másfajta adatokat is tárol­ zót.php . vé. ECHO vagy EchO. A PHP nagyrészt nem tesz különbséget a kis. hanem menet közben módosítsd azt. ha egy URL egy . Ez a magyarázat ar­ ra. A kére­ lem alapját az URL képezi. egy adatbázisból kiolvasott adatok. mert így biztos lehetsz benne. amelyek ket is megtudhatsz. pél­ dául egy űrlapműveletből hivatkozott URL-en keresztül. Ez teljesen szabá­ hivatkozhatunk úgy. vagyis a PHP-parancsfájl által előállított kód.Keltsd életre a statikus oldalakat! Nincsenek hülye kérdések K i Számít.igen is. tumokkal a 12. A hagyomány azon­ ban az (és melegen ajánlott követni). írhatod például azt. hogy a parancsfájlokban következete­ sen használják a kis. aminek a hatására ott egy PHP-kód fut le. hogy a HTML-tartalmat menet közben módosítsd. Mivel a legtöbb PHPparancsfájl HTML-kódot állít elő. akkor ¡Azért. vagy más programozott módon módosítják a HTML-kódot. illetve objektumok. vagy éppen számított értékek. Létezik egy NULL nevű külön­ a kód működőképes lesz. de nem ajánlott. fejezetben foglalko­ így' tenni. hogy egy oldal PHPkóddal teleszórt HTML-t tartalmaz. hogy a változókat körülte­ <?.és nagybetűket. mert a webkiszolgáló lényege. Helyes ez a megoldás? kintően nevezd el. egy kiszolgálóbeállítást K i Tényleg lehet ugyanabba a fájlba HTMLtokon műveleteket végző kódhoz. és ez ként ágyazhatod be őket a HTMLa létrehozott adattárolókat érinti. míg a vá­ lasz a kiszolgálótól visszaérkező tarta­ lom.php fájlra hivatkozik a kiszolgálón. mint a szokványos HTML-weboldalakat: egy a böngésző­ be beírt vagy egy másik oldalról.és nagy­ betűk között. A változó­ ¡Nem igazán. hogy mi­ tozónevek jelentik a PHP-ben. tervezéskor hatá­ rozd meg egy weboldal HTML-kódját. Ve­ kódba. A kis. weboldal. Technikai értelemben bök is. ezért a nyitócímkéje nem < ? p h p volt. K i Miért szükséges ez? leges adattípus is. Ha egy változóhoz tehát kódot ad vissza a böngészőnek. Az egyenlet másik oldala a kiszolgáló vá­ lasza. ami végered­ ményben tiszta HTML-tartalom vissza­ adását eredményezi a böngészőnek. tárolják. Nagyon gyakori. és ezek a PHP-kódok fontos adatokat szúrnak be. hatsz például Boole-féle (logikai. hogy a kód nem PHP hanem HTML lesz. hogy a PHP-kódokat V V <?php és ?> címkék közé kell zárni.

Report an Abduction You v.flá u * ik' f leírását. % - f |/> ^ Aliens Abducted Me .Report an Abduction Share your story of alien abduction: First name: Last name: W hat is your email address? When did it happen? How long were you gone? How many did you see? Describe them: W hat did they do to you? Have you seen my dog Fang? Ndr ae lAiX Novt'nfcer 11 hours ¿**ed rnt about UFO regvUtons . va g y a p a ra n c s fá jlla l van v a ­ lam i g o n d . A . h y afelhasználó Yes 0 No 0 Megadta az idegenek .k u p o n an A b d u ti. .crc abducti . . Repon Abduwton^ hiányzik a megerősítő weboldalról. d e a leírás észrevehetően Anything etse you want to add.Repon ah Abduction Aliens Abducted Me ....pótoljuk owen hiányzó adatait Vágy a PH P memóriája nem tú l o J<5.Mast November and were gone for 11 hours Describe them: W as Fang there? no Y our email address is alfh@thcyreailgreen.e g y s e ű rla p a d a to k hiányoznak..c n Aliens Abduct/?d Me .com 28 1. fejezet .

$how_long . </body> </html> report._happened = $how_long = $_PO ST ['whenithappened ']. '<br />'. $enail. echo 'Your email address is ' . $ _ P O S T ['howlong']. Salien_description .Report an Abduction</h2> <?php $wnen_it. echo ' and were gone for ' . echo 'Was rang there? ' . echo 'You were abducted ' .php parancsfájljában van egy kis gond az idegenek leírását tar­ talmazó űrlapadattal. $when_it_happened. hogy mit csinálnak. és írd le. echo 'Thanks for submitting the fcrm. $ _ P O S T ['fangspotted' ] $email » $_POST [ 'email’]. '<br />'. hogy hol lehet a hiba? <html> <head> <title>Aliens Abducted Me . S _ P O S T ( 'descript Salien_description = $fang_spotted - ion']. $fang_spotted . echo 'Describe them: ' .Keltsd életre a statikus oldalakat! v Hegyezd ki a ceruzád! Ow en r e p o r t . '<br />'.php m ost itt vagy ► 2 9 . Van valamilyen ötleted. Karikázd b e azokat a kódsorokat.<br />'.Report an Abduction</title> </head> <boay> <h2>AIiens Abducted Me . am elyek szerinted a problém át okozzák.

és az $alien_description nevű PHP-változóba helyezi. m egoldás an Abduct ens Abducted Ez a kódsor fogja az idegenek leírását a HTML-urlapmezöböl.ith i w 1P tio n '] Semaii Ez a kód összefűzi az idegenek leírását ne'mi kiegészítő szöveg gél és HTML-kóddal.S_ POST [' her. és az égé szét kiírja a böngészőben.fejezet . ech° ’Thanks submitt Swhen riPtion r e m a il < /b o d y > </hLml> ^Port.tea ...Hegyezd ki. POST['howlona'1• 3n Abd u ctio n < /h 2 > .php 1.

. mit csinál rosszul a fenti kód? m ost itt vagy ► 31 . hogy tényleg elraktározza a ' i i t t l e g re e n mén ' szöveget az $ a l i e n _ d e s c r i p t i o n változóban. függetlenül a próbálkozásunktól. Agytorna ------------------------ Az idegenek leírását tartalmazó űrlapadat hozzárendelése az $ a l ie n _ d e s c r i. hogy csináltunk egy másikat . A problémát azonban úgy oldottuk meg.k „ „ k . hogy az űrlapadat nem jut el hozzá. Az idézőjelek lehetnek egyszeres idézőjelek (aposztrófok) vagy kétszeres (sima) idézőjelek. hogy egyszerűen hozzárendeljük a várt karakterláncot az $ a l i e n _ d e s c r i p t i o n vál­ tozóhoz. amelyek hasonlóan tárolják az információkat. Az $ a l i e n _ d e s c r i p t i o n változó tehát üres marad.p t io n változóhoz valamiért nem működik: $ a lie n _ d e s c r ip tio n = $ _ P O S T [ ’ d e s c r i p t i o n 1] . le ír*. hogy az űrlapon mit írt be a felhasználó./ Ez a változó neve. hogy re n d e lje a jobb oldalon álló érteket 3 bal oldalon álló változóhoz. utasítja hozza a P rtP -t.-. Mivel az $ a l i e n _ d e s c r i p t i o n változó üres. más néven ka­ rakterláncokat. S a lie n d e scrip tio n S a lie n _ d e s c rip tio n A parancsfájl kijavításának egyik módja az lehetne. mindig idézőjelek közé kell zár­ ni. mint egy csésze a kávét. Mit gondolsz. hogy adatot rendeljünk hozzá. tudjuk. függetle­ nül attól. valahogy így: $ a lie n d e s c r ip tio n = ' l i t t l e A z e g y e n lő s é g je l a rra g reen m en '.ez a kód azt eredményezi. . hogy az idegenek leírása mindig ugyanaz lesz.Keltsd életre a statikus oldalakat! A változók a parancsfájlok adatainak tárolására szolgálnak A PHP változói olyan tárolók. Ez a kód annyiból m űködőképes. A PHP-ben a szövegrészieteket. sml ltM «• Sajnos a csészénk jelenleg üres.

Emlékszel erre a kódra? $w hen_it__happened = $_PO ST[ ’ w h e n ith a p p e n e d '] .A probléma gyökere a $_P0ST-ban keresendő. A $_POST elején látható dollárjel árulkodó. hogy elérd az űrlapada­ tokat.php parancsfájlnak elküldött összes ada­ tot tárolja. miután a felhasználó kitöltötte az űrlapot.. < --------------------------$ a l i e n _ d e s c r i p t i o n = $_PO ST[ ’ d e s c r i p t i o n ' ] . hogy it t az űrlapra beírt e-mail címet olvassuk ki e's tároljuk az $email változóban. Tehát az űrlap minden m ezőjének adatát a $_POST-on keresztül ér­ jük el. $h ow _lon g = $ _ P 0 S T [ ’ h o w lo n g ’ ] . íönbjéggel.. és csinálhass velük valamit. és a Report Abduction gombra kattintott. $ e m a il = $ POST[ ' e m a i l ' ] . Owen esetében a r e p o r t . ami arra szolgál. Alihoz tehát. át kell verekedned magad a $_POST-on. De pontosan mi is ez a $_POST? Egy változó? .a $_POST egy tároló! Pontosabban egy w ebes űrlap adatait tároló helyek gyűjteménye. Az elrablás időtartamát tároló űrlapadatot a $boWJ o n g változóhoz rendeltük. hogy űrlapadatokat adjunk át egy parancsfájlnak. $ f a n g _ s p o t t e d = $ _ P 0 S T [ ’ f a n g s p o t t e d 1] .

amit szuperglobálisnak hívnak. tehát nem úgy hozod létre. Az íírlapbenyújtási módszer határozza meg. e d . and were gone for ' Describe then: ' . A $_POST már létezik. $ V > w _ lo n g i e n j d e s c r i p t i o n .Keltsd életre a statikus oldalakat! A $_POST egy különleges változó. ' < b r / > * . < b r .h o w l o n g . Ha a használt m ódszer a p o s t. </body> </html> A $_POST szuperglobális közvetlenül kapcsolódik a HTML-űrlap által használt űrlapbenyújtási m ódszerhez. és egy parancsfájl minden részéről elérhető. '< b r /> ' .nc r in!íyeiQ<« ő ­ li N v m e őt o e b r y doxetn httíc flreen m f n $ _ P O S T [ .php A „howlong" név az urlapmező < input> elemének name je l­ lemzőjéből ered. $ V i e n _ 1 1 __ha p p e r . '< b r /> a n g ^ tS Q O tte d . S Your email address is \h e fo rm . hogy az űrlapadatok hogyan kerülnek a PHP-parancsfájlhoz. an A $__P0$T szupergiooj az űrlapra beírt összes Hd' a« afgfe*alr. $ e \ia il. /> '.html szövegm ezőiből? m ost itt vagy ► 33 . mint a többi PHP-változót. $a Was Fang there? ' . mert a PHP beépített változója. report.l Anything else you want to add I Report Abductipn ' echo echo echo echo echo ccho inanKS tor submitting You were abducted ' . am ikor a parancsfájlod lefut. ' . Szerinted hogyan működik a $_POST szuperglobális? Hogyan kép es töb b értéket tárolni O w en űrlapjának report. akkor a PHP minden űrlapadatot a $_POST szuperglobálisba csom agol ahonnan azok kiolvashatók és igény szerint felhasználhatók.

Az eg y es űrlapm ezők adatait ú gy érh eted el. clabel for "wha tth eyd id">What did they d-Vto'you'?<7label> i <input type*"text" id="whatcheydid” name* Vhattheydid" s i z d r ^ " / X b r /> clabel for-"fangspotted">Have you seen my eta Fang?c/iabel>\ Yes cinput id*"iangspotted" name*"fangspotteflff iype-"radio" vbS^ue*"yes" /> No cinput id "fangspotted" name="fangspotted"^^pe*"radio" valu^ss "non /xb r /> cimg src*"fang.p h p " > • A : n ■ ■ ***« AUens Abducted Me . hogy: érheted el a mezőt a $ POST tömbben ‘flrstnam e* Hastnam e’ ‘e m a il’ ‘h o w lo n g \ ‘a lie n d e s c r ip tio n ’ ‘h o w m a n y ’ ‘w h e n i t h a p p e n e d ’ $ PO ST Minden ürlapadathoz * $ PŐST tömbön keresztül térhetsz hozzá .jpg" width*"lQ0" height "175" alt*"My abducted dog Fang.Report an Abduction S or yuur «ory o í *Jrn ítxlucüon F ir * n a w L tiu n u u e: " h f l t k t 'X r r « n n t í » d d w w ? W h w aw « happc«? How ioug M-írc you Hdw maoy «luí \ou ice? D « c r ü » * tfcctn: W bat din tber du to vouí H v « um m <0 K n ? »e o > }£ a g clabel for="firstname">First name:c/label> <input type-"text" id-"firstname" name*"firstname" /xb r /> . 34 7. O w en űrlapjának HTML-kódja felfedi. Az elrablás időtartam a például $_POST[ 'h o w lo n g ' ] néven tárolódik. fejezet .text" id*" last name” name* "last name" /><br clabel for "email">What is your email address?</I <input type*"text" id=nemail" name-"email" / X b ^ 1 ? clabel for "when ithapperied">When did it happez^^/label > <input type*". ctextarea name*"other">c/textareaxbr /> \ cinput type*"submit" value*"Report Abduction" naine*"si»mit" /> c/form> \ ^ Az urlapmező neve határozza meg. " 1 <label for*"lastname">Last name:</label> Cinput type=".text" id*"whenithappened" nam<^*wheni thappened" / X b r /> <label for="howlong">How long were you gone?</label> <input type*"text" id*"howlong" name*"howlong" / x b r /> <laoef for-"nowmany ">Howman y did you aee?</Tabel> <input type*"text" id“"howmany" name*"llpwmany" / x b r /> <label Cor "aliendescription">Describe \hem:c/label> % cinput -type* "text" id. Am ikor valaki benyújtja O w en űrlapját. hogy az ad atokat átadja a parancsfájlnak A $_P 0S T töm b m inden elem e eg y -eg y ű rlap m ezőb e beírt adatnak felel m eg."a1iende s cr:p ti an name "al -endescription" size* "32" /Xb r /> ." />cbr /> clabel for*"otner"»Anything else you want t o add?c^»bel> . am elynek az a feladata. hogyan k ap csolód n ak az űrlapm ezők nevei a $_POST-ban tárolt adatokhoz: <p>Share your story of alien abduction:</p> < fo rm m e rh o d = "p o 3t ” a c tio n * " r e p o r t. amit töm bnek hívnak. h og y m egad od a m ező nevét a $_POST-tal együtt.a $ _P O S T egy tömb A $_POST szállítja az űrlapadatokat a parancsfájlodnak A $_POST eg y különleges PH P-tároló.1 " l . az általa az ű rlapm ezőkbe beírt adatok a $_P 0S T töm bbe kerülnek. A töm bök változók gyűjtem ényét tárolják egyetlen név alatt.

aescription = $_POST['description1] Emlékezz vissza. Report an Abduction</title> <body> Report an Abduction</h2> $when_it_happened = $_POS?['whenithappened *J $how_long = $_POST['howlong1J. hogy korábban ezt a két kódsort azono­ sítottuk a probléma gyökereként.php-ben. Semail </body> </html> report. hanks for submitting the forn. $how_long echo ‘Describe them echo 'Your email address is ' .php m ost itt vagy ► 35 .<br /> $wher. hogyan lehetne kijavítani őket. am elyek miatt üresen marad az ide­ genek leírását tartalmazó m ező. és írd le.Keltsd életre a statikus oldalakat! % Hegyezd ki a ceruzád! Húzd át azokat a kódrészeket a r e p o r t ._ •t_happened . Tipp: a prob­ léma felderítéséhez használd segítségül az előző oldalon található HTML-űrlapkódot.

.htm lben „aliendescription". ami nem felel meg a $_P0ST tömbben használt névnek. megoldás ^eW i ceruzád!-----------------------------------------------------------------------.—— : $fang_spotted = $_POST['fangspotted•] Módosítani kell a $_PO$T-ot.php 36 1. e z < 1 <input type </head> report. Tipp: a probléma felderítéséhez használd segítségül az előző oldalon található HTML-űrlapkódot. ho­ gyan lehetne kijavítani őket. $email = $_POST['email'J.cbr />' $how_Iong .Report an Abduction</h2> Az ürlapmező neve a report. hogy az ürlapmező neve helyes. Thanks for submitting the form. fejezet . ---. $now_long = $_PQST [ 'howlorív }: | "n / 'alie^destviftion $alien_description = $_POST[ — — . <?php $when_it_happened = \* whenithappened1J. tehát 'aliendescription' legyen.Hegyezd ki.php-ben. amelyek miatt üresen marad az idegenek leírását tartalmazó mező.html i2>AIiens Abducted Me .----M e g o ld á s ® Húzd át azokat a kódrészeket a r e p o r t . és írd le.. '<br /> Describe them Your email address is </body> rep ort.

h t m l oldalt a böngésződben. Nyisd meg a r e p o r t . töltsd ki az űrla pót az idegenekkel kapcsolatos inform ációkkal. sa « dr U Nvme tl o e br 1 h^ 1 o rs Itnfc Qteen mer w % ó IM ib o u t UfO ons K irály. w ant Aliens Abducted Me . majd kattints a Report Abduction gom bra. Y cs O No 0 Aliens Abducted Me . majd töltsd fel a w ebkiszolgálóra.Report an Abduction You were abducted last November and were gone for 11 _____________ Describe them: link green men ---------Was hang there? no Y our email address is aiin@thcyreaiigrecn..com most itt vagy ► 3 7 .php-ben. C sakhogy még mindig hiányoznak egyes u rla p a d a to k .. hogy az adatokat elküldd a kijavított parancsfájlnak.Report ar Abduttior.Keftsd életre a statikus oldalakat! Javítsd ki a parancsfájlt és próbáld ki! Módosítsd a hibás kódsort a r e p o r t .

Tipp: úgy hozd létre a Sname változót.javítsd ki owen php-parancsfájlját! v Hegyezd ki a ceruzád! O w en „Elraboltak az id egenek” űrlapján vannak olyan adatok is. p h p " > ■ < l a b e l f o r = nf i r s t n a m e " > F i r s t n a m e : < / I a b e i > < i n p u t t y p e = " t e x t " i d = " i i r s t n a m e " n a m e = " f i r s t n a m e " / x b r /> < l a b e l f c r = " la s t n a m e " > L a s t n a m e :< / la b e l> < i n p u t t y p e = " t e x t " i d = " l a s t n a m e " n a m e ® " l a s t n a m e “ / > < b r /> i> s < l a b e l fo r= "e m a il"> W h a t i s y o u r e m a il a d c ir e a s ? < / la b e l> < l n p u t t y p e = " t e x t " i d = " e m a i l " n a m e . j p g " w i d t h « " 1 0 0 " h e i g h t « " 1 7 5 " a l t = " M y a b d u c t e d d o g F a n g . am elyeket jelenleg nem használunk. g " n a r a e = " h o w lo n g " / x b r /> — < l a b e l f o r = " h o w m a n y " >How many d i d y ou s e e ? < / l a b e l > *— < i n p u t t y p e = ' . $how_many. Ezért minden adatot ki kell nyerned az űrlapról. hogy a felhasználó teljes nevét tárolja 38 1. A liens Aliens Abducted Me . ---------------------V JS ^ X ~ ~ _____________ Inst November 11 hours First nam e: Last nam e: Wbj*l is vour A report.a l i e n d e s c r i p t i o n " > D e s c r i b e t h e m :< / la b e l> < in p u t t y p e « " t e x t " i d = " a l i e n d e s c r i p t i o n " nam e="a1 i e n d e s c r i p t i o n " s i z e « < l a b e l f o r « "w h a tth e y d id " > W h a t d id th e y do t o y o u ? < / la b e i> < in p u r t y p e « " t e x t " i d ^ 'w h a t t h e y d i d ” n a m e « " w h a tth e y d id " s i z e . t e x t " id = " h o w m a n y " narae="how m any" / x b r /> < i a b e 1 f o r » . hogy a PHP hozzáférjen az urlapadatokhoz." f a n g s p o t t e d “ n a m e = "fa n g sp o tte d " t y p e ." f a n g .. describe them: W hat did tbcy do to Have you seen mv d< «*^W y a rw. fejezet .." e m a i l ” / x b r /> 1 C U b e l f o r = nw h e n ir h a p p e n e d " > V f h e n d i d i t h a p p e n ? < / i a b e l > < i n o u c t y p e = " t e x t " i d = " w h e n i t h a p p e n e d " n a m e « “ w h e n i t h a p p e n e d " /> < t < l a b e l f o r = " h o w lo n g " > H o w l o n g w e r e y o u g o n e ? < / I a b e l > < i n p u t t y p e = " t e x t " i d = " h o w l o r . x. " / x b r /> < l a b e l fo r « " o t h e r " > A n y th in g e l s e you w ant t o a d d ? < / ia b e i> < t e x t a r e a i d = " o t h e r " n a m e « " o t h e r " X / 1 e x t a r e a > < b r /> < i n p u t t y p e = " s u b m i t " vaA ue=” R e p o r t A b d u c t io n " n a m e « " s u b m it" < / fo r m > </body> < / h tm l> __ N.html írd meg a PHP-kódot. hogy ezek az adatok is olyan létfontos­ ságú inform ációkat tartalmaznak az idegenekről." r a d i o " % l u e = " n o " < im g a r c . és PHP-változókban kell tárolnod azokat. am ely létrehozza a hiányzó űrlapadatokat tároló négy változót: $name. /> report. Agyar­ hoz. $ w h a t_ th e y _ d id és $ o th e r ." r a d i^ L v a lu e » " y e s No < i n p u t i d « " f a n g s p o t t e d " n a m e = " f a n g s p o t t e d " t y p e . am e­ lyek elvezethetik O w ent az elveszett kutyájához.c m ’<r« llg n o CQ !n ^ 2< 73 H g nmn ttif rw e Yk ^ .N r olR ~~~ ' < £ o rm m e t h o d = " p c s t " a c t i o n « " r e p o r t .Report an Abduction Share your vory o f alien abduction: . Az egyes SrlapmezőVhöz tartozó < in p » t> ele»« jelentik a kulcsot ahhoz. Megdöbbentő'! When did ft t^pp™ ÜOW loog werctivy How many did yob." 3 2 " / x b r c l a b e l f o r = " f a n g s p o t t e d ” >Have y ou s e e n my dog F a n g ? < / l v S ^ l > Yes < In p u t i d .php parancsfájl jelenleg figyelmen kívül hagy öt különböző' urlapadatot is. Ne fe­ ledd azonban.

'< b r / > * ..Report an Abduction You were abductcd last November and were gone for 11 hour* Describe them. ’ <br / > * . You weic abductcd last November and were gone for 11 hours Number of aliens: dozens D escribe them: Uaic green men The aliens did this: aiked me about UFO regulations Was Fang there? no Other comments: Please vote for me Your email address is alfn(Stheyreallgrccn. '< b r / > ' . A $name kivételével az imént létrehozott valamennyi változót felhasználva fe­ jezd be a hiányzó kódot. A megerősítő weboldalnak. .» « • « '" " / T .com Aliens Abducted Me . $ w h e n _ it_ h a p p e n e d .com * m u .id e ! Figyeld meg.. Innen el kell ju tn o d . de « a k I i9 1 » * U" i ^ ¿esz Owennek az elrablásról. most itt vagy ► 39 . amelyet a PHP-parancsfájl létrehoz. fel is kell használnia ezeket az új változókat.Report an Abduction Thanks for submitting die form.S a megerősíts oldal»«. $h ow _lon g . Aliens Abducted M e .. e ch o ' D e s c r ib e th em : f . e ch o 'Was Fan g t h e r e ? 1 . amely információdúsabb megerősítő oldalt állít elő: ech o e ch o e ch o 'T h an k s f o r s u b m itt in g th e f o r m . $ a lie n _ d e s c rip tio n . $ e m a il. mennyivel több információ jelenik meg. hogy további információkat jelenítsen meg az idegenekről. e ch o 'Y o u r e m a il a d d r e s s i s ’ ..j . ’ You w ere a b d u c te d ' and w ere gone f o r ’ ' . $ fa n g _ s p o tte d . liale green men Was Fang there? no Your email address is alfni8thcyrcallgrccn.Keltsd életre a statikus oldalakat! A munkád ezzel még nem ért véget.c b r / > ’ . £ Aliens Abducted Me .

$ w h a t_ th e y _ d id és $ o th e r .. Aliens Abducted Me ....... A kereszt-1 írd meg a PHP-kódot. hogy a PHP hozzáférjen az urlapadatokhoz....com last November A report.html vezefékne«! ez a szók« I v á la s z íja e l l A pont karakter lehetővé teszi.. ..Report an Abduction Share your story of alien abduction: H r s t n am e: L a s i n am e: ¿*r>$th<yreajigreen. Megdöbbentő'! When did u'feappen? How long w e r t W j gone? How many did yoii..... ttfj?— Jíí?y ..se** ------- Describe them: \ Itttie green m *n W hat dkJ they do to you?-— my dog Vang? V ww s td™ *Ü fefljSonT ^sk *t*> fQ Y es G NcTST--------------------- ctorra method "pose" action-"report. Agyarhoz... fna»>í — f POSTT'-fVstxame'] .. ^ 7 .eJnail. Tipp: ¿jgy hozd létre a $name változót...php"> clabel for-"firstname">First naroe:C/label> > Cinput type="text” id="firstname" name«*"firstname / x b r / clabel for-^lastname^Last name:c/label> cinput type="nextn id*"lastname" name«"lastname" /><br /> <label for-. 1 . idegen szóval konkatenációnak hívják... Ezért minden adatot ki kell nyerned az űrlapról. és PHP-változókban kell tárolnod azokat.... am elyeket jelenleg nem használunk..... L P O S i r o t h e r ^ ..... am ely létrehozza a hiányzó űrlapadatokat tároló négy változót: $name........ ...... hogy a felhasználó teljes nevét tárolja.. 40 7. Ne feledd azonban..php parancsfájl jelenleg figyelmen kívül hagy öt különböző urlapadatot is....." /Xbr /> clabel £or="other">Anything else you want to add?c/iabel> ctextarea id="other" name="other">c/t©xtareaXbr /> cinput type“"submit" value="Report Abduction" name«"submit" /> c/form> ' </body> c/html> to add ' Az egyes Űrlapmezökhoz tartozó < input > elemek jelentik a kulcsot ahhoz...o Fang?c/i lg Yes cinput id="fangspotted" name-"fangspotted" type "r No cinput id="fangspotted" name "fangspotted” type^"radio" cimg src="fang. fejezet ...owen javított php-parancsfájlja Hegyezd ki a ceruzád! Megoldás O w en „Elraboltak az idegenek" űrlapján vannak olyan adatok is... $how_many.. fwhaí ihey did = /_P02Trwh a tiK eydicl'1 ■ .... cinput type«"text" id "email" narae="email" /><br / > <Iabel for«"whenithappened">When did it happen?</Iabel> >> cinput type="tcxt" id-"whenithappened" name "whenithappened / < <label for«"howlong">How long were you gone?</label> A n y th in g e lse y o u w an t cinput type«"text" ia="howlongn name -"howlong" />cbr /> ( RprtA d n n 1 e o fa u io clabel for-"howmany">How many did you see?c/label> cinput type«"text" id=....>What is your email address?c/label> ........ hogy ezek az adatok is olyan létfontosságú in­ form ációkat tartalmaznak az idegenekről.jpg" width="i00" height="175" ait="My abducted dog Fang......... report..')2 clabel for="fangspotted">Have you seen my . Ezt az eljárást összegzésnek...77 f_PöSTClKo'wmanyi]...howmany" name=*nhowmany" /xbr /> r clabel for""aliendescript±on">Desc3cibe thera:c/label> cinput type“"text" id="aliendescription" name="aliendescript ion" s i z e ° " 3 2 " / > c b r /> clabel for="what theydid">Wh at did they do to you?c/label> cinput type«"text" id-"what theydid" name=Mwhattheydid" size=". hogy egyetlen karakterlánccá fűzz össze több szövegrészletet. am elyek elve­ zethetik O w ent az elveszett kutyájához.

. f ? t h e r . .R e p o r í ¿n _ Aliens Abducted Me . .Report an Abduction You were abducied last November and were gone for 11 hour. fel is kell használnia ezeket az új változókat. liuie green men The aliens did this: asked me about U FO regulations Was Fang there? no Other comments: Please vote for me. A megerősítő weboldalnak. v< b r ( > j ' .«. m SsHÜ . Innen el kell ju tn o d . A b°n9észÖben az echo paranccsal írathatsz ki HTML-tartalomként to ­ vábbi információkat. Describe them: littic green men Was Fang there? no Y our email address is alln® thcyrcaUgn. . $ w h e n _ it_ h a p p e n e d . 1 . tt\\0 'N u m b e r o-f al iens: ' ... I ” ~ ^ Aliens Abducted M e . hogy PHP-vel hozunk létre HTML-t.Keltsd életre a statikus oldalakat! A munkád ezzel még nem ért véget. 1< b r / > * .M ai. mennyivel több információ jelenik meg. ech o 'D e s c r i b e th em : ’ . amelyet a PHP-parancsfájl létrehoz.-en. $ fa n g _ s p o tte d .com ft felhasznál© .id e i Figyeld meg. e ch o e ch o ech o ’ Thanks f o r s u b m itt in g th e f o r m . 'Y ou w ere a b d u c te d 1 and w ere gone f o r ’ . ¿¿ho 'M K c r e ch o ' .com } A lie tií A b d JC W d M e . amely információdúsabb megerősítő oldalt állít elő: A A <br /> elemek az információk formázá­ sát segítik . ^ . hogy további információkat jelenítsen meg az idegenekről.ne felejtsd el. 'Y o u r e m a il a d d r e s s i s most itt vagy ► 41 . f K o w _ m a n y • '< b jr / > ] Itt ismét pontok segítségével füzünk össze karakterláncokat és változókat.c b r / > ’ . . $ a lie n _ d e s c rip tio n ’ <br / > ’ . J w K a t jt h c y _d id . s -Report ars Abtíuctíon . i * k « skb desi 0 » n n « l s í B i b é t !• « * Í íUaMascal‘ $name kivételével az imént létrehozott valamennyi változót felhasználva fejezd be a hiányzó kódot. $h ow _lon g . 1< b r / > ’ .Report an Abduction Thanks for submitting the form Y ou were abducted last November and were gone for 11 hours Number o f aliens: dozens Describe them.. « « . m . 1 . '< b r / > y ech o 'Was F an g tr^er e ? ' . Your email addicss is aifh@thevicaUgrecn. $ e m a il. ¿¿ho 'T h e aliens d id th is .

majd ezt az új karakterláncot írja ki a böngészőben. ahol egy < br /> címkét ragasztottunk egy szövegsor végére. majd töltsd fel a parancsfájlt a w ebkiszolgálóra. Az e ch o parancsra gondolj úgy.php parancsfájlja. és nézd meg az eredményt. I ! Mi történik a PHP-kóddal a böngészőben? ! Semmi. végül pedig kattints a Report Abduction gom bra az űrlap benyújtásához. a változónak szöveget kell tartalmaznia? ! Nem. hogy a PHP'r j kód hogyan alakul HTML/CSS-kóddá. mint ami információt ír ki a <?php és ?> címkék keretei közé zárva.teszteld owen php-parancsféjijét! Tesztút Módosítsd Owen parancsfájlját. hogy a PHP-parancsfájlok alapértelmezés szerint HTML-kódnak tekintendők. ahhoz. töltsd ki az űrlapot az idegenekkel kapcsolatos adatokkal. A PHP-programok kódját a <?php és ?> címkék azono­ sítják. amelyeket látva a kiszolgáló tudja. Ha a változó mondjuk egy számot tartalmaz. menet közben építhetsz fel HTML-kódot. Bár az összefűzés mindig karakterláncot eredmé­ nyez. hogy szöve­ ges karakterláncokat fűzhetsz össze PHP-változók segít­ ségével. hogy hány karakterláncot használtunk fel. A karakterláncok összegzé­ sének mindig egyeüen karakterlánc a végeredménye.és CSS# kóddá a PHP-kódot? ! Először is. Azt mi hajtja végre? V ! Itt lép be a képbe az ech o parancs. mielőtt a böngészőhöz kerülne. a PHP először egybefűzi a karakterlánco­ kat. Erre remek példa Owen r e p o r t . hogy dinamiku­ san állíthasson elő HTML/CSS-kódot. amit aztán az ech o paranccsal kiírathatsz az eredményként kapott weboldalra a böngészőben. emlékezz vissza. és ezt követően végzi el az összefűzést. A PHP-kód mindig a kiszolgálón fut. a címkéken kívül eső összes kódot pedig HTML-ként kell átadnia a böngé­ szőnek. hogy a köztük található kódot PHP-ként kell futtatnia. és teszteld a változtatások működését! Add az új változókat létrehozó kódot a r e p o r t .a weboldalak hozzá tiszta HTML-ként és CSS-ként érkeznek meg. a PHP elő­ ször karakterlánccá alakítja a számot.Amikor tehát egy ech o parancs részeként karakterlánco­ kat fűzöl össze. htm l oldalt a böngésződben. hogy* új són 1 kezdjünk a HTML-oldalon. Tehát az e ch o parancs a kulcs. hogy változókat fűzz össze. I C i Oké. A böngésző tehát egyáltalán nem is tud a PHP létezéséről . telje­ sen új karakterlánc jön létre. füg­ getlenül attól. és HTML-kóddá alakul. a változóknak nem feltétlenül kell karakterláncot tartalmazniuk. amikor pontokkal több karakterláncot fű­ zök össze? ! Az összetűzés során több karakterláncból egyetlen. Nincsenek hülye kérdések ! Valójában mi történik. de pontosan hogyan alakítja a kiszolgáló HTML. fejezet . mivel a PHP-kódokat a böngésző sohasem látja. I C ! Rendben. Azzal. 42 1. ami képessé teszi a PHP-t arra. De ez még mindig nem magyarázza meg. | ! Ha egy változót és egy karakterláncot szeretnénk összefűzni. nyisd meg a r e p o r t .php-hez a változókat a böngészőben HTML-ként for­ mázva kiíró kóddal együtt. .

Ez a levél a megerősítő Weboldalhoz hasonlóan statikus szöveg és urlapadatok kombi­ nációjából áll. miszerint az űrlap b e ­ nyújtásakor elektronikus levelet kell küldened O w ennek. Ennyf Ideig volt távol: 1 óra. Ez azonban még nem oldja meg az eredeti problém át. 1 Hány múlt november. A z Idegenek leírása: ki© zöld emberek. hogyan raknád össze egy e-mail karakterláncát statikus szövegből és PHP-változókból! most itt vagy ► 43 . O w en csak egy egyszerű. A PHP-parancsfájlnak továbbra is e-mailben kell elküldenie az űrlapadatokat Owennek. Egyéb megjegyzések: Szavazz ráml A fenti levelet úgy állíthatod elő PHP-kóddal. Idegent lá to tt: tdbb tu ca tot.php parancsfájl kiolvassa az adatokat az „Elraboltak az idegenek" űrlapról.Keltsd életre a statikus oldalakat! A meqer óeftó o ld al h a s z n o s a fel h a szn á ló n a k. szöveges e-mailt szeretne kapni. What they did: asked me about U F O regulations s Fang spotted: no O ther comments: Please vote for me. hogy az ű rla p a d a to k e-m ailben ju s s a n a k e\ hozzám . ami valahogy így fest: Alf Nader was abducted last November and was gone for 11#hours. 1 Number o f aliens: dozens • Alien description: little green men Alf Uadcr elrablásának Ideje. En to v á b b ra is a z t s ze re tn é m . írd le. Jelen állapotában a r e p o r t . és egy m egerősítő w eboldalt hoz létre a felhasználó szám á­ ra. am ely az olyan statikus szövegrészeket. M it tettek: kikérdezték az UFO-özabályzatot. hogy összeraksz egy karakterláncol. de nőkőm nem elég. mint az "O th e r com m ents: " (Egyéb m egjegyzések) fűzi össze az űrlapm ezők változókban tárolt adataival. Lá tta A gyart: nem.

'Other comments: Az utasítást továbbra is egy pontosvesszővel kell lezárnod. . 44 7. 1 was abducted ’ . $fang_spotted . $ a l i © ^ d e s c rip tio n ' .H Y olyan szöveg« karakterZ J ar01' $ m ly e t 3 ReP°rf Abduction ¡frlapról 0iVasfunk ^ Ez valójában egyetlen bosszú kódsor. $how maiM .. ' . és ezért nehezen olvasható és átte­ kinthető lesz.SBBBBBBBBIBI * $ i a n p o I t ed . még ha magad nem is adsz meg sortörést. Shovmany . hogyan fűzhetsz össze több karakterláncot pontok segítségével egyetlen karakterlánccá a PHP-kódban. ~y -- ’ . ' . hogy jobban bogy mely sorok ■kódsort szándéfördelnek. hogy a PHP-kódsor igen hosszú. $othe Az ilyen hosszú karakterláncok felépítésével kapcsolatban az az egyik prob­ léma.az üzenettörzs felépítése a php-ben Az e-mail üzenettörzsének létrehozása a PHP segítségével Már láttad. Amikor egy PHP kosán tö b b sorra szokták húzni az kát. Most ismét az összetűzést kell használnod. hogy felépítsd az e-mail üzenettörzsének karakterláncát a statikus szö­ vegben elszórt változók segítségével. ’ [and was gon^ f o r ’ . ' and was gone fo r I 1 'Number of aliens: 'Alien description: 'What they 'Fang spotted: 1 A kódsort körültekintően kell felbon­ tanod. ahol a szóközök nem számítanak. 'Other c o m m e n t ^ ' . ' . matikusan a következő sorba töri a kódot. hogy a sortörések ne a karak­ terláncok közepére essenek. hogy a kódot olyan he­ lyeken válaszd szét. :. 'Number o f a l i e n s : ’ . A PHP-kódot azonban több sorra is tördelheted. Csak arra kell vigyáznod. nem egy karakterlánc közepén. be e/so utáni soro­ zatható legyen. & $msg = -$name amit több sorra tördeltünk. például két összefű­ zött karakterlánc között. hogy miként bontod fel a kódot. Végül az utolsó kód­ sor végére egy pontosvesszőt kell tenned. ami lezárja a PHP-utasítást. tartoznak össze Egy hosszú PHP-kódsor több sort is átfoghat. ho9y minden változó W . fejezet . hogy könynyebben követhetővé tedd. * . 3 kódban. ha ügyelsz arra. ' . $alien_description n_it_happened . 'Fang spotted: Iona . A legtöbb szövegszerkesztő' auto­ A változókat és a statikus szö­ vegrészeket pontokkal fűzheted össze egyetlen karakterlánecá a levél törzsében. ' Al i e n d e s c r i p t i o n : $vh a t_ they_di d . iT_happened .

A fejlécekről ugyan­ akkor bővebben is szó lesz a 6. Number of aliens: dozensAlien description: lin k green m enW hat they did: asked me about U F O regulationsl’ang spotted: noOther comments: Please vote for me. Az. ami a HTML-levelek ké­ szítéséhez szükséges. Aú! Owen NEM ilyen levelet szeretne kapni az idegenekről Nincsenek hülye kérdések Van rá mód. de ehhez még egy lépést végre kell hajtanod: be kell állítanod a tartalomtípust m eghatározó fejlécet az üzenetben. hogy könnyebben ol­ vasható legyen? most itt vagy ► 45 . hogy HTML-formázást használjak egy PHPparancsfájlból küldött levélben? Van. Neked egy e-mailt kell létrehoznod. Azt a problém át kell m egoldanod. úgyhogy k é­ sőbb m egszerezheted a tudást. hogy az O w ennek küldött válaszok sima szöveges e-m ailek legyenek. Agytorna Hogyan formáznád újra a sima szö­ veges e-mailt. még nem jelenti azt. fejezetben. egészen más.Keltsd életre a statikus oldalakat! Ez a PHP-kód elég c s in o s . Iti azonban nem ez a cél. A PHP-kódok kim enetének formázására általában HTML-elemeket használnak. mint a fel­ használók által látott kim enet formázása. de fo r m á ­ z á s nélkül nem lesz a szöveg egyetlen nag y k a ty v a s z a z e-m ailben? O De igen. A PHP-kód elrendezése. hogy a kimenet is automatikusan jól fog kinézni. hogy te jobban átlásd a kódot. ami sima szövegből és nem HTML-ből áll. mivel a PHP-t a legtöbb esetben w eboldalak dinamikus létrehozására használják.ezért is ra­ gaszkodunk ahhoz. A fejlécek és a tartalomtípusok némileg túlmutatnak enn ek a könyvnek a keretein . hogy szépen elrendezed a PHP-kódot. hogy az üzenet jelenleg így néz ki: A lf Nader was abducted last November and was gone for 11 hours.

vagy az & copy. h \n is megieleniU » beft.. '. 1\n* ' . $what they did . amelyet nehéz beírni.. ahol összecsúszik. Y\ n ' 1 . A PHP-ben a védőkaraktereknek csak egy kis halma za található. $a1ien_descriVtion ' . A levélben az \ n kóddal he­ lyezhetsz el újsor karaktereket.. és olyan dolgokat lehet kiírni velük. A HTML-ből már ismerősek lehetnek a védőkarakterek. lumber oi aliens: dozen(\n)Uien description: littJcjrreen men vliat they did: asked m e about U F O regulation(\nfang spotted: n<^nf)ther comments: Please vote for me. HTML-formázás nélkül kell levelet küldenünk. Újsor karaktereket azonban igenis használhatsz. r was abducted 'Number of aliens: 'Alien description: 'What they did: 'Fang spotted: $vhen it happened . $how_rnapy . . . '\ $how_long . ' . $other.. tehát az utána következő tartalom új sorban fog kezdődni.\n' ' . U b x k “ « “ r’ “ 1 f!» lM I . idézőjeleket (\ "). vagy valamilyen zavart okozhat a PHP- kódban. fejezet 46 . — ----------- $msg * $name . hogy több sorra tördeld a szöveget. Ahol tehát \n szerepel az e-mail szövegében. nem szúrhatsz b e egyszerűen < br /> cím kéket. 1.egy kicsit Mivel O w ennek sima szövegként. $fang_spotted . ha \n form ában levéded azokat. ' and was gone for .csa k kár. oda egy sortörés kerül. azonosítja. vagy természetesen újsor karaktereket (\n).szövegformázás a php segítségével Még a sima szöveg is formázható.. hogy a kód nem működik. amelyeket összekeverhetnénk magának a PHP nyelvnek az egyes elemeivel: például aposztrófokat (\ '). '\nf . Nincsenek hülye kérdések K i Pontosan mi is az a védőkarakter? V \ A védőkarakter (escape character) olyan karakter. így néz ki az e-mail m ódo­ sított kódja az újsor karakterekkel: A védokarakterek a PHP-ben egy for­ dított perjellel ( \ ) kezdődnek. ^ f Nader was abducted lastNovem ber and was gone for 1 1 hours. de ott egy kicsit másképp néznek ki: a „copy­ right" jelet például az &# 1 6 9 . 'Other comments: Az újsor karakterek jó ö t ­ letnek tű n n e k.

Összetűzésre már nincs szűk eg. hogy inkább kettős idézőjelek között álló karakterláncokat alkalmaz­ zunk.minden más védőkarak­ tert csak kettős idézőjelek között álló karakterláncokban használhatsz. hogy a sortörések működjenek. ha egy aposztrófos karakterláncon belül kell használ­ nom egy aposztrófot. a PHP beszúrja annak érté­ két a karakterláncba. míg a PHP a kettős idé­ zőjelek között álló karakterláncokat feldolgozva változókat keres. Aposztrófos karakterláncokat tehát továbbra is használni fo­ gunk a könyvben. csak annyi a dolgod. $ f a n g _ s p o tt e d \ n " $ o th e r".ezek esetél>en a \ " védőkaraktert használha­ tod. hogy a PHP semmilyen módon nem dolgozza fel az aposztrófok közé zárt karakterláncokat. $ a lie n _ d e s c rip tio n \ n " " O th e r com m ents: ‘ ST: 6 l. Ilyen esetben veheted jó hasznát a védőkaraktereknek. jelek közé zárt karakterláncnak kö­ szönhetően most mér helyesen értel­ mezi a PHP. például ha olyasmit akarok írni.például ha egy aposztrófot írsz egy kettős idézőjelek közé zárt karak­ terláncba nem kell levédened őket: "He ' s l o s t ! K: K: Vagyis az aposztrófos karakterláncokban a \ ' használható. Az egyszeres idézőjelek (aposztrófok) közé zárt karakterláncok nyers szövegnek számítanak.Keltsd életre a statikus oldalakat! Az újsor karaktereket kettős idézőjelek közé kell zárni Owen kódjával az a gond. ed­ V: aposztrófos karakterláncokat? V: Ne feledd. hogy a PHP másképp kezeli a karakterláncokat. hogy aposztrófok vagy (kettős) idézőjelek között állnak. . Nincsenek hülye kérdések Ha kettős idézőjelek közé zárt K: dig amiért használtunk többnyire karakterláncok ilyen klasszak. amelyek beágya­ zott változókat nem. hacsak nincs rá jó okunk. Az újsor karaktereket a kettős idéző$ w h a t_ th e y _ d id \ n ". m ost itt vagy > 47 . A kétféle idézőjel használatával kapcsolatban azon­ ban az a legfontosabb. például így: ' He\ ' s l o s t ! ' . Az egyszeres és kétszeres idézőjelek különbségénél azonban többről van szó. hogy a kód könnyebben olvasható legyen.y kettős idézőjelek köze zárt karakterűéből. az újsor karaktereket (\ n ) csak kettős idézőjelekkel lehet levédeni. mintha karakterláncokat fűztünk volna össze. hogy 'He's l o s t ! ' ? az \ n viszont nem. Ha egy aposztrófos karakterláncon belül aposztrófot sze­ retnél írni. ^ kozhatunk e. hogy az e-m ailben működjenek az újsor karakterek. ha olyan karakterláncokkal dolgozunk. hogy \ ' formában levéded. hogy milyen védőkarakte­ rek használhatók az aposztrófok között? Az aposztrófok közé zárt karakterláncok csak a \ ' és \ \ védőkaraktereket engedélyezik . Ha viszont a kétféle idézőjel nem ütközik .avéaén nincs szükség újsor karakterre. m e rta változókra W z w H w a . Pontosabban. csak sima szöveget tartalmaznak. Az üzenetet azonban továbbra is több összefűzött karakterlánera keit bontani. V: Mi történik. hogy következetesek maradjunk. Ugyanez vonatkozik a kettős idézőjelek közötti karakterláncokban szereplő idé­ zőjelekre is . hanem a segítségükkel egyszerű­ síthetjük is a kódot a változók közvetlen beszúrásával a karakterláncba. Honnan tudhatom. ezért az Abduction Report levelet ilyen idézőjelek közé zárt karakterláncokkal kell fel­ építeni. attól függően. ami akkor ideá­ lis. $msg = M $name w as a b d u c te d $ w h e n _ it_ h a p p e n e d and was gone f o r $ h o w _ lo n g .\ n " "Number o f a l i e n s : "A lie n d e s c r i p t i o n : "W hat th e y d i d : "F a n g s p o t t e d : $how_many\n" . Ha egy kettős idézőjelek között álló karakterláncban változót talál. Tehát a ket­ tős idézőjelek közé zárt karakterláncok nem csak szükségesek ahhoz.

. O w en rem ényei szerint egy ehhez hasonló levelet fog kapni.. e: . fejezet . c... Abduction Report ----------- T a te .' Q Aliens ^ a ^ a in. úgyhogy továbbléphetsz. Csak annyi van hátra.me. am ikor valaki kitölti az idegenekkel kapcsolatos elrablásbejelentő űrlapot: Owen e-m ail címe Ez lehet statikus h a felhasználó e-m ail tsr.. sssrA "»« © October 1 . © A küldő e-mail címe (kitől jön a levél: FROM)^. de az alábbiak lényegében minden elektronikus levélben szerepelnek: Ez mér megvan f O Ai üzonot tőrzoo. Az üzenet törzsét már telep ítet* 9Y ^ " l á n c c a l . amelyet már e/raktároztunk 3z $emai/ változóban..é s hogy .. Ezek közül egyesek nem kötele­ zőek..__^ 0 A címzett e-mail címe (ki kapja a levelet: TO).. am elyet már befejeztünk.szám os részük van. a feladó. amelyet az $msg változó tárol. Ez a levélminta mutatja.állítsd össze O w en levelét! Owen levelének összeállítása Az e-mail törzsét már előállítottad egy karakterláncként.. illetve a cím zett e-mail cím é t.a PHP segítségével ténylegesen elküldjük a levelet.. Ide barmi jöhet.. November and was gone tor 11 hours. Az e-m ailek nem csak egy üzenettörzsből állnak . Vus VaraV\er\anc. hogy összeállítsd O w en levelének többi részét. e-ma\l címe. ként Owen leveleskent uwen ládájában. hogy a tartalom nagy' része az üzenet törzsében található.term észetesen . 48 1.«A ftW karakterlánc. ez Btsjt|1MÍ az e-mail tárgya- /y felhasználó / © Az üzenet tárgya.com Q M Nader was abducted las. 2 0 0 8 1 2 0 7 2 0 PM CDT To: owen@ahensabductedme. Number of aliens: dozens S S S S S S X Fang spotted: no S S io m -- © Other comments: Please vote for m . hogy megadjuk a levél tárgyát..

de még hiányzik a levél tár­ gya.\n "Number of aliens: "Alien description: "What they did: $how many\n" $alien description $what they_did\n" Minden információt összegyűjtöttünk.Keltsd életre a statikus oldalakat! Az e-mail részeit változók tárolják Megvan tehát az üzenet törzse.Abduction Report Date: October 1 . A tárgyat és a cím zettet megadhatod egyszerűen statikus szövegként két új változóban.Abduction Report In b o x — _ ---------------------. $ to = 'owengaliensabductedme. Number of aliens: dozens Alien description: little green men What they did: asked me about UFO regulations Fang spotted no Other comments: Please vote tor me. a feladó e-mail cím ét pedig a korábban megírt űrlapkezelő kódnak köszönhetően már tárolja az $ e m a il változó.com Allens Abducted Me .----------------------------------------------------------------------------------------------------------------- ' From : alfn®th0 yreallgreen. illetve a címzett e-mail cím e. ^ ^ x ^ was gone for $how long. és készen állunk a levél elküldésére! O Az üzenet töresp© Az üzenet tárgya-íQ A küldő o mail címe (FROM f O A 'címzett o mail címe (TO). am elyet az $msg változó tárol. most itt vagy ► 49 . 2008 12. valamint a feladó.07:20 PM C Q T To: ow en® aliensaixluctedm ecom ^l M r ------ ^ ** ■ Alf Nader was abducted last November and was gone for 11 hours.com' O - ^ Aliens Abducted .

hülye kérdések K : A feladó e-mail címén kívül van bármi "K uraber o f a i l ö i s t 'A l i e n §how jaanyV nM . A PHP m ail() függvénye e-m ailt küld egy parancsfájlból. akiknek másolatot („copy”) vagy titkos másolatot („blind copyv) szeretnél küldeni . A feladó e-mail cím ét nem kötelező. Ehhez a PHP beépített m a i l ( ) függvényére lesz szükséged. egy kocsivissza-újsor karakterpár­ ral kell elválasztanod őket. "O th«*r c o o s w in ts i S c t h e r 1 . de nem árt. kéf v éd ő h r*kter em h ufán! "From :" . $cc Itt kettős idézőjelekre van szükség. ha azt is belefoglalod. . mail($to. Nincsenek Ffchow l o n g A n " $»u b 3> c ^ - •ALle n a A bd u cted Me . amit meg lehet adni egy levél ré­ szeként? igen. ^ ^ fgtajyÉB<& átozásakor a 'From:' előtagot. az aláb­ bi formában (\ r\ n ): A „III) 1 lM il részét változók adják meg. * V: más. d e s c r ip tio n : $ a lie n _ a e * c c ip tlo a X n " . A feladóhoz („from”) hason­ lóan azoknak a címét is megadha­ tod. Ha feladót és másolatcímzettet is meg akarsz adni. $msg. mert 50 1. ami a neki átadott inform ációk alapján küld üzenetet. ismét egy pontot hasznaihatsz. $subject. hogy a * F r o m : ’ helyére ’ Cc : ’ -t vagy 1Bee : '-l írj. % n i . S to * ovren8alien3aiy3ucSfecln>g »corc 1 . egy függvényparaméteri kell használnod. » W « 0« . Alihoz. Az üzenet törzse A mai 1 ( ) függvénynek három információra van szüksége.a levél elküldése a php segítségével E-mail küldése a PHP segítségével Készen állsz lehál arra. ami ténylegesen el­ küldi az e-mailt O w ennek. "W hat t h e y d L d : 5 v h a t _ t h e y _ d id \ n " " Fang s p o t t e d : S ia n g _ s p o tte d \ n " .ehhez csak annyi szükséges. A címzett e-mail címe-— ^ ^ — A level tárgya mail($to. am iket mindig meg kell adni. valamint karakterlánc-összefűzést kell végezned. hogy megírd a PHP-kódot. $from . fejezet az \ r és az \n védölcaraktereket hasznalod. "\r\nCc: " .A b d u c tio n R e p o r t * . $msg). $subject. hogy a m a il ( ) függvény m eghívásakor megadhasd a „from" mezőt.

W küldjük el az e-m ailt.051 « » k “ tW ' $how_long - $ _ P O S T [ howiong *]. Menet közben egy HTMLweboldalt állítunk elő. </boay> </html> report. '<br />'. ] $when_it_happened $_?OST['whenithappened1). ’The aliens did this: ' . '<br />'. hogy ez a kódsor az e-mail változóit létrehozó kód után álljon a parancsfájlban.Report an Abduction</h2> <?php $name = $JPOST('firstname' .cbr />'. $_P05T['lastname']. o r " . 'Number of aliens: ’ . •*<"» h«»^ ail($tO / S su b jectf Srtt h Smsg. $aiien_description $ POST [’a .c o m ’ . ím e Owen r e p o r t. $when_it_happened. '<br />'. $fang_spotted . hogy kipró­ bálhasd a parancsfájlt. 'Describe them: ' .p h p pa­ rancsfájljának teljes kódja. $ e m a i l ) 7^ 'From :' Itt rakjuk össze az Owennek elküldendő' különböző részeit. "Fang spotted: $far. 3 fong_spotted = $_POSTI'fangspotted'). Csak egy a m a il (> függvényt meghívó kódsorra van szükség az e-mail elküldé­ séhez. $msg = "$name was abducted $when_ it_happened and was gone for $how_long.\n" "Number or aliens: $how_many\n" . 'Other comments: ' . 'Was rang there? ' . * ti* * $how_many $^POST['howmany*]. ( $subject = 'Aliens Abducted Me . ' and were gone for ' . levél 'You were abducted ' . $email.Report an Abduction</title> </head> <body> <h2>Aliens Abducted Me . H l* “ ”” . Swhat_they_did . $alien_description . és minden rendben lesz. $ t o = 'o w e n S a l ie n 5a b d u c te d in e . "Alien description: $alien_description\n" .g_ spotted\n" . ’<br />'. a m a il () függvényhívással együtt: <html> <head> <title>Aliens Abducted Me . "What they did: $what_they_did\n" . '<br />'. Ne felejtsd el ezt az email címet a sajátodra változtatni. $email = $_POST['email']. '<br />’. li $what_they_did = $_POST['whattheydid']. php most itt vagy ► 51 . Gondoskodj róla. ?> echo echo echo echo echo echo echo echo echo 'Thanks for submitting the form. ' ' .Keltsd életre a statikus oldalakat! Ve hogyan kell h a szn á ln i a m allQ fü g g v é n y t? O Egyszerűen add a mail()-t meghívó kódot a parancsfájlhoz. amely megerősíti az űrlap sikeres benyújtását. ____________ .Abduction Report'. $how_long . Sother = $ POST[ 'other•). 'Your email address is ' . Sother . endescription* ]. $how_many .

An) thing rtoeyou want to add? «¿3©rt M fen w Lehet. hogyan kell e-mailt küldeni. hogy be kell állítanod a PHP-t a webkiszolgálón.aic iea o tUFO rglto« les i hs icJ a b u eua i n WasF n tee no a g hr? Oihcr cocnaentk: Please vote for roc Y o u r cniail a d d ic t ts atfni'ilicm -angrccn com H o* ra*n> did >ou *ec? l*m# What did U>e> do to 500? B m yoti seen ra j dog Fang? OMfl «"« ftbOl? 1 *l4ui4t»C*ft Yc* 0 No 1 A dinamikusan előál­ n c ü f *v *r f o t m t líto tt megerősítő weboldal továbbra is visszajelzést ad az ír lap benyújtásáról. Vigyázat I Ila a m ail () függvény nálad nem működik.-. atxiuctioc: •* M . és ne O w ené legyen. O cscribf ih o n : Thanks far subnufung tiie form Ynu woe ahdutiod last November ana were p o n e far I ! hocn Numberc f aliens: dozens Detcribe them: IntJe green roca ton gone? r. és töltsd ki az űrlapot az idegenekkel kapcsolatos inform ációkkal. $ s u b je e t és $msg). és ügyelj rá.Report an Abduction A it Az űrlapadatok formázása és e-mailben való elkül­ dése sikerült! Ftrrf name: L w name: Hi09* ÜWKcnnbcr 11 W lm b jo u r email address? T Whcfl did It happen? I lo * lunt. hogy tudja. Kattints a Report Abduction gombra az űrlap benyújtásához. várj néhány m ásodpercet. a z lehet a problém a . A w w w . majd ellenőrizd a levelesládádat. hogy m egérkezett-e az üzenet. hogy miként kell beállítani a levélküldési lehetőségeket a webkiszolgálőn.'i.php parancsfájlhoz. n e t / m a i l címen nézhetsz utána a részleteknek.az utolsó te s z tú t Tesztút Végezd el az utolsó simításokat Owen parancsfájlján. hogy a levélküldés támogatása nincs rendesen beállítva a PHP-ben. 52 1. nnr * 0 The ain d dti. ¿0 O Q A *** AbdutmdMg _ T_ ____________ H ____ ____ _ __ Aliens Abducted Me . nyisd meg a böngésződben. és próbáld ki! Add hozzá a három új levélváltozót ( $ t o . — Aliens Abducted Me . Töltsd fel a parancsfájlt a w ebkiszolgálóra. hogy a $ t o változóban a te e-mail cím ed. fejezet .Report an Abduction Share yum m y o f aljcr. p h p . valamint a m a il () függvény hí­ vását a r e p o r t .

R ep ort« . aki kapcsolataz i d e g e n e k . hogy valaki n e m r é g r a b o l t a k látta a kutyáját. m ost itt vagy ► 53 . Abduction Sally kitölti A < fo r m > elem action jellemzőjének h a t á s á r a a report.t«•**•«! YV M * « • . Alien. a szabadidejében átnézheti a kapott válaszokat. ha azt hallja. Abducted Me .Keltsd életre a statikus oldalakat! Owenhez dőlni kezdenek a levelek O w en nagyon örül. r* I MI*M: y iV mwr sJw ** * ftmf ««ml «I úrwm' A lien* A M uctcd Me Ti«*** Is«TVMJAJ f« htf *. biztosan meg fo g o m ta lá ln i A g y a rtl san előállít egy megerősítő HTML-oldalt. mert az űrlapján keresztül dőlnek hozzá az információk az idegenekről. H «r. A PHP-parancsfájl egy e-m ailt is elké­ szít. (A M « ^ m * + ** f ka I £■• TWilm « 1 C«« jr* uA*4 A W* *»•' >« # »HO W V -^ n w t 'O •At r» A PHP-parancsfájl dinamiku­ Ez á lla ti Ha Ilyen in fo r­ m á c ió k a t kapok a z ide­ g e n e k re . És ami m ég jobb. amelyet e l is küld Owennek. Owen most már boldog. mert m indenkinek tudni fogja az e-mail cím ét. hogy egy w ebes űrlapon keresztül m eghízható inform á­ ciókhoz fog jutni az idegenek tevékenységéről.php parancsfájl fe l­ dolgozza az íírlapadatokat. am elyek közvetlenül a leveSally. Most már nem kell aggódnia. ba lép vele. akit lesládájába érkeznek.

Alien» Abduct cd Me • Report mn Abduction Aliéin Abducted Mc . Az elektronikus levelesládája dugig van. hogy annyi e-mailt kap. hogy alig tudja követni. És biz­ ton ságos helyen kell ta rta n o m <5ket.levéláradat Owen elveszít néhány levelet O w enhez tehát most már m egérkeznek a levelek. és már törölt is véletlenül néhány levelet.Report an Abduction V *r TW fctO tM k r áSŰ _ £L A lkns Abducted M e . Nézd e z t a sok \ levelet! Valahogy meg kell oldanom . O w ennek jobb módszerre van szüksége az idegenekkel kapcsolatos inform ációk tárolására.Report an Abduction li3*r % metj m »m Ali c m Abducted M c • K*port *n Abdoctiou Aliens Abducted Abduction -Me .Report ha Abduction M r «/»I* Ez így nem lesz jó . A rossz az. Ez eddig a jó hír.Hrporl au Abduction Alien* Abducted M e . ) hogy az a d a to k a t akkor kapjam meg amikor szükségem van rájuk. hogy ne veszítsem el. ____ S .

amellyel tartalmat.és PH ?-összetevőket aszerint. echo $ POST webkiszolgáló tömb szuperglobális mail() m ost itt vagy > 55 . amellyel a w ebböngészőkben megtekintett weboldalak tartalmát és szerkezetét lehet leírni. Beépített PHP-tömb. amely több információ egyetlen helyen történő tárolását teszi lehetővé. hogy fel kell dolgoznia és futtatnia kell őket. Beépített PHP-függvény. hogy mire valók: HTML Szoftveralkalmazás weboldalak megtekintésére és az azok­ kal való interaktív kapcsolattartásra. hogy párosítod az alábbi HTML. Ezek a cím kék zárják közre a PHP-kódokat. Programozási nyelv. Jelölőnyelv. Olyan beépített PHP-változó. amely a w ebes kommu­ nikáció ügyféloldalaként működik. PHP webes űrlap böngésző <?php ? > változó idézőjelek Szoftveralkalmazás weboldalak továbbítására. amelyet minden parancsfájl elérhet. amely olyan adatokat tárol. például sima szöveget vagy HTML-kódot lehet kiíratni. amely e-mailek küldésére használható. Tárolóhely egy7 PHP-parancsfájlban. Egyfajta PHP-adattároló. amellyel információk kérhetők a felhasználótól. hogy a w ebki­ szolgáló tudja. amely saját egyedi névvel és adattípussal rendelkezik. amelyeket a „post” módszerrel küldtek el. amely a w ebes kommunikáció kiszolgálóoldalaként működik. Minden karakterláncot ezek közé kell zárni.Keltsd életre a statikus oldalakat! Állítsd párba! Az idegenek irányítják az agyad? Rázd le őket azzal. PHP-parancs. Beviteli mezők gyűjteménye egy weboldalon. amellyel webkiszolgálőn futó parancs­ fájlok készíthetők.

megoldás Állítsd párba! Megoldás Az idegenek irányítják az agyad? Rázd le őket azzal. hogy fel kell dolgoznia és futtatnia kell őket. PHP webes űrlap böngésző <?php ? > változó idézőjelek Szoftveralkalmazás w eboldalak továbbítására. Minden karakterláncot ezek közé kell zárni. am ely e-m ailek küldésére használható. Egyfajta PHP-adattároló. am ely saját egyedi névvel és adattípussal rendelkezik. amellyel a w ebbön gészőkben megtekintett w eboldalak tartalmát és szerkezetét lehet leírni. hogy mire valók: HTML Szoftveralkalmazás w eboldalak m egtekintésére és az azok­ kal való interaktív kapcsolattartásra. amellyel w ebkiszolgálón futó parancs­ fájlok készíthetők. am elyeket a „post” módszerrel küldtek el. Tárolóhely egy PH P-parancsfájlban. hogy párosítod az alábbi HTML. hogy a w ebki­ szolgáló tudja. Beviteli m ezők gyűjtem énye egy w eboldalon. Programozási nyelv. amely a w ebes kom m unikáció kiszolgálóoldalaként működik. amellyel tartalmat. am ely több inform áció egyetlen helyen történő tárolását teszi lehetővé. am ely olyan adatokat tárol. amely a w ebes kom m u­ nikáció ügyféioldalaként működik. Beépített PHP-tömb. például sima szöveget vagy HTML-kódot lehet kiíratni. PHP-parancs. Jelölőnyelv.és PH P-összetevőket aszerint. Beépített PHP-függvény. Olyan beépített PHP-változó.Állítsd párba! . amelyet minden parancsfájl elérhet. echo $ POST webkiszolgáló tömb szuperglobális mail() 56 1 fejezet . amellyel inform ációk kérhetők a felhasználótól. Ezek a cím kék zárják közre a PHP-kódokat.

hogy életre keltse Owen webes űrlapját.Keltsd életre a statikus oldalakat! PHP & MySQL szerszámosláda Az 1. tömb Adatszerkezet. amely lehetővé teszi a w ebol­ dalak tartalmának módosítását a kiszolgálón. Különleges változó. am e­ lyen keresztül az érték elérhető. Minden értékhez tartozik egy index (sorszám ). Ismételjük át. amely PHP-kódot tartalmaz bizonyos feladatok elvégzésére a webkiszolgálón. A PHPb en a változók nevének dollárjellel kell kezdődne.. vagy am ely más kódrészekkel összeüt­ közésbe kerülhet. amely értékek hal­ mazát tárolja. PHP-parancsfájl Szövegfájl. pék. mint a MySQL. am elyet nehéz beírni. hogyan foghatod munkára a PHP-t. Ilyen például az \n (újsor karakter). az infor­ mációkat pedig az SQL nyelv se­ gítségével szúrhatjuk be és nyerhetjük ki. hogy mi mindent tanultál. amely űrlapadatokat tárol. m ost itt vagy ► 57 . amelynek segítségé­ vel adatbázisokban és táblákban tárolhatunk adatokat. hanem által értei- védőkarakter Olyan karaktert jelöl a PHP-kódban. mielőtt az oldal az ügyfélböngészőhöz kerülne. MySQL Alkalmazás. ilyen formában: $ v a lto z o _ n e v e .. SQL Lekérdezőnyelv az olyan adatbázis-kezelő alkalmazá­ sok utasítására. fejezetben megtanultad. PHP Kiszolgálóoldali parancsnyelv. változó Egy-egy adatot tároló elem .

.

Az űrlapadatok elküldése levélben azonban már nem elég jő m egol­ dás. m ie lő tt kapcsolódhatnánk a webhely-konfiguratorátorhoz. ha tudod. A közelébe nem engedem a webee program jaim nak Nem árt. kinyerhesd őket.ahhoz azonban. amíg szükséged nem lesz rájuk. és ha eljön az idő. hogy megőrizhesd. és a program jól is működik. mielőtt építkezni kezdesz. El­ készítened az első Pl IP-parancsfájlodal. hogy ez m űködjön. ez egy új fejezet . hogyan állnak össze a dolgok. Az adata­ id biztonságos tárolásában egy MySQL-adatbázis segíthet . a PH P-parancsfájlt hozzá kell kapcsolni a MySQL-adatbázishoz.2 Kapcsolódás a MySQL-hez * Rakd öe kell dugnunk az interw ebet. Az űrlap adatait mentened kell valahogy.

távol: 1 nap. Owen levélküldő parancsfájlja nagyszerűen működött. és könnyen megtalálja az Agyar­ ral kapcsolatosakat. Valójában van egy levél. de most már levelek tömkelege érkezik hozzá . a legtöb­ ben úgy ejtik a MySQL-t. de I jelenleg is eb b en a m appában rejtő zik . hátha van bennük valami Agyarról. Ennyi ideig vdr. Ha véletlenül nem tudnád.ee r inbox Ez az elveszett beje­ lentés említést tesz egy kutyáról_Owen pontosan ilyen infor­ mációkra vágyik. hogy „m aj-es-kii-el". hogy elolvasta volna i őket. am ikor van rá ideje. Egyes levelek pedig a levélszem ét-m appáját duzzasztják.. Egyéb megjegyzések: Lehet. Ez az. Owennek az ilyen leveleket biztonsá­ gosan. A z idegenek leírása: zöldek hsr.’ ahol végigböngészheti Ölcet. ha* láttam a kutyádat..sokkal több. amelyek a levelesládájába érkeznek. ami nagyon érdekelné.a levélben elküldött űrlapadatok hátulütői Owen PHP-űrlapja jól működik. M it tettek: Csak beszélgettünk és Játszottunk egy kutyával lá tta Agyart: igen. mint amennyit kezelni tud. amíg csak né­ hány választ kapott. hogy akkor olvassa el el az e-m aileket. a m in t megérkeznek. Hány Idegent látott: négy. Egy kávénál több kell ahhoz. anélkül. ami lehetővé teszi. K la s s z ez az új bejelentő űrlap.. hogy mindet el tudjam olvasni.. de m o s t meg t ú l sok levelet kapok. I O w en véletlenül törölt néhány levelet. írj nekem Sally Jor. Túl jó l. amelyet soha nem néz meg. csáppal. Nem tudok annyi k o ffe in t e lfo g y a s z ta n i. elrablásának Ideje : nappal ezelőtt. hogy Owen lépést tudjon tartani az idegenek­ kel kapcsolatos le­ velekkel.O w en n ek egy olyan módszerre van szüksége a levelek tárolására. olyan helyen kell tárolnia. am iben egy MySQL-adatbázis segíthet. 60 2 fejezet .

amellyel utasításokat adha­ tunk egy MySQLHa az idegenekkel kapcsolatos adatokat biztonságosán. A MySQL névben az „SQL" a Structured Query Language [struk­ turált lekérdezonyeív) rövidítése. Az adatbázis-kiszolgálóval egy olyan nyelven érintkezhetsz. am elyek kapcsolódó adatok sora­ iként (row ) és oszlopaiként (colum n) tárolják az információt. hogy kik válaszoltak „igen”-ne 1 az Agyarra vonatkozó kérdésre. elektronikus tárolószekrény. Amire szüksége van. O w en a számára kényelm es időpontban elem ezheti a bejelentéseket. Egy MySQL adatbázis-kiszolgáló több adatbázist is tartalmazhat.ez az esetünkben az SQL Az adatbázis-kiszolgáló jellem zően egy w ebkiszolgálóval párban. és akkor. és adatokat ír oda. az egy adatbázis. amit sze­ retnél. és társaloghat az adatbázis-kiszolgálóval. és HTML-tartalmat ad vissza. Mivel az adatbázisokban az inform ációk precí­ zen rendszerezettek. és együttm űködve olvassák és írják az adatokat. am elyet az megért . ami egyfajta csili-vili. Kiszolgálógép Adatok MySQL-adatbázis Ugyfélböngésző ^ adatbázis-kiszolgáló adato­ kat olvas az adatbázisból. il­ letve szolgáltatják a w eboldalakat. most itt vagy ► 61 . Az adatbázisokat egy különleges program kezeli. amit adatbázis-kiszolgálónak hív­ nak: esetünkben egy MySQL adatbázis-kiszolgáló. adatbázisnak. A legtöbb w ebalkalmazás egyetlen adatbázis egy vagy több tábláját használja. Csak egy kis SQL-kódra van szüksége. ultra-rendszerezett. futtatja a PHP-parancsfájlokat. Egy adatbázis több táblából állbat. hanem valamilyen biztonságos helyen tárolja. / A MySQL adatbázis­ táblákban tárolja az adatokat. pontosan azt az információt olvashatod ki belőlük. egy MySQL-adatbázisban tároljuk. Az SQL az a lekérdezonyelv.kapcsolódás a M yS Q L-hez A MySQL kiválóan alkalmas adatok tárolására O w ennek égető szüksége van arra. A MySQL-adatbázisok táblákra (table) oszlanak. hogy az idegenekkel kapcsolatos bejelentések adatait ne az elektronikus levelesládájában. am ikor akarod. A webkiszolgáló feldolgozza a weboldal-kéréseket. ugyanazon a kiszolgálógépen működik. mintha különbö­ ző mappák lennének egy iratszekrényben. M « adatbázis mVm a3s ¡ltk foriMjíU táróim 3 „ nem szükségszerű.

Ez után módosíthatja a r e p o r t . és így tovább. M indig a z t m ondják. hogy megfelelő eredményt é rjünk el. hogy az idegenekkel kapcsolatos adatokat tárolja. hogy a z eszközön m úlik.első az adatbázis. í „ l «B b « W M túl t o iW K W » A phpMyAdmin-t PHP nyelven írták. fejezet A MySQL-terminál és a phpMyAdmin kettő a népszerű MySQLeszközök közül. php parancs­ fájlt. és O w ennek is egy ilyenre van szüksége. A MySQL-adatbázisok és -táblák létrehozásához egy MySQL adatbázis­ kiszolgálóval kell kommunikálni. hogy* átfussa őkel. ahova hatod az SQL-utasításokat. A grafikus phpM yAdm in eszköz £jU«iT V s !< ! !é . amely hozzáférést nyújt a parancssorhoz. A phpMyAdmin azonban ennél is tovább m egy egy lépéssel: olyan w ebes alapú felületet nyújt. Mindkét eszköz lehetővé teszi SQL-parancsok ki­ adását. H onnan tu d h a to m . hogy m ilyen M yS Q Le s z k ö z t kell h a szn á ln o m a z a d a tb á z is o k ás tá b lá k lé tre h o z á s á h o z ? A M y $ C M 6rn1iná' e9V olyan pa ranesablak. hanem egy táblában tárolja. és táblákat. egy MySQL adatbázis-kiszolgálóra és egy különleges szoftvereszközre van szükség. MySQL-termmál Owennek egy MySQleszközre van szüksége az idegenekkel kapcso­ latos új adatbázisa. Alihoz. akik esetleg látták Agyart. . és időt ad Ow en­ nek. Ennek az az oka. hogy az adatokat ne e-mailben küldje el neki.a mysq/ segíthet Owennek Owennek egy MySQL-adatbázisra van szüksége Eldöntetett hát: a MySQL-adatbázisok jók. Az idege­ nek által elraboltaktól beáramló adatokat a tábla biztonságban megőrzi. il­ letve adatbázis-táblája létrehozásához.tű e s ik « . hogy létrehozhass egy MySQL-adatbázist. és kiválogassa azokat. adatokat szúrhatsz be és jelölhetsz ki. De ne szaladjunk előre . am ely egérkattintásokkal vezérelhető. K I. 2~~v>r. Egyes w ebtárhelyszolgáltatók a phpMyAdmin-t a MySQL-alapszolgáltatásuk részeként biztosítják. hogy a webkiszolgálóktól eltérően az adatbázis-kiszolgálókkal SQL-parancsok segítségé­ vel lehet kapcsolatba lépni. míg a MySQL-terminállal a legtöbb MySQL-telepítés elérhető. 62 2. am elyekkel adatbázisokat és táblákat hozhatsz létre.

..... megkérheted őket...... ki kell pipálnod.. pipáld ki az egyes négyzeteket. 1 1 — | | Az adatbázisban használt jelszavam :......... Miután leírtad az adatokat.. □ A MySQL-kiszolgálóm helye (IP-cím vagy állom ásnév):.. Ha viszont nem. írd be ide. és kövesd az utasításokat a telepítéshez.... függelékhez...... ^ ^ SZ/ 62 a könyv esetleg rossz | | Az adatbázisban használt felhasználónevem:... úgyhogy nem árt.. hogy m eg­ győződj róla.... O w ennek nem segíthetsz MySQL adatbázis-kiszolgáló nélkül! Ha már telepítettél egyet... Ha minden inform ációt m egszereztél a MySQL adatbázis-kiszolgálóról..... tovább olvashatsz. A MySQL-kiszolgálóhoz a következő eszközzel tudok hozzáférni: Ha egy „á s ik MySQL-eszközt t a ^ 7 Iáitól........... Ha sikeresen hozzá tudsz férni a MySQL-kiszolgálóhoz... csak annyi van hátra.... ami műVödik. hogy telepít­ sék a kiszolgálót....... nyugodtan írhatod máshová is Minden négyzetet az adatokat.kapcsolódás a M yS Q L-hez Mielőtt a következő oldalra lapoznál....... A MySQL adatbázis-kiszolgálók eléréséhez számos információ szükséges.. Ezekre később is szükség lesz................... mindenképpen telepítened kell egy MySQL adatbázis-kiszolgálót. ugorj a 11.. ^ — ----------kezekbe kerül......... ahol a szolgáltató MySQL-t is kínál. m egerő­ sítésképpen pipáld ki az alábbi négyzetek egyikét: r □ | A MySQL-terminállal hozzá tudok férni a MySQL-kiszolgálóhoz.. hogy a kiszolgáló működik................. Csak az egyik négyzetet kell kipipálnod. és működik. | A phpMyAdmin segítségével hozzá tudok férni a MySQL-kiszolgálóhoz... í Q most itt vagy > 63 .......................... Ha olyan webtárhely-szolgáltatást veszel igénybe... ha kideríted őket..

w h e n _ it_ h a p p e n e d v a r c h a r ( 3 0 ) . fejezet . hogy értesítsen a parancs vég­ rehajtásának sikerességéről. A táblák létrehozásához szükséges SQL-kód kicsit bonyolultabb. Az idegenekkel kapcsolatos új adatbázis létrehozásához írd be a CREATE DATABASE aliendatabase . Ehhez ezt a parancsot kell beírnod: US E a 1 iendatabase. h ow _lon g v a r c h a r ( 3 0 ) . Ha a tiéd nem. gondoskodnod kell róla. hogy az új adatbázis legyen kiválasztva. akkor létre kell hoznod egyet a CREATE DATABASE SQL-paranccsal a MySQL-terminálban. ) A MySQL-terminálba beírt minden SQL-parancsot pontosvesszővel kell lezárni. la s t_ n a m e v a r c h a r ( 3 0 ) . Mielőtt létrehozhatnád a táblát az adatbázison belül. fa n g _ s p o tte d v a r c h a r ( 1 0 ) . parancsot az alábbi módon: File Edit W in do w Help P h o neH om e fi MySQL-kiszolgáló általában vála­ szol. hogy a készenléti jel m ysql>-re változik. a lie n _ d e s c rip tio n varchar(lOO) w h a t_ th e y _ d id v a r c h a r ( 1 0 0 ) . amivel új táblát hozhatsz létre. Először azonban meg kell nyitnod a terminált egy parancsablakban . hogy milyen típusú adatot szeretnél az adott táblában tárolni. e m a il v a r c h a r ( 50) Ez egy SQL-parancs. | Füe Edit W in do w Help P honeH om e Ha a term inált használod.adatbázisok és táblák létrehozása a m ysql-ben MySQL-adatbázis és -tábla létrehozása Egyes MySQL-telepítések már eleve tartalmaznak egy adatbázist. ezt onnan láthatod. Vizsgáljuk meg közelebbről a szükséges SQLparancsot. 64 2. min­ den parancs után pontosvesszőt kell tenned. o th e r v a r c h a r (100) . H l »«*• " fajta adatok tárolhatók a táblában. mivel pontosan meg kell határoznod. mielőtt beírnánk a terminálba: CREATE TABLE a l i e n s _ a b d u c t i o n ( firs t_ n a m e v a r c h a r ( 3 0 ) . how_many v a r c h a r ( 3 0 ) .ehhez általában elég beírni a m ysql parancsot. Ha si­ került belépni a terminálra. Minden más részletes Pimuou informáMÖ m i i .

Show mis query here agam Or Location of the text file: . a l i e n s _ a b d u c t i o n nevű tábla.14 sec) Ha a te MySQL-változatod a w ebes alapú phpMyAdmin eszközt is rendelkezés­ re bocsátja. other v ar ch ar (100). (Max: 8. Kattints az SQL fülre a phpMyAdmin-ban. A phpMyAdmin alkalmazás SQL lapján tehát ugyanúgy adhatsz ki SQL-paran­ csokat. most itt vagy ► 65 . m y s q l > CREA TE TABLE aliens abdu ct io n first name varchar(30). when it ha ppe n e d varchar(30). CREATE TAEI-E à li« n s _ . h o w l o n g v a r c h a r (30). máris létrejön a vadiűj.192KB) Compression. . mint a MySQL-terminálban. what they di d v a r c h a r (1O C ) # f. az adatbázisokat és táblákat grafikus felületen keresztül is elérheted. mint a MySQL-terminál. how_tnany v a rch a r(3 0 >. h o tf a tábla minden probléma nélkül létrejött.= b d > iC tio n Database: ^_____________ [ aliendatabase (-) Z\ aliendatabase (-) & fifst_nan>e v a rc h a r(3 0 ) . Run S Q L query/queries on database aliendatabase. ami úgy viselkedik. de beírhatod közvetlenül is az SQL-parancsokat. és egy olyan szövegmező tárul eléd. fïi Autodetect tfa beírtad az SQLk°dot.. alien_desCC i p t i o n v a rc h a r(1 0 0 ) . grow s« . hov. 0 rows a f f e c t e d (0. how m a n y v a r c h a r (30). h e a d f i r s t l a b s . pontosan ugyanúgy. > Database ¿p aliendatabase I p§ Structure .) Ha sikerül beírni az utasí­ tást._Iong varchar (3 0 ) . email varchar(5C) ( ). wher i t_happenerf v a rc h a c(3 0 ) . A végre­ hajtásukhoz csak a Go gombra kell kattintanod. l a s t n a o e varch ar (UO) . A phpMyAdmin felületén az adatbázisokat és táblákat egérkattintásokkal hozha­ tod létre. kattints erre Q None Q p ip p e d ” 3 3 gombra a tábla Character set of the file: |utt8 létrehozásához. ( A teljes utasítás kódját megtalálod a Weben. a w w w .angspotted v a rc ha r (10) .8 S Q L] g lE x p o r t | y Search Query © § £ Operations | Ide ugyanazokat a parancsokat írha­ tod be. | File Edit W in do w Help P h o neH om e / MySQt-Vtiszolgáló \ „Query OK" válasza jelzi. c o m / b o o k s / h f p h p cím en. last name v a r c h a r (30). alien descrip-i on v a r c h a r (100). Query OK. what_chey_dlri varchar 1100) . mintha a MySQL-terminált használnád. mint amiket a MySQL-terminál­ ba írnál.kapcsolódás a M ySQ L-hez Az új tábla létrehozásához gépeld be a nagybetűs CREATE TABI E parancsot a MySQL-terminálba.

66 2. ami azt jelzi. ami az INSERT általános formáját mutatja. A következő rész az adatbázis osz­ * m f a utasítási Itt tová'bbi lo p n e v e k «eve. 3Z INSERT ÍH SQ lTO kulcsszavak kezdik. Az egyik leggyakrabban használt ezek közül az INSERT. még ha csak egyetlen karakterről . m int az adatbázis oszlopneveinek. o s z l o p _ n e v e 2 . hogy az oszlo­ pok értékei következnek. Amikor szöveget szúrsz be. Nézd meg az alábbi utasítást. az SQL INSERT utasítását használhatod. kcvJ kéznek. hogy a m á­ sodik zárójelben álló értékeknek ugyanabban a sorrendben kell lenniük. O en esetében w „ lopainak listája. J I « aí»ens_ai>duc#ion.bemutatkozik az IN S E R T utasítás O Megvan a My5QLadatbázís ee a tá b la . amelyeket szinten vesszők választanak el egymástól. I t t további a p o s z t r ó f értékek következnek. az utolsó után mncs Az aposztrófok használata helyes. > o vessző. mert az INSERT utasítás csak így tudja m egfe­ leltetni az értékeket az oszlopoknak az adatok beszúrásakor.van is szó. fejezet . ••• / ) 'é rté k 2 ' Egy másik SQL-kulcsszó. beszúrandó érA következő rész a fékek listája.pél­ dául 'M' vagy F' . min­ dig használnod keli őket. vessző. Az SQL nyelv m indenféle klassz utasítást biztosít az adatbázisokkal való kapcsolattartásra. Ne feledd. hogy ez az utasítás nem valódi SQL-parancs. csupán egy utasítás sablonja. FONTOS: |z ériékeknek ugyanabban a sorrendben kell állniuk. az r í j só után ninet 1 tá b la _ n e v e (o s z l o p _ n e v e l . mint az oszlopneveknek! A fenti utasításból m egjegyzendő egyik legfontosabb dolog.de hogyan tehetek beléjük a d a to k a t? Ha egy táblába adatokat szeretnél beszúrni. amelyeket vesszők választanak el egymástól. és figyeld meg az INSERT m űködését. amellyel adatokat raktározhatsz el egy táblában.

hogy az idegenekkel kapcsolatos adatokat elraktározd O w en új a l i e n s _ a b d u c t i o n táblájában: A sorrend számít! A beszúrandó értékeket ponto­ san ugyanabban a sorrendben kell megadni .net' ) Az egyes oszlopok értékei a második zárójelbe kerülnek.k<)pc soioda s a M yS Q L-hez Az INSERT utasítás működés közben Lássuk.u t a s ítá s o k t ó l élté és nem számot tartalmaz. hogyan használhatod az INSERT utasítást arra. 'four'. V first_name Hegyezd ki a ceruzád! Itt láthatod az a l i e n s _ a b d u c t i o n táblát. 'We just talked and played with a dog'. és szintén vesszők választják el okét egymástól. how many. Ezek az oszlopnevek. » * « i ) t í | . fang Q ~0 '3 days ago'. o ospotted. i fosztja © INSERT INTO aliens_abduction (first_name. és benyilazhatod az értékeket.^„ Itt mindegyik érték szöveget. írd be a Sally elrablásával kapcsolatos adatokat a táblába! Ha nem elég a hely. aliens abduction lo stn am e when_H_happened how jong how m any alien_ description what_they_did fangspotted other email most itt vagy ► 67 . alien_description. ft p H P . last_name. mint a z oszlop­ neveket! Ez a tábla neve amelvbe h > " > > » « '■ » " • » " ' ar « U M oszlopnevek az első zár' t alMV. '1 Oday'. 'I may have seen o your dog. Contact me. how_long. © 'sally@gregs-list. am elyben még nin­ csen ek adatok. é! „ . o 'yes'. email) © © what_they_did. © © © © when_it happened. rően a PHP-kódban hasz­ nált S Q U ta s ítá s o k végen nem áll pontosvesszo. a tábla fölé is nyugodtan ír­ hatsz. © 'green with six tentacles'.^ Vigyázat! NEM az adatbázisé'. © O VALUES ('Sally'. ezért aposztrófok közé kell zárni őket. other. 'Jones'.

hogy már telepítették is neked. és nem szeretnél minden apróság miatt parancsokat begépelni. fejezet . A MySQL-terminál eléréséről a II. Az. Sok esetben a MySQL-terminál nem önálló program. ezért kell mindig egy webkiszolgálón ke­ resztül elérni. amely hozzáférést nyújt a MySQL-adatbázisokhoz. amellyel parancssoros felületen keresztül érhetsz el egy MySQL adat­ bázis-kiszolgálót. am elyben még nincsenek adatok. úgy­ hogy lehet. Melyiket használjam az adatbázisom elérésére? V I Ez csak a te ízlésedtől függ. illetve attól függően.wf I may have seen your aliens first_nam© la stn a m e w h en H ba p p en e d how long how_many lu c tio n tH^n description wicrt_they_did fongspotted S a lly Jemes 3 days a<v> 1 dav •four Y*s Nincsenek hülye kérde'sek IC! Nem vagyok biztos benne. függelék tartalmaz részleteket. és hogyan találom meg a számítógépemen? V ! A MySQL-terminál egy olyan eszköz. írd be a Sally elrablásával kapcsolatos adatokat a táb­ lába! Ha nem elég a hely. Most azonban még nem árt. n e t címen. A phpMyAdmin számos webtárhely-szolgáltatónál része a szokványos MySQL-csomagnak. ez na­ gyon kényelmes lehet. ha arra összpontosítasz. hogyan ke­ zelheted a MySQL-adatokat SQL-parancsok segítségé­ vel. hogy az adatbázisokban é s táblákban grafikusan bön­ gészhetsz. Valójában PHP nyelvű program. egészen más lehet. az általad használt operációs rendszertől. nem pedig helyi ügyfélprogramként te­ lepíteni. magad is letöltheted és telepítheted. hogy ne egyetlen nagy adatmasszánk legyen. hanem egy kapcsolat. A telepítőcsomag ingyenesen hozzáférhető a www. például a Mac OS X ter­ minálalkalmazásának parancssorát használva létesí­ tesz. 68 2. I C ! A MySQL-terminállal és a phpMyAdmin-nel is rendelkezem. mint amikor bedobálsz egy csomó cipőt egy nagy dobozba. phpmyadmin . hogy az adat­ bázisban csoportokba szervezzük az adatokat. hogy megértsd. mint minden más PHP. A különbség nagyjából olyan. a tábla fölé is nyugodtan írhatsz. 1 just talked and He played with a d o g . V IC! Pontosan micsoda a MySQL-terminál.^ dog. anélkül. A phpMyAdmin előnye. és benyilazhatod az értékeket. Az ada­ tok tehát táblákban tárolódnak. hogy SQL-parancsokat kellene be­ írnod.megoldások és nem hülye kérdések ezd ki a ceruzád!------------------------------------------------------------------------------M p/inl/lac 9 ^ ^ a to d az al i e n s _ a b d u c t i o n táblát. Azt azonban ne felejtsd el. Ha már jól ismered az SQL-t. hogy értem a különbséget V I C ! És mi a helyzet a phpMyAdmin-nel? Azt hol találhatom meg? az adatbázis és a tábla között. ezért a terminált is érdemes használnod. hogy a MySQL-kiszolgáló helyi vagy távoli (tehát nem a te számítógépeden található). Contact me. a kisebb cipősdobozok pedig a táblák. Ha nem. és ugyanúgy be kell állítani. hogy a MySQL-terminált hogyan érheted el. az adatbázisok pedig a táblákat tárolják.és MySQL-alkalmazást. ! A MySQL-termináltól eltérően a phpMyAdmin egy webes alapú alkalmazás. amelyet egy „általános” terminál program. csak a táblák arra szolgálnak. Nem adatok tárolására való mind a kettő? ! De igen. de előbb minden pár cipőt beraksz egy kisebb dobozba: a nagy doboz az adat­ bázis. green with six tentacles * • " * & W/iif. hogy hozzáférjen a MySQL-adatbázisaidhoz. hogy a phpMyAdmin-t egy webkiszolgál óra kell telepíteni.

(firs t_ n a m e . 'green with s i x t e n t a c l e s ' . how_many. alien_description. w h e n it happened. '3 days ago'. az i n s e r t utasítás sikerrel járt. írd le.0005 sec) " « o f / * 9 » « ( . fang_spotted.net’ ) File Edit W in do w Help P u g sln S p a ce ruysql> INSERT INTO a l i e n s _ a b a u c t i o n (first_name. h o w _lo n g . hogy miként erősíthetnénk meg. VALUES fa n g _ sp o tte d . 'yes'. 'four'. ('Sally'. 'green wi t h six tentacles'. how_long. Q u e r y OK.net') .kapcsolódás a M yS Q L-h e z Tésztát Raktározd el egy idegenekkel kapcsolatos bejelentés adatait az adatbázisodban az SQL INSERT utasítása segítségével! Egy olyan MySQL-eszköz segítségével. fl day'. ' 3 d a y s a g o 1. other. C o nt ac t me. h o l d a s á t eredményezi 3Z allens-*l>dU ction táblához II t0W aft° ™ S = f érintett J j . mini a MySQL-terminál vagy a phpMyAdmin SQL lapja. w h a t_ th e y _ d id . a lie n _ d e s c rip tio n . ' I may h av e s e e n y o u r d o g .* ( - I Úgy tűnik. ' . most itt vagy ► 69 . 'sally0gregs-list_. 'yes'. ' J o n e s ’.példaként a Sally Jo n e s elrablásával kapcsolatos adatokat szúrjuk be: INSERT INTO a l i e n s _ a b d u c t i o n w h e n _ it_ h a p p e n e d . last_namc. 'Jones'. 1 rows a f f e c t e d (0. 'I ma y h av e seen your dog. hogy az adatok bekerültek a táblába. C o n t a c t m e . 'We just t a l k e d and p l a y e d with n d o g ’. other.UES (’Sally'. 'We j u s t t a l k e d and p la y e d w ith a d o g ' . la s t_ n a m e . what_they_did. email) VA-. 'sally@ gregs-list. írd b e az alábbi i n s e r t utasítást .'. h o w _ m a h y . 'four'. email) fl day’ .

hogy adatoszlopokat kérj le egy táblából. A S E L E C T utasítás erre kínál is egy gyors módszert: A csillag arra utasítja a SELECT par a n c s o t. ^ SELECT SQL A S E L E C T utasításnak megadott oszlopokat vesszőkkel kell elválasztani egymástól. • adja vissza. egy adatbá­ zisban a táblák „egyenlegének” lekérdezésére való a S E L E C T utasítás . J ASELECr w n á iq e a v k ö n ^ t . 70 2. last name FROM aliens abduction Ahhoz. ^ £C T «a* ^U *Í0n t á lá b ó l C nek a két oszlopnak az adatait \ j. hogy még nem erősítettük meg. \ \ nY er« hatokat SELECT first name. Függetlenül attól. hogy a táblának hány oszlopa van. de soha nem kérdezhetnéd le az egyenleget.és vezetéknevét olvassa ki az a lie n s _ a b d u c t io n táblából: U td S ÍtS S sd ú tO SZ lopokat nyer ki egy táblából. mert a csillag azt jelenti.bemutatkozik a S E L E C T utasítás Tábla adatainak kiolvasása a SELECT utasítással Az adatok beszúrása a táblába klassz. hogy egy ! N S E R T eredményét ellenőrizhesd. A SELECT k u lcsszó t a kio lva sn i kí­ vánt adatokat ta rta lm a zó oszlopok nevének kell követnie. a S E L E C T csak a megadott osz­ lopok adatait adja vissza. de némi nyugtalansággal tölthet el a tény. Ez olyan. fejezet . Az alábbi S E L E C T utasítás például az idegenek által elraboltak kereszt. mintha pénzt he­ lyeznél el egy megtakarítási számlán. valahogyan meg kell nézned a tábla összes ada­ tát. Nos. Hogy melyik táblából sze­ retnél adatokat kiválasztani. meg minden. hogy „sze rezd meg mindet!". hogy a tábla összes oszlopé- oak adatait olvassa ki.pontosabban a S E L E C T azt te­ szi lehetővé. nem csak néhány oszlopot. E z a S E L E C T u ta sítá s « a k e n - * S . hogy az adatok tényleg bekerültek a táblába. SELECT * FROM aliens_abduction Az oszlopok listájára nincs szükség.u - nem a/ta/anossa^fcan az atlatbázisr SELECT o s z lo p o k FROM tá b la _ n e v e A SELECT az utasítás FROM részé­ ből tudja.

í 4 f irst_ na mo | Sally | last name I Jones Jo n es | w he n _it_happened I 3 days ago | how_long I 1 da y I ho w m a n y | four I alieiwiescription I green wi t h six tent. -------------------. hogy' az im ént beszúrt új adatsor m egjelenik az eredm ényben: SELECT * FR O M aliens abduc ti on File Edit W in do w Help H a vcY o u S e e n H im m ysql> SELECT * FROM a l i e n s _ a b a u c tio n .+---------------------+-------------------------------. és ellenőrizd. adatokat láthatod.■ -------+------------------------------------— 1 row in s e t (0.kapcsolódás a M yS Q L-h e z Győződj meg róla. hogy az a l ie n s _ a b d u c t i o n tábla teljes tartalmát m egtekinthesd. ° 9 Í egyetlen adatsor tároló­ d d a táblában.i------------------. Hány adatsor található a tábládban? m ost itt vagy ► 71 .. hogy az idegenekkel kapcsolatos adatokat beszúró INSERT utasítás működött: olvasd ki a tábla adatait egy SELECT utasítással! Hajts végre egy SELECT-lekérdezést valamelyik M ySQL-eszközzel.+------.0005 sec) Az egyes oszlopnevek alatt az adott oszlopban szereplő A SELECT-lekérdezés felfedi.

s a í f ö c t ö d • b e lit -H ^öl'ccKiii.000- át -t Igaz.-— “ ---------------------------------------' y es *.j w hc:. hanem egy adatbázisban tárolja..r .\ n e r .. i s r * . hogy m inden a lk a lo m ­ m al meg kell írnom egy IN SER T u ta s ítá s t. ' t h e y l o c c i i i f c e dm íkfeys r.rn-i ')) .w t t c i r a t i a ^ w i t h sumo s i r i c offt f f P . I*sr_r.. _ h a r y i .. hogy O w en az adatait nem a leveleslá­ dájába érkező e-m ailekben. •» { 0 . Agytorna Mit gondolsz.m M ?*.' r. hogyan lehelne megoldani Ow en MySQL-adatbeszúrási problémáját? 72 2. Annak. ^ or *w . . l i « n 8 _ a b d u . . t m a i U VALü E ü ( ’ D ó r.Cr ---------------------.-idr.■ ^ ^ ___ • t o J ' ■ "a'“eí ■ •»“»»“ * *2 to«rS.f y .f. n g .i..'. r. sok ­ sok előnye van. • lÜ T d a .*.w_l. minden adatbeszúrás egy MySQL-adatbázisba egy INSERT utasítást igényel. a m ik o r egy e lra b lá s i b e je le n té s a d a t a it hozzá a k a ro m a d n i a z a d a tb á z is h o z ? Ez a M y5 Q L dolog m á r nem is tű n ik olyan vonzónak. i t .0 0 0 5 sec) r c . de az adatok kézi kezelése SQL-utasítások kiadásá­ val egy M ySQL-eszközben nem m űködőképes megoldás. *y».. 1 row s . e c t c . c d . w h a t “ t h e y d i r i .---. o' ' » « oal of w ..i!w .. Ouc-ry OK. O u e r y OK. * s ^ n -n d :’ .' r i r . • v a liy fl. ' t i ó n ( f l r s i _ : . a í . a !*-n d e s . .d <0. » b a t * ' n 1 ^ 9 1 ' . Itt válik fárasztóvá egy MySQL-adatbázis pusztán SQL-parancsokkal való kérdezgetése. ' Q u r t y l e ' . fejezet . T j“ g j f “ « ' «' = » »se«*. : i . * rfnn f . h o w jn a n y .SQL-parancsok automatizálása a P H P segítségével S zóval a z t mondod.. f a n y ^ o t t e d . ix.

.9 q ii_ c lo s e (Scibc) report. report.^ S í i ” .. SQ L-eszközök és fáradság nélkül! _____ ___________ _______ — A HTMl-ürUp itt eqy emaiH V é « i< . hanem az SQLparancsok automatizálása a PHP segítségével.' A PHP nélkül saját kezűleg kell megírnod az INSERT SQL-utasításokat. am ely gondoskodik az adatok beszúrásáról az adatbázisba... vagyis egyálta Ián nem kell igénybe venned egy xMySQL-eszközt.. html ccm A HTML-íírlap meghívja a PHPparancsfájlt.y ito * XMueted M . hogy Ow en HTML-űrlapja meghívhat egy PHP-parancsfájlt.. A PHP lehetővé teszi. •Rspori H* m A PHP segítségével parancsfájlt írhatsz.... 0 | r p ~ U | | H n | ^ r a . amely önmű ködően gondoskodik az adatok beszúrásáról.. ..... hogy adja az űrlap adatait az adatbázishoz. amikor benyújtják az űrlapot..P la B S r r --. és megkéri... Ez azt jelenti. hogy egy a kiszolgálón futó parancsfájl kódjában adj ki SQL-utasításokat. amelyet Owen m e a bp . ^ é < j a j á t k e z u le a V e» » a d a tS ~ ™ beszúfja s adatbázisba... am ikor csak benyújtják az űrlapot . » y .e-m ailek. amelyek az egyes elrablási bejelen tések adatait elraktározzák az adatbázisban..kapcsolódás a M yS Q L-hez Hagyd a PHP-re az unalmas SQL-t! O w en problémájára a megoldást nem az SQL elkerülése rejti. php m ost itt vagy ► 73 .

űrlap meghívja a report.html / A report. Az inform ációk a w ebkiszolgálón található report . fejezet .html weboldalon található © Egy csom ó más em ber is kitölti és el­ küldi az űrlapot. Nézzük meg közelebbről is. akit nemrég raboltak el az idegenek. 0 még min­ dig Sally. report. ne pedig levélben küldje el O w en cí­ m ére. amikor egy felhasználó benyújtja az űrlapot.hogyan használja owen alkalmazása a p h p -t és a m ysql-t? A PHP révén az adatok vezérlik Owen Webes űrlapját A PHP azzal javít O w en elrablásbejelentő w eb es űrlapján. 74 2. hogy az űrlapadatokat közvetlenül egy adatbázisba írja. hogy pon­ tosan hogyan működik az alkalm azás most. hogy’ neki kelljen saját kezűleg bevinnie azokat. és az elküldéséhez megnyom ja a Report Abduction gom bot. hogy a PHP is belépett a képbe! O Sally kitölti az idegenekkel kapcsolatos elrablásbejelentő űrlapot. hogy lehetővé teszi egy parancsfájl­ nak.php parancsfájlhoz kerülnek.php parancs* fá jlt a webkiszolgálón.

hogy tényleg elve­ szett kutyája. O w en most már sokféle új m ódon elérheti az adatokat. Ez a w ebhelye fő­ oldalának alapját is képezheti: az in d e x .php parancsfájlja kapcsolódik egy MySQL-adalbázishoz. A report.php parancsfájl kiolvassa az adatokat az aliens_abduetion táblából. és megmutatja O w ennek.pbp paranesfajl kap­ csolatba lép a N W $Q U is*o'gálóval. és megmutathassa Owennek. o Az adatbázis-kiszolgáló csak e g y kiszolgálógépen. hogy formázhas­ sa azokat. Agyar m egtalá­ lására összpon­ tosíthasson. rendsze­ index. O w ennek nem csak ahhoz van szüksége egy parancsfájlra. Az index.php rint a webkiszolgálo mellett futó program. Az aliens_abduction tábla adatsorok­ ként tárolja az idegenekkel kapcsolatban bejelentett adatokat. Az aliens^abducfion tábla index’l p a r a n c s f á j l adat­ forrásául szolgál. kiolvassa az idegenekkel kapcsolatos adato­ kat. hogy m egte­ kinthesse az adatokat. és INSERT SQL-utasítások segítségével beszúrja az egyes bejelen tések adatait.kapcsolódás a M yS Q L-hez O w en report . hogy az adatokat berakja az adatbázisba. és kereshessen közöttük. ami lehetővé teszi. bogy beszúrja az ada­ tokat az adatbázis a l i e n s _abduction táblájába. o most Itt vagy ► 75 .p h p parancsfájl kap csoló­ dik az adatbázishoz. hanem ahhoz is.

.. írd hát le újra az adatokat m ég egyszer: ezt a w eü " • tudhatod m eg..Mk......... I report........ Az adatbazisban hasznait jelszavam :....... . amit ki kellett pipálnod a fejezet korábbi részében? Itt vannak megint.... illetve U f a A tábla neve alien$_abduction..... és ugyanazokat az inform ációkat is kell m egadnunk........i ........ ki egy M ySQ L-adatb ból....... ges ahhoz...... a parancsfájl ugyanúgy végrehajthat SQLparancsokat....................... hogy e g y m r 1^20 adatbázist használsz...... ....... Az adatbázis neve aliendatabase.... Egy PH P-parancsfájlból sok szem pontból hasonlóan kapcsolódhatunk egy MySQL-adatbázishoz. A korábban létrehozott adatbázis neve....... egy újjal együtt.. és ez a név sziiksé-i A te négy kapcsolati adatod különbözni fog ezektől...... fejezet . Az adatbázisban használt felhasználónevem:.... ami aliendatabase.az adatbázisnak.... Miután a kapcsolat létrejött. mint egy MySQLeszközből.. mintha saját kezűleg írnád be azokat egy M ySQL-eszközben...... Em lékszel a három négyzetre...... amely adatokat tárol m l * ‘ « .. Ha valamiért más nevet adtai -----. Az adatbázisom n e ve :......... amíg SQL-parancsokat nem kezdesz kiadni............... kapcsolódnia kell az adatbázishoz.. vagy úgy döntöttél..... vagy a webmesi^® ^ vagy ^ a m js-kiszolgálód 3M ySQL a a 325 ^ használtaugyanazon ^ j 3 ^ 3 ".. a jelszó és az adatbázis neve mind szükséges ahhoz.php aliendatabase Minién pH P-p««e$fi)... írd be a' annak a nevét... . hogy kapcsolatot létesíthess egy MySQL-adatbázissal egy PHPparancsfájlból........mysql-kapcso/at létesítése Kapcsolódás az adatbázishoz a PHP segítségével Mielőtt egy PH P-parancsfájl adatokat szúrhatna b e vagy olvashatna ki egy MySQLadatbázisból.... és addig nem lép a képbe..... aliens abduction index.0C3 © A MySQL-kiszolgálóm helye (IP-cím vagy állom ásnév):........ Az adatbázis-kiszolgáló helye. u 1 ' > ji............... 76 2.................... lA .... am elyik m ellé az adatbázis nevét írhatod be.........php í z a? létrehozott ¿datbizis.. .... 1 ... először kapcsolatot kell létesítenie az adatbázissá a fenti négy információ fe l­ használásával.. . hogy a parancsig A d a tb á zis -k is zo lg á ló kapcsolatba tudjon lépni az adatbázissal. a felhasználónév....

’VALUES ’ (f irst_name. amikor a lekérdező karakterláncot átadod az adatbázis-kiszolgálónak. Agytorna Mit gondolsz. ’3 days a g o ’. ” .mysqli q u e r y ($dbc. ’I may have seen your dog. " . ’ ’’sail y@aregs-list . amelynek kódja egy új sornyi idegenekkel kapcsolatos adatot szúr be: Itt a TE négy értékednek kell állnia. Az összes említett feladatot egy PHP-parancsfájl kódján keresztül fogjuk elvégezni. email) ” . hogy egy PHP-kódból elindíthass egy MySQL-lekérdezést. mit csinálnak ezek a PHP/függvények a parancsfájlban? m y s q l i _ c o n n e c t () m y s q l i _ q u e r y () m y s q l i _ c l o s e () ^ most itt vagy ► 77 . kiadása 3 fyWL-adatbáíisban. hogy a 'loeaihost' szót is használhatod. fang_spotted. be kell zárnod a kapcsolatot. A lekérdezés végrehajtására ténylegesen csak akkor kerül sor.’). valamint az előttük és utánuk allo szóközökre! Sresult . alien_description. ’1 d a y ’. Végül. Contact m e . ?> Ezek a függvények a PHP-nek legalább a 4. ’f o u r ’. mysqli c l o s e ($ d b c ).com1. nem Ómenének. amikor befejezted az adatbázis lekérdezését.net’ )’ ’. először kapcsola­ tot kell létesítened az adatbázissal. Az adatbázis helyeként tartománynév helyett lehet. last_name. ’y e s ’. what_they_did.1-es változatát igénylik a webkiszolgálón. other. " . Nagyon ügyelj itt az aposztrófokra és kettős idézőjelekre. ím e egy példa. now_iong.kapcsolódás a M yS Q L-hez Adatok beszúrása PHP-parancsfájl segítségével Alihoz. ’).f *a iensrool1 I) or d i e ( ’Error connecting to MySQL s e r v e r . when_it_happened. $ query = ’ ’INSERT INTO aliens abductibn "how_many. 'green with six t e n t a c l e s ’. " ’We just talked and played with a dog'. <?php • "' " zr _l • • dat ensabductedme. ’J o n e s ’. A lekérdezést ezután egy PHP-karakterlánc formá­ jában építheted fel. $query) or die {’Error querying d a t abase. ’. Egy PHP-kódban az INSERTlekérdezést karakterláncként építheted fel. (’S a l l y 1. *owen.

valamint az adatbázis nevét. min­ dig jól működik. és a korábban megismert négy adatot kell megadni neki. Ahhoz. vagy azok kinyerését onnan. az nem véletlen: ma már minden PHP-függvény neve. de egy olyan egyszerű név. Például ha adatokat szeretnél adni az a 1 i e n s_ a b d u c ti. meg kell adnod a kiszolgáló helyét. e Az adatbázis-kiszolgálóval való társalgáshoz SQL-parancsokat kell használnod. Az általunk választott változó nevében nincs semmi különleges. . A fenti három függvény használata jellem zően azonos. Ez a függvény lezárja a kapcsola­ tot a MySQL-adatbázissal. m egjósolható lép ésekből áll: _ Csatlakozunk egy adatbázishoz a mysqli_connect() függvénnyel. egy \NSERT utasításra lesz szükséged. Az i" I ÜSp-T mysqli_close( ) -h m - mysqli_connect( ) Ez a függvény a MySQL-adatbázisokhoz való csatlakozásra szolgál. és karakterláncként tároljuk egy PHP-változóban. hogy kapcsolatba lépj a MySQL adatbázis-kiszolgálóval. mivel a csatlakozás egy konkrét adatbázishoz történik. t*99*l kezdő:m . egy felhasználónevet és egy jelszót. j r nélkül.a php három mysqf-kapcso/ati függvénye Társalgás az adatbázissal PHP-függvényekkel Három fő PHP-függvény használható a MySQL-adatbázisokkal való kapcsolattartásra: a m y s q l i _ c o n n e c t (). A lekérdezést e tf karakteriá«* for­ májában hozzuk létre. hogy engedélyt kapj arra. ami általában adatok bevitelét je­ lenti egy táblába. a mysql i_ előtaggal kezdődik. mysql i__query ( ) Ezzel egy lekérdezést intézhe­ tünk egy MySQL-adatbázishoz. mint a S q u ery . Ha gyanúsan ism étlődő mintázatot látsz bennük. a m y s q l i _ q u e r y () és a mysql i_cl őse (). Haltól A M yS Q Lk is z o lg á ló t keresem. és a Squery változó tárolja.o n táblához. O t t van? m y s q l i_ jc o n n e c t () ^ _______ 1 I A datb ázís-k iszo lg él C s a t la k o z v a ! Létrehozunk egy SQL-lekérdezést. am ely a MySQL-lel kom m unikál.

<?php $dbc = mysqIi_connect('data. m ost itt vagy ► 79 . " .'. email) " . a lekérdezést tartalmazó változó nevét egyaránt meg kell adnod. ezt az üze­ netet kapod. m y s q l i _ _ c l o s e () E s e tle g „k o s z i”? M icso d a t u s tó l K a p cs o la t bezárva. 'aliendatabase') $query = "INSERT INTO aliens_abduction "how_many. ( )-te l. Ef " IHSIDT S Q l-l. INSERT-eW be e z t a tá b lá b a . 'owen1. Contact me. how_longf " . -----\ Ez 3 függvény hajtja végre a lekérde?ésf' ami egy ÍNSERT u f« ff« k ó i a». (first_name.'). Ha valami félresiklik.mysqli query ($dbc.kapcsolódás a M yS Q L-hez Kiadjuk a lekérdezést a m ysq ii. hogy a m y s q l i _ c l o s e {) segítségével közlöd a MySQL adatbázis-kiszolgálóval. lépésben létrehozott. A MySQL adatbázis-kiszolgálóval való társalgáshoz és az adatok felvételéhez az al ie ns _a b d u c t i o n táblába a mysql i_query () függvény és a $query változó szükséges. may have seen your don. A m y s q l i _ q u e r y () -nek az 1. ' 'four*. ' ) ^Jmysqli closed $dbc). o A $query valtozoban ta ro lt kod SQL ¿s nem PHP-kod. szeva. R észem ről ennyi. ('Sally'. when_it_haopened. $query) or d i e ( ’ E r r o r querying d a t a b a s e . '^'iensrool'. a kapcsolati változó neve. 'yes'. " . $ resu lt.com ' .aliensafcductedme. zárjuk b e ?> a kapcsolatot. fang_spot:ted. other.d. '1 day'. m y s q l i _ q u e r y () Siker! Bezárjuk az adatbázis-kapcsolatot a mysqli_close() függvénnyel. "VALUES © or die('Error connecting to MySQL server. hogy befejezted a társalgást. lépésben létesített kapcsolat nevét és a 2. 'Jones'.^/ C Megvan. what_they_di. alien_description.. Nézzük meg közelebbről is a PHP mindegyik adadatbáziskezelő függvényét! Kezdjük a mysqli_connect. ami adatefea* seur be C Hé. Az utolsó lépés. q u e ry() függvénnyel.. r3 days a g o ' . "'We just talked and played with a d o g ’. 'green with six tentacles'.U r* ií. _ast_name. . és a míívelet leáll.

80 2. kövesd az utasításokat. A változó neve a példánk­ ban $dbc (mint „database connection". ezért idézőjelbe kell tenned Őket. amilyet csak szeretnél. vagyis „adatbázis-kapcsolat”). r o o l. ) jelszót és MySQL-adatbázisnevet egyaránt idézőjelek közé kell zárnod: A f i / / l nt\ rlCií il\ £* * f i — COíIflÖCT( J T U 0 0 - f M to i. A mysql i_connect ( függvénynek megadott helyet.« * Ennek • »íiteómk a njít»s«»i H«jth1 « «és-« »«Wrtrt. ^ --------. a lie n s a b d u c t e d m e . valamint egy PHP-változó.t« . vény a helyet. vagy amit a webtárhely-szolgáltatód határozott meg. hogy bizton­ ságos felhasználónevet és jelszót adj magadnak. fejezet . kiegészítve az adatbázis nevével. amikor telepíti a MySQL-t. Igen. a MySQL-terminálban használtál. Ha saját magad üzem eled b e a MySQL-t. ' : ! u " ' . Az adatbázis helye (tartománynév. ha ők hozták létre az adatbázist. felhasználónevet. neked viszont a saját MySQL-kiszolgálód címét kell megadnod. O Bezárjuk a kapcsolatot a mysqli_close() függvénnyel. ami mellett az adatbázis létrehozásakor döntöttél.com . c o m '. hogy’ a PHP-parancsfájlod a mysqli_connect ( ) j ________ függvény segítségével kapcsolatot tudjon létesíteni az adatbázissal. mint a webkiszolgáló. de olyan nevet adhatsz neki. Ezeket vagy te állítod be. szükséged lesz néhány inform ációra. IP-cím vagy localhost) Hol? A példában Owen (képzeletbeli) adatbázisának helyét használjuk.k is z o lg a lo . A te adatbázisod neve természetesen más lesz . Az adatbázis neve M íJ-4 ? 1 1’ * Példánkban az adatbázisnak az aliendatabase nevet adtuk. i i $ d b c = m y s q li c o n n e c t( ' d a t a . s z o lg a i tato. « * 0 ». A felhasználóneved és a jelszavad Ki? Szükséged lesz az adatbázis-kiszolgálódon érvényes felhasználónevedre és jelszavadra. ez a cím általában a localhost (erről a webtárhely-szolgáltatótól kérhetsz felvilágosítást). am elyeket korábban. Alihoz. © Végrehajtjuk a lekérdezést a mysqli queryO függvénnyel.Az adatbázis neve J e|szÓ A függvény m eghívásának eredm ényeként létrejön egy adatbázis-kapcsolat. am elyek már ism erősek lehetnek. Az adatbázis helyét egy IP-címmel vagy egy O w enéhez hasonló tartománynévvel . am elynek a segítségével m űveleteket végezhetsz az adatbázison. vagy a webtárhely-szolgáltató adja neked.bármi lehet. a jelszót és adatbaZIS neVet karakterláncokként kezeli. 0 Összeállítjuk a lekérdező karakterláncot. ugyanazokról az adatokról van szó. a felhasználénevet. Amennyiben az adatbázis-kiszolgáló ugyanazon a gépen található. (~< aiien d atab a ie ■i .is megadhatod.a mysqJ/ connectf) használata Csatlakozás a mysqli_connect() segítségével „ Csatlakozunk a mysqliconnectQ függvénnyel.

c o m ’. ’aliensrool'. ’aliensrool'. Vizsgáld meg mindegyiket. 'a l i e n d a t a b a s e ’). ’a l i e n d a t a b a s e ’). "aliendatabase") ' a l i e n s r o o l 1. c om’ . ’ ’. ’a l i e n d a t a b a s e ’). hogy szerinted m űködnek-e. és írd le. 'owen'. $dbc = m y s q l i _ c o n n e c t (’d a t a . akkor ho­ gyan lehetne kijavítani őket. és ha nem.c o m ' . ’o w e n ’. $dbc = m y s q l i _ c o n n e c t (’d a t a . a l i e n s a b d u c t e d m e . ’a l i e n s r o o l '. ’o w e n ’. ’a l i e n d a t a b a s e ’). $dbc = m y s q l i _ c o n n e c t ('d a t a . 'o w e n 1. a l i e n s a b d u c t e d m e . a l i e n s a b d u c t e d m e . $ f a n g is g o n e = m y s q l i _ c o n n e c t ( ’ d a t a . ’a l i e n s r o o l ’). $dbc = mysq li c o n n e c t {’d a t a . 'owen'. m y s q l i select db($dbc.kapcsolódás a M yS Q L-hez Hegyezd ki a ceruzád! --------------------------------------------------------------------------------ím e néhány példa adatbázis-kapcsolati karakterláncokra. most itt vagy ► 81 . c o m ’. Karikázd be a problémásnak gondolt kódokat.a l i e n s a b d u c t e d m e . ’ a l i e n d a t a b a s e 1) . ’owen'.c o m ’. a l i e n s a b d u c t e d m e . $dbc = m y s q l i _ c o n n e c t (’l o c a l h o s t ’.

.m ........... mint az aposztrófok.. N tál leíró jellegű név egy em adatbázis-kapcsolathoz.. ............... 'owen'...kapcsolatriiak...................Hegyezd ki. rníMdik. A mysqli_connect(J. $dbc = mysqli_connect(( 1localhost’J ’owen’... A kettős idézőjelek ugyanolyan jók............hogy...... Karikázd be a problé­ másnak gondolt kódokat...E(........ kötelezi......... Ez..... és a kettős idézőjeleket /" a PHP-utasitás lezárására.edaibftif mk...jó egy..aliensabductedme..... web ki...... is.q c .....szolga..... Vizsgáld m eg mindegyiket.. és a.ö tle t. (gfangi sgone)= mysqli_connect('data... adatbázi.be.aliensabductedme. ’ow e n ' . ’aliensrool' ..... .....’ 8 könyvben aposztrófokat használunk Itt egy pontosvesszőre van szükség a PH P-karakterlapokhoz.... volt.... mjntha mind a négy pararnéterf megadtad yojna a mysqJI_c.... .. E2 a kapcsolati karakterlánc működni fog..... ugyanazon a. ez beugratós kérdés..0nnectXl7... Bocs...... ..U .............spkhpz mindig.. adatbázisr.. .com' ....... m k # ... fw az ...... a név nem túl...... és ha nem........ ’aliensrool'... nerc... működik^.... az SQL-lekérdezésekhez tartjuk fenn.... Ez működik.. ’aliensrool’)... aliensabductedme. ’aliendatabase’)........ 'owen'.. A negyedik paraméter elhagyása a roysqli__jelecf_db() meghívását igényli az adatbázis kiválasztásához..aliensabductedme.....állíts be jelszót!.... mert hiányzik a pontosvessző.......... megoldás ezd ki aM I J ^ ceruzád! I le g o id a s néhány példa adatbázis-kapcsolati karakterláncokra.. és írd le. mint a v/ebkiszolgáló. ^aliendatabase' / ) 'aliensrool’.. $dbc = mysqli_connect (1data...com’. függvénnyé! adhatod.... ’aliendatabase’)..... ’aliensrool’....... egyenértékű azzaj.. gépen.. hogy szerinted működnek-e.Ha kihagyod a függvényből^ a mysq|i_seject_db()... mysqli_select_db($dbc............. akkor hogyan lehetne kijavítani őket.Va­ gyis a fenti kpd...... meg. az....... "aliendatabase"(T^ \ ) Ez nem működik... 'owen'....nek..az adatbázis nevét.... $dbc = mysqli_connect('data........ 82 2 le/ezet ....... tú l jó .. Az üres adatbázis-jelszavak használata nem jó ötlet.iszpigá |p..... adtál meg ..... $dbc = mysqli_conn£ct (1data..........................aliensabductedme. feltéve... ’aliendatabase').........................com’... Ez feltételezi..com1. bár...nem ..... adatbázis-k... ló............. található. esetében a negyedik elem ... hogy az adatbázis-kiszolgáló ugyanazon a kiszolgáío'gépen található.. Az.......... jelszót. 'owen1...............com'.. $dbc = mysqli_connect('data........ ( ^ ) 'aliendatabase')......................az adatbázis neve .........

aliensabductedme. Ha a hiba a m y sq li_ co n n e c t () valamelyik kapcsolati változójában volt. vagy ha az adat­ bázis-kiszolgáló nem található. 'owen' ' . a d ie () függvény megállítja a PHP-parancsfájl futását. hogy a k a p c s o la t m űködik-e? Ebben segít a PHP die() függvénye. A die() függvényt akkor hívjuk meg. $dbc V. de jelzi. könnyen el le h e t ro n ta n i egy-egy a d a to t. H onnan tu d h a to m b iz to s a n . visszajelzést kapunk.» mért az „or die |l .kapcsolódás a M yS Q L-hez O Úgy tű n ik .. am ivel egy a d a tb á z is h o z k a p c s o ­ lódunk. Ugyan nem árulja el pontosan. aliensrool1. . hogy mi volt a baj.mysqli_connect('data.i * jelenik W nem szükséges pontosvesszo M j.'). most itt vagy ► 83 . hogy valami nem stim­ melt. és megjeleníti a számára zárójelben megadott hibaüzenetet.com'. 3 veboldslon. ha a kapcsolat nem jö tt létre. Ha a mysqli_connect() függvény négy karakterlán­ ca közül az egyik hibás. és visszajelzést ad a kód sikertelen lefutásáról. és hogy a hibát ki kell javítanod. 'aliendatabase') or die{'Error connecting to MySQL server. H> * fapesol« meghiúsul „ « “ » " • t L A MySQL-kiszol!‘ m l '»»rill M m .l) " technikai­ |ag ugyanannak az egyetlen utasi tásnak a folytatása. A PHP d ie () függvénye megszakítja egy PHP-parancsfájl futását.

l t o i F . am elyet egy PlIP-karakterlánc ($ q u e ry ) tárol. m in th a a M y 6 Q L -te rm ín á lb a n lennek? Igen! Ha a mysqli_connect() segítségével sikeresen csatlakoztál egy adatbázishoz..most.. A m ysql i_ q u e r y () függvénynek egy SQL-lekérdezésre van szüksége. hogy csatlakozott az adatbázisához adatokat szúrhat be az al iens_abduction táblába a mysqli_query ( ) függvény és némi SQL-lekérdezőkód segítségével. elvégezhető PHP-kőddal is a létrehozott adatbázis-kapcsolaton keresztül.. A kapcsolat kom m unikációs vonalat létesít a PHP-parancsfájlok és a MySQL-adatbázis között. hogy beszúrhassa az ide­ genekkel kapcsolatos adatokat. H ogyan to v á b b ? U gyanúgy e l­ in d íth a to k lekérdezéseket. amit m egtehetsz a MySQL-terminálban.t ír .lekérdezések felépítése a php-ben Oké. fejezet .r . . - -- i M i I v U .l i S . hogy a célunk az. hogy PHP-kóddal automatizáljuk ezt az INSERT lekérdezést.. a PHP-ből közvetlenül elindíthatsz SQI-lekérdezéseket. Ow en például . ¿itt» - • K>---n Wttb 31 Í-.>e y*n < *• '-'té e r. van egy PHP a d a tb á z is -k a p c s o la to m . 84 2.. *< .*rie^ ' 15 Az SQL-lekérdezést PHP-karakterláncként adjuk át a m ysqlijjueryO függvénynek. Majdnem m inden. Ne feledd.- 'I ttfty hv.

ami ebben az eset­ ben „kérelmet" jelent . M l V e l e z« eg«S7 k ó d e g y P H P U h 5 l . II " 'g r e e n with s i x ft I y e s ' .arra kéred az adatbázist. "w h a t_ th e y _ d id . ha több kisebb karakterláncból jön létre. ö Bezárjuk a kapcsolatot a m ysqli_close() függvénnyel.a pontok árulják el a PHP-nek. beleértve az adatok tárolását és kinyerését is. A lekérdező karakterláncot több sorra tördeléssel teheted olvashatóbbá . Ideális esetben az INSERT utasítást egyetlen karak­ terláncként kódolhatod.n etf)". Ha a le­ kérdező karakterláncot kisebb. 'We j u s t '1 d ay '. hogy ragassza ezt a karakterláncot a következő sorban illő \ karakterlánc elejére. Nincsenek hülye kérdések I C i M ié rt hívják lekérdezésnek az adatok beszúrását? A „lekérdezés" nem azt je ­ lenti. hogy átadd a m y s q li_ q u e r y () függvénynek. pontokkal összeragasztott karak­ terláncokból építed fel. amely ben azok a tábla szerkezetében szerepelnek. C o n ta ct m e . " .annyira. A pont arra utasítja a PHP-t. la s t_ n a m e . "VALUES h o w _ lo n g . készen állsz arra. Ezt tudva általában biztonságosabb és kényelmesebb megadni az oszlopneveket. Ez esetben azonban ugyanabban a sorrendben kell megadnod az egyes oszlopok értékeit. O w en INSERT le­ kérdezése jó példa erre: Ez egy karakterlánc-változó a PHP-kódban. amely most az INSERT lekérdezést tárolja. hogy az INSERT utasí­ tás valójában egyetlen nagy karak­ terláncként tárolódik. " . Mivel az SQ L-lekérdezések elég hosszúak lehetnek. ezért a lekérdezéseket karakterláncokban szokták tá­ rolni. még akkor is. " ' sally@ gregs-list. hogy nem fér el egyet­ len „normális" kódsorban. és tényle­ gesen végrehajtsd az adatok beszúrását. 'Jo n es'. de sok más SQL-utasításhoz hasonlóan az INSERT is elég hosszú lehet . ' . " . hogy az INSERT lekérdezést egy karakterlánc tárolja. " . j €> Végrehajtjuk a lekerdezést a m y s q liq u e ry ü függvénnyel. * ! Ne feledd. O X c o tlakogtink' a m ysqll oonnoot( © Összeállítjuk a lekérdező karakterláncot. J $ q u e r y = "IN SE R T INTO a l i e n s _ a b d u c t i o n " w h e n _ it_ h a p p e n e d . mielőtt átadnák a m y s q li_ q u e r y {) függvénynek. hogy adatokat kérünk az adatbázistól? V M iért nem egyetlen nagy karakterlánc. e m a il) ( ' S a l l y 1. az utasítás olvashatóbb lesz.I C i Tényleg szükséges felsorolni az oszlopok nevét adatbeszúráskor? ként hozzuk létre az i n s e r t utasítást? V ! A „lekérdezés” (query) csak egy szakkifejezés. ten ta cles'. 'fo u r'. 'I t a l k e d an d p la y e d w ith a d o g ' . ' 3 days a g o ' . (fir s t_ n a m e . V ! Nem. a több kódsort átfogó lekérdező karakterláncokat gyakran kisebb karakterláncokból szükséges felépíteni. a lie n _ d e s c r ip tio n . á s ' ’«I t e v e t t * » ! k e l l l e z i T i Z Most. Az INSERT utasításokból elhagyhatók az oszlopnevek.kapcsolódás a M yS Q L-hez Az INSERT lekérdezés felépítése a PHP-ben Az SQ L-lekérdezéseket a PHP-ben karakterláncok ábrázol­ ják. h o w jn a n y . A MySQL adatbázis-kezelő al­ kalmazások a „lekérdezés" szót meglehetősen általános értelemben használják: bármilyen SQL-parancsra vonatkozhat. may h a v e s e e n y o u r d o g . fa n g _ s p o tte d / o th e r . " . amit egy adatbázisnak adunk. m ost itt vagy ► 85 . hogy az egészet egyetlen nagy karakterlánccá kell alakítania. hogy csináljon vala­ mit.

a $result változó csak azt tárolja. valamint egy SQL lekérdező karakterláncot. or die('Error connecting to MySQL server. A függvény válaszol. mysql i_queryHadatbázis_kapcsolat. amit egy kawkterláncba tettél. mégpedig azzal az információval. 'owen'. 0 -€satoegünk-a-fflyGqli_oonnoot() függvénnyel.aliensabductedme. -------------------------------------- or die('Error querying database. hogy a mysqli_query () által kiadott lekérdezés sikeres volt-e. Az adatbázissal létesített kapcsolatot korábban a $dbc változóban raktároztuk el. A mysqli_query() függvény egy adatbázis-kapcsolatot. íme a kód. fejezet . Ha ez egy kicsit homálvos lenne. 12 az ---------------.’). Ö Bezárjuk a kapcsolatot a m ysqli_close() függvénnyel.'). ^ -------.ofláncod. hogy átadd őket a mysqli_query ( ) függvénynek: A lekérdezés $result = mysqli query($dbc. Ez a kód azt mutatja. ’aliensrool'. Hogy ezek a kapcs > ^__ változók a te adatbázisaid ese e e mások lesznek.Ezt az SQL-lekérdezést kell végrehajtani . amely létrehozta a kapcsolatot: $dbc = mysqli_connect('data. amelye­ ket az adat bázis­ kiszolgálónak aabzskpslt dtái-acoa Van tehát egy adatbázis-kapcsolatod ($dbc) és egy SQL-lekérdezésed ($query). A lekérdezés eredménye küldünk. ^e feledd. K eresi«. Az l NSERT lekérdezés ugyanakkor nem ad vissza tényleges adatokat .ez az. $query).% ftiQQvénven keresztül.• . lekérdezés) . Ez « az létreHoztál a m ysqlLconnnect 11 99 A mysqli_query () függvény által igényelt adatbázis-kapcsolatot a mysqli_connect {) függvény adja vissza neked.a mysq/i queryO függvény A MySQL-adatbázis lekérdezése A mysql i_query () függvénynek kél információt kell meg­ adnod egy lekérdezés végrehajtásához: az adatbázis-kapcsolatot. t \© V é g re h a jtju k a lekérdezést a m ysqli queryQ függvénnyel. &Ö sszeállítjuk a lokófdozé-kGfak. hogy a mysql i_query () függvény meghívása nem csupán egyirányú kommunikáció. amit a $result („eredmény”) változó tárol.com’. valamint egy lekérdező karakterláncot igényel egy SQL-lekérdezés végrehajtásához. 'aliendatabase' Az SQL-lekérdezések olyan $QLkódként megírt kérelmek. Már csak annyi hiányzik. 86 2 .

Owen parancsfájljának esetében a m y s q li_ c lo s e ( )-nak az aktuális adatbázis-kapcsolatot kell átadnod. (^B ezárjuk a kapcsolatot a mysqlicloseQ függvénnyel^ mysqli close (adatbázis_kapcsolat). akkor be kell zárni.a4okéf-doeó ■ karakteriáneot. hogy csak öt kapcsolat engedélyezett a szá­ modra. a csatorna felszabadul. Q QsszoáUUjuk. ha végeztél velük. m iá rt fo g la lko zz a k velük? A MySQL adatbázis­ kapcsolatokat jó szokás bezárni. Amikor egy kapcsolatot bezársz. legalábbis ami a parancsfájlodat illeti. hogy új kap­ csolatot lehessen létrehozni. gondoskodnod kell a rendelkezésre álló kapcsolatok elérhe­ tővé tételéről. ha a felhasználó távozik az oldalról. ahogy egy ajtót behúzol magad mögött. az adatbázis­ kapcsolatokat is jó szokás bezárni.kapcsolódás a M y S Q L -h e z A kapcsolat bezárása a mysqli_close() függvénnyel Mivel csak egyetlen i n s e r t lekérdezést szeretnél végre­ hajtani. ezért ha csak lehet. Ha megosztott adatbázissal dolgozol. most itt vagy ► 0- 87 . ak­ kor lehetséges például. az adatbázissal való kommunikáció ezzel véget is ér. de ahhoz hasonlóan. Miközben újabb és újabb adatbázis-vezérelt alkalmazásokat készítesz. A MySQL adatbázis-kapcsolatok bezárására a PHP m y s q li_ c lo s e () függvénye szolgál. Az adatbázis-kapcsolatok bezárják önmagukat. & Végrehajtjuk a lokofd(«Ó 6t-a-fnyoqli_quoryO függvónnyol. w időd « « kommunikációra •« bázis-kapcsolati változót. Ha viszont az adatbázis-kapcsolatra már nincs szükség. Ez a változó egy hivatkozást tárol az adatbázis-kapcsolatra. amelyet a $dbc változó tárol: mysqli_close( $ d b c ) . szabaddá kell tenni az utat. Csatlakoflink a my6qti_-6onfK)6i(H % 9vónnyol. ha végeztél velük. De ha az a d a tb á z is k a p c s o la to k önm űködően bezáródnak. amelyet a kapcsolat megnyitásakor a mysqli_connect() hozott létre. Az adatbázis-kiszolgálók egyszerre csak egy bizonyos számú meg­ nyitott kapcsolatot képesek kezelni.

ha a lekérdezéseidet változókban tárolod. PHP-kódból úgy indíthatsz SQL-lekérdezést. A kód könnyebben ke­ zelhető lesz. hívd meg a PHP-kódból a m y s q li_ c lo s e () függvényt a MySQL adat­ bázis-kapcsolat bezárásához. hogy leállítsuk a parancsfájlt. ha valami félresiklana. Újratöltve Az adatbázis-kapcsolatok létrehozásához a helyet. fejezet .nem hülye kérdések és újratöltés Nincsenek hülye kérdések lekérdezést kiadó Nem K ! nül a lehet az összes SQL-kódot egyszerűen közvetle­ K ! Az az eredménnyel? kódnak kell valamit csinálnia () függvénybe tenni. A d ie () függvényt már használ­ tuk. insert m ysql i_ g u e r y a $q u ery változó helyére? V \ De igen. és üzenetet küldjünk a böngészőnek. Egy sikertelen lekérdezés esetén azonban előfordulhat. V ! Esetleg igen. hogy a lekérdezés sikerrel járt-e. a jelszót és az adatbázis nevét kell megadnod. csak macerás. 88 2. ha a kapcsolat meghiúsul. majd végrehajtod a mysql i_ q u e ry () megliívásával. A PHP-parancsfájlod és a MySQL adatbázis­ kiszolgáló között a m ysql i_ c o r m e c t () függvény teremt kapcsolatot. és visszajelzést ad. hogy ennél több információt sze­ retnél adni a felhasználónak. hogy egy karakterláncban felépíted azt. Ha készen vagy. a felhasználónevet. és ezeket a változókat használod a m y sq li_ q u e ry () függvényben. mely esetben a lekérdezés eredm ényéből állapíthatod meg. A d ie () függvény leállítja a parancsfájlt.

majd bezár­ ja a kapcsolatot. és a helyére írd be azt a kódot. végrehajtja azt az adatbázison.. amelyik az űrlapadatokat e-mailben küldi el O w ennek. Concn^-t nw . Sdbc or d ie i'E r r o r connect m a to KySO».php-be ne írd be a < ?php és ? > címkéket. PHP-karakierláncként felépít egy SQL-lekérdezést. ami már ilyen címkék között all. Squery = "INSERT INTO allen3_«bd u ction C a r s t nartis.c i o a o e i ia a c — •*-------------- ^ 1iy 2 I ruiiy 2 LOW . a iien ^ d e scrip cio n . ” .t . Töltsd ki az űrlapot. '3 days ego’ . “vftat^they^did.php parancsfájljában.:iita c l* !i | | Helyes ez? írd le.tion | g r t « » •„•irfc I g re e n wi t h s íz ■ dy jgo au ago l . ’a lie n s r o a j *. és hajts végre egy SELECT lekérdezést az adatbázisban történt válto­ zások megtekintéséhez.h ^-lorv • . <?php = mysqii_cominc’: ( ’ d ata. farig^:. ’ fo u r’ .php parancsfájlból.v S e s i. how^long. " .html oldalt egy böngészőben. " . t e r .'OlM'j & »• < ?» . howjatmy. Squeryj or d i e ( ’ £ r r o r querying d a t a b a s e . y-ix S E T R M rtiu I f i. "when_it^happened. '. iast_nam=. ') .s e r v e r .l i s t e n e r ’ ) /»jesuit ^ raysqi l_qu«ty<$dbc.’ gtiien with air.i^endatcfcase') Ez az új PHP 3<jatba'zis-kezelo kód. és hogy miért! m ost itt vagy ► 89 . m .aliejisabd u cted m e. «m ail) " . Töltsd fel az új report . és próbáld ki az új fájlt! Töröld azt a kódrészt a report . amelyen dolgoztai. A report. . ’ owen’ .can *. hogy hozzáférj a Report an Abduction űrlaphoz. Ez után indítsd el va­ lamelyik MySQL-eszközt.r. "VALUES { ’ S a l l y '. és nyisd meg a report . hogy szerinted ezt kell-e csinálnia a parancsfájlnak.r. és kat­ tints a Report Abduction gombra az adatok felviteléhez az adatbázisba. Ja y I i nay i rc-ai i fou r i .’ . ‘ Jo n e s '. “ . hogy inkább a MySQL-adatbázisba szúrja be az adatokat. " .'* : ?> raysqli elo ae ($dbc.p o tted . mert ezt a kódot egy olyan helyre fogod be­ szúrni a parancsfájlban. 3 ieS cr. ’W Ju st ta lk ed and played v ith a dog’ . e • "y e s'. amelyik csatlakozik a MySQL-adatbázishoz. s e t S I Jones I jw ícs ÍO.php fájlt a webkiszolgálóra. " ’ s a i lyiiuregs.-.i. o r h e r . t « n t a e ie s ’ .HLC * F O ¿liens afcrfu ti.kapcsolódás a M yS Q L-hez Tesztút Cseréid ki a levélküldő kódot Owen report. ’I may have seen your dog. '1 d a y '.

valóban komoly problémával állunk szemben. Ahhoz. m in th a a lekérdezés u g ya n a zo ka t az a d a to k a t szúrná be. fejezet . és e lra k tá ­ rozzuk egy a d a tb á zisb a n ? M o s t úgy fe s t. Az INSERT lekérdezésnek az űrlap adatait kell beszúrnia.Report *n Abdocboa kell ju tta tn i a Squery karak- «te* f "liM W W H> — V» tK « hkdb’ Mhiw: . hogy ez a P H P -parancsfájl hogy tu d n a b á rm it is a u to m a tiz á ln i. Nem lá to m . és táplálhatjuk be az INSERT lekérdezésbe? 90 2. amelyeket beírtak az elrablás­ bejelentő űrlapra. Agytorna Milyen PHP-kóddal olvashatjuk ki az értékeket Ow en űrlapjáról. Nos. hogy m it írta k be az űrlapra. valahogy be kell táplálnod az űrlapm ezőkbe írt adatokat a lekérdező karakterláncba. hogy fogjuk az űrlap a d a ta it.a $ _P O S T használata az IN S E R T lekérdezésekben Na várjunk csak egy percet! Nem a rra megy ki a já té k . At*"* az e l r a b l á s h e j e l e n t o űrlapról származnak. m y s q l i _ q u e r y () Ezeket az írlapadatokat be Aliens Abducted Mc . Az imént felépített lekérdezés bedrótozott karakterláncokból áll. nem statikus karakterláncokat. és nem azokra a szöveges adatokra épül. függetlenül a ttó l.f-n : *? **“ “*-* TTf tü!rf * A felhasználók által megadott adatok terláncba. hogy a parancsfájl az űrlapot vegye alapul.

és gondoskodj róla. hogy végrehajtáskor a tényleges űrlapada­ tokat írja az aliens_abduction táblába! m ost itt vagy > 91 . hogy a $_P0ST-nak megadott neveknek egyezniük kell a HTML-úrlapmezok neveivel. $last name = $ POST[’lastname’]. Emlékszel erre a PHP-kódra? $name = $ POST[1firstname' ] 9 t $ POST[*lastname']. $how_long = $_P0ST[’howlong1]. nincs szükség a $name változó­ ra. X.csak éppen külön-külön változókban: $first_name = $_P0ST[*firstname’]. Emlékezz vissza. $alien_description = $_POST[’aliendescription1] $what_they_did = $_P0ST[’ whattheydid'].kapcsolódós u M yS Q L-hez Az ürlapadatokat a $_P0ST adja meg Szerencsére a report. $other = $ POST['other’]. Gyakorlat írd meg a PHP-kódot. A felhasználó kereszt. Ehhez azonban először el kell végezned egy apró módosítást. csak be kell építened azokat az idegenekkel kapcsolatos adatokat beszúró INSERT utasításba. $how_many = $_POST[1howmany’]/ Owk. hogy külön oszlopokba írhasd okét az aliens abduction táblában.php parancsfájl változói a $_POST szuperglobálisnak köszönhetően már tárolják az űrlap adatait. $fang_spotted = $_POST[’fangspotted’]/ $email = $ _ P 0 S T [’email'].és vezetéknevére azonban igen. amely létrehozza Ow en INSERT lekérdező karakterláncát a $q u ery változóban. Most. Az űrlapadatok tehát már a kezedben vannak. hogy hozzáad­ hasd az adatbázishoz . í r l * « í " * » « í f J nyertük az adatokat a $ _P0 perglobális segítségével. $when_it_happened = $_P0ST['wheni thappened’]. A felhasználó nevének részeit most már önálló változók tárolják. hogy már nem e-mailben küldöd el az űrlapadatokat. es va tozo ba írtuk azokat.

veszélyes adatok beszúrásával eltéríthetik a lekérdezéseket. la s t_* a »* e . Semmi sem akadályozza meg. és ha összefűzést alkalmazol. hogy aposztrófok közé tennéd és összefűznéd őket. hogy az űrlapadatokat célszerű külön-külön változókba írni. hogy ne tanuld meg már most. És az számít. kettős idézője­ Nem lehet egyszerűen úgy felépíteni egy lekérdező karakter­ láncot. m ielőtt eg y lekérdezésbe szúrnád azokat. K: V : De igen. lfwha*t__íhey__did. oiher. 'fwhen^i*fc_happe*cd. A lekérdező karakterláncok azonban hajlamosak bonyolulttá válni. zé az egész lekérdezést és kettős idézőjelek közé a vál­ . fejezetben majd azt is megtanulod. hogy az aposztrófok azr jelzik. hogy azok aposztrófok vagy kettős idézőjelek között állnak.. Ennek az az oka. hogy ami közöttük áll. A hackerek például mindenféle furfangos módon.megoldat írd meg a PHP-kódot. Mindazonáltal kódoláskor ajánlott szétválasztani az űrlapadatokat. w K c i ^ _ i“ _ _ K a j > p c ^ c d / _ t w W h©w^m3ny. mielőtt bármit is csinálnál velük. ™ 9w « w ke. . hogy összefűzzük a változókat az SQL-kóddal? K: OK. í W Y . amelyeket a felhasználó éppen beírt az űrlapra. email) w. Ez a feldolgozás azt eredményezi. )^ Sally Jones elrablásának statikus j adatai helyett most már azokat — az adatokat szúrod be. 1 flast__name. A 6. hogy hol használok aposztrófokat és kettős idézőjeleket? Tehetek aposztrófokat az egész lekérdezés köré és idézőjeleket az egyes változók elejére és végére? V: Számít bizony . ar»er^cles£vij>ticm. Ennek az az oka. nem zárhatod aposztrófok kö­ 92 2. H U . hogy egy lekérde­ zésbe közvetlenül írd be a $_POST-ot. míg az idé­ zőjelbe telt szövegek további feldolgozáson esnek ke­ resztül. ahogy ott szerepel. azt pontosan olyan szö­ vegként kell használni. tokra hivatkozni a $ q u e r y karakterláncból? tozókat.ami nagyon jól jön. ■fa^^spot'tcd.u 1 hülye kérdések K: Létre kell hoznom az összes változót a $_POST adatainak tá­ rolására? Nem lehet egyszerűen közvetlenül a $_POST-ada- V: De igen.ha a változókat közvetlenül ágyazod be egy ( kettős) idézőjeles karakterláncba a Ivett.és nem. mint korábban. amely létrehozza Owen 1NSERT lekérdező karakterláncát a $q u ery változóban. azzal egyértelműen áttekinthetőbbé teheted a le­ kérdező karakterláncokat. A kettő között az a különbség. és a kettős idé­ zőjeleket ezért részesítik általában előnyben az SQL nyelvű lekérdező karakterláncok felépítéséhez.i V h o ^ Jo ^ 1 fhow_many7 u ^ . VAUXES íV-fiv*st_jr»amc. fejezet lek helyett természetesen használhatsz aposztrófokat is. Nincsenek az oszlopnevek sorrendivel. h 9¥ .# v ar\ | o-t‘tcdi> VcrtKcr1 'femdíl1 f-C Q __sp . de ez nem jelenti azt. hogy az űrlap­ adatokat általában valamilyen mértékig fel kell dolgozni. w . hogy végrehajtáskor a tényleges űrlapadatokat írja az a lie n s _ a b d u c t io n táblába! Az oszlopnevek pontosan ugyanúgy szerepelnek az SQLutasításban. hogy a PHP attól függően különbözőképpen kezeli a karakterláncokat.f i r s t ^ a m e . hogy miként védheted ki az ilyen kísérleteket. mielőtt egy adatbázisba szúrhatnánk azokat. Az egyszerűség kedvéért ebben a fejezetben nem végzünk semmilyen feldolgozást az űrlapadatokon. wKai_tKey^_did. ezért bármi jól jön. amivel olvasha­ tóbbá tudod tenni őket .falien_des£riptior/. hogy a ket­ tős idézőjelek közé zárt változók értéke kerül a változó nevének helyére . H! ! f S W T IN T 0 a l i ^ s ^ a b a u d \o * ( . és gondoskodj róla..aposztrófok és idézőjelek a php-ben Gyakorlat .

$ £ a n g s p o t t e d . $how many . w h a t _ t h e y _ d l d . $ a l i e n d e s c r i p t i o n = 3 POST[ 1a l i e n d e s c r i p t i o n ' ] .$ POST[ 1f a n g s p o t t e d * 3 . '< b r / > ' . ' <br / > ' . ech o ' D e s c r i b e them: 1 . e c h c 'The a l i e n s d i d t h i s : * . " ' $ a l i e r . w h e n _ it_ h a p p e n e d . $ w h a t _ t h e y _ d i d = $ _ P O S T [fw h a t t h e y d i d ’ ] . _ d e s c r i p t i o n ' . "VALUES ( r $ f i r s t _ n a m e f . $ o t h e r . ech o ' O t h e r -omments: ' . ' S o t h e r ' . ' $ f a n g _ s p o t t e d 1. ' S e m a i l ' ) " . $how_l onq = $_POST [ ’h o w ló n g ’ ] . e ch o ’ and w ere gone f o r 1 . Show lo n g . ech o 'Y o u r emai l a d d r e s s i s ' . m ost itt vagy ► 93 . $o t. ’ $ h o w _ l ö n g '. *< br / > ' . e c h o ’ Number o f a l i e n s : 1 . " . r < br / > ’ . " uhow_many. e c h c ’ Thanks f o r s u b m i t t i n g t h e f o r m . '< b r / > ’ . $when_ i t happened.kapcsolódás a M yS Q L-hez Gyakorlat Használj fel mindent. hogy befejezd Owen űrlapkezelő PHP-parancsfájlját. $how many = $ POST[ rhowmany’ ] . f< br / > ' . < b r / > ' . ech o 'You were a b d u c te d ’ . e ch o 'Was Fang t h e r e ? ' . f$ w h a t _ t h e y _ d í d 1.h e r = $_POSTf ’ o t h e r '] . amit eddig tanultál. a l i e n _ d e s c r i p t i ö n .$_POST[ ' w henithap pened * ] . hogy képes legyen az idegenekkel kapcsolatos adatokat egy adatbázisban tárolni. ^ h ö w j h a n j r ' . $resu lt = . l a s t _ n a m e . ' $ w h e n _ it_ h a p p e n e d ' . A r e p o r t . o t h e r . $ em ail = $_POST[ ' e m a i1 '1 . $ f a n g _ s p o t t e d . e m a i l ) ” . $ w h a t _ t h e y _ d i d . 1$ l a s t _ n a m e 1.php parancsfájl elkészítéséhez egészítsd ki az alábbi PHP-kódot: <?php $w h e n _ it_ h a p p e n e d . $ e m a i l . $d b c = $ q u e r y = "INSERT INTO a l i e n s _ a b d u c t i o n ( f i r s t _ n a m e . $ a l i e n d e s c r i p t i o n . h o w _lo n g . f a n g _ s p o t t e d .

' D e s c r i b e them : ' .. ' $ w h a t _ r h e y _ d i d ' . '$ £ a n g s p o t t e d ' . S fan g s p o t t e d . fouevy) c die('E rror ^uerymg d a ía b a s « mys^li ¿losc(/dbd).Gyakorlat . flds^jndme — f^P öS 7Tlast*am e'J... abban a formában. $ w h e n _it_ h ap p e n ed = $ _ POST L'w h e n i t happen e d 1 ] . ' < b r / > ' .... 'owtt\.. ” n * $ a l i e n _ d e s c r i p t i o n ' . how l o n g .íl « 9 « adatbázi shoz. $ o t h e r ...megoldás Gyakorlat .«t*am«’J.f ir s t fi8 n » í — ? az űrlapra... $ r e s u l t .. 3dbe = n^ys^li dor\hcd‘t ( vdata.. fcZZBi erb” SÍ^p^ 9 íírlöp ^ ... ' < b r / > ' . 8$ ¡R á c ió k a t... 3z adatok az urlapmezőkbol származzanak. $when i t _ h a p p e n e d . ' and w ere gone f o r ' . „ |f s g u M f t t e O l h » ilta t. $how_many = $_POST( ’ howmany' ] . ' $ o t h e r ' ... ja fa a n k e l f = 5 _p o st [ -e m a il ■]. hogy képes legyen az idegenekkel kapcsolatos adatokat egy adatbá­ zisban tárolni."INSERT INTO a l i e n s _ a b d u c t i o n ( f i r s t _ n a m e .. 'Number o f a l i e n s : ' .. a l i e n d e s c r i p t i o n .alic>\sabclud-tecli^c don\. amit eddig tanultál. ülepítened.... $ w h a t _ t h e y _ d i d . f . 1<br / > ' . 1 3lie»^cl3‘t3b3s€/^ or die(l£ rro r ¿cmnettmg to /V]yS$L server/)..php parancsfájl elkészítéséhez egészítsd ki az alábbi PHP-kódot: Ezek az új változók tárolják a felhasználó kereszt­ es vezetéknevét. 'Was Fang t h e r e ? ' .. $ q u e r y .. A r e p o r t . $how_long = $_POST[ 1h o w io n g ' ] . w h a t _ t h e y _ d i d .... fAiölol a l/n?nöcl kell a pHP-kódból csatlaKO « adnod a m6<}T6ÍBlO K y * $w hat_they_did = $ e m a il $ _ post i 'w h a tth e y d id ' j $ f a n g s p o t t e d = $ POST [ ' f a n q s p o t t e d f J . vagyis itt szúrod be az adatokat! Ez zárja be az adatbázis-kapcsolatot. '< b r / > ' .. ech o echo echo e ch o e ch o e ch o ech o Itt hajtod végre a lekérdezést az adatbázison.megoldás Használj fel mindent... " "how_many. K keres elküldését.. '$ h o w _ I o n g '... ^ . .. hogy befejezd Owen űdapkezelő PHPparancsfájlját.... ^ 'Thanks f o r s u b m i t t i n g t h e f o r m . ahogy beírták <?php ?. $ a l i e n d e s c r i p t i o n . echo 'Y o u r e m a i l a d d r e s s i s ' . e m a i l ) " .....mys<\li^ue*-y(/dbi. ?$ w h e n _ it h a p p e n e d '. ' $ l a s t _ n a m e ' . '< b r / > ' .. fejezet . / / / / A lekérdezést egy PHP-karakterlánc forma. . v alic*sroof. POSTT-f. ' < b r / > ' . 'You w ere a b d u c t e d 1 . fang s p o t t e d . "VALUES ( ' $ f i r s i n a m e '. hogy $other = $_ post i »other «j . $ e m a i l . < b r / > ' .. w h e n _ it_ h a p p e n e d .. l a s t _ n a m e . ügyelve arra. ' o e m a i l ' ) " ... 'The a l i e n s d i d t h i s : ' . o t h e r . ?> ech o ' O t h e r comments: ' . akarcsak a régi parancsfájlban. $ a l i e n d e s c r i p t i o n = $_POST[ ' a l i e n d e s c r i p t i o n ' ] .. '$how _m any'. 94 2.... $how l o n g .. $how many .

kapcsolódás a M yS Q L-hez Tesztút Módosítsd Owen parancsfájlját. ¿'« 1 ck 9 I ruxi«a. és módosítsd úgy a $query változót. ■ laat n— w . Sally Jones adatai két sor­ B y a q l .Report an Abduction S wv *wty oíato * « c o h e rttf Ewo o A liens .ip™ Ahduc. Töltsd fel a parancsfájl új változatát.ht 1 . Aliens Abducted M e . I Jn n o s I -Jc-noi.Jay gi-j-u n n se m ost itt vagy » 95 .R ep o rt an A bduction Share you* «cxy oi il* r aMuctioc. d hpe ? id a pn How tons were you 6«ne? Ilo .« o a y id <*«*> < i0 t-* l «am u *.h do to you-. f“ J Wbndidlbey Have you ****• W V » * No "T ib o rat Wyu {*«*e otun/ Hwmn d .n í i • | I i day 1 . Emiatt ne aggódj a következő fejezetben azt is megtanulod majd.T A d ban is szerepelnek.» | 11 lii. o n _ . és tekintsd meg az a l i e n s a b d u c tio n tábla tartalmát.n _ « . Hogy miként törölhetsz nemkí­ vánatos adatokat. »d ér I O ay u le W ötiiM í I I ^jyc ag ü I cw íí. tnn d yu«e? w a v id o U b fii it u n c o ________ ___ &z» >v __ _ D w xlhc them: m m did tfaey do 10 you? Have you *eeo m j dog tan g? TttTr*»«m. nw C jIl3” I r ^u r j ^ i ?c r*é n V I t h 5Ú2 t é r . :*.: F am irtt a t: Ü— Ü --------— Ü I_u »«n io c: ——-r —TT W bj*or «»íl «W • b* «« W hen A. hogy a tényleges űrlapadatokat szúrja be egy INSERT utasítás végrehajtásakor! Távolítsd el a $name változót a r e p o r t . . I Sa11 y I L'c-n i Shiil A l: I S a lly . add hozzá a $ fir s t_ n a m e és $ l a s t _ na me változókat. ht ml oldalon található űrlapot. a-*rite I • l>Qora ' I d n k o thtW ws B 1*.t *■»> '» 1a c íJü emt-r -B v b I i Sayr : I w she :*ntaci ath I 3 é ü n a < r°u c "? u io d 1 1in n • I o o t o 4 i i t e . hogy statikus szöveg helyett az űrlapváltozókat hasz­ nálja fel az INSERT utasításban.i s « a t** «*C Ye# No 0 W IKtom C M Aa Most pedig valamelyik MySQL-eszközzel hajts végre egy SELECT lekérdezést.t hcw lo g > iY . ShOl? Voiw tóTT. 3 _ a b j « c c i o n .php parancsfájlból. r u O lt« 1 / . F twnirs uc ^ L-a*t Dime: A b d u C W ud is your *tnai MMm>? alfr+rwwMfotticom » * ________ h a 'izr»— FaBí • —*------- _ ***** .Abducted M e .* SKÜKTP • F ? j M a 1 : e r . és próbáld ki: küldd el néhányszor a r e p o r t . mert az INSERT lekérdezés k i­ ir tá s a elő « ' sor is meg­ m a ra d t. ---------- adatai most már pontosan úgy jelennek meg a táblá­ ban. minden alkalommal más-más adatokkal kitöltve.-cc ¿ . 4 p -* n w . abogy vártuk.

am i önm űködően fe ltö lto d ik az idegenekkel ka p c so la tb a n a fe lh a szn á ló k á lta l m e g a d o tt Inform ációkkal.a neve. am elyek A g y a r nyomára vezethetnek. amelyeknél a fa n g _ s p o tte d oszlop értéke y es: Ne feledd bog. attól függően. hogy van egy a d a tb á z is o m . hogy az elrabolt személy a beszám olója szerint látta-e Agyart vagy sem. amellyel szabályozhatod.az eredményhal­ maz szűkítéséről a WHERE záradék gondoskodik. 96 2.php parancsfájl elvégzi a feladatát. Az P neV ^ A. és várhatja a bejelentéseket. amelyeknél a fang_spotted oszlopban yes érték található. Igazán fel vagyok dobva. hogy csak azokat a bejelentéseket válaszd ki.eltekintve attól. Owen hátradőlhet. Owennek valahogy tudnia kell konkrét adatokat keresni. A SELECT lekérdezésnek ez a része változatlan marad . és pontosan megmondhatod neki. például olyan elrablásokat. Amire tehát szükség van. hogy mi szerint szeretnéd szűrni a lekérdezés eredményét. Azt már tudod. Azt tudjuk. hogy az alábbi SQL-lekérdezés a tábla összes adatát visszaadja: SELECT * FROM aliens_abduction Az SQL SELECT utasításához azonban egy olyan záradékot is ragaszthatsz. osz| „ p értékét meg kell M h y .„(a)hol” . Ennek a zára­ déknak WHERE . és automatizálja az idegenekkel kapcsolatos adatok hozzáadását az adatbázishoz. hogy az adatbázisnak melyik oszlopa tartalmazza a kérdéses információt: a fa n g _ s p o tte d . J SELECT * FROM aliens abduction WHERE fang spotted = 'yes' '-------------------------------------------------------- f a tábla oS« e 5 adatát k M lm t j. hogy csak azokat a bejelentéseket válasszuk ki az a lie n s _ a b d u c t ion táblából. lekerdezes . hogy könnyebb megtalálni az el­ rablásokról szóló beszám olók között azokat. Owen esetében arra van szükség. hogy m e g ta lá lja m a z o k a t a bejelentéseket. am elyekben esetleg Agyarról is szó esik. .W H E R E z á r a d é k h o z z á a d á s a a S E L E C T le k é rd e z é s h e z Owennek segítségre van szüksége az adatok átvizsgálásához Az új.. amelyek a fa n g _ s p o tte d oszlopban y e s értéket tartalmaznak. lekérdezés ¿ T ) tudjon vá|as* ani adatokat. a WHERE «radék nelku . hogy felmerül egy újabb probléma. és csak azokat adja vissza. hogy a lekérdezés milyen adatokat adjon vissza. A több adat még nem jelenti azt. csillag miatt .. az az. de ez még nem s e g ít abban. Ebben az oszlopban a y e s vagy a no érték állhat. Ez a záradék szőri meg a lekérdezés által visszaadott adatokat. ahol látták Agyart. kijavított r e p o r t . fejezet .

K now ' ¿nd_cc_Liriting !_ hundreds b rows in ser < 0 .c e d M ! ! I • S ally Don ShiLL Mickey ' j ! ' I 3 days ago 2 days ago bach In 1991 summer o f * 69 j u s t now I ! fosTr — — — II 1 ! í. R te Eoi*. Winoow Help HaveVouSeenHirp rr. amelyeknél az elrabolt személy látta Agyart.kapcsolódás a M yS Q L-h e z Tésztát Próbáld ki a SELECT lekérdezést egy WHERE záradékkal kőnkét adatokat keresve! Egy WHERE záradékkal ellátott SELECT lekérdezés segítségével a választott MySQL-eszközben keresd meg azokat az idegenekkel kapcsolatos bejelentéseket.ou r ! dunno * | 1 1 I ' dón' i.ysql> SELECT * FRO a l i e n s _ a b d u c t i o n WHERE f a n g s p o r .0 0 0 5 sec) c c a f o th e • f i e y e s ne t I yes com f com f yes n e t ! ves most itt vagy > 97 .

-.aroc I l a s t nan».. fn *t room icc«i 'net 'cofft I yer.i . . M o s t m á r té n y le g a zo k ra a z e lra b o lta k ra ö s s z p o n to ­ s íth a to k . amíg Owen időt nem tud szakítani az átvizsgálásukra.O w en m y sq!-ad at bázisa elkészült és működik Owen jó úton jár.. Ha készen áll.- I i I I f 1 1 T was out o f gas.J _sove-rai y carv 1 |l 3 ' seconds I dunno -1 1 I ¿on ’ fc /. a kik e s e tle g lá t t á k A g y a rt.hci. csak egy egyszerű SELECT lekérdezés indítása szükséges ahhoz.ta to s. _____ \ T . — .----------------------------------------------------------------------------------------.-really do love r-. ■ i -r '-j | yea ( yea I yea . L ------.4-----------------------------.-. 1*51 I a uit^m r o f '5 9 e | )uZr chf- l _ p e c o i a ____ t _s:araeT:l7n^ i n I 1 i -ÖV 1 1I I^ M oU X S II ‘S‘ SíinuLcs.. conLadt me. 98 2 .és adatbázis-rajongó K la ssz! A z adatok a d a tb á z is b a n tá r o lá s a sokkal kirá lya b b a z e-m alleknál.. az adatok pedig bizton­ ságban várakoznak a táblában.| -------. hogy elkülönítse azokat a bejelentéseket.----------------------------.:cJ I oi. . i T see a dog.now1 | nundretís I I p io n ty I 5 rows ir | farig_spi. f OUr ! Sally |1 ll | l | l Tones OudyltWstrie r Mi 3 days aa: | t?dc> Ír. ao i t a pretty good ahdociion. and count ing 7 0 -^b .I when_Ic_happeried hcw_mdny .yy have »fcen yout dog.4— --------------------4 -----------------------------------. . amelyek Agyar nyomára vezethetik. ----------------------. Owen . and'-bu^ches o f b e e t l e .. I'm thinXincj about designing i itelnet to thwart tutu re abductions.a sp cj-•t-d how_long 'je-'j I f i r s ’" r. fejezet .UFO.---------------------------------------------------------------------- T ip. idegenek­ kel kapcsolatos adatokat..abd u ction W HERE fd-. ._ . és egy adatbázis-táblában tárolja azokat. hogy megtalálja Agyart A PHP-nek és a MySQL-adatbázisok kezelésére szolgáló függvényeinek köszönhetően Owen MySQL adatbázis-kiszolgálója megkapja az elrablásbejelentő HTML-űrlapról érkező. 1 f n c Ed it W ' n ö o * t i e i p T * o D f t q l c O i * l h « r * mysql> FBT«üCT * FRÖM al t er : .

Ezzel teremthetsz kapcsolatot a PHP-parancsfájl és a MySQLkiszolgáló közötti kommunikációhoz. Ezt a HTML-elemet használják a w ebhely látogatói. Végeredményben it fognak tárolódni a r e p o r t . hogy az űrlapadatokat elküldje egy PHP-parancsfájlnak. Itt gyűjti össze Owen az adatokat a felhasználóktól. amelyet a PHP-parancsfájl átad a MySQLkiszolgálónak.és MySQLösszetevőket aszerint. m ysqlijjueryO mysqli_select_db() m ost itt vagy ► 99 .php POST v/ebkiszolgáló MySQL adatbázis-kiszolgáló Submit gomb lekérdezés mysqli_connect() így is hívják azt a szoftvert.h t m l oldal űrlapjáról származó adatok. A HTML-űrlap ezt a kérelem módszert használja arra. illetve az összes adatbázist és azok tábláit működteti. amely feldolgozza a fel­ használók által a r e p o r t . a művelet során gyakran egy adatbázissal kommunikálva. html oldal űrlapjára bevitt adatokat. mysqIi_clo$e() Ez a nem kötelező PHP-függvény azt mondja meg az adatbá­ zis-kiszolgálónak. Ez a PHP-függvény zárja le a kapcsolatot a MySQLkiszolgálóval. PHP. Ez a PHP-függvény egy lekérdezést küld a MySQLkiszolgálónak. ha befe­ jezték az űrlap kitöltését.html report. report. Az a l i e n s a b d u c tio n táblát tartalmazó adatbázis neve. amely a MySQL-t. hogy’ mire valók: aliendatabase aliens abduction tábla SQL-kód. és adja vissza a HTMLoldalakat a böngészőknek. Ez futtatja a PHP-parancsfájlokat. hogy melyik adatbázisban keressen.kapcsolódás a M y S Q L-h ez Állítsd párba! Bár így összefoglalva még nem találkoztál velük. párosítsd össze az alábbi HTML-. Owen PHP-parancsfájljának a neve.

és adja vissza a HTMLoldalakat a böngészőknek. PHP. Ez a nem kötelező PHP-függvény azt mondja meg az adatbá­ zis-kiszolgálónak. Ezzel teremthetsz kapcsolatot a PHP-parancsfájl és a MySQLkiszolgáló közötti kommunikációhoz. hogy melyik adatbázisban keressen. a művelet során gyakran egy adatbázissal kommunikálva. párosítsd össze az alábbi HTML-. amely a MySQL-t.és MySQLösszetevőket aszerint. így is hívják azt a szoftvert. Ez futtatja a PHP-parancsfájlokat. hogy az űrlapadatokat elküldje egy PHP-parancsfájlnak. html oldal űrlapjáról származó adatok.php A HTML-űrlap ezt a kérelemmódszert használja arra. Végeredményben it fognak tárolódni a r e p o r t . webkiszolgáló Itt gyűjti össze Owen az adatokat a felhasználóktól. Ez a PHP-függvény zárja le a kapcsolatot a MySQLkiszolgálóval. ha befe­ jezték az űrlap kitöltését. Az a l i e n s a b d u c tio n táblát tartalmazó adatbázis neve. hogy mire valók: SQL-kód. htm l oldal űrlapjára bevitt adatokat. report. Ez a PHP-függvény egy lekérdezést küld a MySQLkiszolgálónak. Owen PHP-parancsfájljának a neve.html report. Ezt a HTML-elemet használják a webhely látogatói.Állítsd párba! . illetve az összes adatbázist és azok tábláit működteti. amelyet a PHP-parancsfájl átad a MySQLkiszolgálónak. fejezet . amely feldolgozza a fel­ használók által a r e p o r t .megoldás ----------aliendatabase aliens abduction tábla Állítsd párba! Megoldás -------------- Bár így összefoglalva még nem találkoztál velük. MySQL adatbázis-kiszolgáló Submit gomb lekérdezés mysqli_connect() mysqli_close() mysqli_query() mysqli_select_db() 100 2.

és ki keli találnod. ez rnár nem elég. Eddig úgy hoztál létre egy táb­ lát. hogyan szúrhatok be adatokat egy MySQL-táblába. saját tervezésű táblára van szükséged. mert valóban értened keli. hogy nem sokat tudtál a CREATE TABLE parancs használatának szabályai ról. hogyan hozhatod létre a saját tábláidat. hogy rtiegtanultam. de ha több. hogy ne csak az eléd tett kódot használhasd. /'-y-\ ló kérdés. de a tábla és az azt tároló adatbázis létrehozásának módja még mindig nem tiszta.k a p c s o ló d á s a M y S Q L -h e z Elég klassz. Owen esetében ez még rendben volt. Közelebbről meg kell vizsgálnod az új Líbiákban tárolandó . adatokat. *><> '■* v >•» <• m o s t it t vagy ► . mert a számára csak egyetlen táb­ lát kellett létrehoznod. hogy miként lehelne a le ro b b a n átrendezni g-x //• sA'S t's'««■»•> • / • . Azzal mi a helyzet? .

.

amely majd azokat az adatokat tárolja. A szükséges adatok nem mindig állnak rendelkezésre. amelyeket létre kell hoznod. mielőtt használhatnád őket. D exter. Készülj fel: most meg fogod tanulni. Elvesztetted a fonalat? Majd megtalálod. hogy miként hozhatod létre a saját adatbázisaidat és tábláidat. Az is előfordulhat. hogy létre kell hoznod a z adatbázist. ez egy uj fejezet 103 . Az adatok tá­ rolásához pedig néha táblákat kell létrehoznod. mielőtt használhatnád őket. Néha létre kell hoznod az adatokat. közben fel­ építed a legelső PHP/MySQL-alkalmazásodat. El<5bb a d a to k ra van szükségem .3 Adatbázis létrehozása és feltöltése * 4 - Hozd létre a saját adataidat! Jamaikai vagy? Y * M egörülök a ja m a ik a ia k é rt! J J J j Ne olyan g yo rsa n . És ha ez még nem lenne elég.

com 9 9 @ b 0 tl0 m s u p . 1.c o m Manson Anne Mandel Debra am 86@ objectville.com M etfí Jam es dreamg1ri@breakneckp122a. ___________________ Elmer vásárlói levelezőlistája: Anderson . és saját kezűleg kell lemásolnia és beillesztenie a cím eket az akciót reklám ozó levelekbe.net s2 w edjoe@ obir * Diana '" Sheridan Diana Snow Edward snowman@tikibeanlounge. A dolog működik. várják.com __ j . és az e-mail cím eket arra használja fel. mer s e g íts « vei E lv is -b a l mássa' v á 'iH O ) m ~ 4 W- 1 Big sale th Genuine nor Kedves Elvle-rajongókl óriási vásár van ezen a héten And don'~ t a MakeMeEivi&.com Gares Fred lin d y @ lik ib e a n io u n g e .— « • R eno . Jele n le g Elm ernek m agának kell végigm ennie a címlistán.c o m Meeker rs Brian Ann annmeeker@choconoiic-inc.com Ricci Peler annep@starbu22rr.com Anne joyce@chocohoiic-inc. és m hogf I no T3-______ * Wk Subject* B ig S a lo ! Dear Fellow Elvisonians. uu22coffee. Jo bb an s z e re tn é m E lvis u tá n z á s á ­ val tö lte n i a z id o m é t.n e t Bn lu t Ezek az e n U rek rajta v a s Elmer le v e i« listáján.com Szwed Joe ^-v^ooiectville. és maga illeszt be minden e-mail címet a „To1 („C ím zett") mezöte.com Bnggs Chris c b rig g s @ b o a rd s -r-u s .com vikt@starbu22coffee.com O hver Lee drmelfi@bOttOmsup. Elmer elkéri az e-mail cím ét.com Grace ricciman@tikibeanlounc' Moss grace23@obi. hogy hírlevelet küldjön az akciókról. ezért egyszerűsítené szeretné az úi e l mail cím ek felvételének és a körlevelek kiküldésének feladatát.com cím en. am ikor valaki vásárol valamit. az online Elvis-cuecok koronázatlan királya. és persze nap­ szem üvegek százait. A kereslet hatalmas.com P a rk e r Anne leeoiiver@weatherorama.com Bolling Lindy annebiunt@breakneckpi22a.com J agel Ann Mary nobigdeal@starbu22coffee..on s N s ew s K evin ed Jiilian M ia„ r • U ar)dersor H com e d oinan2luv@breakneckpi22a.c0m S o lge r Joyce cliffntght@breakneckpi22a. Elmer már jónéhány válltöméses poliészter zakót és álbarkót adott el.már csak 3 nap maradt az akcióbál! Ó riá si v á s á ri « A Elm er túl sok időt tölt azzal.net Tedesco Janis debmonster@breaknecks: Talwar Vikram janistedesrr^-'— . m in t a levelek s a já t kezií kü ld ö z­ getésével.< Hartfy Glenn Otto glenn0098@objectville. Roundtree Jo-Ann jpjoround@breaknedcpi22a.net s h e r id i@ m ig h t y g u m b a ll.com T o th Anne A n n e To th @ le a p in iim o s .ff— .com P o w e rs b p @ h o n e y -d o it.c o m Jacobs Anne fga res@ objectville.c o m Harte Lloyd hovercraft@breakneckpi22a. Minden alkalommal. és a lista mindennap bovu!.n e t Palumbo Tom palofmine@mightygumbail.com McKinney Clay c la y @ s t 3 rb u 22co ffe e . hogy a levelezőprogram jában lemásolja és beillessze a cím eket a To m ezőbe.c o m Wiley Andrew a n d rQ W w ile y @ o b ie c tville .c tv ille.net anne99@ objectviiie.net com Zeida __^ u o je Day Clifford 2eida@weather0rama.kell egy levelezőlista-program! Az Elvis-bolt megnyitott! Elmer Priestley megnyitotta Elvis-boltját a M akeM eElvis. Joffe Elmer eddig 328 « -» « I •« « » tö tt.com-onl free" leisv Valódi lóezőr barkók 20% árengedménnyel kap­ hatók] left! É& ne feledje az ¿¡gyet fizet. Ez tú l so ká ig t a r t .01edesco@starbu 22coffee..net com Dea/ Anne anneh@bOttOmsup. 104 fejezet . de rengeteg időt és erőfeszí­ tést igényel. kctt<5t kap” zakó­ kat eem .c o m n" Elmer.net Ryan Aianna angrypirate@breakneckp122a.mi0cKpi22a. 0 o Elmer ezt a levelet írja meg.

Adatbázis létrehozása és feltöltése Elmernek egy alkalmazásra van szüksége Az a lk a lm a z á s (application) olyan szoftver. és lehetővé teszi Elm ernek. és az üzenet mindenkihez eljut...com levelezőlistáján. és beírja az üzenet szövegét. hogy Elmer levelezo^ |i${aja saját magái építi fel. hogy feliratkozzanak a listára. Elmer alkalmazásának lényege az automatizal. am ely karbantartja a levelezőlistáját. hogy egy Webes Űrlapon keresztül feliratkozzanak rá. Ezt a két űrlapot szem előtt tartva vázold fel Elmer alkalm azásának szerkezetét! most itt vagy ► 105 . mégpedig úgy. am ely lehetővé teszi az új vásárlóknak. hogy egy űrlapgombra történő egyetlen kattintással levelet küldjön a listán szereplő szem élyeknek. gf A A levelezőlista saját magát bővíti. és egy másik űrlapból. A ivebalkalmazások olyan dinamikus webhelyek.as! Az alkalm azás em e „bevásárlólistáját” elkészítve Elmer teljes pom pájában maga elé képzelheti az alkalm azást. Elm ernek tehát egy alkalmazásra van szüksége. hogy adott feladato­ kat végezzenek el a fel­ használók számára.com w ebalkalm azás két fő összetevőből áll: egy űrlapból. hogy lehetővé teszi az Új vásárlóknak. és ahonnan elküldheti a levelet. hogy az alkalmazás m űködjön: Megnyit egy weboldalt. aki a listán szerepel. Agytorna A MakeMeElvis. am elyet arra terveztek. így szeretné. A különbség csak annyi. Fz a levelezölistás dolog nagyon hasonlónak tűnik Owen elrablasbejejMfff 3|ka|m azása1l0z. aki szerepel a MakeMeElvis. hogy adott fel­ adatokat végezzen el a felhasználó számára. a leveleit pedig mindenki megkapja. B f Az oldalon található elküldő gombra (Submit) kattint. amelyen Elmer megírhatja a levelezőlistán szereplő szem élyeknek elküldendő üzenet szövegét. amelyeket arra tervez­ tek.

html addemail.n e t 106 3. fejezet . Ezt a webes űrla­ pot tö lti ki Elmer a körlevél létre­ hozásához és elküldéséhez. I addemail.html M a tth e w s W e r lit z F ra n k lin a th a n @ w is h iw a s e lv is . sendemail.php - . ^ Ez az űrlap-parancsfájl kettős teszi lehetővé a felhasználóknak.php W ebkiszolgáló Adatbázis-kiszolgáló sendemail.c o m w w c r @ s ta r b u z z c o ffe e . e's megkap­ ják a körleveleket. hogy fel iratkozzanak Elmer levelezőlistájára. ez a KHH-parancsfájl küldi el az üzenete­ ket az Elmer levele­ zőlistáján szereplő i személyeknek.a levelezőlista-alkalmazás felépítése Rajzold le Elmer alkalmazásának szerkezetét! Ezek az emberek rajta vannak Elmer levele­ zőlistáján. Az adatbázis neve sódé más lesz.c o m 2 k s d g j@ g re g s -lis t.

a z tá n hozzuk lé tre a t á b lá t a z a d a to k tá ro lá s á ra ? V agy legyen kész e lő s z ö r a tá b la . ha nincs adatbázisunk. hogy milyen adatokat kell megszereznünk a felhasználóktól? Jill: Joe-n ak igaza van. milyen adatokat kell az adatbázisba írni. akkor összekötjük az egészet a parancsfájllal. Ez is nagy segítség lenne. és csak a végén jön a parancsfájl. az adatbázisnak készen kell lennie. ami az adatbázishoz csatlakozik? Mindent megcsinálhatnánk. hogy a parancsfájlnak az az egyetlen feladata. Hol jön a képbe az űrlap? Azt hiszem. amihez csatlakozhatna. ha nem tudjuk 100%-ig. aztán a HTML-űrlapot. hogy kihagyjuk azt a konkrét kó­ dot. hogy az alkalma­ zásnak milyen adatokra van szüksége. hogy fogja a HTML-űrlapra beírt adatokat.. Az adatok vezérelnek mindent. ami az űrlap benyújtására reagál. aztán kitaláljuk. Csináljuk! Joe: Szerintem azért előbb le kéne írni. és csa k u tá n a a p a ra n c s fá jl? Joe: Szerintem mindegy. Hogyan tudnánk elkészíteni egy HTML-űrlapot. hogy az alkalma­ zás összeálljon. hogy szerinted milyen lépések szükségesek ahhoz. Jill: Ez igaz. de úgy. A HTML-űrlap visszavezet minket oda. de én azt hiszem. és így állítja elő az üzenete­ ket az egyes tagok számára. Ne feledd. hogy először azt kell kitalálnunk. A táblára és a parancsfájlra is szükségünk lesz.com alkalmazásának megvalósításáig: m ost itt vagy ► 107 . Frank: Nem írhatnánk meg a parancsfájlt. Az adatbázis tehát mindenféleképpen létfontossá­ gú a parancsfájlnak... csak éppen ténylegesen nem kapcsolódnánk az adatbázishoz. ezért úgy tűnik. mielőtt az adatbázishoz kapcsolnánk. de a HTML-űrlapról még szó se volt. hogy ennek így van értelme. Frank: Meggyőztél. mielőtt az alkalmazás működhetne. hogy a tervtől eljus­ sunk a MakeMeElvis. az adatbázisból olvas. mielőtt egyáltalán a parancsfájl megírására gondolhatnánk.. Jill: De a PHP-parancsfájl teljes mértékben az adatbázistól függ! Nehéz lesz el­ lenőrizni. hogy konkrétan milyen lépéseket kell végrehajtanunk. / írd le. Frank: Ez igaz. hogy először a parancsfájlt kellene megírnunk. Frank: Megvan! Először elkészítjük a HTML-űrlapot. Joe: Nem vagyok biztos benne. és beszúrja az adatbázisba. hogy először az adatbázist és a táblát kell felépítenünk. hogy ellenőrizhessük a PHP-kódot. nem? Frank Joe: Nem feltétlenül. és ha ez mind megvan. Ha pedig levelet küld a levelezőlistára.Adatbázis létrehozása és feltöltésé Hol kezdjük a P H P /M y 5 Q L -a lk a lm a z a s fe lé p íté s é t? E lő s z ö r írjuk meg a P H P -p a ra n c s fá jlt.

hogy egyszerűen megadják a keresztnevüket. addemailphp addemail. Végül egy w ebes űrlapot kell felépítened. hogy megírjon egy levelet.a z a lk a lm a z á s m e g te rv e z é s e Szükséged van lehat egy támadási tervre. Ebben a lépésben építed fel azt az űrlapot és parancsfájlt. sendem ailphp sendemail. és mindenkinek elküldi. fejezet . vezetéknevét és e-mail címét. e lv is s to re © Az új vásárlókat a listához adó webes űrlap és PHP-parancsfájl megírása. akinek a cím e sze­ repel a táblában. Bontsd fel a tervet lépésekre. és ami még fontosabb. amely fogja az üzenetet. amely lehetővé teszi Elmernek.html 108 3. írnod kell egy parancsfájlt. amelyik lehetővé teszi a vásárlóknak.html O A lista tagjainak körlevelet küldő webes űrlap és PHP-parancsfájl megírása. amelyeket aztán a levelezőlistához adsz. Ez a tábla tárolja majd az Elmer levelezőlistáján szereplő személyek keresztnevét. hogy egyszerre egy dologra összpontosíthass. vezetéknevüket és e-mail címüket. hogy összerakhasd Elmer alkalmazását. és ne terheld túl az agyad: Q A levelezőlistát tároló adatbázis és tábla létrehozása.

Oszlop fi«. amelyet egy MySQL adatbá­ zis-kiszolgáló tárol. amely­ ben információk találhatók.c 2kjdgi<®gmgt-ftsf. de nem árulnak el sokat.például „keresztnév”. egy sor minden oszlopból egyet tartalmaz.n*f H é tfő te M Szerda C eU törtök Péntek S zo m bat V Sor Egy adatbázison belül a táblák általában valamilyen módon kapcsolódnak egymáshoz. a táblák adatoszlopokból és -sorokból épülnek fel. Werlitz. ahogy egy naptár hetekre és napokra oszlik. amelybe adatokat helyezünk. „vezetéknév”. A webalkalmazások gyak­ ran állnak több táblából.tárolnak. de minden tábla oszlopokból és sorokból épül fel. A táblák az adatokat osz­ lopok és sorok rácsszeru mintázatában tárolják. Az oszlopok egy adott típusú adatot . míg a so­ rok oszlopok gyűjteményei. az előző fejezetben megmutattuk. minden egy adatbázissal kezdődik. Egy sor lehet például a „Wendy. calendar Az adatbázisok adatok rendszerezett tárolására szolgáló tárolók. Adatbázis.conV’. hogyan oszlanak az adatbázisok belül további tárolókra. Nincsenek hülye kérdések A . ami lényegében egy tá­ roló. amelyeket nem lehet csak úgy megnyitni és elolvasni. www@starbuzzcoffee.Adatbázis létrehozása és feltöltése Minden egy táblával kezdődik Pontosabban. * j V \Az adatbázisok adatai jellemzően Ténylegesen hol tárolja egy adatbázis az adatokat? M eg lehet nézni a fájlokat? Másik tábla Még egy tábla a merevlemezen található fájlokban tárolódnak. N a p ta r V asárnap email Jó 8ob m W*rlitz Franklin I w e S rb rzo « wr<J*ta u c ff#. Ezek az adatszerkezetek egyaránt táblák. amelyek az adataikon keresztül kapcsolatban áll­ nak egymással. Ezért van az SQL . mint egy tárolóra. és műveleteket végez­ hessünk a benne tárolt adatokkal.hogy belenézhessünk egy adatbázisba. Ha még emlékszel. amelyeket tábláknak nevezünk. adatbázisra úgy gondolhatünk. m ost itt vagy ► 109 . Természetesen megnéz­ heted őket. az adatbázisfájlok ugyanis bináris fáj­ lok. Ahhoz hasonlóan. „e-maiT . még ha ez a kapcsolat néha laza is.

. egy fe lh a s z n a b n e v e t és egy je ls z ó t k e ll m egadnod n e k i. csatla­ koznod kell a MySQL adatbázis-kiszolgálóhoz.« q á ló e ím e t.. De m ielőtt az említett parancsok bármelyikét kiadhatnád.előbb létre kell hoznod egy' adatbázist.tó b á z is -W « » !# - Z . és műveleteket hajtasz végre rajta. Egy adatbázis mindennapi kezelése többnyire táblákon végzett műve­ letekből áll. © A lista tagjainak körlevelet küldő webe: űrlap és PHP-parancsfájl megírása. egy felhasználónévre és egy jelszóra lesz szükséged. amit a MySQL-terminálban vagy a phpMyAdmin-ben kell megadnod. Ha ez megvan.m ir t a M yS Q L te rm in á l. és ha­ marosan kipipálhatod az alkalmazás fejlesztésének első lépését.hozd létre az adatbázist! Lépj kapcsolatba a MySQL-kiszolgálóval! Elmer alkalmazásának egy adatbázisra és egy adattáblára van szüksége. ✓ Most it t vagy. ésszerű saját kezűleg. már továbbléphetsz a táblák létrehozására a CREATE TABI E paranccsal. hogy egy PHP-parancsfájl segítségével kapcsolatba lépsz egy adatbázissal. Azon kívül. Ennek módját az előző fejezet­ ben már megtanultad. a leve­ lezőlistát tároló adatbázis és tábla létrehozását. 110 3. Indítsd hát el a választott MySQL-eszközödet. az adatbázis-ki­ szolgáló helyére.. Ezek az eszközök nagy segítséget nyújtanak az adatbázisok és táblák létrehozásában is egy adatbázis-kezelő alkalmazás fejlesztésekor. és egy é rv é n y é * W . azzal együtt. hogy milyen fontos információkra van szükség hozzá. fejezet . Mivel Elmer alkalmazásához csak egyszer kell létrehozni egy adatbázist és egy táblát. _— --------------© Az új vásárlókat a listához adó webes űrlap és PHP-parancsfájl megírása. Adatbázist a CREATE DATABASE SQL-paranccsal hozhatsz létre. O A levelezőlistát tároló adatbázis és t létrehozása. 1 c s a tla k o z h a t« . E„v M y S Q L . amely majd tárolja őket. de nem ugorhatsz csak úgy fejest a táblák létrehozásába . egy SQL-lekérdezés segítségével felépíteni azokat.

m ost itt vagy ► 111 . 1 row affected (0. az utasításokat mindig pontosvesszővel kell lezárnod . amelyet már érintőlegesen használtál az előző fejezetben is. ami majd helyet ad az email_list táblának. ha a terminált használod. hogyan is működik: ^ ------A létrehozandó új CREATE DATABASE a d a tb á z i s_ n ev e adatbázis neve Az SQL új adat­ bázis létrehozá­ sára szolgáló pa­ rancsa a CREATE DATABASE.01 sec) £ mysqli_query() függvényén keresztül indí­ tasz SQL-lekérdezést. ha a PHP mysql> CREATE DATABASE elvis_store. Nézzük meg most közelebbről. Vigyázatl A PH P -kódban az S Q L-utasításoknak nem k e ll p o n to svessző ve l végződniük. amelyben azonban még nincs tábla az adatok tárolására.akkor azonban nem.. először létre kell hoznod az elvis_store adatbázist. létrejön az adatbázis.<á Query OK. amellyel létrehozhatod Elmer adatbázisát: CREATE DATABASE elvi s_store Ha végrehajtod ezt az utasítást egy MySQL adatbázis-kiszolgálón.. h o g y m in d en S Q L -u ta sitást p o n ­ to sve ssző ve l z á rj le. íme az SQL-utasítás. m íg a PHP-ben egyszerre c s a k e g y p a ra n c s o t a dhatsz ki. E nnek az az oka . Az SQL-utasítások végére csak akkor kell pontosvesszőt tenned. a M yS Q L -te rm in á l azonban m ásképp m ű k ö d ik t és m e g k ö ve te li. Az adatbázis létrejött. Mindkettő létrehozására SQL-parancsokat fogsz használni. Ha a terminálban adsz ki SQL-parancsokat. A CREATE DATABASE parancs után meg kell adnod az új adatbázis nevét. elvis store Az elvis_store adatbázis létrehozása a CREATE DATABASE paranccsal egy csilivili új adatbázist eredményez. Az SQL-ben egy adatbázist a CREATE DATABASE paranccsal hozhatsz létre.A d a tb á z is lé tre h o z á s a és feltöltése Hozd létre az Elmer e-mail címeit tároló adatbázist! Ahhoz. h o g y a te rm in á l több S Q L -u ta sitá st is kép e s fu tta tn i. hogy elkészíthesd Elmer levelezőlistájának adatbázisát és tábláját. de táb­ la nélkül még nem tud adatókát tárolni.

amelyeknek olyan nevet kell adnunk. la st_ n a m e (vezetéknév) és emai l .n e t ¥ 2tajg@gregs-lisi*et Ezek sorok. 112 3. Ha eh­ hez hozzávesszük az e-mail címet. A táblák sorai vízszintesek. és pusztán egy adatoszlop nevénél több információt várnak tőled.com 2 k s d g j@ g re g 5 -lis t.m o s t h o z d lé tre a táblát Hozz léire egy táblát az adatbázison belül! Mielőtt létrehozhatnád a táblát. hogy tartalmazzon. tudnod kell. hogy milyen adatot szándékozol tárolni az adott oszlopban. és a sorok egy-egy bejegy­ zést alkotnak Elmer levelezőlistájában. Az adatbázisnak azt is meg kell mondanod.txt személy keresztneve. hogy a kiküldött leveleket kicsit szem élyesebbé tegye. vezeték­ neve és e-mail címe található. vezetéknevét és e-mail címét oszlopok­ ként kell létrehoznod az e m a i l _ l i s t táblában. ami leírja. A gond csak az. hogy a vásárlók keresztnevét. elvis store ig Joh Matthews \onathaM@w \jjhjiwa$elv\s. akkor azt kapjuk. Elmer a levelezőlistáján szereplő szem élyek kereszt.com Wewdy W u r l i i z ___ wwer@starbuzzcoffee Joe Bob FraNkliN ____ Elmer e-mail címeket tártai­ mazó régi szövegfájlja nem ve­ heti fel a versenyt egy adatbá­ zis-tábla rendszerezettségével és biztonságával. A táblában minden sor egyetlen adatot tartalmaz ezekben az oszlopokban. A mi táblánk­ ban három van. M a t th e w s W e r iit z F ra n k lin onathan@wishiwaselvis. A táblákban minden adat egy-egy oszlopba kerül. Legyenek hát az oszlopnevek f i r s t _ n a m e (keresztnév). hogy Elmer e m a i l _ l i s t táb­ lájának minden bejegyzése háromféle adatot kell. Mindegyikben egy Ezek oszlopok. hogy a MySQL-táblák erősen strukturáltak. fejezet . az oszlopaik pe­ dig függőlegesek. hogy milyen adatról van szó.és vezetéknevét sze­ retné felhasználni. Az elvis_st°re adatbázisban az email J W « W » kívül sok más i tá b lá t is tá ro lh a tn á n k . Most már tudod. mailinglist. Elmer új e m a iljis t táblájának adatoszlopai. hogy milyen adatokat akarsz tárolni benne.com w w er@ 5tarbuzzcoffee.

Egész szám Agytorna Egy tábla létrehozásához tudnod kell. A szöveges adatok tárolásához például több helyre van szükség. ezért ha egy oszlopban csak egész számokat kell tárolni. hogy mi­ lyen típusú adatokat fognak tárolni az egyes oszlopok. hogy a p r o d u c ts táblában a p ro d u ct (term ék) az egyetlen szöveges oszlop. az a legbölcsebb. A MySQL-ben számos különféle adattípus létezik. akkor hiba­ üzenetet kapsz. a p r i c e oszlopban decimális számok.Adatbázis létrehozása és feltöltése Meg kell határoznod az adatokat Termékek Amikor létrehozol egy táblát. és tudnod kell. Amikor létrehozod egy tábla oszlopait. ha az oszlopot egész szám típusúként határozod meg. hogy véletlenül rossz típusú adatot szúrj be az oszlopba. az in v e n to r y és id oszlopokban pedig egész számok találhatók. megint másokban dátumok vagy időpontok lehetnek. hogy egyes oszlopokban szöveg. amely a boltban árusított árucikkeket követi nyomon: t. Az adattípust minden MySQL-oszlop esetében meg kell adni. hogy a megfelelő adattípu­ sokat használd. hogy’ egy oszlopban milyen adatok találhatók. hogy az adott cikkből hány darab van raktáron. és így tovább. A MySQL-ben minden adattípusnak saját neve van. más oszlopokban számértékek.0 0 Egész szám product B lu e S u e d e S h o e s P o ly e s te r P ants w ith S e q u in s 2 3 4 S tic k -O n S id e b u rn s E lvis w ig inventory P o ly e s te r P ants w ith S eq u ir 24 S tic k -O n S id e b u rn s Az id (azonosító) oszlop egyedi azonosítóértéket tárol Elmer boltjának minden termékéhez. A price (ár) oszlop tárták 16 Elvis w iq 93 Szbveg 7 Eszreveheted.9 9 4 8 .0 0 2 3 . Mit gondolsz.5 0 1 . Ez azt jelenti.. Kék artti\opb<5r cipó Poliészter nadrág filterekkel Felragasztható barkó Elvie-paróka mm* ' Eta. fontos. hogy Elmernek van egy p ro d u c ts (term ékek) nevű táblája. hogy az egyes adatokhoz melyik a legm egfelelőbb. és további típusok is léteznek. ha nem dátumot próbálsz beleírni. hogy a tábla egyes oszlopainak milyen típusú adatot kell tárolniuk. Ezen kívül. és egy táblában minden oszlop egy adott tí­ pusú adatot tárol. meg kell mondanod a MySQL-kiszolgálónak. M i i * * '51“ Az inventory (raktárkészlet) oszlopban egy egész szám mutatja. ha a webkiszolgáló tudja. miért jobb különféle adattípusokat használni ahelyett. hogy mindent szövegként tárolnánk? most itt vagy ► 113 . mint az egész szám típusú adatokéhoz. Tegyük fel. például a dátumokhoz és időpontokhoz. mert a táblák csak így lehetnek pontosak és hatékonyak. Ha egy* oszlop például dátumokat tárol. inventory 24 16 93 7 products id 1 ^ product B lu e S u e d e S h o e s price 5 9 . akkor nem engedi meg.

néven is ismernek. Van egy iker­ testvére is.g y a k ra n h a s z n á lt m y s q l-a d a ttip u s o k Ismerkedj meg a MySQL néhány adattípusával! Az alábbiakban a leghasznosabb MySQL-adattípusok közül ismerkedhetsz meg néhánnyal.0. ami a VARiabie m a r.!” ".« >wi -wwí. BLOB jó barátja. 114 3.sokkal jobb.3-ban és a későbbi k i­ adásokban) 65 535 karakter lehet.0 . legalábbis amíg belefer.3 előtt) 255 karakter vagy (a . de nem ijed meg a negatív számoktól. A dátumoaf és az időpontokat tartja számon.az adattípusok feladata. Az időpontok viszont nem érdeklik. . akit TIMESTAMP ¿saSsS*' amelyek mindig azonos hős adatokat kedveli. mint OATETIME. TIME. DATE..« — csak azt tarolja. INT vagy INTEGER. Ez VARCHAR. aki a dátumokat tartja számon. Hívd csak BLOB-nak. akit viszont a dátumok nem hoznak lázba. A nagydarab bináris DEC. A terjedelmes szövegek tárolásában a legjobb . hogy egy táblában egy adott oszlop adatainak leírására bárme­ lyiket használhatod .k V h* * Az általad használt MySQL-változattól függően az adathossz (a MySQL 5 . TEXT. . hogy az adataidat a m egfelelő formá­ ban tárolják. a „ h i t u m t# H « * <7iikséqed van. . u iv e t MySQL 5 . Véleménye szerint a szá­ moknak egészeknek kell lenniük. Rövid egészeket is tud tárolni.. fejezet . Annyit tizedeshelyet ad neked. tárol. amennyit csak kérsz.. CHAR vagy VARCHAR. ami a DECIMÁL rövidí­ tése. Ne feledd. (• ** f z4s. ebben az esetben a neve TINYINT („kicsiegész").

csak rugalmasabb? hülye kérdések ugyanazt K: Miért van szükség az olyan számtípusokra. V: K: Ennyi az egész? Összesen ennyi adattípus van? Nem.Adatbázis létrehozása és feltöltése Nincsenek ! Miért használnám valaha is a CHAR-t. 2 ) Leírás A teljes neved Egy kétbetűs államnév-rövidítés Egy Elvis-paróka ára: 48. az az ésszerű. 2 ) VARCHAR ( 6 0 ) CHAR (2 ) DATET ÍME DEC( 1 0 . amelyben akár 10 karakteres jelszavak is tárolhatók. Felesleges lenne olyan adattí­ pusokkal leterhelned magad. Ha egy számot tény­ legesen számként (IN T . Mire való? Párosítsd össze az egyes MySQL-adattípusokat a táblában tárolható adatok leírásával! Adattípus INT CHAR ( 1 ) DATE TIME VARCHAR(2 ) DEC( 4 . az csökkenti a tábla méretét. Ha egy tábla oszlo­ pai számára a legm egfelelőbb adattípust választod. ha csak két karakternyi tárolót foglalsz le a számára a CHAR (2 ) utasítással. mert nem kell bajlódnia a változó hosszúsággal. Terve­ zési szempontból mindig úgy célszerű megalkotni a táblá­ kat. és jelenleg ennyivel is elboldogulsz. A CHAR valamivel hatékonyabb a VARCHAR-nál. ezért kívánato­ sabb ezt használnod. az általában hatékonyabb. Ha azonban egy olyan jelszóoszlopod van. V: a DEC? Minden az adatbázisban szükséges tárhelyre és az adatbá­ zis hatékonyságára vezethető vissza. hogy egy államokat vagy megyéket tároló oszlopban mindig ponto­ san kétbetűs rövidítés fog szerepelni. am elyekre talán soha nem lesz szükséged. hogy azok a lehető legszigorúbban modellezzék az adatokat.) tárolsz. akkor a VARCHAR { 1 0 ) jobb választás. amikor elrabolták? Elvis születési ideje most itt vagy ► 115 . ha biztosan tudod egy szöveges osz­ lopban az adatok pontos hosszúságát. és nem szövegkarakterekként. és gyorsabbá teszi az adato­ kon végzett műveletek végrehajtását. ha a v a r c h a r csinálja. DEC stb. Ez a dolog tervezési olda­ la. mint az int vagy ! A válasz a pontosságban és a hatékonyságban rejlik. Ha minden kétséget kizáróan tudod.99 Elvis legjobban fogyó albumának bevétele Egy UFO által elkövetett elrablás dátuma: 2/19/2004 A raktáron levő Elvis-barkók száma: 93 Látta Ow en kutyáját? 1 vagy N Az e-mail címed Amikor ebédelsz Hány idegent látott. de ezeket használják a leggyakrabban.

fejezet . Egy igen/nem értéket más (esetleg jobb) módon is lehet ábrázolni 3 MySQL-ben. mert általában valamivel hatékonyabb. mint a CHAR(1)-gyd.99 a C A t. hogy elég hosszú legyen ahhoz. ¡1 Ehhez lehet. csak gondoskodj róla. Bár az államnév. ^ Adattípus IN T Leírás A teljes neved Ha pontosan tudod. használd \ DATE T IM E Egy Elvis-paróka ára: 48. de az igazi Elvis-rajongók a dátumot és az időpontot is tudják. nogy az adatbázis hány számjegyre számítson a tizedespont előtt. Ha egy szöveges érték Hossza változhat. letve után. 116 3.megoldás Mire való? Párosítsd össze az egyes MySQL-adattípusokat a táblában tárolható adatok leírásával! Nem szükséges. HR \ Elvis legjobban fogyó albumának bevétele Egy UFO által elkövetett elrablás dátuma: 2/19/2Q04 A raktáron levő Elvis-barkók száma: 93 VARCHAR ( 6 0 ) j / Látta Owen kutyáját? I vagy7 N Az e-mail címed DATE T ÍM E Amikor ebédelsz Hány idegent látott. hogy bármilyen ér . „ „ ték beleférjen. a VAR­ CHAR a legjobb választás. aminek a tárolására szükség lehet. de ez egyszerűbb és kellően hatékony. 3 CHAR(2 ) jobb választás. hogy a DATE típust vá­ lasztottad. amikor elrabolták? Elvis születési ideje A 0 EC típust egyebek mellett árak tárolására szokták használni Ez a két szám adja meg.Mire való? . hogy \ ^ egy adott oszlopban hány \ Egy kétbetűs államnév-rövidítés {<ara|<terf vársz.rövidítés esetében működne.

. még mindig itt tartunk. még egy jó nevet ( e r n a i l _ l i s t ) is találtunk.au«». majd a tábla ne­ ve következik. amivel mindezt összekötjük és létrehozzuk a táblát.de Hozd létre a táblát egy lekérdezéssel! Minden részlet megvan.. valamint egy SQL-utasítás. . vesszőkkel elválasztva kell megadni. a ve zé se k e g ysé g e se k. A parancs tehát így néz ki: CREATE TABLE tábla neve ( A tábla neve A z oszlop neve oszlop_nevel oszlop_típusal. . ha szükség van rá A « M . Az adatoszlopok nevét ugyancsak meghatároztuk: f i r s t _ n a m e . *«*irt-“ ” ' most itt vagy ► 117 . Már csak az egyes oszlopok adattípusa hiányzik. Az oszlopneveket. Az oszlop djattfp tisa ) További oszlopok . Az utasítás a CREATE TABLE kulcsszavakkal kezdődik. ami a tábla létrehozásához szükséges.és o s z lo p n e v e k b e n nem m - Egy adatbázisban új táblát a CREATE TABLE SQLparanccsal hozhatsz létre. zárójel­ ben. amelyeket az adattípus követ.Adatbázis létrehozása és feltöltése Igen. la st_ n a m e és emai l . oszlop_neve2 oszlop_típusa2. „ í j aUUtM hasznain. A tábla létrehozására szolgáló SQLparancs a CREATE TABLE.

A (6 0 ) azt jelenti. V h R C m d O ). 1.teszteld a CREATE-lekérdezést V Hegyezd ki a ceruzád! Megoldás Ez az SQL-parancs hozza létre írj egy SQL-lekérdezést. hogy szerinted mi nem stimmelt. last_name VARCHAR(20) .|mtj. Az e-mail címet tároló oszlop neve. Figyeld meg a nagybetűket! A tábla nevének kisbetűsnek kell lennie. 118 3. CREATE TABLE email list A létrehozandó oszlopok lis tá ju k elejét a nyitó zárójel Jaln. és szóköz helyett aláhúzást kell használnod benne. last_name és email)! a táblát. «mail l/ARCHARíto) ) A létrehozandó oszlopokat a vesszők w . amely létrehozza Elmer e m a i l _ l i s t tábláját a három szükséges adatoszloppal (first_name. Hogy az email oszlop adattípusa VARCHAR. • Tesztút Hozd létre Elmer adatbázisát és tábláját! Hajtsd végre a CREATE D A T A B A S E és CREATE TABLE lekérdezéseket valamelyik MySQL-eszköz segít­ ségével az e l v i s _ s t o r é adatbázis és benne az e m a i l _ l i s t tábla létrehozásához! CREATE DATABASE elvis_store CREATE TABLE email_list (first_name VARCHAJR(20) . é r ~ last_«ame VARCHARÍZO). A[ os^ ok iM q tu k végét zárójel je h i. email VARCHAR(60) Mindkét lekérdezés zökkenőmentesen működött? Ha nem. hogy az ebben az oszlopban tárolt szöveg legfeljebb 6 0 karakter hosszú lehet.k6j Ez azt mondja a MySQL-nek. írd le. fejezet .

Szerencsére létezik egy egyszerű megoldás. amikor parancsokat adunk ki.> jel. és a vé­ gére pontosvesszőt teszel. hanew 3 Nincsenek ------------K hülye kérdések -------------- lT 'la": • " iS Q l.. email VARCHAR<60) ). ami néha megjelenik a MySQL-terminálban? V ! A ..Ez így nem lesz jó. A CREATE TABLE utasítás rendben van. hogy a következő utasítások melyik adatbázisra vonatkoznak. mert ' » « M T E TABU r t u n * .. most itt vagy ► 119 . a MySQL végrehajtja. hogy megmondod a MySQL-terminálnak. A MySQL tehát lényegében arról értesít.> jel azt jelzi..Adatbázis létrehozása és feltöltése Á lljo n meg a menet. hogy még mindig ugyanazt az utasítást gépeled. hogy a táblát melyik adatbázisban kell letrehozni. hogy az imént lét­ rehozott adatbázisról beszélsz. de a MySQL-terminál nem tudja. Filc Edit W in d o w Help O o ps mysql> CREATE TABLE email_list ^ 5 = = ^ ( first_name VARCHAR(20). i Mi az a fura . hogy tudja. ami annyiból áll. ERROR 1046 (3D000): No database selected A CREATE TABLE utasítás valamiért nem működik a MySQL-terminálban. Ha befejezed az utasítást. itt vala m i nince rend­ benI P o n to s a n úgy írta m be a t á b lá t létre­ hozó kódot. ahogy m eg be széltü k.lm m l Mégis hibát jelent. de az adott kiszolgálón már rengeteg egyéb adatbázis lehet. címer most nem a csípőjét rázza. hogy most hoztad létre az e l v i s _ s t o r e adatbázist. last_name VARCHAR(20). hogy melyik adatbázisra gondolunk. m égis va la m i fu rc s a h ib a ü z e n e t je le n ik meg. táblát az adatbázishoz Kösd a lovat a szekér été! Elmer jogos problémája abból ered. ezért nem tételezheti fel egyszerűen. Azt természetesen tudja. hogy egyetlen utasítást írsz be több sorban. hogy7 a MySQL-terminál nem tudja automatikusan. még ha a R e t u r n leütésével egynél több sorra tördelted is.

melyik adatbázishoz tartozik az új tábla. USE adatbázis neve Elmernek tehát egy USE utasításban m eg kell adnia az adatbázisa ne­ vét ( e l v i s _ s t o r e ) . hogy a következő parancsok erre az adatbázisra fognak vonatkozni.amíg egy másikat nem választasz egy újabb USE utasítással. amelyen műve­ leteket szeretnél végrehajtani.használnád Alihoz tehát. hogy a CREATE TABLE utasítás működjön. A USE parancs alapér­ telmezett adatbázisként választ k i egy adatbázist a terminálban. elvis_sightings elvis__fans elvis_lyrics Ha kiválasztottál egy adatbázist a USE paranccsal.. Az utasítás formája így fest: A USE parancs áralja el a MySQL-nek. 120 3. fejezet .n e fe le d d a U S E parancsot! Vedd használatba az adatbázist. hogy a terminál tudja.. és hozzáférjen az új táblához: A használni kívánt adatbázis neve.. mielőtt. a terminál figyelmen kívül hagyja az adatbázis-kiszolgálón található többi adatbázist.. A USE parancs a követke zo SQL-utasítások alapér­ telmezett adatbázisaként választ ki egy adatbázist. ami azt jelenti. hogy kiválassza az adatbázist. USE elvis store A USE parancs választja ki az adatbázist. Elmernek ki kell választania az adatbázist a MySQL-terminálban. hogy melyik adatbázist szeretnéd használni.

last_name VARCHAR (20) . m ost itt vagy > 121 . email VARCHAR( 60) ) A USE utasítás nem szükséges. a tábla létreho­ zása már gond nélkül müVödik.Adatbázis létrehozása és feltöltése CREATE TABLE email list(first name VARCHAR (20) . mié lőtt SQL-parancsokat adnál ki. mint a phpMyAdmin. hogy a USE parancsnak köszönhetően kiválasztottuk az adatbázist. mert az ilyen programokban grafikusan választhatod ki az adatbázist. mint koráb■ .csak ahhoz. ha egy olyan grafikus SQL-eszközt használsz. Most.4481 sec) Ü kellett választani c adatbázist. File Edit W in d o vl / ^ e i p ü s a Marté táblát létrehozó kőd rjinaz. firstjname VARCHAR(20) last_name VARCHAR(20)J emailJVARCHAR(60) I Your SQL query has been executed successfully (Query took 0.

először ki kell derítened. fejezet . de a hibákat természetesen ki lehet javítani. hogy pontosan milyen hiba történt. de így is v é g re h a jtó d o tt. hogy szerinted hol a hiba ebben a táblában! Van valamilyen ötleted. hogy kijavítsd a hibát.a D ES C R IB E parancs H o p p á cska . hogy miként lehetne kijavítani a hibát? 122 3. Tegyük fel. hogy az e m a i l _ l i s t tábla így néz ki: e m a il ü s t first_naem lasf_name email Karikázd be.elgápeltem a CREATE T A B LE u ta s ítá s t. Ahhoz azonban. A z SQ L-ben van v is s z a v o n á s i lehetőség? Visszavonási lehetőség éppenséggel nincs az SQL-ben.

Az SQL DESCRIBE parancsával elem ezheted egy tábla szerkezetét. hamarosan látni fogod a táblában levő adatokat. vagy úgy. a benne tárolt adatokat nem. T ■ — — -----------T A rv A //Tjfpe (Típus) ősztopban az egyes oszlo­ pokra beállított adattí­ pusok szerepelnek. Extra) mire szolgál? Vagyis ha tényleg lennének adatok a táblámban. csak tőled függ. mint hogy egy oszlop üres ma­ radhat-e. és m egjele­ nítheted az oszlopnevek listáját. azok megjelennének itt? Nem. Key.és nagy betú1<et.(60) I YES •X . az adattípusokat és egyéb információkat. Nincsenek hülye kérdések K K V A MySQL-ben számos beállítást le­ V het megadni a táblák oszlopaira. K V Ezekkel olyan dolgok szabályozha­ tók. Először azonban meg kell tanulnod. akkor sem árt.. hogy miként te­ hetsz adatokat egy táblába. most rtt vagy ► 123 .. I Field +I first__naem I last_name I email I Type ■ I Null I Key 1 uerai + 1 NULL 1 I varchar(30) I Y ES 1 NULL 1 I varchar(30) I Y ES 1 NULL 1 I varchar. A többi oszlop (Null. mint a phpMy­ Admin.Adatbázis létrehozása és fe/töltese A DESCRIBE felfedi a táblák szerkezetét Egy hiba kijavítása egy táblában először is a hiba megtalálását igényli. ezért néha kisbetűkkel írva láthatod ot<et. Az. A phpMyAdmin segítségével is meg le­ het nézni ugyanezt a táblaszerkezetet? Igen. ha mindig ellenőrződ a munkádat. Default. DESCRIBE tábla neve Ha a parancsnak tehát Elmer tábláját adod meg. Még ha nem is gyanakodsz hibára. például az adattí­ pusok nevében nem különbözteti meg a kis. amelyikről |fí) s|! h L File Edit W in d o w Help G raccland A „Field" (Mező) oszlopban az egyes oszlopok neve látható. amikor fontossá válnak az al­ kalmazás számára. szintén lehetővé teszik a táblák szerkezetének megjeleníté­ sét a DESCRIBE utasítással. hogy egy kattintással képi megjelenítést kérsz a kívánt tábláról. a következő SQL-utasítást kapod: DESCRIBE email_list ¿zr Ez annak a táblának a neve. Ezekkel egy kicsit később foglalko­ zunk. vagy hogy tartozik-e hoz­ zá valamilyen alapértelmezett énék. hogy milyen eszközzel elemzed a tábláidat. A DESCRIBE csak a tábla szerkezetét mulatja meg. A MySQL a fenntartott szavakban. De ne aggódj. Az olyan grafikus adatbázis­ kezelő eszközök.

Ha egy tábla már létrejött. Az SQL-ben egy táblát a DROP TABLE (tábla elvetése) paranccsal törölhetsz egy adatbázisból. 1 2 4 3. A DROP TABLE paranes egy táblát az összes adatával EGYÜTT töröl az adatbázisból. amit a táblában tároltál. nem vesztesz semmit a tábla elvetésével és egy új. File E dit W in do w Help Ty p o ? IM I Field v ~ — I Type I Null I Key | Default | Extra | -----------------------------.+ ----------------------------------.vesd el a táblát K ija v íto tta m a z e lírá s t. aztán elölről kezdened. b iz to s nem kéne elcíbb tö rö ln ö m a hibás tá b lá t? 0 Kis malőr: a firs t Jtame oszlo­ pot véletlenül first_naem-nek írtu k . és m e g p ró b á l­ ta m Is m é t le fu tta tn i a CREATE TA & LE le ké rd e zé st..^ --. fejezet .. de nem m ű k ö d ö tt.+ --------------------------------------------.---------------------------------------------------------------------------------------+ R^first naemjj)| varchar(30) I xas-céname j varchar(30) I email | varchar(60) | YES | YES | YES | | I | NULL | NULL I NULL | j I | j I De igen.+ ------------------------. A parancs törli a táblát. tehát a tábla már létezik. a f irs t_ n a m e oszlopot helyesen meghatározó új tábla létrehozásával. és vele együtt mindent. Az adatbázisból törölni kívánt DROP TABLE email ü s t tábla neve. a CREATE TABLE utasítással nem hoz­ hatod létre újra. Mivel a te új tábládban még nincsenek adatok. először tö­ rölnöd kell a meglevőt. Miután létrehoztál egy táblát. nem írhatod felü l egy új CREATE TABLE lekérdezéssel.------------------------. Ha újra létre szerelnéd hozni a táblát.

amiben már van­ nak adatok. ° f" 't / ' tájának adatait fogják táróim. O o e lv is s to re Az elvis_$tore adatbázis egyetlen táblát — email_list — tartalmaz. ezért nincs szükség a pontosvesszőre. ezért tudatnod kell vele. készen állok rá. akkor nincs szerencsém? most itt vagy ► 125 . hogy komoly adatokkal töltsem fel a levelezőlistát.legfeljebb akkor. amiben minden SQL-utasítás kódja pontosvesszőre végződik. ! Vagyis ha egy olyan táblát kell módosítanom. akkor az összes adatom is törlődik? K V ! Senki sem lehet tökéletes. vagyis csak óvatosan a táblák törlésével! ! Szóval ha egy táblában adatok vannak..Adatbázis létrehozása és feltöltése Elmer készen áll az adatok tárolására A CREATE DATABASE.erre szolgál a pontosvessző. ha a tábla már fel is lenne töltve a lelkes vásárlók adataival. * ' » **'• u ' k t l* " . Klassz. egyszerre több uta­ sítást is adhatsz neki. Azt azonban nem szabad elfelejtened. hogy tetszett a H ea d First SQL. hogy megvan az adatbázis és a tábla. Nincsenek K V Nekem megvan a Head First SQL (egyébként klassz könyv). az SQL azonban az ALTÉR utasítással lehetővé teszi. Az ott látottak­ hoz képest az a különbség. Mindenki követ cl hibákat. hogy amikor a PHP-ben a m y s q li_ q u e r y () függvényt használod. Itt miért nem? Örülünk. és elvetem a táblát. Most. hogy hol végződnek az egyes utasítások . first_name lasf_name email h W l íli. USE és CREATE TABLE SQL-parancsokkal sike­ resen létrehoztad az Elmer levelezőlistájának tárolására szolgáló adat­ bázist és táblát. hogy a PHP-utasítások végére mindig kell pontosvessző! hülye kérdések K V • így igaz. Ezzel szemben amikor közvetlenül társalogsz a MySQL-lel. akkor egy­ szerre csak egyetlen SQL-parancsot hajtasz végre. Erről a pa­ rancsról a könyv későbbi részében még lesz szó. hogy megváltoztasd a meglevő táblákat.. Elmer nem is lehetne elégedettebb . Ez a PHP feladata lesz.

egy PHP-parancsfájllal fog­ hatja őket és elraktározhatja az e m a i l _ l i s t táblában.html addemail.. ^ ------------------------------------------------------------------ 0 Az új vásárlókat a listához adó w e b e s \ y jjr la p és PHP-parancsfájl megírása...... mivel ennek a feladata az űrlapadatok átadása a létrehozandó addemai 1 .. .. létfohogásch ... lasi nama.php parancsfájl Hozd létre az Add Email parancsfájlt! Elmernek egy HTML-űrlapra van szüksége. Az urlapmÜVelet kapcsolja össze a webes HTML-urlapot az annak adatait feldolgozó PHP-parancs­ fájllal (addemail. Az űrlap kódjának legfontosabb része az űrlapművelet. ^ Enter your Urat naroe.. h tm l) három beviteli m ezőnek és egy gombnak kell lennie.php parancsfájlnak...php parancs­ fájl az űrlap benyújtásától fut le... illetve a vásárló hoz­ záadása a levelezőlistát tároló adatbázistábláhez.. és a feladata az űrlapadatok feldolgozd sa... Adatbázis-kiszolgáló 126 3.az addemail. A w ebes űrlapon (addem ai 1 . amely összegyűjti a vásárlók nevét és e-mail címét..... fejezet ..... J © A lista tagjainak körlevelet küldő webes űrlap és PHP-parancsfájl megírása.. and «mail tne Maka M® Elvi« maiUng fi« First name Last name: Enaii... Ha ezek megvannak... O A lovologölis tó tléfoló-aéafoágie 'Qfr tábla .} / x b r /> addemail..php)..php W ebkiszolgáló Az új vásárlók egyszerűen fe l­ iratkozhatnak Elmer levelező­ listájára (vagyis bekerülhetnek az adatbázisba): ehhez csak ki kell tölteniük a webes űrlapot. Az addemail.

Adatbázis létrehozása és feltölte se Gyakorlat Az Add Email űrlap adatait az addemail . Se­ gíts Elmernek: írj először egy SQL-mintalekérdezést. amely adatok szúr be Elmer táblájába. és egy INSERT utasítással he kell szúrnia az adatokat az email_list táblába. A parancsfájlnak ki kell olvasnia az adatokat az űrlapról. csatlakoznia kell az elvis_storé adatbázis­ hoz. amely beszúr egy új vásárlót.php parancsfájl dolgozza fel.php m ost itt vagy > 127 . majd ennek a lekérdezésnek a felhasználásával fejezd be a PHP-parancsfájl kódját! írj ide egy mintalekérdezést. addemail.

...megoldás Az Add Email űrlap adatainak feldolgozásához az addemail .. ema V A LU ES ( ‘fíi'rst^name1) flast_j[>ame < femail) ..e ('B rro r ... « W f f / A .. amely a beszúráshoz az ürlapadatokra támaszkodik.. Segíts Elmernek: írj először egy SQL-mintalekérdezést. . Az INSERT mintalekérdezést egy olyan PHP-karakterlánccá kell alakítani. ov dieCE»rvov °[^e r Y " r'^ - | dloseffdb t ) ] i Ha nagyon villogni szeretnél. l3st__rt9me.tom') Ezek a $ _ P 0 S T tömbértékek tartalmazzák 3 benyújtott in­ formációkat.. d ..m y s « \ l i :^kc»«dvi». . ....... fe ? ......php 128 3........ csatlakoznia kell az elvis_store adatbázishoz. m y s q l i _ q u e r y ( fá\>C.. ‘el»«■'.. r.. 'julian^breaknedkpiüa.. amely beszúr egy új vásárlót. majd ennek a lekérdezésnek a felhaszná­ lásával fejezd b e a PHP-parancsfájl kódját! INSERT INTO e » a i M i s t Í-Piret.fco»' ....megoldás Gyakorlat .. VALUES ('Julian'.............php parancsfájlt kell meghívni.. fejezet ...... ami visszavisz az Űrlapra.. l a s t ^ a m e .... ....... ....... Y\drr\Z.... e r y = "IN S E R T INTO email^ J is t ( f > « t _ n a m e . A parancsfájlnak ki kell olvasnia az adatokat az űrlapról...... ..firs t_ n a m e = 5_P0STr’ f i r s t n a m e ’ 1 /la s t na»e — f 1~u~•••••••• jast«a»e3 . t o & l r .. W ' t .... addemail......Gyakorlat .... 'Oates'... ..•••••*••• J f email = f J W f e m a A .. POSTC •..... és egy INSERT utasítással be kell szúrnia az adatokat az email_list táblába..... J ... egy < a > HTML-eímkével tehetnél ide egy hivatkozást is.

.Add Cmaü Az addemail.com/books/hfphp címről.. j u l i 3 n g b c e a k n e c k p i7 2 3 .rfka Me . és hozzáadni a vásárlókat az e m a i l _ l i s t táblához.Adatbázis létrehozása és feltöltése Tesztút Próbáld ki az Add Email űrlapot! Töltsd le az Add Email weboldal kódját a Head First Labs webhelyről.jpg) áll. és nyisd meg az addemail .ro 1 rew in oc-t < ..nrj 05 ?ect 0 m ost itt vagy ► 129 . lasi r ame and email to be aodea io tr.. A kódot. Töltsd fel az összes fájlt a webkiszolgálódra. mm FtTatnat^: L a s m a rrw Oate» Enatl- V. és írd bele az előző oldalon szereplő teljes kódot. Ne felejtsd el a saját­ jaidra módosítani az adatbázis-kapcsolati változókat.EMs ..html)... I ti.& t M Mjcfía . hogy sikerült-e hozzáadni a vásárlót az adatbázishoz. Most hozz létre egy új szövegfájlt addemail . a chapter03 mappában találod. Ez a parancsfájl fogja feldolgozni El­ mer w ebes űrlapját.cc.css) és két képből (elvislogo. amely Elmer w ebes űrlapjából (addemail.headf irstlabs. Enttr your first n a r e. a www.rn t_n áate | iasr_ríaroe | t-m a:l . Add meg egy új vásárló adatait az űrlapon.. és kattints a Submit gombra.html oldalt egy w ebböngészőben.php néven.. egy stíluslapból (style.. aky»qi> SELECT * PRCW cn » i l _ l : 3t.gif és blankface.e MaKe Ms E^vls niattnfl l.A d£m gte e tt ú aii Customer aaded ■ u^ SbH Valamelyik MySQL-eszközben ellenőrizd egy SELECT lekérdezéssel.php pa­ rancsfájl megerősíti az új vásárló beszúrá­ sát a levelezőlistába..

V \ Az SQL-nek vannak más különleges vagy fenn- tartott karakterei is. a billentyűzeten ugyanott találod (angol billentyűzeten a 8-as számbillentyűt és a Sinrr-et. Hegyezd ki a ceruzád! Most. mint a csillag? I Igen. amelyről jelenleg tudnod kell. amelyek ugyan­ -c r úgy különleges jelentéssel bírnak. fejezet . mert csak ezt használják az SQL-utasítások SELECT részében. hogy Elmer levelezőlistája kezd feltöltődni. írj neki néhány SQL-lekérdezést. akinek az e-mail címe ls@ objectville. a vezetékneve pedig McCarthy: 130 3. akiknek a keresztneve Amber.és vezetéknevét annak a vásárlónak. akiknek a keresztneve Búbba: Válaszd ki a kereszt. akiknek a keresztneve Martin: Válaszd ki a vezetéknevét azoknak a vásárlóknak. de a csillag az egyetlen.net: Válaszd ki az összes oszlopát azoknak a vásárlóknak. magyaron a plusz-mínusz és a jobb oldali Alt billentynjt lenyomva írhatod b e).teszteld a SELECT-tel kapcsolatos tudásodat! Nincsenek hülye kérdések ! A s e l e c t SQL-parancsban a csillag ugyanaz a csillag karakter. am elyekkel m egkereshet bizonyos vásárlói adatokat! Válaszd ki az összes adatát azoknak a vásárlóknak. amit eddig is használtunk? K ! Vannak más karakterek is az SQL-ben.

aki szerepel a levelezőlistán. am e­ lyik lehetővé teszi.com sunshine@breakneckpizza.com jones0simuduck. Elmer webalkalmazásának még mindig hiányzik a másik fele: az.. és mindenkinek elküldje. Elmer levelező­ listája gyorsan nő1 Csakhogy a levelezőlista önmaga nem tudja elküldeni a leveleket. jéfrohogQQQ.. m ost itt vagy > 131 ..com bertiehöobjectville. hogy a fe l­ h a szn á ló k fe lira tk o z h a tn a k a levelező. | first__name _ffe | Shaffer | Shakespeare | Doe | Louis | Búbba | John julian0breakneckpizza.net craftsman0breakneckpizza. Ehhez Elmernek egy új HTML-űrlapra és PHP-parancsfájlra van szüksége.com ls@objectville.com amberÖbreakneckpizza..ino N agyon á lla t! M o s t.com joe_m@starbuzzcoffee.com martybaby@objectville.net bshakes@mightygumball.net johndoeötikibeanlounge.com wilmawu@starbuzzcoffee.com bo@bOttOmsup.com churst0boards-r-us.com bruce@chocoholic-inc.com joyceharper@breakneckpizza.com pr@honey-doit...Adatbázis létrehozása és feltöltése File Edit W in d o w H e lp Elvisrules last^name + -----------------11 Oates Julian | Jones Kevin | Sanchez Amanda | Wallace Bo | McCarthy Amber | Hurst Cormac | Harper Joyce | Meyer Stephen J Wilson Martin | Perala Walt 1 -Munvon .net walt@mightygumball..net gregeck@breakneckpizza.com meyers@leapinlimos. A 2.com \ Ez nem a vége a táblában levő adatoknak.com samjaffe0starbuzzcoffee. lépés kész! &-Ai új vóoárlókQt a liotához adó vvoboo íírlop óö PHP pofam „ €) A lista tagjainak körlevelet küldő webes űrlap és PHP-parancsfájl megírása. * a lis ta lényegében ö n m a g á t é p íti fel. lis tá m ra egy w eboldalon k e re s z tü l. hogy megírjon egy levelet.

...... m .............. ... írj neki néhány SQL-lekérdezést..... akinek az e-mail címe ls@ objectville............. hogy Elmer levelezőlistája kezd feltöltődni..és vezetéknevét annak a vásárlónak.. 132 3........ — A lekérdezés eredményében csak a last_name oszlop jelenik meg........... a vezetékneve pedig McCarthy: S E LE C T ■* FROA'l Cmai M is t íVttERE íi\rst_r>ame — 'Amber' ANP Iast_h 3mc — 'AldCartKy A 1A/HERE záradék több információra is támaszkodhat: ebben az esetben a keresztnévre ÉS a vezetéknévre...... az osz­ lopneveket vesszővel kell elvá­ lasztanod....“ ... Válaszd ki a kereszt..v " Ha az eredményben több osz­ .......... amelyekkel megke­ reshet bizonyos vásárlói adatokat! Válaszd ki az összes adatát azoknak a vásárlóknak. akiknek a keresztneve Martin..... Ez a W/HERE záradék a lekérdezés eredményét azokra a vásárlókra szű­ kíti... akiknek a keresztneve Amber...... akiknek a keresztneve Búbba: S E LE C T last_*dme PRO/V] c mai M is t WttERE *fi\rst_*ame — 'Búbba' ...Hegyezd ki... Válaszd ki az összes oszlopát azoknak a vásárlóknak.......7 ...net: SSUBCT -fi rst_*ar*e> last_r>ame FRO/VI emai M is t IVHERE email — 'ls@ obje¿tvill^^*t.... akiknek a keresztneve Martin: S E LE C T FRO/V) emdiMísfc WttERE -Pirst_*ame — 'M a rti* A csillag a tábla összes oszlopát kiválasztja..... Válaszd ki a vezetéknevét azoknak a vásárlóknak.... fejezet ............ megoldás ki a ceruzád! -------------------------------------------------------------------Megoldás Most... lopot szeretnél látni.....

J Nézd már. g 0 A? ú j1váoárJ ékat-a liotóhoz adó woboe űrlap és PHP paf'8fto^ átí-ffK?^fáear © A lista tagjainak körlevelet küldő webes űrlap és PHP-parancsfájl megírása. mivel egy w ebes HTML-űrlapra és egy PHP-parancsfájlra van szükség. hogy írja a levél tárgyát és szövet.c o m 5 most itt vagy ► 133 .php O a te s K e v in A m ando Jones Sánchez 5 ju iia n @ b r e a c k n e c k p iz z a . míg az ad d em ail .Adatbázis létrehozása és feftöltése Az Hlmer levelezőlistáján szereplő szem élyeknek bizonyos szempontból hason­ lóan küldhetsz levelet.php parancsfájl csak egy adatsorral dolgozik. csak nem az utolsó lépésnél tartunk? rm iÑ p -ri^ cL vy S.ása. hogy a levélküldés a lista tagjainak az e m a i l _ l i s t tábla teljes tartalmát igényli. majd elküldje az üzenetet levelezőlista összes tagjának M4ke Me £Jvis O A lo v o te ő lictát tároló adatbázis-ós-tábte lófreho.c o m jo n e s @ 5 im u d u c k .html W ebkiszolgáló Adatbázis-kiszolgáló sendemail. mint ahogy felvetted őket a listára.c o m u n h in e @ b r e a k n e c k p iz z a .O X Privát*: Fo* ElmWs use ONLY Wnte and send an email © mailing i*st mam&ers Subject ofamail Body of email A sendemail. >end Email Webes űrlap lé­ évé teszi Elmernek.php parancsfájl kiolvassa a vásárlókat az adat­ bázistáblából. sendemail. Lényeges különbség azon bán. és mindegyiknek elküldi Elmer levelét.

amelyet Elmer a Send Email (Levél küldése) w ebes űrlapra (sendemail . A lekérdezés futtatása önmagában nem ad hozzáférést az adatokhoz. Itt semmi újdonság nincs. A levélküldéshez egy ciklussal végig kell menned minden vásárlón a levelezőlistában. •• A parancsfájlnak szüksége van az e m a iíjis t tábla adataira. Q Egy SELECT lekérdezést futtatunk az e m a iljis t táblán. hogy7 hozzáférj az egyes vásárlók keresztnevéhez. ahol a $_P0ST tömb segítségével változókba írod őket. o A mail() függvény meghívásával elküldjük a levelet a vásárlóknak. A Submit gombra kattintás a sendemai 1 . fejezet . majd a második sorra lép. Ha elérte az adatok végét. de hozzá kell jutnia a levél tárgyához és szövegéhez is.php parancsfájl A Send Email parancsfájlt összetartó csavarok A sendemail.a sendemail. Nézzük végig sorban a szükséges lépéseket: o A $_P0ST tömb segítségével kiolvassuk a levél tárgyát és szövegét az űrlapról. és szép sorban végigmegy a SELECT lekérdezéssel megszerzett fennmaradó adatsorokon.html űrlapon elküldi az űrlapadato­ kat a sendemail . vagyis a lekérdezés eredményének egyes adatsorain. vezetéknevéhez és e-mail címéhez. a SELECT * utasítást használhatod. A létrehozandó ciklus az első adatsorral kezdi. r 134 3. iMivel a tábla összes adatára szükséged van.php parancsfájlnak. A mysqli_query () PHP-függvény lefuttat egy SELECT lekérdezést a levelezőlista adatainak kiolvasásara. Ki is kell olvasnod az eredménykén: kapott adatsorokat. a ciklus befejeződik.huml) ír be. O Kiolvassuk az adatokat a lekérdezés eredményéből.php parancsfájlnak két különböző forrásból kell összekombinálnia az adatokat a levelek előállításához és elküldéséhez. A parancsfájlnak egyrészt ki kell olvasnia a címzettek nevét és e-mail címét az elvis_store adatbázis email_list táblájából.

tábla adatait . $result = mysqli query($dbc. Ezt az erőforrásszá­ mot kell m egadnod a mysqii_fetch_array () PHP-függvénynek.a $_POST szuperglobális segítsé­ gével egyszerűen változókba írod a levél tárgyát és szövegét. Ahhoz. egy SELECT lekérde­ zés szükséges. A PHP-ben már elég jól megy az adatok kinyerése űrlapokról. amely kivá|3Sztj a az ó s $ m ow(opof az email list táblából. Ezt most nem úgy fogod elvégezni. ha most elraktározod Elmer e-mail cím ét is egy változó­ ban. e ' m a i 1 h í «-«. mivel később. nem árt. mint korábban.php parancsfájlból indítod el a le­ kérdezést a mysqli_query () függvénnyel.. Ha közvetlenül próbálod kiíratni a $result változót. íme a lekérdezés. lg az? A lekérdezés elindításához e^y adatba z is -k a p c s o la t szükséges. $query). hogy a vásárlók adatait az email_list táblából beolvasd a parancsfájlba. $text = $ POST[felvismai1 ’].Adatbázis létrehozása és feltöltése Először fogjuk az adatokat. A $result változó valójában semmilyen adatot nem tárol a lekérdezésből.. és nézted meg . r A $query változó szöveges karakterláncként tárolja az SQL-lekérdezést. ezért az első lépésben nem lesz semmi új . $from = ’ elmer@makemeelvis . most itt vagy ► 135 . hogy soronként kiolvasd az adatokat. A mys<{li_query egy kapcsolati változó ($dbc) és egy lekérdező karakterlánc ($query) segítsé­ gével hajtja végre a lekérdezést. és egy erőforrásszám ot ad neki. T e h á t c s a k annyi a dolgom . a levelek elküldésekor szükség lesz rá: f„r. A MySQL-kiszolgáló ideiglenesen tárolja a lekérdezés eredm ényét.com1 $subject = $_POST[1subjectf].php parancsfájlnak szüksége van. hogy végigm egyek a lekérdezés eredm ényén a $ re s u lt v á lto z ó b a n . valami ilyesmit fogsz látni: R e so u rc e id #3 A $result változó egy MySQL-erőforrás azonosítószám át tárolja.a 1 k . am elyre a senöemail . hogy azonosíthassa. am i­ kor a MySQL-terminálban adtad ki a SELECT parancsot. nem a lekérdezés által ténylegesen visszaadott adatokat. Ha már itt tartunk. A levél adatait az űrlapról szintén változók tárolják. A többi adat. $query = "SELECT * FROM email_list". Elmer M ySQL-adatbázisából származik.m " 'S M m V á to „ . A kapcs részleteit a $dbc változó t a r o lj Nem.ezúttal a sendemail .

$row = mysqli fetch array($resült). amikor ezt a kódot végrehajtja a webkiszolgáló. fejezet . amely kezdetben az eredmény első adatsorát tárolja. amelynek a segítségével elérhet­ jük az eredményként kapott adatokat. A m y s q l i _ f e t c h _ a r r a y () függvény első három hívása tehát a tábla első három adatsorát olvassa ki. amelyet egy új. firsfjnoni® J u lia n K e v in Am anda O a te s J o n es Sanchez \ 1 iu lio n @ b r e a c k n e c k p iz z a . Minden alkalommal. és egy tömbbe írja azt.n e s @ s im u d o c k . A my$qli_fetch_array() függvény egy adatsort tár i• • II egy tömbben. $row = mysql i_fetch__array ($ re sült) . az eredményt a S r e s u l t változó rögzíti. Minden SQL-lekérdezésnek saját erőforrás-azono­ sító száma van. és azok oszlopait a $row tömb egy-egy elem eként tárolja. ™ ely itt három elemet tartalzdafoszlop számára.c o m / Minden adatoszlop a $row tömb e9y-egy elemeként tárolódik.u n $ h in e @ b r e a k n e c k p iz z o fc I 5' $row va'lf°™ egy tömb. . $row = mysqli fetch array($result). $row = mysql i_fetch__array ($ re sült) . $row („sor”) nevű változóban tárolsz majd. ~ 1* 1 3 b ' r o m $row $row $row 136 3. a lekérdezés eredm ényéből egy adatsor kerül a $row tömbbe. Az ered­ ményhalmaz sorain a m y s q l i _ f e t c h _ a r r a y () függvény ismételt hívásá­ val lépkedhetsz végig. Ez a függvény egy adatsort olvas ki a lekérde­ zés eredményéből. Ezt a változót adod át a mysql i _ f e t c h _ a r r a y () Függvénynek.c o I ¡r. A $row változó egy tömb. Mindent adatsort egy tömbként kapsz vissza. hogy soronként kiolvasd a tábla adatait.a lekérdezés eredményének kiolvasása a m y s q liJe tc h array() függvénnyel A mysqli_fetch_array() kiolvassa a lekérdezés eredményét Miután a lekérdezés végrehajtódott.

Adatbázis létrehozása és feltöltése V Hegyezd ki a ceruzád! Ellenőrizd. ’ $result = mysqli_query($dbc. hogy tényleg ki tudod-e olvasni soronként a vásárlók adata­ it: fejezd be a PHP-kódot. amely kiírja az e m a i ] _ l i s t táblában szerep­ lő egyes vásárlók keresztnevét. $row = mysqli fetch array($result). m ost itt vagy > 137 . $query). vezetéknevét és e-mail címét! $query = ’SELECT * FROM email_list".

. ü'3 . fro w /T la s t hamc J frow = mys^|i^íc‘t^K^arrayíf'rcsul*t).. Egy ciklus tehát vé­ gig tud menni egy lekérdezés eredm ényének minden adatso­ rán.. ' : ' .... 138 3... '<br />'. amíg egy adott feltétel nem teljesül... A ciklus egy olyan szerkezet a PHP nyelvben. 1 : 1 • fro w C 'e m a ifJ . frow — mvs^li & Í£b avr. . $row = mysqli_fetch_array($result). • * • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • » • • • • y ezd ki a ceruzád! Megoldás Cdbo /rowC'-firsfc name'J . ' • • ■ • « • ■ • • • • • • • • • • • a * « r f 1 • • • • • • • • • • • • • • • • • • • • • • • • • • • • * in "... K é t k ó d s o rt is m é te lg e tn i a le g o s to b á b b dolog. $query). ■ Cdbo frowC^íirsi. '< b r / > '.. és közben el mdja végezni rajtuk a kívánt műveleteket. rw • • • ( • • • • • • • • « • • • • • • • • ( • t i ••• • frow rnys^li^fctd^arrayífrcsul-Ü.. r*-? . amely kiírja az email_li st táblában szereplő egyes vásárlók keresztnevét.J • '<br />'. frow ^B^^HJt^b_a\rrayíf>rcsu|-t). 3 f r o w t ' e . fr o v /D a s t narwc J . 1 1 . ' ' ... ' *...... cdbo frow cd amc'3 •11 • fro^riasi namc'3 .... Tényleg van jobb módszer .. például amíg el nem fogynak az adatok.nem a legjobb megoldás ^ H e g Ellenőrizd. Y —£*^^C'cmai|. B iz to s van jo b b m ó d s z e r is. vezetéknevét és e-mail címét! $query = "SELECT * FR0M email_list".. frowrcmairJ • '<br />'. ' ' .. t^array(frcsul*ü.. frowC'lsst frow — rnys^li^íe^b^anrayífresulÜ..... hogy tényleg ki tudod-e olvasni soronként a vásárlók adatait: fejezd be a PHP-kódot. . namc'J .. frowC'crvNairJ • '< b v / > \ Cdbo fvo>/C'-piv-s-t *ame '3 .. frov/C'lasf^n^mc J . r r % .. 1 .. lá tta m .. fejezet . ^ . ' ' ... !••••••••••••••••••••• Cdbo frov/C'íirs*t r\a cl3 .........egy ciklus használata. frowOayfc ^a^cJ •1: 1 •fvowC'cmaífJ • <br />'.. a m ít cdbo M o s t t u t / r a viccelsz... amely addig is­ métel egy kódrészletet. fVow — mvs^li -fc-Ub S . $result = mysqli_query($dbc..... .......

Ha a $ g o t_ c u s to m e r s értéke t r u e . amely kifejezetten addig ismétel egy kódot._ cu sto m e r () függvényt.. Agytorna Szerinted hogyan lehetne egy w h i l e ciklussal végigm enni az Elm er e m a i l _ l i s t táblájában sze­ replő vásárlókon? while ( tesztfeltétel) { művelet } A ciklusmíívelet minden is. hogy segítsünk a k ö ­ vetkező ügyfélnek. a ciklus véget ér. Amíg vannak ügyfelek. akkor tudjuk. akkor leállítjuk. amíg a feltétel igaz ( t r u e ) marad. annyi kódsort hajthatsz végre. Ha igaz. amennyit csak akarsz. m ost itt vagy ► 139 . folytatjuk a ciklust. hogy további ügyfe. Ha a feltétel hamissá ( f a l s é ) válik. hogy vannak-e segítségre váró ügyfelek. tehát a mű­ velet nem ismétlődik többször. amíg. Ennek a forgatókönyvnek a következő w h ile ciklust használó kód felel meg: A while ciklus addig ismétel egy kódrészletet. hogy vannak-e még ügyfelek. while ($got customers) next cus tomer ( . A m űvelet a kapcsos záró­ jelek között álló kód. hogy egy ügyfélszolgálati alkalm azásban van egy $ g o t_ c u s to m e r s nevű változó. akkor folytatjuk a ciklust. ím e a w h ile ciklus általános alakja: Egy while ciklussal sorban végigmehetünk az ügyfele­ ken. egy félté­ séit ellenőrzünk. ha hamis. Amikor meghívjuk a n e x t. Ila nem vagy false. A w h ile („amíg”) ciklus olyan ciklus. £ A tesztfeltétel mindig igaz vagy hamis eredményt ad. így meghívhatjuk a n e x t_ c u s to m e r (> („következő ügy fé l') függvényt. Ha a ciklus kódját kapcsos zárójelek közé teszed. amíg egy sem marad. ami mindig e g y eldönten­ dő (igennel vagy’ nem m el m egválaszolható) kérdést tesz fel. A feltétel a zárójelben levő kód. akkor ki­ lépünk a ciklusból.:en vagy true. amíg egy feltétel teljesül. ami addig ismétlődik. ) { Ez a kód hajtódik végre a ciklus minden ismétlésekor. amíg egy adott feltétel teljesül. Amikor arra vagyaink kíváncsiak. egy m űveletet hajtunk végre. a művelet végrehajtódik. nétle'skor végrehajtódik.Adatbázis létrehozása és feltöltése Ismételd. Tegyük fel például.ek várakoznak. amely azt tartja szám on. Ha a válasz ..

.hogyan működik a while? arasa a w h i l e ($row echo = m y s q l i _ f e t c h _ a r r a y ($ r e s u l t )) n am e'] { n am e'] $ ro w ['f i r s t $ r o w [ fl a s t $ r o w [ ’ e m a i l *] A ciklusmuvelet a ciklus minden ismétlésekor lefut A ciklusmuvelet egy echo uta sífásból áll.Mintha lenne itt valamilyen törvényszerűség. amely összera­ gasztja a sor adatait.ő sorát t í r t a li* » » » Jones Am anda A ciklus második ismélésekor a $row tömb az e m a iH is t tábla második sorát tartalmazza.. fejezet . e ls ő le fu tá sa ko r ömb az em ail J i s * . és egy sortörést tesz a végükre. nem? 140 3.

Adatbázis létrehozása és feltöltése A HTML-sortörés gondoskodik róla. de ezúttal a tábla második sorában szereplő adatokat használja fel. tükrözzék. véget ér. és ha kifogy a sorokból. hogy az egyes adatsorok külön sorba kerüljenek 32 eredményként kapott oldalon. most itt vagy ► 141 . hanem a pont műveleti jelet használjuk. $row[rfirst name'] $row[’ email’] A $row tömbben tárolt értékek a ciklus minden ismétlésekor meg Változnak. a. hogy az aktuális adatsort A karakterláncok összegzéséhez valójában nem a pluszjelet.com A ciklus második lefutásakor az echo utasítás egy újabb szövegsort ír ki. A tömbben levő értékek eléréséhez oszlopneveket használunk. $row[’last name’] $row['email'] A tömbelem eléréséhez használt kulcsnak meg kell egyeznie az oszlop nevével. com A while ciklus sorról sorra bejárja a tábla adatait.

ami azt eredm ényezi. és ezért a ciklus soha nem ér véget. a m y s q l i _ f e t c h _ a r r a y ( ) pedig valamilyen erőforrás-azo­ nosítót ad vissza. am i nem nulla ( 0 ) vagy f a l s e . hogy értsd. amely adatok magas fokon rendszerezett tárolására szolgál. mindig t r u e . Nézd m eg például ezt a w h i l e ciklust: €) A lista tagjainak körlevelet küldő webes űrlap és PHP-parancsfájl megírása. Ha a lekérdezés nem ad vissza sem m ilyen adatot. A m y s q l i _ f e t c h _ a r r a y () függ­ vény egy adatsort olvas ki egy adat­ bázis-lekérdezés eredm ényéből. a $ r o w töm böt a PHP t r u e . m inden én ék et. Egy táblát egy adatbázisból a DROP t a b l e SQL-paranccsal lehet törölni.n a k . am i soha nem hagyja abba az ism étlő­ dést. G Az új vásárlókat a listához adów ebo6 űrlap óo PHP poranosfájl megírása. hogy a w h i l e ciklus végső­ soron t r u e .n a k veszi. K: Tehát egy w h i l e ciklust bármilyen adattal vezérelhetek. w hile (tru e) { He m * « l i f é! Az ilyen ciklust végtelen ciklusnak hívják. mert a tesztfeltétel mindig igaz lesz. A lényeg tehát az.nem hülye kérdések a while-ról Nincsenek hülye kérdések K: Pontosan honnan tudja a w h i l e ciklus. ha V : a m y s q l i _ f e t c h _ a r r a y ( ) függvény nem ad vissza sem­ milyen adatot? A levelezőlistát tároló adatbáz+ óo tabló 6 létrehozása. t r u e . Röviden. ami nem 0 vagy f a l s e . K: Vagyis létezhet olyan ciklus. ami véget vet a ciklusnak.k é n t értelm ezi az adatokat. Egy tábla egy adatbázisban a CREATE TABLK SQL-paranccsal hozható létre. hogy m inden. ami soha nem ismétlődik? V : Igen. fejezet . K: Mi történik a w h i l e ciklussal. mivel az érté­ ke nem 0 vagy f a l s e .t ad vis­ sza.Ez tutira nem úgy fest. sőt olyan is. Ami érdekes. Az egyszerű válasz pedig az. A PHP valójában m eglehetősen en g ed é­ keny. ami a $row tömbben tárolódik. hátravan 142 3. Mivel pedig a tesztfeltétel t r u e . egyetlen egyszer sem hajtja végre a művelet kódját. mi számít t r u e .k é n t vagy f a l s e . hogy ismétlődnie kell? Úgy értem. am ikor más típusú adatok értelm ezéséről van szó. akkor a m y s q l i _ f e t c h _ a r r a y { ) függvény visszatérési értéke f a l s e lesz. az az. hogy a w h i l e ciklus soha. Tehát am ikor a m y s q l i _ f e t c h _ a r r a y () függvény visszaad egy adat­ sort. A w h i l e ciklusok addig ismételnek egy PHP-kódrészletet. Újratöltve Az adatbázis egy olyan tároló. A végtelen ciklusok nagyon rosszak. amelynek részletes információkat kell adni a tábla adatoszlopairól. a w h i l e ciklust egy t r u e / f a l s e feltétel vezérli. ha nincs több adat a m y s q l i _ f e t c h _ a r r a y () függvény f a l s e . mint egy t r u e / f a l s e tesztfeltétel.n a k tekint egy tesztfeltétel esetéb en . V: J ó m egfigyelés.. amíg egy tesztfeltétel teljesül. Új adatbázis a CREATE DATABASE SQL-paranccsal hozható létre.. A táblák oszlopok és sorok rácssze­ rű mintázatában tárolják az adatbá­ zis adatait. a ciklus folyam atosan ism étlődik.n a k számít. hogy' mi történik. de n e felejtsd el. nem V : csak t r u e / f a l s e értékekkel? így igaz. am ikor az „igaz” értelm ezéséről van szó.n a k vagy f a l s e .

ü zen et. $resuit = mysqii_query($abc. \n theking mail ( rom mysqii_close($dbc) sendem ail.php m ost itt vagy ►143 . 'Front:' . $last name ~ $row [' last_naine ' ] . tárgy.makemeelvis or die('Error connecting to MySQL ser $query = "SELECT * FROM emaii_iist". hogy Elmer nekiláthasson leveleket írni a vásárlóinak. fela d ó ). hogy miként mű­ ködik a mai 1 () függvény: mail (c í m z e t t . Dear $first name $iast_name.Adatbázis létrehozása és feltöltése PHP.mysqli_connect ('data. $query) or die('Error querying database.& MySQL-mágnesek A lap alján található mágnesek segítségével fejezd be a Send Email parancsfájl kódját.') while ($row * i y s q l i _ f e t c h _ a r r a y ( $ r e s u i t ) ) *m $first_name■ ~ $ r o w [ ' f i r s t _ n a m e ' ] . $dbc . Emlékeztetőül álljon itt még egyszer.

I 144 3. Ne felejtsd el ezt a saját e-mail címedre változtatni! tárgy. $dbc . Enne* a problémának 3 megoldására a 6. valamint Elmer (a feladó) címét adod át Az adatbázis „email” oszlopa tárolja azoknak a vásárlóknak az e-mail cí­ mét. Emlékeztetőül álljon itt még egyszer. a levél tárgyát. fejezet fejezet mutat néhány módszert.'}. hogy Elmer nekiláthasson leveleket írni a vásárlóinak.').php A biztonság szempontjából általáfe» nem jó ötlet a felhasználó által b«*. or die{'Error connecting to MySQL server.a kész sendemail. . az üzenet törzsét. akik megkapják a levelet.com'. $msg — "Dear $first_name $last_naroe. $to = r $ ■ mail( I $ echo 'Email sent to: ' V from A m ail() függvénynek az e-mail címzett m y sq li_ c lo se ($ d b c ) jót.com'. ü zen et. $query) or d i e ('Error querying database. ami meg egyezik azzal a névvel. $result = mysqli_query($dbc. ellenőrzés nélkS Á átadni a mail () függvénynek.I takat közvetlenül. $last_name = $row['last_name'1. 'elvis_store' ) Az e-mail szövegét az „elvism ail" nevű urlapmezobe kell beírni.& MySQL-mágnesek A lap alján található mágnesek segítségével fejezd be a Send Email parancsfájl kódját. hogy miként mű­ ködik a m a il () függvény: mail ( c í m z e t t . = $sub'ect = $ te x t A Tárgy urlapmezó" neve „subject". 'From: ' . while ($row = mysqli_fetch_array ($result)) { $first_name = $ row['first_name'1. Az oldalon egy megerősítő üzenetet írsz ki azoknak a vásárlóknak az e-mail cí­ mével. 'elmer'. amellyel a mezöt el­ éred a $_P0$T tömbben. $query « "SELECT * FROM emaii_list". akiknek a levelet címzed. A levél üzenettörzse a vásárló nevé­ ből és a levél szövegét tároló írla pmezó1)ő1 épül fel. \n 'theking'.php parancsfájl PHP. fela d ó ). sendem ail.mysqli_connect('data.makemeelvis. <? php Sírom * ’elmer@makemeelvis.

Vég­ eredményben tehát Elmer szélesebb körben reklámozhatja az áruját. E la d ta m a z öeezee kák a n tilo p b o r c ip ó t. hogy minden levelet sikerült-e elküldenie: minden alka­ lommal. és nyisd meg a sendemail . egy stíluslapból ( s t y l e .headf i r s t l a b s . Leveled jött. és írd bele az előző oldalon szereplő teljes kódot. com/books/hfphp címről.com címre) üzenet egy vásárló címével az adatbázisból. Töltsd fel az összes említett fájlt a webkiszolgálódra. hogy a te e-tnail címednek is rajta kell lennie a levelezőlistán ah­ hoz. A parancsfájl kimenetét felhasználva ezenkí­ vül megerősítheti.. megjelenik az „Email sent to: someone® somewhere. A kódot. ami még több Elvis-hasonmást jelent (bár arról megoszlanak a vélemények. Most hozz létre egy új szövegfájlt s e n d e m a i l .html oldalt egy w ebböngészőben. g i f és b l a n k f a c e ..E lm ertél! Elmer végre mindenkinek. amely a koráb­ ban látott Add Email oldalhoz hasonlóan egy w ebes űrlapból ( s e n d ­ e m a i l . hogy ez jó-e). úgyhogy óvatosan bánj vele! m o s t rtt vagy ► . írj b e egy üzenetet az űrlapra. G azdag vagyok! « «-mai/ parancs fa' j l tényleg elküldi a le veteket az adatbázisba té ro lt címekre. p h p néven. a www.com” (E-mail elküldve a valaki@valahol. elküldheti a MakeMeElvis. és kattints a Submit gombra.Adatbázis létrehozása és feltöltése Tesztút Küldj egy levelet a levelezőlista tagjainak a Send Email űrlap segítségével! Töltsd le a Send Email weboldal kódját a Head First Labs webhelyről. htm l). amikor a parancsfájl while ciklusának kódja lefut. Ne feledd. j p g ) áll. hogy megkapd az üzenetet.com akcióiról értesítő leveleket az új Send Email webes űrlapja és PHP-parancsfájlja segítségével. c s s ) és két képből ( e l v i s l o g o . a c h a p t e r 0 3 mappában találod.. aki szerepel a levelezőlistáján.

Elmer eleget szeretne tenni a kérésüknek. Elmernek tehát úgy kell bővítenie az alkal­ mazását. veg y e n le a levelezőlietájáról. E g y k la s s z p a r ó k a m é g re n d b e n va n . és le szeretne kerülni El­ mer levelezőlistájáról. hogy vásárlókat veszít.com Elmer nem tűi boldog. K *edve& Elmeri N e m s z e r e tn é k t ö b b a k c ió s a j á n la t o t k a p n i a z E M s . fejezet . de a b a rk ó m á r s o k . írd le. Úgy tűnik. Koszi.com.néha törölnöd kell egyes adatokat az adatbázisodból. de tisztelet­ ben szeretné tartani a kérésü­ ket.b o ltb o l. Mindez hozzátartozik a MySQL életéhez . hogy megvalósítsa a címtörlési képességet: 146 3. ■ a m o t k a p t a m a z e r e d e ti \ószőrb a r k o /to í. Kérem. hogy vegye le ol<et a leve­ lezőlistáról. Üdvözlettel. M é g m in d ig ra jo n g o k E lv is e r t d e m á r n e m s z e r e tn é k h a s o n líta n i rá . hogy szerinted milyen új összetevőkre lesz szüksége Elmernek az alkalma­ zásban. hogy törölhessen is felhasználókat az email_list táblából. Brian P o ive rs bp@honey-doi t. A z e -m a il c ím e m cbriggs@boarde-r-us. h o g y ú g y n é z z e * ki. K é rle k . Egy ex-haöoflmas T is z t e / t U ra m ! M iu tá n t ö b b s z ö r is a lle r g iá s r o .az alkalmazásnak törlési lehetőségre is szüksége van Az ember néha szabadságra vágyik Minden virágzó új üzlet esetében vannak bukkanok az úton. de ez azt jelenti. h o g y n e k e m va\ó. m in t E lv ig . v e g y é l le a l i s t a d r o . néhány Elvis-rajongó kiábrándult a Királyból. ú g y d ö n t ö t t e m . hogy valahogy el kell távolítania az említett vásárlókat az adatbázisából. h o g y n e m b iz to s .

A DELETE-nek pontosan megmondhatod. még egy lépésre szükség lesz.. ami egy tábla minden sorát törli: O A lovolozolistót tófoló odatbóá a ÓS'-tábla ♦éfrebegása. illetve sorokat szeretnéd törölni. Emiatt aztán na­ gyon körültekintően kell használnod. most itt vagy > 147 . az utasításhoz e g y v / h e r e z ár ad ék ot kell h o z z á c s a p n o d .. H M D ELETE FRO M tá b la neve Ide annak a táblának a nevét kell írnod. hogy melyik sort. írd le. A DELETE SQL-parancs adatsorokat távolít el egy táblából.először azonban meg kell ismerned a DELETE parancsot. h o g y adott soro kat különíts el e g y lekérdezésből. a DELETE-re lesz szükséged. hogy Elmernek 23 Anne keresztnevű.a tervek néha menet közben változnak! Egyéb minősítők nélkül a DELETE parancs minden adatot kidob az adott táblából V a g yis s e m m it sem t ö r ö l­ h e tü n k egy tá b lá b ó l anélkül. hogy adatokat törölhess egy táblából. hogy m in d e n t tö rö ln é n k ? Nem. 11 Parker vezetéknevű és egy Anne Parker nevű vásárlója van. Ennek fényében vedd szemügyre a DELETE legveszélyesebb formáját. Valójában egy új parancsfájlra és egy új w ebes űrlapra lesz szükség . 0 A lista tagjainak' körlevelet küldő wobes nr-tep-éfr PHP -paf aflosfájJ-raeflíféear 0 Egy webes űrlap és PHP-parancsfájl lét­ rehozása. Remove Email (Email cím törlése) nevű parancsfájlban fogod használni. Ahho z. Úgy fest. mert egy szempillantás alatt képes tisztára törölni egy adatokkal teli táblát. hogy az alábbi lekérdezések hány adatsort törölnek: DELETE FROM e m a i l l i s t WHERE f i r s t name = ’ A n n e ' . Ezt a parancsot egy új. ame­ lyikből sorokat szeretnél törölni. ezt a zá r ad ék ot már használtad a SELECT p a ­ ranccsal. ^■Ag"ó[-vásáriókot-a-4istáhee"Qdó"Webes űrl ap óc PHP pafanosfójl mogífáea. Ha m é g emlékszel rá. DELETE FROM e m a i l list WHERE l a s t name = P a r k e r . egy új SQL-parancsra. amely törli egyes vásárlók adatait Elmer levelezőlistájáról. Hegyezd ki a ceruzád! Tegyük fel. amellyel törölni lehet egyes ^vásárlók e-mail címét a listáról. dehogy. h o g y po n to s an m e g c é l o z h a s d a DELETE-tel törölni kívánt sort vagy sor oka t.Adatbázis létrehozása és feltöltése Törlés a DELETE segítségével Alihoz. DELETE FROM e m a i l l i s t WHERE f i r s t name = ’ Anne* OR l a s t name = ’Parker’ .

A WHERE záradékon belüli teszt egy összehasonlítást hajt végre a tábla minden sorá­ val. Q ^ _ Beugratós kérdés! Ez a vezetéknév nem idézőjelben áll. . hogy az eltávolítani kívánt sorra összpontosíts . WHERE email = 'pröhoney-doit. 11 Parker vezetéknevű és egy Anne Parker nevű vásárlója van. A ÍVHERE záradékkal egy lekérdezés konk­ rét adatsorokra szűkíthető. hogy megkeresse a megadott sort.c o m T A fafe/a o s z lo -y neve. fejezet . h DELETE FROM e m a i l l i s t WHERE l a s t name = P a r k e r . hogy szerinted miért az e m a i l oszlopot használjuk a where záradékban.esetünkben Elmer egyik vá­ sárlójára. a parancs törli az adott sort. DELETE FROM email list _ _ . ^ záradéknak ez a része mindent sort ellenőriz. Ebben a példában az egyenlőségjel (=) azt vizsgálja.minden szöveges értéket idézőjelek közé kell tenni! Meghatározott adatok törlése a DELETE és a WHERE záradék segítségével Ha a DELETE parancsot a WHERE záradékkal együtt használod. ezért egyetlen sor sem fog törlődni . Írd le.„ . aki le szeretne kerülni a levelezőlistáról. ^ A keresett érték. hanem konkrét adatsorokat jelölhetsz ki törlésre.DELETE ptusz WHERE ezd ki a ceruzád! Megoldás DELETE FROM e m a i l l i s t Tegyük fel. és miért nem a f i r s t _ n a m e vagy a i a s t _ n a m e oszlopot: 148 3.com" értékkel. hogy az em ail oszlop érté­ ke mely sorokban egyenlő a "p r@ h o n e y -d o it . hogy az alábbi lekérdezések hány adatsort törölnek: name = ' A n n e ’ / WHERE f i r s t 23 DELETE FROM e m a i l l i s t WHERE f i r s t name = ’ A n n e ’ OR l a s t name = ’ P a r k e r ' . nem egy teljes táblát ürítesz ki. Ha valamelyik sor em a il oszlopának értéke illeszkedik. hogy Elmernek 23 Anne kereszinevű. írd le. A WHERE záradék lehető­ vé teszi.

-rtie h @ o b ied v ille . hogy Elmer DELETE lekérdezésében az em a il oszlopot választottuk.c o m S p e n c e ____ | _ r' * Henderson Eckstein VA/ii YV U Jaffe Shaffer I Q ■ • .com' A DELETE lekérdezés ezt a sort törli az adatbázisból . DELETE FROM email_list WHERE email = "pr@honey-doit. minden Pat nevű vásárló törlődne . joe _ m @ s t a r b o z z c o f f e e . In valójában az egyediségről van szó. amely a f i r s t _ n a m e oszlopban keresi a " P a t " értéket.n e t _ ¡0 h n d 0 e @ tik ib e a n l0 u n 9 e .és ve­ zetéknevek nem azok.c ° m _ 1 I w ijm ow u @ *t°'-b u z z c o tte e .Adatbázis létrehozása és feltöltése Csökkentsd a minimumra a véletlen törlés kockázatát! Fontos.com 1 row deleted_ (0^005 sec)_ _ _ _ _ _ J most itt vagy > 149 .co m >o m io W e®»>°’-bozzc°tf«!e c o r n _ ls@obiedv <lle -net __ Ha a WHERE záradékban az email helyett a first_name oszlopot használnád. míg a kereszt. és csökkenti egy sor vé­ letlen törlésének a kockázatát. a k k o r min. Gondold •égig: ha a WHERE z ár adé k feltételének t öbb so r is megfelel. hogy egy egyedi értéket ke­ ress. nagyon jó oka van annak. S am _____ Louis Bubba John v l ? P a ! 1 Tshakespeare b sh ak e s@ m iah ty gu m b o ll. hogy Elmer WHERE záradekában pontosan jelöld ki a törölni kívánt sort. hogy' bár a w h e r e záradékban bármelyik oszlop­ nevet használhatod sorok keresésére. véletlenül ezt a felhasználót is törölnéd. hogy Elmer WHERE záradékát gondosan határozd meg.soha többé nem látod! email list r Az email oszlop használata j\rs\_nom9 \ J o e ____I I Bruce I la tn a m é | email_________ 1 a WHERE záradékban segít. I la egy olyan WHERE záradékot adnál meg egyetlen vásárló törléséhez. Jen illeszkedő sor törlődni fog . hogy íz e m a i l _ l i s t táblában az e-mail cím ek egyediek.com _ 1 Poe j )1 > Gromm et File Edit W in do w Help B mysql> DELETE FROM email__list WHERE email = ' pr@honey-doit.ezért lényeges.c 0 m _ q ro m m e tp @ 5 im uduck. A DELETE utasítás WHERE záradéka len fitO V B tG S Z I 3 TOTO101 ^ . kívánt sor pontos ki- jelölését. c o m --------1 Milano 1 h r v jc e @ c h o c o h o lic -i n c . Biztonsággal feltételezheted. Ezért fontos.n e t Bertie Greg « «_ • W ilm a \ I 1 1 1 I areQ e c k @ b r e o k n e c k p i z z a . és az em a il oszlopban keress egy konkrét értéket. _ ■» ' ' 1 V I d _ h.amit nyilván nem szeretnél. hogy megértsd.

no meg egy WHERE záradékkal megtámogatott DELETE FROM lekérdezéssel mindez tutira m egoldható. hogy Elmer olyan felhasználókkal találkozzon. Mivel elkerülhetetlen. de erede­ tileg egy webes űrlap ée egy PHP-parancefá jl segítségével akartunk adatsorokat tö rölni. Egy w ebes HTML-űrlappal és egy PHP-parancsfájllal.teszteld a DELETE parancsot Tesztút Próbáld ki a DELETE parancsot Elmer adatbázisán! Indítsd el valamelyik MySQL-eszközt. 150 3. fejezet . nem? De igen. ésszerű a vásárlók eltávolítására egy w ebes felhasználói felületet kialakítani. és próbálj ki néhány DELETE parancsot egyes adatsorok törlésére az e m a i l _ l i s t táblából a vásárlók e-mail cím e alapján. nehogy véletlenül az egész tábla tartalmát töröld! A DELETE parancs jó l jön.. Ne felejtsd el megadni a WHERE záradékot minden DELETE utasításban. hogy saját kezűleg. külön-külön lekérdezésekkel törölsz felhasználókat. akik a jövőben nem szeretnének szerepelni a levelezőlistáján.. Egy levelezőlista semmiképpen sem kezelhető úgy.

Egészítsd ki Elmer r e m o v e e m a i l . Az űrlapra csak egy e-mail címet kell beírni.Adatbázis létrehozása es feltöltése Gyakorlat Elmer elkészített egy w ebes űrlapot ( r e m o v e e m a i l .htm l <?php $dbc — nrysqli_ connect('data.R e m o v e £ma»i A Remove gombra kattintas POST-kérelernként elküldi az űr­ lapot a pHP-parancsfájlnak. ’thekinq’. amellyel egy-egy vásár­ lót törölhet a levelezőlistájáról. ’e!vis_store') or die('Error connecting to MySQL server. m égpe­ dig az e m a i l nevű HTML-űrlapmezőbe. amelyet az űrlap meghív az egyes vásárlók törlésének végre­ hajtására! f\ n o Ennek az urlapmezonek a neve „email". php ?> m ost itt vagy ► 151 . rem oveem ail. h t m l ) .') mysqli close($dbc). rem oveem ail.makemeeivis. p h p pa­ rancsfájljának kódját.com’.s . ’elmer1. M ake M e ESv.

............ Az űrlapra csak egy e-mail címet kell beírni...önösefl ha arfól wn szó.....php pa­ rancsfájljának kódját....................... tárolt e-mail címet aposztrófok közé /email ..........a kész removeemail.. 152 3.. Az email űrlapmező adatait a « pOST tömbből e y valtozoba g írjuk........ majd ezt a változót használ­ juk a DELETE lekérdezesben.........megold«* Elmer elkészíteti egy w ebes űrlapot (removeemail ... M a \ c ^ M ^ u v ií s x ű m Enter an email address to ren ov e A Remove gombra kattintás POST-kérelemként elküldi az űr­ lapot a PHP-parancsfájlnak.... 1elvis_store’) Ügyelj az aposztrófokra és a kettős idé.. mys°[lI_<\uevy(fdbd......htm l <?php $dbc = mysqli_connect(’ data..................... f^ u e ry ) or dieCEr\r-o*...... rem oveem ail....com1....... zőjelekre! A teljes SQL-lekérdezést ket.. ha megerősíted.... hogy mi töftént' kü....... fejezet ......................html)..php edKo 'Customer «moved: ' ..^uev-yin^ database-1 )..f'_PO STremain. mysqIi_c.. hogy törölsz valamit egy adatbázisból... amellyel egy-egy vásár­ lót törölhet a levelezőlistájáról.lose ($dbc).. kell zárnod.....1) ’theking’.... 'elmer'.... Egészítsd ki Elmer removeemail.. ?> Me felejts el kitakarítani magad után az adatbázis-kapcsolat bezárásává!.. amelyet az űrlap meghív az egyes vásárlók törlésének végre­ hajtására! pi n o km ú Make Me EMs ....Remove Ennek az űrlapmezőnek a neve „email". ^ ^ Soha nem árt...makemeelvis..... or die(’Error connecting to MySQL server... /email... míg az $email változóban f\ue*-y =• "D E l-E T E FR OtA em aiM ist WHERE email =• '/email'".tős idézőjelek. rem oveem ail...php parancsfájl Gyakorlat . m égpe­ dig az email nevű HTML-űrlapmezőbe..

Em ail a a o re M A parancsfájl elvégzi a DELETE lekérdezés kiadá sának piszkos munka'ját. h t m l ) . a w w w . Végre készen vagyunk! O -Egy wobos -ű flaft-ós PMP paranosfájl-látrohozása. majd megerősíti a törlést. c o m / b o o k s / h f p h p címről. A kódot.php néven. a c h a p t e r 0 3 mappában találod. g i f és b l a n k f a c e . e s s ) és két képből ( e l v i s l o g o .Adatbázis létrehozása és feltöltése O -A-lovolozólistát tároló -adatbázis ós tábla lótfohozáaar ^ Ag-úf vásárlókat a listához adó wobos űrlap ós PHP parancsfájl megírása: O A lista tagjainak -körlovelot küldő wobos űrlap óe PHP parancsfájl mogírása. és nyisd meg a rem oveem ail .-------- — __________ ______ E«»arern *a ű w ren ne a d -w ov. nem? Töltsd le a Remove Email weboldal kódját a Head First Labs webhelyről. egy stíluslap­ ból ( s t y l e .h tm l oldalt egy w ebböngészőben. Tesztút Törölj egy vásárlót a levelezőlistáról a Remove Email űrlap segítségével! Ez már egy kicsit kezd ismerős lenni. hogy tö­ röld az illetőt az adatbázisból. és kattints a Remove (Eltávolítás) gombra. amely egy’ w ebes űrlapból (rem o ve e m a il .törölni-lohot ogyos vásárlók o mail óim ét a listáról. és írd bele az előző oldalon szereplő teljes kódot. UttHH M*ke Me £tvís - - R oe emv — -— :------------. j p g ) áll. h e a d f i r s t la b s . u’ tCf T most itt vagy ► 153 . Töltsd fel az összes fájlt a webkiszolgálódra. amotiyol. Most hozz létre egy új szövegfájlt r e m o v e e m a il . c5ag sgooartls-7-^ O. írd be egy vásár­ ló e-mail címét az űrlapra.

p h p A R e m o v e E m a il o ld a l tö r ö l e g y v á s á r ló t a le v e le z ő lis tá ró l. . .a levelezőlista-alkalmazás kész! Ez már hivatalos. e -m a ilt küldhetek az ö ssze s vásárlóm nak.. aki a listán szerepel. A HTML-oldalak..p h p V issza a feladónak! Kerlek. hogy alkalmazásnak hívjuk. a d d em a a d d e m a il. tö rö lj az E lvis-levelezolistáróll rem oveen re m o ve e m a il.p h p A S e n d E m a il o ld a l U e g y e tle n k a ttin tá s r a le ­ v e le t k ü ld m in d e n k in e k aki a lis tá n s z e re p e l. valamint hogy leveleket küldjön mindenkinek. és w ebes űrlapokon keresztül műveleteket is végezhet az ada­ tokon. és még ki is ta k a ríth a to m a lis tá t... . s e n d e m a il. f Éljen a PHP ée a M y5Q L! Na ez m á r * — w ebalkalm azásl F elépíthetem a levelez<51 is tá m a t.. A PHP-nek és a MySQL-nek köszönhetően Elmer MakeiMeElvis.e s m in d e z t a webböngész<5mb<51l }— A z A d d E m a il o ld a l új v á s á r ló k a t ad E lm e r le v e le z ő lis tá já h o z . . hogy vásárlókat adjon a le­ velezőlistájához (ezt a vásárlók maguk is megtehetik). illetve eltávolítson onnan egyeseket. PHP-parancsfájlok és beágyazott SQL-lekérdezések kom binációja lehetővé teszi Elmernek. Elmer most már maradandóan tárolhat adatokat egy MySQL-adatbázisban.com w ebhelye most már érdemes arra..

4. hogy sorokat vá­ lassz ki egy táblából. MySQL-adattípus. Adatok gyűjteménye egy táblában. többesszámban).Adatbázis létrehozása és feltöltése PHP & MySQL keresztrejtvény Ha már tökéletesen tudod utánozni Elmer tánclépéseit. Ezt a MySQL-adattípust használhatod különböző mennyiségű szövegek tárolására. A MySQL-adatbázisok ezekre oszlanak (angolul. 2. amely tizedesjegy nélküli számok tárolására használható. Ez a kulcsszó addig csináltat valamit. és töltsd ki az alábbi keresztrejtvényt. Egy MySQL-táblán belül ez egy adott típusú adatot tá­ rol (angolul). hogy az utasítás mely sorokra hasson. szabályozhatod. ezt a parancsot kell kiadnod. amíg egy adott tesztfeltétel igaz. Ezzel az SQL-paranccsal semmisíthetsz meg sorokat egy táblán belül. próbáld meg együtt dúdolni vele a dalokat. Ezt az SQL-parancsot használhatod. 6. 11. amely minden oszlopból egyet-egyet tartalmaz (angolul). Ha egy w ebhelyet dinamikus képességekkel bővítesz a PHP és a MySQL segítségével. most itt vagy ► 155 . 10. 5 Maradandó. 13. 9. magas fokon rendszerezett adatszerkezet. Ha ezt a feltételes záradékot egy SQL-utasításhoz adod. Miután létrehoztál egy új adatbázist a MySQL-terminálban. 5. 12. amely jellemzően egy fájlban tárolódik a merevlemezen (angolul). Vízszintes 3. 7. Ezzel az SQL-paranccsal vizsgálhatod meg egy tábla szerkezetét. ez lesz belőle (angolul). mielőtt bármit csinálhatnál az adatbázissal. Függőleges 1 .

megoldás 156 3.PHP & M ySQL keresztrejtvény . fejezet .megoldás PHP & MySQL keresztrejtvény .

w hile Ciklusszerkezet a PHP-ben. erre 17 r -« K s s s r DELETE FROM tábla_neve Ezt az SQL-utasítást használhatod sorok törlésére egy' táblából.-.. hogy egy kódrészt addig ismételj. hogy elindíthasson egy webalkalmazást.és MySQL-ismereteket is szereztél. amelyeknek az egyik oszlopa egy adott értéket tartalmaz. Elkülöníthe­ ted vele például azokat a sorokat. ismételten meghívhatod ezt a függvényt. Attól függően. hogy hogyan használod az utasítást. amely lehetővé teszi. * V issz»»-. DO T BE t á b &l _ n e v e RP AL 2 ő b El f Z SQL' utas'tás egy teljes * T “ « w F ” “ - S5EL ° ® a benne tarolt összes adattal együtt törlődik. npVe SELEc t * fk o m t a b la _ n e v e c n r Utasítás sorokat választ Ez az SQ L' „ az utasításban megmutatja az oszlopok vet es adattípusát. egy vagy több sort is törölhetsz.Adatbázis létrehozása és feltöltése PHP & MySQL szerszámosláda Ebben a fejezetben nem csak segítettél Elmernek. amelyek adott sorokat vesznek célba egy táblában. hanem értékes PHP. e n n e h describe t á b a___neve l Ha egy tabía szerkezetére vagy kiváncsi. amíg egy adott feltétel teljesül. WHERE Ezt az SQL-záradékot más SQLparancsokkal együtt használhatod olyan utasítások felépítésére. A while ciklus egyik különösen hasznos felhasználási területe az adatsorok bejárása egy SQLlekérdezés eredm ényében. Például. m ysqli_fetch_array() Ez a beépített PHP-függvény egyetlen adatsort olvas ki egy adatbázis-lekérdezés eredm ényé­ ből Ha egymás után több adat­ sort szeretnél kinyerni..r lz * y -s a lekérde- m ényt szere^ szef oszlop adatát zéstől nem _ a * helyett so• szeretnéd m eg ^ k neveit. rold fel az egyes oszlopo most itt vagy ► 157 . • " S S .

.

ez egy új fejezet 159 . Ebben a feje­ zetben olyan valós problémákkal foglalkozunk.. rájössz majd. hogy működni fog. a való világban nem elég jó. és nem írunk d o g á t. Néha szembe kell nézned a valósággal. közben pedig újabb fontos PHP. és újra kell gondolnod a terveidet.4 Valószeru. a kocsija nem fog elindulni. Amint az alkalmazásod kike­ rül a Webre. w De ha a h e ly e tte s ítő t a n á r t V is h e ly e tte s ítik . úgyhogy neki is nyom ok egy b a n á n t.. am elyekbe beleütközhetsz.és SQL-kódokat mutatunk. Persze jö h e t h e ly e t t e s í t ta n á r is. Vagy már az elején gondosabban kell tervezned. gyakorlati alkalmazások A z alkalmazásod a Weben f Ha b a n á n t dugok a ta n á m í? kipufogó. csövébe. amikor az alkalmazásodat a tesztgépedről éles környezetbe viszed át. Ami­ ről azt hitted. hogy nem tervezted meg elég körültekintően.

hogy gond van. The sideburns you sold me are giving me a rash. fejezet . j i . közös bennük.2 0 0 8 1 2 2 3 :3 3 PM CDT To Elmer Priestley <elm er@makemeelvis com> Elmer. lehet. amelyeknek ninos se tárgya. hogy a vásárlók üres leveleket kapnak. hogy a 5end Em ail oldal okozza a p ro b lé m á t? P-8.Inbox Su *jom WWEDSimons o fis im s O starbuzzcoftee com> bre t Aitson c Date October 24. iVe received several Wank email m essa g es from you. Why do you keep sending me emails with no subject and n o t h i n ^ B S ^ f f o ^ S ^ Elvis would do? I think not Please take me off your mailing list Thankyouverymuch. -denny Hűséges. I like getting the sa le s em ails but p lease don't send me more than one. Elmernek ki kell deríte­ nie. de úgy tű­ nik. D o es that m ean you d o m want m e to buy anything from your store? I’m confused. hiszen ezen áll vagy bu­ kik az üzlet sikere.2008 12:1850 PM C D T To: Elmer Priestley <elmer©makemeelv!s. Hey Elmer. vegyél le a levelezólístádról. de a levelekre sokan panaszkodnak.-------- h LCJu O Spam? — Inbox From : Elbert Krestee <elbert®kresleesprockets tnz> S u b je ct: S p a m ? D ate: October 2 4 . ne küldj egynél többet. Elbert ----------------------------. Minden alkalommal. és hogyan javíthatja ki. állj le a levélszemét-küldőzgetéssel. Elbert ___ ^ __________________ WWED . Kedves Elmeri Miért küldözgetsz nekem olyan leveleket. se szövege? Szerint ed Elvls helyeselné ezt? M e rt szerintem nem.Elmernek jobb levelezőlista-alkalmazásra van szüksége! Elmer egyes vásárlói elégedetlenek Elmer vásárlóinak levelezőlistája jelentősen megnőtt. amikor érte­ sítesz egy akcióról. három levelet kapok.egyik sem túl jó jel. Kérlek. de légyszi. Kér­ lek. I don’t need to get three messages every time you want to tell me about a sale Your Loyal But Annoyed Customer. 160 4. de bosszankodó vásárlód. Elmer. Afison Hem te ts z ik ez nekem. hogy kiderítse. Csí­ pem az akciós ajánlatokat. hogy mi a hiba. A panaszok némileg különböznek. P le a s e stop it with the spam. Nagyonszépenköszönöm Alison ui: A nálad vásárolt barkótól kiütéseket kaptam ír Elmer tudja. pontosan hol a hiba. esetleg több levelet egyszerre . de segítségre van szüksége.corn> Dear Elmer.

html űrlap lehet a ludas.S e n d Em ail Private: For Elmer's use O N LY Write and send an email to mailing list members Subject of email: Body of email sendem ail. hogy szerinted m it 9<>ndol Elmer arról. Wake M e Elvis . gyakorlati alkalmazások A feladatod.htm l most itt vagy ► 161 . hogy miért mennek ki üres levelek. hogy mi lehef 3 probléma.Valószerű. írd ide. hogy elja'tszd Elmert. Elmer azt gyanítja. hogy a sendemail. és kitaláld.

hogy semmi nincs a Body mezőben.. fejezet .. V .megoldás A feladatod.. Elmer azt gyanítja.légy elmer..htm l Ha az űrlap Submit gombjára úgy kattintunk. hogy nem írok be üzenetet. és kitaláld... hogy szerinted mit gondol Elmer arról.Send Email' ■. O Private: For Elmers use O N LY Write and send an email to mailing list members Subject of emailBody of email: f A % 1mS í m m í sendem ail. egy üres levél fog kimenni...— 0 ^ 0 .- --------- Make V e Eivis . írd ide. megoldás Légy Elmer. hogy a sendemail.. ----------------------------------------------------. ha a Subject mező üres. a levelezőlista-kezelő! ..html űrlap lehet a ludas. hogy eljátszd Elmert. És ha már itt tartunk... hogy miért mennek ki üres levelek. 162 4. r J Ha úgy kattintok a Submit gombra. ugyanez a probléma akkor is. hogy mi lehet a probléma... a program egy üres levelet küld el..

.com '. ' e l v i s _ s t o r e ') $dbc = m y s q l i _ c o n n e c t ( ’ d a t a . ?> írd le.. hogy lásd. hogy egyes felhasználók helytelenül használják majd az űrlapjaidat. $msg. ha nem tartalmaz szöveget. w h ile ($row = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $to = $row [ ' e m a il' ] . számítva arra. \ n $ t e x t " . $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e . $ l a s t _ n a m e = $ r o w [ ' l a s t _ n a m e 1] . $ r e s u l t = m y s q li_ q u e ry ($ d b c . com’ .~ S f^ | p * * L | SXOM S Su b ject o f emailr * « « m enDers. ' F r o m : ' . m akem eelvis . mentjük. '< b r / > ' . hogy kijavítsuk az üres levelek problémáját: most itt vagy > 163 . hogyan jönnek létre Elmer üres levelei: ^ O r\ Make Me E h fc . o r d i e ( ' E r r o r c o n n e c t i n g t o MySQL s e r v e r . $query) o r d i e ( ’ E r r o r querying d a t a b a s e .. $ t o . 1 ) .p h p parancsfájl­ ban..php parancsfájl lelenlegi kódját. hogy szerinted m it kell megváltoztatni a s e n d e m a il . $ f r o m ) .. a lelkes PHP-programozónak kell kezelned az ilyen problémákat.. ¿hogy eredetileg tervezted! Neked. ) m ysq li_close($d b c).és ugyanez a Helyzet a $subject változóval is. akkor is. A Send Email parancsfájl az űrlapra beírt szö­ veget használja a levél összeállításához. ' ) ..Elmertöl Szóval a hiba Elmer készülékében van . echo 'Em ail s e n t t o : 1 . Soha ne tételezd fel.ha véletlenül i Submit gombra kattint. $ q u e r y = "SELECT * FROM e m a i l _ l i s t " . <?php $from = $subject $ t e x t = $ POST[ 1e l v i s m a i l 1 ] . m a i l ( $ t o . i lista minden tagja kap egy üres levelet. . hogy a $text változót akkor is fel használjuk az üzenetben. ha a felhasználó semmit sem írt be. "és a $subject. Nézd m eg még egyszer a sen d e m a il . Az űrlapra beírt szöveget a $ POSTCsubject'] és a $ POST['elvismail'] változókból olvassuk 'elm er@ m ak em eelvis. mielőtt beírná a levél szövegét. A probléma csak az. ' e l m e r ' . $first_n am e = $row [' first_ n a m e ' ] . illetve a $text változókba = $_P0ST[ ' s u b j e c t ' ] . gyakorlati alkalmazások Védd meg Elmert.Valószerű. hogy egy w ebes űrlapot pontosan úgy fognak használni.. $ s u b j e c t . 1t h e k i n g ’ .

Ha az adatokkal minden oké. vagyis arra. hogy a mezők nem üresek. a kiszolgálóoldal (sendemai 1 . fejezet A k is z o lg á ló H T M L . hogy a kapott ada­ tok megfelelnek-e a várakozásoknak. Ha mindent rendben talál. a parancsfájl elküldheti a levelet.először ellenőrzi a rendelést! A rendelések esetében Elmer először azt nézi meg. ha a hitelkár­ tya és a szállítási cím is érvényes. elkü ld i a kap leve le t. Ezt követően azonban azt is ellenőriznie kell. ^ rendben kell lennie. hogy megvan-e min­ den adat. Elmer már alkalmaz ellenőrzést. Q E lm e r k itö lti és b e n y ú jtja a S e n d E m a il ű rla p o t. H a nerr. nem küldi el azonnal az árut . A PH P -parancss| ellen ő rzi az a c ^ to k á t.v á la s z t ad a b ö n g é s z ő n e k : v a g y a z t. és előkészíti szállításra. ha a rendelés adatai rendben vannak. h o g y a le v e le k e lk ü ld é s e m e g t ö r t é n t . elküldöm a levelet.ht. és megbizonyosodjon róla. őriznie kell minden vásárló hitel­ kártyáját.-v. Ehhez ki kell egészítened a sendemai 1 . és ha r e « b en ta lá lja azo­ k a t.php parancsfájlt Követelj meg helyes űrlapadatokat! Elmer Send Email űrlapjának égető szüksége van az ellenőrzésre. Az áru szállításéra ess k akkor kerül sor. akkor iktatja a rendelést. hogy* megoldhasd Elmer üres leveleinek problémáját. hogy meg­ bizonyosodsz róla. Az ellenőrzés azt jelenti. A z ű r la p a d a to k a s e n d ­ e m a il. + Alihoz. hogy biztosítsa. . Tessék. hogy az űrlapra beírt adatok megfelelnek. hogy a vásárló szállítási cím e rend­ ben van-e. Elmer folytatja a rendelés teljesítését.ellenőrizni kell a sendemail. A szállítási címnek Elmernek ellen. v a g y a z t. o 164 4. Ez azt jelenti. ellenőrizned kell a sendemail . mielőtt teljesíthetné a rendelésüket. még ha nem is így hívja: amikor rendelést kap valamelyik Elvis-kellékre.ml) az űrlapadatok a kiszolgálóhoz ke­ rülnek. hogy megvizsgálja a szövegmezőkben levő értékeket.php kódját. Ha igen.php) pedig ellenőrzi. a k k o r h ib a ü z e n ­ t e t küld az ügy­ féln ek. mielőtt bármit csinálna ve­ lük. h o g y az ű r la p a d a to k n e m é rv é n y e s e k .p h p p a ra n c s fá jlh o z k e rü ln e k a k is z o lg á ló n . és útjára bocsátja az árut. Ha igen. hogy a vásárló hi­ telkártyája érvényes-e.php parancsfájlhoz kerülő űrlapadatokat. kedves kiszo l­ gáló: i t t küldöm Elm er űr\apadata\t. hogy az ügy­ féloldalon levő weboldalról (sendemai 1 . Elmer boltja tehát csak akkor tud egy rendelést sikeresen teljesíteni.

/?a az adatok érvényesek. képesek ügyféloldali ellenőrzést végez­ ni. mint a JavaScript. K: ellenőrzés? a kiszolgálóoldali ellenőrzés. hogy nem foglalkoztunk azzal. ! Ha az ellenőrzést az ügyfélen hajtjuk végre. ezért a helyte­ len űrlapadatok elfogásában a kiszolgálóoldali el­ lenőrzés nem mellőzhető. és el lehet küldeni a leveleket. az az. hogy van. ! Úgy tudom. A kiszolgá­ ló azonban a védelem utolsó vonala. Az ellenőrzés révén gondoskodhatunk róla. olvasd el a H ead First JavaScript című könyvet. Megeshet. elküldheted a leveleket". gyakorlati alkalmazások A levélküldő űrlap ellenőrzése mögötti logika Elmernek tehát ellenőriznie kell a sen d em ail .. ¡MH T ' f l i M Ü M i í \ Eddig úgy küldtük el a leveleket.php parancsfájlhoz befutó űrlapadatok érvényessége alapján.h tm l űrlaptól kapott adatokat. ez nem történhet meg: az űrlapon üresen ha­ gyott mezőket ugyanúgy észrevesszük. Amire szükség van. ha mind­ két íírlapmezotoen szerepelnek adatok. mielőtt egyetlen levelet is elküldhetne. A levélküldésnek valójában teljesen az adatellenőrzéstől kell függnie. mint az ügyféloldali nem csak a kiszolgálón. Ha többet szeretnél tudni a témáról. ami ezt mondja: . Ezzel nem azt mondjuk. Ha az ellenőrzést azonban a kiszolgálón végezzük cl. Olyan kódra van szükség.h tm l \ hülye kérdések M iért jobb K . hogy az ügyfélen nem ér­ demes ellenőrizni . hogy a PHP egy döntést hozzon a sen d em ail . Ennek a két feltételnek teljesülnie kell ahhoz. akkor minden rendben van.e valami ezekben az ffrlapmezokben. IF a Tárgy tartalmaz szöveget AND a Törzs tartalmaz szöveget THEN küldd el a leveleket Ha mindkét feltétel teljesül. amely részle­ tesen tárgyalja az ügyféloldali ellenőrzést. Az olyan nyelvű kódok. hogy csak akkor küldjünk levelet. azzal csak a probléma egyik felét oldjuk meg.nagyon is érdemes. hogy az adatokat elküldenénk a PHPparancsfájlnak. ami az előtt történik. hogy az adatokat érvényesnek lehessen tekinteni. hogy Elmer közvetlenül a s e n d e m a i l . ezért minden olyan vizs­ gálat ügyféloldali ellenőrzés. Nincsenek se n d e m a il. mint a PHPparancsfájltól közvetlenül kapott üres adatmezőket. és így továbbra is képes üres levelet küldeni. az ügyfélen is lehet ellenőrizni az adatokat. php-t tölti be. most itt vagy ► 165 . Az ilyen ellenőrzés hogy működik? V Az ! ügyfél a webböngésző.Valószerű.

a rendelés nem teljesíthető. Elmer tehát minden rendelésen egyfajta valós ellenőrzést végez. Ezt a forgatókönyvet az i f utasítás segítségével fordíthatjuk PHP-kóddá . hogy ilyen döntéseket hozzunk: A legegyszerűbb i f utasítás három részből áll: O © Az i f kulcsszó Ez jelzi az utasítás kezdetét. Ide kell írnod azt az utasítást. vagyis meg kell terhel­ nie a vásárló hitelkártyáját. amelynek az érvény ességét vagy igazságát meg szeretnéd állapítani. ha a feltétel igaznak ( t r u e ) bizonyul. Elmernek meg kell kapnia az áru ellenértékét. © Az utasítás kezdetét f elzi ® Ez 3 M l í f i i . 166 4. A művelet Az i f utasítás művelete közvetlenül a tesztfeltételt követi. Ide kell tenned azt a PHP-kódot. folytathatod a rendelés teljesítését. A tesztfeltétel A tesztfeltétel vagy feltételes kifejezés rögtön az 1 f kulcsszó után áll. hogy valami igaz-e vagy sem.n (hitelkártyszám) változó tartalma érvényes-e.car<L nu. fejezet . és kapcsos zárójelek között áll. z 7 Ez zárja le a műveletet és az if utasítást. zárójelben. { A művelet kezdetét a kapcsos zárójel jelzi- © i f O } ( i s V a l i d ($e r e d it_ c a r d _ n u m ) ) f illO r d e r (). A Ez a kitalált függvény true vagy false értéket ad vissza a hitelkártya érvényességétol függően.az if utasítás Döntéshozatal a kódban az IF segítségével A PHP i f utasításának segítségével a kódban döntéseket hozhatsz attól függően. Vegyük ismét Elmer rendeléseinek esetét: mielőtt teljesítene egy rendelést.ez az utasí­ tás éppen arra szolgál. aminek a lényege a következő: Ha a vásárló hitelkártyája rendben van. Ha a vásárló rossz kártyaszámot adott meg Elmernek. amelyet végre szeretnél hajtatni. Egy függvényt hív meg. amely ellen°rZ*' 3 $cre<^ .

hogy csak néhány példát említsünk. vagy f a l s e (hamis) értéket ad. A tesztfeltétel lehet egy változó. akik Nevada államban laknak. Há 3 ^ f e l t é t e l ig«.változókat számokkal vagy változókat vál­ tozókkal is összevethetünk. de akár egy összehasonlítás is.9 . ha a tesztfeltétel igaz. amely a szállítási cím alapján végzi el az összehasonlítást: ____ Éz akkor igaz. A számértékeket ne ($num ite m s == 10) tedd idézőjelbe.A művelet 10% -os árenEz a tesztfeltétel egyenlőségi összehasonlítást végez . 'N e v a d a ') { vásárló Nevadában él { $ s h i p p i n g _ s t a t e == $ to ta i = $ to ta i THEN engedj az árból * 0 . ^ A tesztfeltétel ¡oaz vagy hamis lehet. 3 möV®le t végrehajtódik.Valószerű. Elmer hitelkártya-ellenőrző kódja tesztfeltételként egy függvény­ hívásra támaszkodik. . hogy az egyik változó tar­ talma megegyezik-e egy másik változó tartalmával. egy olyan i f utasítást írhat. Tesztfeltételként nagyon gyakran használnak összehasonlítást. Ha Elmer például árengedményt szeretne adni azoknak a vásárlóknak. gedményt alkalmaz. Egyenlőségi összehasonlítás azonban nem csak változók és karakterláncok között végezhető . egy függvényhívás. sőt számításokat is végrehajthatunk. ami azt jelenti. ami jellemző­ en egy változó és egy érték összevetését foglalja magában. Ellenőrizheted. ha a $shipping_state változó S ' IF 3 a ’Nevada1 szöveget tartalmazza. ----------. hogy az említett függvény által vissza­ adott érték t r u e vagy f a l s e lehet. IF a hitelkártya érvényes THEN teljesítsd a rendelést " “ if (is V a i i d ( $ c r e d i t c a rd num )) M fillO r d e r (). gyakorlati alkalmazások Az igazságot keresve Az i f utasítás szíve a tesztfeltétel. ($ s h ip p in g _ a d d re s s == $ b illin g _ a d d r e s s ) A tesztfeltételekben matematikai mű­ veleteket is végezhetsz. amelynek a kiértékelése mindig vagy t r u e (igaz).ezt jelzi a két egyenlőségjel (==). most itt vagy ► 167 .

mint" (>) művelethez. de akkor is true eredményt ad. Ha a bal oldali érték kisebb a jobb oldali­ nál. Az if utasításban le­ vő tesztfeltétellel azt is ellenőrizheted. a feltétel eredmé­ nye true lesz. és a művelet kódja végrehajtódik. hogy a bal oldalon álló érték nagyobb-e a jobb oldalon állónál. A „nagyobb. a feltétel eredm énye true lesz. ^ if if Mindkét fe| téte| jgaz. hogy két dolog nem egyenlő-e. kétféle­ képpen lehet ellenőrizni: a <> és a != segít­ ségével. { echo 'T ru e '. mint az == egyenlőségvizsgálat. A „kisebb vagy egyenlő” művelet (<=) a „ki­ sebb. } ( $ s m a l l number > $ b i g number) if ( $ s m a l l _num ber < $ b i g _ n u m b e r ) c Ez a feltétel igaz. ■ 168 4. m in t a ("dog" > "c a t")? Igen. ) } ($sm all_num ber < > $big_number) ( $ s m a l l number != $ b i g number) ^ if Ez a feltétel hamis.értékek összehasonlítása a php-ben Az IF nem csak az egyenlőséget tudja vizsgálni Az if utasítás többre is képes az egyenlőség vizsgálatánál. { echo 'T ru e '. { echo { echo 'T ru e '. 'T ru e '. ha ábécésorrendben kell információkat megje­ lenítened. A „nagyobb vagy egyenlő” művelet (>=) ha­ sonlóan működik a „nagyobb. ha az énékek egyenlőek. mint a 2:. if ($sm all_num ber >= $big_number) { echo 'T ru e '. m int” jel (>) a bal oldalon álló ér­ téket összeveti a jobb oldalon állóval. Az if utasítást nyugodtan írhatod teljes egészében egy sorba. hogy egy7 érték nagyobb-e egy másiknál. az i f tesztfeltételében karakterláncokat is összehasonlítható: A karakterláncok összehasonlítása az ábécé alapján történik. Ha igen. akkor pedig false. ha a míívelet viszonylag egyszerű. ( $ s m a l l number < = $ b i g _ n u m b e r ) É s mi a he lyze t a kara kte rlá n c o k k a l? M űködik például egy olyan kód. íme néhány további teszt. } £ if Ez a feltétel igaz. $big_number = 9 8 0 6 5 . A „kisebb. } Ez a feltétel hamis. de ak­ kor is true eredményt ad. ha nem . amelyekkel vezérelheted egy i f utasítás döntését: $ s m a l l number = 2 . mint” és „kisebb. mint” (>) művelethez hasonlít. A „nagyobb. Ha igen. tehát a z a ki­ sebbnek számít. mint" jel (>) azt vizsgálja. { echo 'T ru e '. Ezek éppen ellenkező eredményt adnak. mint’ ffiiűrtfeletek például akkor segíthetnek. fejezet . ha a két érték egyenlő. Azt. í z a két kiinduló Változó. a feltétel eredménye true lesz.

= 4. és eldöntsd. gyakorlati alkalmazások a tesztfeltétel egy if utasításban! A feladatod. = 'T ro u b le '. = 0. $fav o rite_so n g $another_nu m b er $your_nam e = $my_name.6. 3. $my_name = $a_num ber $a_d ecim al = ' B u ster’ . hogy eljátszd egy if utasítás tesztfeltételét. hogy az alábbi változók esetében igaz vagy-e vagy hamis.Valószerű. ($a number 3) ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ig a z v a g y h a m is ($another number ($favorite_song == "Trouble") ($my name 1$your n a m e 1) ($my_name == "$your_name") ($your name == $my name) ($f avorite__song ($a number > 9) ($favorite food = 'hamburger’) ig a z v a g y h a m is most itt vagy ► 169 .

és eldöntsd. hogy van­ 170 4. ■ K i A tesztfeltétel nem ugyanaz. de különféle összehasonlításokkal érdekesebb tesztfeltéte­ leket is összeállíthatunk a w h i l e ciklusok számára. $my_name = $a_num ber $a_d ecim al ’B u ster’ . hogy a $your_name változóbif tárolt e'rtékkel. arm "«m 0.num*>er értéke 3.6. Mivel ^ Nincsenek hülye kérdések összehasonlitast ( Az eredmény azért lesz true. = 0. = 4. megoldás Légy a tesztfeltétel egy if utasításban! A feladatod. = ’T ro u b le’ . hogy eljátszd egy if utasítás tesztfeltételét. true-nak tekint. = 3. m * * falsé.. $fav o rite_so n g $another_num ber $your n a m e = $my n a m e .légy a tesztfeltétel. . fejezetben? V ! De. hogy az alábbi változók esetében igaz vagy-e vagy hamis. pontosan ugyanaz. T) ( j g a z y a g y ham is Oké ez b e u g r ó kérdés volt. Hogy álljon.. 3mi nem nsWobb. $3. minf 9. ($a number 3) igaz v a g y ham is * 0 ts ($another number ($favorite_song = ($my_name = MTrouble”) ( igaz V a g y ham is ig az y a g y ham is igaz v a g y ham is igazyv a g y ham is ( j g a z v a g y h am is igaz v a g y h am is igaz vág ” « « kankferláne >* I Az aposztrófok miatt a feltétel v & J jában azt vizsgálja. m a pHP mindent. hogy a Buster karakterlánc a „$your_name karsiteriánccal egyezik-e meg. nem azt. fejezetben ugyan arra használtuk. fejezet nak-e még hátra sorok egy lekérdezésből. Erre a könyv későbbi részében még visszatérünk. ’$your_name1) ($my_name == 1$your_name ") 1 ($your_name = $my_name) ’Trouble') ($favorite song == ($a_number > 9) ($favorite food Q= Ha ezt összehasonlításnak szántuk. akkor itt = = kellene. mint amivel w h i l e ciklusokat vezéreltünk a 3. A 3. hogy megmondja nekünk.

Amire szükség van. mely esetben figyelmez­ tetést jeleníthetsz meg a felhasználónak: W $subject ' Subm it sendem ail. hogy a két űrlapmező nem üres-e. és vizsgálha­ tod azt.és üzenetm ezője. amelyek ellenőrzik. ha két i f utasítást használsz. hogy a Pl IP egy döntést hozzon a s e n d e m a i l . mielőtt egyetlen levelet is eiküldhetne.. h t m l űrlaptól kapott adatokat. hogy van-e adat a két űrlapmezőben. az az. és megvizsgál­ nod. ami ezt mondja: ha az adatok érvényesek.r Sen d Ernáig $subject = $ _ P 0 S T ['s u b j e c t ’]. hogy nem üres-e Elmer Send Email űrlapjának tárgy.htm l üres AND $body üres THEN írj ki hibaüzenetet A fenti két példa logikája egyaránt tartalmaz egy nehézséget: két összehasonlítást kellene végezned egyetlen i f utasításon belül. és írj ki figyelmeztető üzenetet. Olyan kódra van szükség. ha azok! m o st itt vagy > 171 . Ehhez azonban először meg kell szerezned az űrlapadatokat. A levélküldésnek valójában teljesen az adatellenőrzéstől kell függnie. ezd ki a ceruzád! írj két i f utasítást. Ennek egyik lehetséges megoldása.. és változókba kell írnod azokat: M ake M e Elvis . A programlogika valahogy így fest: F $subject For Elm ers use ONLY rj send an email to mailing list members if email tartalmaz szöveget AND $body tartalmaz szöveget THEN küldd el a leveleket De az ellenkező irányból is megközelítheted a kérdést.Valószerű.p h p parancsfájlhoz befutó űrlapadatok rrvényessége alapján. gyakorlati alkalmazások A levélküldés ellenőrzése mögötti logika Elmernek ellenőriznie kell a s e n d e m a i l . $text = $ P O S T [’elvi s m a i l ’]. elküldheted a leveleket”. Összesen ezeket az űrlapadatokat kell ellenőrizned.

amit a PHP az üres karakterláncokkal ( ’ ' vagy " " ) . és írj ki figyel­ meztető üzenetet.......használata annak ellenőrzésére.... működőképes módszer...... fejezet . * Íf (e m p ty ($ v 3 )) ( ech o ’ $v3 i s e m p ty < b r / > .......... míg az empty () akkor...... míg az em ptyO függvénnyel még egy lépéssel továbbmehetsz........ hogy a* utasítás kiírja az Üzene PHP-függvények változók ellenőrzésére Az = . „ondód ..... { echo ' $v3 i s s e t< b r / > '.......... A $v2 változó be van állítva. } { echo ' $ v l i s em ptycbr / > '..... a 0............l »HaAzzal. * .. ho9y « .................. de a PHP beépí­ tett függvényei még jobb megoldást kínálnak.............. } } hanem szöveget tartal­ maz. f a l s e vagy NULL.k if * J itW a: elsőbe á9K « o i. ami üres i-f ( /s u b je d t —— karakteriáncot jelent... ) { echo ' $v2 i s em ptycbr / > '.... } .. / ^ behúzás segít.. A $v3 változó nem létezik..... if if if if if ( i s s e t ($ v l)) (e m p ty ($ v l)) (ls s e t($ v 2 )) (em p ty ($v 2)) (is s e t($ v 3 )) { echo '$ v l i s s e t< b r />’ . Vódban..... hogy a másod..... Nézzük meg..... hogy hol végződik a belső' és hol a külső' if utasítás.. ............. j ...... ................... illetve a NULL értékkel azonosít. ha a változó értéke 0............. “ „ Mind a $\ri.. 172 4.. .... és megállapíthatod hogy a változó üres értéket tartalmaz-e.... mert a benne levő ka­ rakterlánc is üres...... * feHóte\nek »gaznak keU lennie ahhoz.. J ... hogy vannak-e üres karakterláncok.......... üres karakterlánc. ha azok! Ez két aposztróf.... vagyis ez az if fe l­ tétel hamis... amelyek ellenőrzik... bár csak a $vl-nek van értéke... hogy egy változó lé t e z ik -e ......... A $v2 változó egy iires karakterlánc...... Az i s s e t () tehát csak akkor ad vissza tru e -t............... A $v2 változó üres........... ha a változó kapott értéket......... a f a l s e .. } é r té k e { echo *$v2 i s s e t c b r />’ ............. hogy jobban látszódjon.... 1 $*3 változó iires„eí ieklnten<ti... csak egy üres d e a z Csak a szürke háttéri echo parancs hajtódik végre! A $v1 változó nem iires.... karakterlánc.. Az i s s e t () függvénnyel azt vizsgálhatod..... hogyan működnek az említett függvények: A $v1 változó egy értékét tartalmaz. a * echo 'Elfelejtetted beírni a levél tárgyát és szövegét< br / > ' ......az isset() és az emptyO függvény Hegyezd ki a ceruzád! —----------------------------------------------------------------M ftü fiM a c 9 két utasítást.. vagyis hogy kapott-e értéket.... hogy nem üres-e Elmer Send Email űrlapjának tárgy.. mind a tozo létezőnek tekintendő. még h3 nem « létezik.......................és üzenetm ezője...............

függetlenül attól. Más szavakkal. Az empty () függvény ellenőrzi. Az i s s e t () nek a $_PO ST-ot átadva ellenőrizheted például. tehát az e m p ty ( ) -re van szükség. hogy ténylege­ sen van-e bennük szöveg. Ahogy a fejezet későbbi részében majd látni fogod. ennek igen-igen nagy hasznát veheted. hogy i változó létezik-e és kapott-e értéket. hogy egy űrlapot a POST módszerrel küldtek-e el. hogy egy adat létezik-e. amely ellenőrzi. hogy a változók valójában üresek-e . írd át a két i f utasítást. mégpedig úgy.Valószerűgyakorlati alkalmazások Világos. Nincsenek Az isset() függvény azt vizsgálja. A $ s u b je c t és a $ t e x t változó a $_POST [ ’ s u b j e c t ' ] és a $_POST[ * e l v i s m a i l ' ] szuperglobálisokból kap értéket. Hegyezd ki a ceruzád! hülye kérdések K i Akkor mi értelme van az i s s e t ( ) használatának? V ! Az i s s e t () függvény rendkívül hasznos. hogy az űrlapmezők nem üresek-e. Az empty() függvény azt vizsgálja.és az űrlap ellenőrzéséhez erre van szükség.és az üzenetmező. Ha ezeket a változókat az i s s e t () -tel vizsgálod. mindig tr u e -t kapsz. Itt valójában csak azt ellenőrizzük. hogy Elmer Send Email űrlapján nem üres-e a tárgy. hogy ezúttal az em p ty () függvényt használod az == helyett a tesztfeltételekben! most itt vagy ► 173 . Ez csak félig igaz. ha azt kell tudnod. az i s s e t () nem tesz különbséget egy üres űrlapmező és egy kitöltött között. hogy a változó tárol-e valamilyen tartalmat. Tehát az \eeet() és e m p ty () függvényekkel ellenőrizhetem a $ s u b je c t ée $ te x t űrlapadatokat.

hogy a feltételben sze­ replő állításnak az ellenkezőjét vizsgáljuk? Nem árt például................. A ! empty () utasítás tehát meghívja az empty () függvényt. és megfordít­ ja annak eredményét.... i A kod többi resze • ....... Vagyis: vannak benne adatok? 174 4.... a megoldást a taga­ dás műveleti jele 0 ) kínálja. Ml a h e lyze t akkor..... fejezet ... ha tudod.b ó l pedig tru e-t csinálhatsz. hogy Elmer űrlapmezői nem üresek-e.... } ugyanaz. mégpedig úgy.. .............. De mi a helyzet akkor.a ! műveleti jel v Hegyezd ki a ceruzád! Meqoldás a két ^ Utasítást... ha csak abban az esetben szeretnek v é g re h a jta tn i egy m ű ve le te t.. ha egy urlapm ezo nem üres? Van n o te m p ty Q függvény is? Nincs.. amellyel a tru e -b ó l f a ls e .. Már tudod..és az üzenetmező. a f a ls e ................ hogy notem pty () függvény nem létezik...... \ vizsgalatot ( )• ec|J0 'É(fe|ej f ef f e(j beírni a levél tárgyát és szövegétcbr / > ' . ha a logika azt követeli meg. valahogy így: A NŐT vagy ! művelet a true-ból false-t...... amely ellenőrzi.......... hogy Elmer Send Email űrlapján nem üres-e a tárgy......... hogy egy i f utasítást vezérlő tesztfeltétel mindig t r u e vagy f a l s e érté­ ket ad.. ' A gond csak az.t ........ mielőtt elküldenél egy csom ó levelet az űrlapadatokkal..... . .. de bármilyen tesztfeltétel logikáját könnyen megfordíthatod ........ Nos. . a false-ból pedig true-t csinál............. hogy ezúttal az em p ty () függvényt használod az == helyett a tesztfeltételekben! ií ícmpiyífsubjcdi)) { M in d k é t te s z tfe lté te lb e n _— «í { empty() függvény megh! vása Váltja fel az egyenlőség....... mint korabban....a tagadás műveletével.... \ if ( ! em pty($ s u b j e c t )) { I fl Ez a feltétel ezt kérdezi: „A Subject mező nem üres?"...

\n$text". $msg = "Dear $first_name $last_name. $to .com'. $text = $ P O S T ['e l v i s m a i l '].htm l if if $dbc = mysqli_connect (’data . $ s ubject = $ _ P 0 S T ['s u b j e c t ']. O 0 and » n " n “ ___ _ »« « « *• » ■ _____ Subject of email: Body of email: C Subm it <?php $ f r o m = 'elmer0makemeelvis. és alkalmazd az em p ty () függvényt! ■ H U WÚ&ÉSffiÉk Make Me Send Ema [ i M inden mezőmben lennie kell érteknek. $last_name = $ r o w ['last_name'].'). 'elmer'. $query = "SELECT * FROM email_list". '<br />'. $subject. echo 'Email sent to ' . $result = mysqli_query($dbc. sem a $ t e x t változó nem üres! Használj i f utasításo­ kat. hogy a parancsfájl csak akkor küldje el a leveleket. 'From:' .makemeelvis. $first_name = $row['first_name'].p h p kódját úgy. ?> ■ m ost itt vagy ►175 . $from) . 'theking'. sendem ail. 'elvis_store' ) while ($row = mysqli_fetch_array($result)) { $to = $row['email']. ha sem a $ s u b j e c t . mail($to.Valószerű. or d i e { ’Error connecting to MySQL server. $query) or die('Error querying database. } mysqli close($dbc).').com'. gyakorlati alkalmazások 6yakorlat Egészítsd ki Elmer s e n d e m a il . $msg.

$first_n am e = $row [ ’ f ir s t_ n a m e ’ ] . és az itt található kódból semmi sem fog lefutni. nem üres-e. Az első kapcsos zárójel a belső. $query) or d i e ( ’ E r r o r querying d a t a b a s e . és alkalmazd az empty () függvényt! M ake M e Elvis . w h i l e ( $ ro w = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $to = $row [’ em ail’ ] . ’ <br / > ’ . echo ’ Email s e n t t o ’ . Subject ofemaü: ___ _______________ Body of email A felkiáltójel megfordít­ ja a? emptyI) függvény logikáját.. m a i l ( $ t o .Gyakorlat ....ha n e m || . sítás false-t ad vissza.com ’ .... } m ysq lin close($d b c).. akkor ¡0 .. | az.. legalabb az egyik if uta- . Mindkét if utasíta's müveletrészét be kell zárni. $ f r o m ) ... ami azt jelenti. hogy a kód működjön.. hogy a ísubject nem üres-e..pont ahogy akartuk! ’ th e k in g ’ . J J | ..megoldás Gyakorlat Megoldás Egészítsd ki Elmer sen d e m a il . hogy nem mennek ki üres levelek __ _________________________________________ _____ .. Az egyik if utasítást a másik belsejébe kel! tenni ahhoz.. \ n $ t e x t " . ’ e lm e r ’ ... ' ) .’ ) .. $ s u b j e c t . $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e ..m a k e m e e lv is ..Send Email Minden mezőmben lennie kell érteknek.. $ t o .... J 3 bármelyik urlapadat-változó üres.... co m ' . $ r e s u l t = m y s q li_ q u e ry ($ d b c .. a2f nézzük meg. $last_nam e = $ ro w [’ la s t_ n a m e ’ ] . Ezt . 0 ^ sendemail. $msg. 176 4. beágyazásnak hívják.. a második kapcsos zárójel pe­ dig a külső if utasítás végét jelzi.. hogy a parancsfájl csak akkor küldje el a leveleket. o r d i e ( ' E r r o r c o n n e c t i n g t o M yS Q L s e r v e r ... Subm it <?php $from = ’ elm er@ m akem eelvis.php kódját úgy.. Az eíso feltétel azt vizsgálja.. ’ e lv is _ s to r e $ d b c = m y s q li_ c o n n e c t ( ' d a ta . fejezet . sem a $ t e x t változó nem üres! Használj i f utasításokat. $ q u e r y = "SELECT * FROM e m a i l _ l i s t " ..html $ s u b j e c t = $_PO ST [ ! s u b j e c t ’ ] / t e x t = $ _ P O S T [ 1e l v i s m a i l ’ ] . ’ F r o m : ’ . ha sem a $ s u b je c t ..

így az urla| adatok elbuknak az ellenőrzésen. hogy az üres űrlapmezőket ellenőrző kód működik-e! Módosítsd a sen d em a il . Valamilyen figyelmeztető üzenet azonban hasznosabb len­ ne. és nyisd meg a sen d em a il . Hagyd legalább az egyik űrlap­ mezőt üresen. Private: For Elmer's use O N LY Wrtte and send an email to mailing list members Subject of email: Blue Suede Clearance! Body of email: Submit 1 M ake Me Elvis . mint az üres oldal. gyakorlati alkalmazások Próbáld ki. és kattints a Submit gombra. hogy i f utasításokkal ellenőrizze az űrlapmezők adatait.S en d Email Ahogy szerettük volna.h tm l oldalt egy w ebböngészőben. Az üzenet törzse üres.php kódját úgy. most itt vagy ► 177 . mielőtt leveleket küldene.Valószerű. nem ér­ kezik megerősítés elküldött le-__ vé lríl. Töltsd fel a parancsfájl új változatát a webkiszolgálóra.

akkor kuszán egymásba ágyazott if utasításokat kaphatunk. úgy értem.Lássuk csak. hogy milyen módszerrel húzzuk be a beágyazott if-e k e t.. hogy ner: h e­ lyes programozási megoldás ilyen mélyen egymásba ágyazni i f utasításokat. hogy’ egyik sem üres. hogy m in d e t m egvizsgáljuk? A liens Abducted M e .. már az is 20 sz ó k ö r minden műveleti kódsor előtt.e t . hogy a sok beágyazás miatt az egész áttekinthetetlenné válik. Frank: Ez igaz.irodai eszmecsere Mi van.. Már a kapcsos zárójelpárok egyeztetése is gondot jelenthet. ha az űrlapon egy csom ó mezei van? E5e kell ágyaznunk egy vagon if u ta s ítá s t. ha behúzzuk minden i f utasítás kódsorát? Jill: Technikailag igen. hogyan egyesíthetünk több vizsgálatot egyetlen tesztfeltételben. itt nem az a kérdés. minden mezőhöz be kell ágyaznunk egy i f utasítást. ( ! e m p t y ( $how_many) ) Joe: Azt hiszem. Ha biztosak akarunk lenni abban. ami egyszerre ellenőrzi az összes űrlapmezőt! Állat! ¡1 : Persze. amivel mind a tíz űrlapadatot egyetlen tellel ellenőrizhetnénk. Joe: Akkor írjunk egy nagy tesztfeltételt.e t ágyazunk be. hogy vizsgáljon. Ráadásul megszenvednénk a műveleti kód behúzásával. 10 tab 20 szóköz helyett nem olyan rossz. akkor csak feleannyi. rtiező Frank: Az nem elég. tfggy-fS tlz beágyazott i f-ünk tíz szintnyi behúzással.tMi? H «jm*«nmd cF R j» j o *» ? Owen űrlapja a könyv korábbi részéből jó példa arra. 1 I 178 4. Frank: A. ezért tíz önálló i f utasításra kell bontanunk. hanem az. hogy ha sok íírlapmezöhk van. de én amiatt aggódom. Jill: Srácok.arról.. csak éppen nem tudjuk. igaz? tessztfelté- Jill: Aha. a kód attól függetlenül működni fog. Fogalmazzuk át az egészet: valójában egyetlen logikai tesztfeltételről van szó . igazad van. van tíz űrlapmezőnk.ou W *0* 7 v How raaov«lid > U O we? »btíucoon: Mow lonp w Dttcribe than: WttM didthti doUj. Hoppácska! je | nt e Joe: De ha tabulátorral csináljuk a behúzást. hogy „nem üres-e egyik űrlapmező sem"? A gond csak az. hogy hány i f . if ( ! em pty($first_n am e)) if (! empty ( $ l a s t _ n a m e ) ) if { { ( ( ! em pty($w hen_it_happened)) if { ! em pty($how _long)) if { { Ez a csomó beágyazás alig követhetővé teszi a kapcsos zárójeleket. fejezet . értem már! Vagyis egy olyan megoldást kellene találnunk. hogy a tesztfeltétel tíz különböző adatot kell. Ha csak kél szóközzel tolunk el minden if .R e p o rt an A bduction Shiue youriw y of First name: W talfc jo u r « M i «adm »? Wbcn Jid rt happen? r r i .

hogy üres-e. de akkor is t rue-t ad vissza. Még érdekesebb a helyzet. hogyan működik mindez! Az első példában a két kifejezést a logikai ÉS művelettel („operátorral”) kapcsoljuk össze. illetve VAGY (OR. A $subject-nek üresnek. a benne levő mindkét kifejezés­ nek igaznak kell lennie ahhoz. hanem két függőleges cső' karakter. ami a I I jelöl. hogy a tesztfeltétel igaz legyen. ÉS°m'ttVelet. h°9y a ta9adas m“ V8.. ha vagy — ^ a $subject. Az ÉS művelet két igaz/hamis ( t r u e / f a l s e ) értéket vesz. míg a másiknál azt. hogy van-e benne adat: if ( empty($subject) && (!empty($text))) { Ez nem a lf-es szám. és csak akkor ad vissza -rue-t. hogy a műveleti kód végrehajtódjon. de a $text igen. &&). ha az egyik űrlapmező esetében azt vizsgáljuk. az ÉS-hez hasonlóan működik. amit a kódban az & jelöl: & . gyakran összekuszálódó i f utasításokat igényelnének. . ha összekapcsolod azokat egy logikai művelettel. most itt vagy ► 179 . ha a tagadás műveletét ( í) a másik empty () függvény elé helyezed: if ((!empty($subject)) && empty($text)) { Ez csak akkor igaz. ha sem a $subject. ha legalább az űrlapmezők egyike nem üres. Ez azt jelenti. VA6Y a $text nem üres. a Bodv m ezőben azonban ada­ tokat kell találjunk. A vizsgálatot meg is fordíthatod. egyik űrlapmezőnek sem szabad üresnek lennie. if ({!empty($subject)) && (!empty($text))) ( Ez 3 tesztfeltétel csak akkor igaz. sem a $text nem üres. ha mindkét érték true . hogy ele­ gánsabb if utasí­ tásokat alkoss.ete csak az empty() függvényre vonatkozik. hogy olyan. míg a logikai VAGY műveleté a if ({!empty($subject)) |f (!empty($text))) { Ez a tesztfeltétel akkor igaz. Mivel ez a tesztfeltétel az ÉS műveletet használja. Eb­ ben az esetben tehát ahhoz. I |) műveletek lehetővé teszik. amit a billentyűzeten a fo rd í­ to tt perjel ( \ ) mellett találsz. és az i f utasítás műve­ leti kódja lefusson. J r A belső záröjelezés világossá teszi. sokkal hatékonyabb tesztfeltételeket határozz meg.Valószerűf gyakorlati alkalmazások Több feltétel vizsgálata az AND és az OR segítségével Egy i f utasítás tesztfeltételét több vizsgálatból is felépítheted. A PHP logikai műveletei lehetővé teszik. hogy ez a tesztfeltétel igaz legyen. Nézzük meg két ismerős feltételen . a $text-nek viszont nem üresnek kell lennie ahhoz. hogy a Subject űrlapmezőnek üresnek kell lennie.! empty ($ s u b je c t ) és ! empty ( $ t e x t ) . A logikai VAGY művelet. ha csak az egyik érték true. ím e egy példa: A logikai ÉS kódja az &&. amelyek máskülönben további.minden más esetben false lesz az eredmény. A logikai ÉS (AND. ha a $subject nem üres. Ennek az i f utasításnak a műveleti kódja tehát akkor hajtódik végre.

p h p parancsfájl kiemelt részeit úgy. $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e . $query) or d i e ( ' E r r o r querying d a t a b a s e . ' F r o m : ' . A két if utasítást ezek a kapcsos zárójelek zárják le. c o m '. $ r e s u l t = m y s q li_ q u e ry ($ d b c . Cseréld le okét egyet­ len. $ f r o m ) . ’ e l m e r ' . $ q u e r y = "SELECT * FROM e m a i l _ l i s t " . ' ) . logikai műveletekkel összekapcsolt i f tesztfeltételt használjon! Gyakorlat <?php $from = ' elmerQmakemeelvis .a beágyazott if utasítások kiküszöbölése írd át a s e n d e m a i l . hogy a kód beágyazott i f utasítások helyett egyetlen. if { ’ em pty($s u b j e c t )) { i f ( ! em p ty($ t e x t )) { Itt vannak a beágyazott if utasí­ tásaink. logikai műveletekkel össze­ kapcsolt if utasításra! $dbc = m y s q l i_ c o n n e c t ( ’ d a t a . } m ysq li_close($d b c). \ n $ t e x t " . ' e l v i s _ s t o r e ') w h i l e ( $ ro w = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $ t o = $ r o w [ ' e m a i l 1] . ' th e k in g '. ' <br / > ' . $ s u b j e c t . com’ . $msg. ' ) . $last_nam e = $row [ ' la s t_ n a m e ' ] . $ t e x t = $ P O S T [ 1e l v i s m a i l 1 ] . m a i l ( $ t o .m a k e m e e l v i s . fejezet . $first_ n a m e = $row[ ' f ir s t_ n a m e ' ] . ?> 180 4. o r d i e ( ' E r r o r c o n n e c t i n g t o MySQL s e r v e r . $ t o . echo 'E m a il s e n t t o ' . $ s u b j e c t = $_POST[ ' s u b j e c t ' ] .

hogy egyetlen. illetve a l l . ha valamelyik űrlapmező üres? Nincsenek hülye kérdések Számít. Töltsd fel a parancsfájl új változatát a webkiszolgálóra. && vagy I I művelettel összekapcsolt feltételt egy i f utasításban? Igen. m ost itt vagy ► 131 . hogy milyen változta­ tásokra van szükség.Valószerűr gyakorlati alkalmazások Tesztút Gondoskodj róla. nem fogsz különbséget tapasztalni. hogy amikor csak le­ hetséges. hogy . mint az &&. Ez azt jelenti. ezért a második tényező kiértékelésére már nem is kerül sor. és nyisd meg a sen d em ail . a logikai műveletek előnyeit kihasz­ náló i f utasítást alkalmazzon az űrlapadatok ellenőrzésére a levelek elküldése előtt! A követ­ kező oldalon belekukkanthatsz a megoldásba. mint a beágyazott if utasítások! Módosítsd a se n d e m a il . a PHP rövidre zárt kiértékelést hajt végre ezen a két műveleten. amelyekben a n d és o r szerepel && és | | helyett. a PHP figyel­ m en kívül hagyja a második tényezőt.az egész kifejezés hamis lesz.h tm l oldalt egy webböngészőben.php kódját úgy.a második tényező­ től függetlenül . Hagyd legalább az egyik űrlapmezőt üresen. de ha zárójelezéssel világossá teszed a tesztfeltételeidet. Most is megakadályozza a parancsfájl a levelek elküldését. és kattints a Submit gomb­ ra. Ezek hogyan működnek? V: Lényegében ugyanúgy. K l. hogy milyen sorrendben helyezek el két. Más műveletekhez viszonyítva kissé kü­ lönbözik a kiértékelésük módja. hogy a Send Email parancsfájl logikai műveletei ugyanazt a feladatot végezzék el. Ugyanez a szabály érvényes akkor is. Ha egy ÉS kifejezésben például az első tényező ha­ mis. ha egy VAGY kifejezés első tényező­ je igaz.! Olyan PHP-kódokkal is találkozni. Ennek az az oka. hogy ha a kifejezés eredm ényének meghatá­ rozásához elég az első tényező. ha nem tudod biztosan. akkor biztos.

$first_nam e = $row [' firs t_ n a m e ' ] . logikai műveletekkel összekapcsolt i f tesztfeltételt használjon! Gyakorlat . hogy a kód beágyazott i f utasítások helyett egyetlen. mert az egész egyetlen if utasításban található. $last_nam e = $row [ ' la st_ n a m e ' ] .sendemail. ' elvis_store ’ w h i l e ( $ ro w = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $to = $row [ ' e m a il' ] . m a i l ( $ t o . 'th e k in g '. m a k e m e e l v i s .] . ' e l m e r ' . a logikai E$ műveletet a kódban az && jelöli. hogy az űrlapmezök nem üresek-e. Az if utasításon belüli kódot most már nem kell behúzni egy szint­ tel. $ s u b je c t = $ _ P 0 S T [' s u b j e c t . c o m '. Az egyetlen if utasítás azt jelenti. $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e . $ r e s u l t = m y s q li_ q u e ry ($ d b c . fejezet . o r d i e ( ’ E r r o r c o n n e c t i n g t o MySQL s e r v e r . ' F r o m : ' . Ne feledd. ') . $query) or d i e ( ' E r r o r querying d a t a b a s e . ?> 182 4. } ‘m ysq li_close($d b c). Annaie vizsgálatára. $ t o . \ n $ t e x t " . $msg.php parancsfájl kiemelt részeit úgy. $ t e x t = $ POST[ ' e l v i s m a i l 1] . ' ) . $ q u e r y = "SELECT * FROM e m a i l _ l i s t " . if ( !om pty(j s u b j e c t ) ) ( $dbc = m y s q l i _ c o n n e c t ( ' d a t a . a tagadás műveletét (NOT vagy 1) használjuk.magoldás <?php $from = ' elm er6m ak em eelv is.beágyazott if utasítások nélkül! írd ál a se n d e m a il . $ f r o m ) . c o m '. $ s u b j e c t . hogy csak egy záró kapcsos zárójelre van szükség.php . ' <br / > ’ . echo 'Em ail s e n t t o ' . Az ÉS művelet segítségével a két feltételt egyetlen if utasításban vizsgálhatod.

hogy ne menjen ki levél. hogy újra próbálkozhasson a levél megírásával.Valószerű. com’ .ideális esetben azt is elárulod neki. ezért hiányzó űrlap­ adatok esetén egy üres oldal jön létre. vagy hogy mi volt a gond. gyakorlati alkalmazások Az űrlap felhasználójának visszajelzésre van szüksége Az űrlapadatok ellenőrzését tekintve a sendem ai 1 . $ s u b j e c t = $_POST[ ’ s u b j e c t ’ ] . Ha az űrlap azonban fennakad az ellenőrzésen. de csak egy üres o ld a lt kaptam . A probléma az. J Mi történt? M e g p ró bá lta m használni az új ű rla p o t. és így Elmer sötétben '. csak egy üres oldalt jelenít meg. $ t e x t = $ POST[ ’ e l v i s m a i l ’ ] . most itt vagy > 183 . if ( ( ! em pty($s u b j e c t )) & ( ! e m p t y ( $ t e x t ) )) { & $dbc = m y s q l i _ c o n n e c t ( ’ d a t a . hogy akkor most kimentek-e a levelek. ^ -------. hogy melyik űrlapmező maradt üresen. és gon­ doskodik róla.php kódja nagyszerű munkát végez.a levelek elkül­ désével. és nem kerül sor levélküldésre. ím e a parancsfájl rövidített kódja. akár a Body mezőt üresen hagyják. 1e l v i s _ s t o r e ' ) m ysqli_close ($d b c). a kód nem csinál semmit. semmi sem történik. hogy a kód csak a sikeres ellenőrzésre reagál .nem tudja.Elmer ezt 32 U 65 sincs . Ha az i f utasítás azonban f a l s e eredményt ad (vagyis az űrlapada:okat érvénytelennek találja). 1 Tehát tudatnod kell Elmerrel. ha akár a Subject. a parancsfájl nem árulja el Elmernek. m a k e m e e l v i s .apogatózik . amely felfedi az üres oldal problémáját: <?p h p $from = 'elm e r0 m a k e m e e lv is. hogy probléma merült fel . hogy mi történt. • • • ’ e l m e r ’theking'. az ¡f uf asftás nem hajtja végre a műveleti kódot. m iért.co m ’ .

ha az if utasítás false eredményt ad. Azt kell elérned. Nem erre van szükség. Csak írd az else szót az i f utasítás után.de mindenképpen lefut. A hibaüzenetet kiíró echo kódját tehát egy else záradékba kell tenned. 7 Az itt álló kód csak akkor fut le.c b r />*. ha az if utasítás tesztfeltétele hamisnak bizonyul. az csak annyit jelent.az e/se záradék Sem m i gond. if ( ( ! e m p t y ( $ s u b j e c t )) && ( ! e m p t y ( $ t e x t ) ) ) { Ez csak a leveleket elküldi) kód helyét jelzi. Ez nem fog működni. ha az if tesztfeltétele false eredményt ad. hogy az echo utasítás csak ak­ kor jelenítsen meg egy hibaüzenetet. Ha az if utasítás után teszel egy echo utasítást. ha valamelyik űrlapmezőt üresen hagyták. I Az else záradék kódja akkor hajtódik végre. amely abban az esetben futtat le egy kódrészt. hogy az i f után fog lefutni . hogy csak akkor haj­ tódjon végre. ha a tesztfeltétel false eredményt ad. A logika valahogy így fejezhető ki: IF a tárgy tartalmaz szöveget AND a törzs tartalmaz szöveget THEN küldd el a leveleket X ELSE írj ki hibaüzenetet Az if utasításhoz megadhatsz egy else záradékot. fejezet . mert az i f utasítás után álló kód mindig végrehajtódik. az if eredményétől függet­ lenül. I echo h i f műveleti kódjához ha- L soníóan az else kódját is kap«sós zárójelek fogják közre. 184 4. majd szúrd be utána a műveleti kódot kapcsos záró­ jelek között: | Az else záradék köz­ vetlenül az if utasí­ tás záró kapcsos zá­ rójele után kezdó'dik. e ls e { 'Y ou forgot th e em ail su b ject an d /o r body te x t. Csak egy echo u ta s ítá s t kell te n n i az If u ta s ítá s zá ró kapcsos zárójele u tá n .

melyik! echo 'You f o r g o t th e em ail s u b je c t .ect. ' <br / > ’ . gyakorlati alkalmazások ím e Elmer sendemail .php parancsfájljának új kódja. $ t e x t = $ POST[ ’ e l v i s m a i l ' ] .derítsük ki. ' F r o m : ' . A mágnesek segítségé­ vel pótold a hiányzó kódokat! Gyakorlat <?p h p $from = 'elm er@ m ak em eelv is. m a i l ( $ t o .< b r />’ . else { // Tudjuk. empty($subject) m ysqli_close($d bc) . \ n $ t e x t " .) empty($subject) most itt vagy ► 1B5 . $ s u b j e c t = $_ PO ST [ ’ s u b j e c t ' ] . $first_n am e = $ro w [' fir s t_ n a m e '] . c b r />'. } e ls e { echo ' Y o u f o r g o t t h e e m a i l body t e x t .co m '. VAGY a $text tartalma hiányzik // . hogy vagy a $subject. $msg. $ t o .Valószerű. amely if utasítások és else záradé­ kok használatával visszajelzést ad? de a kód egyes részei hiányoznak. echo 'Em ail s e n t t o ' . } } empty {$sub . $ s u b j e c t . } } else { w h ile ($row = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $to = $row [' em ailf] . $ f r o m ) . $ l a s t _ n a m e = $ r o w [ f la st__nam e ' ] / $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e .

$msg. $first_nam e = $ro w [' first_n am e' ] . p h p parancsfájljának új kódja. akkor csak három eset lehetséges: mindkettőt kitöltötték..... A mágnesek segítségével pótold a hiányzó kódokat! Gyakorlat .. } m ysq li_close($d b c). | em p ty($t. hogy a tárgy. . if I ( J e m p ty ($su b je ct) I & & A külső ¡f utasítás azt vizsgálja.. } else { echo ’ You f o r g o t t h e e m a i l body t e x t . hogy mindkét urlapmezoben van érték. $ t e x t = $ _PO ST [ ’ e l v i s m a i l ’ ] . $ t o .. $last_nam e = $row[ ' la st_ n a m e ' ] / $msg = " D e a r $ f i r s t _ n a m e $ l a s t _ n a m e .Gyakorlat . < b r />'.. mehetnek a l e v e l e k | ■».és az üzenetmezö egyaránt üres-e. Ezen a ponton már minden lehe­ tőséget megvizsgáltunk. amely i f utasítások és e l s e záradékok használatával visszajelzést ad. hogy a $ s u b j e c t ÉS a $ t e x t } else ( / / We know we a r e m i s s i n g $ s u b j e c t OR $ t e x t if 1 ( I empty ( $ s u b j e c t ) f ) { l e t ’ s f i n d o u t w h i c h one I/ A $ s u b j e c t ü r e s echo 'You f o r g o t t h e e m a il su b je ct. Ha nem. $ f r o m ) / ech o 'Em ail s e n t t o ' . c o m ’ . else { [ // Minden rendben.megoldás <?p h p $ f rom = 1 e l m e r @ m a k e m e e l v i s ..ext) i s üres 1) 1 í H Tudjuk. tárgy hiányzik. jI i ip mwmvmmm 1 W1W »M W Wf» * w h i l e ( $ ro w = m y s q l i _ f e t c h _ a r r a y ( $ r e s u l t ) ) { $to = $row[' em ail' ] . fejezet . \ n $ t e x t " . ?> 186 4. vagy az üzenet szövege nincs meg. de a kód egyes részei hiányoz­ nak. m a i l ( $ t o / $ s u b j e c t .< b r />'. ' F r o m : ' ..megoldás ím e Elmer s e n d e m a i 1 . ' <br / > ’ . $ su b je ct = $_P0ST[ ' s u b j e c t ’ ] . és tud­ juk.

hogy hol kell változtatni rajta. Nem szere tn é m . Ha túl sok e l s e záradékod és beágyazott i f utasításod van. V ig y á z a t! R o n d a kó d a lá th a tá r o n ! Minden kódot érdemes egyszerűsíteni.Valószerű. Ha az űrlap módosításra szorul. Ez lehet. ha egy ilyen p a ra n c sfá jlb a kellene nyúlnom . kü­ lönösen ha mélyen beágyazott kódrészek vannak benne. ha van rá mód. mert nem tudod majd elolvasni a kó­ dot. hogy nem szá­ mít. m ie lő tt valaki m egsérül. most h t vagy ► 187 . de ez felettébb való­ színűtlen. az ellenőrzése a szüksé­ gesnél nehezebb lehet. és így nehéz lesz kitalálni. mondjuk mert ki kell egészíteni egy újabb mezővel. ha soha többet nem kell ránézned. Nem á rta n a egyszerűsíteni. a kód nehezen áttekinthetővé válhat. gyakorlati alkalmazások A b e á g y a z o tt if és else u ta s ítá s o k m ia tt nehéz követni a p a ra n c s fá jlt.

c b r />’. de ügyelj rá. < b r / > ’ . hogy megszabadulj a be­ ágyazástól.az if kód megtisztítása a tisztább Légy az IF kód A feladatod az. kell U(JV ^ * rn0 ' ^ beaqyazas. e c h o ’ You f o r g o t t h e e m a i l s u b j e c t . hogy egyetlen else-re sincs szükség! if (em pty( $ s u b j e c t ) & e m p t y ( $ t e x t )) { & e c h o ’ You f o r g o t t h e e m a i l s u b j e c t and b o d y t e x t . } } else { / / Everything i s fin e. hogy eljátszd az IF kódot. írd át a kódot úgy. hogy a kód továbbra is helyesen működjön! Tipp: Lehet. és kipucold a zavaros beágyazott IF-eket és ELSE-eket. c b r / > ' . ne legy&n echo 'You f o r g o t t h e e m a il body t e x t . send t h e em ail } 188 4. . fejezet . } else { i f ( e m p t y ($ s u b j e c t ) | | em pty ( $ t e x t ) ) { a kodot i f (em pty($s u b je c t) { .

hogy mit csinálnak az egyes sorok. amivel az i f rész nem. hogy mind­ két mezőt kitöltőd. Töltsd fel a parancsfájl új változatát a webkiszolgálóra.e k e t és e ls e -e k e t is beágyazha­ tok? most itt vagy > 189 . htm l ol­ dalt egy w ebböngészőben. Megjeleníti a parancsfájl a hiba­ üzeneteket? Nincsenek hülye kérdések Néhány szintnyi beágyazás tényleg ilyen fontos? Attól függ. hogy meggyőződj róla. . érde­ m esebb a megismert logikai műveletekre tá­ maszkodni. e l s e utasításokban az e l s e foglalko­ zik mindazzal. használj csak nyugodtan beágyazást. hogy a kód a lehe­ tő legtisztább és leglogikusabb legyen. hogy az imént megírt. . hogy elkerüljük a b e­ ágyazást. gyakorlati alkalmazások Teszfút Próbáld ki a tisztább i f kódot. akkor is pontosan emlékezni fogsz rá. Ez azt jelenti. Ha azonban azt szeretnéd.. Ha olyan kódot írsz. hogy az elvárt módon működik! Módosítsd a sen d em ail . amikor valamit változtatnod kell rajta. Nos. és nyisd meg a sendem ai 1 . de a beágyazások miatt a kód hamar túl bonyolulttá válhat. és úgy gondolod. pillants rá a következő oldalon található megoldásra. hogy hat hónap múlva. a beágyazást egyszerűsítő i f utasításokat használja! Ha nem tudod. K: Hogyan működik az e ls e ? V: Az i f .. hogy egy i f . megteheted. amit csak te fogsz látni.e ls e utasí­ V . K ! Hm. Oké.Valószerű.php kódját úgy. és mi ép­ pen azon igyekszünk. tásba további if . Kísérletezz a parancsfájllal: nyújtsd be úgy az űrlapot. milyen változtatásokat kell végrehajtanod. és úgy is. hogy mindkettőt üresen hagyod.

........ Ev.................... de ügyelj rá...................és az üres ...... hogy a $text üres-e.......& & ..... illetve hogy a ^subject változóban van-e valami..... hogy } a $subject és a $text * változó is üres-e.> i-f (emftyí/subje£-ü && e m fty íf-te ^ l)) { ítk o You -fortyj-fc -fcke email subject and body ......... } else { if (empty($subject) | empty($text)) { | if (empty($subject) { echo 'You forgot the email subject. Ugyanez érvényes a nem üres ecbo 'yóu ■fo'r^otthe email body ......megoldás A feladatod az...... ] .. hogy a $subject üres-« ^ ^^ változóban van-e valam.....<b'' Itt azt vizsgáljuk....................kapnánk..........is.......... ... ............ még egy visszajelző' üzenetet e m ^ y (/ie ...cryth'm^ .......'*!t-..................... '£ && I I I I 1 Ez a kód azt vizsgálja....... hogy megszabadulj a beágyazástól......... ".... hogy a kód továbbra is helyesen működjön! if (empty($subject) && empty($text)) { echo ’You forgot the email subject and body text.......üzenetmezól.'........... " ..email.... hogy j _______ __________ elkülönítsük a nem üres tárgy.... k ....................... } .................. 190 4. hogy sem a $subject.. i í ^ t <b'r / > ’j } ^subject és az üres $text esetére is....................... ..... sem a $text változó nem ures-e. send the email I Itt azt vizsgáljuk...........i<...cbr />'. és kipucold a zavaros beágyazott IF-eket és ELSE-eket... ) else { echo 'You forgot the email body text.... Ha nem használnánk az ÉS-t (& & ).....a kitisztított if kód a tisztább Légy az IF kód . í ............ 1 31 I 1 1 1 I I ecbo ‘yóu í o ^ o t the email s u b je c t ^ /> ’.. / / ................° ^ suH ecí és a $text nem üres-e. ^ ----. Itt pedig azt vizs­ gáljuk..............<br />'............. hogy eljátszd az IF kódot......£b& ................... írd át a kódot úgy. .................... } } else ( // Everything is fine....... ......{... A művelet ( !) azt vizsgálja....... hogy t t t d ........x t)). fejezet ...........cbr />'...f ( ^ p ty ( /íu b je c t) ) ........

a korábban beírt információt sem találja. Ez az oldal elárulja Elmernek. hogy mi hiányzik. E lfe le jte tte m m egadni a levél tá r g y á t az űrlapon. es ez az oldal je le n t meg. és ami még rosszabb. Az ellenőrzés Elmer Send Email parancsfájljában működik. de amikor a V issza gom bra k a t t in t o t t a m / az ü z e n e te t is újra be k e lle tt írnom. Agytorna ------------ Te mit tennél.php parancsfájl hiányzó űrlapadatokat ész­ lel. Nem vezet vissza például hivatkozás az eredeti űrlapra. ezért a levél tárgyát és szövegét is újra be kell írnia. de ezen kívül nem sok mindenre jó.Valószerű. de ennél többet nem tesz. hogy segítőkészebbé tedd a levélküldő parancsfájl hibakezelését? most itt vagy ► 191 . amikor Elmer visszatér oda. miszerint hiányzik egy információ. gyakorlati alkalmazások M e g in t ö ss z e z a v a ro d ta m . egy üzenetet jelenít meg. Amikor a sen d em ail . de adhatna több segítséget.

cinput i d = " s u b j e c t " nam e="sub. . ha a h ib a ü ze n e tte l e g y ü tt újra megjelenne az lírlap. H T M L -W k ech o ' </form> * '• » * m W » « 1* ' 9 . mert megtehetsz valamit a PHP-ben. a HTML űrlap kódját is újra elő kell állítatnod a PHP-kóddal. hogy kiírsz egy hibaüzenetet. mivel így Elmernek nem kellene visszalépnie a böngészőben.l . 'co ls= "4 0 "x /te x ta re a x b r echo ’ < in p u t ty p e = "su b m it" nam e="subm it" v a lu e = "S u b m it" / > '. Azon kívül tehát. Nem lehetne sim án az echo-val ú jra m egjeleníteni az ű rla p o t.. echo * echo ’ < la b e l f o r = " s u b je c t " > S u b je c t o f e m a il: < / l a b e l x b r />’ . és kiírni a böngé­ szőbe. akkor igazad van. p h p "> 1. Csak azért. ha a levél tá r g y .a HTML-ürlapkód újbóli előállítása O K lassz Ienne.)ect" />’. „ s r t r í M c k ö ri » pW -u - Ha úgy gondolod. k . A kód túl nagy ahhoz. ha valamelyik űrlapmező üres. Ebben az esetben az a probléma. hogy a fenti kód kissé kaotikus. Az alábbiak azt mutatják. még nem muszáj tényleg megtenned. 192 4 fejezet . ! ! e _______ .és üzenetm ezJje üres? Az űrlap megjelenítése egyértelműen segítene. de így jobban látni az eredeti HTML-kód szerkezetét. hogy a jókora HTML-kód kiírása ech o utasí­ tásokkal bonyolult. hogy az egészet a PHP-ben állítsd e lő . nam e="elvism ail" ctextarea rows="8" Ez a behúzás nem fe l­ tétlenül szükséges. echo ' <form m eth o d = "p ost" a c tio n = " s e n d e m a il.. hogy a PHP képes m eglehetősen bonyolult HTML-kódot is előállítani: Ez a PHP-kód a < fo r m > címkével kezdve a teljes HTML-űrlapot létrehozza. /> ’ * t y p e = " t e x t ff I ’size= "30" echo echo ' ’ /x b r <label for="elvism ail">B ody of em a il: < / l a b e l x b r id = "elvism ail" /> ' .

2* V '9S?1 visz a ^M L-hez. HTML-nek tekintendő. és visszatérhetsz a HTML-hez.Valószerű.p h p " > < la b e l f o r= " s u b je c t"> S u b je c t o f em ail : < / l a b e l x b r /> < i n p u t i d = " s u b j e c t " nam e=” s u b j e c t " t v p e = " t e x t " s i z e = " 3 0 " / x b r / > c l a b e l f o r= " e lv is m a il" > B o d y of e m a i l : < / l a b e l x b r /> <textarea id="elvismail" name="elvismail" rows="8 tv c o l s = " 4 0 " x / t e x t a r e a x b r < input type="submit” name-"submit" value= "Submit" /> </form> /> <?php^— j * címl<« “j PHP-blokkot ke?d. < b r ?> <fonn m ethod="post" a c tio n = "s e n d e m a il. ami nem a < ? p h p és a ?> címkék között áll.. c b r />’. < b r / > ’ . gyakorlati alkalmazások i Akkor kapd elő a PHP-t. Az űrlap kódja szokványos HTML. hogy a PHP-parancsfájl valójában csak egy HTMLweboldal. / / T u d j u k . amelyen PHP-kód is található. igény szerint zárhatsz be és nyithatsz újabb PHP-kódblokkokat. A fájlban minden. mint a Send Email űrlap kódjá­ nak esetében. Ez azt jelenti.éppen úgy. h o g y a $ s u b j e c t ÉS a $ t e x t i s ü r e s e c h o ' Y o u f o r g o t t h e e m a i l s u b j e c t and b o d y t e x t .. nagyobb méretű HTML-kódot szeretnél kiírni. Még mindig az if műveletén belül vagy. hogy szükség sze­ rint bezárhatsz egy’ PHP-kódblokkot. ezért a HTMl-kód csak akkor íródik ki. blokkot. mielőtt folytathatnád. $ s u b j e c t = $ _ P 0 S T [ ' s ű b j e c t 1] / $ t e x t = $ POST[ 1e l v i s m a i l 1] . be kell zárnod s* if utasítást. aztán nyit­ hatsz egy új PHP-kódblokkot. Hogyan javítanád ki? most itt vagy ► 193 . mivel kívül esik a PHP-címkéken. <?php $from = ’ elm er@ m akem eelvis. ha mindkét urlapmezo üres. Mivel még mindig « i f műveletén belül vagy. ha olyan.com ’ . amelyet túl nehézkes lenne e c h o PHP-Hasításokon keresztül előállítani. } if ( ( lempty($s u b j e c t ) ) & ( ! empty($text) ) ) & // A levelek et elküldő kód ( } ?> Ha találsz valamit a fenti kódban. írd ide. ami szűkíti a mozgásterünket. ha szükséges Könnyű megfeledkezni róla. I ■ ■ Ez a ?> címke bezárja a Ha nagyobb HTMLkődrészleteket sze­ retnél kiírni egy PHP-parancsfájlban. if (e mp ty ( $ s u b j e c t ) && e m p t y ( $ t e x t ) ) { />'. i f (em pty($ s u b j e c t ) & ( ! e m p t y ( $ t e x t ) )) { & e c h o ’ You f o r g o t t h e e m a i l s u b j e c t . } if ( ( ! e m p t y ( $s u b j e c t )) & e m p t y ( $ t e x t ) ) { & e c h o ’ You f o r g o t t h e e m a i l bod y t e x t . Ez rendkívül hasznos.

THEN írj ki hibaüzenetet.r a IF a tárgymező NOT üres AND az üzenetmező NOT üres THEN küldd el a leveleket Ha mindkét űrlapmezőlien van adat. egy logikai változóval.o t t r u e . hogy jelezzék. ha olyan érvényességi probléma lép fel. hogy három különböző helyen kell kilépned a PHP-ből. ha valamelyik űrlapmező üres. hogy az $o u tp u t_ fo rm változót f a ls e .a többször szereplő kódok elkerülése jelzők segítségével Használj jelzőt a többször szereplő kódok elkerülésére! Az előző kóddal az a gond. egy úgynevezett jelzővel is nyomon követheted. és állítsd az $ o u t p u t _ f o r m . az $output form erteke true THEN jelenítsd IF A H TM U ílM „ „ b.r a Ha valamelyik űrlapmez* üresen maradt.. és emiatt meg kell jelenítened az űrlapot: Állítsd az $ o u t p u t _ f o rm kezdőértékét f a ls e . J . hogy m g ■ e . A parancsfájlnak tehát azzal kell kezdődnie. de az űrlap nem jelenik meg. Hívjuk ezt a változói $ou tp u t_form -n ak. kell-e űrlapot. IF a tárgymező üres AND az üzenetmező üres Ezek a hibaüze­ netek kissé kü­ lönböznek.r a állítod. hogy ki kell-e írni az űrlapkó­ dol. az űrlapot meg kell jeleníteni. hogy melyik urlapmező üres. aminek a hatására megváltozik a változó értéke. Azt viszont. I I Az utolsó lépés az $output fro m változó ellenőrzése. hogy az űrlap csak akkor jelenik meg. mehetnek a levelek.. és megismételni az űr­ lap kódját (minden érvényességi hiba esetén egyszer-egyszer).„ „ ir_ I Jenképpen csak egy példány szükséges. . és állítsd az $output_form-ot true-ra IF a tárgymező NŐT üres AND az üzenetmező üres THEN írj ki hibaüzenetet. I meg az ur apót 194 4 fejezet . egyelőre! IF a tárgymező üres AND az üzenetmező NŐT üres THEN írj ki hibaüzenetet. és csak ak­ kor módosítod az értékéi tru e-ra . az $output_form változó true értéket kap.r a Az $output_form false kezdőértékre állítása azt jelenti. és állítsd az $ o u t p u t _ f o r m . „ jelenítem• az ~ i •.o t t r u e . és vizsgáljuk meg az értékét a kód későbbi részében: ha az értéke tr u e .

( Ha a HTML-kódot egy IF utasítástól teszed függővé. most itt vagy ► 195 .’ e lm e r0 m a k e m e e lv is. akkor m ^ M I « actio n = "sen d em ail.p h p "> clabel for="subject">Subject of email :</labelxbr /> cinput id=”subject" name=”subjectn type="text" size="30” / x b r /> clabel f o r = ”e lv ism a il''> B o d y o f e m a i l : < / l a b e l x b r /> <textarea id=" elvi smai 1” name="elvi smai 1" rcws="8" cols="4Ö"x/textareaxbr /> <input type=”submic" name=fsubmit" value="Submit" /> l : </form> .™ a változót true.co m '.forTO = t r u e . továbbra is ?> . és lezárni az if utasítást. gyakorlati alkalmazások A HTML-űrlap kódját csak egyszer add meg A z új ellenőrző logika PHP-kóddá alakításához az szükséges. ami csak akkor jeleníti meg az űrlapot.-n (e mp ty ( $ s u b j e c t ) && ( ! e m p t y ( $ t e x t ) ) ) { _ű rla p o t az e c h o 'You f o r g o t t h e e m a i l s u b j e c t . ^ A HTML-kod csak egyszer szerepel. />'.És a változót akkor is true-ra állítod. $o u tp u t form = f a l s e . t r „ .:< f o r m m e t h o d = " p o s t " lé k. mivel az űrlap megjelen. $ t é X t = $ _ P O S T [ 1e l v i s m a i 1 1 ] . $output_form = t r u e . & empty( $ t e x t ) ) & } if / / T u d j u k . A legfontosabb a kód végén álló új i f utasítás. <?php ?> } Ne felejts el visszalépni a PHP-kódba. < b r / > ' . $ s u b j e c t = $ _ P 0 S T [ 1s u b j e c t ’ ] . if ( ( ! e mp t y ( $s u b j e c t )) -----------------. ------if (em pty($ s u b j e c t ) lft hozód létre az ú i változót és adod neki 3 f^ ls e k e z d ő é r té k e t. Ha a ^ s u b je c t é s » $ te « t e .lésének logikáját egyetlen változóba ISoütputJorm ) gyömöszölted.Valószerű. <?php $from . de minden. c b r / > ’ . $output_form = t r u e . * . h o g y a $ s u b j e c t ÉS a $ t e x t i s ü r e s e c h o ' Y o u f o r g o t t h e e m a i l s u b j e c t and b o d y t e x t .. ha a $text üres. ^ # ^ m á„ _ ebben az esetHTML-kódja ^ m I<(|etének (jO T . } $ o u tp u t.. majd gondoskodj róla. ____________________ k»9» me9!®'8 } if ( ( ! e m p t y ( $s u b j e c t )) & e m p t y ( $ t e x t ) ) { & e c h o ' Y o u f o r g o t t h e e m a i l body t e x t . < b r Es a változót akkor is true-ra állítod. rs . r i n t ^ * ie. és ha az er($output_form ) { Itt kilépsz a PHP-kódból. ha a $text üres. hogy létrehozd és Lij kezdőértékkel lásd el az $ o u tp u t_ fo rm változót. a parancsfájlban el­ kerülheted a kódis­ métlést. & ( ! empty( $t e x t ) )) & kód { // } if a levelek et elkü id ő Ez az if utasítás vizsgálja meg az $output_form Változót. ha íz $o u tp u t_fo rm értéke tr u e . hogy íz ellenőrző kódban mindenhol megfelelő értéket kapjon.

A HTML önmagában nem képes megőrizni az űrlapadatokat. am i nagyon b o ssza n tó . fejezet . Az új űrlap azonban tiszta HTML-kódból áll.php parancsfájl elfogja a hibát.php parancs­ fájlhoz kerül. Elroerrel. a sendem a. amit Elmer esetleg beírt. de to v á b b ra is újra be kell gépelnem az eredetileg helyesen k it ö lt ö t t mezők ta r ta lm á t. Hm. ami semmit sem tud az Elmer által korábban beírt adatokról. és vissza kell töltenünk őket az új űrlapra.az űr/apadatok továbbra is eltűnnek A z új ű rlap m á r jo bb. és új űrlapot állít elő. Benyújtva! Elmer véletlenül üresen hagyta ezt a mezőt. hogy az egyik ürlapmezőt üresen hagyta. Az ellenőrzés részeként te­ hát egy olyan új.htm l Most minden mező üres. 196 4. hogy Elmernek kizárólag azt az űrlapmezőt kelljen kitöltenie. mert ez egy vadiúj uftap* sendem ail..php Amikor Elmer a Submit gombra kattint. amelyet véletlenül üresen hagyott. az űrlap a sendemail. Azt a tényt nem tudjuk megkerülni.. ami minden adatot töröl. Ez a hibaüzenet tudatja Elmer által beírt üríapadatok. Amikor Elmer úgy nyújtja be a Send Email űrlapot. tiszta űrlapot állítunk elő. hogy valamelyik m ező üres.il . amelyeket Elmer már beírt. hogy az új űrlapot a PHPparancsfájlban kell előállítani. sendem ail. valahogy azonban em lékeznünk kell azokra az adatokra.

hogy szerinted hogyan kellene átírni a két (HTML.és PHP-) fájlt. ha csak az első űrlapmezőt töltötte ki.php - most itt vagy ► 197 . hogy képesek legyenek emlékezni! sendem ail. majd írd le. hogyan kell kinéznie Elmer űrlapjának benyújtás után.Valószerűr gyakorlati alkalmazások ki a ceruzád! -------------------------------------------------------------------Rajzold le.

sen d e m ail.. az űrlap megjelenítését...... 198 4...........a parancsfájl.. lesz... amikor előállítja.. A PHP-parancsfájl mindenhez hozzáférhet. hogyan kell kinéznie Elmer űrlapjának benyújtás után...... fejezet .p h p sen d e m ail.. .és PHP-) fájlt. PHP-parancsfájl jele­ níti meg.minden űrlapadafhoz hozzáfér. és feldolgozását...... megjelenítésének Ha az űrlapot teljes egészébe* a. . míg egy tiszta HTML-kód erre....... amit beírtak......... és visszatöl­ ti azokat az űrlapra.... a HTM....h tm l A PHP-farancsfájl ve^zi át az..de a parancsfájl már em­ lékszik az adatokra..... .... amit az űrlapra beírtak. aránt a PHP-parancsfájl végzi. és többé nem kell majd újra kitöltenie azokat a mezökef. benyújtása.... egy-.. hogy képesek legyenek emlékezni! A hibaüzenet . majd írd le. mind.... is. hogy szerinted hogyan kellene átírni a két (HTML. Miyel pedig..... és minden adatot felhasznál­ hat. ha csak az első űrlapmezőt töltötte ki.tedd ragadóssá" az űrlapot! v Hegyezd ki a ceruzád! Megoldás Rajzold le... feladatát mind .az űrlap. Ez megoldja Elmer prob­ lémáját.... vissza js táplálhatja azokat az űrlapra.o(daJr......... előtt.. amelyekre már beírt valamit.űrlap.. nem képes... mivel. szükség. amelye­ ket Elmer beírt.l-...... az ufán.a már nem..

hogy mi történik. Elmer kitölti az egyik űrezőt.h t m l feladata volt. mint a normál ldalak. Ezt az a tény teszi lehetővé.Valószerű. amelyeket Elmer már beírt. Ennél is fontosabb azonban. majd a benyújtása után feldolgozza azt. amelyet a parancsfájl megjelenít. ragadós űrlapok­ nak nevezik. és újra megje­ leníti az űrlapot. Az üríapadatok ugyanahhoz a pa­ rancsfájlhoz kerülnek. csak átt^óziik a PHP-parancsfájlba. az űrlapművelet visszavezet a parancsoz . önhivatkozó űrlapnak hívják. amelyek elég intelligen­ sek ahhoz. vagy az űrlap új­ bóli megjelenítését egy hibaüzenettel együtt. Azokat az űrlapokat. b :gy a parancsfájl újra megjeleníti az űrlapot.p h p A parancsfájl megjeleníti az űrlapot. hogy emlékezzenek a benyújtásuk előtt beírt adatokra. A parancsfájl feldolgozza az űrlapot. hogy megértsd a fentiek működését.vagyis egy önhivatkozó űrlap jön létre. Az űrlap feldolgozása vagy a levelek el­ küldését eredményezi. amely önmagára hivatkozik Hogyan lehet eltávolítani a s e n d e m a i l . Ahhoz. h tm l-t a levélküldő űrlap egyenletéből? Sós. hogy ne csak feldolgozza űrlapot annak benyújtásakor. hogy a s e n d e m a i l . Szerinted hogyan lehetne Elmer alkalmazását módosí­ tani. sen d e m ail. ha valamelyik adat hiányzik. A parancsfájlodat tehát úgy építheted fel. hogy a PHPcsfájlok ugyanúgy tartalmazhatnak HTML-kódot. és a Submit gombra kattint. a válasz az. mert az adatok „ragadnak hozzájuk”. amely az öt feldolgozó PHPparancsfájl része. «nikor Elmer először tölti be az oldalt ( vagyis a parancsfájlt): egy üres űrlap jön léire HTML-kódként. A je n d e m a il. Mivel most már maga parancsfájl tartalmazza a HTML-űrlapot. és hi­ baüzenetet jelenít meg. a felhasználók kozvetle• í l a P H P -p a ra n cs fá jit töltik be az űrlap használatához. hogy az űrlapmezők ragadósak legyenek? m ost it t vagy > 199 . Az olyan HTMLurlapot. html szerepét is. gondold végig. de ezúttal azokkal az adatokkal együtt.h tm l-re többé nincs trikség. k a kulcsa. amely fel­ dolgozza azokat. hogy valójában nem törlünk semmilyen HTML-kódot. gyakorlati alkalmazások Egy űrlap. hanem az űrlap kezdeti megjelenítéséről is gon:odjont ami eddig a s e n d e m a i l . az űrlapműveletben rejlik. Agytorna A ragadós űrlapok emlékez­ nek a felhasználó által he­ lyesen megadott adatokra.p h p parancsfájl képes betölteni sen d em a i 1 . de ezúttal már emlékezve a már beírt adatokra.

Ha az űrlapműveletben a parancs­ fájl URL-jét $_SERVER [ ' PH P_SELF' ] -re változtatod. 2 0 0 4. mivel nem egy konkrét parancsfájlnévre támaszkodik: a PHP beépített $ _ s e r v e r [ ' p h p _ s e l f ' ] szuperglobális változójának haszná­ lata. amely a POST segítségével küldi el az urlapadatokat a parancsfájlnak. de egyike annak a sok kis dolognak.php-re mutat. ami azt jelenti. j Ez a kód működik. Az egyetlen hátulütő csak az.php fájl. a $ _ S E R V E R [ ' PH P_SELF ' ] használata a parancsfájl neve helyett nem va­ lami eget rengető újítás. feltéve.az űrlapművelet önhivatkozóvá tétele Irányítsd az űrlapműveletet a parancsfájlra! Ahogy már többször is láthattad. a < fo rm > elem a c t i o n jellemzője kapcsolja az űrlapot az őt feldolgozó PHP-parancsfájlhoz. hogy' nem nevezed át a parancsfájlt. Valójában az űrlap a c t i o n tu­ lajdonsága már a parancsfájlra mutat: A < fo rm > elem action jellemzője kapcsolja az űrlapot az 6t feldolgozó parancsfájlhoz. A $_$ERVER['PHP_$ELF] min az adott parancsfájl nevét tárolja. soha nem kell aggódnod a módosítások miatt. hogy az e c h o paranccsal ki kell íratnod az értékét. < fo rm a c t i o n = " s e n d e m a i l . ami mindentől függetle­ nül működőképes. és soha nem módosítod a kódot. h ogy a $ _ S E R V E R [ ' PH P_SE L F’ 1 PHP-kód.p h p " m e th o d = " p o s t"> Ez egy szabványos < fo rm > elem. Van viszont egy jobb módszer is. ami az első lépés a ragadós űrlap felé. hogy a HTMLkimenet része legyen: rtPV/pnek bedrótozása helyett í n s S w S . hogy az űrlap feldolgozza sa­ ját magát. önhivatkozást hozhatsz létre.» " < fo rm a c t i o n = "< ?p h p e c h o $_SERV ER[ ' PH P_SELF' ] . amely az adott parancsfájl nevét tárolja. ? > " m e th o d = f. lehetővé teszi. amivel a parancs­ fájljaidat könnyebben karbantarthatóvá teheted. hogy Elmer űrlapjának mű­ velete a s e n d e m a i l . Az. ami ebben az esetben maga az űrlapot tároló sendemail. fejezet .p o s t M > Oké. ha valamikor át kellene nevezned a parancsfájlt.

önhivatkozó parancsfájlt a továbbfejlesztett űrlapellenőrzési logikával! Módosítsd úgy a s e n d e m a i l . hogy az űrlap önhivatkozó legyen. és nyisd meg a parancs­ fájlt egy webböngészőben. Ezek szerint még lesz vele munka! Submit h " e ” a!ídÍunk e.*>e . igény szerint jelenítse meg az űrlapot. hogy az $ o u t p u t _ f o r m változó segítségével.Valószerű.p h p fájlban található kódot. A webkiszolgálón többé nincs szükség a s e n d e m a i l .a ragaS39 is hamarosan sorra kerül. \ MdteM*avfc«M Priváté: Fór Elmefs use ONLY yvrite and send an email to mailing üst memüers (Jou forgói tneem subjecl and boűytett) ail S 3U1W4 of cmait'------. gyakorlati alkalmazások Tesztűt Próbáld ki az új. Ezen kívül változtasd meg a < fo rm > elem a c t i o n jellemzőjét is. ahogy néhány oldallal korábban láttad. Tetszik? A paracsfájl valamiért most is megjelenít egy hifeaüzeEm# <rV/ •- j " tö Z Z ? p7 f/iii n/>ivi íg y nem fe sz JO.p h p parancsfájl új változatát a webkiszolgálóra. W írd le.—■T Body of email: —— ___ ___ _ Ráadásul az űrlap továbbra sem ragadós. h tm l oldalra. Ez után töltsd fel a s e n d e m a i l . hogy szerinted miért jelenít meg hibaüzenetet a parancsfájl az űrlap első megjelenítésekor: m ost i t t vagy ► 201 . úgyhogy nyugodtan törölheted.

hogy űrlapbenyújtásról van-e szó? Ha ugyanis ezt tudod. hogy a $_P0ST tömb be lett-e állítva? Az is$et() függvény azt vizsgálja. a $_POST tömb még nem töltődött fel adatokkal. fejezet . hogy az űrlapot benyúj­ tották-e. hogy melyik függvényt hívhatjuk meg annak vizsgálatára. illetve az űrlap hiányos adatokkal történő benyújtása között. hogy egy változót beállítottak-e. Emlékszel még. mert a pa­ rancsfájl nem tud különbséget tenni az űrlap első megjelenítése. hogy csak benyújtáskor ellenőrizd az adatokat. hogy tudjuk. { i f (is s e t($ _ P O S T [ 1 s u b m i t 1] ) ) } Az itt álló kód csak akkor hajtódik végre. de csak ennek a konkrét űrlapnak az esetében. 202 4. az adatok a $_POST tömbbe kerülnek? Ha az űrlapot még nem nyújtották be. ha az űrlapot benyújtották. gondoskodhatsz róla. hiszen ez esetben nincs sem­ mi baj az üres űrlapmezőkkel . hogy az űrlapot benyújtották-e? ! A hibaüzenet azért jelenik meg. ha megnézed. (A ’ subm it '-nak persze a Submit gombnak az űrlap kódjában található id jellemzőjével kell megegyeznie. K V ! De miért nem az űrlapadatok megadását ellenőrizzük a Submit gomb helyett? ! A $ _ P O S T [ ' s u b j e c t ' ] vagy a $_PO ST [ ' e l v i s m a i l 1 ] ellenőrzése is tö­ kéletesen megfelelne. és ezek egységesen a s u b m it nevet kaphatják. hogy a parancsfájl nem tud különbséget tenni az űrlap első megjelenítése. így aztán akkor is hiányzó adatokat jelez. ami elárulja. hogy az űrlap be lett-e nyújtva! A gond az.az $ POS TCsu b m it'] ellenőrzése Ellenőrizd. A kérdés az. hog. _ Ennel< meg kell egyeznie a Submit gomb < input> elemének név jellemzőjével.ha üresek. amikor az űrlapot először rajzolja a képernyőre. il­ letve az űrlap hiányos adatokkal történő benyújtása között. Mivel minden űrlapnak van elküldő gombja. hogy miként lehetne megtudni. ami igencsak összezavarja a felhasználót. a $_PO ST[ * s u b m it ' ] ellenőrzése minden parancsfájlban megbízható módszer az űrlap benyújtásának vizsgálatára. Mivel minden űrlapnak van Submit gombja. Maga az adat csak a gomb címkéje. hogy amikor egy űrlap adatait a POST-on keresztül elküldik. ha az űrlapot benyújtották. hogy tartozik-e $_P0S'I -adat a Submit gombhoz. ezért a benyújtás észlelése nagyon fontos.) A $_P0$T szuperglobális le­ hetővé teszi. az a $_P0ST[ ’ subm it ’ ] puszta léte. Csak akkor kell ellenőrizni az űr­ lapmezőket. egy űrlap benyújtásának megtörténtét úgy ellenőrizheted a legkönnyebben. ami nem fontos . másképp fogalmazva a tömb még nincs beállítva.ami lé­ nyeges.f megvizsgáld. ezért vala­ honnan tudnunk kell. hogy ez az űrlap első megjelenítése-e. Nincsenek hülye kérdések K V ! Hogyan akadályozza meg a hibaüzenetek téves megjele­ nítését az. Ki tudod ta­ lálni. hogy egy űrlapot be­ nyújtottak-e. az nem hiba.

/>’ . $ou tp u t_form = f a l s e . } if ( ( ! em p ty ( $ s u b j e c t )) & e m p t y ( $ t e x t ) ) { & e c h o ’ You f o r g o t t h e e m a i l bod y t e x t . < b r / > ’ . } if (em p ty ($ s u b j e c t ) & ( ! e m p t y ( $ t e x t ) )) ( & e c h o 'Y o u f o r g o t t h e e m a i l s u b j e c t . ? > " > < l a b e l f o r = ’’ s u b j e c t " > S u b j e c t o f e m a i l : < / l a b e l x b r /> < i n p u t i d = ” s u b j e c t " n a m e = " s u b j e c t ” t y p e = " t e x t ’’ s i z e = ”3 0 ” / x b r /> < l a b e l f o r = ?.co m ’ . < b r $ou tp u t_form = t r u e . gyakorlati alkalmazások Nagyító alatt: <?php i f (is s e t ( $ _ P O S T [ ’ s u b m it’ ] ) ) { " $from = ’ e lm e r@ m a k em e e lv is. $ t e x t = $ _ P O S T [ 1e l v i s m a i l ’ ] . />’ . $ s u b j e c t = $_POST[ ' s u b j e c t ’ ] . Ha az űrlapot me'g nem nyújtották be. $ou tp u t_form = t r u e . c b r $ou tp u t_form = tr u e .Valószerű. mindenkép­ pen meg kell jelenítened! if ($ou tp u t_form ) { ?> < fo r m m e t h o d = " p o s t " a c t i o n = " < ? p h p e c h o $_SERV ER[ ’ PHP_SELF’ ] . Ez a zárójel zárja le az első' if utasítást. h o g y a S s u b j e c t ÉS a $ t e x t i s ü r e s e c h o ’ You f o r g o t t h e e m a i l s u b j e c t and bod y t e x t .1 // T u d ju k . hogy az űrlapot benyújtották-e. } if ( ( ! em p ty ($ s u b j e c t )) // A l e v e l e k e t & ( ! e m p t y ( $ t e x t ) )) & kód { e lk ü ld ő e lse { $ou tp u t_form = t r u e .e l v i s m a i l " > B o d y o f e m a i l : < / l a b e l x b r /> c t e x t a r e a id = ”e l v i s m a i l ” n a m e = " e lv is m a il" row s=”8 ” c o l s = ”4 0 ”x / t e x t a r e a x b r < i n p u t t y p e = " s u b m i t " name=” s u b m i t " v a l u e = " S u b m i t " /> </form> <?php /> } ?> m ost it t vagy ► 203 . if (em p ty ( $ s u b je c t ) & em p ty ( $ t e x t ) ) & { a levélküldő parancsfájl ------------------------------------. ami azt vizsgálja.

a <?php címkét kell használnod. hogy korábban az echo paranccsal állítottunk elő dinamikusan HTML-kódot egy PHP-blokkban. amikor megjeleníted azt. ? > " / > < b r /> < l a b e l f o r = " e l v i s m a i l " > B o d y o f e m a i l : < / l a b e l x b r /> < t e x t a r e a i d = " e l v i s m a i l " n a m e = " e lv is m a il" row s= "8" c o ls = " 4 0 " > <?php echo $ t e x t . ? X / t e x t a r e a x b r /> < i n p u t t y p e = " s u b m i t " n a m e = " s u b m it " v a l u e = " S u b m i t " /> </form> 204 4. A korábban már beírt űrlapadatokat vissza is kell töltened az űrlapra. A bevi­ teli űrlapmezők értékét az <in p u t> HTML-elem v a lu e jellemzőjével állíthatod be: az alábbi kód például így adja meg egy beviteli mező értékét: Ez az érfék („Őszi kiárusítás!") bedróto­ zott. Egy többsoros szövegme­ zőben a ragadós adatokat a value jellemző' helyett a < te xta re a > és a < /textarea > címkék között kell kiírnod. hogy az ű rla p o t b e n y ú jto ttá k -e . hanem az adatot egy PHP-változóból szeretnénk kiolvasni. < in p u t n a m e = " s u b je c t . Szóval m o s t m á r megállapít­ hatom. de nem ez az egyetlen.T t y p e = " t e x t " v a l u e = " F a l l C l e a r a n c e ! w > * Mi azonban nem egy konkrét értéket akarunk bedrótozni. C A változót a már ismerős echo utasítással írhatod kL ?> c i n p u t n a m e = " s u b je c t " t y p e = " t e x t " v a lu e = " < ? p h p e c h o $ s u b j e c t . fejezet . ?> ’ < l a b e l f o r = " s u b j e c t M S u b j e c t o f e m a i l : < / l a b e l x b r /> > < i n p u t i d = " s u b j e c t " name=f. A HTML-hez úgy térsz vissza. hogy lezárod a PHP-kódot a ? > címkével. de az űrlapadatokat még vissza kell töltened az űrlapra. nem Igaz? így van. Elmer űrlapját ezután hasonló módon módosíthatod a ragadós adatok használatához: < fo r m m e t h o d = " p o s t " a c t i o n = " < ? p h p e c h o $_SERV ER[’ PHP_SELF’ ] . Hogyan lehetséges ez? Emlékezz vissza. ( ée helyesen je le n íth e te m meg a hibaüzeneteket. De az űrlapm ezok ezzel még nem le tte k ra ga d ó sa k. Az űrlap benyújtásának észlelése fontos szerepet játszik az űrlap ragadóssá téte­ lében.s u b ] e c t ” t y p e = " t e x t " s i z e = " 3 0 " value="<?php echo $ s u b je c t. vagyis a mezoten az űrlap minden megjelenítésekor ugyanaz jelenik meg. Az űrlap benyújtásának észlelése fontos.az ürlapmezök „ragadóssá " tétele q K lassz. Ebben az esetben az echo segítségével így állítjuk elő a v a lu e jellemző értékét egy PHP-változóból: Mivel a változó kiírásához PHP-re váltunk. amiről gondoskodnod kell.

Valószerű.coM Private: For Elmer’s use ONLY Wnte and send an email to mailing list members. és nyisd meg a fájlt egy webböngészőben. de m o s t. You forgot the email body text Subject ofemail: Fall C earanee! Bodyofemaii: A Send Email parancsfájl m0st hibaüzenetet je le n j meg. hogy az ű rla p ilyen pöpec. Töltsd fel a parancsfájl új változatát a webkiszolgálóra. beleértve az egyik vagy mindkét mező üresen hagyását. de a korábban beírt adatokra is emlékszik. Kísérletezz különböző énekekkel az űrlapmezőkben. most itt vagy ► 205 . hogy a $ _ P 0 S T segítségével ellenőrizze az űrlap benyújtá­ sát. Elég o s to b a dolog v o lt kihagyni a levél szövegét.p h p kódját úgy. R áadásul a korábban m á r b e írt a d a to k a t sem kell újra begépelnem. mennyire ragadósak valójában Elmer adatai! Módosítsd a s e n d e m a i l . és nyújtsd be az űrlapot néhány alkalommal. tö b b e t b iz to s nem fogom elfelejteni. gyakorlati alkalmazások Tesztút Ellenőrizd. hogy a mezői ragadósak legyenek. ha Elmer üresen hagyja valamelyik űrlapme­ zőt. MakeMeELvfe. valamint egészítsd ki e c h o utasításokkal az űrlapot.

Arra kell módot találnod. néhányan több példányban kapják meg a leveleket. Csípem az akciós ajánlatokat. De nem mindenki boldog. Your Loyal But Annoyed Customer. amikor értesítesz egy akcióról. hogy Elbertnek csak a felesleges sorait tö­ röld a táblából. Please stop it with the spam. Elbert Ez a vásárló azért bosszankodik. M a ^ M é t L V fc . vagyis egyetlen üzenetet sem fog kapni Elmeitől. és törli a felhasználót. I don’t need to get three messages every time you want to tell me about a sale. nem igaz? Sajnos a dolog nem ilyen egyszerű. hogy egyes felhasználók véletlenül többször iratkoztak fel a levelezőlistájára. a Remove Email oldal. n on Make Me Efvis . Kiriek. ö ü Remove Hogyan törölhet Elmer egy kivételével minden példányt egy a táblában többször szereplő. I tike getting the sales emails but please don't send me more than one. de egyet azért meghagyj. Min­ den alkalommal. ak­ kor teljesen el fog tűnni az e m a i l _ l i s t táblából. Sem­ mi gond. de bosszankodó vásáriód.C O M Enter an email address to remove Email address: é lb e rt£ > k re s ie e s p ro c k e t5 . akik üres leveleket kapnak . három levelet kapok. Elbert From Elbert Krestee! <elbert@kresleesprockelsi)iz> I Subject.Remove Email Az elbY o fejezet Remove Email oldalá­ nak segítségével teljesen eltávolítanánk a m ú rló t Elmer adatbázisából . Spam? Date: October 24.a lecsillapítása felé. Hűséges.2008 12:2333 PM CDT To: Elmer PtVestley <e<mer@makemeeWrs com> Elmer. Ha Elbertet az e-mail címe alapján törlőd.de mi nem ezt akarjuk. fejezet . de légyezi. Elmer tudja. Emlékszel még erre a fickóra a fejezet elejéről? n o n S p a m 7 — Inbox __________ M M Elmer. illetve parancsfájl az előző fejezetből majd meg­ oldja a problémát. azonos e-mail címeket tartalma zó sorból? 206 4. mert mindig több példányt kap Elmer leveleiből.különö­ sen azoknak. Úgy tűnik. ne küldj egynél többet.amikor egy DELETE rossz útra téved Még most is vannak morgolódó felhasználók Az űrlap ellenőrzésével nagy lépést tettél Elmer bosszankodó vásárlóinak . állj le a levélszemét-küldözgetéssel. hogy egyetlen üzenetet sem küldött el többször. ezért azt gyanítja.

hogy egyedileg azonosítsa a tábla egyes sorait. hogy tö b b s z ö r szere p lő so ro k vannak a tá b lá b a n . minden DELETE parancs az összes e g y e z i s o r t tö rö ln i fo ^ja . mint az e-mail címé. ez a jövőre nézve megoldaná a problémát. Jill: Nem feltétlenül.. Az. Nem kockáztathatunk meg egy WHERE záradékot. R’ank: . Ha így teszünk. hogy ennek megfelelően tervezzük meg a táblát. Valójában arra van szükségünk. mint az e-mail cím. Emmith Smith stb. nincs szerencsénk. Ez elhárítaná a hibát. Az i d oszlopot aztán feltölthetnénk különböző azonosítószámokkal az egyes sorokhoz. nem igaz? Zseni vagyok! m ost it t vagy ► 207 . az e-mail cím vagy a keresztnév helyett ennek az egyedi számnak íz alapján töröljük a sorokat. de nem segítene azokon a többször szereplő e-mail címeken. Joe: Akkor mi a fenét csinálhatunk? Ha nem használhatjuk sem az e m a i l . ^rank: Ez tetszik...e t ? Jill: Én is gondoltam erre. Joe: Oké. nem? Frank: Kitűnő ötlet! Jill: Igen. Jill: Pontosan. azonos keresztnévből meg még annál is több van. Biztosnak kell lennünk benne. amelyeket meg sze'etnénk tartani.. de még mindig nem késő kijavítani. hogy pontosan ki tudjuk jelölni azokat sorokat. hogy ¿mikor végrehajtjuk a DELETE utasításunkat. még nem jelenti azt. ami olyan sorokat is töröl. hogy nem is adhatunk a táblához egyet. hívhatnánk mondjuk i d e n t i f i e r nek (vagyis „azonosítónak”). hogy most nincs olyan oszlopunk. Igazad van. Frank: Hát az nem lenne jó. például a l a s t _ n a m e . Joe: Egy új oszlop? De hát már kialakítottuk a tábla szerkezetét! zrank: Igen. sem a l a s t _ n a m e . amelyeket tény­ leg törölni szeretnénk. ha egy Jolin Smith nevű vásárlót szeret­ nénk törölni a levelezőlistáról.akkor kifogyunk a tábla oszlopaiból. Frank: Ez igaz. amelyek már az adatbázisban vannak. Ha nem tu d ju k elkülöníteni őket. hanem Will Smith. de nincs rá mód. ¿kkor gond nélkül kijelölhetjük a kívánt sorokat. Úgy fest. hogy m egkülönböztessük a zo k a t. és ezt az SQL-kódot futtatjuk? DELETE FROM e m a i l _ l i s t WHERE l a s t _ n a m e = 'S m ith ' Joe: Ezzel nem csak John Smith törlődne a táblából. Joe: Pontosan. hogy az Add Email űrlapunknak ellenőriznie kellene a többször szerep­ lő e-mail címeket. de a vezetéknév használata még lehet. ami minden sorban egyedi értéket tartalmaz. sem a f i r s t _ n a m e oszlopot a WHERE záradékban. ha a táblában egy másik oszlopot használnánk a fe­ lesleges sorok törlésére. De mi lenne. hogy rosszabb lenne. mivel a szerepe az. Maggie Smith. Egyetlen egyszerű lekérdezéssel sorok tucatjait vesztenénk el. is. gyakorlati alkalm azások Hm. Ez ám az ötlet. de a jelenlegi szerkezet nem felel meg az igényeinknek. vagy röviden id-nek. Mi történik. A vezetéknév valószínűleg többször azonos a sorokban.Valószerű. de mi legyen az új oszlop neve? És milyen adatokat tegyünk bele? Jill: Nos. tényleg jobb lett volna ezt ko­ rábban felismerni. mielőtt felvenne egy új felhasználót. hogy a tábla minden sorát egyedivé tegyük. A probléma az. Joe: Lehet.

fejezet . Elmer táblája most ezt tartalmazza: first_nam e Denny Irm a Elbert Irm a last_nam e Bubbleton W e rlitz Kreslee Kreslee \ •m a il d enny@ m ightygum ball.adj a sorokhoz. vagyis hogy képesek legyünk egy konkrét sort (és csak azt!) elérni.net ¡w er@ aliensabductedm e. Ezt figyelembe véve hihetetlenül fontos.com elbert@ kresleesprockets. Az e-mail cím a legtöbb esetben egyedi. Ha egy táblában nincs olyan oszlopod. ami valóban egyedi értékekei tartalmaz. hogy egy táblában min­ den sor egyedileg azonosítható legyen. létre kell hoznod egyet. de arra nem alapozhatunk. amelynek az értéke a táb­ la minden sorában egyedi. és az egyediségnek annyi. mert arról az új id oszlop gondoskodik. A MySQL módot ad rá.biz ( * A keresztneve több személy­ nek is azonos lehet. a tábla két­ szer fogja tárolni ugyanazt az e-mail címet.biz elbert@ kresleesprockets. Elmer e i n a i l _ l i s t táblája azzal a veszélyes előfeltételezéssel él.elsőd/egesku/cs-oszlop hozzáadása egy táblához A táblák sorainak egyedileg azonosíthatónak kell lenniük Részben azért érdemes dolgokat egy adatbázisban tárolni. Elmer táblájának ezt kellene tartalmaznia: Egy olyan új oszlopra van szükség. A más oszlopokban ismét­ lődő adatok nem befolyá­ solják a sorok egyedisé­ gét. \ a helyzet. Ez a feltételezés azonban csak addig működik. hogy később megkereshessük őket. biztos lehetsz benne. hogy egy egyedi egész értékeket tartalmazó oszlopot . hogy minden e-mail cím egyedi.amint ez mégis bekövetkezik (és biztosan be fog következni!).com elbert@ kresleesprockets. hogy ez mindig így lesz. amíg senki nem iratkozik fel véletlenül két­ szer a levelezőlistára . és műveleteket hajtsunk végre rajtuk. hogy ez az oszlop egyedi értékeket tartalmaz. ezért a keresztnév nem alkalmas egyedi oszlopnak.biz Denny Irm a ¡ Elbert Irm a ^ Most. hogy a táblában minden sor egyedi. Itt ugyanaz a vezetéknevek egyediségére sem számíthatunk.egy úgyneve­ zett elsődleges kulcsot .net iw er@ aliensabductedm e. Ennek a táblának a szerke­ zetében semmi sem garan­ tálja a sorok egyediségét. 208 4.biz elbert@ kresleesprockets. fir»t_nam e \ 2 3 4 iast_nam e B ubbleton W e rlitz Kreslee Kreslee email d enny@ m ightygum ball.

.. de célszerű az azonosító oszlopot az első helyre tenni. hogy B új id oszlop a tábla elsődleges kulcsa... hogy anélkül hozz létre egy új oszlopot. hogy adatvesztés nélkül változtass meg egy meglevő táblát. E lm e r c ím lis tá ja fü s tb e fo g m ennil A d r o p t a b l e valóban megsemmisítené Elmer adatait. Az AUTO_lNCREMENT egy újabb jellemzővel bővíti az i d oszlop leírását: a hatására az oszlop minden új sor beszúrásakor automatikusan egyedi számér­ téket kap.Valószerű. amelynek az i d nevet adjuk. Ezt '«marosan bővebben is kifejtjük. Az SQL-nek azonban van egy másik parancsa is. Ennek a parancsnak a neve ALTÉR TABLE. Az ALTÉR TABLE paranccsal tehát egy új oszlopot adhatunk az emai 1_1 i s t táblához. ALTER TABLE email_list ADD id INT NOT NULL AUTO_INCREMENT FIRST. Ahogy az alábbi kódból látszik.. az AUTO_lNCREMENT parancs automatikusan hozzáad 1-et az i d oszlopnak az előző sorban szereplő értékéhez...^ A FIRST arra utasítja a MySQL-t. A fenti ALTÉR TABLE utasítás elég sűrű. hogy A módosítani kívánt tábla neve. a PRIMARY KEY (elsődleges kulcs) arról értesíti a MySQL-t.-----. mert az elsődleges kulcsokat meghatá­ rozott jellemzőkkel kell létrehozni. ... amikor az INSERT paranccsal új sort szúrsz be a táblába. hogy az i d oszlop minden érté­ ke egyedi . hogy a tablaban tegye az első helyre az oszlopot.. Ahogy a neve („automatikus növelés”) is sugallja. Az i d oszlop adattípusa INT lesz.bár az egyediségnél többről van itt szó... mivel egész értékekkel nagyszerűen lehet biztosítani az egyediséget... Végül.. p . amellyel új oszlopot adhatsz egy táblához. Az ALTÉR TABLE utasítás általános alakja. hogy el kellene vetned a táblát a benne tárolt ada­ tokkal együtt.. így fest: ALTÉR TABLE r tábla_neve ADD A tábla neve. ami lehetővé teszi. gyakorlati alkalmazások Hé. a kis kódrész árulja al a MySQL-nek.. néhány további információra is szükség lesz: Ez arra utasítja a MySQL-kiszolgálot.. IM a t £ ~ oszlop neve. . .. hogy az i d oszlopban muszáj értéknek lennie. m ost i t t vagy > 209 .. zseníkem l Ha módosítani a k a rju k 0 a tá b la s z e rk e z e té t.. a z tá n ú jra lé tr e kell h oznunk a t á b lá t a se m m ib ől. minden újonnan beszúrt sor esetében 1-gyel növelje az oszlopban tárolt értéket.n r Az id nevű új oszlop hozzáadása. Az oszlop adattípusa INTeger... és arra használhatod..... A NŐT n u l l például azt mondja a MySQLnek. 0 8 A k M n ( aj zi 0 p__neve oszlop_típusa Az új oszlop adattípusa. . e g y PROP TAE5LE p a r a n c s o t kell kia d nu nk. és ezt az új értéket írja az i d oszlopba. vagyis soha nem maradhat üresen. ADD PRIMARY KEY (id) . Ez nem kötelező.

Tökéletes! 210 ' id 1 2 ^ firtt_nam e Denny Irm a last_nam e Bubbleton W e rlitz ••• email d enny@ m ightygum ball.minden. akkor fennállna a kockázat. hiszen az oszlop más sorokban is üres lehet.com 4 fejezet . Ezért jók az egész értékek elsődleges kulcsnak . Az elsődleges kulcs oszlopában mindig állnia kell valamilyen értéknek. Ezeket a korlátozásokat foglalják össze az alábbi szabályok: Az elsődleges kulcs egy olyan oszlop egy táblában. Ez tiszta helyzetet teremt abból a szempontból. Ha az elsődlegeskules-oszlop üres (n ull . Elmer táblájának id oszlopa nem tartalmaz ismétlődő" adatokat. akkor nem biztos. amely m egkülönböz­ teti és egyedivé teszi az adott tábla sorait. semmi több. hogy ismétlődő sorok keletkeznek a táblában NULL elsődleges kulccsal. de csak egy közös oszlop lehet elsődle­ ges kulcs. Az elsődleges kulcsok öt szabálya: Az elsődleges kulcsban szereplő adatok nem ismétlődhetnek. de nem igényelnek nagy tárhelyet. Az elsődleges kulcsok értéke nem változtatható meg. A szokványos oszlopokat is meghatározhatod egyediként. Az elsődleges kulcsnak a lehető leghatékonyabbnak kell lennie. amennyi feltétlenül szüksé­ ges az egyediséghez. hogy véletlenül olyan értéket adsz nekik. hogy melyik oszlopot kell használnod az olyan lekérdezésekben. Ha beszúrhatnál elsődleges kulcs nélküli sort is.net iw er@ aliensabductedm e. értékű). amit már használtál. Az elsődleges kulcsok egyediségének biztosítására a MySQL szám os korláto­ zást juttat érvényre a PRIMARY KEY-ként meghatározott oszlopra. tömör. hogy egyedi. az téket automatikusan kapja az i sorok beszúrásakor. Ne feledd. amelyeknek konk­ rét sorokat kell kijelölniük. akkor előfordulhatna. Az elsődleges kulcsban csak annyi információ legyen. és nem változik. Ha megváltoztathatnád a kulcsok értékét. ami ellentmond az elsődleges kulcs szerepének. az elsődleges kulcsnak bármi áron egyedinek kell maradnia. minden sorban van értéke. Ez alól nincs kivétel: az elsődleges kulcs értékének mindig egyedinek kell lennie az adott táblában. amely min­ den sort egyedivé tesz. amit tudni kell az elsődleges kulcsokról Az elsődleges kulcsok kikényszerítik az egyediséget Az elsődleges kulcs egy olyan oszlop egy táblában. Az elsődleges kulcsot mindig egyedi értékre kell állítani! Az elsődleges kulcsot minden új sor beszúrásakor be kell állítani. Két sor soha nem tartalmazhatja ugyanazt az adatot az elsődlegeskulcs-oszlopban.biztosítják az egyediséget.

* ----. íme a SELECT utasítás: SELECT * FR0M e m a i l l i s t File Edit Window Help Email m y sq l> SELECT * FROM e m a i l _ l i s t . ADD PRIMARY KEY ( i d ) Most pedig szúrj be egy új vásárlót az adatbázisba. Ezt az alábbihoz hasonló INSERT utasítással hajthatod végre (vedd észre. 'd r a p e r @ s te r lin g -c o o p e r. | 1 rma 1 Don | last_n am e | ^ | em ail | I I | I d e :in y 3 m ig h ty g u m b a ll. és lásd az elsődleges kulcsot teljes pompájában. mini a MySQL-terminál vagy a plipMyAdmin SQL lapja.b iz drap& r8 s t e r l i n g . com e lb e rt@ k re s le e s p r o c k e ts . és próbálj egy új adatsort beszúrni egy elsődleges kulccsal! Egy olyan MySQL-eszköz segítségével. hogy kiderüljön. +---------I id f --------I 1 1 1 1 2 3 4 I f i r s t _name +--------. Ha esetleg elfelejtetted volna.| Denny I Irm a I E lb ert. hogy minden új Mrban egyedi maradjon. hogy az i d oszlop auto­ matikusan értéket kap-e az új sorban.c o o p e r . em ail) 'D r a p e r '. c o m ^ | | | 1 | B u b b leto n W e rlitz K reslee K reslee D raper ü rows i n set (0-0005 sec) most itt vagy ► 211 .Valószerű. hogy’ az elsődleges kulcsról nem történik említés): INSERT INTŐ e m a i l _ i i s t VALUES ('D o n '. (first_ n a m e.b iz e lb e rt@ k re s le e s p r o c k e ts .c o m ’ ) Végül adj ki egy SELECT utasítást a tábla tartalmának megtekintéséhez. last_n am e. n e t i w c r @ a l i e n s a b d u c t e d m o . írd be az alábbi ALTÉR TABLE utasítási az i d nevű elsődlegeskulcs-oszlop hozzáadásához: ALTÉR TABLE e m a i l _ l i s t ADD i d INT NŐT NULL AUTO_INCREMENT F IR S T . A* új id oszlop értéke ^omafikusan nővektfik. gyakorlati a/ka/mazasok Tesztút Módosítsd Elmer tábláját.

Jo e. ami egy SELECT segítségével kiolvassa az adatokat. a jelölőnégyzetek be­ viteli mezői pedig a lekérdezés által visszaadott sorokból jönnének létre. ha a vásárló azonosítóját a jelölőnégyzet értékében tárol­ nánk? így nem lenne látható. hogy inkább át kellene dolgoznunk az űrlapot. ha valahogy megkeresi az adatbázisban. de a parancsfájl elérhetné. fejezet . szóval m o s t a tá b la minden sorá n a k van egy egyedi elsődleges kulcsa. 212 4.irodai eszmecsere Oké. Joe: Klassz.. hogy felsorolja az összes ne­ vet az e-mail címekkel együtt. mindjárt odaérünk. A felhasználó nem tudhatja a vásárlók azonosítóját. és kiírja a jelölőnégyzeteket. hogy a fel­ használó egy vásárló azonosítóját írja be az e-mail cím helyett. automatikusan létrehozhatnánk az űrlapot. De mi történik. Csakhogy a felhasználó az adatbázis szerkezetéről sem tud semmit. és mindegyik mellett legyen egy jelölőnégyzet. amikor a felhasználó a Submit gombra kattint? Mi lesz a szerepe a $_P0ST-nak? Frank: Nyugi.. Mi lenne. de hogyan segít ez Elmernek. legfeljebb csak akkor. hogy’ a felhasználónak az e-mail cím helyett az elsődleges kulcs alapján kell kijelölnie az adatsorokat. De m it s e g ít ez? Elm er to v á b b ra is az e-m ail cím a la pján tö rö li Joe: A probléma az. Lehet. V Frank: így van! Vagyis csak annyit kell változtatnunk az űrlapon. amelyik megjeleníti az adatokat a táblából. No problemo! Jill: Ez valójában elég nagy problemo. Csináltam nektek egy vázlatot: A jelólonégyzet ér­ téke követi nyomon az id értékét. hogy az azonosító alapján ki­ választhassa a törlendő vásárlókat? Joe: Hm. Először írjuk meg a parancsfájlnak azt a részét. Jill: Nagyszerű ötlet! Egy ciklussal. Frank: Csinos rajz.

& MySQL-mágnesek Az alábbi mágnesek segítségével pótold a hiányzó kódot a Remove Email parancsfájlból g src~"blankface. $query).com'. 'theking'. 'elvis_store ’) L // A v á s á r l ó k so ra in a k m e g je le n íté s e tö rlé si je lö lő n é g y z e te k k e l $query = "SELECT * FROM email_Iist". jpg" width^"161" heig'nt="350" ait«"" style="float:right" /> name="elvislogo" src^"elvislcgo.mysqli_query($dbc. gyakorlati alkalmazások PHP. <?php $dbc = mysqii_conriect ('data. $resuit . or die('Error connecting to MySQL server.Valószerű. } mysqIi_close($dbc).'). while ( = mysqli_fetch_array($result)) { echo 'cinput type-"checkbox" value: echo echo ' ' echo ' ' echo '<br />'. ?> <input type="submit" name=" </form> " value®"Remove” /> re m o v e e m a il.gif" width="229" height^"32" border="0" alt="Make Me Elvis" /> >Please select the email addresses to delete from the email list and click Remove.p h p m o st it t vagy ► 213 . 'elmer'.</p> f o r m method-"post" action= If — echo $_SERVER['PHP_SELF']. makemeelvis. . '" name="todelete[]" />'.

PHP_SELc']. a DELETE-et végrehajtó kóddal egyelőre ne foglalkozz <imq src^'blankf a c e .</p> <form method="post" action-" | <?php echo $_SERVER[.php. - 214 4. tö rlé si je lö lő n é g y z e te k k e l S r e s u lt = m y s q li_ q u e r y (S d b c.5 e? f r |L olonep ’zetet az Elmer adatbázisában szereplő vásárlók számára. re m o v e e m a il. csak megjeleníti a jelölőnégyzeteket. mysqli_close($dbc).'). S q u e r y ) . / ellenőrződ «fiapof benyújtották-». fejezet . echo 1cinput type^"chcckbox" valuc$ Minden jelölonégyzet beviteli mezője egy vásárló adatsorából jön létre. je|5|í(lé§^ tben _ kés5ib ennek ^ ján törölheted a megjelölt vásárlókat.makerneelvis.gif" width="229" height*"32" border-"0" al-t»-"Make Me Elvis" /> <p>Piease select the email addresses to delete from the email list and click Remove. 1elvis_store ' ) // A v á s á r l ó k s o r a i n a k m e g j e l e n í t é s e $query = "SELECT * FROM email_üst". or d i e ( ’Error connecting to MySQL server.mysqli_connect (’data .jpg" width-="161" height="350" alt-*"" style="float.p h c ¡ E L ? - • « •*«„. while ( mysqli_fetch_array(Sresult)) { f Itt használod fel az elsődleges kulcsot . 'theking'.& MySQL-mágnesek — megoldás Az alábbi mágnesek segítségével pótold a hiányzó kódot a Remove Email parancsfájlból és iele . A belső' PHP-kódokat továbbra is a <?phf> és a ? > címkék között kell elhelyezned.-right" /> <img name="elvislcgo" src="elvislogo. Ne feledd e_ l 32 U JetrellOZasát S2olgália. mmm Ez az űrlap önhivatkoző! <?php $dbc . ?> <input type="submit" name=" | submit § " value— "Remove" /> </form> A parancsfájl egyelőre még sem milyen törlést nem végez. 'elmer*. " name-"todelete[]M />• .com ’. « " « * « • » .megoldás PHP.ft mysql-mágnesek .

hogy egy ciklussal végigmenj a t o d e le t e tömbön. amely íz űrlap bejelölt jelölőnégyzeteihez tartozó v a lu e jellemzők tartalmát tárolja. és • E'fcan KreaJee «¡Oef^TO*fewpT cía«.a szerepük létfontosságú. és egy SQL-lekérdezéssel töröld az űrlapon megjelölt vásárlókat.» BuDtiaror. Mivel a lelölőnégyzetek v a lu e jellemzői az elsődleges kulcsot tartalmazzák.Remove M d k é M É E L V fo O ) Minden jelölőnégyzet-ürlapmező egy vásárló azonosítóját tárolja.. 5 !5 O 0 * .*er v *>o p ck > r.jtz ¡wer®aiier?saíxíuctedme co* . hogy megadod a bejárni kívánt töm­ böt. A fo rea ch egy különleges ciklusfajta. Van azonban egy apró. a to d e le te Tömbben minden érték egy-egy a táblából törlendő sor azonosítója lesz. nam e=M o d e l e t e [ ] " > 1. Használhatnál w h i l e ciklust is. R o r) tmv Értem. amelyet a $_P0$T szuperglobálison keresztül érhetsz el. Ez lehetővé teszi.Dü O a z a z o n o s ító ju k a la p já n tö r ö ljü k a z egyes v á s á rló k a t. és a PHP gon­ doskodik a tömb elemeinek egyenkénti bejárásáról . $ r o w [ 'id '] . de annál jelentősebb különbség a jeiölőnégyzetek szokványos HTML-kódjához képest. hogy szerinted egy foreach ciklus hogyan haladna végig Elmer vásárlóazonosítóinak tömbjén: m o st i t t vagy ► 215 . » «•* w »»M ma Wur.még tesztfeltételre sincs szükség! írd le.ngcoopefcom . . de egy másik fajta ciklus elegánsabb megoldást nyújt. t A szögletes zárójelek egy tömböt eredményeznek a $_POST tömbön belül.Valószerű.a re ‘8e ''®» e 3 'o e sJ. E g ysze rű e n egy w hile c ik lu s s a l végigmegyünk a to d e le te tö m b ö n .a ■ D o n frap tr ^ rap e^ stD rt. amelyet kifejezetten egy tömb értékeinek bejárására szántak.rr K 5 fí. gyakorlati alkalmazások A jelölőnégyzetektől a vásárlóazonosítókig A jelölőnégyzeteknek a Remove Email parancsfájl által előállított kódja egyszerű HTML. amelyben az értékeket tárolni szeretnéd. . amelyben az <input> elem v a lu e jellemzőjébe belegyömöszöltük az el­ sődleges kulcsot (id ). echo ’cin p u t ty p e= "ch eck b o x ” v a lu e = "1 . Csak annyit kell tenned. Bizonyára észrevetted a szögle­ tes zárójeleket a jelölőnégyzet nevének végén . -M jke Me- A jelölőnégyzet nevének végén álló szögletes zárójelek a jelölönégyzet értékét automatiku­ san egy „todelete" nevű tömb­ be helyezik. illetve egy változót.

a foreach ciklus anatómiája Tömb bejárása a foreach segítségével A f o r e a c h ciklus fog egy tömböt.^s^ fo reach // S o r ($ P O S T [ 1t o d e l e t e 1 ] a t á b l á bDO l ó1 as $ d e le te id ) { A tömb elemei a $delete_id változón keresztül érhetők el. Ezzel a VáltOZÓVal é rh e te d Ahogy a ciklus egyenként végighalad a tömbelemeken. anélkül. ami elindít­ ja a DELETE lekérdezést. ^ A vásárlókat a $delete_id vál­ tozó segítségével törölheted. a következő f o r e a c h kódol használhatod: Itt a tömb a $_P0$T szuperglobálisban tárolódik. Az alábbi kód például a $ c u s t o m e r s változóban tárolt tömböt járja be: Az első* helyen a bejárni kívánt tömb áll. csak hozzá kell adnod azt a kódot a ciklus belsejéhez. { A ciklus belsejében minden elemet az imént megadott változónévvel érhetsz el. az adott elem értékét ideiglenesen egy’ változóba ír­ ja. azok értékét a $ d e l e t e _ _ i d változó tárolja.Remove el az egyes vásárlók a z o n o sítóját. és a „todelete" a zo n o sítja . Make Me . fejezet . és végigmegy annak elemein. tö rlé se }. hogy a f o r e a c h ciklus végigjárja a bejelölt jelölőnégyzeteket a Remove Email űrlapon. hogy ehhez egy tesztfeltételre vagy ciklusszámlálóra lenne szüksége. a vásárlókat tartalmaz« akiket bejelöltek ^ I a Remove Email ü rla H 216 4. hogy csak azokat Most.t)*z ty? D on D rap e r d ra p or@ s»rhng-cooper com ^ e oe Rmv $_POSTrtodeletel A tömböt úgy alk ottu k m eg. ideiglenesen egy ilyen nevű változóba írja azokat. $delete M a te M £ £ L v is . Ahogy a ciklus végiglépked a tömb elemein. Tehát ha a Remove Email parancsfájlban végig szeretnél menni a $_POST tömb­ ben tárolt vásárlóazonosítókon. és ténylegesen törli az egyes sorokat az emai l _ _ l i s t táblából.» e a e » t> u < oenr a jn. as $cu sto m er) f Ahogy a ciklus végighalad a tömb egyes elemein. majd törölhetai öke+ a táblából.e a M p le a se select the e m a il ^ d r e s s e s to Oelcie from tne ©maJ list a n a « « * Rem ove V f D enny BJbDleion <Jenny@rmghtygumbai> net irm W . fo reach echo ($cu sto m ers $cu sto m er.u ^fe i^n a d cwJm r Libert KresJen e K > « rt6 w o 5 ie e s?ro cke tt b a M irm a Kre$iee e!bori© *Te5aeesprtt*ats.

$row['id'] echo $row['f i rst_name1J. mysqli_close($dbc) . echo 1 ' . '" name="todelete[J" />'. ha az ű r l a p o t b e n y ú jto ttá k ) ) { { foreach ($ POST[*todeiete'] as $delete id) echo 'Customer<s) removed.<br />'.mysqli_fetch_array($result)) { echo 'cinput type="checkbox" value="' .p h p m ost it t vagy > 217 .'}. ’elmer1.mysqli_query($dbc.c o m 1. Squery). $row[1last_name'J . $row[*email'1. // A v á s á r l ó k so ra in a k m e g je le n íté s e a tö rlé si je lö lő n é g y z e te k k e l $query = "SELECT * FR0M émail_list". echo ' ' .makemeelvis. echo '<br />'. ?> <input type="submit" name="submit" value=’ 'Remove" /> </form> re m o v ee m ail. or dieí'Error connecting to MySQL server. . $resu]t .Valószerűf gyakorlati alkalmazások Gyakorlat $dbc = mysqli_connect('data. 'elvis store1) // A v á s á r l ó k if ( so ra in a k tö rlé se (csak akkor. 'theking'. while ($row .

/ / A v á s á r l ó k s o r a i n a k t ö r l é s e sarlókat..r e ’) or die(*Error connectinq to MySQL server...)| } echo ’Customer(s) removed.. while ($row ...... $query}....... fejezet ... ha a z ű r l a p o t b e n y ú jto ttá k ) ) { $deiete_id> { \d A törölni kívánt vásárlót ^ jd t\tit foreach (s_posTf ’ to d e ie te 1] ftuery) a $delete_id választja ki.. 'elmer1..php parancsfájl Egészítsd ki Elmer új..php parancsfájljának kódját úgy. $?-esuIt .p h p 218 4... . echo ’<br / > ’. 'Lheking'."SELECT * FROM erriailj íst" .mysqli_fetch_array($result)) { .M naine-"subniiL'' value=f kemove" /> .. 'e l v i s s L . $row[*last_name*].<br / > ’.... </form> re m o v e e m a il... s "p E L E T E FRO/V) c m a iljis t ~ Jd " .......a javított removeemail... akiknek a nevét bejelölték az űrlap benyújtása előtt! Gyakorlat .... hogy törölje azokat a vásárlókat. // A v á s á r l ó k so ra in a k m e g je le n íté s e a tö rlé si je lö lő n é g y z e te k k e l Squery . echo * 1 .... echo ' 1 . mysqli close($dbc)...mysqli_query ($dbc. echo '<input type=”checkbox" value-"* . ?> Cinput t ype="submit.').. Csak akkor törölje a Vá..megoldás • • • $dbc = mysqli connect ( 'dats . ha az űrlapot benyújtóti f * * ^ f _ P Ő S T as (csak akkor.makemeeivis.. . mint korábban. 1" name="todeiete[l" />■■... továbbfejlesztett removeemai 1 .. $row['id'j echo $row[ ' first_name'' . $row[1emailfJ. cörn'. A vásárlók jelölőnégyzeteit előállító kód ugyanaz.. or d icO E iriro r «^ucv*y’i d a t 3 b a s e ....

com 0 Elbert Kresiee elbert@kresleesprockets biz Irma Kresiee elbert@kresleesprockets. a webkiszolgálón már nincs szükség a r e m o v e e m a i l .ö .com D Elberr Kresiee elben@kresleesprockets. P Denny Bubbleton denny@mightygumball. és nyisd meg a parancsfájlt egy webböngészőben. majd add hozzá az űrlap benyújtásakor a megjelölt vásárlókat törlő kódot. Ha bejelölsz egy vásárlót. és változtasd meg a < fo rm > elem a c t i o n jellemzőjét is. és a Submit gombra kattintasz. és kattints a Submit gombra.s x o m Please select the email addresses to delete from the email list and click Remove. n Ü niJIIfH r 6nfjv liinW 4 ™ ü . the email s£us?omer(s) removed. vagyis a törölt vásárlók el­ tűnnek a listáról. és a listát is fris ­ síti.Email ___ — — M aV ^M ^Lv.Valószerű. h t m l oldalra. hogy a régi e-mail címmező helyett je­ lölőnégyzeteket jelenítsen meg a vásárlók nevével. Ezt követően töltsd fel a r e m o v e e m a i l .p h p egy önhivatkozó űrlapot használ.p h p új változatát a webkiszolgálóra.net r Irma Wuriitz iwer@aliensabductedme. úgyhogy nyugodtan törölheted. n o n Make Me Elvis r Remove.blz Don Draper draper@s1eriin9-cooper. a vásárló törló'dik az adatbázisból. Az űrlap nyomban megváltozik.p h p parancsfájl kódját úgy.n e t ir r v i □ irma Wurtitz ¿wer@ai»ensabductedme. hogy az űrlap önmagára hivatkozzon! Most. hogy a r e m o v e e m a i l .com Remove M a k e / ie E i. hogy a vásárlók törlése utáni állapotot tükrözze.biz □ Don Draper draper@sterl1n3 -cooper.u n a e n n y © m lg h fy g u m b a l/. m ost i t t vagy ► 219 . gyakorlati alkalmazások Tesztút Vidd el Elmer felturbózott Remove Email parancsfájlját egy körre! Módosítsd a r e m o v e e m a i l .com ( Remove A parancsfájl megerősíti a vá­ sárló törlését. Jelölj be néhány vásárlót.

Az élet nem is lehetne szebb! MateMeEi-vís./y“..« Ü »m W i*tr •**ra*'<*nuöCuG»©'-*.w v a makemeelvis.... értesítést küldhet a fantasztikus akciókról.coi E i j w OM. a » _ ^ tfIT * 1 D *****. méghc zá csak azoknak a vásárlóknak.. /■ > .!* « m i m ------- M M — aki* á ---------------EJvts - £m *i4 M a k e M e E u v ís . — Mr .M ü Ma^MgELVt^CűH PnfM t * UaM W« Etm ?*£. ’ S C S S S U ^ .# . akik a sötét oldalra tévedtek. tf-yy-'ss .c y M «« « h».a>^ J ié i^ &D*nKntim v fSébmiF...V tJT'-ATö fnar-^KJ kCI ní> rc w i SoVctoftmi. akik szeretnének ilyet kapni* és törölheti azokat a vásárlókat.EK* .com! w w •-x:' 7.T Boűyof wraih____ b«5 **>!♦. -/ * ■ 4 - ■ s.. vagy csak le szeretnének kerülni a listáról. #<lw«öVMi*>«í>n>e*eB*a Önti Dmv*r c'tw ttiírtf^-cccoe» con Fiftinanfr LJ* Oat»» E a. ----ftffi v. !' I®S & Elmernek most már egy tökéletesen működőképes alkalmazása van: vásár lókat vehet fel a listájára. ^* *3C031 — s? 3 .* /jio«tfSie*x/vc«pux* '■ rn fr —w S É fU uP T .......'-**'*• ifid -W.H anrt cfa* ftwn&v« at i lX > 23* C? | v'M 4» [ p í fate Me.

Egy igaz/hamis tesztfelté­ tellel és némi műveleti kóddal el­ látva az if utasítás mindenféle ügyes döntést tesz lehetővé. anélkül. amelynek a segítségével elemenként jár­ hatsz be egy tömböt. jónéhány új PHP. A cikluson belül a tömb minden eleméhez hozzá­ férhetsz. vagyis a true false lesz. a false pedig true. ha mindkét érték igaz. ü isset(). most itt vagy ► 221 . és azt határozza meg.empty( ) A PHP beépített issetO függvénye azt vizsgálja. ScSc. gyakorlati alkalmazások PHP & MySQL szerszámosláda Miközben Elmer webalkalmazását magasabb szint­ re emelted. false értéket vagy NULL-t) tartalmaz-e. akkor az eredmény csak akkor lesz igaz (taie). például egy új adatoszlopot vesz fel.Valószerű. ALTÉR TABLE A tagadás (negáció) művelete (más néven NŐT) megfordít egy igaz/hamis értéket. Ez az SQL-utasítás egy tábla szerkezetét változtatja meg. Ha az if utasítást egy alternatív művelettel is el szeretnéd látni. hogy egy tesztfeltételt kellene használnod. hogy anélkül módosítsd egy tábla szerkezetét. =“i ^t •• • foreach PliP-ciklusszerkezet. hogy egy változó lé­ tezik-e. Az emptyO függvény ennél még egy lépéssel továbbmegy. vagyis hogy kapott-e ér­ téket. O R Logikai műveletek. és újra lét­ re kellene hoznod a semmiből. hogy töröl­ nöd kellene a táblát. hogy a válto­ zó üres értéket (0-t. Gyak­ ran használják őket if utasítások és ciklusok vezérlésére. ha leg­ alább az egyik érték igaz. A I I (OR) segítségével törté­ nő összekapcsolás ezzel szemben akkor ad igaz eredményt. else A PHP if utasítása annak alapján hoz döntéseket. Ha két ér­ téket az && (AND) kapcsol össze.és MySQL-elemet is­ mertél meg: if. hogy valami igaz-e. egy else záradékot adhatsz hozzá. amelyekkel igaz/hamis értékeket tartalmazó ki­ fejezések építhetők fel. Ez lehetővé teszi. üres karak­ terláncot. ame­ lyekkel értékeket összevető teszt­ feltételek állíthatók össze. Összehasonlító műveletek.

.

és a virtuális káposzta is megmaradjon . hogy a fájlokat és adatbázisokat együtt használva olyan PHP-alkalmazásokat építhetsz. mint a JPEG-képek és a PDF-dokumentumok? Tényleg van értelme az értékes gitárpengető-gyűjteményedről készült képeket egy adatbázis-táblá­ ban tárolni? Nos. az olyanokkal. hogy a virtuális kecske is jóllakjon. Tény.ebben a fejezetben megmutatjuk. Az ilyesfajta adatokat jellemzően fájlok tárolják. és ott is fogjuk hagyni őket. de mi a helyzet a bináris adatokkal? Tudod. Én meg a „sáska*1 m appába te szle k Ne dőlj be a felhajtásnak.. ame­ lyek bináris adatokkal vannak tele. ez egy új fejezet 223 .m árm int ami az adatbázisokat illeti. általában nincs. hogy kirtínően alkalmasak mindenféle szöveges adat tárolásá­ ra..Fájlokban tárolt adatok kezelése Amikor egy adatbazis x egyszerűen nem eleg J o g o s u lt vagy fö ltö lte n i a k a já t a szám ba. és én a „finom m appában fogom e lra k tá ro z n i. iMindazonáltal van rá mód.

A gond csak az.. hogy jelenleg nincs mód a pontszámok ellenőrzésére.High Scores W ek u m t. hogy korona kerülhessen az igazi Guitar Wars-bajnok fejére. 224 5. kinek a pontszá­ ma valós. hogy ezek m ind valóé p o n tszá m o k b iz o n y íté k o t követelek! Mivel nincs mód az ellenőrzés­ re. és nagy a vita. v A szövegben nem lehet bízni Jelenleg a játékosok sima szövegként teszik fel az eredményeiket. A marakodásnak csak egyféleképpen lehet véget vetni.clg Guitar Wars . és kinek nem. add a listához fl.g a jit pontezim i P Ë K b l i odatl Ez kam ui Nem létezik. hogy az elért leg­ magasabb pontszámúkat rendszeresen közzé is teszik a Guitar Wars webhelyen. amelynek a karbantartását történetesen rád bízták.. Guttar Warrior.olyannyira. fejezet .Rekordok Üdv. Belita. a szkeptikus virtuális rocker. A népszerű új játék. hogy felvegyék a saját pontszámúkat a dicsoségtáblára. G u ita r Ware . ^. hogy kinek valós a pontszáma. hogy vir­ tuális gitárjátékukat versenyképessé tegyék . a Guitar Wars (Gitárok háborúja) játékosai azon fáradoznak.a „ Gitárok háborúja " képernyöfe/véte/eket kér A virtuális gitárosok szeretnek versenyezni Világos. hogy* a l’art pour Pari alkotás nem mindig elegendő. nem tudni. gitárból! Elég jó vagy ah­ hoz. ho^y bekerülj a legjobbak köz# Ha igén. do you have wh« A Guitar Wars alkalmazás lehető­ vé teszi a felhasználóknak. és kinek nem.

hanem képek (képernyőfelvételek) is lesznek rajta. Ez azt jelenti. hogy Eddie csaló gitáros. amikor benyújtják a pontszámúkat. hogy megállapíthasd. önjelölt rocker és Ouitar W/ars-pontszámhamisító. hogy a dicsőségtábla nem csupán pontszámokból.' H<gh Scopes 345900 Name: Eddie Vanilfi Daie: 2008-04-23 09*>6. Eddie. most Itt vagy ► 225 .Fájlokban tárolt adatok kezelése a bizonyíték Az elért poniszámok képi megerősítésére van szükség ahhoz. és kié nem. A fényképes megerősítés hiánya elárulja. 282470 V a n *: Bcliia Chcvy Date: 2008-04-23 09 Name: BELITAC S co re : 3 6 8 42 0 Name: Ashton Simpson D 2008-04-23 09:13:34 aze: Belita pontszáma a benyújtott képernyőfelvételnek köszönhe­ tően bizonyítást nyert.35 Nem b izo n yíto tt! A z t m ondod. ne­ vekből és dátumokból fog állni. kié T alós. tényleg meg kell ta n u ln o m já ts z a n i ezen a vacakon? b a s s z u s . A Guitar Wars alkalmazásnak tehát lehetővé kell tennie a felhaszná­ lóknak. hogy feltöltsenek egy képernyőfelvételt az eredményükről.

és az adatok egy g u i t a r w a r s nevű MySQL-adatbázistáblában tárolódnak. ami az alkalmazás felhasználói felületének részét képezi. Gater Wamor. fejezet . Ezeket az információkat egy űrlapon lehet megadni. G uitar W ars •High Scores Welcome. <enrry Lorvt/ S co rc: m 930 Az Add Your High Score oldal egy űrlapot jelenít meg. valamint magát a rekordot. Guitar Wars .<i& -A 127650 Paco Jwiimuv D»u: 20CS-04-2J 14:V7:J4 Stmt- # 98430 MW N evtf Dau.a guitar wars alkalmazás felépítése Az alkalmazásnak tárolnia kell a képeket A Guitar Wars rekordtároló alkalmazása jelenleg háromféle információt tárol: az újonnan felvitt pontszám dátumát és időpontját. ju s iik) W i:s£»JLa. 368420 Ntmc: Athlon Strep*» D#ir.. az eredményt elérő személy nevét. Az újonnan fe lvitt rekordot az alkal­ mazás megerősíti. hogy a felhasználó értesüljön a sikeres bevitelről 226 5.l3J4 ^ — G u itar W iu s .A d d / w r.20<»8-04 22 2i:27j4 345900 Name: Eddr Y audit D«Jc 2Ü0S-O4-2? 0*06:35 282470 -Name: ReliuCbcvy Date: 2008-04-23 09:12:53 A Guitar Wars főoldalán található „add your own score" hivatkozás az Add Your High Score (Add meg a rekordodat!) oldalra vezet.»0K<H-23 09.Add Your High Score ^ 3/nc. ahová be le­ het írni a nevet és a pontszámot (a dátum. illetve az időpont auto­ matikusan a bevitel ideje lesz). do you have wtm ft a * « » cajcX tbc score »át? if «0.

Date:20«M f-0»-23C^06:?3 282470 Nanw: BOna Chnry Date: 200SW -B 09:12:53 368420 IHt*: 200*04-23 0 *1 3 M Nao» Achwir.-34 98430 Name: Ne*ü fotauttw Dale: 200»A i-22 21:27:54 345900 Xam « Eddie VttflH Az újonnan bevitt pontszám rögtön meg­ jelenik a G uitar Wars’ tőoldalán. A guitarwars tábla az adatbázis egyes rekordbejegyzéseiben a pontszám mel­ lett a nevet is tárolja. SircpKK 64930 Name: Jíecoy Lavte D ate 200UM 23 MJKSO m o st it t vagy ► 227 . és hoz­ záadja azt az adatbázis guitarwars táblájához. e's automatikusan jön létre minden sorhoz. guitarwars Itt az a pontos dátum (és idő) szerepel. Guitar Wars ^'elcnuie. majd az Add (Hozzáadás) gombra kattintott.Fájlokban tárolt adatok kezelése Ez az azonosító az adat­ bázis elsődleges kulcsa. Paca Jtsonui Date: a»S<H . az alkalmazás meg­ erősíti az új rekordot. Guitar Wat 1127650 Sama.22 1437. amikor a pontszámot felvitték a Guitar Wars alkalmazásba. id dote nam e store 2008-04-22 14:37:34 2 3 4 5 6 2008-04-22 21:27:54 2008-04-23 09:06:35 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04-23 14:09:50 Paco Jastorius Nevil Johansson Eddie Vanilli Belita Chevy Ashton Simpson Kenny Lavitz 127650 98430 345900 282470 368420 64930 I Miután a felhasználó beírt egy nevet és egy pontszámot.

org/1999/xhtml" xml:lang-"en" lang="en"> <head> <title>Guitar Wars .guitarwars. az alábbi címről: www. // A ponLszántok tömbjének bejárása ciklussal és HTML ként tormázva echo '<table>’.High S c o r e s < / h 2 > <p>Welcome. 'gwdb'). .w3. Srowl'name'] . hogy helyet csinálj a rekordokat megerősítő képernyőfelvételeknek. Karikázd be és lásd el megjegyzésekkel az alkalmazás azon részeit. $row [*score• . hogy az alkalmazás támogassa a felhasználók Gyakorlat által feltöltött képeket! chtmi xralns=*"http://www.net’. ’<span class ^"score"^ . fejezet . } '<strong>Name:</strcng> ' . ess Ezen a fájlon nem kell változtatni. mysqli_ciose($dbc). amelyeken változtatni kell ahhoz. just <a nref=í"addscore. f </td></tr>r.css" /> </head> <body> <h2>Guitar Wars .High Scores</title> clink rel="stylesheet" type-"text/css" href="style. * $data * mysqli_query ($dbc. / / A pontszám kiolvasása a MySQL-adatbázisbói Squery = "SELECT * FROM guitarwars".php">add your own s c o r e < / a > .< / p > <hr /> <?php // Csatlakozás az adatbázishoz $dbc = mysqli_conneet<'www. while ($tow = mysqli_fetch_array($data)) { // A echo echo echo echo pontszámok megjelenítése ’ctrxr. . h e a d f i r s t l a b s .php g u it a r w a r s f t Töltsd le! A Guitar Wars alkalmazás teljes forráskódja letölthető a Head First Labs webhelyerői. echo '</table>'. Guitar Warrior. $row('date'] . $query).<strong>Date:</strong> ’ . •</span><br />'. do you nave what it takes to crack Che high score list? If so.scoreinfo">’.lásd el megjegyzésekkel a kó d o t! A Guitar Wars rekordiároló alkalmazást módosítanod kell. c o m / b o o k s / h fp h p 228 5. 'rockit*. r <bc />'.d class-. 'admin'. úgy­ hogy ne törődj vele. ( sty/e. } ?> </body> </html> ~ index.

?>"> <iabel for='’ name">Name:</label><input type="text" id="name" name*"name" value="<?php if (Íempty($name)) echo $name.phpt *>4lt. 'rockit'."INSERT INTO guita-wars VALUES (0. ’admin'. $name . $query). // Az adatok beviLele az adatbázisba Squery . ) el se { echo ’<p class="error">P?ease enter all of the .Fájlokban tárolt adatok kezelése chtml xmlns-"http://www.net’. ’<p><a href="index. ) <hr /> <form method="post " act ion="<?php echo $ SERVER [’PHP_SF. if (!empty($name) 5 5 !empty{$score) { ) // Csatlakozás az adatbázishoz Sdbc = mysqli_ccnnect('www.\ < / v > ’. ’ <br />’. ’<strcng>Score:</stror.tszám törlése az űrlap alaphelyzetbo állításához $name = Sscore = mysqli_close($dbc). Back to high scores</ax/p>’. ’<p><strong>Name:</strong> ’ . Sscore = $ POST[’score’].guitarwars.Add Your High Score</title> < l m k rel="stylesheet" type="text/css" href="style. // A por. //A echo echo echo echo művelet sikerének megerősítése a felhasználó számára ’ <p>Tnanks for adding your new high score. ’Sscore')". ?>" /> <hr /> <input type-"submit" value="Add" name="submit" /> </form> </body> </html> a d d s c o re .ess" /> </head> <body> <h2>Guitar Wars . ’gwdb*).LF ’].g> ’ .Add Your High Score</hP> < ?php if (isset($_POST{’submit']) < ) / / A pontszámok kinyerése a POST tömbből $nome = S_?OST['name’]. NűW().org/1999/xhtml" xml:lang="en" lana=nen"> <head> <title>Guitar Wars . ’Sname’.</p>’. $sccre .w3.p h p m o st Itt vagy ► 229 .information to add 1 ’your high score. mysqli_query($dbc. ?>" /><br /> <label for="score">Score:</label><input type="text" id="score" name-"score’ value-"<Vphp if (!empty(Sscore)) echo Sscore. T</p>’.&lt.

“ a c o r e in fo . Karikázd be és lásd el megjegy zésekkel az alkalmazás azon részeit.guitjrw ars. <head> \ < t l t l e > G u i t j r Wars a\ c Your High S c o r e < / t ít le > ! <Zink r e l = " s t y l e s b e « t " V p « = " t e x t / c s s " h r e í= " s t y </bead> <body> <h2>Guitar Wars Add Your HjgW Score</h2> <?php i f ( 2 S S ö t( $ _ P O S T [‘ s u b m i t 1 ] ) J ( .ext. fejeze t .a megjegyzésekkel ellátott g u ita r w ars-kod ■ '^¡& P Gyakorlat — megoldás <hr.'‘3 ty L c sh e e t </head> <body> < h 2 > G u ir . P > < h r /> A képernyöfelvételt tartalmazó fájlt is ki kell nyerni az űrlap POST-adataiból." act:on="<?php echo |l | i | ' I I | ' 1 1 < la b e l f o r "name">Name:</l a b e l X ir i p u t type " t e x t " Id="narae" rane^nam'*" value="<?php i f <!empty( Snarae)) echo $name.m ysq U a d std n <html xn.13:34 Pq c o - uwn ’ Jastorh 127650 98430 345900 282470 368420 lU i'W 'JS'post. $row i' s c o r e * ] . S sco re = S__POS7 [ 1s c o r e ' 1 i C (! empty (Sname) & ferapty (S sco re ) ) & m y sq li_ co rm e ct 1 ' w w w . i ' ■ -i ~ -n -. ?>" / x b r /> < ia b e l f o r = " s c o r e " > S c o r e : </l a b e l X í n p u t t y p e = " t e x t " id = " s c o r e " na-ne="sc 3 .35 2008-04-23 09:12:53 2008-04-23 09. <input type' </form> </body> v a l u e . bog fájlneve nem üres-e <?php / / C onnect to $óbc . $ rowi ' d a t e ' ] 2car*">' 5name = S_POST| 'r. hogy helyet csinálj a rekordokat megerősítő képernyőfelvételeknek. hogy az s kalmazás támogassa a felhasználók által feltöltött képeket! 1999/xhtmi <head> High S c o r * 3 < / t it l e > < L irle > O u ita x «ara ■ tvce-'"T. $row ['name*1 < /a tro n g > < / a t r o n g > ' .net / / A r r - Az SQL-lekérdeze'snek a kép fa'jiw vét is be kell szart * a guitarv/ars táblád m y s q li a főoldalon S q u e r y ^ ^ I N S E F ? IN T O g u í t a r w a r s VALUES < 0 .* 3 C o r e < / a > ."Add" n.lns=K http://www\w3. a r W a rs . valu«="<?php i i ( ! empty( $ s c o r e j > echo S s c o r e . NOW () m y s q l. Novil Johans* 2008-04-23 14:09:50 A táblában egy új oszlop ra van szükség az egyes rekordokhoz tartozó kép ernyőfelvételek fájlnévé nek tárolására.¿ 3 t? I.ml x m L n s .. pm .. .iixe=" submit" /> < h l> / tm Az űrlapon egy < in p u t> elemre van szükség a kép­ fájl kiválasztásához. Gu i t a r Wc h ig h s c o re . 230 5./C33" h » <IinK r e l.-.ame' ] .org/1999/xhtml" xml:2an." h t t p s / /v»w w A Guitar Wars rekordtároló alkalmazást módosítanod kell.■ • __________ < /b o d y > </html> in d e x . amelyeken változtatni kell ahhoz.H ic < p >We lc c n i e .06. < '. Ellenőrizni kell.p h p A képet is meg kell jeleníteni a fel­ használónak a siker megerősítéséhez g u it a r w a r s 2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09. ?>" /> .

Fájlokban tárolt adatok kezelése

A képfájlok feltöltésének megtervezése i Guitar Wars alkalmazásban
Bár nem tűnik valami nehéznek megoldani, hogy a Guitar Wars alkalmazás támogassa a képernyőfelvételek fel­ ü té sé t, a programot több szempontból is módosítani kell, ezért nem árt, ha rendelkezel valamilyen haditervvel, mielőtt fejest ugranál a kódba. Először is tekintsük át, hogy milyen lépések szükségesek a rekordokat megjelení­ tő oldal átszabásához, hogy a képernyőiéivételek is megjelenjenek rajta: Egy screenshot (képernyőfelvétel) nevű oszlop

0

hozzáadása a táblához az ALTER paranccsal.
Először is szükség van az adatbázisban egy új oszlopra az egyes képernyőfelvételek fájlnevé­ nek tárolásához. Mivel a tervek szerint minden képfájl ugyanabba a mappába fog kerülni, az adatbázisban csak magát a fájlnevet kell tárolni 1 _so,e*m t fi© (tehát az elérési utat nem).

Fájlfeltöltő m e z ő T i h ^ é s T a ^ ^

~—

~ : ; ehe,óvétes* *
aP n s á o b v t l r e é ' ^ ^ ^ Ű 'p otzmkeieée z * " ra d s t n de yf)b™ “ « 3 A a o kl m6. o í a o g ó]e 2 l p t el vtl mez» aw b ö g s ő e iei e b n é z v l Z a d s v l E abe Zaaáa- z rl,hogym g e e őf l l i k z s ng n o k d k óa e f j l eüd o o e o d s o i
»

« tó s fa s a r“
Choose File

r

m

d

e

i

-

Egy INSERT-lekérdezés megírása, amely be­ szúrja a képernyőfelvétel fájlnevét a tábla screenshot oszlopába.
Az Add Score parancsfájlnak, amely feldolgozza a re­

Screen shot:

phizsscore.gif

kordbeviteli űrlapot, az új fájlfeltöltő mezőt is figyelem­ be kell vennie, és gondoskodnia kell a képernyőfelvé­ tel fájlnevének beszúrásáról a s c r e e n s h o t oszlopba, amikor beszúrja egy új rekord sorát a g u i t a r w a r s táblába.
stfewtsJiot

phizsscore.flrf

A Guitar Wars főoldalának módosítása, hogy a rekordok mellett megjelenítse a képernyőfelvételeket is.
A bevásárlólista utolsó pontja a Guitar Wars főoldalának, az in d e x . php-nek a módosítása. Ezt az oldalt úgy kell módosítanod, hogy a pontszámok mellett megjelenítse a hozzájuk tartózó képernyő­ felvételt is.

most itt vagy ► 231

a tábla m ódosítása az ALTÉR paranccsal

A rekordadatbázist módosítani kell az ALTÉR paranccsal
A PHP-parancsfájlok különféle csűrése-csavarása mellett a képekkel felturbó­ zott Guitar Wars alkalmazásnak egy új oszlopra van szüksége a gui ta rw a rs táblában a képernyőfelvételek fájlnevének tárolására. Itt jön a képbe az SQL, amely az ALTÉR nevű utasítást kínálja: ezzel az utasítással mindenféle érdekes módon megváltoztathatod a táblákat, például új adatoszlopokat adhatsz hozzá­ juk. Az előző fejezetben Elmer e m a i l _ l i s t táblájának módosítására már hasz­ náltad az ALTÉR utasítást, de nem árt. ha átismételjük, hogy miként is működik a parancs:

Az ALTER paranccsal egy adatbázis szerkezetét módosíthatod.

ALTÉR TABLE guitarwars DROP COLUMN score
A DROP COLUMN utasítás egy ^ teljes oszlopot töröl egy táblából.

Az ALTÉR utasítást gyakran a TABLE kulcsszó követi, I ami azt jelzi, hogy egy táblát módosítunk. Az ALTÉR DATABASE paranccsal ugyanakkor egy teljes adatbázis szerkezete is módosítható, de ez már egy másik tört黫L

Na jó, lehet, hogy ez veszélyes példa, mert azt mutatja be, hogy miként törölhetsz egy teljes oszlopot egy táblából az összes adatával együtt. Természetesen előfordulhatnak azonban olyan helyzetek, ami­ kor el kell távolítanod egy adatoszlopot egy táblából, bár gyakoribb, hogy fel kell venned egy új adat­ oszlopot - ahogy a Guitar Wars esetében. Ezt az ADD COLUMN parancs teszi lehetővé, amely az a l t é r utasításhoz adható számos módosító parancs egyike.

DROP COLUMN ADD COLUMN
Ez a parancs egy új oszlopot ad a táb Iához - csak meg kell adnod az osz­ lop nevét és típusát az A D D C O L U M N után.
AFTER TABLE guitarwars

ADD COLUMN a g e TTNYINT

MODIFY COLUMN CHANGE COLUMN
Ezzel a paranccsal egy oszlop nevét és adattípusát módosíthatod - csak meg kell adnod az oszlop régi és új nevét, valamint az új adattípust a CHANGE COLUMN után.
ALTER TABLE guitarwars
CHANGE

Ez a parancs egy oszlop adattípusát vagy a táblá­ ban elfoglalt helyét módosítja - csak add meg az oszlop nevét és új adattípusát a m o d i f y COLUMN után. Ha az oszlop helyét szeretnéd megváltoztat­ ni, az oszlop nevét és pontos helyét (ebben az esetben a ?■ r s t - első —az egyetlen választási lehetőség) vagy az oszlop viszonyított helyzetét (AFTER másik létező oszlop neve - vagyis melyik oszlop után következzen) kell megadnod.
AT.TER T A BL E g u i t a r w a r s

COLUMN s c o r e h i g h _ s c o r e

232 5. fejezet

Fájlokban tárolt adatok kezelése

ki a ceruzád! ---------------------------------------------------------------------SQL-utasítást, amely egy új, s c r e e n s h o t , nevű oszlopot ad a g u i t a r w a r s táblához, és ne felejts el megadni egy megfelelő MySQL-adattípust az új oszlop számára! Ez után írj egy újabb SQL-lekérdezést, amely ellenőrzi a tábla szerkezetét, hogy meggyőződhess róla, hogy az oszlop felvétele sikeresen megtörtént!

^

-----------------

id | 1 2 3 4 z, ^jr 6

«iot«___________ 2 0 0 8 -0 4 -2 2 1 4 :3 7 :3 4

nam e________ 1

store

screenshot

Paco J a s t o r i u s ! 1 2 7 6 5 0 H e v il Johansson Eddie V anilli Belita C h evy Ashton Simpson Kenny Lavitz | 98430 345900 1282470 [ 368420 1 64930

1 2 0 0 8 -0 4 -2 2 2 1 :2 7 -5 4 | 2 0 0 8 -0 4 -2 3 0 9 : 0 6 : 3 5 1 2 0 0 8 -0 4 -2 3 0 9 :1 2 :5 3

I
1

2 0 0 8 -0 4 -2 3 0 9 :1 3 :3 4 _ a. wv w

1 2 0 0 8 -0 4 -2 3 1 4 :0 9 :5 0

Ide írd az oszlopot a táblához adó utasítást.

Ide Jön a másik SQL-utasítás.

most itt vagy ► 2 3 3

Hegyezd ki a ceruzád! - megoldás

r |

Hegyezd ki a ceruzád! ^ -V Megoldás
írj egy SQL-utasítást, amely egy új, s c r e e n s h o t nevű oszlopot ad a g u i t a r w a r s táblához, és ne felejts el megadni egy megfelelő MySQLadattípust az új oszlop számára! Ez után írj egy újabb SQL-lekérdezést, amely ellenőrzi a tábla szerkezetét,--------O/ meggyőződhess róla, hogy ----------- - " 7 hogy az oszlop felvétele sikeresen megtörtént!

ALTER utasítás hozzáadja az új screenshot oszlopot a guitarwars táblához.

guitarwars
name
2 0 0 8 -0 4 -2 2 1 4 :3 7 :3 4 2 0 0 8 -0 4 -2 2 2 1 :2 7 :5 4 2 0 0 8 -0 4 -2 3 0 9 : 0 6 : 3 5 2 0 0 8 -0 4 -2 3 0 9 :1 2 :5 3 2 0 0 8 -0 4 -2 3 0 9 : 1 3 : 3 4 2 0 0 8 -0 4 -2 3 1 4 :0 9 :5 0 Paco Jastorius N e v il Johansson E ddie V anilli Belita C h e v y A shton Sim pson Kenny Lavitz
s<ore scraenshot

127650 98430 345900 282470 368420 64930

Mivel az oszlop új, kezdet­ ben üres (NULL értékű) a tábla minden sorában.

Az ALTER utasítás a tábla többi adatát nem érinti.
gui-bv-wars

Az ALTÉR TABLE parancsot a módosítani ki* vánt tábla neve követi.

Az ADD COLUMN azt jelzi, hogy a tábla módosítása egy új adatoszlop felvételéből áll.

Az új oszlop nevét és adattípusát utolsó­ ként kell megadnod az SQL-lekérdezésben. 64 karakter elég helyet biztosít a legtöbb képfájl nevének, de ennél hosszabbra is ve­ heted az oszlopot, ha tutira akarsz menni. D K C R IB E , ^ui-tarwa«

Ez az utasítás megjeleníti a tábla szerkezetét az osz­ lopnevekkel és az oszlopok adattípusával együtt.

Az első lépés megvan!

Egy screenshot nevű oszlop hozzá­ adása a táblához az ALTER paranccsal

234 5. fejezet

Fájlokban tárolt adatok kezelése

Add a screenhot oszlopot a guitarwars táblához!
Valamelyik MySQL-eszköz segítségével hajtsd végre a s c r e e n s h o t oszlopot a g u i t a r w a r s táblához adó ALTER utasítást, majd add ki a DESCRI BE utasítást a táblaszerkezet megtekintéséhez, és ellenőrizd, hogy az új oszlop valóban A 0üíf*W8 rs tábla eredeti létrejött-e. változatát úgy építheted fel
fik Fdn
\MnOC

JE 5 C S IB F

.. nvi -

. k m d 3 Guitar Wars pél' N u ll | Key D e fa u lt 1 tx tra ^ •i — Mm 1 KO | PP.i ; KULI I a n te -increm ent I 1 NC 1 '-■URFENT TIMESTAMP 1 “ , NO | 1 NUT-i. 1 KO | 1 1 140 1 •

a

fcSCRlBE utasí­

F ie i 1

| Typein t ill) 1 tim e stamp v a r c h a r (32) 1 i n t (1 1 )

d ^ d já t , majd végrehajtod

3 9<"t*rwm.sql fájiban
ató SQL-lekérdezést.

f/l aá

tás ;‘ lfedi az új
screenshot oszlopot,

c*d t e n 'an,'í score

r c r ^ e r .s h o t 1 ‘ r-archar (64)

Nincsenek

hülye kérdések
Í V ! Az ALTÉR paranccsal felvett új oszlo­ pokat az adatbázis-tábla végéhez kell hozzáadni?
V l Nem, bárhová kerülhetnek, de tartsd észben, hogy az oszlopok sorrendje egy táblában nem iga­ zán fontos. Más szavakkal, a le­ kérdezések eredményét tetszőle­ gesen rendezheted, hogy az ada­ tok az általad kívánt sorrendben jelenjenek meg. Ha viszont az oszlopok adott sorrendbe állí­ tása megnyugtatja a rendszerető lelkedet, az új oszlopnak megad­ hatod a pontos helyét; ehhez csak a F IR S T kulcsszót kell megadnod az ALTER-lekérdezésben, vagy az AFTER o s z l o p utasítást, amely az új oszlopot egy másik oszlop után helyezi: ALTER TABLE g u i t a r w a r s ADD COLUMN a g e TINYINT AFTER name Ha nem adod meg, hogy hová szeretnéd beszúrni az új oszlopot, az oszlop alapértelmezés szerint a tábla végére kerül.

! Azért a régebbi sorokba is be lehet szúrni képernyőképek fájlneveit, nem?

V

I C ! Mi történik a rekordadatbázis meglevő adatsoraival a s c r e e n s h o t oszlop hozzáadása után?

V

I Mivel az ALTER utasítás csak az adatbázis szerkezetére hat. az új s c r e e n s h o t oszlop min­ den korábban létezett sorban üres lesz. A később létrehozandó so­ rokban fel lehet tölteni előre a s c r e e n s h o t oszlopot, a ko­ rábbi sorokban azonban kivétel nélkül üres lesz.

! Természetesen, és ezt az UPDATE SQL-utasítással végezheted el. Azt semmi sem akadályozza meg, hogy saját kezűleg képfájlokat tölts fel a webkiszolgálóra, majd az UPDATE utasítással kitöltsd a meglevő sorok s c r e e n s h o t oszlopát. Ne feledd azonban, hogy itt a felhasználók által feltöl­ tött képfájlok támogatása a cél, ezért lehetővé kell tenned nekik, hogy feltöltsék a saját képernyő­ felvételeiket - pontosan erre szol­ gál a továbbfejlesztett, immár ké­ pekre támaszkodó Add Score pa­ rancsfájl, amit most fogsz elkészíteni...

most Itt vagy ► 2 3 5

képek feltöltése az add score űrlap segítségével

Hogyan szerezzünk képeket a felhasználóktól?
Most, hogy hozzáadtál egy új oszlopot a rekordokat tároló adatbázishoz, készen állsz arra, hogy lehetővé tedd a felhasználóknak, hogy feltöltsenek egy képfájlt. De ho­ gyan érheted el ezt? FTP-vel? Telepátiával? Nos, az Add Your High Score (röviden Add Score) parancsfájlhoz kell visszatérned, amelyen egy űrlapmezővel adhatsz le­ hetőséget a felhasználóknak, hogy kiválasszák a feltöltendő képfájlt.

----------C ™ * * « - A d d

Guitar Wars - Add Your High Score
Name: PM* uiirston Score: ) 8&580

Az Add Score űrlap teszi lehetővé a fe l­ használóknak, hogy hozzáadják a rekordju kát a Guitar W/ars dicsőségtáblájához.

Screen shot;

^ Dhiiijiore.gif

Ennek a gombnak a működését a webböngésző és az operációs rendszer szabályozza. Általában egy fájltallózó párbeszédablakot nyit meg, amelynek segítségével a felhasználó megkeres­ het egy fá jlt a merevlemezén.

Az űrlap benyújtásakor a bináris képfájl feltöltődik a kiszolgálóra.
IO I O
iiiűiod
_________ J

O IO O I. IQ IIi IO phizsscore.gif

W e b k is z o lg a l:

Szóval egy beviteli mező segít a felhasználónak, hogy megkeres­ se a feltöltendő fájlt - de hogyan tovább? Nos, a fájlfeltöltő űrlap­ mező arról is gondoskodik, hogy a kiválasztott kép feltöltődjön a kiszolgáló egy mappájába, ahonnan aztán megjeleníthető a Guitar Wars dicsőségtáblájának részeként. Ez a fájlfeltöltő űrlapmező valamilyen különleges bővítése a HTML-nek? Egyáltalán nem. A HTML <input.> eleme a fájlfel­ töltő űrlapmezőket is támogatja, és a PHP-vel együttműködve le­ hetővé teszi a fájlok feltöltését. Mielőtt azonban elmélyednénk a PHP-kódban, nézzük meg közelebbről magát az űrlapmezőt...

A képfájl a kiszolgálón egy mappába kerül.

236 5. fejezet

Fájlokban tárolt adatok kezelése

Nagyító alatt:

az Add Score parancsfájl

Ez az íírlapjellemzo arra utasítja az űr­ lapot, hogy a fájlfeltöltéshez szükséges különleges kódolást alkalmazza, ami azt szabályozza, hogy miként történjen a POST-adatok becsomagolása és elkül­ dése az űrlap benyújtásakor.

Ez egy önhivatkozó űrlap.

rm |enctyp-e=,niultipai't/forin-data" method*"post" action="<?php echo j$_SERVER [ 1PHP_SELFf]; ?>"> , >

^ in p ut rype="hidden" n ame="MAX__FILE__SIZE" value="32“ ?68M <label for="name">Name:</label>

<_npat type="text" id="name" name-Mname, value="<?php if (!e m p t y ($name) ) echo $name; T

?>" />

<label

for="score">Score:</labeI>

<input type-"text" id=’score" name*"score" value-"<?php if (! empty{$score)) echo $scbre; ?>" /> ’ <br /> <Iabel for="screenshot, >Screen shot:</label> T
< input t y p e * " f i l e " id»wscreenshot" name="screenshct" />

<hr /> cinput type="submit" vaiue="Add" name="submit" /> < i form>

Ez maga a fa'jifeltöltó' mező', ami végeredmény­ ben az operációs rendszer fájltallózó és -kiválasztó párbeszédablakára támaszkodik.

0

Fájlfeltöltő mező elhelyezése az Add Score űrlapon, amely lehetővé teszi a képfájlok fel­ töltését.

KÉSZ-

most itt vagy ► 2 3 7

a képek fájlneveinek tárolása az adatbázisban

fájlnevének A kép beszúrása az adatbázisba

A képfájl feltöltése a webkiszolgálóra egy űrlapon keresztül önmagában nem elég. A fájlnevet tárolnod is kell az adatbázis új s c r e e n s h o t oszlopá­ ban. hogy elérhesd és megjeleníthesd a képet. Az Add Score parancsfájl je­ lenleg már képes az új rekordok beszúrására a g u ita r w a r s táblába egy aktuális INSERT SQL-utasítás segítségével, de az utasítás nem számol az új ^ MySQL N0W () függvénye az s c r e e n s h o t, oszloppal:
^

A képek fájlnevének elrak­ tározásáról az adatbázisba az INSERT utasítás egyik része gondoskodik.

----------------- dátum és időpont beszúrására szolsál
'$name', !$score')

INSERT INTŐ guitarwars VALUES (0, NOW(),

Az id oszlop értékét az AUTOINCREMENT állítja be automatikusan. A 0-át figyelmen kívül hagyja, a lekér­ dezésnek viszont itt meg kell adni egy értéket.
Mivel ez az SQL-utasítás anélkül szúr be értékeket, hogy meghatározná hozzájuk az oszlopneveket, minden oszlop számára kell értéket tartalmaz­ nia. Az imént azonban felvettél egy új oszlopot, ezért a lekérdezés többé már nem m űködőképes - hiányzik belőle egy én ék az új s c r e e n s h o t osz­ lop számára. Alihoz tehát, hogy a képernyőfelvétel fájlnevét az adatbázis­ hoz adhasd egy új rekordsor részeként, egy új értékkel kell bővítened az INSERT utasítást:

Azzal, hogy átadod a képernyőfelvétel fájlnevét az INSERT utasí­ tásnak, a fájlnév beke­ rül az adatbázisba.

INSERT INTŐ guitarwars VALUES (0, NOW(),

»$name ’, '$scorer, 1$screenshot' )

1

A screenshot oszlop hozzáadása előtt beszúrt adatsorokból hiányzik a képérnyőfelvetel fájlneve.------ .
g u it a r w a r s íd 1
2 3 4 5 6 7 1

date
2 0 0 8 -0 4 -2 2 1 4 :3 7 :3 4 2 0 0 8 -0 4 -2 2 2 1 :2 7 :5 4 2 0 0 8 -0 4 -2 3 0 9 : 0 6 : 3 5 2 0 0 8 -0 4 -2 3 0 9 :1 2 :5 3 2 0 0 8 -0 4 -2 3 0 9 : 1 3 : 3 4 2 0 0 8 -0 4 -2 3 1 4 :0 9 :5 0

name
Paco Jastorius N e v it Johansson E ddie V anilli Belita C h evy A shfon Simpson K enny Lavifz Phiz Lairston

«ore
127650 98430 345900 282470 368420 64930

screenshot
1 11'

I , . . __ J Ezeknek az értékeknek a sorrend i - je lényeges, mert az iupc o t uta­ INSEk — sítás feltételezi, hogy ugi anazt 1 a sorrendet követik, mint a tábla oszlopai.

E gylN S É E T -lelcéri ______
phizsscore.gif

2008-04-24 08:13:52

186580

Az új INSERT utasítás eredményeképpen a képérnyőTelvétel fájlneve bekerül a screenshot oszlopba.

megírása, amely beszúrja a képernyőfelvétel fajine­ vét a tábla screensha oszlopába.

238 5. fejezet

Fájlokban tárolt adatok kezelése

feltöltött fájl nevének kiderítése
dezés jól néz ki, de még mindig nem tudjuk, hogy a képnek való­ mi a fájlneve. Jogosan feltételezhetjük, hogy’ a fájlfeltöltő mező az n valamiként hozzáférést ad a fájlnévhez, de hogyan? Nos, a válasz $_FILES nevű beépített szuperglobális változójában rejlik, ami na­ hasonlít az űrlapadatok eléréséhez korábban már használt $_P0S? lobálishoz. A $_POST-hoz hasonlóan a $_F IL E S is egy tömb, 'ben a feltöltött fájl nevén kívül egyéb információk is találhatók "1, amelyek hasznosnak bizonyulhatnak.
liutU r Wart. Add Your Hifii. Score

<input *:ype--"fi l e

"

name-^’ screenshot" />

Az űrlap a $_FILE$ szuperglobális változón keresztül hasznos információkat ad át a fájlról a PHP-parancsfájlnak.

$ FILES[1screenshot’] [1name’]
p h iz ssc o re .g if

A fe ltö ltö tt fá jl neve.

$ _ F I L E S [ ’ screenshot ’ ] [ ’ type ?]

im a g e / g if
1001

A fe ltö ltö tt fá jl - ami ebben az esetben egy GIF kép - MIME-típusa.

ooion

ioioiji

$ _ F I L E S [ ’screenshot1] [1size’]

c

phizsscore.gif

12244

r.

A fe ltö ltö tt fájl mérete (bájtban)

Ezt a képfájlt tö lti fel az űrlap fá jlfeltölto mezője. $_FILES [’screenshot ’] [ tmp_name'] '
/ tmp/phpE 7 q jk y

A fá jl ideiglenes tárolóhelye a kiszolgálón.

A $_FILE$ beépített ^ o ^ __^ A fájlfeltöltés hibakódja - a 0 si­ kert, minden más érték hibát jelez. szuperglobális változó hozzáférést nyújt a feltöl­ Temészetesen a $ _ f i l e s változó által hozzáférhetővé tett egyéb infor­ tött fájlokkal kapcsolatos mációk is hasznosak, de jelen pillanatban csak a kép fájlnevére van szükséged, amelyet egy helyi változóban ($ s c r e e n s h o t) tárolhatsz, hogy aztán felhasználd az INSERT SQL-utasításban. információkhoz.
^ — - $ s c r e e n s h o t = $ _ F I L E S [ 1s c r e e n s h o t ' ] [ ’ n a m e 1 ]

$ FILES['screenshot’][1error1]

most itt vagy * 2 39

külső fájladatok tárolása külső fájlokban

^S

V á rju n k c s a k egy p e rc e t! M i c s a k a k é p fá jl n e v é t tá r o lju k a z a d a tb á z is b a n ...M i le s z m a g á va l a fá jlla l? !

ssEJSáasafi

S ic! KU an W ly

Oftlc: 20M-C4-2J 14:09:50

U n v e rifie d f

186580
N aiw : « li7 Lolrwon

Dutó: 2008^4-24 08:13:32

Gui tar
Naae:
FHIZL Scora:

iEbhBQ

A külső fájlokban tárolt adatok általában a külső fájlokban maradnak még az adatbázis-alkalmazásokban is.
Esetünkben az adathalmaz egy képet felépítő képpontgyűjtemény, amelyet egy külső - GIF. JPEG vagy PNG - fájl tárol. Az adatbázisok a szöveges adW tok és nem a képekhez hasonló nyers bináris adatok tárolása terén jele>keA nek, ezért érdemesebb csak egy hivatkozást tárolni az adatbázisban, ami a képre mutat. Ez a hivatkozás a képfájl neve. A másik ok, amiért a webalkalmazások képeit nem adatbázisokban s z o ta fl tárolni, hogy így sokkal nehezebb lenne HTML-kóddal megjeleníteni az:ifll Ne feledd, hogy a HTML-kód a fájlnéven keresztül hivatkozik a külső fijfaH bán tárolt képekre, ezért a HTML-képelemekben a fájlnevet kell használó® nem a nyers képadatokat. <img s r c = " p h i z s s c o r e . jp g " a l t = " S c o r e im a g e " />

Ahhoz, hogy elhelyezz egy képet egy weboldaA Ion, csak egy hivatkozásra <—J = van szükség, ami a kép­ fájlra mutat.
240 5. fejezet

H fj/IL < im g > eleme a fájlnévvel hivatkozik a webkiszolgálón találha­ tó képre.

re .g jf

Fájlokban tárolt adatok kezelése

ki a ceruzád!
A Guitar Wars főoldala (in d ex .p h p ) továbbra sem jeleníti meg a rekordokhoz tartozó képernyőfelvételeket. Fejezd be a kódot, hogy megjelenjenek a képek!

<?php // C s a t l a k o z á s az a d a tb á z ish o z ’ gwdb’ ) ;

$ d b c = m y s q l i _ c o n n e c t ( ’ w w w . g u i t a r w a r s . n e t ’ , ’ a d m in 1 , ' r o c k i t ' ,

// A p o n t s z á m k i o l v a s á s a $query =

a M y S Q L -ad atb ázisb ó l

$d ata = m y sq li_ q u e ry ($ d b c, $ q u e ry ); / / A pontszám ok tö m b jé n e k b e j á r á s a // e g y c i k l u s s e g í t s é g é v e l echo ' < t a b l e > ' ; w h ile ($row = m y s q li_ f e t c h _ a r r a y ( $ d a t a ) ) { // A p o n t s z á m o k m e g j e l e n í t é s e echo ' < t r x t d c l a s s = " s c o r e i n f o " > ’ ; e c h o ' < s p a n c l a s s = ns c o r e " > ' . $row [ ’ s c o r e ’ ] . ' < / s p a n x b r /> ’ ; e c h o ’ < s tr o n g > N a m e : < / s t r o n g > ’ . $ r o w [ ’ n a m e ’ ] . ’ < b r / > ' ; ech o ' < s tr o n g > D a te : < / stro n g > ' . $ r o w [ 'd a t e ’ ] . ’ < / td > '; i f (is file ( é s HTML k é n t tö rtén ő form ázása

) > 0) {
. ’ " a l t = " S c o r e im a g e ” / > < / t d x / t r > ’ ;

echo ’ c t d x im g s r c = " ' .

}
e lse { e c h o ' c t d x i m g s r c = " u n v e r i f i e d . g i f " a l t = ”U n v e r i f i e d s c o r e " / x / t d x / t r > ' ;

} }
echo '< / t a b le > ';

m y sq li_ clo se ($ d b c);

?>

m ost it t vagy >

241

Hegyezd ki a ceruzád! - megoldás

ki a ceruzád! Megoldás

A Guitar Wars főoldala ( i n d e x . p h p ) továbbra sem jeleníti meg a rekordokhoz tartozó képernyőfelvételeket. Fejezd be a kódot, hogy megjelenjenek a képek!

A kód egyszerűsítése érdekében nem szerepel it t „or die() , ami hibaüzenetet adna, és kilépne a parancsfájlból a mysqli-függvény kudarca esetén. A saját alkalmazásaidat érdemes úgy továbbfej­
<?php // C s a t l a k o z á s az a d a tb á z is h o z

leszteni, hogy ezt a kódot is tartalmazzák, innen kezdve azonban a rövidség kedvéért eltekintünk tőle.
’ a d m in ', ' r o c k i t ' , ’ g w d b ');

$ d b c = m y s q li_ c o n n e c t ( ’w w w .g u ita rw a rs.n e t' , // A p o n t s z á m k i o l v a s á s a // a M y S Q L - a d a t b á z i s b ó l $query = *£ £ L £ C T
*

A pontszámokat kiolvasó SQL-utasítás egyáltalán nem változik!

FRC M ju r la v W ’

$ d a t a = m y sq li_ q u e ry ($ d b c, $ q u e ry ); // A p o n t s z á m o k t ö m b j é n e k b e j á r á s a // e g y c i k l u s s e g í t s é g é v e l ech o f< t a b le > ' ; w h ile ($row = m y s q li_ f e t c h _ a r r a y ( $ d a t a ) ) { // A p o n t s z á m o k m e g j e l e n í t é s e e c h o rc t r x t d c l a s s = " s c o r e i n f o " > ’ ; e c h o 1< s p a n c l a s s = " s c o r e " > ’ . $ r o w [ ' s c o r e ' ] . ' c / s p a n x b r / e c h o 1< s tr o n g > N a m e : < / s t r o n g > ' . $ r o w [ ' n a m e ' ] . 1< b r e c h o ’ < s t r o n g > D a t e : < / s t r o n g > ' . $row [ ' d a te j^ * < ^ 1 < / t d > ' / é s HTML-ként t ö r t é n ő form ázása

Ez a függvény azt ellen> t . őrzi, hogy a képernyolelvétel fájlja ^ m ures-e.

i f ( i s _ f i l e ( fVow CsírttKshoh']

) & & file s iz e (

/v-© w C V v« r*sK o t'J

/ > 0 )7

—< A

echo ’ < td x im g s rc = " 1 .

............................ i..........

tr o w C s tr tt* sK o i'J

• ’ " a l t = " S c o r e im ag e” / > < / t d x / t r > * ;

........................................

) e ls e |

.........................................Az egyes rekordokhoz tartozó képernyofelvételekét az adatbázis screenshot oszlopa tárolja.

e c h o 1c t d x i m g s r c = " u n v e r i f i e d . g i f " a l t = ,,U n v e n f í e d s c o r e ” / x / t d x / t r > ' ;

)

Ez a függvény azt ellenőrzi, hogy
e c h o 1< / t a b l e > ' ;

a képernyöTelvétel fájlja létezik-e.

m y sq li_ clo se ($ d b c);

A Guitar Wars főoldalá­ nak módosítása, hogy a rekordok mellett megjelenítse a képer­ nyőfelvételeket is.

?>

2 4 2 5. fejezet

Fájlokban tárolt adatok kezelése

Tesztút
Adj egy új rekordot a Guitar Wars oldalhoz a hozzá tartozó képernyőfelvétellel együtt!
Ha még nem Letted meg, töltsd le a Guitar Wars példakódját a Head First Labs webhelyéről, a w w w .head firstlabs.com / books/ hfp hp címről. A kódot, amely a főoldalból (in d ex .p h p ), az Add Score parancsfájlból (a d d sco re.p h p ) és egy stíluslapból ( s t y l e . c s s ) áll, a c h a p te r0 5 mappában találod.
Először m ódosítanod kell az a d d s c o r e . php parancsfájlt, hogy az űrlap tám ogassa a fájlfel töl­ tést. Ebbe beletartozik az új űrlapm ezők hozzáadása, a <form > elem beállítása, és annak el­ lenőrzése, hogy a $ s c r e e n s h o t változó nem üres-e. Ezt követően be kell építened az új re­ kordbeszúró INSERT-Iekérdezést a parancsfájlba.

A következő lépés, hogy hozzáadod az i n d e x . p h p parancsfájlhoz az előző oldalon található kódot, hogy a parancsfájl megjelenítse a rekordok mellett a képernyőfelvételeket. Ha ez is megvan, töltsd fel az összes fájlt a webkiszolgálóra, és nyisd meg az a d d s c o r e . p h p oldalt egy webböngészőben. írj be egy új rekordot az űrlapra, kattints a Submit gombra, majd ugorj az i n d e x . p h p oldalra, és tekintsd meg az eredményt.

368420
Name: Ashton Sur.pson Date: 2008-04-23 09:13:34

J

64930
Name: Kenny Lavuz Date: 2008-04-23 14:09:50

c • 3 186580
Name: Phi/ Lairston
D a te: 2 0 0 8 -0 4 - 2 4 0 8 : 1 3 :5 2

Valami nem stimmel! A kép nem jelenik meg a rekorddal együtt, ahogy vártad.
Szerinted miért nem jelenik meg a képernyőfelvétel az új rekord mellett? És mi a helyzet azokkal a rekordpontszámokkal, amelyek már korábban is az adatbázisban voltak?

m o st it t vagy >

243

a feltöltött fájlok egy ideglenes mappaban tárolódnak

A feltöltött fájl azért nem jelenik meg, mert feltételeztük, hogy ugyanabba a mappába fog kerülni a webkiszolgálón, mint ahol a PHP-parancsfájlok vannak. Ez a feltételezés azonban merőben téves. Az Add Score űrlap le­ hetővé teszi a felhasználónak, hogy kiválasszon egy fájlt a számítógépé­ ről, a fájl azonban egy ideiglenes mappába kerül a kiszolgálón. Ez az ideig­ lenes (angolul temporary) mappa automatikusan jön létre a kiszolgálón, és általában valami furcsa neve van, véletlenszerű betűkkel és számokkal. Ez az in d e x , php-ben levő <img> kódnak gondot okoz, mert a kód felté­ telezi, hogy a kép a fő webmappában található:

W e b k is z o lo a *

< im g

src=

. jp g " a l t = " S c o r e

i m a g e ” />

Ez a kód feltételezi, hogy a kép abban a fo v/ebmag; pában tárolódik, ahol a PHP-fájlok is - pedig nem!
Ügyfélböngésző
WWW

Az ideiglenes mappa neve es helye minden PHP-telepítés esetében ma's és más lehet.

A képernyofelvételt tartalmazó képfájl a felhasználó szá­ mítógépének vala­ melyik mappájából származik. Az űrlapot az addscore.php jeleníti meg.
p h iz s c e g in d ex, p h p

p h izs sc o re .g if
'nsfr C.u5v*f * ur<, - Arid Your H

Az Add Seore parancsfájl gondoskodik a képfájl feltöltéséről a kiszolgáló egy ideglenes mappájába. 244 5. fejezet

Fájlokban tárolt adatok kezelése

O

A képek tá ro lá s a egy re jté ly e s ideiglenes m appában felesleges körnek tű n ik . Nem sza b á lyo zh a tju k, hogy hová kerüljenek a f e lt ö lt ö t t fájlok?

Dehogynem! A PHP lehetővé teszi, hogy meghatározd, hogy hová kerüljenek a feltöltött fájlok.
A feltöltött fájlok kezdeti tárolóhelyét ugyanakkor nem szabályozhatod a PHP-vel ezért beszélünk ideiglenes tárolóról. A fájlok azonban a feltöltés után máshová he lyezhetők: erre szolgál a PHP m o v e _ u p l o a d e d _ f i le () nevű függvénye (move = mozgat, áthelyez), amelynek a fájl forráshelyét és célhelyét kell megadnod:
m o v e _ u p l o a d e d _ f i l e ( $ _ F I L E S [ * s c r e e n s h o t ' ] [ * tmp n a m e ’ ] , $ta rg e t);

Ez a képfájl forráshelye, az ideiglenes elérési úttal és a fájlnévvel együtt.
W e b k is z o lg á ló

WWW

A fá jlt az ideigle­ nes mappából ^ a végleges helyére tesszük
php£7aJk

in d e x .p h p

Ez egy tetszőleges mappa lehet a webkiszolgálón - csak arra kell ügyelned, hogy jogod legyen fájlokat írni a mappába.

i ooi L m oloc ooioic IO III IO p h iz s s c o re .g if

\oo\ lm

UiOlOt O0ÍOIC
le tö lti

phizsscore.gif

most itt vagy >

nem hülye kérdések

Nincsenek

hülye kérdések
K I Nem módosíthatom a feltöltött fájlok kezdeti tárolóhelyét a p h p . i n i fájlban?

V: De igen. A PHP indítófájljában

(p h p . i n i ) megváltoztathatod a feltöl­ tött fájlok kezdeti tárolóhelyét, mégpedig az u p l o a d _ t m p _ d i r beállí­

táson keresztül. Ha az alkalmazásodnak azonban egy virtuális kiszol­ gáló ad otthont, akkor lehet, hogy nem férhetsz hozzá ehhez a fájlhoz, ami azt jelenti, hogy egy PHP-kód segítségével át kell tenned a fájlt a saját könyvtáradba.

K i A feltöltési kezdőmappa miért „ideiglenes" mappa? A fájlok áthelyezése után ^ j eltűnik?
V I Nem. Ez a mappa abban a tekintetben ideiglenes, hogy nem végleges tárolóhelyeként szolgál a feltöltött fájloknak. Tekints rá úgy, mint egy olyan tárhelyre, ahol a feltöltött fájlok addig pihennek, amíg a végle­ ges helyükre nem kerülnek.

K i Nem hagyhatok egyszerűen egy fájlt az ideiglenes mappában?

V ! Megteheted, de ez esetben a

$_FILES

kódot kell adnod a kép elérési útjához, hogy a program megtalálja a fájlt az ideiglenes mappában. Ne feledd azonban, hogy a mappa ne­ vét és helyét általában nem tudod meghatározni, és ami még fonto­ sabb, egyes rendszerek időről időre automatikusan kiürítik az ideglenes mappákat. Gondot jelenthet emellett az is, hogy az ideig­ lenes fel töltési mappa nem biztos, hogy nyilvánosan hozzáférhető, így a feltöltött fájlokra nem tudsz hivatkozni a HTML-kódból - márpedig a Guitar Warsban és a legtöbb PHP-alkalmazásban éppen ez lenne a lényeg. Ha a feltöltött fájlokat áthelyezed az ideiglenes mappából, akkor pontosan szabályozhatod, hogy hol tárolódjanak, és hogyan le­ hessen elérni őket.

[' s e r e e n h o t ' ][' tmp_name']

246

5. fejezet

legalábbis ami a fájlneveket és a ké­ pek mennyiségét illeti.Fájlokban tárolt adatok kezelése Oké. Az images mappa valójában nem nagyobb a többi mappánál. Na jó. hogyan helyezhetem á t a f e lt ö lt ö t t fá jlo k a t. ha szükség lenne rá. a „kell” talán túlzás. ezért célszerű az alkalmazás egyéb fájljaitól elkülönítve tárolni őket. és ennek egyik módja az. A rró l v is z o n t gőzöm sincs. Minden alkalmazásban kell egy images mappa. ahol a Guitar Wars alkalmazáshoz feltöltött képfájlokat tárolha­ tod. ha a különböző összetevők számára mappákat hozol létre. de fontos. hogy a PHP-alkalmazások részeit a lehető legjobban rendszerezd. m o st Itt vagy ► 247 . Mivel a feltöltött képek a felhasználóktól származnak. általában nincs közvetlen befolyásod rájuk. viszont segít a képfájlok egy Helyre rendezésében. Mindezt figyelembe véve tehát szükséged van egy i m a g e s mappá­ ra. Ez té nyleg klassz. m o s t m á r tudom. Ez a mappa az alkalmazásban használt egyéb képek tárolója­ ként is szolgálhat. hogy hová.

Az images mappa jel lemzöen közvetlenül a webmappa (www) alatt található. A webhelyed fájlrendszerét egy FTP-program segítségével érheted el. FTP-n keresztül kell lét­ rehoznod az images mappát. mint bármelyik másik a webkiszolgá­ lón. de ha szeretnéd. ahol a PHP-parancsfájlok tároló* nak. W e b k is z o lg á ló f GW UPLOADPATH az elérési úthoz. a képfájlokra így hivatkozhatsz a PHPparancsfájlokból: A képfájl nevét hozzá k Ez az alkalmazás webmappája. de az értékük nem változik meg a kezdeti beállítás után. Általában megfelel. ahonnan < im g > HTMLelemeken keresztül megjeleníthetők. Az i ma g es mappa el­ érési útjához abban a formában kell hozzáfűzni a képfájl ne vét. az egyetlen különbség csak az. A feltöltött képfájlok az images mappába ke rülnek át.hozz létre egy mappát a feltöltött képek számára! Építs házat a feltöltött képfájloknak! Az images ugyanolyan mappa.php-t is.php Ha a PHP-alkalmazásnak nem a saját (helyi) számítógéped ad otthont. A Starget elérési út a parancsfájlhoz hozzáadandó új GW__UPLOADPATH állandóból épül fel. A változókhoz hasonlóan az ál­ landók (konstansok) is adatokat tárolnak. Ha az im ages mappát közvetlenül a fő webmappa alatt hozod létre a webkiszolgálón. v images phpE7 index. ahogy azt az Add Score űrlapon megadták. looi I molo 00101 loioii ooi MA !2!£1S# I p h iz . hogy valahol az alkalmazás fő webmappája alatt kell elhelyezni. fejezet .g if move u p l o a d e d f i l e ( 248 5. és így hozhatod létre az i m a g e s mappát az alkalmazás fő webmappája alatt. ha közvetlenül ez alá a mappa alá teszed. bonyolultabb mapparend szert is kialakíthatsz. c o r e . beleértve az index. amely az images map­ pa eléséri útját tartalmazza.

gif 6 7 most itt vagy * 249 . és ne feledkezz meg ^ az adatbázisról sem. p h izssco re .g if p h izs sc o re .g if HV*hScor* l ’witar .Fájlokban tá ro lt adatok kezelése A feladatod. hogy eljátszd a fe ltö ltö tt képernyőfelvétel szerepét. és megtervezd az utad a Guitar W/ars alkalmazáson keresztül. Gondolkodj úgy. Rajzold be az útvonalat az alkalmazás egyes részei között.g if INSERT INTO guitarwars id dote name s<ore screenshot 1 2 3 4 5 2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09:06:35 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04-23 14:09:50 2008-04-24 08:13:52 Paco Jostorius Nevii Johansson Eddie Vanilli Beiita Chavy Ashton Simpson Kenny Lavitz Phiz Lairston 127650 98430 345900 282470 368420 64930 186580 phizsscore. mint egy fel- W e b k is z o lg á ló É i tö ltö tt fá jl! WWW U g y fé lb ö n g e s z o UPLOADPATH mypics I I oo\ U j lo o lö iű l L \ooI U \ OO U\ C ooio\c lö fo ljj lto io m j > 11001 U j Im o io d lo o io iö l l io io tjjj p h izs sc o re .

mert az egész Guitar M/ars alkalmazás* bán használni fogod a feltöltött képfájlok tárolására és elérésére.g if IN S E R T IN T O g u it a r w ars 2008-04-22 14:37:34 2008-04-22 21:27:54 200&Ö4-23 09:06:35 Pac» Jastorius Nevil Johansjon 127650 98430 345900 282470 A feltöltött képfájl áthelye zése az ideiglenes feltolté si mappából a képek vég­ leges mappájába. hogy mi a neve. és a végleges tárolóhelyére került.^ nincs befolyásod arra. hogy eljátszd a fe ltö ltö tt képernyöfelvétel szerepét. vagy hol talál­ ható. fejezet 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04-23 14:09:50 2008-04-24 08:13:52 Ashton Simpson Könny lovita: 368420 64930 186580 p h iz ssco re Phiz Lairston .megoldás A feladatod. \ Ü g y fé lb ö n g e s z o mypics Körültekintően válaszd ki ennek a mappának a nevét és helyét. _ Ez a mappa a felhasználd számítógépén található . és arra utal.g if p h iz s s r o re . és ne feledkezz meg _ az adatbázisról sem. hogy érdekeljen. bekerül az adatbázisba poioiűl l io io in j f p h izssco re. és megtervezd az utad a Guitar Wars alkalmazáson keresztül.Légy a feltöltött képfájl! . J oolotöl M n o o . mint egy fe lt W e b k is z o lg i c É Í t ö t t f á jl! WWW A GW a Guitar Wars rövidítése. I iMiután a fájl feltö!tcő d ö tt a kiszolgálóra.u i liiio io d p p h izssco re. hogy ez az állandó csak ebben az alkalmazásban érvényes. Rajzold be az útvonalat az alkalmazás egyes részei között. Gondolkodj úgy.g if A második lépés a fájl áthelyezése ^ J s? ideiglenes feltöltési mappából 1 I a végleges képmappába. és nem is kell. I lo o i I A lili o i o o j 1 oil jJ 101 L. 250 5.

ahová az állandó mutat. és ismét próbálj felvenni egy rekordot. 'a d m i n '.irtum l i l e ^ d e f i n e < 'GWJJPLOADPATH'. Sname . pap" J i l l . '< b r />•.a from Che POST $narae .mage" / X / p > ’ . hogy a GW_UPLOADPATH állandót használja.200*04-24 08:1*52 \ 18Ó5KO most itt vagy > 251 . ' im a g e s / ’ ) T ^ If . •$ s c r e e n s h o r •> // C o n fir m s u c c e s s w ith t h e u s e r e c h o '<p>Thanks f o r a d d in g your new h ig h s c o r e ! < / p > * . = // W r i t e t h e d a t a t o t h e d a t a b a s e $query "TNSERT INTO g u i t a r w a r s VALUES { 0 . e c h o .i--í pach a n c nay.p h p parancsfájlra is hatással van.Fájlokban tárolt adatok kezelése Tesztöt Biztosíts állandó helyet a feltöltött képernyőfelvételeknek a saját képmappájukban! Módosítsd az a d d s c o r e . *<br / > '. Miután végrehajtottad a változtatásokat.n e t * . e c h o ’ < p x a h r e f « " l r S t t k . ) ) 1 // Move r h p l i l e t f i e t a r g e t u p lo a d f o l d e r $ ta rg e t (^jW^uPLOADFATR 7 ^ 6 s c r e e n s h o t . g u i t a r v a r s .tro n g > * . e ch o '<im g s r c = " ' . a d d s c o re . 'g w d b 'f . ! empty ( S s c r e e n s h o t . fonlsiámoltmlt 0.S _ c o n n e c t(* w w w . •" a l t = " 3 c o r e '. $ sc c e e r s5 h o t = $_FT!. P U UrtM Tí DH--. S s c o r e = $_POST ?' s c o r e . S q u e r y ) . HOWOr m y s q li q u e r y ( S d b c . p h p parancsfájlt. töltsd fel a parancsfájlokat a ki­ szolgálóra. és a feltöltött képernyőfelvételeket azon az elérési úton tárolja. 'S s c o r e * .S_POST I ' mime' ] . úgyhogy ne felejtsd el ezt is megváltoztatni. 'S n a m e '. e c h o * < s tr o n g > S c o r e ^ < ^ a l1 a f t ö i —1 s ----.^ s c o r e .s i z e c o n s t a n t s ( i s s e t (S_POST l ' s u b m i t * ] H ( // G rab t h e s c o r e dnt. « t / B a c k cc h ig h s c o r e s < / a X / p > ’ .1»: l Unveri fled A fe ltö ltö tt képernyoTelvétel most már látható a főoldalon.' ] . . r i P u-d1u.¿GWJIPLOADFATH J Ö s c r e e n s h o t .E S[ ' s c r e e n s h o t ' 1 I ’ name’ 1 . íme a kód. amit módosítani kell: <?php . ' r c c k i t ' . ’ e m p t y ( $ s c c r e ) >»(. if ( ! empty($name> i*. i f (move j a p & d w w i i y ( ¿ _ T I LBS t ’ s c r e e n s h o t ' ] [ ' trap name ’ ] . ■ 64930 Stm t: ■ -im M B lM lllU "1 ■ 1 — K c b c v I p o • M űk. S t a r g e t ) } f // C o nn ect t o t h e d a t a b a s e $dbc « ra y s q l.p h p A GW_UPL0ADPATH állandó az in d ex. < p x a tr o n g > N a m e :< / s .

Újratöltve Az a l t é r utasítással egy MySQL-adatbázistábia. Más szavakkal. ahol a 1221034560 a kiszolgáló ideje. ha a fájl­ név elejére beszúrod a kiszolgáló aktuális idejét (m ásodpercben): V ¡D e igen. hogy hová kerüljenek a feltöltött fájlok. szerkezete módosítható. de a külső fájlokban található bináris adatokra általában jobb. Ez a kód a phizsseore. hogy egyedi szá­ mokat eredményez. hogy a NOW {} függvény a webkiszolgálón érvényes időt adja vissza. másodperc­ ben kifejezve. ha az alkalmazás által használt . csak a rekord rögzítésének hivatalos dátumát és időpontját használhatod. ha egyszer át kell helyezned egy másik kiszolgálóra. mert nincs mindig lehetőség a p h p . Ennek az az egyik legegyszerűbb módja. ha azonos néwel töltenek fel képfájlokat? K i N e m tárolhatom a feltöltött képernyőfelvéte­ lek képadatait a Guitar Wars adatbázisban? V I Azért. liiszen ez adja meg. De még ha tudnád is módosítani a php . például új adatoszlop­ pal bővíthető. hogy a felhasználók felül­ írják egymás képemyőfelvételeit. Ezzel kiszűrheted a gyanús dá­ tumokat. ezért nem árt. aki elő­ ször érte el az adott pontszámot. Nem bízilá­ lod tehát a felhasználóra. és bináris adatok tárolását is le­ hetővé teszik. Mint minden rekord esetében. Az adatbázisok kitűnően alkalmasak szöveges adatok tárolására. ami nem biztos. Az adatbázisok nagyon mgalmasak. A move_uploaded_f i l e {) nevű szabványos PHP-függvény lehetővé teszi a fájlok áthelye­ zését a webkiszolgálón. Fontos megjegyezni. hogy az alkalmazás m űködésképtelenné vá­ lik. Azokban az alkalmazásokban. sajnos igen.további nem hülye kérdések Nincsenek hülye kérdések I C i Ha a p h p . valaki mindig megpró­ bál csalni. hogy ő mondja meg. V !D e . nem pedig adatbázisban tárolt bináris képadatokra. 252 5. Ezért még ha meg is változtat­ nád a guitarwars táblát. time() Sscreenshot.php oldalon. hogy megjeleníthesse azokat az index. i n i fájlban be lehet állítani. hogy nem nyúlhatsz a p h p . A problémát az okoz­ za. csak ebben az esetben az a nagy baj. hogy a Guitar Wars alkalmazás a HTM I-kódban hivatkozik a feltöltött ké­ pekre.ini beállításai­ hoz. Képfájlokat feltölteni az < i n p u t > HTML-elem a MySQL és némi PHP-kód segítségével lehet A feltöltött fájlokkal kapcsolatos információiéi! a PHP a $_F IL E S szuperglobális változóban tárolja. hogy a rekordpontszámot hivatalosan mikor tették fel a webhelyre. V •A dátum fontos része a rekordoknak. hiszen minden felhasználó ugyanannak a kiszolgá­ lónak az órájához igazodik. így lia két felhasználó ugyanazt a fájlnevet használ­ ja.képeket egy külön mappa (például egy images nevű) tárolja. A IITM L <img> ele­ mét úgy tervezték. A legtöbb webalkalmazás számára előnyös. mint amit a felhasználó megadott a fájlfeltöltő űrlapmezőben. ! Miért nem adhatják meg a dátumot maguk a felhasználók a Guitar Wars oldalon? $t a r g e t • G W _ U PLOADPATH . Például ha egy virtuális webkiszolgálón építesz egy PHP-a Lkai mazást. K k . Ez azonban nem jelent gondot. hogy azé a dicsőség. hiszen az érték folyamatosan nő'.gif. hogy' megegyezik a felhasználó helyi idejé­ vel. i n i fájlt.különösen a fel­ használók által feltöltött . az alkalmazás a p h p . amit m eg lehet jeleníteni HTML-kóddal. akkor miért kell áthelyezni a fájlt? K ! Nem fordulhat elő. A tim e() függvény által vissza­ adott időben nincs semmi különös. ha erre minél keve­ sebb lehetőséget adsz. itt is érvényes. ahol a felhasználók ver­ senyeznek egymással. hacsak az nem. az első felhasználó képfá jlját felülírja a második felhasználóé. nem a saját PHP-kódod által megha­ tározott útvonaltól. hogy egy hivatkozással egy a webkiszolgálón tárolt képfájlra mutas­ son. jelentős kihívást jelentene ezeknek az adatoknak a visszaalakítása egy olyan formátumba. ami nem jó. hogy a kiszolgá­ lón egyedivé teszed a képfájlok nevét. akkor is azt kockáztatnád. ha csak hivatkoznak. ini fájlban l>eállított elérési úttól fog függni. ini módosítására. hogy bináris kép­ adatokat tároljon. mikor érte el a rekordját. és hitelesebbé teheted a dicsőség­ táblán találliató eredm ényeket. hogy a képem yőfeivételek ponto­ san ugyanazon a fájlnéven tárolódnak a webkiszolgálón. mint a 1221634560phizsscore.gif helyett egy olyan fájlnevet eredményez. fejezet . Erre az lehet az egyik megoldás. akkor nagyon valószínű. és létfontosságú a feltöltött fájlok kezelésében.

’ im a g e s / • ) . és ha csak lehet. hogy bármilyen változás az elérési útban két parancsfájl frissítésének a szükségét vonja maga után. két helyen kell módosítani a kódot . ^ — — Az állandó neve.P o fi W » O ■ . rho vn í n i r4 Az ismétlődő kód problémájának megol­ dásához egyetlen helyen kell tárolnod a GW_UPLOADPATH állandót.. de miért kell két helyen az index. ami azt jelenti.php fájlban ie létrehozni? Ml tö rté n ik . hogy változás esetén két helyen is módosítani kell index.»fii" fin o ( ’ GWJ J P L O A D P A T H ’ . • __________________________________ _ I . Az i n d e x .márpedig az ismétlődő kód rossz dolog! A GW_UPLOADPATH állandó az i n d e x . Ha az elérési út megváltozik.php és az addscore.Fájlokban tárolt adatok kezelése T etszik.p h p m ost it t vagy ► 253 . | fc állandó értéke. * im a g e s / ' ) Az állandó két helyen szerepel. „ útvonalat tároló állandó meghatározása . hiszen állandóról van SZÓ. jtü _ I y T 2< a d d s c o re . A* állandói'Iéfr ■ s a define(j p. ami azt jelenti. ar-T . p h p és az a d d s c o r e . áa ¿"nyel történik — d e f i n é ( ' GW _UPLOADPATH' . ki kell küszöbölni.php Agytorna // D efine. ha az elérési ú t m egváltozik? i A képernyőfelvételek fájl felföltési útvonalát a 6IV_UPL0A0PATH állandó tárolja. p h p parancs­ fájlon belül egyaránt nagyszerűen működik. php vagy az a d d s e o r e . php fájlban tárolnád? Miért? R e f i n e ( ' s w j j p l o ad path c$ZT a 1 11 . csakhogy az állandó így két helyen szerepel. hogy a fá jlfe l tö lté s i útvonalat egy állandó tárolja. ami soha nem változhat. Az ilyen ismétlődő kód rossz tervezésre utal.

amelyeket egy alkalmazás több parancsfájlja közösen használ. hogy az egyikben tárolnád azokat? a d d s c o re .. de anélkül. De ez még mindig nem ad választ arra a kérdésre. GW UPLOADPATH ?> a d d s c o re .. hol vannak az a d a ta im ? Tehát a parancsfájlok által közösen használt adatok tárolása az egyik meglevő pa­ rancsfájlban nem igazán működik. 254 5. amelyek olyan PHPforráskódot tartalmazó fájlok.. mert így az adatok már nem lesznek megosz­ tottak. hogy pontosan hová is kerüljenek ezek az adatok. haver. találnod kell valamilyen módot arra. . hogy közvetlenül az egyikben tárolnád azokat. I I D e f i n e t h e u p lo a d p a th c o n s t a n t d e f i n e <'GW UPLOADPATH \ ' im a g e s / * ) .php fájlban. Hé. Tárolhatnád őket például csak az index..a parancsfájlok adatainak megosztása beemelt fájlok segítségével A közösen használt adatokat megosztva kell használni Ha olyan adatokról van szó. fejezet . amelyeket igény szerint beszúrhatsz más PHP-fájlokba.p h p Hogyan teheted elérhetővé az adatokat mindkét parancsfájl számára anélkül..de akkor a többi parancsfájl számára elérhetetlenné válnának. A parancsfájlok által közö­ sen használt adatoknak kódismétlés nélkül elérhe­ tőknek kell lenniük az egész alkalmazásban.p h p A megoldást az adatok megosztására (angolul „sharing”) a parancsfáj­ lok között a beemelt fájlok (include file) jelentik. hogy egyetlen he­ lyen tárold. Valahogy elérhetővé kell tenned az adatokat minden parancsfájl számára. majd betölthesd azokat az egyes parancsfájlokba.

de akár­ hányszor újrahasznosíthatod őket. például az olyan tiszta HTML-kódokéra. de nem ez a lényeg. míg az ine 1üde nem.php beemelése más parancs­ fájlokba lehetővé teszi a benne levő ada­ tok megosztását a parancsfájlok között.Fájlokban tárolt adatok kezelése Megosztott adatok igénylése a require paranccsal A beemelt fájlok nagyon hatékonyak. hogy' a require_once hibát eredményez. A megosztott parancsfájlok használata nem csak elterjedt. Most nem a változók és állandók közötti különbségen lovagolunk. és összeállíthatsz egy gyűjteményt az „alkalmazásváltozókból”. és így megoszthatod a bennük levő kódot. a d d s c o re . „be­ lefoglal”) utasításából származik. Nincsenek hülye kérdések K : V: Várjunk csak! Ezek az „alkalmazásváltozók'' valójában nem állandók? K V ! A megosztott kódot beemelő („include") PHP-utasítást miért hívják r e q u ire _ o n c e -n a k ? A2 „include file*’ név a PHP include („beemer. amelyek a requi re_once helyett az include utasítást hasz­ nálják a kevésbé fontos kódok beemelésére.p h p A require_once utasítás gondosko­ dik a megadott parancsfájl beemelé­ séről a másik parancsfájlba. php ne­ vű parancsfájl. Né­ ha találkozhatsz olyan programokkal. Az alkalmazások valójában nagyon gyakran osztanak meg műveleti kódokat is több parancsfájl között. amely nagyon hason­ ló a require_once-hoz. Bármilyen PHP-kódot külön parancs­ fájlba tehetsz és megoszthatsz a require_once uta­ sítással. hanem a kód szervezése szempontjá­ ból igen üdvözlendő gyakorlat. amikor csak szükséged van rájuk más parancsfáj­ lokban. A PHP-ben ezenkívül létezik Néha igen. most itt vagy ► 255 . A kenő között az a különb­ ség. hogy egy fájl beemelésére véletlenül többször is sor kerüljön. hogy kódot ossz meg több parancsfájl között. ha a megosztott fájl nem található. K : V: A megosztott parancsfájlok kódjában csak adatokat lehet tárolni? Egyáltalán nem. A beemelt fájlok le­ hetővé teszik. p h p Az appvars. amelyek az include és a require_once változatai. mert csak egyszer kell létrehoznod. A requi re_once-ban szereplő „once” („egyszer”) pedig annak a megakadályozására szolgál. hanem közös helyet próbálunk találni a parancsfájlok által megosztva használt adatok tárolására egy adott alkal­ mazásban . A GW_uPLOADPATH állandót tehát elhelyezheted egy beemelt fájlban. amelyeknek a szerepe nem létfontosságú. include_once és require utasítás is. in d ex.és ez a közös hely az a p p v a r s .

pbp-nek és az addscore.pbp-nek egy­ aránt szüksége van. II Az alkalmazás állandóinak meghatározása require_once('appvars. . hogy minden parancs­ fájlban megismételnéd az adatbá­ zis-kapcsolati változókat. php’) ?> // Define database connection constants define <'DB_HOST\ ’www. és a beem elést is bárhol végrehajthatod egy parancsfájlon belül. php')<?php r '// Define application constants (’GW_UPLOAD?ATH\ •images/ ). ahol szükség van rájuk. define(’D B N A M E ' »gwdb’). mintha egy beszúró „insert” utasítás lenne. az alkalmazás számára fon­ tos adatokat tárol. egy beemelt fájlba áthelyezve meg­ oszthatod őket. define C D B “PASSWORD*. connectvars. . <?php appvars. amelyek­ re az index. A r e q u ir e _ o n c e utasításra gondolhatsz úgy. amelynek a helyére a program a hivatkozott parancsfájl tartalmát helyettesíti be. Ahelyett.php A REQUIRE ONCE utasítás megosztott szúr be más parancsfájlokba.net-) ■ define(*D3_USER' 'admin'). és a két meg­ osztott parancsfájl tartalmát közvetlenül azokon a pontokon beszúrni a többi parancsfájlba. A Guitar Wars ese­ tében az adatbázis-kapcsolati változókat ugyancsak érdemes egy beemelt fájlba tenni. mint egy „beszúrásra" Nem csak egyetlen PHP-fájl em elhető be. d e f i n e ?> Ez a globális változó olyan.php requi re_once('connectvars. 256 5 fejezet . »rockif ).guitarwars.a re q u ire o n c e utasítás Gondolj úgy a require_once-ra.

és próbáld ki az Add Score űrlapot.php és connectvars . echo '<strong>Date:</strong> ’ .net' . defin e {’DB PASS WORD ' 'ch iefroc): ej r) . ’ Sdata = mysqli query(Sdbc. while ($row mysqli_fetch_ar ray^aata)) I // Display the score data ^ echo ’<t:Xtd class=nscoreinfon> '.php és addscore.gif " alt="Unverified score’ /X/td></tr> ’. írd beléjük az előző ol­ dalon található kódokat. DB USER. . majd adj require_once utasításokat az index. ) def ine(’DB_USER' 'adrnin’). még egy űj lépés! Bizonyos dolgokat ne héz eio>e megtervezni. GW_UfLOADPATH . Srowl ’score'] .guitarwars. illetve a főoldalt. $row['screenshot'] ) fiiesize(GWJJPLOADPATH . hogy mindkét megosztott parancsfájlt beem eljék. hogy „menet közben" módosítsd a tervet. $query). $row[’name’J . $row[’date'] . Hozz létre két beemelt fájlt a Guitar Wars alkalmazás számára.Fájlokban tá ro lt adatok kezelése // Az alkalmazás állandóinak meghatározása c ?ph p // Define application constants define('GW UPLOADPATH'. '<br />'. define ( DB_NAME ’. 'gu ita rwarsdb' . hogy meg­ győződj róla. ’images/’) // Define database connection constants define{’DB HOST' 'www. és oszd meg őket a többi parancsfájl között! Hozz létre két szövegfájlt appvars . hogy az új. '</td>'. beemelt fájlokkal továbbfejlesztett szerkezetben is működnek-e.php néven. GW_UPLOADPATH . DBJ^SSWORD // Retrieve the score data from MySQL $query = ’SELECT * FROM guitarwars”. if (is_flie(GW_UPLOADPATH . Loop through the array of score data^-'Tormatting it as HTML echo '<table>'. m o st i t t vagy ► 257 . ’ addscore. ezért készen kell állnod rá.php parancsfájlokhoz. $row ['screenshot'] ’" ait="Score Image" /x/tdx/tr>'. $row['screenshot '1) > 0) \ echo 'ctdximg src="’ .php | y f 5 C fájlfeltöltési útvonal áthelyezi k echo '</table> mysqli close(§dbc) se egy beemelt fájlon keresztül megosztott állandóba. . Töltsd fel az összes pa­ rancsfájlt a webkiszolgálóra._______ index. if // Az adatbázis kapcsolati állandók // meghatározása / a pontszam kiolvasasa a MySQL adatbázisból / / A pontszájnok tömbjének bejárása és W / HTML-ként történő formázása egy ciklus // segítségével NAME) Á lla t! M o s t már elérem a m e g o s z to tt a datokat lel else I ocho 1ctdximq src=’ . '</spanxbr /> echo '<strong>Name:</stronq> ’ . ’unverifled.php Hoppá. echo '<span class^"score">' . ' ) // Connect to the database $dbc = mysqli connect (DE HOST.

csak éppen a rekor­ dok nem sorrendben vannak! Ca>Ur VVar* . 258 5. akinek a p o n ts z á m á t képernyofelvétel is b izo n yítja .. de egy kis­ sé hú2zs á száját amiatt. fejezet .az ORDER BY utasítás a sorrend A rekordoknál « időzítés a lényeg A Guitar Wars alkalmazás végre képekre támaszkodik. . Ez érdemi fejlődés az alkalmazásban.. nem old meg . pedig elég tisztes rekordot ért el. amelyek megerősítik az elért rekordpontszámaikat. amely miatt a fel­ használók régóta morgolódnak. hogy feltöltsék a képernyőfelvételeket. de egy problémát. N «w i*»* fi M Tény.Add Your liich Scor* Cui t a r Scores PHiri Én vagyok a z egyetlen. és lehetővé teszi a felhasználók­ nak. hogy a rekordok nincsenek sorrendben.a m i nagyszerű.. de m ié rt van a re ko rd o m a lis ta alján ? O U8 Us 6«* yL»E 4»0 N t. csak ha a sorrend tényleg nem számít! Esetünk­ ben azonban igenis számít. Soha ne támaszkodj arra a sorrendre. hogy a rekordlista aljára került. amelyben egy adatbázis adatai tárolódnak.. ezért valahogy rendezni kell a lekérde­ zés eredményét. ilyen rendezést pedig az ORDER BY SQLutasítással lehet végrehajtani.vagyis teljesen véletlenszerű­ en.A d d Y o n r H ig h Score sm* uó*» A rekordok rögzítéséhez most már egy Uépernyöfelvétel feltöltése is hozzátartozik. ahogy az adatbázisban tárolódnak .t/M «O Phiz csípi 3 képernyofelvételes megerősítést. Úgy jelennek meg. G u ita r W a r* .a rekordok sorrendjét a főoldalon.

hogyan működik az ORDER BY. mysql> name 2008-04-23 2008-04-23 2008-04-23 2008-04-24 2008-04-22 2008-04-22 2008-04-23 09:13:34 09:06:3b 09:12:53 08:13:52 14:37:34 21:27:54 14:09:50 Ash'on Simpson lEddle Vani'ili Beiira Chevy I Phiz Fairsvon Paco Jos'-or'.0005 sec) FROM FROM m ost it t vagy ► 259 . hogy szerinted melyik lekérdezés a legjobb a Guitar Wars oldal számára! Tipp: az a s c az ASCending (növekvő).us Nevil Jononsson| |Kenny Lavi-X I I .Fájlokban tá ro lt adatok kezelése PHP. amelyek az alábbi kimenetet eredményezik! Ezen kívül karikázd be. Filo E dit W indow Help YYZ \ ame 36842Ö | i'l 2 8 2 4 7 0 1 | 3459001 | f| 6 4 9 3 0 ! í| 9 8 4 3 0 .& MySQL-mágnesek Próbáld kitalálni. és az alábbi hűtőmágnesek segítségével hozd létre azokat a rendezett SELECT utasításokat. | File E dit W indow H elp YYZ szerint növekvő sorrendben jelennek meg. ' i'j 1 2 7 6 5 0 ' 'l__i 8 6 5 an! 7 rows m A lekérdezés eredményében a nevek az ábécé A lekérdezés által visszaadott eredmények pontszámok szerint csökkenő. I I score 368420 345900 282470 186580 127650 98430 64930 i screensnot 7 ^ows :n set (0. a d e s c pedig a DESCending (csökkenő) rövidítése. i . majd dátum szerint növekvő sorrendben jelennek meg.

| | 186580 .1 II 1 1 l| 2008^ ■04-23 2008J ■04-23 2 0 08J-04-23 2008. . hogy előfordul.. | screenshot screenshot ^ .-. ha két pontszám azonos..“ ~ r ------. hogy szerinted melyik lekérdezés a legjobb a Guitar Wars oldal számára! Tipp: az a s c az ASCending (növekvő)..as* —í i* ~ ~ t I | I -a fj 7 rows In #et (0. b 113 I 2C P?008-C4-23 09:13:34.& MySQL-mágnesek .1 |! 2 ...p h p . 14 :09: 50 | K e n n y J q v i t z _ J | i 186580 | phi¡sscore. A két rendezési szintet vesszővel kell elválasztani. 345900 I 282470 1 I . 260 5..-04-23 2008-' -04-22 1 phizsscore.. Erre itt nincs példa. . és az alábbi hűtőmágnesek segítségével hozd lét­ re azokat a rendezett SELECT utasításokat.-04-22 114:37 34 1 J I I 2008j -04-24 l iBj 13 52 .b m ysql-m ágnesek megoldás PHP. 201 '2008-04-22 |2d >2008-04-23 lAsht-on Simpson 1 09:06:35 I Pddie Vanilli i I 09:12:03' I Belita Chevy j | 08 : 3: 5 1 ^hiz rairs^on | 1 14:3:7:341 Paco Jostorius i 1 2‘ :27:54 | Nevxl Johanssonl I . fejezet .. i2C 12008-04-23 I. hogyan működik az ORDER BY. és csak akkor kell. amelyek az alábbi kimenetet eredményezik! Ezen kívül karikázd be.| .... ^ name | score screenshot t------------\ 368420 I Ashton Simpson I Belita Chevy I i 282470 | Eddie Vanilli I | 345900 I Kenny Litvitz I | 64930 | Ncvil Johansson| | 98430 | Paco Jastorius | | 127650 | Phiz Lairston. File E dit W in r^ A lekérdezés eredményé­ ben a nevek az ábécé szerint növekvő sorrend­ ben jelennek meg..2008-04-24 I 20 2008-04-22 ...27650 | I 98430 j i 64930 | ~ — -------.. A Guitar Wars oldal ki­ javításához erre a lekér­ dezésre van szükség! FROM ------------------------------ name i score' I 368420 .---.megoldás Próbáld kitalálni. -------------------------------------------------------------------------------------------------------- 1.1 6 l2d |2008-04-23 j2q ..gif — .0005 sec) I A dátum szerinti rendezés másodlagos. A lekérdezés által visszaadott eredmények pontszámok szerint csökkenő... de egy kellően nagy adathalmazban valószínű..gif i '. majd dátum szerint növekvő sorrendben jelennek meg. a d e s c pedig a DESCending (csökkenő) rövidítése. | F>lo Edit W»ndow Het^ T T Z _____________________ mysql> SELECT 1 * 1 FROM I guitarwars I ORDER BY I name I ASC I d a te i.. 09:13“|34 09:12 53 09:06 35 1 14:09s 50 I 21:27 54 1 2008..... 4 |7 1 .

hogy majd meg kell tisztítanod a rekordlistát a meg nem erősített pont­ számok eltávolításával . m ost it t vagy ► 261 . 345900 Nwne: Edd* Vanilli Date: 2008-Ö 4-230906:Í5 Nincsenek hülye kérdések K ! Sok pontszám továbbra sincs megerősítve. hogy felhívd a fi­ gyelmet a legmagasabb pontszámra.ju a Top Score: 368420 368420 Name: \sbton Si/npson Dl:20-4219 Í-M *e 080-.. csak jelzi. amit meg kell dönteni.0. hogy a rekordok sorrendjét kijavítottad.és r. még egy javítást elvégez­ hetsz a listán: a legmagasabb pontszámot elért gitárost kiemelheted a lis­ t tetején. Gaiiar » Ä to ymi híve » t e » o t o ra c ™ * <6* hiífc score liff? If w .amire rögtön rátérünk. amint befe­ jeztük a legmagasabb pontszám kiemelését. de nem akadályozza meg. W dcore .High Scores A Top Score fejléc világosan je l­ zi a legmagasabb eléri pontsza\ mot.ogy mi az a pontszám.Fájlokban tá ro lt adatok kezelése A legjobb gitárhős elismerése Most. Guitar W ars . hogy a rekordja külön fejlécbe a kerüljön. 3. A legjobb gitárhős megérdemli. vagyis a célt az egymással fersengö' gitárhosöknek. hogy ki érte el a legjobb eredm ényt. amely világosan jelzi.. Ez nem jelent gondot? V ! Dehogynem.

Ezt a stílust. Ez a stílusosztály már használat­ ban van. style. és csak az első számára létrehozni egy fejlécet. amelynek a neve topseoreheader lesz. ami biztosan a csúcspontszám lesz.egy k is ess A legmagasabb pontszám forma'za'sa HTML és CSS segítségével A legmagasabb pontszámot jelző fejléccel kapcsolatban az a legfontosabb. i error { A rekordpontszámot a fej­ léc közepére igazítjuk. hogy jól látható legyen a rekordlista többi pontszáma felett. font-weight: bold color: IFFÖOOO. amelyre egy különleges CSS-stílust alkalma­ zunk. hiszen a lista most már rendezett. A képi hangsúlyo­ zás egyaránt igényli a HTML és a CSS segítségét. topseoreheader { ^ ^text-align: center. fejezet . A pontszámokon egy while ciklus megy végig. ----^.az egyes rekordokat formázzák a főoldalon. Ahhoz. a Guitar Wars al­ kalmazás style. score { font-áize:150% color: #36407F A betűméretet a többi pontszámé­ nál nagyobbra kell állítanod.css Ez a két stílusosztály ugyancsak használatban van már . A fejlécet a HTML-táblázat egy soraként fogjuk létrehozni. hogy a rekord valóban kitűnjön. és az a szerepe..php parancsfájl már létrehozza a rekordokat tartalmazó HTMLtáblázatot. hogy ki­ emelje az adatbejegyzési hibákat az Add Score parancsfájlban.css stíluslapjához kell hozzáadnod.background-color: #36407F 'color: #FFFFFF. hogy külön fejlécet hozz létre a legmagasabb pontszám számára. 262 5.. el kell különítened az első rekordot. font-size: 200%. Sötét háttérszínt haszná­ lunk fehér szöveggel. ezért valahogy meg kell számolnod a pontszámokat. scoreinfo { vertical-align: top padding-right:15px. Az index.

'</span><br />'. $rowf'score'] . GW_UPLOADPATH . '<br / > ’. if (is_file(GW_UPLOADPATH . while ($row = rr.php parancsfájljának kódját. } echo 1</La b l e > '. • • • // A pontszámok tömbjének bejárása és HTML-ként történő formázása egy ciklussal echo ' <table>'. Srow [’screenshot *] . .ysqli_fetch_array($data) ) [ II A pontszámok megjelenítése if ( ) { 1 echo *<tr><td class="scoreinfo">'. $ row['name*J . I else { echo 'ctdximg src-"' . Tunverified. hogy a legmagasabb pontszám fejléce a rekordok HTML-táblázatának része.gif' r" alt="Unverified score" /></td></tr>’. $row['screenshot'1) && filesize(GW_UPLOADPATH . tM alt="Score image" /></td></tr>’. $row[’date1] . GW UPLOADPATH .0 . echo 1<strong>Date:</strong> ’ .F ájlokban tá ro lt adatok kezelése Gyakorlat Egészítsd ki a Guitar Wars alkalmazás index. $rowI'screenshot *J ) > 0) { echo ^ t d x i m q src="' . echo '<strong>Name:</strong> ’ . hogy a leg­ magasabb pontszám egy a topscoreheader CSS-stílussal formázott fejlécet kapjon! Tipp: ne feledd. echo 1<span class="score”> ' . '</td>'. m o s t i t t vagy > 263 . ami két oszlopból áll. $i .

he *<span clas:s=nscore">1 . hogy a legmagasabb pontszám fejléce a rekordok HTMLtáblázatának része. '</span><br />'. fejezet . amelyik megszámlálja a pontszámokat. A ciklus végén növelni kell a számláló értékét. . ezért létrehozod a fejléc HTML-kódja't. while ($row = mysqli_fetch_array ($data ) ) { // A pontszámok megjelenítése ■-F i ( çdKo ¿olspan—u2-” t l â d t r ">Top S^orc. akkor tudod. ami két oszlopból áll.</table>'. Ennek a segítségével különíted el az első pontszámot. hogy ez az első' (a legmagasabb!) pontszám.m egoldás Gyakorlat . echo . echo *<strong>Nsme:</strong> ' . ’<br />’. GW UPLOADPATH . Ha az $i értéke 0. else { echo ’c t d x i m g src=-"' . GW_UPLOADPATH . Az $i az a változó.d></tr> 1. hogy a legmagasabb pontszám egy a topscoreheader CSS-stílussal formázott fejlécet kapjon! Tipp: ne feledd. $row[ 1date' . $row['screenshot'1) && filesize( GW_UPLOADPATH . 'unverified. ] if ( is_file(GW_UPLOADPATH . I II alt="Score image" /></tdx/tr>’.gif' r" alt:="Unverií ied score" /></t.php 264 5. $row[’screenshot' ) > 0 { ] ) echo T <td><img src="* . index. $i = 0.' . $ row['screenshot1J .php parancsfájljának'kódját. 1 echo ^trXtd cláss=. mint az $i = $i + 1.. A topscoreheader stílusosz­ tályt a style. // A pontszámok tömbjének bejárása és HTML-ként történő formázása egy ciklussal echo '< t a b i e > ’.megoldás Egészítsd ki a Guitar Wars alkalmazás index.css tárolja. echo *<ströng>Date:</strong> ’ . '</td>’. $row('name'] . $row[ ’score*] .G yakorlat .scoreinfon>1. Ez a kód ugyanazt csinálja.

De haladjunk lépésenként. ami megakadályozza a versenyzőket abban. így igaz. Cu. Úgy fest. m o s t i t t vagy ► 265 . a meg nem erősített pontszámokkal foglalkozni kell. frcorc.íar W ..p h p parancsfájlt úgy. hogy feltöltsék a pont­ számaikat megerősítő képernyőfelvételeket.F ájlokban tá ro lt adatok kezelése Tesztűt Rendezd a rekordokat. hogy lásd a rivaldafénybe került rekordot.Scores W ckom c. és nyisd meg a böngésződben. hogy az új.High . majd add hozzá a legmagasabb pontszám fejlécét létrehozó kódot. W a ro r. rendezett SELECT-lekérdezést használja. és emeld ki a legmagasabb pontszámot! Módosítsd az in d ex. egy újabb probléma merült fel. Töltsd fel az új parancsfájlt a webkiszolgálóra. hogy vannak meg nem e r ő s íte tt p o n tsz á m o k . G rn u. hogy a s o rre n d rendben v a n . Name: Ashtnn Simpson Dalt-: Dote: 2008-04-23 09:13:34 v e r i f i e d ! 345900 Name: Eddíc V anilii Date: 2008-04-23 09:06:35 KJasez.d e elég gáz. do you h a « w tw ft u k o to crack die high score list? Ifs o ..High Srores ars Guitar Wars . Top Score: 368420 368420 A legmagasabb pont­ szám most már világo­ san látszik a rekordlis­ ta tetején...ju a t « Id to u .

Nem bírok rá jö n n i.ethtWi«fl*»eor«.Add Your High Score Ethel Heckle Screen shot: . Az per­ sze jó. fejezet .r £ to o i iiio io Guitar Wars . A felhasználót azonban értesíteni kell a hiba okáról. hogy jelzi a fel­ használóknak.m é re tk o rlá t beállítása a képek számára o 0 b e írta m a pontezámomat. amelyek nem képfájlok.emlékezz vissza. hogy az űrlap visszautasít egyes fájlokat. hogy miért. php) ellenőrzése tehát két fontos célt szolgál. A képfájlokat feltöltő űrlap (addseore. mi le h e t a gond.pdf Elnézé&t. de nem is kép! Az a gond. a Yéperryytffolvétd fe\töltéeével kapcsolatban probléma merült fel. n s > r> . ée megadtam a k é p e rn y o fe lv é te lt.3df Add o o i 0 1 A fájl nem csak hatalmas. azzal. Ez a fájl egyrészt óriási (sokkal nagyobb 32 KB-nál).Add Your High Score Sorry. mert a fájl túl nagy . Először is megerősíti a nagy fájlok feltöltése elleni védelmet. ha ellen­ őrzéssel egészítjük ki az Add Score űrlapot. 266 5. de nem mondja meg a felhasználóknak.« <T- Ez a hibaüzenet nem árul e sokat a felhasználónak arról. hogy a fájl nem lehet nagyobb 32 KB-nál. hogy olyan állomá­ nyokat töltsenek fel.io c o G u t t e r ‘W a rs A d d Y o u r H ig h £ c c . (h<rt »as a probfcm uploading ' wmr ¡„^ Nome: e v>i « e « i iki Soe 50G cr: 0CÖ Screen shoe (owoiewC)r*> fi * rre . hogy az űrlap bizonyos fájlokat nem enged át. mind a típusát ellenőrizned kell. hogy mi volt a gond a rekord feltöltésével. e b ­ ben az esetben azért. amelyek nem ké­ pek. A fájlfeltöl­ tő űrlapon tehát a fájlnak mind a méretét. ioioiii ethelshugescore. de a m ik o r a z Add g o m b ra kattintok. A fájlok feltöltését jobban szabályozhatjuk. c s a k egy á lta lá n o s h ib a ü z e n e te t kapok. hogy a fájlméretet legfeljebb 32 KB-ra korlátoztuk az űrlap kódjában. hogy a fel­ használók olyan fájlokat töltsenek fel.A d d V o w H la h S c c r e Guitar XVars . de még csak nem is kép! i \ i N am e: S co re: s o . másodszor pedig megakadályozza. és emellett azt sem szeretnénk.

kis
Csak í képek engedélyezettek

F ájlokban tá ro lt adatok kezelése

De pontosan hogyan ellenőrizheted az Add Score űrlapot, és győződhetsz meg arról, hogy a feltöltött képek m egfelelő méretűek és típusúak? Nos, a vá­ laszt a beépített $_FILES szuperglobális változó adja meg, amellyel korábban - ha még emlékszel rá - a feltöltött fájl ideiglenes tárolóhelyét olvastad ki. hogy a fájlt áthelyezhesd az images mappába. Most arra fogod használni, hogy kinyerd a fájl méretét és MIME-típusát. ^ ^ , Mg fe!ettif 3mj jelentősen

$ FILES [ ' screenshot ' ] [ 'size']

_______k ilé p i a 32 KB-OS korlátot. (I 280 472 bájt az 1,22 MB, ami 1250 KB.)
A fájltípus POF, nern pedig egy
elfogadható Webes képformátum, például GIF, JPG vagy PNG.

1280472 .c

^

$_FILES['screenshot1] [ 'type' ]
appii cation/pdf

Nem csak azt szeretnénk, hogy a képfájlok ne haladják meg a 32 KB-os méretkorlátot, hanem hogy a típusuk is megfeleljen ahhoz, hogy w ebes képként meg lehessen jeleníteni őket. A w ebes képeket a leggyakrab­ ban az alábbi MIME-típusok jelzik:

$_FILES[1screenshot1] [ftype * ]

GIF
image/gif
phizsscore.gif

JP EG
image/jpeg
or

/\ rekordokról készült képernyőfelvételeket tartalmazó képfájlok

image/p-peg

fo o t

PNG
image/png

jeanpaulsscore.jpg

iiio io t o o io u lo io u ,

jacobsscore.png

ki a ceruzád!
*

írj egy i f utasítást, amely ellenőrzi, hogy a képernyőfelvétel képfájl-e, vala­ mint hogy a mérete 0 bájtnál nagyobb, de a GW_MAXFILESIZE állandó én ek é­ nél kisebb! Tegyük fel, hogy a fájlméretet és a fájltípust már elraktároztad a $screenshot_size és a $screenshot_type nevű változókban.

if (

) {

m o s t r tt vagy

>

267

a fájlellenörzés beépítése az alkalm azásba

-

Hegyezd ki a ceruzád! Meqoldás

tgyes böngészők e2t a MIMÉo JPEf’ képeV" s!t.rcc.hSK°Í_Íy?c

írj egy i f utasítást, amely ellenőrzi, hogy a képernyőfelvétel kép­ fájl-e, valamint hogy a mérete 0 bájtnál nagyobb, de a GW_MAXFILESIZE állandó értékénél kisebb! Tegyük fel, hogy a fájlméretet és a fájltípust már elraktároztad a $ s c r e e n s h o t_ s ir € és a $ s c r e e n s h o t_ ty p e nevű változókban. / JiíO.H . ( l í ~

aooíááa znstsr. J. J k / P ? . && - - - - " i ^ _____ -____ ____________^ ~ (fsdrcchsKo-t^siz^ > 0 ) && (fs^rcchsKot^siz^ <— ^ W W y iA ^ lL K ( Z - E ) ) f

appvars.php

Mivel a maximális fájlméret most egynél több helyen szerepel az Add Score parancsfájlban, célszerű ál­ landóként tárolni.

A fájlellenörzés megbízhatóbbá teszi az alkalmazást
Némi ellenőrzés beépítése bármely PHP-alkalmazást jelentősen könnyebben használhatóvá tesz, nem beszélve a nagyobb biztonságról. Egy informatív hibaüzenet tehát segít a felhasználónak, hogy pontosan tudja, milyen korlátozások vonatkoznak a feltöltött képfájlokra.
Guitae W df; - Add Your H»gh Scor?

tn » * » * * *• hatod, hogy » ” 1en
ma9Varaz

fájlok feltol«*.«

a

Ez nevetséges!

Wars - Add Your High Score
The serein vhol r u t be a GIF. JPEG. or PNG image fl no *r«*ier ihan 32 KB i tón^ ir r Naine: O e' H c e1 n ek Score: löoooc Scrccn sbm: cnowfii )™ fc e »

(**>

Mi nem látunk semmilyen problém át.

jeanpaulsscore.jpg

ethelshugescore.pdf
26 8
5. fejezet

phizsscore.gif

jacobssco re

Fájlokban tá ro lt a d a to k kezelése

Mivel a parancsfájlt megbízhatóbbá szeretnénk tenni, az sem árt, ha ellen^ őrződ a $_FILES szuperglobálist, hogy nem történt-e hiba a feltöltés során.

Beszédes hibaüzenet megje lenítése, ha a fájl túl nagy, vagy nem megfelelő' típusú.

if { empty ($name) && Iempty ($score> && !empty <$scVeenshot) ) { ! if {(($screenshot_type ’image/gif') I (Sscreenshot_type »= ’image/jpeg') | I | ($screenshot_type == ’image/pjpegf) l ($screfenshot_type == ’image/png’)) && l ($screenshot_size > 0) && ($screenshct_siz^/x= GW_MAXFLLE5IZE)) { Lf (S_FILES[7 file,ll'error'3 ==0) { / / A fájl áthelyezése a ¿eltöltési céimappába $target GW_UPLOADPATH . Sscreensnot; it (move_uploáded_file($_FILES[’screenshot’]['tmp_name'], Starget)) ( // Csatlakozás az adatbázishoz $dbc mysqli^connect(DB_40ST, DBJJSER, DB_PASSWORD, DB_NAME);
/ í

Az adatok bevitele az adatbázisba Squery "INSERT INTO guitarwars VALUES (0, NOW ( ) , mysqli_query($dbc, $query); // A echo echo echo echo echo

'$name',

'$score',

'$scr$enshot' )

művelet sikerének megerősítése a felhasználó számára '<p>Thanks for adding your new high score!</p>' ; '<p><strong>Name:</strong> ' . $name . '<br />'; '<strong>Sccre:</strong> * . $score . '<br />'; '<img src = " ' . GW_UPLOADPATH . Sscreer.shot . '" ait="Score image" /></p> I ’<p><a href-"index.php">&lt;&lt; Back to high scores</a></p>' ;

.

// A pontszám törlése az űrlap aiaphelyzetbe állításához Sname « Sscore = Sscreensnot = mysqli_clcse($dbc);

)
else { echo ’<p ciass="error">Sorry, there was a problem uploading your screen shot image.

} )
else { echo '<p class "error">The screen shot must be a GIF/ JPEG, or PNG image file no ' . ’greater than * . (GV^MAXFILESIZE / 1024) . ’ KB in size.</p>';

}
// Kísérlet a képernyőfelvétel ideiglenes képfájljának törlésére @unlink(S_FILESl'screenshot'j 1'tmp_name']);

}
else { echo '<p class="error">Please enter a_l of the information to add your high score.</p>'

}

Az unlink() függvény töröl egy fá jlt a webkiszolgálóról. A @ a függvény hibaüzenetének elrejtésére szolgál, ar ra az esetre, ha a fájlfeltöltés nem járna sikerrel.

Az új, továbbfejlesztett Add Score parancsfájl most már ellenőrzi a képfájlokat.

addscore.php

m ost i t t vagy

269

te szte ld az addscore.php p a ra n c s fá jlt!

Tesztút
Egészítsd ki a képfájlok ellenőrzésével az Add Score parancsfájlt!
Egészítsd ki az addscore.php parancsfájlt az új képfájl-ellenőrző kóddal, töltsd fel a fájlt a webkiszolgálóra, és próbáld ki az Add Score űrlapot érvényes képekkel és néhány érvény­ telen fájllal is (nagy képekkel és nem kép típusú fájlokkal).

Nincsenek

hülye kérdések
! Miért van két MIME-típus a JPEG-képek számára?
! Ezt inkább a böngészők gyártóitól kellene megkérdezni, akik valamién úgy döntöttek, hogy más-más MIME-típust használnak a JPEG képekhez. Ahhoz, hogy a JPEG-fájlok ellenőr­ zése biztosan a lehető legtöbb böngészőben működjön, mindkét MIME-típust ellenőrizni szükséges.

K. M iért az

appvars . php-be tesszük

a g w _ m a x f ile s iz e változót, am ikor csak az addscore .php-ben használjuk?

v ! Igaz, hogy az ap p v ars .php azoknak az ada­

toknak a tárolására szolgál, amelyeket több pa­ rancsfájl közösen használ, de bármilyen pa­ rancsfájl-állandó tárolására kitűnő hely. Ha a GW_MAXFILESIZE-t az ap p v ars .php fájl­ ban helyezed el, könnyebben megtalálod majd ezt a változót, ha netán magasabbra szeretnéd állítani a fájlfeltöltési méretkorlátot.

! M iért kell azt is ellenőrizni, hogy a képfájl nagyobb-e 0 bájtnál? Ez nem igaz minden képre?

\ Csak elm életben. A gyakorlatban azonban le­
hetséges 0 bájtos fájlt is létrehozni a kiszolgá­ lón, ha a felhasználó egy olyan fájlt ad meg, ami valójában nem is létezik a számítógépén. Az addscore.php a biztonságra törekszik, és ellenőrzi, hogy a fájl nem üres-e, ha véletlenül ilyesmi történne.

K

i Hogyan működik a @uniink( ) függvényt tartalma* zó kódsor?
fájlt a webkiszolgálóról - esetünkben a feltöl­ tött ideiglenes képfájlt. Mivel előfordulhat, hogy a feltöltés meghiúsult, és nincs ideiglenes képfájl, el kell vetni az unlink () által adott esetleges hibaüzeneteket, a kukac (@) jelet a függvény neve elé írva. Kukacot bármelyik PHP-függvény elé tehetsz, ha a hibaüzeneteit el szeretnéd rejteni.

V ! A PHP beépített unlink {) függvénye töröl egy

270 5 . fejezet

F ájlokban tá ro lt a d a to k kezelése

ée mi lesz a meg nem e r ő s íte tt rekordokkal? M agúktól nem fognak eltűnni.

A rekordok listáját ki M l tisztítani.
Most, hogy a képfájlok fel töltését - az ellenőrzésnek há­ la - biztonságosabbá tettük, nem hagyhatjuk figyelmen kívül többé a meg nem erősített rekordpontszámokat. Az újonnan feltöltött, képernyőfelvételekkel megerősí­ tett rekordok nem szorulhatnak hátrébb olyan régi re­ kordok miatt, amelyeknek a valódiságát nem bizonyítják képernyőfelvételek. A Guitar Wars alkalmazásban vala­ hogy el kell kell távolítani a régi rekordokat.

jelenlegi legmagasabb pont­ szám nincs megerősítve, ami nem túl bizalomgerjesztő többi felhasznaid számára.

Guitar Wars - High Scores

W ekaftK.GütC*W doyou imor,

w\w

«orehi7Uto.jU M

368420

op Score: 368420

N m k : A ih w fl Säbpeoc Dk « 2008-04-23 O ft 13:34

345900

guitarwars

N * n r: lidd ic V *n flt

200K )4.230Wjj »
screenshot

2 0 0 8 -0 4 -2 2 1 4 :3 7 :3 4 2 0 0 8 -0 4 -2 2 2 1 :2 7 :5 4 2 0 0 8 -0 4 -2 3 0 9 :0 6 :3 5 2 0 0 8 -0 4 -2 3 0 9 :1 2 :5 3

Paco Jastorius N evil Johansson Eddie Vanilli

127650 98430 345900 282470
A képpel meg nem erősített pontszámokat el kell távolítani az adat­ bázisból, méghozzá azonnal!

Ashton Simpson
2 0 0 8 -0 4 -2 3 1 4 :0 9 :5 0

368420 64930 186580

Kenny Lavitz Phiz Lairston

írd le, hogy szerinted hogyan lehetne megtisztítani a rekordlistát a meg nem erősített pontszámoktól:

m o s t i t t vagy

271

fe lü g y e le ti o ld a l hozzaádása az alkalm azáshoz

Tervezz felügyeleti oldalt!
Mivel csak néhány meg nem erősített rekordot kell eltávolítanod az adat­ bázisból. nyugodtan beizzíthatod valamelyik SQL-eszközt, és saját kezűleg törölheted a kívánt sorokat néhány DELETE-lekérdezés segítségével. Ez azonban nem biztos, hogy az utolsó eset, hogy törölnöd kell egy rekor­ dot, és nem szerencsés, ha egy webalkalmazás karbantartása során kézi vezérlésű SQL-lekérdezésekre kell támaszkodnod. Olyan alkalmazást kel­ lene építeni, ami a lehető legkevesebb erőfeszítéssel üzemeltethető.

Amire szükség van tehát, az egy olyan oldal, amit csak a webhely rend­ szergazdája érhet el és használhat rekordok törlésére - egy felügyeleti ol­ dal. Világosan meg kell húzni azonban a határt, hogy a Guitar Wars alkal­ mazás mely részeit érhetik el a felhasználók, és mely részek tartoznak a rendszergazda hatáskörébe.

A webalkalmazásoknak gyakran vannak nyilváno­ san elérhető és csak a webhely karbantartás­ ára szolgáló felügyeleti oldalai is.

Ezek a felhasználóknak szánt oldalak:
Guitar W ars
Nnnr
SctW .

Sro=^ : cc

_

A Guitar Wars főoldalát és az Add Score oldalt a végfelhasználóknak szánjuk, a rekordjaik feltöltesere és megtekintésére.

64930

bítr: W -WC UílW JS O

Krtiry IJ>,Q

Unveri f i e d !

S W P t Ü TÚ U -. W M^ C D «r-.20C »*04-:-*C «:a»

18658Ü

Ezt az oldalt csak az alkalmazás felügyelője használhatja:
rid»«:

PKIZl Scor*« lftU S&O

tiuitar War, - High S ot« Administration c
**420
U .1 VX>

W*-0*.J4o*ca.j i »MTO&xjm:

A felügyeleti oldalt csak a webhely rendszergazdája használhatja, mivel nem szeret­ nénk, ha a végfelhasználók is törölhetnének rekordokat.

P *Ja**» anO ^MO O 2JW M M M :), o
»M -04-24MD1JI «0 0 Kccvsí /
J M C tt-ö*» H 0 « 0 6 » 3 0 ^

____

Egy adott rekordot a Remove (Eltávolítás) hivatkozásra kattintva törölhetünk.

272 5 fejezet

F ájlokban tá ro lt a d a to k kezelése

Gyakorlat

írd le, hogy mit kell tennie a felügyeleti (Admin), illetve a rekordeltávolító (Remove Score) parancsfájlnak, hogy megvalósíthassuk a rekordok törlését a Guitar Wars al­ kalmazásban, majd rajzold le, hogy milyen hatásai van egy’ rekord eltávolítása a guitarwars táblában található sorokra és a hozzájuk tartozó képfájlokra!

adm in.php

W e b k is z o lg á ló

rem ovescore.php

guitarwars
id
1 2 3 4 5 6 7

dale
2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09:06:35 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04^23 14:09:50 2008-04-24 08:13:52

man«
Paco Jastorius Nevil Johansson Eddie Vanilli Belita Chevy Ashton Simpson Kenny Lavitz Phiz Lairston

score
127650 98430 345900 282470 368420 64930 186580

sae«m hol

phizsscore.gif

1001
ttíO iö l

ooioh loionr

m o s t i t t vagy

► 273

G yakorlat - m egoldás

Az admin.php parancsfájl kiírja az összes rekordsort, és mindegyik mel lett megjeleníti a Rempye hivatkozást,, ami információt ad a'f a Rémöve .Score. parancsfájlnak,.......................................

Vtfars - Remove a Bighjcgfg

Guitar Wars - Remove a mgn
W e b k is z o lg á ló
admin.php

c

,

A remoyescore.php parancsfájl gondos­ kodik a rekordnak az adatbázisból, ille t­ ve a képfájlnak a kiszolgálóról való tény Jeges törléséről, valamint, egy m.egerösí-

Naii— -^

^ _______- ^u,tar

~ Remove a High Score

Dali

scor Guitar Wars - Remove a High Score
^ The high score o f 36S420 fo r Ashton Simpson was successfully removes.

>
« B a c k IQadmin page

WWW

2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09:06:35

Paco Jastorius Nevil Johansson

127650 98430 345900 282470

im ages

2008-04-23 09:12:53

2008-04-23 14:09:50 2008-04-24 08:13:52

Kenny Lavitz Phiz Lairston

64930 186580

Bár ehhez a konkrét sorhoz nem tartozik képernyöfelvétel, a Remove Score parancsfájl a képfájlt is törli a kiszolgálóról, ha az adott rekord esetében létezik.

274 5. fejezet

F ajiokban tá ro lt adatok kezelése

A rekordeltávolító hivatkozások létrehozása a felügyeleti oldalon
Bár a rekordok tényleges eltávolításáért a Remove Score parancsfájl felel, szükséged van egy felügyeleti parancs­ fájlra, amely lehetővé teszi, hogy kiválaszd a törlendő rekordot. Az admin .php parancsfájl egy listát hoz létre a pontszámokból, és mindegyik mellett elhelyez egy Remove hivatkozást. Ezek a hivatkozások adatokat adnak át az adott rekordról a removescore.php parancsfájlnak.
<?php require_once(1appvars.php*); require_once(1connectvars.php1);

// Csatlakozás az adatbázishoz
$dbc = mysqli_connect(DB_HOST, DBJJSER, DB_PASSWORD, DB_NAME) ;

admin.php

// A pontszám kiolvasása a MySQL-aöatbázisból
$query = "SELECT + FRCM guitarwars ORDER BY score DE3C, date ASC"; $data = mysqli_query($dbc, $query);

// A pontszámok tömbjének bejárása és HTML-ként történő // formázása egy ciklus segítségével
echo '<tab^e>l; v^rhile (Srow = mysqli fetch_array($data)) {

A Remove Score parancsfájlra mutató URL többet tesz annál, mint hogy kapcsolatot teremt a parancsfájllal...adatokat is átad neki!

// A pontszámok megjelenítése
echo ’<tr class="scorerow"xtd><strong>' . $row[’name’J . *</strong></td>’ echo '<td>’ . $row['date'J . *</td>*;

echo ’<td>f . $rowf'score' . *</td>*; ] echo 1<td><a hre£-Mremov'2 scorc .php?id= ’ . 3-row['id'j . 1£amp;da*_e-' . -?row[ *dat e ’ . *£amp;name=* . $row{ *name*] . ’6arr«p;score~f . $rowf1score* J . *;arrp; se > --* .

$rowf*screenshot*] . ’">Reirrove</a></td></tr>*;

echo *</table>';

Ez a kód egy HTML-hivatkozást hoz létre, ami a removescore.php parancsfájlra mutat, és információkat ad át a törlendő- rekordról.

mysqli close(Sdbc);

?>

e=2008-04-23%2009:1 368420&screenshot="

m ost it t vagy

275

b e m u ta tko zn a k a GET~kére/mek

A parancsfájlok képesek társalogni egymással
Alihoz, hogy a Remove Score parancsfájl el tudjon távolítani egy rekordot, tudnia kell, hogy melyik rekordot kell törölnie. Ezt azonban az Admin pa­ rancsfájl dönti el. Felmerül hát a kérdés: hogyan tudatja az Admin parancs­ fájl a Remove Score parancsfájllal, hogy melyik az eltávolítandó rekord? Nos. ez a parancsfájlok közötti kommunikáció úgy jön létre, hogy az adatokat be­ lecsomagoljuk a felügyeleti oldalon található rekordok melletti Remove hi­ vatkozások URL-jébe. Ha figyelmesen megnézed valamelyik rekordhoz tar­ tozó L'RL-t. észreve heted, hogy a rekord összes adata szerepel benne.
< a href=”removescore.php?

Egy parancsfájl URL-jén keresztül adatokat adhati: át GET-kérelemként.

Cviur W - — .—S,— — ars High cores Administration

id=5&

date=2008-04-23%2009:13:34&
n am e= A s h t o n % 20S im p s o n & score=3 6 8 4 2 0 &screenshot=">Remove</a>

Guitar Wars •High Scores Administration
Rckiw is a list of all Guitar Ware high scores. Use this page to remove scores as needed.

Ashton Simpson 2008-04-23 09: 13:34 36842(fRcm osT Eddie VanSli 2008-04-23 09:06:35 345900$ £ n £ i ^ Belita Chevy 2008-04-24 08.0 2:11 282470 Rcmpvgf Phb. Lairstoo 2008 <*-24 08: 13:52 186580 Remove

Minden adathoz tartozik egy név és egy érték, amelyeket egy „é s " jel (& ) választ el a többi név-érték pártól.

A Remove URL a removescore.php NevH Johansson 2008-04-24 08:02: 11 98430 Remove Kenny Laviu 2008-04-23 14:09:50 64930 Remove parancsfájlra hivatkozik, de a tö r­ lendő' sor adatait is tartalmazza. Erre a hivatkozásra kattintva nem csak elindul csak elindi a Remove Score parancsfájl, hanem adatokat is átadunk neki egy GET-kérelem formájában.

Paco Jaslorius

2008-04 24 08:02:11 127650 RsmpVfi

Oké, szóval egy URL-en keresztül adjuk át az adatokat, de pontosan hogyan teszi rá a kezét a Remove Score parancsfájl az adatokra? Nos, a parancsfájloknak URL-en keresztül átadott adatok a $_POST-hoz nagyon hasonló $_GKT szuperglobális tömb­ ben érhetők el. Az adatok becsom agolása egy hivatkozás URL-jébe ugyanolyan, mint egy GET-kérelem használata egy w ebes űrlapon. A hagyományos HTML GETkérelm ekben az űrlapadatok autom atikusan kerülnek az űrlapot feldolgozó parancs­ fájlhoz a parancsfájl URL-jének részeként. Itt ugyanezt hajtjuk végre saját kezűleg egy egyedi GET-kérelem URL-ként történő felépítésével. Alihoz, hogy a $_GET tömb segítségével elérd a rekordok adatait, a $_POST használatához hasonlóan szükség van minden adat nevére.

Az adatokat heted el a $

3 nevükkel ű .G ET tömbbet.

* f*>

/

Egy parancsfájl U R L-/'— ^ jében kényelmesen ad­ hatsz át fontos adato­ kat, például egy adat­ bázis egy sorának azo­ nosítóját.

S-GBT [ ■ e , j nam
$ g e t [ 1s c o r e ’ 1
g g H 'd a te 'l

276 5. fejezet

F ájlokban tá ro lt a d a to k kezelése

Nem értem , mi ez a nagy fe lh a jtá s a GET körül. M ié rt nem adjuk á t az a d a to k a t egyszerűen a P 05T segítségévéi? Eddig mindig így csináltuk.

N am e: Pni* Lairston

^

Score: 166S 0 B
S creen sh o e

___
p h irs*c o r* grf

A webes űrlapok gyakran használnak POSTkérelmeket adatok elkül­ désére, amelyeket a $ POST tömb tárol.

Ha az adatokat egy URL-ben szeretnéd el­ küldeni, a GET-et hasz nálbatod, amely az ada­ tokat a $_GET tömb­ ben tárolja.

m o st i t t vagy

277

GET vagy POST

OET-ek és POST-ok
A GET és a POST közötti különbség nem csak abban áll, hogy az egyik űrlapokat,
a másik m eg URL-eket használ, mivel a GET-kérelmek űrlapadatok elküldésére is képesek (és gyakran így is használják őket). A GET és a POST közötti valódi kü­ lönbséget a kérelem célja jelenti. A GET-et elsősorban arra használják, hogy adato­ kat olvassanak ki a kiszolgálóról, anélkül, hogy o tt bármire hatással lennének. A p o s t ezzel szem ben jellem zően arra használatos, hogy’ adatokat küldjenek a kiszolgáló­ nak. ami után a kiszolgáló állapota általában valam ilyen módon megváltozik a kapott adatok függvényében. ____
PO ST

A Webes kérelmek k r típusa, a GET és a POST szabályozza hogy az adatok bog közlekednek a pa­ rancsfájlok között.

Arra használják, ho^ s z o lg á ló n a k ,V ^

J r n m S i n változást “ £ b a n . például adatokat
G ET

^ i ^ f d a t b á z i s b a . A v á la sz ta n a d j » * « szúr be egy FT_lel ellentétben a POS r visszaad hatok. A G - J ^ műVe le té n k ek érelm ek csa k eg y és a bennük elkü ld ött

Jellem zően olyan adatkinyerésre használják, ami nem változtat meg semmit a kiszolgálón. Kis adatmennyiség esetén a GET arra is kivá­ lóan megfelel, hogy közvetlenül egy URL-ben küldjünk adatokat a kiszolgálónak. A POSTtal ellentétben a GET elsősorban kis m ennyi­ ségű adat elküldésére alkalmas.

1 resztül hajtható vég , ! adatok (ugyancsak a maradnak

eltórően) rejtve

Nincsenek

hülye kérdések

V

I C ! Találkoztam olyan webes űrlapokkal is, amelyek a G E T -e t használják. Ezek hogyan működnek?
I Amikor w eb es űrlapokról van szó, mind a G ET-nek. mind a POST-nak m egvan a maga helye. A w eb es űr­

tol, semmit nem módosítva a kiszolgálón. A GET tehát az olyan űrlapok esetében tökéletes, am elyek inform ációké kérnek a kiszolgálótól, és nem változtatják m eg annak az á l ^ l potát, például sorokat választanak ki egy adatbázisból. A POST ezzel szem ben az olyan kérelm ekhez a legalkalma­ sabb. am elyek hatással vannak a kiszolgáló állapotára, p é ld á i egy IN SER T- vagy DELETE-lekérdezést indítanak, ami meg­ változtatja az adatbázist. Egy másik különbség a GET és a POST között, hogy a GET-en keresztül átadott adatok látha­ tók az URL-ben. míg a POST-adatok rejtve maradnak, és e z é l egy kicsit biztonságosabbak.

lapok létrehozásakor a < f o rm > elem m e th o d jellem zője ha­ tározza m eg az adatok elkü ld ésének m ódját, m íg az a c t i o n jellem ző az adatokat fogadó és feldolgozó parancsfájlt azo­ nosítja: < fo rm m e th o d = " p o s t" a c t i o n - " a d d s c o r e .p h p " > Am ikor a felhasználó a Subm it gom bra kattint az űrlap b e ­ nyújtásához. végrehajtódik az a d d s c o r e . p h p parancsfájl, am ely m egkapja az űrlapadatokat a $ _ P 0 S T töm bön keresz­ tül. A < f o r m > elem azonban ugyanilyen egyszerűen így is ír­ ható, mely esetb en az adatok elkü ld ése a $_G E T töm bön k e­ resztül történik: < fo r r n m e t h o d - " g e t " a c tio n = " a d d s e o r e .p h p " >

K

V

Milyen jelentősége van ennek a különbségnek a g e t és a p o s t között, amikor egy URL-en keresztül adunk át adat:kat egy parancsfájlnak? 1
! Nos, először is csak egy G ET-kérelem képes URL-en keresztül adatokat átadni egy parancsfájlnak, tehát eb-1

K V

! Á, szóval nem szám ít, hogy m elyik kérelem m ódszert - a G E Tet vagy a PO S T-O t - használom?
• Tévedés, igenis számít, és nem is kicsit. A GET-et általá­ ban arra használjuk, hogy adatokat kapjunk a kiszolgáló

ben az esetb en a POST azonnal kiesik. Továbbá, a GET-et hit zárólag olyan kérelm ekhez szánták, am elyek nem változtat­ ják m eg a kiszolgáló állapotát, am iből az következik, hogy nem szabad IN SE R T . DELETE FROM é s hasonló, az adatba-] zist m ódosító utasításokat kiadnod egy olyan parancsfájlban am ely az URL-jén keresztül kap adatokat.

278 5. fejezet

F ájlokban tá ro lt a d a to k kezelése

Kandalló melletti csevely
Ma esti vendégeink: GET és POST GET:
Azt csicseregték a madarak, hogy azt terjeszted rólam, hogy csak arra vagyok jó, hogy kérdéseket tegyek fel, de a válaszokkal nem tudok mit kezdeni. Igaz ez? Naná. Nézz szem be a tényekkel: nincs igazi hatal­ mad, csak kérdezni tudsz a kiszolgálótól. Rendben, az igaz, hogy nem arra szántak, hogy változást idézzek elő a kiszolgálón, például fájlokat töröljek, vagy sorokat adjak egy adatbázishoz, de ez még nem jelenti azt, hogy jelentéktelen vagyok. Ha te mondod. Én csak annyit mondok, hogy az olyanok nélkül, mint én, nem sok minden lenne elvégezve a kiszolgálón. Ha a kiszolgáló beleragadna egy adott állapotba, elég unalmas lenne a világ. Igaz, de te meg hozzá vagy kötve a cimborádhoz, Formhoz, én viszont csak futó ismeretségben vagyok vele. Nekem vannak más barátaim is, például URL. Azt hiszed, a „baráti köröd” pótolja a műveletekre va­ ló képtelenséget? Erősen kétlem. Akkor kérdeznék tőled valamit. Hogyan hajtasz végre egy műveletet, ha a kis barátod, Form, nincs a közelben? Tudod, Page néha nem érzi szükségét, hogy Form hoz forduljon. Na figyu, Form a barátom, és még régen megígértem neki, hogy semmit nem csinálok nélküle. Lenézheted a hűségemet, de nem fogom elárulni a barátomat! Csigavér, haver. Csak arra szerettem volna rámutatni, hogy lehet, hogy csak olvasom az adatokat a kiszolgáló­ ról. de elég rugalmas vagyok abban, hogy hogyan. Ezt elismerem, és nincs is vele semmi bajom. Ezt örömmel hallom. Jó volt beszélgetni veled ...

POST:

m o s t i t t vagy

► 279

a rem ovescore.php m űködése

A GET, a POST és a rekordok eltávolítása
Ott tartunk, hogy a rekordok eltávolítása a Guitar Wars alkalmazásban egy Remove hivatkozással kezdődik az Admin oldalon, amely kapcsolatot teremt a Remove Score parancsfájllal. Azt is tudjuk, hogy a rekord adatait a hivatkozás URL-jén keresztül ad­ hatjuk át a Remove Score parancsfájlnak. Azzal viszont van egy kis gond, hogy a GETkérelemnek nem szabad semmit sem megváltoztatnia a kiszolgálón, például nem tö­ rölhet egy rekordot. Erre az az egyik lehetséges megoldás, hogy nem módosítunk semmit a kiszolgálón...egyelőre. Mi lenne, ha a Remove Score parancsfájl először egy jóváhagyást kérő oldalt jelenítene meg, mielőtt ténylegesen törölne egy rekordot az adatbázisból?
H

G uitar Wars - Rekord

etvlts láoíáa
B ztos, hogy t r l i a k a rja i öön az a á b re k o rd o t? lbi
Név D á tu m P o rtte z á m Igen Nem Vl&eza a fe lü g y e le t o ld a lra

& O Wm,.;:. 1 P ■■ -

a

---

Guitar Wars - Remove a High Score
Alt you suic you want to delete ihc fotlowmg higb M it?

Esy me9eró'sítflr oldal lehetővé teszi
Name: Ashioo Simpscn
Date: 2008-04*23 09:13:34

• felhasználónak, hegy az azonnali törlés helyett jóváhagyja a rekord eltávolítását

Score: 368420 0 Ycs O No

rlubm it'
<<Back£LadmfaLp«£

A jóváhagyó oldalon a törlésre kijelölt rekord látható egy egyszerű Yes/N o űr­ lapon. Ha a Yes-re kattintasz, akkor a Submit gom bot megnyomva törlődik a rekord, míg ha a No-ra, akkor visszavonod a törlési parancsot. GET-ekben és POST-okban gondolkodva, a Rem ove Score parancsfájl a jóváha­ gyó oldalt az Admin parancsfájltól érkező GET-kérelemre válaszolva jeleníti meg. Mivel pedig maga a jóváhagyó oldal egy űrlap, a benyújtásakor kiadhatja a saját POST-kérelmét. Am ennyiben az űrlap önhivatkozó, ugyanaz a parancs­ fájl (a removescore.php) dolgozhatja fel a POST-kérelmet, és hajthatja végre a rekord törlését. Az eljárás lépései a következők:

Teljes mértékben le­ hetséges, és egyes esetekben hasznos is, ha egy parancsfájl GET- és POSTkérelmekre egyaránt képes válaszolni.

O

A felhasználó a Remove hivatkozásra kattint az Admin oldalon, ami egy GET-kérelmen keresztül elindítja a Remove Score parancsfájlt. A Remove Score parancsfájl a $_GET tömbben tárolt rekordadatokat fel­ használva létrehozza a törlés jóváhagyását kérő űrlapot. A Remove Score parancsfájl újra lefut, ezúttal egy POST-kérelem hatására, amit a felhasználó a jóváhagyó űrlap benyújtásával indít el. A Remove Score parancsfájl törli a rekordot az adatbázisból, valamint a hoz­ zá tartozó képernyőfelvétel képfájlját a webkiszolgálóról.

© ^

0

280 5. fejezet

F ájlokban tá ro lt a d a to k kezelése

Nézzük végig a rekord eltávolításának folyaGuitar W - High .Scores Administration ars

matat lépésenként

Guitar Wars - High Scares Administration
Below, is a list of ail Guitar Wars high scores. l/*c this page to reoovc score;, as needed

Ashton Simpson 2008-04-23 09:13:34 365420 B&Q0ÏC Eddie VanflB 2008-04-23 09:06:35 345900 &aj&vs Belita Chevy 2008-04-24 08:02:11 282470 giQoyç Phi/ Lairston 2008-04-24 08: ! 3:52 186580 EfllSiVj; Paco Jasiorius 2008-04-24 0802:11 127650 &w» gv£ Nevű Johansson 2008-04-24 0802:11 98430 BflDBK Kenny Laviu 2008-04-23 1409:50 64930 EOBDYC

A Remove Score parancsfájlt egy GET-kérelem indítja el, és egy URL-en keresztül adja át a rekord adatait.

admin.php

$_GET

Ennek a rekordnak az eseté ben nincs képernyőfelvétel.

A Remove score
parancsfájlt it t egy POST-kérelem indítja el (ism ét), és átadja a törlendő rekordot.

Ez pontosan ugyanaz a parancsfájl, csak ép­ pen másképp reagál attól fiiggó'en, hogy GET- vagy POST-kérelmet kap-e.
Guit:v W - Bemove « High Scor* ars

Guitar Wars - Remove a High Score
The high score o f 368420 fo r Ashton Simpson was successfully rem oved « Back to admin onec

Ashton Simpson 36Ô 420 retordpontszáma sikeresen törölve.

A Remove Score parancsfájl törli a rekordot az adatbázisból és a képernyőfelvételét a webkiszolgálóról.

m o s t i t t vagy

m ég egy k is G El és POST

Nincsenek

hülye kérdések
K: Hogyan képes ugyanaz a parancsfájl
feldolgozni?
get-

és POST-kérelmeket is

V : Minden attól függ, hogy miként történik a parancsfájl m eg­
hívása. A Rem ove Score parancsfájl kétféleképpen hívódik meg. Az első, hogy a felhasználó valamelyik Rem ove hivat­ kozásra kattint a felügyeleti oldalon, mely esetben egy URL vezet a parancsfájlhoz. Mivel az adatok az URL-be vannak csom agolva, ez egy* GET-kérelemnek tekinthető. A GETkérelem hatására a parancsfájl egy w ebes űrlapot állít elő, am elynek a m űvelete ugyancsak az említett Remove Score parancsfájlra hivatkozik, így aztán am ikor a felhasználó b e ­ nyújtja az űrlapot, a parancsfájl m ásodszor is meghívódik. Az első alkalomtól eltérően azonban ezúttal nincs URL, am ibe bele lehetne csom agolni az adatokat, tehát ez nem GET-kérelem. A rekord adatainak átadása ehelyett egy POST-kérelmen keresztül történik, vagyis az adatok a $_POST töm bben érhetők el.

K i Tehát a meghívás módja dönti el, hogy a parancsfájl m it csinál?

V ! Igen! Amikor a parancsfájl egy’ URL-ben, GET-kérelemként

kap adatokat, akkor tudja, hogy egy jóváhagyó űrlapot kell m egjelenítenie, nem pedig törölnie valamit az adatbázisból. A $_GET töm bben átadott adatokat tehát csak a jóváhagyó oldalon használjuk fel, és nincs maradandó hatásuk a ki­ szolgálóra. Ha azonban a parancsfájlhoz egy POST-kérelmen keresztül érkeznek adatok, akkor a parancsfájl tudja, hogy törölheti az adatokat az adatbázisból. Az adatok eléréséhez tehát a $_POST töm böt használja, és egy DELETE FROM lekérde­ zést állít elő, ami törli a rekordot. Mivel pedig a legtöbb re­ kordhoz képernyőfelvétel is tartozik a w ebkiszolgálón, a parancsfájl ezt a képfájlt is törli.

2 8 2 5. fejezet

hogy a névnek és a pontszám­ nak is egyeznie kell. drámaian csök­ ken az esélye annak. m ost rtt vagy > 283 . hogy a név mellett a pontszámnak is egyeznie kell. ami egy sor törlését jelenti a pontszámok adatbázisából. ’3 6 8 4 2 0 ’ ’A s h t o n S i m p s o n ’ A N D score = guitarwars ld 1 2 3 4 5 6 7 Az AND művelet úgy módosítja SCD fC 127650 98430 345900 282470 X •*< — --------368420 r 64930 186580 phizsscore. A fenti lekér­ dezés így nem csak egy sort.gif dote 2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09:06:35 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04-23 14:09:50 2008-04-24 08:13:52 name Paco Jastorius Nevil Johansson Eddie Vanilli Belita Chevy ^ Ashton Simpson Kenny Lav'rtz Phiz Lairston sareemhot a lekérdezést. A milliónyi gitárhős világá­ ban komoly esély van rá. a tör­ lés pontosabban meghatározható. A lekérdezésnek tehát több információra van szüksé­ ge ahhoz. Most. Az alábbi SQL-lekérdezés például azt a sort törli. hogy véletlenül több rekordot is törölsz. ahol a name oszlop­ ban az 'Ashton Simpson' érték áll. Ha még em lékszel rá. A tábla nevét meg kell adni a DELETE FROM-nak. hogy több Ashton Simpson is létezik.F ájlokban tá ro lt a d a to k kezelése A törlendő rekord elkülönítése 5!ost. hogy a m egfelelő sort törölje: DELETE FROM guitarwars WHERE name = Ha a név mellett a pontszámnak is egyeznie kell. A Remove Score parancsfájl feladata. az adatbázis olda­ tára összpontosíthatunk. Alihoz azonban. először meg kell találnod. Ezt úgy érheted el. melyik táblából akarsz adatokat törölni. Ezzel a lekérdezéssel azonban van egy kis gond. A törlendő rekordot a felhasználó neve alap* ján keressük meg. hogy’ törölhess egy són. hogy guitarwars 2008-04-22 14:37:34 2008-04-22 21:27:54 2008-04-23 09:06:35 2008-04-23 09:12:53 2008-04-23 09:13:34 2008-04-23 14:09:50 2008-04-24 08:13:52 Paco Jastorius Nevil Johansson Eddie Vanilli Belita Chevy Ashton Simpson Kenny Lavitz Phiz lairston 127650 98430 345900 82470 368420 64930 186580 tudja. hogy7 egy WHERE záradékot csatolsz a DELETE t?.OM utasítást tartalmazó lekérdezéshez. az SQL-ben a sorok törlésére a DELETE ■ROM utasítás szolgál. ahol a namc oszlopban az Ashton Simpson DELETE FROM guitarwars W H E R E name = ’Ashton S i m p s o n 1 Ez a lekérdezés azo­ kat a sorokat törli. hogy eltávolít­ ó n egy nemkívánatos rekordot. hanem az Ashton Simpson nevet tartalmazó összes sort törölni fogja. hogy a rekordok eltávolításának folyamatát tisztáztuk.

. jó . ha két Ashton Simpson van az adatbázisban azonos pontszámmal? Ez persze valószínűtlen.ebben az esetben egy. hogy a törlendő sor kijelölésére a name és a score oszlopot is haszná­ lod. hogy a megfelel: Ashton Simpson rekordja törlődjön? 284 5 . és még mindig van rá halvány esély. A megoldás az. guitarwars name score streenshot 2008-04-22 14:37:34 2008-04-22 2 1 :27:54 2008-04-23 0 9 :0 6 :3 5 Paco Jastorius N evil Johansson Eddie Vanilli Belita Chevy 127650 98430 345900 282470 368420 64930 18 6 58 0 2008-04-23 0 9 :1 3 :3 4 Ashton Simpson Kenny Lavitz 2008-04-24 0 8 :1 3 :5 2 Phiz Lairston Ashton Simpson 368420 ashtonsscore. hogy mi történik ezzel a táblával a fenti DELETE utasítaí végrehajtásakor! Hogyan lehetne biztosítani.. hogy több olyan sor is törlődik. | írd le. így tehát garantált. hogy soha nem tö­ rölsz egynél több sort ezzel a lekérdezéssel.a tö rlé s korlátozása A törlés szabályozása a LIMIT záradékkal Az. akkor érde­ mes megvizsgálnod a valószínűtlen forgatókönyveket is. Erre a l i m i t záradék szolgál: A maximális bizton­ ság érdekében korlá­ tozzuk a törölhető' sorok számát. DELETE FROM guitarwars WHERE name = 'Ashton S i m p s o n ' AND score = '368420' LIMIT 1 A L I M I T kulcsszót követő szám tudatja a MySQL-lel. fejezet . hogy mindenképpen csak egy sort töröljön. amelyben az adott név és pontszám szerepel. Az alkalmazásfejlesztés a kockázatok csökkentéséről szól.d e nem elég. hogy legfeljebb hány sor törölhető . de ha egy alkalmazást a lehető legjobban szeretnél megtervezni. hogy kénysze­ rítjük a lekérdezést.jpg A DELETE lekére zé­ sünknek gondot jelent ha két sorban is ponto san ugyanaz a név « I pontszam szerepel. De mi történik.

pontosabban különítheted el a törlendő sorokat. ez a kód biztosan csak egyetlen sort fog törölni. A táblákhoz létrehozott elsődleges kulcsoknak az egyediség az egyik fő elő ­ nye. hogy ne töröljön egynél több sort. ha nagyon pontosan határozod meg. m o s t rtt vagy > 285 . DELETE FROM guitarwars WHERE id = 5 LIMIT 1 Soha nem árt. és az egyediséget nem biztosították m egfelelően? Ebben az esetben továbbra is hasznát veheted a LIMIT záradéknak. De mi a helyzet akkor. ím e az új lekérdezés. Ha ugyanis azt szeretnéd. A guitarwars táblában az id oszlop az elsődleges kulcs. akkor ezt ki is mondhatod: Ha az elsődleges kulcs lapján törö/sz adatokat. hogy egy lekérdezés csak egyetlen sorra legyen hatással. nem? De igen! A rekord azonosítójával tökéletesen el lehet különíteni a törlendő rekordot. Ha ezt az oszlopot használod a DELETE FROM-lekérdezés WHERE záradékában. A LIMIT záradék határozottan ar­ ra utasítja a lekérdezést. és ebben az esetben a LIMIT növeli a DELETE-lekérdezés pontosságát. hogy’ melyik rekord fog törlődni.F ájlokban tá ro lt adatok kezelése Nem lenne jo b b a rekord a z o n o s ító já t h a szn á ln i a DELETE FR O M -lekérdezés WHERE z á ra d é ká b a n ? A k k o r b iz to s a m egfe leld re k o rd o t tö rö ln é n k . ha nem te hoztad létre az adatbázist. minden kétséget eloszlat­ hatsz afelől. hogy mit vársz el egy lekérdezéstől. amely az egyediséget az id oszlop segítségével biztosítja: DELETE FROM guitarwars WHERE id = 5 Ha az id oszlop valóban elsődleges kulcs. am elynek az értéke minden rekord esetében egyedi.

if (isset ($ GET[1id']) & . T inyZO t “ .php'). else 1 1 (isset (S POSTpid']) && isset ($_P0ST ['narae ’]) && isset ($_?OST [' score ' 1)) ( // A pontszámok kinyerése a POST tömbből = $ post í $name = POST['name 1]. $dat:e = $_GET('date'].a rem ovescore.php p a ra n c s fá jl véglegesítése PHP. * m ég néhány fontos k ó d ré sz l« hiányzik l “ . Sscore = $ G E T ['score'].' ? " ' T eSek " S t e í g í v d . = . if (isset ($ POST['submit1])) if ($ POST['confirm'] { // A képernyőfelvétel törlése a kiszolgálóról 0unlink(GW_UPLOADPATH .org/1999/xhtmi" xml:iang-"en" lang-"en"> <head> <meta http-equiv="Content-Type" content-"text/html. // Csatlakozás az adatbázishoz $dbc • mysqli connect (DB_H0STr DBJJSER.Remove a High Score</titIe> <li. charset=utf-8"/> <titie>Guitar Wars .Remove a High Score</h2> <?php ('appvars.$ G ET[ ]. . DB_NAME) .php'>.css" /> </head> <body> <h2>Guitar Wars . ('connectvars. Sscore = $ POST['score' ] ]. $name = $_GET['name']. Isset ($_GET['date']) && isset($_GET['name']) && S isset ($ GET['score'] && isset($_GET[ ) ])) ( // A pontszámok kinyerése a GET tömbből $id = $_GET['id']. $screenshot).nlc rei="stylesheet" type="text/css" href="style.w3.:. . DB_PASSW0RD. hogy a Guitar Wars alkalmazás Kcpei> legyen torolni a nemkivanatos rekordokat! Chtmi xralns="http: //www.és MySQL-mágnesek t e S ° Z . H ” h ' í P par” ' sf“'' ml r ké“ .

Sscore .it:" value="Subrnit" name="submit" />'. Sscore . echo '<pxstrong>Name: </strong>' . cinput type*"hidden" name hidden" name="name" valuehidden" name="sccre" value </body> </htmi> from m o s t i t t vagy ► 287 . echo '<forrc method="post" action^"removescore. LIMIT // A művelet sikerének megerősítése a felhasználó számára echo *<p>The high score of ' . '</p>'. ’<br /><strong>Date: </strong>' . echo '<input type="radio" name="confirm" value="Yes" /> Yes ' .F ájlokban tá ro lt a d a to k kezelése guitarwars WHERE mysqli_query($dbc. echo '<input type="radio" name»"confirm" value="No" chec»ced="checkec" /> No <br />* echo '<input type="subn. $narce . ' for ' .php">' . Sdace *<br /><strong>Score: </strong>' . $nanie . $query) mysqli_close($dbc). ' was successfully removed isset (Sscore) &s isset(Sscreenshot)) ( echo '<p>Are you sure you want to delete the following high score?</p>’.

w 3 . . hogy a bejövő kérelem GET vagy POST-e.és MySQL-mágnesek A removescore. Snam e -= $ F O S T [ ' n a m e ’ ] .Remove a High Score</tii:le> < Link rel-"st:ylesheet" t:ype="text/css" href="style. $name $score = $_G ET[* name' ] . = $ GET[ ' s c o r e ' ] .o r g /1 9 9 9 /x h tm l" x m l:la n g = ” e n " la n g = " e n " > <head> cneta http-equiv~"Content-Type" content»"text/htiül. s s e t ( $ _ G E T { * narce' ] ) / / A pontszámok kinyerése a GET tömbből $id ~ $_GET[*id']. $screenshot)." h t t p : / / w w w .php p a ra n csfá jl PHP. mégpedig a require_once se­ gítségével. require_once 1( 'appvars. attól függően. » A parancsfájl más-más módon reá gál.Remove a High Scoce</h2> A megosztott adatokat tartalmazó parancsfáj* . . Pótold a hiányzó kódokat a hűtőmágnesek segítségével. lók beemelese.php'). f c jt . DB PASSWORD.ess" /> </head> < b od y> r. mert ezek az adatok létfontosságú ak a rekordok eltávolításához. S s c o r e = 5 _ P O S T [ 1s c o r e ' ) Ezzel a parancsfájllal bár­ it ( i s s j? f ( $ _ P 0 S T [ ' s u b m i t . D B_N A M E ). DB_USER. ^ // Csatlakozás az adatbázishoz $ d b c = m y s q l i _ c c > n n e c t <DB_HCST. 3 ) ) Lf /$ POSTIf c o n f i r m ' ] = ( melyik rekord törölhető..php parancsfájl már majdnem kész. ezért az eltávolítás része­ ként a fe ltö ltö tt képfájlt is törölni kell..0<r/ h 2 > <h2>Gmtar Wars . $date = $_G£T['date’]. de még néhány fontos kódrészlet hiány­ zik belőle. . charset-utf-8'/> <title>Guitar Wars . K A képernyőfelvétel törlése a kiszolgálóról @ unlink(G W _U P LC A D P A T H .a kész rem ovescore. hogy a Guitar Wars alkal­ mazás képes legyen törölni a nemkívánatos rekordokat! < h tm l x m ln s .

php"> echo 'cinput type=”radio” name-”con firm” No <br /> echo 'cinput type-=”radio” name=”confirm” va echo '<input type=”submit” value»"Submit" naAe~”submit echo '<input type="hidden” name= echo '<input type-”hidden" name=”name” value-"' echo '<input type=”hidden” name=”score” value echo '</form>'. $query). $score . G E T -k é re le m k é n t á ta d ­ tu n k . ha ezek közül a rekordválto zók közül mindegyiket beállították. $score . hogy ez az ű rla p G E T -a d a to k a t ne. ¡name .Fájlokban tá ro lt a d a to k kezelése A DELETE-lekérdezés az id oszlop alapján ke­ res egyezést. // A művelet sikerének megerősítése a felhasználó számára echo f<p>The high score o£ ' . mysqli close($dbc). »m elyeket az removescore. '<br /><strong>Date: </strong>' '<br /><strong>Score: </strcng>' . Sdate echo '<pxscrong>Name: </strong>' . hogy a POSTkérelem részeként el lehessen küldeni azokat. ) eise ( echo '<p class=”error">The high score was not removed. Back to admin page</a*</p> </body> </html> Ez a hivatkozás visszavisz az Admin oldalra. A jóváhagyó űrlap csak akkor jelenik meg. mégpedig a LIMIT záradéknak megfelelően egyetlen sort. ’</p>'.</p>1. és m i b iz to s íta n i s ze re tn é n k . A rekord adatait néhány rejtett urlapmezö tárolja. Sname . Néhány mágnes megmaradt. 1 else if (isset( && isset( isset($score) &S isset($screenshot)) { echo ’<p>Are you sure you want to delete the following h^gh score?</p>1.'. m o st i t t vagy > 289 . ' was successfully removed.$name . // A rekord törlése az adatbázisból $ query = " D ELETE FROM fcfcguitarwars WHERE mysqli quecy($dbc. csa k P O S T -a d a to ka t a d jo n á t.php j változót. * for ' . echo '<form method="post" action^"removescore. hogy könnyebb legyen navigálni. ¿score >&lti &lt. ____a z o k a t az a d a to k a t is m e llé k e ln é . URL le k é rd e z ő k a ra k te rlá n ­ cán k e re s z tü l.

. . A képernyőfelvétel nélküli. G o íla r W a r* . ¿5 az én vagyok! o A Guitar W/ars fótfdala most már cm* megerősített rekor­ dokat mutat. 290 5. .Remove a H ig h Scot* A» M» KM «. Az Admin oldal­ ra visszatérve ellenőrizd. Kattints annak a rekordnak a Remove hivatkozására. Ebben a v á ro s b a n csa k egy c s ú c s ro c k e r s z á m á ra van hely.« - O» a \*ar: A trv ltfirttM Or « yp >5 (BBH a M M H I i i i Guitar W . fejezet . és helyezd el bennük az imént kidolgozott kódot. ¡oocb liritv War.liig b Seo m . Airtj ^ Me* ^ ^ w»»naittn Kurn»^. hogy ott is lásd a változást. és nyisd meg az Admin parancsfájlt a webböngésződben.-.c* «tailiA^crvt iöy/40 Top Score: 389740 * • * * .php és admin. amelyiktől meg szeretnél szabadulni. Little Jacob.php). Járt» V .te szte ld a végleges g u ita r w a rs alkalm a zást! Tesztút Add hozzá a Remove Score és Admin parancsfájlokat a Guitar Wars alkalmazáshoz. « W . . Adminkir^th*.iV?>*r» nr* 4 C u i t ar «OB. majd ugorj a Guitar Wars főoldalára (index.^ v tu. 1 QWH KHOeIfn. Az új Admin oldal hi­ vatkozásokat biztosít a meg nem erősített rekordok törlésére. n l > w v D«*s2 0 . hogy valóban törlődött-e a rekord.php néven. majd erősítsd meg a törlést a Remove Score oldalon.lU UI'yG S c o re : 3-Ü MS Na»«s 186*80 M A aU dM ltod ¿fOkiJ-JJ Gu i t ar ödnei P2 WJ « tv --.High Sor*. Töltsd fel az új parancsfájlokat a webkiszolgálóra. hogy képes legyen rekordokat eltávolítani! Hozz létre két új szövegfájlt removescore. a gitár hős csodagyerek Az igazi gitárhó'sök most már boldogok lehetnek.Rem aHl&hScor« ars ove A nemkívánatos re­ kordok kiválasztási­ nak megerősítésért és a rekordok törlé­ séről egyaránt az í j Remove Score olárf gondoskodik. mert az oldalon csak megerősített rekordok találhatók. •H W W M XtTJl C u ila r W « n . meg nem erősített rekordokat eltávolítottak.

9. Az újonnan feltöltött fájlokkal ezt érdem es csinálni (angolul). 5. 12.. Függőleges 2. m ost it t vagy ► 291 . 10. 7. A feltöltött fájlokkal kapcsolatos információk a $ _ . 3. Ezzel a PHP-utasítással egy állandót hozhatsz létre. Ezzel a PHP-utasítással kódot szúrhatsz be egy má­ sik paranesi aj 1 ó l. Ezzel az SQL-utasítással módosíthatod egy7 tábla szer­ kezetét. Egy' tábla módosításakor ezzel az SQL-paranccsal új oszlopot hozhatsz létre. Ezzel az SQL-utasítással a kívánt sorrendbe rendez­ heted egy lekérdezés eredményét. b 13. Ha azt szeretnéd. szuperglobális változóban tárolódnak. Az űrlapon keresztül feltöltött fájlok egy ilyen map­ pába kerülnek a webkiszolgálón (angolul). 4. és arra szolgál.. hogy csökkenő sorrendbe rendezze egy lekérdezés eredményét. hogy egy DELETE FROM utasítás ne tö­ röljön egynél több sort. I I . ezt az SQL-utasítást használhatod. Az < input> elem type jellem zőjének ezt az értéket kell adnod. 8. 6. A beem elt fájlok segítségével ezt teheted az adatok­ kal több parancsfájl között (angolul). hogy fájlfeltöltő űrlapmezői hozz létre.F ájlokban tá ro lt a d a to k kezelése PHP & MySQL keresztrejtvény Unod a képfájlok feltöltögetését? Akkor töltsd fel tudással ennek a keresztrejtvény­ nek a mezőit! Vízszintes I. Az alkalmazások feltöltött képeit általában jó ötlet egy ilyen nevű mappában tárolni. Ezt az SQL-utasítást egy' másik utasítás részeként használják.

!? *•* #. > :•> V '■•'//’S..if i'iMis r< I % E M A . .-/' ::>:':x:x -v..' ':S : •vX Ills :# :£ &í>' \ • •• • ■ * '< :< V -y v L T E F £ . -:-y ■ -v f*?<r #: v..-. - c # ^ • '<<>.v. ...v E M £V-V ■tf P 0 *w :-x-X v. .y%.•• •• 0 Í •• > • : • •- • -- • :»•" • • • • :• ' Í : .í * : L . - vr.: I |r § iS flk I i f l ¡ is P i • M i l l i J B r l* £ ^ * i f li a p * ^ g 292 5.> v »> N •' L U E ¿ _w f •. .m egoldás PHP & MySQL keresztrejtvény .:-' --/ . v’ .-.yyS. v •> -XvX•.'/-v < -'-:•. f >"-•:: . E N V E .megoldás F . 'Ay.v . fejezet . : E L í . . ■ // A //> ' .PHP b MySQL keresztrejtvény .v. V .y. ¥■ .V.

COLtTfcO* include. include_once require_once Ezek a PHP-utasítások lehető­ vé teszik. require. 1 M Ezzel az SQL-utasítással egy sort törölhetsz egy* adatbázis-táblából. DELETE FROM tábla WHERE oszlop = kereset t_oszlop LIMIT szám 14 . m o st i t t vagy ► 293 .és MySQL-tudásodat is je­ lentősen bővítetted: a táblák szerkezetének mó­ dosításával. hogy a törlést egyetlen sorra korlátozhatod. beleértve azokat is. és a kód könnyebben karbantarthatóvá válik. hogyTkódot ossz meg egy alkalmazás több pa­ rancsfájlja között. Ebben a mappában kényelmesen tárolhatod egy alkalmazás képeit. nem beszélve arról. amivel elk e­ rülhető a kódismétlés. illetve az adatok eltávolításával. a fájlfeltöltés kezelésével.Fájlokban tá ro lt a d a to k kezelése PHP & MySQL szerszámosláda Fogadd virtuális elismerésünk! Nem csak a vir­ tuális gitárosok áldják a nevedet szerte a vilá­ gon. A törlés pontosabb szabályozásá­ hoz több értéket is megadhatsz a WHERE záradékban (ezt gyak­ ran érdemes is megtenned). amelyeket a felhasználók töltöttek fel. hanem a PHP. az adatok sorrendjének szabályozásával.

.

és az alkalmazásaidat úgy tervezd meg. az em berek többsége rossz. ée ez p o rfé sze k k is v á ro s s o s e jö n rá. a telefon­ drótok á tk ö té s e . hogy m indenki rád vadászik E gy kié m á s z á s . ez egy u j fejezet 295 . hogy minden­ ki becsületes. hogy komolyan vedd a biztonságot. akkor se adj nekik kulcsot az alkalma zásaicl adataihoz.6 Az alkalmazás biztonságossá' tétele Vedd úgy. de nagyon fontos. hogy védve legyenek bárki­ vel szem ben. W ebalkalmazás-fejlesztőként valójában részben cinikusnak kell lenned. aki hisz az összeesküvés-elm életekben. aki ártani akar nekik. és valóban rád feni a fogát! Na jó. abban bízva. részben olyasvalakinek. 3 A szüleid igazat mondtak: ne állj szóba idegenekkel! Vagy legalábbis ne bízz bennük. hogy nem élnek vissza vele. y honnan j ö t t a c sa p á s. és nem bízhatsz abban. Igen. lehet. hogy egy kicsit túloztunk. Ha pedig minden kötél szakad. A világ kegyetlen.

. G uitar W am or. és ez csak egy boldogtalan alkalma­ zásfejlesztőt eredményezhet . A boldogtalan virtuá­ lis gitárosok boldogtalan felhasználók lesznek. Guitar Wars . hogy tönkretegye az alkalmazást. valamilyen ördögi erő munkál a háttérben. do you have w hai ¡1 takes 10 crack the high score lifl? I f so.High Scores W elcom e. ju st Jacob. a 00 Cuitar Wars High S to r e s _____ y. egy eredeti 2005 Eradicaster. és megakadályozza a gitárhősök versengéséi. a virtuális rock csodagyerekének tündöklése a rivaldafényben kérészéletű­ nek bizonyult. minden más rekorddal együtt. amikor meghalt a zene * O jaj. Úgy tűnik.a g u ita r w ars o ld a lt fe ltö rté k A nap. a Guitar V/ars rekord-^ tartója dühös. 296 6.konkrétan rólad van s z ó . mert eltűnt a pontszáma a rekordlistáról.. fejezet . ugyanis Ja co b Guitar Wars-rekordja eltűnt. Jacob választott zenei fegyvere.

hogy a következő módszerek közül melyik lenne al­ kalmas arra. amelyben A A rekordtörlési képesség teljes eltávolítása az alcsak bizonyos felhasználók (te) kapnak felügyeleti jo. gokat. hogy az adatbázis is az? Erre a kérdésre egy SELECT-lekérdezés adhat választ: H Htfit Wirdow Help l«6Was9 fe Egy SE LECT-lekérdezés felfedi. hogy csak a jelszót ismerő személy (vagyis te) tudjon rekordokat törölni. Lehetséges. Felhasználó-rögzítő rendszer létrehozása. m o s t i t t vagy ► 297 . hogy' gonoszságot műveljen? Meg kell védenünk a rekordokat! Hegyezd ki a ceruzád! Karikázd be. hogy a guitarwars tábla teljesen üres . és csak bizonyos címek (a tiéd) átengedése. és írd le azt is. hogy megvedd a Guitar Wars rekordjait a m egkesere­ dett virtuálisgitár-gyűlölőktől.£ j kalmazásból. hogy miért! Az Admin oldal levédése egy jelszóval.Az alkalm azás biztonságossá tétele Hová tűntek a rekordok? Tudjuk. de ez azt jelenti. hogy a Guitar Wars főoldala üres. hogy valaki arra használja a Remove Score parancsfájlt.minden rekord eltűnt! mysql> SELECT ERŰM Valamilyen okból kifolyólag az összes rekord adatai törlődtek a Guitar Wars adatabázisából. Az Admin oldalhoz hozzáférni próbáló számítógép 1* | IP-címének ellenőrzése.

...ellenőrzése működőképes megoldás.. jogokkal kitín ő megoldás.árAz Admin oldalhoz hozzáférni próbáló számítógép IP-címének ellenőrzése..A felhasználókat.. de a .. A rekordtörlési képesség teljes az alkalmazásból. Mindegyik módszert be lehet karikázni.. A szolgáltatás teljes eltávolítása az adott problé­ mát természetesen megoldja.nyújtanod!. hogy miért! Az Admin oldal levédése egy jelszóval..git. .. de ha még emlék­ szel rá.webhelyet. . rendszer létrehozása.. amelyben csak bizonyos felhasználók (te) kap­ nak felügyeleti jogokat. a számítógéped... keli . rögzítő.sok.webhelyet függővé teszi. és. hogy a következő módszerek közül melyik lenne alkalmas arra. és írd le azt is... I.. bár egye­ sek jobban kivitelezhető^ má­ soknál Az Admin oldal levédése e<jy jelszóval megfelelően egyszerű és gyors mód­ szer.biztonságot . . hősöknek.. most. kódot igényel márpedig a. mert a problémát mindegyik megoldja... . ami megváltozhat..P-cím.. Nem túl bonyolult. hogy megvédd a Guitar Wars rekordjait a m egkeseredett virtuálisgitár-gyűlölőktől.... de. hogy a webhely könnyebben karbantartható legyen....a g u ita r w ars re ko rd ja in a k védelm e Hegyezd ki a ceruzád! ^ Megoldás Karikázd be.... I P-ef métől. 298 6. a .. Felhasználó-rögzítő rendszer létrehozása. és csak bi zonyos címek (a tiéd) átengedése.. Az.. felügyeleti. fejezet . és gyorsan biztonságossá teszi a .tör|ési képességet azért adtuk eredeti­ leg az alkalmazáshoz az előző fejezetben.jelentős tervezést. hogy csak a jelszót ismerő személy (vagyis te) tud­ jon rekordokat törölni......

amely a fel­ használó nevét és jelszavát kéri. mivel az Admin oldal védett. amilyen kevésre csak szeretnéd .A z alkalm azás biztonságossá téte le Kerítés a vad hordák ellen Az egyik módszer arra.*.gif jaioobiíoorr 0^ nr»ilüoo<« grf pooouoor« ^ pKtüscorm-grf könnyucor«.i Administration ____ BiüGittrWmWcitcm t* 16 17 18 19 bi+rH JoKontion Pooo Jm ionus Pktx Lain>on «si«ón*/ Konfrf Lavű J«on PbuJ Jon*s 20 »» ««!»*«> 6 * « m o s t i t t vagy ► 299 . A Guitar Wars esetében olyan kevés em berre korlátozhatod az Admin ol­ dal elérését. hogy valamilyen titkos információt követelsz meg i felhasználótól. Ne bízz ebben a m o­ solyban! Az adatbázisban levő rekordok most már védelem alatt állnak. High s™. i Gui“ r VV«. Ez a megoldás valójában egy felhasználónevet és egy jelszót igényel. de a lényeg az. hogy a Guitar Wars rekordjait gyorsan és egyszerű­ en biztonságossá tedd. A HTTP-hitelesítés egy­ szerű módot ad egy ol­ dal biztonságossá téte­ lére a PHP segítségével. mielőtt hozzáférhetne a védett oldalhoz. például a rekordokat eltávolító hivatkozásokhoz. 91! l^cnpojlisoo'» u 15 200BX>W)1 20 36 07 2008*05-01 20:3645 2006-0501 20:37 02 2006-0501 20 3723 20060501 20:3740 2006-C601 2fr38 00 20064)501 20:3823 Az Admin oldalon található Remove hivatkozásokat csak a Guitar Wars rend­ szergazdája érheti el. az Admin oldal jelszavas védelme HTTP-hitelesítés segítségével. g u ita r w a r s M 1g I m a* SoUlo Ch+vy Jooob Soore ta n oo S 0T9 C 282470 389740 98430 127650 186580 64930 243360 » crM fifta be&auoor*.akár csak magadra! A HTTP-hitelesítési ablak kerítést emel a felhasználók és a felügyeleti oldal közé. Amikor egy oldalt HTTP-hitelesítés véd. mielőtt hozzáférést adnál az alkalmazás tiltott elemeihez. egy ablak ugrik elő..

A webböngészó' egy ilyen ablakot jelenít meg.Í0Í-0I MüOObttHÖ Buxtl-í $ SERVER[ ’ PHP_AUTH_USER1] 300 6. ami hasonlóan műkö­ dik. 7} *»73313)630Blnlcw |ft|| | 2X.net Y o u r pa*vwo»C wii> b e ie n t *n tn e ciear A PHP-ben ez a szuperglobális vál­ tozó tárolja a hitelesítési ablakba beírt felhasználónevet. ami a felhasználónevet és a jelszót kéri. és eldöntheted. To view this page. H ír í.1 0 **4*1 ¡j. ami a felhasználónevét és a jelszavát kéri. A PHP a felhasználó által beírt felhasználónév és jelszó elérésében játszik szere­ pet. ha a megfelelő' felh» lónevet és jelszót adták m G u lttr W ars. you need to log ¡n to area •G uitar Wars* on www gu. $_FILES stb. ha a felhasználónév „rock”.Score A dm inistr-ü í mms « i aoowu>tXM07 a. t í z a változó tárolja a hitele­ sítési ablakba beírt jelszót. például az Admin oldalunkhoz próbál hozzáférni. Tegyük fel. a jelszó pedig „roll". hogy a felhasználónak m egengeded-e a védett oldal elérését. mint az eddig megismert szuperglobálisok ($_POST. . «otcuHavnu ^ S E R V E R [ ■PHP_AUTH_PW 1] ***■«•01». Ezek a $_SERVER szuperglobális tömbben tárolódnak.tarwars. egy ablak jelenik meg.) Egy PHPparancsfájllal megvizsgálhatod a beírt felhasználónevet és jelszót. hogy csak akkor engedélyezzük az Admin oldal elérését. fejezet . \ í ' $ SERVER['PHP AUTH USER'] $ SERVER ['PHP A U T H P W ] Az egyszerűség kedvéért a jelszó itt nem titkosított. mielőtt engedélyezné a védett oldal elérését.»* ^ JltttUtftfí a-*«*. Az Admin oldal elérése eszerint így zajlik: Az Admin oldal csak akkor tő el.a h ttp -h ite le s ité s használata A Guitar Wars felügyeleti oldalának védelme A HTTP-hitelesítés így működik: amikor egy felhasználó egy hitelesítéssel védett oldalhoz.

Vagy nem. Ugyanakkor a PHP is lehetővé teszi a fejlécek küldését. A Guitar Wars rekordjait a í 11’11 ^-hitelesítés elég jól védi.elég gyakran használják is őket társalgásra a PHP-n kívül. titkosíthatod is a jelszót. de ha a védelmet fokozni sze­ retnéd. hogy milyen biztonságot szeretnél elérni.) K i Pontosan hogyan védhetünk meg egy oldalt HTTP-hitelesítéssel? Meg kell hívni egy PHPfüggvényt? keresztül a böngésző és a kiszolgáló között.úgy tűnik semmi köze. Semmi sem száz százalékig biztonságos. V ! Igen. (Az emlí­ tett változó ellenőrzéséről hamarosan bővebben is szót ejtü n k . Attól ftigg. ha én csak jelszót szeretnék használni? V ! Nem kötelező felhasználónevet és jelszót is megkövetelni. ha helytelen felhasználónevet vagy jelszót írnak be? V ! A böngésző kisebb elektrosokkot bocsát ki az egéren keresztül. amihez . ezért mindig csak bizonyos fokú biztonságról beszélhetünk.. Ha csak jelszót akarsz kérni. Nehogy komolyan vedd. I C l A HTTP-hitelesítéshez mindenképpen szükséges felhasználónév és jelszó is? Mi van. Végsősoron tőled függ.. Ugyanakkor a HTTP-hitelesítés egy érzékenyebb. I C l Mi történik. A HTTP-hitelesítéshez kommunikációs csatornát kell nyitni I-HT P-fejléceken Agytorna Szerinted mikor célszerű az Admin oldal hitelesítését elvégezni? m o s t i t t vagy ► 301 . pél­ dául pénzügyi adatokkal dolgozó alkalmazás esetében már nem biztos. Általában egy üzenet jelenik meg. és pontosan így működik a HTTP-hitelesítés. hogy elegendő. a büntetés messze nem ilyen kemény. ami tudatja a felhasználóval.A z alkalm azás biztonságossá téte le Nincsenek hülye kérdések I C l Tényleg biztonságos a HTTP-hitelesítés? V ! Igen. hogy az üzenet mennyire szigorú. hogy olyan védett oldalt próbál elérni. A fejlécek a rövid üzenetváltás eszköze­ inek tekinthetők a böngésző és a kiszolgáló között . ellenőrizd csak a $_SERVER [ ' P H P _A U T H _P W ' ] globális változót. A fejlécekkel és a PHP segítségével végre­ hajtott HTTP-hitelesítésben játszott szerepükkel bővebben is foglalkozunk majd.

amelyek azonosítják a kért fájlt és a kiszolgáló állómásnevét. és leképezi az oldal HTML-kódját. Végeredményben a fej lécek segítenek a kért oldalt sikeresen kézbe síteni a böngészőnek. Ha a felhasználó ezeket helyesen adja meg. fejezet . amelyek rövid szöveges üze­ netek. Fejlécek használatára valójában minden alkalommal sor kerül. amikor m egte­ kintesz egy weboldalt. ______ • _ I í X lE ^E iE T ”! L —— > % ír A kiszolgáló fejlécekkel válaszol. konkrét utasításokkal arra nézve. nem csak akkor. s O Ezekből a fejlécekből áll egy weboldalra irányuló kérelem.)) index. nem védett weboldalt a kiszolgáló a böngészőnek a fejlécek segítségével: r Minden weboldal kézbesrtése fejlécek segítséqével történik. ^ W ebkiszolgalo i "Tz 1J M p í l A böngésző egy oldalt kér a kiszolgálótól. Í3 -1 1 *1 C#«A 5 ^ 1S65tsü n A böngésző megkapja a fejléceket és az oldalt. és arra kéri a böngészőt. Lássuk. hogy kérje el a felhasználótól a telhasználónevét és a jelszavát.amelyeket a kért oldal követ.php Ezek a fejlécek alkotják a weboldal-kérelemre adott választ.h ite lesítés és fejlécek A HTTP-hitelesítés fejléceket igényel A HTTP-hitelesítés mögötti alapötlet az. hogy a kiszolgáló visszatartja a védett weboldalt. ha hitelesítés szükséges.ore* Nm«k rv* L ««i n«r. A böngésző és a kiszolgáló közötti párbeszéd fejléceken keresztül történik. 302 6. és megjeleníti az oldalt. hogy a kérelem mire irányul. B I . Ehhez elküld néhány fejlécet. . a böngésző továbblép. (¿uitar Wan *HighS och ct Tot Score: 389740 Ugyfélböngésző Zi. hogyan kézbesít egy szokványos.

Nézzük meg közelebbről ezeket a fejléc­ gyűjteményeket. amikor egy weboldalt kérnek tőle. A kiszolgáló fejlécek egy adott csoportját kapja meg.Az alkalm azás biztonságossá tétele Mikroszkóp alatt: a fejlécek A fejlécek szabályozzák. például a weboldal tartalomtípusát (HTML). Az oldal H™ U a r { a ’ ma közvetlenül a fejlecek után éfkeZ. Egy fejléc általában egy név-érték párból áll. hanem az oldalra irá­ nyuló GET-kérelem. amikor társa­ lognak egymással: A legtöbb fejléc egy ket­ tősponttal elválasztott név-érték párból áll.m o nd ju k . hogy HTTP-hitelesítéssel védj meg egy oldalt. nem pedig . a kiszolgálótól érkező fejléceket kell módosítanod. pontosan mit is küld el az ügyfél és a kiszolgáló. Más szavakkal.php A fejlécek azért fontosak a Guitar Wars esetében. hogy lássuk. Az elsó' fejléc a kiszolgáló HTTP-válasza. hogy előbb felhasználónevet és jelszót kérj a felhasználóktól.k' index.sima szövegből. most i t t vagy ► 303 . hogy pontosan milyen információkat cseréljen és hogyan a w ebbön­ gésző és a webkiszolgáló. Ez 3 ^ i l é c árulja el a böngészőnek. Az első fejléc nem név-érték pár. hogy a tartalom HTMW óiJból á ll. Ez a fejléc azonosít­ ja a kérelmet kiadó böngészőt. a böngészőnek adott válasz részeként pedig egy másik fejléccsoport elküldésére kerül sor. mert a segítségükkel megszakíthatod az olda­ lak kézbesítését a kiszolgálótól. amely egy adott infor­ mációt azonosít.

a kézbesí­ tés dátumát és időpontját. Ön elég nagy figyelmet kap. miért fontos ez. hogy mit Agyhullám: Pontosan mi is a munkája? csináljon vele. fejezet . vagy küldhetnek egy­ másnak SMS-t. hogy a kiszolgáló elküldött engem a böngészőnek. hogy miként működik Ön a normál weboldalak esetében. hogy ráönti a kért tartalmat a böngé­ szőre. A böngésző úgy mondja meg a kiszolgálónak. a kiszolgáló címe. például egy GIF vagy JPEG kép. hogy egy gigantikus vaníliás eszpresszót szeretne dolga. Ezt a kérelmet egy sor fejlécbe csomagolja. mely esetben a kiszolgáló elküldheti Agyhullám: Term észetesen. Úgy is mondhat­ nánk. ha nem tudna egy kicsit többet.lehull a lepel Heti interjúnk: Fejlécek: mire ez a nagy felhajtás? Agyhullám: Úgy tűnik. mint a normál weboldalaknál. hogy a böngészővel azt is tudatom. Fejléc: Nincs mit.ebben segítek én. hogy’ a Világháló nélkülem nem is működne. hogy megmondja a pincér­ Fejléc: Pontosan. de a kiszolgáló más dolgokat is tudat a böngészővel: például a tartalom méretét. a felhasználónevet és jelszót? amikor beül egy kávézóba. Agyhullám: Még mindig nem látom. Agyhullám: Hogyan? Fejléc: Amikor valaki beír egy IJRL-t. vagy csak tizenöt percnyi virtuális hírnévre vágyik? Fejléc: Pontosan erről van szó. Agyhullám: Mikor kerül sor magának a weboldalnak az elküldésére? Fejléc: Közvetlenül az után. Én azt hittem.in te rjú egy fe jlé cce l Fejlécek . Ezután a kiszolgálón levő PHP-kód nek. Megalapo­ zott ez a figyelem. Agyhullám: Úgy érti. rögtön a tényleges tartalom következik. a kérelmet kiadó böngé­ sző típusa. ami csak létezik. ha munikáció másik oldalán is. Valószínűleg ez a legfontosabb. vagy egy hivatko­ zásra kattint egy weboldalon. hogy eldöntse. legyen az HTML-kód. Én ugyanolyan fontos vagyok a kom­ val tovább itt leszek tizenöt percnél. satöbbi. Fejléc: Meg kell értenie. Agyhullám: Érdekes. Agyhullám: Rendben. Jó ­ Fejléc: Jó kérdés. csak annyit tesz. hiszen tudnia kell. mint a kért oldal neve. hogy minden egyes weboldal kézbesítésében szerepet játszom. hogy ez némileg sokkoló. hogy a kiszolgá­ lók is tudnak fejléceket küldeni. Ugyanakkor a böngészőknek és kiszolgá­ lóknak kapcsolatot kell tartaniuk egymással . hogy a felhasználónév és a jel­ tejszínnel? szó egyezik-e. hogy mit az oldal fennmaradó részét. hogy a w ebböngészők és a wrebkiszolgálók nem em berek. még akkor is. így a böngésző elkérheti a felhasználótól az azonosító adatokat. mint az emberek. Fejléc: Akkor közelítsük meg így: Ön szerint fontos. Ez hozzátartozik a munkámhoz. hogy a kérelmet fejlécekbe csomagolja és elküldi. hogy az oldalt hitelesíteni kell. De mi a helyzet a hitelesítéssel? Fejléc: A szerepem a hitelesített weboldalak esetében ugyanaz. mert a kiszolgáló nem jórészt nem ismerik el kellőképpen a munkámat. de a gé­ pek egyszerűen nem úgy kommunikálnak. Agyhullám: Például mit? Fejléc: Mondjuk a tartalom típusát. PDF-adathalmaz vagy egy képfájl. akarok! Agyhullám: L e n y ű g ö z ő . és így tovább. Nem így van? Fejléc: Term észetesen megalapozott. A fejlécek tartalmazzák az olyan adatokat. 304 6. hogy a kiszolgálók csak weboldalakat adnak vissza. De úgy hallottam. a böngésző összeállít egy GET-kérelmet. ezért nem hívhatják fel csak úgy egymást telefonon. hogy mit akar. amelyet elküld a kiszolgálónak. Egészen biztosra veheti. azzal a kü­ lönbséggel. tudom. A böngészőnek fogalma sem lenne. most már kezdem érteni. Agyhullám: Döbbenet! Fejléc: Igen. amikor weboldalak hitelesítéséről van szó. Köszönöm a felvilágosítást. amelyek mind­ egyike valamilyen információt tartalmaz a kérelemről.

ha a < ? p b p címke elé kerülne. hogy h ite le s íté s s e l védjünk meg egy o ld a lt? m o st i t t vagy ► 305 . mielőtt bármilyen tényleges tar­ talmat küldenél. A kiszolgáló ezt a fejlécet küldi el » böngészőnek feldolgozásra.v rancsfájlban.még ha csak egyetlen karak­ ter vagy szóköz érkezik is a fejlécek előtt. mint a HTTP-hitelesítés.org/1999/xhtml” xml:lang="en" lang="en" > </htmi> Ez az egész fe jlé cd o lo g nagyon izg a lm a s. a böngésző visszautasítja azt egy hibaüzenettel. Egy PHP-parancsfájlból a beépített h e a d e r () függvénnyel küldhetsz fejléceket a kiszolgálótól a böngészőnek: header (1C o n t e n t . A h e a d e r {) függvény azonnal elküldi a fejlécet a kiszolgálótól a böngésző­ nek. chtml xinlns="http://www. ami lehetővé teszi. és a függvényt az előtt kell meghívnod.. de hogyan h a szn á lju k a fe jlé c e k e t té n yle g e se n a rra . Ebből az okból kifolyólag a h e a d e r () függvény hívásának minden HTML-kódot meg kell előznie egy PHP-parancsfájlban: Még egy kósza szóköz is hibát okozna ebben a pa. hogy fejléceket hozz létre és küldj el egy PHP-parancsfájlból. A < ? p h p és ? > címkék kö­ zött álló szóközök nem jelen­ ?> tenek gondot. A header)) függvény lehetővé teszi. hogy olyan fejlécvezérelt műveleteket hajts végre.T y p e : t e x t / h t m l 1) .w3. mert a böngé­ szőhöz nem jutnak el.Az alkalm azás biztonságossá tétele A fejlécek vezérlése a PHP segítségével A PHP segítségével pontosan szabályozhatod a kiszolgálótól a böngészőnek küldött fejléceket. <?php header{’Content-Type: text/html1). Ez igen szigorú követelm ény . miem az oldal HTML-tartalmából barm it megkísérelne elküldeni.

306 6. ami ennek a bizonyos hitelesítésnek az egyedi azonosítására szolgál. fejezet .php oldal tartalmát a böngészőnek. A hitelesítés kezdem ényezéséhez szükséges két fejléc két feladatot hajt végre: Ez a fejléc azt tudatja 401 unauthorized | a böngészővel. a kiszolgáló feldolgozza az oldal fejléceit. hogy írjon be egy fe lh a szn á ló n e -\^ vet és jelszót. Ez a fejléc arra utasítja a bon gészőt. az Admin parancsfájl PHP-kódja állítja elő. yo u need to lo g In to area ‘ G uitar W ars’ o r w w w . HTTP/l. és a hitelesí­ tési ablakban jelenik meg. Ezt a két fejlécet.n et Y o u r potW. hogy az oldal kéz­ besítése előtt kérje el a felhasználónevet és a jelszót a felhasz­ nálóktól.gu ltarw ars. hogy a fel használó nem jogosult az oldal megtekintésére. h a s z n á ló t WWW-Authenticate: Basic realm="Guitar Wars" a f e l h a s z n á l ó n k es A „Basic realm" („tartom ány") csak egy kife­ jezés. rock • •«I R e m e m b e r t h i s p a s s w o r d Jn m y k e y c h a J n U g y fé lb ö n g é s z ő C an cel ' Log In ' Egy weboldal hitelesí­ tése két konkrét fej­ léccel kérelmezhető. a jelszó bekérésével. N am e Passw ord . amelyek arra utasítják a böngészőt. Webkiszolgáló A kiszolgáló elküldi a HTTP-bitelesítési fe jlé ­ ceket a böngészőnek. A böngésző ez után arra kéri a felhasználót.a fe jlé ce kke l végzett h ite le síté s m űködése Hitelesítés fejlécekkel Alihoz. két konkrét fejlécet kell létrehoz­ nod.l 401 unauthorized W W W . T o view this p a g e .id wi»i b e se n t in m e ciear. hogy azonosítsa a fel-. hogy a Guitar Wars alkalmazás Admin oldalát fejlécek használatával hitelesíttethesd. amelyek az oldal kézbesítését vezérlik a böngésző számára.Authenticate: Basic re alm = "G u ita r Wars M ielőtt kézbesítené az admin.X.

A Ha a felhasználó helyes felhasználónevet és jelszót ír be. A tiltó üzenetet a fejlécekkel szo­ rosan együttműködő ad m in .Az alkalm azás biztonságossá tétele A hitelesítési fejlécek feldolgozása után a böngésző arra vár. amíg csak a felhasználó helytelen felhasználó­ név-jelszó kom binációkat ír be. A böngésző addig folytatja ezt. V*** ’C uitar W ars' on wwiv. admin.. hogy m egjelenítsen egy üzene­ tet. az alkalmazás befejezhe ti a parancsfájl futtatását. hogy kilép­ jen a hitelesítési ablakból. Az alábbi kód a PHP e x i t () függvényét hívja meg. A bö n g észő m egjeleníti az Admin oldalt.p h p parancsfájl PHPkódja határozza meg.az ad m in .php Itt a „tartomány"! To View this pag®. _______ Cuitar Wars High Sco^ct Admin is tra tio n _____ Guitar Wars . csak egy olyan oldalt.n rs s n O ^E ) Ha a felhasználó helytelen felhasználónevet vagy jel­ szót ad meg. hogy a felhasználó csinál­ jon valamit a hitelesítési ablakban. mint a korábbi.guitarwars Youf pjLSlWO'd vw» 1 N am « U - ____ — 1 Password Ha a felhasználónév vagy a jelszó hely­ telen. Más szavakkal. Use this page to remove scores as needed Jacob Scorcherson 2008-05-01 20:36:45 389740 R emove B elka C hevy Jean P aul Jones P h il L a irs to n Paco Ja sto riu s N eva Johansson K enny L a v itz 2008-05-01 20:36:07 282470 Removg 2008-05-01 20:38:23 243260 Remove 2008-05-01 20:37:40 186580 Remove 2008 -05-01 20:37:23 127650 Remove 2008-05-01 20:37:02 98430 Remove 2008-05-01 20:38:00 64930 yRentove V -" . majd a Lóg In (B ejele n tk ez é s) gom bra kattint.s password ¡n my keycha.p h p oldal HTMLtartalmát a böngészőnek. védelem nélkü­ li változatban. csak a Cancel gom bbal fog tudni kilépni a hitelesítési ablakból. és egyéni üzenetet jeleníthet meg az oldal letiltásáról. de ér/ényee fe\haezná\6nevet é e je\&zót kell megadnia az o ld a l elérteihez. ha a felhasználó nem ismeri a felhasználónevet vagy a jelszót. a kiszol­ gáló arra utasítja a böngészőt. Ha a felhasználó a Cancel gombbal kilép a hitelesítési ab­ lakból. a kiszolgáló mást nem küld a böngészőnek. a felhasználó pedig ugyanúgy törölhet rekordokat.High Scores Administration B elow is a list o f all Guitar Wars high scores. a kiszolgáló elküldi az a d m in . hogy a felhasználó mit tesz. Attól függően. m o s t i t t vagy > .p h p oldalt nem küldi el.. és azonnal befejezze a parancsfájl futtatását: Sajnálom. exit(f<h2>Guitar Wars</h2>Sorry. a bön­ gésző drámaian különböző műveleteket hajt végre. hogy ism ételtesse meg a beírást a felhasználóval. Guitar Wars n Remember th. majd a Lóg In gom bra kattint. az Admin o l­ dal HTML-tartalma kézbesíthető'. _ ^ H x . a hitelesítési ablak egyszerűen ismétlésre kéri a felhasználót. S ony. you must enter a valid ’user name and password to access this page.. you must enter a valid user came and password to access this Ha a felhasználó a Cancel gom bra kattint. Ha a felhasználónevet és a jelszót helyesen adták meg.’). am elyen egy üzenet található az oldal letiltásáról .

ezért el kell küldeni a hitelesítési fejléceket ( HTTP/1. fejezet .php 308 S.1).w3. chtml xmlns="http://www. * ('WWW-Authenticate: Basic realrn('<h2>Guitar Wars</h2>Sorry. A hűtőmágnesek segítségével pótold a hiányzó kótóü b s z ö H s tT h S z n ? h ^ f Va‘ tCdd bÍ2t° nságOSSá 32 Admin oldalt! ^ P P : egyes mágneseket b <?pbp / / A hitelesítéshez szükséges felhasználónév és jelszó = 1rock' . illetve a jelszó helytelen.org/l999/xhtrni" xml :lang="en" iang="en"> admin. you must enter a valid user name and password to ' 1access this page . if (!isset( !isset( ($_SEKVER[ '?HP_AUTH_USERT] != ■ ) H ($__SERVER ['?H?_AIJTH_PW 1] !- // A felhasználónév.egészítsd k i a h ite le s íté s i k ó d o t! PHP-mágnesek A Guitar Wars alkalmazás Admin parancsfájljából hiányzik néhány fontos PHP-kódrészlet am elyek a HTTP-hitelesítést biztosítják.1 401 Unauthorized').

Bár jelenleg a hitelesítéshez volt szükségünk a fejlécekre. mindenféle formázás nélkül. mi­ előtt meghívnád a header () függ­ vényt egy PHP-parancsfájlban. hogy a kiíratott tartalmat ne HTML-ként képezze le.i k A böngészőt ez a fejléc öt má­ sodperc után á t-. m ost i t t vagy ► 309 . Más szavakkal. és egy csom ó érdekes dolgot lehet velük csinálni. tehát az oldal önmagát frissíti. A header () függvényt meghívva és a következő fejlécet átadva például HTML helyett sima szöveges formára kényszerítiíetsz egy oldalt: <?php header('Content-Type: text/piain*). echo ’This <strona>text</strong> won’t actually be hold. mivel ez szabályozza a kiszolgáló által kézbesített tartalom típusát.. a fejlécek valójában m eglehetősen rugalmasak. ?> Ezt a fejlécet (Location) átirányító fejlécnek liívják.ut:. net/átíjQ. Csak annyit kell tenned. Ez a fejléc az About oldal­ ra irányítja át a böngészőt. A fentieken kívül még egy fejléccel. ). hogy öt másodperc után irá­ nyítsuk át a felhasználót az about . A tartalom sima szövegként kerül a böngészőhöz. ?> header ( Refresh: 5. Ezt a fejlécet (Refresh) frissítési fejlécnek hívják.r s . hogy még egy szóköz se legyen a PHP-kódon kívül. rendkí­ vül fontos. php *).oruit a i r u á .’. Mivel a fejléceket minden más tar­ talom előtt kell elküldeni. és az aktuális oldal­ ról az about . ?> Ebben a példában a böngészőnek átadott szöveg pontosan úgy jele­ nik meg.A z alkalm azás biztonságossá tétele M á sfé le fe jlé c e k é le lehet küldeni a PHP eegíteégével? Természetesen.php oldalra ugrik a Guitar Wars w ebhelyen belül.’. < ?pht irányítja az About oldalra. Itt pedig egy hasonló fejlécet használunk. gu itarwaÜ^«t ' echo 'In 5 seconds you’ll be taken to the About page. A fejlécek nem csak a biztonságot szolgálják. ahogy az echo utasításban szerepel. a kiszolgáló arra utasítja a böngészőt. így a HTML-címkék is m egjelennek a szövegben. hogy7 meghívod a header () függvényt a megfelelő név-érték párral: <?php header ( ’ Location: http: /7www. a tartalom típus-fejléccel (ContentType) érdemes megismerkedned. Az ilyen fejlécekben az URL gyakran ugyanarra az oldalra hivatkozik. mivel a megadott idő letelte után frissíti az oldalt. A PHP-fájlokban min­ dig a fejlécek kell le­ gyenek az elsők.php oldalra: a W. úri «http: //www. ami­ Vigyázat! ket elküldesz a böngé­ szőnek.

PHP AUTH USER PHP AUTH PW | ($ SERVER['PHP AUTH PW'] | admin.a kie g é szíte tt h ite le s íté s i kó d <?php // A hitelesítéshez szükséges felhasználónév és jelszó V k *• ii $ usernam e ■r o c k • . * '' A fefhasznátónevef és a jelszol A felhasználó által a hitelesítési ablakba beírt felhasználónévhez és jelszóhoz a $_$ERVER szuperglobális tömbön keresztül lehet hozzáférni. \p a s s w o r d m |= ' roi i .phc 310 6. fejezet . . __ a parancsfájl elején változókba ^ N helyezzük.

Más szavakkal. Ha a hitelesítés m eghiú­ sul.A z alkalm azás biztonságossá té te le Tesztút Egészítsd ki HTTP-hitelesítéssel az Admin parancsfájlt! Módosítsd az admin. A rekordok jogosultság nélkül nem törölhető^. *. ha a felhasználó a Cancel gombra kattint. m o s t i t t vagy ► 311 . A m ennyiben a hitelesítés sikerrel jár. hogy em lékezzen rá. hanem újraküldi a fejléce­ ket. és ismét próbálkozik. csak akkor hívódik m eg. S ár»*: v: Nincsenek hülye kérdések ! Pontosan mikor hívódik meg az exit () függvény a Guitar Wars alkalmazás Admin parancsfájljában? • Bár az e x i t { ) függvény a PH P-kódban közvetlenül T "//0 2ggg ! Van valamilyen tényleges célja a HTTP-hitelesítés tartomá­ nyának („basic realm")? Igen. hogy a fel­ használó bizonyos oldalak esetében eleget tett a biztonsági követelm ényeknek . «r « w nr mernemrmohBBB A gitárhosök most már elége­ dettek lehetnek: a rekordjaik biztonságban vannak! arx •HJjh Scot*** *-Ur«* * m — . az e x i t () m eghívására nem kerül sor. hiszen a parancsfájl soha nem jut el az i f utasítás belsejében sze­ replő kódig .eh hez csak ugyanazt a tartományt kell m eghatározni az oldalak hitelesítési fejléceiben. ha a felhasználó a Cancel gom bra kat­ tintva kilép a hitelesítési ablakból. majd töltsd fel a parancsfájlt a webkiszolgálóra. hogy HTTP-hitelesítést használjon. Egy olyan biztonsági „zónát” határoz meg. a bö n g észő m eg­ jegyzi azokat. i a h e a d e r () függvény két hívása alatt szerepel.•>?*»»*** Íí«=i r< » *> »M I Ö 1 T3 M OK :oi i» c20jiM»w® i s a t ik«i -ii yr «****• v ji «f0 * 1 iJO . a tartom ányok lehető­ vé teszik a böngészőnek.php parancsfájlt úgy. és k éső bb az ugyanarra a tartományra vo­ natkozó hitelesítési fejlécek esetéb en már nem jeleníti m eg a hitelesítési ablakot. és nyisd meg a webböngésződben. m ely esetben elküldi a függvényhíváson belül sze­ replő tartalmat.-K Top Score: 389740 A felhasználónév és a jelszó megakadá­ lyozza a jogosulatlan hozzáférést az Admin oldalhoz. hogy lásd a hozzáférés korlátozását. a kiszolgáló nem folytatja a végrehajtást a két h e a d e r () -hívás utáni kóddal. ha a felhaszná­ lónevet és a jelszót nem vagy helytelenül adták meg. am elyet egy bizonyos felhasználónév és jelszó véd. m *h « fuy*. í . de sem m i mást.j -T r T — »*»*>«. A kiszolgáló csak akkor jut el az e x i t ( ) függvényig.az csak akkor hajtódik végre. Ha az adott tartom ányban érvényes felhasználónevet és jelszót egyszer már sikeresen m egadták. Először egy érvénytelen felhasználónevet és jelszót írj be. • y w < *. hogy csak te érhesd el az oldalt.

egy újabb b iz to n s á g i p ro b lé m a . hogy mit csinál. és megakadályozni a rekordok törlését: 312 6. Oké. írd le. Úgy tűnik.php?id=1 O&na me=Jacob%20Scorcherson& lehet.h a valaki tudja.... iiífi : . hogy a Guitar Wars alkalmazás NEM biztonságos. ..guitarwars. <Jo you have u h * it lék&s to — £* t. kétségbeesésbe taszítva számtalan versenyzőt. és ismét eltüntesse a Guitar Wars rekordjait. hogy a gonosz újra le­ csapjon.php oldalt. Nem tartott sokáig.net/ | removescore. hogy bonyolult. Ü gyes próbálkozás.php oldalra mutató URL valóban megkerüli a biz­ tonságos admin. L e írta m erre a jókora tá b lá ra is. hogy szerinted hogyan lehetne elhárítani ezt az újabb tám adást..High Scores • Gtutar W tó o r. lehet. fejezet . ün n * »W h f Wm jo í í ü t M Í i« B h l« '* . hogyan kerülje meg a Guitar Wars biztonsági rendszerét. 'I http://www. Lángészkém l Szerencsére könyvjelzőbe m e n te t­ te m a re k o rd e ltá v o líto oldal cím é t. de a removescore. Ezt hívják múló sikernek. mert a Remove Score parancsfájlt közvetlenül is el lehet érn i. o ars . hogy az Admin oldal bizton­ ságossá tétele önmagában nem elég. é s k o z m e tik á z ta m kissé a d á tu m o t.

amit meg kell védenünk? ¿Megint lemásoljuk a kódot? Joe: A kódismétlés egyértelműen problémás. hogy a beem elés legyen az első. m ost it t vagy ► 313 . hogy egy új beemelt fájlra van szükségünk. ami az összes hitelesítési kódot tartalmazza.A z alkalm azás biztonságossá téte le Biztonságossá kell te n n ü n k a Remove 5 c o re parancsfájlt. különösen hogy a felhasználónévnek és a jelszónak közösnek kell lennie az összes parancsfájlban. php Jill: Mindkettőtöknek igaza van . nem csak a $usernaine és $password változókat. Mi lesz. <htm±> admin. márpedig jelentős méretű kódról van szó. Joe: Tetszik az irány. igaz? Jill: Igen. de én aggódom amiatt. és b iz to s vagyok benne.én ezért gondolom úgy. mivel az egész HTTP-hitelesítés a fejlécekre támaszkodik. és ezt a fájlt osztanánk meg a védett parancsfájlok kö­ zött? Sőt. Úgy értem. kerülhetnének akár az alkalmazás változóit tartalmazó megosztott appvars. Frank: így igaz. hogy a H T T P -h ite le s íté s e z ú tta l is m egfelel. Frank: Persze! És csak beem elnénk ezt a parancsfájlt azokon az oldalakon. és meg is vagyaink. ez biztosan működne. minden védett parancsfájlban el kellene végeznünk a módosítást. ha később még egy oldalt adunk az alkalmazáshoz. Joe: Ésszerűnek tűnik. Ha változtatni szeret­ nénk rajtuk. az Admin oldal esetében kitűnően működött. de ez a megoldás csak egy részét oldja meg a kódismétlés­ nek. ha külön beem elt (include) fájlba tennénk a $username és $password változókat. Tehát csak annyit kell tennünk. am e­ lyeket HTTP-hitelesítéssel szeretnénk védeni! Joe: Úgy van! Csak arra kell ügyelnünk.php fájlba is. hogy így két helyen sze­ repelne ugyanaz a hitelesítési kód. hogy betesszük ugyanazt a fejlé­ ces hitelesítési kódot a Remove Score parancsfájlba. Frank: Megvan! Mi lenne.

ectv. php* >.Jxciw£ ’ scr&onshc:?: * 1 ..gh Scores Adn»Lnistrati. format tin g i t a-s H L TM f eeho *<ta'Dle> ’ . a s neetied. JL 3. Ezt a kódot az admin.s a oe a l l G u ita i wars high -scares-. Srow f‘ d a te 1i .8 " /> < title > G tu ? a r tf*t5-Hj. $rowi 'name’ 3 . ftiyaq}. .ftysqU^corinect {SBJJQST. csak át kell helyezned a kódot az admin. . DB_OSER. 5password = ' r o l l ' . •// R eprieve th e sepre data from MyS'bl.screensh ot* 1 . <?php // A h i t e l e s ít é s h e z szükséges felh a sz n áló n év és je l s z ó $username = ‘ ro ck ’ . e z é rt ú jr a el k e ll küldeni a h i t e l e s í t é s i t e jlé c e k e t h ea d er{ ‘ HTTP/1 . Use fchis p&ae to rcsvove J «-hr /> ::& .</ci> £hlle ircw .pftp • .p h p ). :. $r ‘ e* .msq'i." ^ ..php nevű pa rancsfájlba. >si>i>er./cssH h ra £ ^ "sty iW css^ /> <t*>dy> . //.php?id“ ’ . authorize.y8qli_clcse !Sdbc».‘*3 C o x e ro v "x td X st£ o n g > . 5row r ’ none * 1 .VERf * PHP_A’ TK_PW’ ] != Spassword) > f J // A felh aszn áló n év . »iam p . I : .t/html ? c h a r s e t . Squery « "SELECT * FROM guitarw aro ORDER BY -¿core £ * » § * date A3C". echo ’ < t d x a hre?^" renc-vescore. echo *<td>* . ami az új. Co&iierct to the.on</title> " ty ^ e -" te :it . DB. <7body> </hml> adm in.’ .1 401 U nauthorized*>. h ead er( 'WWW-Authenticate: B a sic realm -"G u itar W ars"’ ) . you must e n te r a v a lid user name and password to a c c e s s t h i s p a g e .i' fct.FASSWORT). (S_SEP-VER[1PHP_A17TH_USER’ ] }» $username) II (S_SEP. 's t r o n g x / t d » ’ . fejezet . database idbc . if (! i SSet (S SERVER: ’ PHP_AUTH_USERt j > l | ! 1 s s e t ($_SERVER \»PHP_AUTH_PW •] | |. <hL->G«itur Wars-High Sco res Adainistr«at. R*. ‘ &amp. e x i t ( '<h2>Guitar Kars<i'h^>Sorry.oV&<% v//rd>* ■ . . :T 3 • c?php requ xre_once( ' appvars.')/ ?> ' <head> <meta h ttp -eq u iv -"C o n ten t-T y p e" content® * ter. sc o re .php bői helyezzük át egy ónál tó. . 3ro v (•s c o r e ’ ] * *</td>*. Stf-ata *. .arg.u t f .i_Ciuery (5dbc# Sqfueryj.:'h_j_array 5 & : y $dat )) I ?> ■ : // i>i so la y th e sco r~r dat a echo *< tr c l a $ s . : • .az authorize. Scow»’ i d * ! .ion< / h2> ■<p>3eiow $. DB_KAME) . // l^op through the arra y o f sco re d ata.php 314 6. php parancsfájl létrehozása A hitelesítő' parancsfájl létrehozása Már minden kód megvan. i l l e t v e a je l s z ó h e ly te le n . ) requ ire_once <' conr..•' . Authorize („hitelesítés”) nevű parancsfájlhoz szükséges. echo ’<td>' S ro x j ’ d a te ’J . és a helyére egy r e q u ir e _ o n c e utasítást írnod. php-ből egy új fájlba (a u th o r iz e .

am elyekkel másik oldalra irányíthatod a felhasználót. php A megosztott Authorize parancsfájlt ennek a parancsfájlnak a legelején emeljük be. szabályozha­ tod egy oldal tartalmának típusát.php*).php’ ) ?> < h tm l> A 2 Admin parancsfájl­ ban a hitelesítési kód helyére egyetlen sornyi PHP-kód kerül. Ha egy oldalt HTTP-hitelesítés véd. A PHP beépített exit () függvénye egy PHPparancsfájlból való kilépésre szolgál. adm in. a felhasználó által beírt felhasználónevet és jelszót a $ _ s e r v e r szuperglobális töm b tárolja. <?php ~equire_once('authorize. A HTTP-hitelesítés „tartománya” egy olyan biz­ tonsági zóna.php rem ovescore. illetve elküldését a böngészőnek. Amikor fejléceket küldesz a böngészőnek a header () függvénnyel. mi vei a header () függvényt hívja meg. am elyhez egy adott felhasználónév és jelszó társul. a header () hívásának bármilyen tartalom elküldése előtt kell szerepelnie. m o s t i t t vagy ► 315 .Az alkalmazás biztonságossá tétele authorize. hogy a kiszolgáló hogyan kézbesíti a w eb es tartalmat a böngészőnek. hogy több oldalt együttesen tegyél biztonságossá. és am ely lehetővé teszi.php Újratöltve A PHP-parancsfájlok fejlécek segítségével szabá­ lyozhatják. ami meg­ akadályozza a függvény hívást követő kód végre­ hajtását. illetve egy ol­ dal hitelesítését kérheted. A PHP beépített header {) függvényével fejléce­ ket küldhetsz a böngészőnek. ?> <?php require_once ( 'authorize.

még akkor. hogy melyik rekordot kell eltávolítani. de ne feledd. A tartományok segítsége nélkül persze tényleg m acerás lenne a rekordok jogosult törlése is. ami mindkét oldal esetében azonos. a böngésző az egész tartományban em lékezni fog a felhasználónévre és a jelszóra. Ethel pontosan ezt tette. hogy visszafejtsék a PHPparancsfájljaidat. amellyel köz­ vetlenül. Emlé­ kezz vissza. olyan tarto­ mányt határoztunk meg. hogy meg kellene nyit­ nod az Admin oldalt. anélkül törölhetsz rekordokat. az URL-ben ad­ juk át. de ehhez nem kellett zseninek lennie. de a rekordokat a korábbi támadás óta újra beírták. hogy a régi URL-ek nem működnek. Ez nem azt je­ lenti. ami a Remove Score ol­ dalra mutat? Ethel elég ügyes. de ha em lékszel rá. Végeredm ényben tehát a felhasználónevet és a jelszót elég egy­ szer sikeresen megadni. hogy a Remove Score parancsfájl el­ érje ezeket az adatokat a $_G ET szuperglobális töm bön keresz­ tül. Ha képes vagy összeállítani a Remove Score oldal érvényes URL-jét. és kiaknázzák a gyengeségeit! K V Rendben. M it csinált? Azt a gyengeséget használta ki. ami abból adódott. amelyek a Remove Score oldalra mutat­ nak. hogy könyvjelzőbe mentette a Remove Score oldal címét. Soha ne becsüld alá az el­ tökélt támadók képességét arra. mivel a felhaszná­ lónevet és a jelszót kiilön-külön kellene megadni az Admin és a Remove Score oldal számára. a könyvjelző csupán egy URL. szóval az Admin és a Remove Score oldalak együttes védel­ me akadályozza csak meg Ethelt. hogy mindkét oldalhoz hozzáférj. mert a dátumok különböznek? Nagyon ügyes észrevétel. Ha már megadtad az azonosító adataidat egy adott tarto­ mányban levő oldal hitelesítési ablakában. ami­ nek a segítségével simán felépíthette azt az URL-t. hogy Ethel igencsak fifikás. és kiaknázzák a gyengeségeit. hogy visszafejtsék a PHP-parancsfájljaidat. hiszen az Admin oldal olyan Remove hi­ vatkozásokat tartalmaz. am ikor egyáltalán nem védtük a webhelyei. de nem teszik kínszenvedéssé a rekor­ dok eltávolítását a rendszergazda számára is? Egyáltalán nem. és beleilleszthette a régi URL-be. hogy soha ne becsüld alá az eltökélt támadók képességét arra. ami azt jelenti. hogy’ azt mondta. hogy Ethel hogyan kerülte meg a Guitar W ars alkalmazás biztonsági rendszerét. K V Oké. Azt. Fontos. fejezet . hogyan kell felépíteni az URL-t. az Admin oldal megnyitása nélkül elérhette a Remove Score oldalt. és ez teszi lehetővé. és így gond nélkül eltávolíthatta az új rekordokat. Egyszerűen m egnézhette a Guitar Wars főoldalán az új dá­ tumokat. hogy a két oldal azonos biztonsági zónába tarto­ zik.nem hülye kérdések a biztonsággal kapcsolatban Nincsenek hülye kérdések K V Még mindig nem értem pontosan. 316 6. hogy csak egyetlen oldalt (az Admin oldalt) vcdtünk. K V De honnan tudta. Nos. amikor a rekordeltávolítási szolgáltatás valójában két oldalra (Admin és Remove Score) támaszkodik.

Az alkalmazás biztonságossá tétele Készítsd el az Authorize parancsfájlt. es éri el a Remove f _C K ) a/ et In '> A Remove Score oldal a hozzáférés módjától fu g-getlenül védelem alatt áll.php parancsfájlt. n e t / r e r a o v e s c o r e . majd próbáld megnyitni a Rem ove Score parancsfájlt közvetlenül a w ebböngésződben.Remove a High Score ’ Szerinted milyen veszélyek fenyegethetik még a Guitar Wars rekordjait? The high s « « o f 314340 fur BUT Jcclc wa* s u c c c s ^ «m oved << joadm 2§£e m most itt vagy ► 317 . php néven.0 5 . írd bele az Authorize parancsfájl kód­ ját. majd módosítsd úgy az ad m in. Lehet.a legtöbb böngésző megjegyzi a hitelesítési tartományokat. ^ a2 /^m in és a Remove Cuita» Wars . és emeld be az Admin és a Remove Score parancsfájlokba.p h p parancsfájl elejéhez is. hogy ismét m egjelenjen a hitelesítési ab­ lak . hogy biztonságossá tedd azokat! Hozz létre egy új szövegfájlt a u t h o r i z e . g u i t a r w a r s . hogy ezt a fájlt is HTTP-hitelesítés védje. p h p ? id = 1 0 & n a m e = Ja c o b % 2 0 S c o r c h e r s o n & d a t e = 2 0 0 8 .High Scores h t t p : / /www. hogy a tényleges HTTP-hitelesítési kód helyett csak az Authorize parancsfájl beem elését tartalmazza. Töltsd fel az összes parancsfájlt a w ebkiszolgálóra. Add ugyanezt a r e q u ir e _ o n c e utasítást a re m o v e s c o re . hogy7 ne kelljen minden al­ kalommal beírnod a felhasználónevet és a jelszót. — ____ I Guitar Wars .0 1 % 2 0 2 0 : 3 6 : 45& ^ sco re= 389740& s c r e e n s h o t = ja c o b s s c o r e . g i f Password Remember this password in my keycham 7 Ez az URL megkerüli az Adm''« parancsfájlt. hogy törölnöd kell minden korábbi HTTP-hitelesítési m unkam enetet a böngésződben.

gif ethe lssco re jjy^ tis l 318 6. rész Sajnos a Guitar Wars-univerzum boldogsága nem tartott sokáig: ham is rekordok tűntek fel az alkalm azásban az érvényes rekordok helyén.gif phizsscore.gif kennysscore. hogy pontosan 5 0 0 0 0 0 pontot sikerült elérnie.a hamis rekordok rejtélye rekord Guitar W/ars — II. ami felháborodást vál­ tott ki az egész Guitar W ars-univerzumban.de hogyan? pi o n Guitar titers .High Scores OTdt the hifh scorc Bn? I f » . rész­ ben az ügyetlenül retusait képernyöfelvétel.gif leddysscore.gif ¡eanpaulsscore.gif pacosscore. Guitar Wamor. Ezek szerint rekordok törlése nélkül is tönkre lehet tenni a Guitar Wars dicsőséglistáját. do you have «hat it takes to Top Score: 500000 500000 Name: Ethel Heckcl Date: 2008-05-02 1 4 0 2 . részben amiatt a tény miatt.5 4 Gu i t a r Nam« / Ethel rekordpontsza'ma meglehetősen gyanús. EtlielHeck Score: _ 389740 Name: Jacob Scorcherson D ate: 200 8 05-01 20 :36:45 J AC OB O t t Gui ta r f 1 f I M SU | 22 23 24 25 26 27 28 29 2008-05-01 20:36:45 2008-05-01 20:37:02 2008-05-01 20:37:23 2008-05-01 20:37:40 2008-05-01 20:38:00 2008-05-01 20:38:23 2008-05-01 21:14:56 2008-05-01 21:15:17 2008-05-02 14:02:54 It Jacob Scorcherson Nevil Johansson Paco Jastorius Phiz Lairs ton Kenny Lavitz Jean Paul Jones Leddy Gee T-Bone Taylor Ethel Heckel score screenshot 282470 389740 98430 127650 186580 64930 243260 308710 354190 500000 be itasscore aif W v' I I I M w • W I W •VI I 1 — # jacobsscore. ..High Scory* Guitar Wars . j» « aid jffiurjjwnJESSSVr’clcoroc . fejezet .gif nevilsscore.gif tbonesscore.

hogy ez nyil­ vánvalóan nem igaz. hogy miként oldanád meg. hogy a felhasználók ne tudjanak hamis re­ kordokat feltölteni a Guitar Wars alkalmazásba: most itt vagy ► 319 .. ki a b ű n ö s.. igen.Az alkalmazás biztonságossá tétele Kivonás hozzáadással Mostanáig arra a feltevésre építettünk.b ű n ö s m indenben! Csak a n n y it k e lle tt csin á ln o m .. hogy minden rekord érvényes. am i­ hez képernyőfelvételt is feltöltöttek. És tudjuk. Most már kijelenthetjük. hogy fe ltö ltö m a h ih e te tle n ü l h a m is re k o rd ja im a t a r e tu s á lt kápernycífelvételekkel.. és jókora kalamajkat kavarhat a Guitar W/ars világában. írd le. én v a g y o k . hogy elég egyszerűen hamis rekordokat feltöltenie retusált képernyöfelvételekkel. Ó. Jó érzés a g ítá rh tfs ö k bajnokának lennil Ethel rájött.

Persze így is lehetséges. V*. Jr"7 n í . hogy a rekord automatikusan nyil­ vánossá is válik. »> '.. R a jta m a z tá n nem ju tn a k k e re s z tü l a ham is d o k u m e n tu m o k .. hogy felügyelő jóváhagyhassa azokat. Esetünkben egy élő em ber a legalkal­ m asabb arra. hogy valaki ügyesen hamisít egy képernyőfelvé­ telt. ás ritk á n hibázom . íi«w. és a m oderálás kellő elrettentő erővel bír. amelyben valóban megbízott volna. Az Admin parancsfájl módosításával elhelyezünk egy Approve (Jóváhagyás) hivatkozást a rekordok mellett. és a hamis rekord elkerüli a m oderátor figyelmét. hogy egy PHP-alkalmazás biztonságossá tétele nagyrészt a m egelőzésről szól! A Guitar Wars rettenthetetlen mo­ derátora. de a feladat nem könnyű. és felm érje. aki még soha nem talál­ kozott olyan rekorddal. A la p o s vagyok. Az emberi felügyelet kitűnő módszer a fe l­ használók által feltöl­ tött tartalom érvényes ségének védelmére. hogy jóváhagyja a w ebalkalm azásba feltöltött tartalmakat. A Guitar Wars alkalm azásnak csak előnyére válhat az em beri felügyelet. High S c o rn Administration J ( -— v . juhi sj3j~ . Egy moderátorra van tehát szükség: egy olyan em ­ berre.a»aM «v) i J**» itat „ u 0. mielőtt azok elérhetővé válhatnának a nagyközönség számára. hogy elem ezze az inform ációkat. de addig nem lesznek nyilvánosak.# # . 320 6. amíg a moderátor jóvá nem hagyta öVet.. rekordok. W a r s . Xt3)JI m tK ------- j>wí. A moderálásnak köszönhetően az új re­ kordok bekerülnek az adatbázisba. Ne feledd. sem nélkülözhető néha a lélegző. akinek az a feladata. am elyben élünk.. hogy azok ér­ vényesek-e vagy sem.l « r » * • «*»»teii ' i03tíJ>¿ÍHJV . *» Score Action 500000 Remove / Approve 389740 Remove* 11«iM lb".a guitar wars alkalmazásnak emberi felügyeletre van szüksége A biztonság embert követel Még e b b e n a m odern világban. gondolkodó em beri lény.> ■ ? 4 3 Egy új rekord felvétele már nem jelenti azt. fejezet .

ol 5ÖOOOO Ha az adatbázis már készen áll rá. A lekérdezés módosítása.enélkül a jóváhagyáshoz kapcsolódó többi vál­ toztatás értelm etlen lenne. G u itar W ars High Scurcs n m • « nc«: ia &Lxawi« a * wm v* au Top Score: 389740 JW 740 X c o rc r most itt vagy ► 321 . Módosítani kell az adatbá­ zist. és végül úgy kell módosítani a főoldalt. Erre az Admin oldalon elhelyezett Approve hivatkozá­ sok szolgálnak.Az alkalm azás biztonságossá té te le f a emberi felügyelet megtervezése a Guitar Wars alkalmazásban Az em beri felügyelet lehetőségének hozzáadása a Guitar Wars alkalm azáshoz b o ­ nyolult művelet. am elyek csak a még jóvá nem ha­ gyott rekordok mellett jelennek meg. am elyben rögzíthetjük. irff loö. amely az új rekordok jóváhagyását kezeli (va­ gyis 1 értékre állítja az a p p r o v e d oszlopot). Az alkalmazás főoldalát tehát úgy kell m ódo­ sítani. am elyben egy új oszlopra van szükség. hogy csak a jóváhagyott pontszám ok jelenjenek meg rajta. mert az alkalm azás több részét is érinti. a jóváhagyás végrehajtásához új parancsfájlt kell írni. hogy m egkeressen egy adott rekordot az adatbázisban. 2008*5-01 21 14*© Ucn. és a m ódosításokat lépésenként végrehajtani Egy approved (jóváhagyva) nevű oszlop hozzáadasa a táblához az a l t é r utasítással. kell egy pa­ rancsfájl is. G u itar W a n •High S to re s AdrainUimtion Az utolsó lépés annak biztosítása. hogy a főoldal csak a jóváha­ gyott rekordokat mutassa. az Admin oldalon el kell helyezni egy Approve hivatkozást a rekordok mellett. Az Approve Score egy háttér-parancsfájl. Kezdjük az adatbázissal. és módosítsa az ap p rov ed oszlop értékét a rekord sorában. hogy a jóváha­ gyás beépüljön a főoldalon m egjelenített rekordlis­ tába. Ennek az Approve Score nevű parancsfájlnak lesz a íeladata. hogy az adott rekordot jóváhagyták-e vagy sem. hogy rögzítse a rekordok jóváhagyott állapotát. T y oW 2CC&05-02 l í 02:54 £*}. fontos tervet készíteni. Miután ilyen sok változtatásról van szó. 3U 0 U 3227 tO A jóváhagyásra váró rekordok mellett egy Approve hi­ vatkozás elhelyezése az Admin oldal módosításával. amelyet normál esetben nem lehet közvetlenül elérni. ami ténylegesen végrehajtja a rekor­ dok jóváhagyását. hogy csak a jóváhagyott rekordokat mutassa . Az Approve Score (Rekord jóváhagyása) parancsfájl lét rehozása.

fejezet . Ez azt jelenti.~ " V I INSERT INTŐ guitarwars ^ VALUES (0. az approved oszlopa a 0 értéke: veszi 500000 314340 322710 ethelsscore. I I ■ I I ■ I r. '$name1. illetve 1-gyel a jóváhagyott rekordokat. hogy ne veszítsd szem elől. ami azt jelzi. hogy kezdetben egyik rekord sincs jóváhagyva. Nem kene a p a ra n c s fá jln a k IN 5 E R T -te l b eszúrnia a d a to k a t a z új oszlopba? Igazad van.gif pezsscore. hogy az oszlop értéke minden új rekord esetében 0. HTML-kódból.korrf Az approved oszlop értéke minden újonnan beszúrt . Ahhoz. az új oszlop egyben egy új értéket is jelent az Add Score parancsfájl INSERT-Iekérdezésében. q V á rju n k c s a k egy p e rc e t! S z e rin te m az A d d Score p a ra n c s fá jl m ó d o s ítá s a nélkül nem v le h e t c s a k ú gy h o zzá a d n i egy o s z lo p o t a z a d a tb á z is h o z . m ódosítanod kell az Add Score parancsfájlban levő INSERT-Iekérdezést is: . A -J iíS Z Egy approved (jóváhagyva) nevű oszlop hozzáadása a táb­ lához az ALTÉR utasítással. tehát a rekord kez detben nincs jóv hagyva 322 6. hogy az új Approve Score parancsfájl számára hozzáadd az új approved oszlopot a g u ita r w a r s táblához. 0) H 30 31 32 2008-05-02 14:02:54 2008-05-02 20:32:54 2 0 0 8 0 5 0 2 20:36:38 Ethel Heckel ßiff Jeck Pez Law Amikor új rekord kerül a tálába.'$screenshot'.gif biffsscore. és a 0 értékkel jelzi a jóvá nem hagyott. vagyis „jóvá nem hagyott" le « . és általában CSS-kódból. Az új approved oszlop típusa TINYINT. '$score'. hogy az egyik rész m ódosítása egy másik rész megváltoztatását is szükségessé teszi.gif fel. PHP-kódból. Fontos. hogy a PHP-al kai m azások szám os gondosan összehangolt alkatrészből állnak: egy sorokat és oszlopokat tartalmazó adatbázisból. Az azonban nem mindig nyilvánvaló azonnal. N O W ().az approved oszlop hozzáadása a g u ita rw a rs táblához Csinálj helyet a jóváhagyásnak az ALTÉR segítségével! Az új approved oszlop hozzáadása a g u ita rw a rs táblához a korábban már használt ALTÉR TABLE SQL-utasítás egyszeri használatát igényli: ALTER TABLE guitarwars ADD COLUMN approved TINYINT A TINYINT helyett a MySQL B001 adattípusát is használhatod.« ■ » * sorában 0.

. ) { // C s a t la k o z á s az a d a tb á z is h o z $dbc = m y sq li_ co n n ect (DB_H0ST..... most itt vagy ► 323 .. $ q u e r y ). Pótold az Approve Score parancsfájlból hiányzó kódol.. php' ) .... am elyiknek az adatait megkaptad az URL-en keresztül... DB_USER. DB_PASSW0RD/ DB_NAME) .. csak éppen az a feladata..... php1) ....... hogy jóváhagyjon egy rekordot. Back t o admin p a g e< / a x / p > ' . <?php r e q u i r e _ o n c e ( 1ap p v ars... m ysqli c l o s e ( $ d b c ) .....Az alkalmazás biztonságossá tétele V h" <?php ?> ezd ki a ceruzád! Az Approve Score parancsfájl a Rem ove Score parancsfájlhoz hasonlóan épül fel. r e q u i r e _ o n c e ( ' c o n n e c t v a r s . gondoskodj az oldal biztonságossá tételéről.. • • • if ( i s s e t ( $ _ P 0 S T [ ’ s u b m it’ ] ) ) { if (.. & l t . és csak azt a rekordot hagyd jóvá. // A rekord jó v áh ag yása az approved o s z lo p b e á l l í t á s á v a l az a d a tb á z is b a n $query = "UPDATE g u ita rw a rs SET m ysqli_q u ery($d bc.. // A művelet s ik e r é n e k m e g e r ő s ít é s e a f e l h a s z n á l ó számára echo else { echo } ) • • • echo ' < p x a h r e f= " " > & l t ..

Pótold az Approve Score parancsfájlból hiány­ zó kódot. <?php r e q u i r e _ o n c e { 1ap p v ars. hogy jelezd. $ q u e r y ).</p>. de ennek a legelső dolognak kell lennie a parancsfájlban. php1) . ha egy rekord jóváhagyása meghiúsult.a kiegészített approve score parancsfájl ezd ki a ceruzád! . ami a könnyebb navigáció ér­ dekében visszavisz az Admin oldalra. it echo ' <p><a h r e f =" ?> Back t o admin page</a></p>’ . fásához az azonosító­ nak egyeznie kell. r m 'J — ( Y e s' ) { // C s a t la k o z á s az a d a tb á z is h o z A jóváhagyás végrehaj$dbc = m y sq li_ co n n e ct (DBJHOST. \l/ // A művelet s ik e r é n e k m e g e r ő s ít é s e // a f e l h a s z n á l ó számára echo } A jóváhagyás megerősítése a felhasználó számára a jóváhagyott pontszám és a név megjelenítésével.. gondoskodj az oldal biztonságossá tételéről.. amely az új rekoi jóváhagyását kezeli (vág] értékre állítja az appn oszlopot). ugyanúgy. m ysqli c l o s e ( $ d b c ) . Hivatkozás.php ... else { e c ilo } d la s s ^e n rc r^S o rry .. ^ Az Approve Score (Rekord jóváhagyása) parancsfájl létre­ hozása. és csak azt a rekordot hagyd jóvá. mivel fejlécekre támaszkodik. 324 6. csak be kell emelned az Authorize parancsfájlt. ahogy a Guitar W/ars más parancs­ fájljainak hibaüzeneteiben. hogy az Approve Score parancsfájlt biztonságossá tedd egy felhasználónévvel és jelszóval. csak éppen az a feladata.. r e q u i r e _ o n c e { ' c o n n e c t v a r s . rt ?> Cau-fcKori ut •pKp*) 1 <?php Ahhoz.p h p ’ ) . fejezet . am elyiknek az adatait megkaptad az URL-en keresztül. • • • if ( i s s e t ( $ _ P O S T [ ’ s u b m it' ] ) ) if ( /_P0 S T C W . appvoved — I WttERE id — 'f id1 Az approved oszlop t-re állításával jóváhagyod a rekordot.. admin. there was a pvoblcnrv appvov'mj ih c sdore. // A re k o rd jó v áh ag y ása az approved o s z lo p b e á l l í t á s á v a l f i az a d a tb á z is b a n $query = "UPDATE g u ita rw a rs SET m ysqli_q u ery($d bc. Fontos. DB_USER... '<p>TVie H s¿ore of ' •fstort .megoldás Az Approve Score parancsfájl a Remove Score parancsfájlhoz hasonlóan épül fel. DB_PASSWORD. 1 -foc ' igh fname ' was su-ddess-fulhy approved-1 . DB_NAME) .. hogy jóváhagyjon egy rekordot.

most itt vagy ► 325 . ’ &amp. hogy létrejöjjenek ezek a hivatkozások.. $ ro w [’ d a t e f ] . ...date=’ .screenshot=! ... w h ile ($row = m y s q l i _ f e t c h _ a r r a y ( $ d a t a ) ) { // A p o n ts z á m o k m e g j e l e n í t é s e echo ’ < t r c l a s s = " s c o r e r o w " x t d X s t r o n g > ' ... vagyis „felsorolt" rövidítése) olyan oszlop is létrehozható. $row[ ' s c o r e 1] . am i­ kor jóváhagyunk egy rekordot? ! Azért.... am elyben csak a ' y e s ' (igen) vagy a 'n o ' (nem ) érték szerepelhet: V ALTÉR TABLE g u i t a r w a r s ADD COLUMN a p p r o v e d E N U M ('y e s1.. hogy jóváhagyjuk..score=’ .... ’ &aitip..... az Admin parancsfájlban előállított Approve hivatkozásokon keresztül adjuk át. echo ' < td > ’ .... mert egy rekord jóváhagyásának műveletéhez csak annyi információ kell.... Ez azt je­ lenti. 1</td>f ... $ r o w [ ' i d ’ ] . $row [1name *] ... A dátum.... ’ ">Remove</a>1. A MySQL ENUM adattípusának segítségével (az EMUM az „enumerated"... hogy csak az adott sor m egkereséséhez elegendő adat szükséges. Az a p p r o v e d oszlopot tehát 0 vagy 1 értékű TINYTNT helyett létrehozhatod ENUM típusúként is....... am elyben csak bizonyos értékek szerepelhetnek.name=' ... // A p o n ts z á m o k t ö m b jé n e k b e j á r á s a ás H T M L -kén t tö rté n ő fo rm á z á sa egy c ik lu s s a l echo ' < t a b l e > f . Tipp: Approve hivatkozásnak csak a jóvá nem nagyott rekordok mellett szabad lennie. ' < / s t r o n g x / t d > 1/ echo 1< t d x a h r e f = ”rem o v esco re...Az alkalmazás biztonságossá tétele Nincsenek hülye kérdések ! M iért nem szükséges átadni a képernyőelvétel fájlnevét..... } echo 1< / t a b ie > ’ . aminek az alapján meg le­ het találni a rekord sorát.. if ( . $row [ ’ d ate f ] ’ &amp. ’ & am p. $ ro w [’ name'] echo ’ < td > ’ . am elyek egy rekord jóváhagyásához szükségesek az Approve Score parancs­ fájlban.. Pó­ told az Admin parancsfájlból hiányzó kódokat..p h p ?id = ' . IC \ A 0 és 1 értékek jelentése az approved oszlopban némileg rej­ télyesnek tűnhet. Másképp nem lehet jelölni ezt az információt? • De igen...... $row[ 1s c r e e n s h o t ’ ] ....) { echo } echo l < / t d x / t r > ’ . ’ </td>’ ....... $row[ ’ s c o r e ’ ] .. echo ' < t r x t h > N a m e < / t h x t h > D a t e < / t h x t h > S c o r e < / t h x t h > A c t i o n < / t h x / t r > 1.. a név és a pontszám elégsé­ ges a sor m egtalálásához és az a p p r o v e d oszlop 1-re állításához. ’ n o ') ki a ceruzád! Az adatokat....

' </td>'.megoldás Az adatokat. echo !<td>’ . hogy létrejöjjenek ezek a hivatkozások. $row[1score1] . s c r e e n s h o t= ' . frowíVamc'] . fejezet . a pontszámot és a képernyfelvétel fájlnevét. a dátumot. am elyek egy rekord jóváhagyásához szükségesek az Approve Score parancsfájl­ ban.name=' 1 if { $row[’id1] .. $ r o w [ ' s c re e n s h o t’ ] > ( fVowC apptroyca'3 ^f=-. •jhrowTda^J . while ($row = mysqli_fetch_array($data)) { // A pontszámok m e g j e l e n í t é s e echo ’<tr class="scorerow. $row['date'] . . $row [ 'n am e’ ] .f r c w v-— •'&a»np.xtdxstrong>' .^ C id 'l echo 1/ <a K ^ f ^approvcsóorc. a nevet. > echo *</tdx/tr>'. echo 1<trxth>Name</th><th>Date</th><th>Score</th><th>Action</thx/tr>1. Pótold az Admin parancsfájlból hiányzó kódokat. 326 6.---------------------------. frovCsCort'! . Az Approve hivatkozást úgy kell létrehozni. // A pontszámok tömbjének b e j á r á s a é s HTML-ként t ö r t é n ő form ázása egy c i k l u s s a l echo ’<table>f. $row['datef] .daie— . echo '<td>’ . '>Aj>{vovc</a>1 .# . hogy az URL-ben átadja az azonosítót. fro^rsdrccnsKot^ .. '& amj>^sdorc=-. $row[ . az Admin parancsfájlban előállított Approve hivatkozásokon keresztül adjuk át.date=' .‘P ' ^ -----------------.s c o r e ’ ] EHenfrH ha9y a rekord nineí. ’&amp. mielőtt létrehoznád az Approve hivatkozást.php?id= ’ ' &amp. ' & a ^ j . ’ "> R e m o v e < /a > f / jóváhagyva. ’</td>’. echo '</table>’. l &amp^sdrccrvsKo-t— ' .az approve hivatkozások létrehozása v Hegyezd ki a ceruzád! .s c o re = ’ . &am p. echo *<tdxa href="removescore . ' &a m p .pK^id— .

hogy ellenőrizze az új rekordokat.gif biffsscore.-. csak a végső lépés hiányzik: a főoldal m ódosítása.gif ethelsscore. nam e score screenshot j approved 2008-05-01 21:14:56 2008-05-01 21:15:17 2008-05-02 14:02:54 31 32 2008-05-02 20:32:54 2008-05-02 20:36:38 Leddy Gee T-Bone Taylor Ethel Heckel Biff Jeck Pez Law 308710 354190 500000 314340 322710 tbonesscore. hogy melyiket kell törölni. date ASC AW HERE záradék hozzáadása a fenti lekérdezéshez kiiktat minden jóvá nem ha­ gyott rekordot . hogy megvalósíthasd a m oderálást a Guitar Wars rekordm egjelenítő alkalm azásban. hogy csak a jóváhagyott rekordok jelenjenek meg rajta. Ezt egy WHERE záradék segítségével érheted el: Egy adott oszlop értéke alapján a IVHERE záradék segítségével választ hatsz ki sorokat.gif pezsscore.0 A lekérdezés módosítása. a rekord nem jelenik meg. és eldöntse. SELECT * FROM guitarwars WHERE approved = 1 ORDER BY score DESC. hogy csak azokat a re­ kordokat mazsolázza ki. így a m oderátornak leh e­ tősége nyílik rá. na»«1 Scor«: I Q « — *2?r.php) most ma'r csak a jóvá­ hagyott rekordok jelennek meg. hogy a főoldal csak a jóváhagyott rekor­ dokat mutassa.Az alkalmazás biztonságossá tétele A jóvá nem hagyott rekordok nem számítanak Most már m inden szükséges elem a helyén van ahhoz.T-Bo« TtStoc p u e 3000-0*41 il:IW T-6-3HC Srnr«.am ibe az összes új rekord beletartozik. Ha az approved oszlopban 1-tol eltérő' érték szerepel. Ehhez a SELECT SQL-lekérdezést kell m ódosítanod. és melyik tehető nyilvánossá a nagyközönség számára. 3 *4 4 1 30 __: MJe fU O O S-O '^X tO l»*1 m ost it t vagy ► 327 .-* 3S«*in o 3 2 2 ? 1Ü A főoldalon (index.gif 1 L :v 354190 . am elyeknek az ap p rov ed oszlopában az 1 (jóváhagyva) é n é k szerepel.

Töltsd fel az összes parancsfájlt a w ebkiszolgálóra. hogy csak a jóváhagyott rekordokat jelenítse meg.11 Guitar Wars high * 0* .php parancsfájlt! Tesztűt Készítsd el az Approve parancsfájlt.php parancsfájlban található INSERT-lekérdezést. . hogy beszúrja a 0 értéket az approved oszlopba az új adatsorokban.-07 282470 Ö L cfj^ 2008-05-01 20:38:23 243260 Rapovg 2008-05-01 20:37:40 1S6580 Sill&vc 2008-05-01 20:37:23 127650 Removc 2008-05-01 20:37á)2 98430 2008-05 Oí 20:38:00 64930 kem ov? Az Admin oldalon talál­ ható új Approve hivatta zások lehetővé teszik az Approve Score oldal elérését. Ezt követően hozz létre egy új szövegfájlt approvescore. Jaco h Scoirberson 2008-05-01 20:36:45 389740 Rspovc T-Boixr T a jlo r Pe/ La*v Name Kthel liccfcel Daíc Score Aeüon BW Jedi Leddy Cke Beíita (Jb*vy J c a c Paui Jonw Phlz LsJrsíon Paco Jastorius N«vO Johinssoo Keun> 200805-01 21:15:17 354 iqQR c ^ 2008-05-02 20:36:28 322710 200805-02 20:32:54 314340____ __ 2008-05-01 21:14:56 308710 Remnvr 2008-05-0! 20:36. hogy m ely rekordok láthatók.php parancsfájlt. hogy elhelyezze az Approve hivatkozásokat a jóváhagyandó rekordok mellett.High Scores Administration B ek ™ « a u * ot . hogy hasz­ nálatba vegyék az új parancsfájlt! Valamelyik MySQL-eszköz segítségével hajtsd végre az új approved oszlopot a guitarwars táblához adó ALTER-lekérdezést. hogy m egjelenik-e a rekord.teszteld az approvescore. U * th * p a** to n ^ o v e a * * * n c * k * J 2008-05-02 14D2SX 500000 /Aejao>J.php néven. és dolgozd át a Guitar Wars többi részét. és nyisd meg a Guitar Wars oldalt a böngé­ sződben. kattints valamelyik Approve hivatkozásra.php fájlban. majd nyisd meg az Admin oldalt. végül pedig változtasd m eg úgy a SELECTlekérdezést az index. majd módosítsd az addscore. ahol az egyes rekordok jóváhagyhatok. Figyeld meg. és írd bele az Approve Score parancsfájl kódját. . és a főoldalra visszatérve nézd meg. Módosítsd az admin. hagyd jóvá a kiválasztott rekordot. Guitar W ars .

Az alkalmazás biztonságossá tétele G u itar W a rs .Approve a High Sow«------| The high score of 322710 for Pcz Law was successfully approved.A pprove a n ig n acur« Arc you sure y want îd approve thc iolk»wing high score' va Nitove. Pcz Law Date: 2008-05-02 2U:36:2S Scor«: 322710 A rekordok jóváhagyását egy megerősítő üzenet megjelenítése követi. 354!90 N am e: T -B on c Taykir Daw : 2008-05-01 21:15:17 Cuitar W *« Çcorr» S c o re • 3 5 M1 T 0 322710 HZ ujonna jóváhagyott rekord megjelenik / a Guitar W/ars főoldala' Nam «: Fez Law D ale: 2CÜ8-05-02 2 0 :3 6 2 8 314340 N am e: 3ifT Jeck D ate: 2008-0502 20:32:54 most itt vagy ► 329 . Guitar Wars . j ) « Back to admin page I Egy egyszerű űrlap megero sítést kér a rekordok tény­ leges jóváhagyása elolt.

High Scores Guitar Wars .High Scores W cicoroc. melyik az élvezetesebb: harmonikázni vagy gúnyt űzni a G u ita r W a rs webhelyből! i 389740 N am e: Jacob Scorcbcrson D ate: 2008-05-01 20:36:45 Gui t a r Name*- JACOBOVNSU Ethel táncra perdül örö­ mében.még­ is itt van! N am e: Ethel Heckel D a te: 2008-05-05 14. Guitar W am or. 330 6 . aminek a megjelené­ sét a moderátornak rögtön meg kellene akadályoznia . és valahogy képes túljárni a m oderátor eszén. hogy ismét megverte a rendszert. de még m essze áll attól. hogy furfangos támadónk ismét talált egy gyenge pontot a rendszer­ ben. hogy helyreállítsd a bizalmat a Guitar Wars-univerzumban.58:59 Gui t a r Name: S co re : to o o o o o EtUelH«* őszintén szólva nem tudom . just Top Score: 1000000 1000000 Ez pontosan az a fajta rekord. Guiar wőrs .Ethel ism é t lecsap A millió pontos csalás A Guitar Wars moderált változata jelentős előrelépést jelent a biztonság te­ rén. Úgy tű­ nik. hogy valóban bom babiztos legyen. do you have whai it takes to crack the high score list? If so. Ethelt végleg meg kell állítanod. fejezet .

hogy az Add Score parancsfájl az ap p ro v e ősz “ P minden új rekord e s S é b e n o-ra állítja.gif tbonesscore. _ Ez meg hogy le h e tsé g e s? Tudom . a rekord tisztán látható.gif pacosscore. hogy nem h a g y ta m jóvá e z t a rekordot. es az ap p rov ed oszlopában az érték áll Tudjuk.el ham is rekordja a moderátoron? az approved oszlopában mégis az 1 érték áll. Valami nagyon nem stimmel.gif jacobsscore. Ezt a pontszámot a mode­ rátor soha nem hagyta jóvá.Az alkalmazás biztonságossá tétele A moderálás mindent megold? Bár a m oderátornak szem ernyi kétsége sincs afelöl.gif oezsscore. A Guitar Wars moderátorá­ nak fogalma sincs.gif kennysscore.gif biffsscore. így a rekord megjelenik. Agytorna Mit gondolsz. hogy mi történhetett. m ost it t vagy > 331 .gif 1 1 1 1 1 1 1 1 1 1 1 4.gif nevilsscore.gif jeanpaulsscore. E gym illió p o n t? l id date name score screenshot approved 21 22 23 24 25 26 27 28 29 31 32 1 33 2008-05-01 20:36:07 2008-05-01 20:36:45 2008-05-01 20:37:02 2008-05-01 20:37:23 2008-05-01 20:37:40 2008-05-01 20:38:00 2008-05-01 20:38:23 2008-05-01 21:14:56 2008-05-01 21:15:17 2008-05-02 20:32:54 i 2008-05-02 20:36:38 2008-05-05 14:58:59 Belita Chevy Jacob Scorcherson Nevil Johansson Paco Jastorius Phiz Lairston Kenny Lavitz Jean Paul Jones Leddy Gee T-Bone Taylor Biff Jeck Pez Law Ethel Heckel 282470 389740 98430 127650 186580 64930 243260 308710 354190 314340 322710 1000000 belitasscore.I e k é r d e z é s t a parancsfájlban.gif leddysscore. hogyan ¡utón ál Élt.gif phizsscore.gif ethelsscore2. hiszen éppen az tment modosrtott ű k az I N S E R T . h o g y ^ Ethel rekordját.

és nyújtsd be a pontszámot.gif». Sze­ rinted mi történik? Ne felejts el szóközt tenni a . l) — ioói Ez bármilyen GIF vagy JPEG képfájl lehet.gif 332 6.N ^ Ethel Heckel 1000000'. hogy pontosan milyen űrlapadatokat adott m eg Ethel az Add Score űrlapon a csalás kivitelezéséhez. fejezet . hanem teljes egészében az Add Score űrlapra korlátozódik. Alább láthatod. ami 32 KB-nál kisebb. [ \O \\ U OÖlÖl< IjOlOUI ethelsscore2. ' ethelsscore2.próbáld ki Ethel trükkjét! €> Agyragyúró Ethel millió pontos csalásának semmi köze az Approve Score parancsfájlhoz. írd be ugyanezeket az adatokat a saját űrlapodon.u tá n .

*$screenshot1. Elég bizarr. mi történik ennek a furfangos támadásnak a során. majd végül furcsa m ódon két kötőjel következik.9 h icore Guitar Wars . Ezeket a furcsa adatokat először a $ s c o r e változó tárolja. ------ Ethef nem csak a pontszámát írta be. 1$name1. írd le azt is.de ehelyett több. hogy a lekérdezésben a változók helyére a tényleges űrlapadatok kerüljenek. 0) A Score űrlapm ező egyetlen szám értéket vár . N O W (). !$score'. vagy7 valami baljóslatúbb dolog történik itt? Hegyezd ki a ceruzád! Az előző oldalon szereplő űrlapadatokat pontosan lemásolva írd meg a teljes Add Score SQL-lekérdezést a millió pontos csaláshoz. £ ? _ CiMd. ahogy végighaladnak az Add Score parancsfájlon. nyom on kell követned az űrlapadatokat. am elyeket vesszők választanak el egy­ mástól. INSERT INTŐ guitarwars VALUES (0. hogy szerinted mi történik.például 1 0 0 0 0 0 0 . G on­ doskodj róla. $ POST[* name' ] $ POST[ ’ s c r e e n s h o t ' ] A Score íírlapmezó' szo­ katlan tartalma a $seore változóba kerül. hogy megérstd. aposztrófok közé zárt értéket kap. Ez vajon csak egy értelm etlen pontszám ot eredm é­ nyez. majd beépülnek az INSERT-lekérdezésbe. «¿Ti - Add your H. m ost it t vagy ► 333 .Add Your High Score Nacic: Ethel Hecfceí 1 — Score: |l000pp0*. hanem egy csomó más furcsa dolgot isi $ POST[ ‘ s c o r e '3 $score = $ POST['score'].Az alkalmazás biztonságossá tétele Pontosan hogyan csinálta? Ahhoz. ami köz­ vetlenül utat talál az INSERT-lekérdezésbe. — S e r e « sh o t í o M K a a t « » ! . ^tí»íijí<o^2 s.

hogy a lekérdezésben a %'áltozók helyére a tényleges űrlapadatok kerüljenek. Alihoz. A kettős kötőjel ( .^. A képemyőfelvétel fájlneve kétszer szerepel a két k ö tő je l jelentése pedig re jté ly . 1) — így már világosabb? A m egjegyzés lényegében törli a fennm aradó SQLkódot. vess egy pillantást Ethel teljes lekérdezésére: A — megjegyzéssé teszi az SQL-kódsor fennmara­ dó részét. írd le azt is.) azt jelzi. M űködik ez a lekérdezés? ha a rekordot jóváhagyták volna! A MySQL átverése megjegyzésekkel Ethel millió pontos csalásában az igazi bűnösök . de a szóköz után minden figyelmen kívül lesz hagyva. (0.. ami felülírja az eredetit. és Ethel lekérdezésváltozata gond nélkül át­ csússzon a szűrőn. Ethel valahogy elkészítette a saját változatát a lekérdezésből. ’ 1000000’ . a kettős kötő­ jelet egy szóköznek kell követnie. g i f ' .különös m ódon . 0? Mivel az adatbázis szerkezetében . hogy szerinted mi történik. INSERT INTO..az sqí-befecskendezés működése v Hegyezd ki a ceruzád! Meooldás ” Az előz° oldalon szereplő űrlapadatokat pontosan lemásolva írd me > a teljes Add Score SQL-lekérdezést a millió pontos csaláshoz. G on­ doskodj róla. j ) / . hogy a dolog m űködjön. ’ e t h e l s s c o r e 2 . Most. INSERT INTŐ guitarwars VALUES (0. hogy ne lépjen fel hiba.\ 'ethelsstoreZ. az I érték kerül b e le . hogy jóváhagyja a pontszámú. Ethel átverte a lekérde­ zést. A végeredm ény egy azonnal jóváhagyott új rekord lesz. mint­ Ez a lekérdezés elég furcsán néz ki. hogy a bölcsek köve a zsebedben van. NOWO. *i0 0 0 0 0 0 '. 'E th e l H eckel'. amit az adatbá­ zis figyelmen kívül hagy.az approved oszlop az utolsó.. 334 6.. hogy az adott SQL-kódsor fennm aradó része m egjegyzés. amelyet a m oderátornak esélye sincs elfogni.az SQLm egjegyzések. ‘EíKel ttetkel'. ami olyan. HCMO. fejezet .

a jóváhagyási állapotot és a végén egy m egjegyzést is bejuttasson. hogy a pontszámon kívül a képernyőfelvétel fájlnevét. Az 1 érték hozzáfűzése a lekérdezés végéhez azért működik. és ez nagyon fontos. ! Nem.Add Your i f m if INSERT INTO guitartars VALUES (0.helyett. például egy nevet vagy egy pontszámot szolgáltatnának. de ez is m egjegy­ zéssé alakít minden SQL-kódot a sor végéig. A Guitar Wars alkalmazás esetében Ethel SQ L-befecskendezése a Score m ezőt használta arra.AddYoiuH. és egy rendkívül ügyes trükkre épül. ^ Q P CoKar Wars . 0) Nincsenek hülye kérdések K V Vannak másmilyen megjegyzések is az SQL-ben a . hogy az űrlapmezők csupán inform áció­ kat. '$name 1. most itt vagy > 335 . Az egysoros m egjegyzések másik fajtáját a # jel vezeti b e a . mert az ap p roved az utolsó oszlop. amit Ethel végrehajtott.Az alkalmazás biztonságossá tétele Az Add Score űrlap SQL-befecskendezés áldozata lett Azt a fajta támadást.gh Score Guitar Wars . mert lehetővé teszik a felhasználóknak. Az urlapmezölí bizton­ sági rést jelentenek a webalkalmazásokban. hogy az eredeti SQL-kód hibaüzenetet adjon. am elyek annyiban hasonlítanak a PHP többsoros m egjegyzéseire. SQL-befecskendezésnek nevezik. ami a # után szerepel.. hogy a /* és */ jelek közé kell zárni őket. hogy adatokat vigyenek be. Ahelyett. ha az approved oszlop nem a tábla végén szere­ pelne? Igen. N O W ().mellett? K V ! Ethel SQL-befecskendezéses támadása akkor is működ­ ne. Az említett INSERTlekérdezés az oszlopok alapértelm ezett rendezé­ sére támaszkodik a táblában. magát a háttérben te­ vékenykedő SQL-lekérdezést módosítják. '$screenshot1. Az SQL ezenkívül a többsoros m egjegyzéseket is támogatja. ami az űrlapadatok felhasználásával módosítja egy lekérdezés alapvető működését. ami rögtön a s c r e e n s h o t oszlop után szerepel. '$score1. ami megakadályozza.

valahogy magát a lekérdezést kellene kevésbé sérülékennyé ten n i.a vesszők. mielőtt felhasználnád őket egy SQL-lekérdezésben. amely levédi a potenciálisan v e­ szélyes karaktereket. hogy ártalmatlanná tedd a töb ­ bi problém ás karaktert is. A mysqli_reál_escape_string () függvény a veszélyes karaktereket védett formára alakítja. hogy ne lehessenek káros hatással egy lekérdezés vég­ rehajtására.. amelyek nincsenek káros hatással az SQLlekérdezésekre^ A kezdő és záró szóközök azonban csak egy részét jelentik a problém ának. $s c r e e n s h o t = tr im ( $ F IL E S [ 1s c r e e n s h o t ' ] [ ' name1] ) . ami m egvál­ toztathatja egy SQL-lekérdezés term észetét . $name = trim($ POST [ ' name' ] ) .m egjegyzésjelek.. csak végig kell futtatnod minden űrlapadatot a t r i m ( ) függgvényen keresztül. arra is találnod kell egy módszert. az idézőjelek. a m egjegyzésjelek. az idézőjelek. Azon kívül tehát. fejezet . és így to­ vább. $ s c r e e n s h o t = mysqli_real_escape_string($dbc. t r im ($ _ P 0 S T [ 'name' ] ) ) . A PHP eb b en egy másik beépített függvénnyel se­ gít: ez a m ysql i _ r e a l _ e s c a p e _ s t r i n g ( ) . Az SQL-befecskendezés az urlapadatok megfelelő" fe l­ dolgozásával meg­ akadályozható. tn m ($ _ P 0 S T [ ' s c o r e ' ] ) ) . illetve a . de ez a két függvény sem elég . ezért egy olyan adatbázis-kapcsolati változót kell átadni neki. $ s c o r e = trim {$_PO ST[ ' s c o r e ' ] ) . am elyek nem ellenőrzik a veszélyes karakterek jelenlétét. A kezdő és záró szóközöket a PHP beépített t r i m ( ) függvényével egyszerű­ en eltávolíthatod. mint amilyet a lekérdezések benyújtásakor használunk. 336 6. Még az adatok végén található szóközök is árthatnak. Minden olyan karakter „veszélyes karakternek” számít.az sql-befecskendezés megakadályozása Az adatok védelme az SQL-befecskendezéssel szemben A valódi gyenge pontot. $ s c o r e = mysqli_real_escape_string ($dbc. A trim () függvény eltávolítja a kezdő és záró szóközöket ezekből az urlapadatokból. am elyet az SQ L-befecskendezések kihasználnak. hiszen ott vannak még a vesszők. hogy az űrlapm ezőkből el kell távolítanod a fölös szóközöket. de a lekérdezést nem fogják befolyásolni. t r i m ( $ _ F I L E S [ ' s c r e e n s h o t ' ] [ ' name' ] ) ) . Ezek a karakterek továbbra is szerepelhetnek az űrlapm ezők ada­ tai között. A t r lm () és a m ysql i _ r e a l _ e s c a p e _ s t r i n g () függvény együttes haszná­ latával szilárd védelmi vonalat építhetsz ki az SQ L-befecskendezések ellen: $name = mysqli_real_escape_string($dbc. A mysqli_real_escape_string() az adatbázis függvénye. A Guitar Wars három űrlapm ezőjének feldolgozása a t r i m ( ) és a m ysql i _ r e a l _ e s c a p e _ s t r i n g () függvénnyel jelentősen csökkenti egy újabb SQ L-befecskendezéses támadás esélyét. azok az űrlapm ezők jelentik.

' $name' . ' $name. Az ötödik adat pél­ dául a s c r e e n s h o t oszlopba kerül. hiszen az oszlop már nem lesz a lekérde­ zés része. mivel úgyis automatiku­ san növekvő értéket kap. ha csak azoknak az adatoknak a b e ­ szúrására összpontosítunk. mert ez az ötödik oszlop a táblában. m egegyező sorrendben. hogy aggódnod kellene a m ögöttes tábla szerkezete miatt. ami szükségtelenül növeli a kockázatot. hogy az összes oszlopba b e kell szúrnia adatot. hogy az ap p rov ed oszlop a s c r e e n s h o t oszlop után következik az adatbázisban. ■^ h i úgy. Az id és az ap p rov ed oszlopoknak m egengedhetjük. \ ly o n INSERT Il'jjfc g u ita rw a rs >y VALUES (0. ■ 1L Az lenne az ideális. Ha nem állítanánk be az id és az approved oszlopok értékét. 0) Amikor így szúrsz be adatokat egy táblába. az adatok sorrendjének meg kell egyez­ nie az oszlopoknak a tábla szerkezetében elfoglalt sorrendjével.AUTO_INCREMENT és 0 . hogy más pél­ dákban már többször is használtad: INSERT INTO g u ita rw a rs (d a te . am ely az adatok listája előtt az oszlopok listáját várja. * * approved osWo?fe3 Semm/» « szúrható be «6zes részét m . s c re e n s h o t) VALUES (NOW(). most itt vagy ► 337 .Az alkalmazás biztonságossá tétele Egy biztonságosabb INSERT (paraméterekkel) Az űrlapm ezők gyenge védelm ének kiaknázása mellett Ethel SQ L-befecskendezéses támadása azt a tényt is kihasználta. ' $ s c r e e n s h o t ') Az id oszlop kihagyható.kapjanak. NOW(). e ri "em a lekér. Az id . hogy l i i * m e | y O S Z lO p O K D a m í I k e r ü ln e k ÖNÖKÖK K ö iU m t/K . ami lehetővé teszi. Az INSERT-lekérdezések megírhatók ^ i . annak az az oka. így kiküszöbölhető az a kockázat. hogy az egyes adatokat mely oszlop ok­ nak kell tárolniuk. Valójában helyesebb kódolási stílusnak minősül ilyen INSERT-Iekérdezéseket hasz­ nálni. és bejuttatnia azt az ap p roved oszlopba. hiszen az id értéke automatikusan növekszik. s c o r e . hogy anélkül szúrj b e adatokat. am elyek egy új rekordhoz elengedhetetlenül szüksége­ sek. mivel / ezek egyszerűen m e g h a tjá k az alapértei mezett értéket. így sikerült egyszerűen hozzáadnia az 1 értéket az INSERT utasítás végéhez. A problém a az. name. Ha ez a fajta lekérdezés ism erősnek tűnik. Tehát egy átdolgozott INSERT-Iekérdezésre van szükség. hogy alapértelm ezett ér­ téket . ahol tá­ rolni szeretnénk őket. nem pedig a tábla szerkezetére támaszkodni. f ’ $ s c o r e f / ’ $ s c r e e n s h o t ’ . hogy pontosan meghatározzák. illet­ ve az ap p rov ed oszlop értékét azonban nem feltétlenül szükséges kifejezetten b e ­ szúrni. az ap p rov ed oszlopba pedig mindig 0-nak kell kerülnie. és az adatokat pontosan oda beszúrni. amit az ap p rov ed oszlop beállítása jelent. Jo b b m egközelítés. f $s c o r e ' . Az INSERT-lekérdezésnek ez a változata pontosan meghatározza. hogy az INSERT-Iekérdezés úgy van m egszerkesztve.

javított INSERT-Iekérdezés anélkül szúrhat be rekordokat.a DEFAULT parancs Na. amikor csak lehet. Ha egy oszlophoz alapértelmezett érték tartozik. á llju n k meg egy percre I M o s t hallok e lő s z ö r a la p é rte lm e z e tt értékekr<5) egy M y S Q L -tá b lá b a n . hanem nagyon jó ötlet alapértelmezett oszlop­ értékeket meghatározni. és az approved oszlop elrejtése némileg nö­ veli a biztonságot a támadásokkal szemben. Ez jó terve­ zési megoldás. Csak annyit kell tenned. ami alapértelmezett értéket kaphat. Most. hogy automatikusan megkapja az alapértelmezett értéket. hogy alapértelmezett értéket kapjon. nem kell beállíta­ nod az INSERT-Iekérdezésekben . hogy megegyezzen az osz­ lop létrehozásakor megadottal. csak arra kell ügyelned. p . Tényleg le h e tsé g e s ilye n e ke t m egadni? O Nem csak hogy lehetséges. ebben az ALTÉR TABLE utasításban az ADD A DEFAUtTlparancs hatására« a . hogy7 az approved oszlopot módosítottad. Ez a g u ita r w a r s táb­ la approved oszlopában ideális megoldás. ALTÉR TABLE guitarwars MODIFY COLUMN approved TINYINT DEFAULT 0 Az oszlop típusát továbbra is meg kell határoznod. hogy az approved oszlop számára beállítsa a 0 (jóvá nem hagyott) alapértelmezett értéket: Mivel az approved oszlop már létezik. az Add Score parancsfájlban levő új. Egy oszlop számára az SQL DEFAULT parancsával határozhatsz meg alapértelme­ zett értéket.« l « W » u t ó m a t* « » a 0 írták kerül. fejezet . 338 6. hogy említést tenne az approved oszlopról. mivel egy olyan oszlopba nem kell kifejezetten értéket beszúrni. hogy még egyszer módosítod a táblát. U a a k W I W ® « lekérdezés k ife j« » » *« másik értekre nem allit|a.nyugodtan hátradőlhetsz abban a tudatban. C r COLUMN helyett a MODIFY COLUMN parancsot kell használnod.

hogy a pontszám m ezőjébe csak szám ot lehessen beírni! Gyakorlat most itt vagy ► 339 . hogy a mezőt kitöltötték-e. hogy az urlapm ező1< mindegyikét kitöltötték-e. ragaszkodj hozzá. A PHP is _ n u m e r ic () függvénye pontosan erre szolgál: ha az átadott érték szám. ésszerű nem csak azt vizsgálni. Ezzel a kóddal önm agában nincs semmi gond. írd át az Add Score űrlapot ellenőrző i f utasítást az is _ n u m e r ic () függvény felhasználásával úgy. meg kell vizsgálnod az Add Score űrlap három m ezőjét.Az alkalmazás biztonságossá tétele Az ú'rlapellenó'rzés soha nem lehet elég intelligens Még egy utolsó lépés szükséges ahhoz. hanem azt is. teszi az alkalmazásokat a lehető legjobban védetté a támadásokkal szem ben. hogy a fels használó számot írt-e ^ igaz! % is_numenc L „tnii|| ( U• Se. hogy nem üresek-e: if { ! empty($name) & ! em pty($score) & & ! empty($ s c r e e n s h o t )) & { Ez az if utasítás ellenőrzi. hogy csökkentsd az SQ L-befecskendezés kockázatát: az űrlap ellenőrzésének továbbfejlesztése az Add Score parancsfájlban. Mielőtt ellenőriznéd. am elyben számot várunk. is_numeric ($score) Amikor csak lehetséges. Mivel a Score m ező egy számot vár. mint hogy egy olyan m ezőben szám szerepel-e. attól gz is _ n u m e ric ( * one m i l l i ó n ! 1) m függően. hogy az urlapadatok a kívánt formátumúak legyenek. ha nem. hogy a képernyőfelvétel fájltípusa és m érete m egfelel-e az alkalmazás követelm ényeinek. hogy számot írtak-e bele. is_numeric (465730) | a vagy hamis. de egy alkalmazás biztonságossá tételéhez gyakran többre van szükség a kötelező köröknél. akkor pedig f a l s e . Az olyan apróságok következetes ellenőrzése.t ad vissza. akkor tr u e -t.

... és így ne kelljen megadni az id és az ap p rov ed oszlop értékét...... fejezet ... hogy a t r i m ( ) és a mysq'l i _ r e a l _ e s c a p e _ s t r i n g () függvények kitisztítsák az űrlapadatokat. majd módosítsd az INSERT-Iekérdezést........................teszteld az ú j addscore....... hogy a pontszám m ezőjébe csak számot lehessen beírni! Gyakorlat .......... Töltsd fel az új Add Score parancsfájlt a w ebkiszolgálóra.................... ami messze túlmutat az adatbázisok bizton­ ságán. semmi mást.. D CuUar Wars -A dö V oy Hign Scort?_ Ez a hibaüzenet persze lehetne konkrétabb.ç Scrccn shot: Cnoose me / no filc s^eettű 'Á d'í d Az urlapellenorzés olyan téma........... fejezet­ ben bővebben is foglalkozni fogunk............... és nem bonyolítja to­ vább a parancsfájlt- Guitar Wars ...... Változtass az űrlapm ezőket ellen­ őrző i f utasításon is....... hogy a pontszám szám érték-e...........php p ara ncsfá jlt! írd át az Add Score űrlapot ellenőrző i f utasítást az is _ n u m e r ic () függvény felhasználásával úgy.......... Please enter all of the information to add your hi*h score.p h p parancsfájlban úgy... végül valamelyik MySQL-eszköz segítségével futtasd le az ALTER-lekérdezést. Name: Ethci Hcckei Score: 10 0 0 0 0 0 ’......Add Your High Score A Score urlapmezo most már csak szá­ mokat fogad el.. nyisd meg egy böngészőben...... és pró­ báld ki újra a korábbi SQ L-befecskendezéses támadást.. Az ellenőrzéssel a 10. de a célnak meg­ felel...megoldás ií (Itrr\^bf(I «• • mc) && i m e r i t íj &cre) { ................... Tesztút Erősítsd meg az űrlapadatok kezelését az Add Score parancsfájlban! Módosítsd az űrlapadatok változókhoz rendelését az a d d s c o r e ..... hogy az oszlopneveket és az értékeket is meghatározza....... hogy azt is megvizsgálja.... amely az ap p rov ed oszlopnak a 0 alapértelm ezett értéket adja.... .... 340 6...*fr*5ssa*e2........

Guitar Warrior. amit nehéz lesz felülmúlni. hála azoknak a javításoknak.fel is tö ltö tt egy új rekordot. m égpedig egy elke p e s z ttf új re k o rd d á II > 20:36:45 1 Name: J ACvBOUNSU Score * • MbS?3G Name: J ACOBOWMSU AC0B0UMSU Jacob fellélegezhet. just add ym!LQwjlK£ 2 . m ost it t vagy ► 341 . do you have what it cakes to crack the high score list? If so. ha m e g ta ­ nulok já ts z a n i a v irtu á lis g itá r o n . hogy inkább csatlako­ zik a gitárhősökhöz. mert a rekordok most ma'r védettek a külső beavatkozással szem­ ben . e z t b e b u kta m l T alán egyszerűbb.0 7 I Í G u í t a r ^ Vágrel Ú jra veze tem a lis t á t .High Scores W elcom e.belátva.| j £ Top Score: 465730 465730 N am e: Jacob Scorchcrson D a te: 2008-03^ )5 2 3 :2 8 ..Az alkalmazás biztonságossá tétele Úgy tűnik. hogy már fel is töltött egy új rekordot. hogy a csatát elvesztette .. A k u ty a fá já t. végül sikerült megtörni. Ethel eltökéltségét. am elyek védetté te­ szik az alkalmazást az SQ L-befecskendezéssel szem ben.úgy dönt. hogy belepiszkáljon a Guitar Wars rekordjai­ ba. Az igazi bajnok gi­ tárhős ezt azzal hálálta meg. Ethel . mm Guita* Wars -H igh Scores Guitar Wars .

8 ^ le a különleges kara 342 6.h o w ^ o z á sá b a n fc . az oszlop az alapértelm ezett értéket is_numeric() Ezzel a beépített azt ellenőrizheted.aükkel m egakada811) W B i( k más karak az S Q U e k e r d e z dolgába. a tartalomtipus m eghatározása vagy a HTTP-hitelesítés. jónéhány új eszközt és eljárást ismertél meg. mint az átirányítás egy másik oldalra. Is­ mételjük át a legfontosabbakat: exi t () Ezzel a beépített PHP-függvénnyel azonnal leállíthatod egy PHPparancsfájl futását. Akkor veheted hasznát. $_SERVER Ez a beépített PHP-satperglobáte többek között azt a felhasználó- nevet és jelszót tárolja. hogy egy szám ot váró űrlapm ező szám értéket tartalmaz-e. és az oszlop érté­ két nem adják meg. lop alapértelm ezett értékét adha­ tod meg egy táblában. hogy egy érték szám -e. sem m ilyen to­ vábbi PH P-kódot nem hajt végre. ami olyan feladatok elvégzését teszi lehetővé. Amikor egy pa­ rancsfájl az e x i t ( } függvényhí­ vással találkozik. amit a felíaszna10 akkor ír be.PHP & MySQL szerszámosláda PHP & MySQL szerszámosláda Miközben a Guitar Wars dicsőséglistáját megjele­ nítő webalkalmazást magasabb szintre emelted. ^ ^ Az első függvény * mi a második szóközöket vágja le. header() Ezzel a beépített PHPfüggvénnyel fejléceket küldhetsz a kiszolgálótól a böngészőnek. Ezeket összevethe­ ted a várt értékekkel. amikor egy HTTP-hitelesítést igénylő oldalt' pro :>ai elérni. W S r e a l_ e8cap e" S tr in 9 „ p H P .B S S vén* Ez a k ét b ^ P f “ az űri»PadaU> \ y o z to to d . fejezet . és sem m ilyen további HTMLkódot nem ad át a böngészőnek. hogy meg­ vedd azokat az oldalakat. ame­ DEFAULT érték lyeknek biztonságosaknak kell Ezzel az SQL-utasítással egy osz­ lenniük. Ha a táblá­ ba új sor kerül. ha arra vagy' kíváncsi.

de egy w ebalkalm azás biztonsága gyor­ san növelhető vele. l - SQL-befecskendezés A biztonsági rendszer kijátszása. amelynek során a támadó valami­ lyen módon módosít egy SQL-lekérdezést. embert f 'gondolkodó r HTTP-hitelesítés Egyszerű w ebes biztonsági eljárás. am ely a felhasználónév és a jelszó elkérésével korlátozza egy w eboldal vagy parancsfájl elérését. Az ilyen tá­ madás ellen gyakran az űrlap ellen­ őrzése e m o e n nehez fe lü lm ú ln i. ahelyett. A legtöbb SQL-befecskendezéses tá­ madásnak része egy w ebes űrlap át­ verése. hogy jogosulatlan hozzáfé­ rést szerezzen egy adatbázishoz. hogy az adatok sorrendje m egegyezik az oszlo­ poknak a táblában elfoglalt sorrendjével.ikra n egy e m b e r je le n ­ ti a le g jo b b Védelm et m pr. A HTTP-hitelesítést nem a magas biztonsági követelm ényeket tá­ masztó. most itt vagy > 343 . hogy veszélyes adatokat ad­ jon át közvetlenül egy dinamikusan felépített lekérdezésnek. érzékeny adatokat kezelő alkalm azásokhoz szánták.Az alkalmazás biztonságossá tétele Emberi felügyelet (moderálás) M in d e n n e k a * em be ri fe lü g ye le t t k " k s a l é t ü n k b e n « a^ ti a Jeof ? r . am ely gondosan egyezteti ^ az o s z l o p o k a t a hozzájuk tartózó értékekkel. hogy arra tám aszkodna. Oszlop/értéklekérdezés Az IN SER T utasítás űegyik fajtá­ ja.

.

ezóval a kamrából te le fo n á l. Szörnyű lenne. ez egy uj fejezet 345 . ha minden alkalom ­ mal be kellene mutatkoznunk a családunknak. tehát a felhasználók sze­ mélyre szabottan használhatják az alkalmazást. én nem lá to k i t t önről a d a to t.egy ügyes w ebfejlesztőnek kell a rendelkezésére álló eszközökkel (talán a PHP és a MySQL segítségé­ vel?) olyan szem élyre szabható w ebalkalm azást készítenie. Jackeon. hogy k ö t ö t t fe lo lv a s z tá s i g a ra n c ia s z e rz ő d é s t a h ib e rn á ló k a m rá já ra ? V agy úgy. am ely képes m egjegyezni a felhasználóit. am ikor hazaérkezve b e ­ lépünk az ajtón. Erre azért nincs szükség. B iz to s b enne. Noé. Jo h n so n . mért az em bereket egy csod á­ latos dolog segíti: a m e m ó riá ju k . A w ebalkalm azások azonban nem em lé­ keznek automatikusan az em berre .7 Személyre szabott webalkalmazások építése Emlékszel rám?# M it m ondott. ha elfelejtik . hogy is hívják? Ja. M r. m l a neve? X - Senki sem szereti.a webalkalmazások felhasználói különösen nem. Ha egy alkalmazás ismeri a „tagság” fogalmát. pereze. M it m o n d o tt. akkor az alkalm azásnak em lékeznie kell a felhasználókra.

Johan N ettles M ale 1981-11-03 A lig várom . vagy a születési dátumuk és helyük. és bárki izgalomba hozza. az ellentétek vonzzák egymást Ö rök történet: a fiú találkozik a lánnyal. Erre épül új társkereső oldalunk. és m egoszthatják azokat a többi M ismatch-felhasználóval. és egy sikeres félrepárosításban reménykedik. a súly­ emelést és a húskonzervet szereti. mint a nem ük. 1984-07-19 Tem pe. A Z A Mismatch alkalm azás felhasználóinak szem élyre szabottan kell tudniuk használni a w ebhelyet.net. ez le­ szel te. Azt mondják. és rettentő nagy szük­ sége lenne egy w ebfejlesztőre.az ellentétek vonzzák egym ást” elm é­ letet: olyanokat párosít össze. am elybe olyan inform ációkat írhat­ nak magukról. hogy* sze­ m élyes profilra van szükségük. fejezet . akikben tényleg nincs semmi közös. 346 7.e szabott v w b « k * n a z to * S ' Ä e lé r n i— é s t. A Mismatch w ebhely kom olyan veszi .>► Johan a pankrációt. a fiú szerint a lány zakkant.. hogy m e g ta lá lja m a tö k é ­ le te s e lle n té te m e t! A thens. Na. S idney K elsow F em ale . Magányos szívek milliói várják türelmetlenül az alkalmazás elkészül­ tét . a jóga és a sushi megszál­ lottja. de pont ezért vonzódnak egym áshoz. a Mismatch. és boldogan élnek. a lány szerint a fiú őrült. Ez először is azt jelenti. aki befejezi a rendszer felépítését.ne okozz nekik csalódást! E z t a b ic e p s z e t figyeld! O Sidney a valóságshow-k. GA a személv.nehéz olyat találni a ki tényleg nem illik hozzánk . aki válaszol neki. hogy a Mismatch még nem indult el. A gond csak az. amíg meg nem halnak.

A Z 1 I I V Would you like to edit your onifiic A felhasználói profil m egtekintésén kívül a M ismatch-felhasználók az Edit Profile oldalon keresztül szerkeszthetik is a sze­ m élyes profiljukat.személyes adatait tartalmazza. 2008-04-17 09:43:11 2008-05-23 12:24:06 Nettles Athens | V " W . V . A gond csak az.— -------. hogy az alkalm azásnak tud nia kell. A M ism atch-felhasználók nyom on £z a (^¡smatch adatbázis követését és szem élyes adataik tárolását a m ism a tc h _ u s e r nevű adatbá. ! J / .View Profile Personal Information-------- Az Edit Profile (Profil szerkesztése) és View Profi le (Profil megtekintése) oldalaknak tud^ e l l .Ed* Profik Mismatch • Edit Profile Mismatch . | r g BM W - - .Szem élyre s z a b o tt w ebalkalm azások építése A Mismatch a személyes adatokra támaszkodik A Mismatch alkalm azás tehát a szem élyes adatokon keresztül teremt kap­ csolatokat. hogy melyik felhasználó profilja áll szerkesztés alatt. és szerkesztheti a saját szem élyes adatait. First name: Sidney First name: Sidney Last name: Kelsow Gender: Female Birthdate: 1984-07-19 Location: Tcmpe.AZ Last name: Keisow Gender: Birthdate: Ti 1984-07-is T pe em State: a z Picture: f c h w fe tíá n ttficm S idney K elsow F em ale 1984-07-19 T e m p e . Az Edit Profile oldalnak tehát valahogyan nyom on kell követ­ nie. am elyben a Felhasználók m indegyike elérheti a w ebhelyet. Agytorna — Hogyan szabhatja testre a Mismatch alkal­ m azás az Edit Profilé oldalt a különböző felhasználók számára? most Itt vagy ► 347 . __ ' join_dqW birthdof Kel sow 1984^)7-19 Temp© A Mismatch adatbázison belül a mismatch_jjser tábla tárolja a felhasználókat és a személyes profiljuk adatait. A kapcsolatoknak egy felhasználói közösségen belül kell létrejönniük. Mismatch . m I -l J * A m ism atchjiter tábla minden sora egy-egy felhasználó \ \ ----------. hogy kinek a profilját kell elérniük. hogy melyik felhasználó nyitotta meg az oldalt. zistábla fogja segíteni.

hogy az alkalmazás fe lis­ merje a felhasználót. A bejelentkezett felhasználó pél­ dául csak a saját profiljának adatait szerkeszthetné. Mismatch . A bejeletkezéshez a felhasználónak a felhasználónevet és a jelszót is meg kell adnia. Amikor a felhasználó bejelentkezik. még az adatbázison belül sem. az alkal­ mazás felismeri.bejelentkezes a mismatch alkalmazásba A Mismatch alkalmazásban bejelentkezésre van szükség A Mismatch alkalm azásban a szem élyes adatok elérésének problém ájára az jelenthet megoldást.Edit Profile Persona] Information . Mismatch . és m egvédje a szem élyes adatokat. Az Edit Profile oldal t r jelzi. ezért soha nem sza­ bad láthatóvá tenni egy alkalmazásban. például szerkeszthesse a profilját. Ezen kívül a felhasználók a felhasználónevükön keresztül léphetnek kapcsolatba egymással. A Mismatch alkalm azás sze­ mélyre szabásának kulcsa tehát a felhasználói bejelentkezés. hogy egyedileg azonosítsa a felhasználót a rendszeren belül. bár a többi felhasználói profil m egtekintésére azért lehetősége lenne.— First name: Sidney Last name: Keisow Gender: FemaieTTl Birthdate^ 1954^07^19 348 7. és a fe l­ használó határozhatja meg. _ Ahhoz. ha a felhasználóknak be kell jelentkezniük. A jelszó rendkívül érzékeny adat. hogy a felhasznál be van jelentkezve. A felhasználói bejelentkezés általában kétféle adat. és személyre szabott hoz­ záférést nyújt neki. fejezet .Ed ^ You are logged in as sidneyk. hogy bizonyos fokig biztonságossá tegye a felhasználói bejelentkezést. Ez leh e­ tővé teszi a Mismatch alkalmazásnak. hogy7 bejelentkezzen a Mismatch alkalm azásba. a felhasználónév és a jel­ szó megadását igényli: A felhasználói bejelent­ kezés lehetővé teszi. és elérje a szem élyes adatait. hogy hozzáférést adjon a különböző felhasználók szem élyre szabott adataihoz. 1 I A felhasználónév és a jelszó lehetővé teszi a felhasználónak. ****** jnettles sidneyk \ A felhasználónév jellemzően be­ tűkből és számokból áll. csak egy felhasználónévre és egy jelszóra van szükség. hogy egy webalkalmaza's személyre szabottan ke­ zelje a felhasználókat. Jelszó A jelszó feladata. Felhasználónév A felhasználónév arra szolgál.

A bejelentkezési rendszer kidolgozásának lépései tehát az eddigiek szerint a következők: A u s e r n a m e és p a s s w o r d oszlopok hozzáadása a táblához az ALTER utasítás segítségével. hogy a felhasználó bejelentkezett a Lóg In űrlapon keresztül. mielőtt nekilát­ nál megírni a kódot és aclatbázis-lekérdezeseket futtatni. csak egy sikeres bejelentkezés után lehessen elérni. hogy a felhasználók m egadhassák a bejelentkezési adataikat. A Mismatch alkalm azás Edit Profilé és View Profile oldalait csak a b ejelen tk e­ zett felhasználóknak szabad elérniük.j tárolásához.usern am e (fel­ használónév) és p assw o rd (jelszó) . Meg kell tehát győződni róla. ezért az első lépés ennek a táblának a m ódosítá­ sa.van szükség az egyes felhasználók bejelen t­ kezési adatainak j--------. Tudjuk. m ielőtt hozzáférést kaphatna az említett oldalakhoz. ezért fontos. Az adatbázisban új oszlopokra . Arra is m ódot kell adni. 1 — i A bejelentkezési parancsfájl hozzákapcsolása a Mismatch alkalmazás többi részéhez. hogy pontosan kidolgozd a részleteket. hogy már van egy tábla. és ennek valahogy be kell épülnie a Mismatch alkalmazás többi részébe is. mint az Edit Profile. hogy a bejelentkezési adatok is helyet kapjanak benne.Személyre szabott webalkalm azások építése A felhasználói bejelentkezés megtervezése A felhasználói bejelentkezés lehetőségének hozzáadása a Mismatch alkalm azáshoz nem kis feladat. am ely a felhasználókat tárolja. most itt vagy ► 349 . hogy az olyan oldalakat.

p h p oldalt a böngésződben. vedd szemügyre a Mismatch alkalmazást. m én ezek teljesen a felhasználói bejelentkezésre tám aszkodnak. Ha mindezzel végeztél. amit még nem valósí­ tottál meg. Ne feledd. s q l fájlok kivételével. hogy létrejöjjenek a Mismatch alkalmazás kezdőtáblái. h e a d f i r s t l a b s . és vedd szemügyre az alkalmazást. am elyek a szükséges Mismatch-táblákat felépítő SQL-utasításokat tartal­ mazzák. Valamelyik M ySQL-eszközben futtasd le az összes . Töltsd fel az összes kódot a w ebkiszolgálódra az . a www. hogy a View Profile és az Edit Profile oldalak kezdetben nem fognak működni. nyisd meg az in d e x . A Mismatch alkalmazás főoldala M ism atch • W h ere opposites a ttra ct! v Edit 141test members: Ez a két hivatkozás vezet az alkalmazás személyre szabott részeihez.com/books/hfphp 350 7 fejezet . s q l fájl utasításait. headfirstlabs. de bejelentke­ zés nélkül mást nemigen. az alábbi címről: www. TSltsd lel A Mismatch alkalmazás teljes forráskódja le­ tölthető a Head First Labs w ebhelyéről. com /books/hfphp címről.a m ism atch alkalmazás működése M ielőtt továbblépnél. hogy ráérezz a működésére. Töltsd le a Mismatch alkalm azás valamennyi kódját a Head First Labs w ebhelyéről. az utoljára bejelentkezett felhasználók nevét és képét mutatja.

A u s é r á i d ­ YARCHAR MySQL-adattípust. Ugyanakkor a felhasználói profil néhány hoz hasonló oszlopok feladata.Személyre szabott weba/ka/mazások építése Az adatbázis felkészítése a bejelentkezésekre O ké. ha egy számmá fokozzák le! Hegyezd ki a ceruzád! írd meg a usernam e és passw ord oszlopokat a táblához adó SQL-utasítást úgy. és ezt hatékonyan teszik. hogy a két oszlop az ábrán látható helyre kerüljön. ugyanak- A username és password oszlopok egyszerű szöveges adatokat tartalmaznak. hogy más adatától eltérően a felhasználónév és a jelszó oszlopa soha nem m a­ egyedileg azonosítsák a felhasználók so ­ radhat üres ( null ). ezért az új X --------------. Konkrétabban. Senki sem szereti. hogy tárola bejelent kezesi adatokat. A használ­ hatóság szempontjából tehát jobb döntés megengedni Johannak. rait. rá Van fa iá an új osz- 3 felhasználó- mismatch user MiDida«» | «Hy | rta t. j_plrtO T »J névhez és a jelszóhoz.— — usernam e és p a ssw o rd oszlopokhoz használhatod a már ism erős \ f • 9 USername he|yett? V • Ha szeretnéd. és a felhasználók is jobban szeretik. használóneveit és jelszavait tároló oszlopok. de a bejelentkezéssel kapcsolatban m ég hiá^ mismatrh nyosságokat mutat. Kevesen szeretnének 16 ka­ rakternél hosszabb jelszót megjegyezni! mismatch user most itt vagy ► 351 . vissza az építkezéshez. megteheted. % kor a számértékű azonosítókat általában nehcz megjegyezni. a táblából hiányoznak a felhasználók fel< . hogy „jnettles” néven jelentkezzen be „11” helyett. de soha nem szabad megenged­ ni. A m ism a tc h _ u s e r tábla már jó munkát végez a fel­ használói profilok tárolása terén. és egyik oszlop se engedje meg a NULL értékeket! IX . Nincsenek hülye kérdések K i 1 A felhasználók egyedi azonosítására nem lehet egyszerűen egy u s e r _ i d oszlopot használni A felhasználónév és a jelszó egyaránt sima szöveges adat. hogy üresen maradjanak. ha maguk adhatnak meg egy felhasználónevet a személyre szabott webalkalmazások eléréséhez. a passw ord oszlopban pedig 16 karaktert lehessen tárolni. a usernam e oszlopban legfeljebb 32.

tehát m ódot kell találnunk a jelszavak titkosítására.. amely felhasználói bejelentkezést igényel. ezért itt már nyugodtan hivatkozhatsz rá. hogy a felhasználók bízhassanak a jelszavaik biztonságá­ ban.NOT NULL. AFTER username...Hegyezd ki.. hogy a felhasználók tényle­ gesen beírhassák a felhasználónevüket és a jelszavukat a b ejelen tk ezésh ez.rn is ^ K _ u s c r ADD .... A titkosítás m egvalósításához a Mismatch alkalm azásban át kell alakítani a jelszavakat valamilyen felism erhetetlen formára.usernamey & R C ^ G Ü N O T HULL AFTER userjd. mie­ lőtt az adatbázisba kerülnének. username oszlop hozzáadása történik elő«or. a p assw o rd oszlop­ ban pedig 16 karaktert lehessen tárolni.. Minden alkalm azásnak. a h o g y v a n . .. ^ 7 Az u oszloPol< M y * 'j a ta'bla'ban az AFTER utasifással szabályozhatod. a usernam e oszlopban legfeljebb 32...a jelszavak titkosítást igényelnek. és egyik oszlop se e n ­ gedje meg a NULL értékeket! fiiLTBR. . írd meg a usernam e és p assw ord oszlopokat a táblához adó SQL-utasítást úgy. .t) .TABLE.P. titkosítania kell a jelszava­ kat. amíg nincs rá mód. Egy je ls z ó t t u t ir a nem tá ro lu n k a z a d a tb á z is b a n úgy. mi smatch__user Az oszlopok helye a táblában nem feltétlenül számít.. de a rendszerezést segítheti....... h P. A Wértiamé és password oszlopok hozzá­ adása a táblához az A LTÉR utasítás segítségével. A felhasználók jelszavának felfedése még magán az adat­ bázison belül is elfogadhatatlan. hogy a két oszlop az ábrán látható helyre ke­ rüljön. nem kéne e lra k tá ro z á s e iő tt titk o s íta n i vala hogy a je ls z a v a k a t? Helyes észrevétel. hogy a titkosítás nem sokat segít. ha a leg­ fontosabb oszlopok következnek előbb... A gond csak az. meg ó id ás Hegyezd ki a ceruzád! Megoldás Új oszlopokai az ALTÉR TABLE pa­ ranccsal adhatsz egy létező táblához. I 352 7 fejezet .. mielőtt beszúrnánk azokat a m ism a tc h _ u s e r táblába..password V A R C M .

mert még nem rendeltünk hozzájuk felhaszná­ lónevet és jelszót. valamint egy gom bból.View Pr You are logged in as jnettles Mfe mr i ^ ni*A r- Nincsenek hülye kérdések Ha amiatt aggódsz. hogy a jelszót ne lehessen elolvasni. Az űrlap jelszóm ezőjében m egjelenített csillagok csak vizuális biztonságot nyúj­ tanak. hogy az adatbázist módosítottad. a felhasználó sikeresen be léptethető. hogy képes legyen tárolni a felhasz­ nálók bejelentkezési adatait. Ha a felhasználónév és a jelszó ér­ vényes. hogy egy alkalma­ zásba be lehessen jelent­ kezni. hogy a felhasználók hogyan adhatják meg ezeket az adatokat és jelentkezhetnek be ténylegesen az al­ kalmazásba. ki kell találnod. amellyel a bejelentkezés elindítható. ami­ kor beírjuk. Az űrlap benyújtásakor magának a jel­ szónak. Ahhoz.* T mmwm dierdre baldpaul jnettles ******** A Lóg In gombra kattintás után az alkalmazás összeveti a fe i-^ használónevet és a jelszót az adatbázisban levővel. ugye? használók nem fognak tudni bejelentkezni. A felhasználónevek és a jelszavak létrehozá­ sára ham arosan són kerítünk. V ! Term észetesen nem. A bejelentkezés felhasználói felületének szöveges beviteli me­ zőkből kell állnia. mielőtt beszúrnád az adatbázisba. most itt vagy ► 353 . hogy a fel­ K I Az adatbázis ténylegesen nem a csillagokat tárolja. Egyelőre a b e ­ jelentkezés alapjainak lefektetése a lényeg. [jn e íile s f ia « * « . hogy a dolog m űködjön. hogy' valaki a vállunk fölött kukucskálva kilesse a jelszót. és nem a csillagoknak az átadására kerül sor. egy felhasználói fe­ lületre van szükség. m ég ha egyéb feladatokat is el kell majd vé­ gezni ahhoz. tehát azt akadályozzák meg. ame­ lyen a felhasználónév és A jelszómezo' védett. Ezért fontos.Személyre szabott weba/ka/mazások építése A bejelentkezési felület kialakítása Most. hogy a jelszót titkosítsd. am elyekbe a felhasználók beírhatják a felhasználónevet és a jelszót. ne tedd. ( Mismatch .

password. és e z -------a titkosított kód kerül a mismatch_user tábla password oszlopába. j o i n d ate) VALUES ( ' j n e t t l e s ' . Mivel az SHA () a MySQL. ahogy az űrlap jelszómezőjében megadták. függetlenül az eredeti jelszó hosszá­ tól..^ Az eredeti jelszó helyett a 4 0 ka­ rakteres titkosított kódot tároljuk. Az alábbi kód pél­ dául egy új felhasználót szúr b e a m ism a tc h _ u se r táblába. INSERT INTO mismatch_user (username.. ami egyedileg azonosítja a jelszót. SHA('tatlover1) í A tényleges jelszó Az $HA() függvény a 8 karakteres jelszót egy 4 0 karakteres t it ­ kosított karakterlánecá y " alakítja. Az eredm ény egy titkosított karakterlánc lesz. hogy egyedi. de a jelszavak titkosításának szük­ ségességével még nem foglalkoztunk. e 5 1 1 d 7 9 3 f5 3 2 d b e 0 e 0 4 8 3 5 3 8 e ll9 7 7 f7 b 7 c 3 3 b 2 8 mismatch user user h T 9 10 1 1 username j password dierdre | 08447b. Ez a tényleges jelszó. amelyik beszúrja a jelszót a táblába. 354 7. ami pontosan negyven tizenhatos szám rendszerű (hexadecim ális) karakterből áll. am ely egy titkosítási algoritmust alkalmaz egy szöveges karakterláncra. baldpaul I 230dcb.View You are logged in a s jnettles. hogy’ a felhasználó által beírt jelszó m egegyezik-e az adatbázisban titkosít­ va tárolt jelszóval. A függvény tehát egy 40 karakteres kódot állít elő. menet közben az SHA () segítségével titkosítva a jelszót: AM ySQ LSHAO függvénye úgy fit kosit egy szövegrészletet.^ jnettles « n o ••• Mismatch . abban a formában.az sha() függvény A jelszavak titkosítása az $H A () segítségével A bejelentkezési felület m eglehetősen egyszerű. 4 0 karak­ teres kóddá ala­ kítja azt. és nem a PHP egyik függvénye. A bejelentkezési egyenlet másik felén ugyancsak az SHA () függvény működik: ez ellenőrzi. A MySQL-ben találsz egy SHA {) nevű függ­ vényt. annak a lekérdezésnek a részeként kell meghívnod. fejezet . SHA( 1t a t l o v e r ' ) . N0W()) Az $HA() függvény 4 0 karakteres hexa­ decimális kóddá alakítja a jelszót.

ami ebben az esetben a ' t a t l o v e r ' . D e hogyan lehet beléptetni egy felhasználót. Vég­ re kell hajtanod tehát egy ALTÉR utasítást. mert a titkosított jelszavak 40 karakter hosszúak. hogy7 valamikor vissza is kell fejtened azt.ch_user tábla passw ord oszlopában tárolt értékkel. Mivel a jelszó­ nak csak a titkosított változatait hasonlítjuk össze. a felhasználót ténylegesen beléptető lekérdezés az SHA () használata mellett a fel­ használó azonosítója szerint végzi el a kiválasztást. a term észetes ösztön azt súgja.m ég ha valaki be is törne az adatbázisba. és ellopná az összes jelszót. visszaút nélkül. amennyiben be­ jelentkezéskor helyesen adja meg. A „hash” (kivonat) egy programozási szakkifejezés. hogy a jelszó szerepelhessen a WHERE záradékban. hanem PHP-kódban kell el­ végezned. a felhasználó eredeti jelszavát nem kell ismerni.megfelelő érték található. az újonnan lét­ rehozott password oszlop azonban csak ló karaktert tud tárolni. az eredeti jelszót nem muszáj ismerni. D5 ezért az előbbi használata javasolt. A jelszavak titkosítására léteznek más módszerek is? A titkosított jelszó elhelyezése Az SHA () függvény némi problémát jelent a Mismatch adatbázis szá­ mára. rögzített hosszúságú karakterláncra utal. mint az M (). Az SHA () függvény neve a Secure Hash Algorithm (biztonságos kivo­ natoló algoritmus) rövidítése. most itt vagy ► 355 . Elegendő tehát titkosítani a felhasználó által beírt bejelentkezési jelszót.r e _ ^ ^ módosítjuk. ami egy olyan egyedi. ugyanis az SHA {) függvény mindig ugyanazt a 40 karakteres kódot állítja elő. K: V: Minek a rövidítése az SHA? Ez a SELECT-lekérdezés minden olyan sort kijelöl a mismatch_user táblában.összehasonlítása Miután egy adatot titkosítottál. ha ugyanazt a szöveges karakterláncot kapja. ami D5 hasonló titkosítást hajt végre. Az SHA () azonban valamivel bizton­ ságosabbnak számít. a PHP egyenértékű s h a l () és md5 () függvényeit hasz­ nálhatod. Ennek célja a titkosított adatok biztonságának m egőrzése . Az SHA () esetéb en a kivonat a 40 karakteres hexadecim ális titkosított karakterlánc. amely a jelszó alapján próbálja kiválasztani a megfelelő felhasználót: Személyre szabott weba/ka/mazások építése A z S H A ( ) fü g g v é n y e g y ir á n y ú t i t k o s í t á s t n y ú jt : a t i t ­ k o s ít o t t a d a to k n em f e jt b e to k v is s z a . Ez egy egyszerű SQL-lekérdezéssel valósítható meg. A MySQL az SHA () -hoz hason­ ló M () függvényt is biztosítja. Ha a titkosítást nem SQL-lekérdezésben. hogy a password oszlopot kibővítsd a titkosított jelszavak tárolásához: K: V: ALTER TABLE mismatch u ser CHANGE password password VARCHAR{40) NOT NULL A password oszlop méretét 4 0 . és összehasonlítani azt a mi sm at. Nincsenek hülye kérdések W HERE password = SHA ( 1t a t l o v e r ’ ) A jelszó titkosításához az SHA() függvényt hívod meg. ha a jel­ szava nem fejthető vissza? Nos. Amint azt hamarosan látni fogod. Az SHA () függvény azonban egyirányú titkosítást nyújt. r Ezt a jelszói írta be a fe lhasználó a bejelentkezéshez. akkor sem tudná vissza­ fejteni azokat. am ely egyedileg ábrá­ zolja az eredeti jelszót. amely egyedi m ódon ábrázol egy szöveges karakterláncot. Igen. hogy a titkosított je l­ szavak elférjenek benne. ahol a password oszlopban a beírt jelszónak .

ÜKRÜ ). hogy helyet csinálj a nagyobb jelszóadatoknak: ALTER TABLE mismatch_user CHANGE password password VARCHAR(40) NOT NULL Ne felejtsd el titkosítani Most szúrj b e egy új felhasználót. ezért az a lter paranccsal még egyszer m ódosítanod kell a táblát.tc !. mint amit a sor beszúfasakor J Végül a felhasználó kiválasztásával és az SHA () függvény használatával egy WHERE-záradékban utánozd a felhasználó bejelentkezését: SELECT username FROM mismatch user WHERE password = SHA ( heyj oe ’) ' File Edit W ndow Heto G ppositesA ttract rr-. hogy a jelszó valóban titkosítva került az adatbázisba. ] s e t .:'LECT ' rri^ tn a . Ï 0 .r e r . SHA( ' h e y j o e ’ ) . jC O S . és próbáld ki őket! Valamelyik MySQL-eszköz használatával hajtsd végre az ALTER utasítást. futtass egy I SELECT-lekérdezést az új felhasználóra: _ M A sikeres b e je le # *« í» J f m eghívásával. am ely a username és password oszlopokat hozzáadja a m ism atch_user táblához: ALTER TABLE mismatch_user ADD username VARCHAR(32) NOT NULL AFTER user_id. 356 7 fejezet . password. hog}’ kipróbáld az új oszlopokat: a jelszót az SHA() függvény INSERT INTO mismatch_user v' (username. NOW ()) Hogy m eggyőződj róla.a m ism atch user tabla módosítása esztut Add a username és password oszlopokat a m ism a tch jjse r táblához. i i^ssrname i ! Mm. ADD password VARCHAR(16) NOT NULL AFTER username A p assw ord oszlopnak azonban képesnek kell lennie egy 40 karakteres titkosított karakter­ lánc tárolására. rov* in Csak egy felhasználó felel meg a titkosított jelszónak.Viî . SELECT password FROM mismatch_user WHERE username = ’jimi1 ^ u y n n a a \\ szonaK gaank t ketl lennie.i_ a ie r V. jo i n _ d a t e ) VALUES ( ’ j i m i 1.

az előző fejezet Guitar Wars alkalmazásában HTTP-hitelesítéssel kértünk felhasználónevet és jelszót a felhaszná­ lótól. csak éppen a saját.m ís-m a rc h . hogy korlátozzuk az alkalm azás bizonyos részeinek elérését. _ Remember this password in my keychain ("Cancel ) ft o g in A most itt vagy ► 357 . A Mismatch alkalm azásban nagyjából ugyanerre a szolgáltatásra van szükség. ami az egész alkalm azásban érvényes.szolgál egyszerű' bejelentkezési felületként. hogy most egy teljes adatbázi­ sunk van felhasználónevek és jelszavak lehetséges kom binációival. sze­ mélyes felhasználónevüket és jelszavukat kell megadniuk. nem csak egyetlen felhasználónevünk és jelszavunk.sm atch o n w v w .amelynek a megjelenése böngészofuggo .Személyre szabott webalkalmazások építése T e h á t a je ls z ó m o s t m ár t it k o s í t o t t .hiszen a v é d e tt oldalak eléréséhez egy fe lh a szn á ló n é vre és egy je ls z ó ra van szükség?! De igen! A HTTP-hitelesítés tökéletesen megfelel egy egyszerű felhasználó-bejelentkeztető rendszerhez. A bejelentkezési ű rla p o t v is z o n t még mindig nem k é s z íte ttü k el. Nem lehetne egyszerűen H T T P -h ite le s íté s t h a szn á ln i . azzal a különbséggel.n e r Your password wf(i t * sem in the N am e: Pi9e' V Uneed t0 '°9 O ^ to area A felhasználók számára a szabványos HTTP-hitelesítési ablak . A Mismatch felhasználói tehát ugyanazt a HTTP-hitelesítési ablakot használhatják. Ha még em lékszel rá. Password. M .

header ('WWW-Authenticate: Basic realnv="Mismatch'" ) .h ttp -h ite le s íté s a m is m a tch alkalm azásban A felhasználók hitelesítése a HTTP segítségével Ahogy a Guitar Wars alkalmazás szem léltette. fejlécet kell elkiildened.guitarwari. hogy a böngésző felhasználónevet és jelszót kért.mindkét fejléchez egy-egy h e a d e r () függvényhívást: A HTTP-hitelesítéshez két header('HTTP/1■1 401 Unauthorized'). Ez a hitelesítés tartomá.J nya. A H TTP-hitelesítéshez szükséges fejlécek elküldése két sornyi PHP-kódot igényel .-02:11 9 8 4 3 0 Kenny Lavhz 2008-04-23 1 4 :0 * 5 0 6 4 9 3 0 Remember this password in my keychain 358 7. két fejlécet kell elküldeni ahhoz. ha helyes felhasználónevet és jelszót adott meg. To view this page. hogy egy HTTP-hitelesítési ablakon keresztül korlátozzuk a hozzáférést egy oldalhoz. Guitar Below i$ a li Ashton Sim Name. you need to log in to area "Cultar Wars" on avvw. A Guitar W/ars alkalmazás védett oldalainak eléréséhez egy felhasználónévre és egy jelszóra van szükség. Ezt a két fejlécet kell elküldeni ahhoz. mie­ lőtt engedélyezte volna a hozzáférést a Guitar Wars Admin oldalához. fejezet . ami ebben az esetben a teljes alkalmazás.net > A felhasználó csak akkor érheti el ezt az oldalt. hogy HTTP-hitelesítésen keresztül korlátozzuk a hozzáférést egy oldalhoz. Ezek a fejlécek azt eredm ényezték. rock Password: £•••• *~2 c:ear Eddie Vanil Beiita Cbev Phiz Lairstt Paco Jastorhj? Nevfl Jobamsoid 200 8 -0 4 -2 4 08.

V In Praflb Imi VrAa • W 41 » í/ login. majd írd le azt is.Személyre szabott webalkalmazások építése Gyakorlat Karikázd b e a Mismatch alkalm azásnak azokat a részeit.php editprofile. am elyeket érint a b e je ­ lentkezési parancsfájl ( lo g in .p h p ) és a hozzáférést szabályozó HTTP-hitelesítés használata.php index.php Ez a parancsfájl.php m o s t i t t vagy ► 359 . view profile. hogy ezek milyen hatással vannak az alkalmazás érintett összetevőire! M taatcft.

hogy a jelszót hogyan vit­ ted be. de a vendé­ gek előtt rejtve maradjanak. hogy a profilok minden bejelentkezett felhasználó számára láthatók legyenek.php sában. hogy bejegy­ zett felhasználóról van szó. mert a kezdőlap az első oldal. ha fokozott biztonságot igénylő érzékeny adatokkal dolgozunk. A cél az. amikor meglátogatja a webhelyet. hanem a felhasználónévre is szüksége van. hogy melyik p ro filt szueretnék szerkeszteni.p h p ) és a hozzáférést szabályozó HTTP-hitelesítés használata. mielőtt beje­ lentkezésre kérnénk őket. 360 7. és kiindulópont a már bejegy­ zett felhasználóknak. Ez a fajta titkosítás kí­ vül esik ennek a fejezetnek a tém akörén. a bejelentkezési parancsfájl egy hibaüzenetet jelenít meg. hiszen mindenki által el­ érhetőnek kell lennie. Az adatbázist nem érdekli. \ A bejelentkezett felhasználók bárkinek a profilját megtekinthetik? ! Igen. akiknek be kell jelentkezniük. r A profilok megte­ kintésének és szer­ kesztésének lehető­ Amikor egy felhasználó bejelentkezik. amikor a HTTP-hitelesítési ab­ lak elküldi azt a kiszolgálónak. ahol a felhasználó találja magát. ezén ez a fajta titkosítás nincs hatással a HTTP-hitelesítésre. és megakadályozza a további hozzáférést. sége korlátozott.G yakorlat - m egoldás Gyakorlat . hogy megállapít­ sa. Az SHA {) MySQLfüggvény arra szolgál. hogy ezek milyen hatással vannak az alkalmazás érintett összetevőire! A kezdőlap nem játszik közvetlen szerepet a felhasználók bejelentke­ zésében. Más szavakkal. és fon­ tos. mert csak akkor van rá szükség. Az Edit Profile oldal nem csak a bejelentkezési parancsfájlra tá­ Ha nem található a felhasználónévnek és a jelszónak megfelelő sor. Ugyanakkor amellett is szólnak érvek.megoldás Karikázd be a Mismatch alkalmazásnak azokat a részeit. fejezet . hogy meggyőződjön róla. az alkalmazás ellenőrzi a felhasználónevét és a jelszavát az adatbázisban. ha mélyebbre szeretnének hatolni az alkalmazásban. majd írd le azt is. hogy a jelszót már annak továbbítása vagy átvi­ tele közben titkosítsd. K V ! Milyen hatással van a jelszavak titkosítása a HTTPhitelesítésre? ! Itt két kérdést kell megvizsgálni: a jelszavak továbbí­ tását és a jelszavak tárolását. maszkodik a hozzáférés korlátozá­ index. hogy biztonságosan. hogy a látogatók lássák a webhelyet. Nincsenek hülye kérdések ! M iért nem szükséges a kezdőlapra is bejelentkezni? ! Azért. csak a Mismatch-tagok tekinthetik meg a többiek profilját. va­ gyis ezeket az olda­ lakat csak a beje­ lentkezett felhasz­ nálók érhetik el. A kezdőlap tehát előzetes­ ként és kiindulópontként is szolgál: érdeklődést felkeltő csali az új látogatóknak. amelyeket érint a b eje­ lentkezési parancsfájl (lo g in . titkosított formában tárolhass egy jelszót egy adatbázisban.

// A felh aszn álón év é s a j e l s z ó k i k e r e s é s e az adatbázisból S q u e r y = "SELECT u s e r _ i d . e x it (’<h2>Mismatch</h2>Sorry. így beállíthatjuk a $user_id és $u$ername változók értékét. ?> Ezen a ponton minden rend­ ben van. DB NAME). } //A s i k e r e s b e je l e n t k e z é s m eg erő sítese e c h o ( ’ <p c l a s s = " l o g i n " >‘í o u a r e l o g g e d i n a s ame . hogy a H T T P hilelesítési fejlécek segítségével elkérje a felhasználónevet és a jelszót a fel­ használótól. ^ ---- $usernam e .SHA ( * $ u s e r _ p a s s w o r d ' ."Mi sma t c n " 1 ) . ________________^ h e a d e r ( f WWW-Authenr. (mysqli_nurn_rows ( $ d a r a ) = 1 ) { // A b e j e l e n t k e z é s i adatok rendben vannak. p h p ' ) . m ost it t vagy ► 361 . $user__id = Src-w (' u s e r j L d 1 J . r ----. i _ f e t c h _ a r r a y ( $ d a t i ) .J s e r _ u s e r n a r a e 1 AND " .1 40 Urvauth 1 . DD PASSWORD. ? ). e z é r t ismét el k e l ' küldeni a f e j l é c e k e t header(»HTTP/1. így megerősíthetjük a bejelentkezés sikerét.l i _ q u e r y ($ d b c . </p>1) . hogy a bejelentkezési adatok rendben Ha a felhasználónév-jelszó párnak ) e lse { vannak. // A fe lh a s z n á ló n é v -je l szó pár érvénytelen. el kell küldeni a hitele­ sítési fejléceket. Lekérdezés végrehajtása an­ nak ellenőrzésére. t r i m ( $_SERVER [ ' PHP AUTH~PWT. így a f e lh a s z n á l ó a z o n o s í t ó j á t és nevét tartalm azó v á lto z ó k b e á l l í t h a t ó k $ row = mysql. majd ellenőrizze őket a m ism atch_user adatbázisban. hogy a felhasználót 8z adatok megadására kérjük. Ha a felhasználónevet és a jelszót még nem írták be. akkor újra el kell küldeni a hitelesítési fejléceket. egyetlen sor sem felel meg. you must e n t e r y o u r usern am e and p assw o rd t o l o q i n and a c c e s s ' t h is p age. 1 .$ ro w [’ u sernam e1j . amely a felhasználót a felhasználónév és a jelszó megadására kéri. you must enter a valid username and password to lóg in and ’ . D B 'J S E R . $u s e r p assw ord .----KISZ Egy új bejelentkezési parancsfájl elkészítése. $ q u e r y j . e x i t ( ’ < h 3 > M is m a tc h < / h 3 > 5 o rr y . header( T WWW-Authenticáte: Basic realms"Mismatch"1}.1 401 Unauthorized*).Személyre szabott webalkalmazások építése A felhasználók beléptetése a HTTP-hitelesítés segítségével A bejelentkezési parancsfájl ( l o g in . ) ) . if ' $ .atch _u ser WHERE u se rn am e * " p a s s w o r d . az azt jelenti.($ _ S E R V E R [ ' PHP_AUTH U S E R ’ l J J .p h p ) felel azért. u sé rn am e FROM n íisrr. . \TT A f e lh a s z n á ló á l t a l b e í r t b e j e l e n t k e z é s i adatok k io lv a s á s a •i ? use r _ u s ername « roysql i _ r e a i _ e a c a p e s t r i .i c a t e : B a s i c r e a i m. még nem í r t á k be.mysq! i _ r e a l_ e s c a p e s t r i n g (S d b c . trir r. $ d a t a = mysq. hogy a felhasználót ismét az adatok megadására kérjük. Ta c c e s s t p a g e . lentkezési adatok kiolvasása. A felhasználó által beírt beje­ // C satlak o zás az adatbázishoz $ d b c = m y s q l i c o n n e c t ( Ü8 HOST. i f ( ! i s s e t ($ SERVER! ' PHP_AUTH_USER'J ) | | l i s s e t ($_SERVER f * PHP_AUTH_ PW' J ) ) { J A felhasználónevet és a jelszót. mielőtt hozzáférést adna egy védett oldalhoz: <?php r e q u i r e o n c e ( 1c o n n é c t v a r s . ezért e l k e l l küldeni a h i t e l e s í t é s i f e j l é c e k e t header (r HTTP/1. Ha van illeszkedő sor. kiolvassa azok értékét a $_SERVER szuperglobális tömbből. hogy megfelel-e valamelyik sor a felhasználónévnek és a t i t ­ kosított jelszónak. ’ ).

és emeld be a View Profile. ha a felhasználó még nem jelentkezett be.h e a d firstla b s.p h p néven. Ez term észetesen csak akkor fog m űködni. a w w w . és nyisd meg a Mismatch alkalm azás főolda­ lát a böngésződben. A on Mismatch . mert ez a kiindulópont. atmelyek meghívják a bejelentkezési parancsfájlt. hogy a bejelentkezés engedélyezett-e. p h p parancsfájlok elejéhez. Mismatch • Where opposites attract! V ftoiite iew Edit Profile Latest member*: To view »his pa*«. fejezet .mis-mat Yaar panword «tfl b í jent ¡nyfcc-ear Name Password jnettles Remember this password in my keychaln ^ancei f _tb g < rt|^ A bejelentkezési parancsfájl HTTP-hitelesítés segítségével akadályozza meg a jogosulatlan hozzáférést a View Profile és Edit Profile oldalakhoz.teszteld a mismatch alkalmazást! Tésztát Hozd létre az új bejelentkezési parancsfájlt. Kattints a View Profilé vagy az Edit Profile hivatkozásra a bejelentkezéshez és a szem élyre szabott oldalak eléréséhez.Where opposUesjaaract^ A jelszót az SHAl) titkosítja és hasonlítja össze az adatbá­ zisban tarolttal. és írd b ele a bejelentkezési parancsfájl kódját (vagy töltsd le a parancsfájlt a Head First Labs w ebhelyéről. 362 7.c o m / b o o k s/ h fp h p cím ről). ahonnan mélyebbre hatolhatunk az alkalmazásban. hogy megál­ lapítsa. ami beem eli az új bejelentkezési parancsfájlt. Töltsd fel az összes parancsfájlt a w ebkiszolgálódra. Ez a két hivatkozás vezet a védett oldalakhoz. A kezdőlapot nem védi a bejelentkezési pa­ rancsfájl. ha már fel­ vettél egy felhasználót felhasználónévvel és jelszóval az adatbázisba. illetve az Edit Profile parancsfájlokba! Hozz létre egy új szövegfájlt lo g in . majd adj PH P-kódot a v ie w p ro f i l e . you need t o ^ y in to arca '^ isrn a:ch Mon www. p h p és e d i t p r o f i l e .

DQ HAKE) 1951.muKt/i oiaai megerosfti a belépést a bejelentkezési parancsfájlban megadott üzenettel.Személyre szabott w ebalkalm azások építése A Mismatch alkalmazás bárn ifik oldalának. c & a You arr. v- < h ead > « n a t c h . p h p * ) . a fel használó beléptethető'. S ta te: "ga — Picture: ( ö ^ ü £ . ■ A bejelentkezési parancsfájl hozzákapcsolása a Mismatch alkalmazás többi részéhez. csak be kell •«elnie a login.php Would you like to edit vour profile? php r e q u i r e o n c e | •l o y i n .View Profile U sernam e.^ s t y i e . r Tlohlopk editprofile.c s a " /> Mismatch . Mismatch . logged in as /nettles.E-Ji» P r o f i l e < / t l t l e > < lin fc r e l * " s t y l e s h e e t " t y p e ^ t e x t / o s s " h r e i . és betöltődhet az oldal hátralevő' része. jnetdes F irst nam e: Johan L a st nam e: Neales G end er: B irth d ate: L ocation : Male 1981-11-03 Athens. fi PAS8MOBD.11-03 Atncnt Ha a felhasználónév és a jelszó érvényes.php fcntflrofti« A Mismatch alkalmazásban minden felhasz náló saját. személyre szabott űrlapot kap. O A ^P SSW R A OD A View Profile és Edit Profile parancsfájlokban az első' utasítás a bejelentkezési parancsfájl beemelése a felhasználók beje­ lentkezésének kikényszerítéséhez view profile.‘.php parancs­ fájlt a kódja elején. You are logged in a \ jncntes a ty lc . amelyiknek'" ^ c ele'réséhez bejelentkezés­ re van szükség. most rtt vagy > 363 .Edit Profile p Personal Information-------First name: >ohan Last name: Newei B irth d ate: C it y . .

a m ism atch alkalmazásnak szüksége van egy feliratkozási űrlapra is Ruby imádja a horrorfilmeket. amely le­ hetővé teszi az új felhasználóknak. hogy a felhasználóknak nem áll m ódjukban fel­ iratkozni . hogyan lehet fe lira tko zn i Az új Mismatch-felhasználóknak lehetővé kell tenni a feliratkozást.mivel le nem határoztál meg egyet­ len felhasználónevet és jelszót sem . és így csatlakozzanak a w ebhelyhez. A gond csak az. de jelen­ leg gyűlöli a Mismatch alkalmazást. fejezet . a bűvös kockát és a fűszeres ételeket. de nem bírok rá ic ni. a bejelent­ kezés bajos. Az új bejelentkezési parancsfájl kitűnő munkát végez. ami a felhasználók beléptetését illeti a HTTP-hitelesítés segítségével. Szeretnék bejelentkezni és szerkeszteni p ro filo m a t. hogy használhassa a rendszert. Felhasználónév? Jelszó? 364 7. hogy létre­ hozzanak egy új felhasználónevet és jelszót. A Mismatch alkalm azásban tehát szükség van egy feliratkozási űrlapra. mert nem engedi feliratkozni.

hogy felhasználónevet és jelszót kérjen a felhasználótól.Személyre szabott webalkalmazások építése Feliratkozási űrlap az új felhasználók számára Hogyan kell kinéznie ennek az új feliratkozási űrlapnak? Tudjuk.. az adatbázis meg­ tekintésekor is biztonság­ ban vannak. mivel a felhasználó ezen az űrlapon adja meg a jelszavát. (rclyfe) ******** A Sign Up gombra kattintás eredményeképpen az alkalmazás hozzáadja a felhasználónevet és a jelszót az adatbázishoz.. hogy felism erje ezt a problém át. tottak.. hogy kiküszöbölhessük annak a kockázatát. hogy felhasználóne­ vet és jelszót kérjen a felhasználótól. A felhasználónak így kétszer kell beírnia a jelszót. és ellen ­ őrizhetjük. A feliratkozási oldal feladata tehát az. két jel­ szóm ezőre lesz szükség. hogy a felhasználó beírja a kívánt felhasználónevet és jelszót. ami már foglalt. most itt vagy ► 365 . hogy az adott felhasználónév nem foglalt-e. e511d7. A feliratkozási oldal feladata tehát az. hogy az alkalmazás helytelen je l­ szót állítson be a felhasználó számára. ha a felhasz­ náló olyan felhasználónevet próbál választani. \ Mivel a jelszavak titkosíA feliratkozási parancsfájlban az egyik lehetséges problém át az jelenti. hogy lehetővé kell tennie. mismatch user 1 u s e r jd l usofiwnw ••• 1 1 ^ 1 10 11 ~ 12 baldpaul jnettles rubyr d8a011 . a jelszavakat pedig biztonsági okokból általában csillagokkal rejtik el a w ebes űrlapokon. de van valami más is? Nos. ellenőrizze. ellenőrizze. Felhasználónév: J e ls z ó : J e le z ő (ú jra ): F e lira tk o z á s Password: Reword: ******** A jelszót kétszer kell beírni.. A parancsfájlnak elég intellligensnek kell lennie. majd az új felhasz­ nálót a m is m a tc h _ u s e r adatbázistáblához adja. hogy az adott fel­ használónév nem foglalt-e.. és másik felhaszná­ lónév választására kérje a felhasználót. hogy nem történt-e elírás. Q 62e4o^ ■ % __ password | . majd az új felhasználót a m ism atch__user adatbázistáb­ lához adja..

t r i m ( $ _POST[ ' ..m y s q i i _ r e a l _ e s c a p e _ s t r i n g ( $ d b c ..... és csatlakoz­ hassanak a Mismatch közösségéhez! mm Mismatch .... You\ ' r e new r e a d y t o l o g i n and ' <a h r e f = " e d i t p r o f i l e ... így besz ú rh atju k az adatokat az adatbázisba LO $ q u e r y =•"INSERT INTO m i s m a t c h _ u s e r (u s e rn a m e . p h p ' ) ... hogy a parancsfájl kódja nem teljes.... p a s s w o r d . hogy az aposztróf© kát le kell védened. e c h o 1<p>Ycur new a c c o u n t h a s b e e n s u c c e s s f u l l y c r e a t e d . DB_PASSWORD....... } 366 7... re q u ire _on ce( ' c o n n e c tv a r s .... SHA( * 1) . i f (m ysqli_num _row s ( $ d a t a ) . php' ) ... Password: • • • • •••• Password (retype): if (isset($_POST[fsubmit'])) { // A p r o f ila d a t o k k io lv a s á s a a POST-tömbből ..... $ d a ta = m ysq li _qu ery($dbc.... NOW( ) ) " ..a signup. $ q u e ry ). e x it ()...mysqli_real_escaperstring ( $ d b c ..' ' ". j o i n _ d a t e ) VALUES tf "(' ' .. A gond csak az. trim($_POST[' .. // C satlakozás az adatbázishoz $ d b c ~ m y s q li_ c o n n e c t ( D B _ H O S T / D 3 J J S E R .m y s q l i _ r e a l _ e s c a p e _ s t r i n g ( $ d b c ..... fejezet . '])).. ha egy aposztrófok közé zárt szöveg // A művelet sik e rén e k m e g e rő sítése a fe lh a s z n á ló számára ^ belsejében Szerepelnek........ </p>' . p h p " > e d i t y o u r p r o f i l e < / a > ....& MySQL-mágnesek A Mismatch alkalm azás feliratkozási parancsfájlja egy egyéni űrlap segítségével kéri a felhasználót a kívánt felhasználónév és jelszó beírására..... Egé­ szítsd ki a kódot a hűtőm ágnesek segítségével. Ne feledd. m y sq li_ cio se ($ d b c)...= 0) { // A felh asználón év egyedi.. i f ( ! e m p ty ($ u s e r n a m e ) & ! e m p t y ( $ p a s s w o r d l ) & ! e m p t y ( $ p a s s w c r d 2 ) & & & & ( — )) ( // E lle n ő r iz z ü k ...S g n f A feliratkozási űrlap enter your username and dented password in sign up to Mismatch roby Registration Info------Username: <?php r e q u i r e _ o n c e ( 1a p p v a r s . hogy az új felhasználók feliratkozhassanak... hogy v a la k i más n i n c s . m y sq li_q u ery ($d b c.. $ q u e r y ) ...Sign Up Please Mümatcfr ..php parancsfájl kiegészítése PHP.. t r i m ($ POST[ ’ '])).e inár b ejegy ezve e z z e l a fe lh asz n áló n é v v el S q u e r y = "SELECT * FROM m i s m a t c h _ u s e r WHERE usern am e . D5_NAME).

m e g je l e n ít e n i e c h o •<p c l a s s = " e r r o r " > A n a c c o u n t a l r e a d y e x i s t s f o r t h i s u s e r n a m e . ?>"> < £ ie id se t> < l e g e n d > R e g i s t r a t i c n ln fo < / leg en d > < ia o e l for="usernam e">U sernam e: < / lab el> cin p u t ty p e = "le x v a i u e = " < ? p h p i f ( ! empty ( > P a ssw o rd ( r e t y p e ) : < / l a f c e i > dnpu < / field set> < i n p u t t y p e . e z é r t h ib a ü z e n e te t kel'.u p d a t a 1t w i c e . P l e a s e u s e a d i f f e r e n t ’ a d d r e s s .form> name signup. m y sq li^ clo se(S d b c) ?> < p > P l e a s e e n t e r y o u r usern am e and d e s i r e d p a s s w o rd t o s i g n up t o M ism atch .php most ü t vagy ► 367 .</p> < form met hod** " p o s t " a c t i o n .Személyre szabott webalkalm azások építése e lse { // Ehhez a felhasználónévhez már t a r t o z i k f ió k ." e r r o r " > Y o u must e n t e r a i l o f t h e s i g n ." < ? p h p e c h o $ _SEPsVERf ' PHP_SELF' ] . </p>’ . </p>1. e lse { e c h o ' <p c i a s s ." s u b m i t " v a l u e = " S i g n Up" name3 " s u b m i t " </.

hogy a parancsfájl kódja nem teljes. B_N M i f ( i s s c t (S.a kiegészített signup.P O ST r ' s u b m i t • ] ) ) ( // Grab t h e p r o f i l e d a t a from t h e POST A ^ .php parancsfájl A Mismatch alkalm azás feliratkozási parancsfájlja egy egyéni űrlap segítségével kéri a felhasználót a kívánt felhasználónév és jelszó beírására. t r i m ( $ _ P O S T [ i f ( ! e m p ty ($ u s e r n a m e ) & ! e m p t y ( $ p a s s w o r d l ) & ! e m p ty ($ p a s s w o r d 2 ) & & & & Ellenőrizzük. DBJJSER. $passwordl |*= m y s q l i ^ r e a l _ e s c a p e _ s t r i n g ($db t r i m ($ POST[ m y s q i i _ r e a l _ e s c a p e _ s t r i n g ($ d b c . SELECT * FROM m is m a tc h u s e r WHERE usernam e m y s q l i _ _ c i o s e ($dbc) e x it (). fejezet . A gond csak az. — Rcguirauon Info-------------------------------------------------------------------- Username: rubyr Password: •••••••• Password (retype): // C o n n e c t t o t h e d a t a b a s e $dbc « mysqli__connect (DB^HOST. majd beolvassuk.Sign Up Please enter your username and desired password to sign up to Mismatch. és csatlakozhassanak a Mismatch közösségéhez! A feliratkozási Mismatch .19 sz° r rosgtisztitjuk. t r i m ( $_POST . Egészítsd ki a kódot a hűtőm ágnesek segítségével.> m y s q ^ i _ r e a l _ e s c a p e _ _ s t r i n g ( $ d b c . O . hogy az új fel­ használók feliratkozhassanak. DB_PASSW RD D A E) . 368 7. hogy egyik urlapmezo sem üres-e. és hogy a két jelszó egyezik-e.

hogy korlátozza az oldalak elérését.< / p > '. aminek megvan az az előnye. A felhasználónév nem Kiürítjük a $username változót. ^ Egy vagy több urlapmezó üres. Természetesen lehetséges egy H l TP-hitelesítési ablakot használni a felhasználónév és a jelszó beviteli felületeként. . az Edit Profile oldalra mutató hivatkozáson keresztül a beje­ lentkezési ablakhoz vezeti őt.? ba/ka/mazasoi else { / / An account already exists for this username. A feliratkozási parancsfájl ehelyett egy hivatkozást jelenít meg az Edit Profilé oldalhoz." < in p u t t y p e . ahová a felhasználó feltehetőleg el szeretne jutni a feliratkozás után. jelenítünk meg. a bejelentkezési ablak fog megjelenni.php hülye kérdések ! Mert a feliratkozási parancsfájlnak nem az a célja. ft ft . ?> < p > P le a s e e n t e r y o u r u se rn a m e and d e s i r e d p a ss w o rd t o s i g n up t o M ism atch . hogy lehetővé tegye a felhasználóknak. so d i s p l a y an error message 'a d d r e s s . hogy automatikusan beléptetné a felhaszná­ lót.! M iért nem lehet egyszerűen HTTP-hitelesítést használni az új felhasználók feliratkozásához? K V ! A feliratkozási parancsfájl belépteti a felhasználót. ezért hibaüzenetet m y sq li_cio se ($d b c). ?> "> < fie ld se t> < le g e n d > R e g is t r a t io n In fo< / legen d > < l a b e 1 f o r ^ " usernam e M U sern am e: </ l a b e l > > < i n p u t t y p e . hogy megadjanak egy egyedi felhasználónevet és jelszót. i n c l u d i n g t h e d e s i r e d p a ssw o rd ’ ’ tw ic e .u p d a t a .</p> < f o r m m e t h o d ^ " p o s t ” a c t i o n = " < ? p h p e c h o $_SERVER[ 1 PHP^SELF’ J .< / p > ‘ .”e r r o r " > A n a c c o u n t a l r e a d y e x i s t s f o r t h i s u s e rn a m e ." name= — ft ) echo ^ P assw o rd : < / lab el> " id *" ” name= — if ? > " / x b r /> / x b r /> P a ssw o rd ( r e t y p e ) : < / l a b c l > 1G=" » nair. és ennek oka elsősorban abban keresendő. A parancsfájl feladata az. amikor megpróbálja elérni az Edit Profilé oldalt. ^^ e c h o ' <p c l a s s . így nincs szükség a kód megismétlésére a feliratkozási parancsfájl­ ban. i egyedi. ezért hibaüzene­ tet jelenítünk meg. Mivel a felhasználó még nincs bejelentkezve. hogy a bejelentkezési parancsfájl már elvégzi ezt a feladatot.e= « — r / X b r /> < / fielcse t> < i n p u t t y p e . A feliratkozási parancs­ fájl tehát ahelyett. V K . most itt vagy ► o t>y ." s u b m i t " v a l u e = " S i g n Up” name= " s u b m i t " /> </Iorm> <? Nincsenek signup. miután feliratkozott? • Nem. majd bejegyezze ezeket a felhasználói adatbázisba. A feliratkozáshoz célszerűbb egy egyéni űrlapot létrehozni. hogy az iïrlapmezó' üres legyen. ) 6 IsS I e c h o ’ <p c l a s s = " e r r o r " > Y o u must e n t e r a l l o f t h e s i g n . de a hitelesítés felesleges az új felhaszná­ lók feliratkozásakor. P l e a s e u s e a d i f i e r e n . hogy a jelszó ellenőrzésével kiküszöbölhetjük az adatbeviteli hibákat.” t e x t " id ^ " v a l u e = " < ? p h p i f (! e m p t y ( < la b e i fo r » ” < in p u t typ e<la b e l f o r .

p h p oldalra. access „Sajnálom. hiszen egy hivatkozást ad a feliratkozási oldalra. kid e » k . hogy a bejelentkezési parancsfájl egy hivatkozást adjon a sig n u p . 370 7. hogy miként iratkozhatnak fel. Az egyik lehetőség. meg kl adnia egy érvényéé felhasználónevet és el / jelszót a bejelentkezéshez és az o d l e é é é e . Valószínűleg mindkét esetben célszerű m egjeleníteni a Sign Up hivatkozást. a bejelentkezési parancsfájl felhasználónevet és jelszót kér tőle. hogy a felhasználó már bejelentkezette. ' Ebben nincs semmi különleges. 1) . p l e a s e <a f t r é £?*"s i g n u p . hogy a hivatkozást b e. e x i t { . illetve ha helytelenül adták meg azokat. hogy a felhasználó csatlakozhasson a rendszerhez. Amikor egy új felhasználó például a View Profile vagy az Edit Profile hivatkozásra kattint a főoldalon. attól függően. de hogyan jutnak el hozzá a felhasználók? Valahogy tudatnod kell a felhasználókkal. a r e g i s t e r e d member. valószínűleg a Cancel (M égse) gombra fog kattintani. csupán egy szokványos HTMLhivatkozás. hogy m egjelenítsd a feliratkozási oldalra mutató hivatkozást. I f you sren \ I t up</a>. ^ e x i t ( T< h 2 > M ism a tc h < / h 2 > S o r ry . fejezet . ím e a bejelentkezés sikertelenségét jelző eredeti üzenet kódja: Ez. p h p "> s 1 qn t h i s p a g e . hogy kilépjen a bejelentkezési ablakból. ami a signup. Amennyila l rshz j ben nem W w * felhasználá..^ ira tk o z h a t m : you must e n t e r a v a l i d usernam e and p a ss w o rd t o l o g i n and 1 . Itt nyílik rá esély. Ez nem rossz ötlet.és kikapcsold.a feliratkozási oldalra mutató hivatkozás elhelyezése Adj esélyt a felhasználóknak a feliratkozásra! Már van egy feliratkozási parancsfájlod.1 ) . m égpedig a bejelentkezés sikertelen­ ségét jelző üzenet módosításával. 1 **« i-l« » k m . Tt h i s p a g e . Mivel ilyenekkel még nem rendelkezik. A másik megoldás. hogy a Mismatch alkalmazás főol­ dalán helyezel el egy Sign Up (Feliratkozás) hivatkozást. hogy a Sign Up liivatkozást a bejelentkezési parancsfájl részeként jeleníted meg. sikerHlensí# ¡* H • '« *m l' ként lehet feliratkozni a Mismatch rendszerebe. you must e n t e r y o u r u s e rn a m e and p a s s w o rd t o l ó g i n and a c c e s s \ * . ’ | ■ *Sajnálom.php parancsfájlra mutat. lrshz" A fenti kód valójában két különböző helyen jeleníti meg az üzenetet a bejelentkezési parancsfájlban: ha nem írtak be felhasználónevet vagy jelszót. < h 3 > M is m a tc h < / h 3 > S o r ry . Az új kód valahogy így festhet: Ez a kód tnár sokkal segítőkészebb. de ideális esetben képesnek kell lenned rá. meg kl adnia a felhasználónevét é e a Jelszavát a bejelentkezéshez és el az oldal e é é é e .

c o m / b o o k s/ h fp h p cím ről). illetve szerkeszthetem — a személyes profi lomatl y -" . és írd bele a feliratkozási parancsfájl kódját (vagy töltsd le a parancsfájlt a Head First Labs w ebhelyéről. V 4i tí/ &»$*** **a* o v ’ ^ Mismatch • fcdH ProOk Prsvmil iníbHMÜí* — — F W name. és a profilod szerkesztésével. AZ Ruby profilja csak bejelentkezés után érhető el.h e a d firstla b s. majd jelentkezz be.p h p néven. akik nem tudnak b eje­ lentkezni. és nyisd meg a feliratkozási oldalt a b ö n ­ gésződben. hogy m egjelenítse a hivatkozást azoknak a felhasználóknak a számára. Töltsd fel az összes parancsfájlt a w ebkiszolgálódra.View Profik1 sern*me: n*yr L*« DJi». ás megnéz­ hetem. a w w w . tn P *> *k A feliratkozás és a bejelentkezés a személytelen alkalmazást az ér­ deklődő felhasználók közösségévé változtatja. Iratkozz fel új felhasználóként. Uwul»o- ^ na««: Rb o> Mate 1972-W -ia CnoundniRj. B d t*: »« •< • u frtk rn C: ltV Mismatch .Személyre szabott webalkalmazások építése Tesztút Add hozzá a feliratkozási szolgáltatást a Mismatch alkalmazáshoz! Hozz létre egy új szövegfájlt s ig n u p . Az alkalm azásnak most már megvan az a „személyes varázsa". rntt-m hntt M TOlog m to * r t s ftcfisnu»in fo li«nuuar: fi« w * '* nw cxjt P rd flifffQ J -• Password • • A beléptetési a HTTP-Mielesítés Ruby feliratkozáskor megadott adatai alapján hajtja végre. majd m ódosítsd a lo g in . illetve m egtekintésével ellenőrizd. ?V *M uhm ferna o* iw m i* PÓ?C. R O «U flS GoKltr: Birrhdate. ami eddig hiányzott belőle. hogy a feliratkozás és a bejelentkezés helyesen m űködött-e. ■«*» Klassz! &e tudok jelentkezni a Mismatch rend szerébe.p h p parancsfájlt. .

márpedig egyaránt szükség van a felhasználók m eg­ jegyzésére. mint másokban (például a Safariban). amíg be nem zárod a böngészőt.a mismatch alkalmazásnak a kijelentkezést is lehetővé kell tennie a felhasználóknak o Két szobatársammal osztozom <sgy s z á m ító g é p e n . ha a böngészőt bezárják. io u a rc lo gged in as \idneyk. benn is maradsz. a fel­ használó soha nem lesz „kijelentkezve” egy H IT ^-hitelesítéssel elért weboldalról. A kijelentkezés engedélyezése a felhasználóknak nem hangzik valami bo­ nyolultnak.m ls-m atch. vagy a felhasználó saját k e­ zűleg nem törölte a HTTP-hitelesítéssel ellátott munkamenetet. és arra. you n eed to log in to area “M ism atch“ on w w w . és nem szeret nem. Profi*» Bár a HTTP-hitelesítés kényelmes és egyszerű módja a felhasználók belép­ tetésének a Mismatch alkalmazásba. pedig elég nagy problémát jelent a HTTP-hitelesítés számára. hogy egy’ adott oldal vagy oldalgyűjtemény esetében egyszer kelljen végrehajtani .az alaphely­ zet csak akkor áll vissza. Más szavakkal. f “ Remember thK password in my keychain City: T p tm t State: Ä z P ta u re : - A kijelentkezés lehetősége révén Sidney pontosan sza­ bályozhatná a hozzáférést a személyes profiljához. Name s i d n e y k ________________ name: <e-*ow Birthdaie: :984-07-i» Password: I» » » « » . amíg a böngészőt be nem zárták. hogy megengedjük nekik a kijelentkezést. Ez utóbbit egyes böngészőkben (például a Firefoxban) egyszerűbb végrehajtani. 372 7. A gond az. ha hozzáférnének a M is m a tc h -p ro filo m hoz. fejezet . amikor csak akarják.Edit ProfiJe To view th is p age. a felhasználók kiléptetésére nem ad semmilyen módot. hogy mások ne férhessenek hozzá a személyes adataikhoz egy megosztott számítógépről.net Ha egyszer bejelentkeztél. Mismatdi . hogy kijelentkezzenek. hogy a HTTP-hitelesítést arra tervezték. V alah ogy ki kell tu d n o m je le n tke zn i! A közösségi webhelyeknek lehetővé kell tenniük a felhasználóknak.

hogy örökké bejelentkezve ta r ta n á n k cíket? V agy c s a k egy re m é n yte le n P H P -álm odozó vagyok? m ost itt vagy ► 373 .Személyre szabott webalkalmazások építése Nem lenne álom szép . ha anélkül is em lékezhetnénk a fe lh a s z n á ló k ra .

bemutatkoznak a sütik Néha kell egy süti A HTTP-hitelesítéssel eredetileg kétféle problémát oldottunk meg: egyrészt bi­ zonyos oldalak elérésének korlátozását. ha ma'r nincs rájuk szükség. A HTTP-hitelesítés ma­ radandóan tárolja az adatokat az ügyfélen. . eltávolítliatjuk őket.) után is megmaradnak . és a sütik nem csak több oldalon (parancsfájlon) keresztül képesek a maradandó tárolásra. A felhasználók tehát tel­ jes körűen rendelkezhetnek arról. hogy a $ _ S E R V E R szuperglobális töm bben tárolt felhasz nálónevet és jelszót ellenőrzi . vagyis ha az adatok tárolására már nincs szükség . A Mismatch alkalma­ zás ezt úgy oldja meg. mert az alkalmazásnak több oldalon (parancsfájlon) ke­ resztül kell em lékeznie arra. a Mismatch alkalmazás nem lépteti ki automatikusan. hogy a böngésző bezárása (a számítógép kikapcsolása stb. Az utóbbi a nehezebb. ami lehetővé teszi a kijelentkezést.\ asswfd 1 Rcmembei this password «n my keycham " Cancel ) ~ Loq In > A sütik kis adatdarabok maradandó tárolását teszik lehetővé az ügyfélen. hogy az alkalmazás em ­ lékezzen arra.és ami még fontosabb. W ebkiszolgálc Sütiadatok tárolása Sütiadatok kiolvasása Ü g yfélbö n g észő 374 7.m>5 -maich. ha­ nem több böngésző-munkameneten át is. Ha tehát a felhasználó bezárja a böngészőjét. és kívánság szerint törölheted is. hogy mikor szeretnének ki jelentkezni. hogy a felhasználó kicsoda. Máshol kell te­ hát keresnünk a felhasználó adatainak maradandó tárolását. hogy az adott felhasználó már írt be információkat magáról. A HTTP-liitelesítés luxusa azonban többé nem áll a rendelkezésünkre. hogy a PHP a HTTPhitelesítéshez megadott felhasználónevet és jelszót egy olyan szuperglobális­ ban tárolja. mert egy parancsfájl kódjából bármikor töröl­ hetjük a sütiket. de nem engedi meg azok törlését. amely több oldalon át is megmarad. azzal a különbséggel. amelyeket a böngésző a felhasználó számítógépén tárol.nei Y jt psswrdvltbe o a o w N am e sld n ey k ir t&citar. fejezet A sütiadatokat a w ebböngésző tárolja a felhasználó számítógépén. amelyek olyan adatokat tartalmaznak. A sütik nagyon hasonlítanak a PHP változóira.például mert a felhasználó ki szeretne jelentkezni . Ez szá­ munkra nem jelent problémát. yoti need to log in to area “Mismatch" on **ww. A $J E R V E R I To view (his page. Az egyik le­ hetséges megoldás a sütik (cookie) használata. A síink­ ben tárolt adatokhoz PHP-kódból hozzá lehet férni.vagyis azt használtuk ki. >« $_SERVER [ 1 PHP_AUTH_USER1 ] $_SERVER[ * PHP_AUTH_PW1 ] szuperglobális tömb m ara­ dandóan tárolja a felhasz­ nálónevet és a jelszót. a sütik törölhetők. P o . ame­ lyek bármelyik parancsfájlt túlélhetik. mert a HTTP-hitelesítés nem támogatja a kijelentkezést.. másrészt azt.

hogy kiről van szó. Nem kell az örökkévalósá­ gig tárolni az aktuális felhasználó azonosító­ ját vagy felhasználónevét csak azért. nem? ! Az aDe igen. amelyeknek em lé­ kezniük kell bizonyos adatokra. a süti megsemmi­ sül. Süti lejárati idő nélkül is létrehozható. hogy a sütik ma­ ^ j radandók? A MySQL-adatbázisok is maradandóan tárolják az adatokat. A sütiket az teszi olyan hatékonnyá . mint egy PHP-változó . ha az alkalmazás több olyan oldalból áll. valahogy úgy. A változóktól eltérően azonban a sütiknek le­ het lejárati idejük. természetesen az adatbá­ zisokban tárolt adatok is maradandók. . Név A süti egyedi neve Érték A sütiben tárolt érték Lejárati idő A süti elévülésének és megsemmisülésének ideje Nincsenek A sütik lehetővé teszik. most itt vagy ► 375 V username — sidneyk 01/01/3000 A süti jóval maradan­ dóbb lesz. mint a PHP szöveg típusú változóival. hülye kérdések K I M i olyan nagy szám abban. sőt jóval maradandóbbak a sütiknél.de nem örökké. A jel­ szót persze nem muszáj megőrizni. hogy gyorsan megál­ lapíthassuk. hogy túlélik a parancsfájlok szokványos adatait. mint az oldalak . Amikor a lejárati idő elérkezik. helyette célszerűbb lehet a felhasználó azonosítóját elraktározni.különösen ak­ kor. Valójában te­ hát ideiglenes maradandóságra van szükség.Személyre szabott weba/kalmazások építése Mi van a sütikben? A sütik egy-egy adatot tárolnak egy egyedi név alatt. A sütik és az általuk nyújtott maradandóság igazi elő ­ nye a kényelem.. hiszen soha nem évülnek el . amíg kifejezetten nem törlőd. A sütik tehát nem halhatatlanok. ami önellentmondásnak tűnhet. nagyon hasonló­ an a PHP változóihoz. 7 Ha egyáltalán nem adsz meg lejárati időt. mint a PHPváltozók.ha beszúrsz egy ada­ tot egy adatbázisba. például a bejelentkezési infor­ mációkra . az egészen addig ott ma­ rad. a süti akkor törlődik. amikor a böngészőt bezárják. a másik a jelszót tárolja. mely esetben ponto­ san úgy viselkedik. ha a lejárati idejét a távoli jövőbe helyezed.akkor semmisül meg. amikor bezárják a böngészőt. hogy az adatok tovább maradja­ nak meg. csak arra van szükség. A Mismatch alkalmazás tehát két süti beállításával utánozhatja a $ _ s e r v e r szuperglobális által biztosított maradandóságot: az egy ik süti a felhasználónevet. hogy le­ hetővé tegyük a hozzáférést a profiljához. amíg bele nem gondolunk abba. hogy egy szöveges karakterláncot egy adott név alatt tárolj. csak tovább élnek. hogy valójában arra van szükség.

Ha a felhasználó azonosítója egy szám. f echo(’ class="login">You are logged in as ' . amely a süti lejárati idejét határozza meg. a süti automatikusan akkor évül el. setcookie(’ username 1 . . 376 7. setcookie(1 user_id’ 11 1) . A sütiben az adatok mindig szöveg­ ként tárolódnak. A PHP setcookie() függvénye teszi le­ hetővé. vagyis azt. hogy sütinek mikor kell önm űködően törlődnie. Ne feledd azonban. A s e t c o o k i e {) függvénynek egy harmadik. A sütik beállításának az az előnye. — A $etcookie() első pa ramétere a süti neve. <p $ _ C O O K IE ['username * . '. míg a $_CQOKIE szuperglobális a süti értékének kiolvasására szolgál. fejezet . nem kötelező paraméter is adható. hogy minden alkalommal bejelentkezésre kellene kérnie a felhasz­ nálót. így az alkalmazás anélkül em lékezhet a felhaszná­ lónévre.a setcookie() függvény A PHP a setcookie () nevű függvényen és a $_COOKlE nevű szuperglobálison keresztül nyújt hozzáférést a sütikhez. Második paraméterként a sütiben tárolandó ér­ téket kell átadnod. 1 sidneyk1) . a süti akkor is karakterláncként tárolja. amikor az másik oldalra ugrik az alkalmazáson belül.</p> ] A süti értékére a süti nevével hivatkozhatsz a $_C 00KIE szuperglobálisban. Ha a fenti példához hasonlóan nem adsz meg lejárati időt. mivel ez szolgál az adatbázis-lekérdezések elsődleges kulcsaként. A setcookie () függvény a süti értékének és lejárati idejének (ez nem kötelező) beállításá­ ra. hogy sütikben tárolj adatokat. hogy egy sütiben a felhasználó azonosítóját is tárolnod kell. hogy a süliadatok a parancsfájlokon ke­ resztül is megmaradnak. amikor a böngé­ szőt bezárják.

' . $user_password . username FROM mismatch_user W HERE username = " ■ ?uber_username1 A D password = SHA(*$user password’ ) " . ' . c realm="Mismatch"' ) .') .php most itt vagy ► 377 . else { // A felhasználónév-jelszó pár érvénytelen. D3_USER. t r i m ($_SERVERf' PHP AUTH~PW')).Személyre szabott webalkalmazások építése v Hegyezd ki a ceruzád! A Mismatch alkalmazás átállítása a sülik használatára többet igé­ nyel pusztán egy új kijelentkezési parancsfájl megírásánál.n and a c c e s s t h i s page._ 4G_ U n a u th o r iz e d '). i _ r e a . ezért el" kell küldőn! ~a hitelesítési fejléceket h e a d e r ( Hl T P / l.ok kiolvasása $ u ser _ u s e r name - m y s q . W -A e x i t ( ' <h3>Mismatch</h3>Sorry. így a felhasználó adatait tartalmazó változók beállíthatók } $row . I f you a r e n \ ' t a r e g i s t e r e d memoer. ' p l e a s e <a h ref= "s ig n u p .p h p "> sig n u p < / a > . php' >. // A telhasználó által beírt bejelentkezési adar. p l e a s e ' '<a h re f= " s ig n u p . Tf you a r e n \ ' t a r e g i s t e r e d member. php">sior. Susername . ezért ismét el kell küldeni a hitelesítési fejléceket h e a a e r { ' HTTP/1 . S q u e ry ). if ( ! í s s e t ($_SERVER r ' PHP_AUTH_USER '} ) || »i s s e t { S_ SERVER [ 1PHP_AUTH PW'J)) { // A felhasználónevet és a jelszót még nem írták be._ e s c a p c _ s t r i n g ( S d b c . login. t r im<S^SERVER['PHP AÜTH USER'])). you must e n t e r a v a l i d username and password ' t o Log . h e a d e r ( 'W W u t h e n t i c a t e : B a s . } // Csatlakozás az adatbázishoz $dbc = m y s q :i_ c o n n e c t (DBJÍOST. if (mysqli__num_rows ($data) = = 1 ) { // A bejelentkezési adatok rendben vannak. < / p > ' ) . Először át kell dolgoznod a bejelentkezési parancsfájlt. am elyeket szerinted módosítani kell ahhoz. DB_NAME). hogy HTTP-hitelesítés helyett sütiket használjon. u o < / a > .m y s q l i _ f e t c h _ a r r a y ( S d a t a ) . W -A e x i t ( ' <h2>Mi smatch</h2>Sorry. hogy támogassák a sütiket! <?php re q u ire _ o n c e ( ' c o n n e c tvars .m y s a l i _ r e a l _ e s c a p e _ s t r i n g ( S d b c . you must e n t e r your username and password t o ' log in and a c c e s s t h i s page. $ u se r_ id = Srow[■u s e r _ i d 1I . DB_PASSWORD. N Sdata « m ysqii_query($dbc. // A íelhasználónév és a jelszó kikeresése az adatbázisból $query = "SELECT u s e r _ id . // A sikeres bejelentkezés megerősítése e c h o ( ' <p c la s s = " lo g in "> Y o u a r e logged in as ' . Susername = $row[ 'usernam e' I .') . Karikázd be és lásd el megjegy­ zésekkel a beléptető kódnak azokat a részeit.1 401 U n a u t h o r iz e d ') . h e a d e r ( 'W W u t h e n t i c a t e : B a s i c reaim="Mismatch"' ) .

"SELECT u s e r _ id . fejezet . 378 7. ' .m y s q l i _ r e a l _ e s c a p e _ s t r i n g ( $ d b c . if a (mysqli_num_rows($data) = ^ 1 ) { .. . ""A ex"l .Hegyezd ki. megoldás A HTTP-hitelesítési fejlécek elküldésére többé nincs szükség. X ji e a d e r <'WWW-Authenticate: B a s i c reaim="Mismatch"' ) .. DB_PASSWORD.helyett két sütit kell be- e i Se i állítanunk. // Connect t o the d atabase $dbc = mysqli_connect(D3_H0ST.. egy HTML bejelentkezési ' űrlapot kell létrehoznunk ezeknek az adatoknak a megadásához. you n^sf e n t e r ’ d V alid username and password ' ' w log -. u s e r_ T d TT T \ ^ :~ « ^ ^ ^ username ~ $ row[ 1username1 ] j y Itt pa ra n csfa jl-va lto zo K -----------------------.1 401 U n a u t h o r iz e d ') . //_Thg r. O ' p l e a s e <a h r e f= "s ig n u p . $user_username‘ AN password = SKA( * $user_password' ) " .p n r ^ ^ d a ta ) . A lekérdezé Sen semmit --------sem kell változtatni. I f you a r e n \ ' t a r e g i s t e r e d member.n and a c c e s s :.1 'Mi/-'Mi5motcn</nx>. t r i f c ( $ _ S E R V E R [ 'PHP AUTH_ P W 'I )) . D $data — m y s q li_ q u e ry ($dbc. $<xuery) . DB NAM E) // Grab th e u s e r .i n i s OK so s e t t h e user ID and username v a r i a b l e s S ro w = u v a a u — fp . DBJISER.-3orry. l .^fne /passworci a r e i n c o r r e c t so send the a u t h e n t i c a t i o n headers £ header (' KTTP/1. " . tr i| f($ SERVER |' PHP AUTH U SER ' ] ) 1 $user_password = m y s q l i _ r e a l _ e s c a p e _ s t r i n g ( $ d b c . A u s e r _ id = $ r o w [ . / Tne l o g .-^^rr.i n data * Suser_username . username FROM mismatch_user W HERE username = " .p h p "> sig n u p < / a > . // Look up the username ana password in the database $query . $ username Mivel a felhasználónév és a jelszó beírásához nem támaszkodha tünk egy HTTP-hitelesítési ablakra.e n t e r e d l o g .').his page.

hogy 3 felhasználó bejelentkezett.I kezeshez szükséges I adatokat. ahol í°te I F u T k — L ~ ~ —---------megadhatja a bejelent.azt is át kell gondolnod.php ~ ~ A sikeres bejelentkezés után a fe lhasználót visszairányftjuk a kezdőlap ra. amely a bejelentke­ zett felhasználó ne vét is mutatja. az alkalmazást otoljára igénybe vevő fel Használók neve statikus szövegként jelenik meg.I használó a bejelentkező K oldalra kerül. hogy sütiket használj HTTP-hitelesítés helyett a bejelentkezés ke­ zelésére a Mismatch alkalmazásban. több szükséges a felhasználói adatok tárolásának újragondolásánál.php m ost itt vagy ► index. ' ^ új Lóg In hivatko- T -------------------[jidhcyk * * * * * * zásra kattintva a fe l.View Profile . DienJrc A I . amely a beálla&niát ifilzo fs lirs t részs.php 379 ./ y *» °k Lm* 1o »s Female lV rtj«níí. ú n vi dc f in t name: Sidney & védett oldalak immár hozzáférhető*. G enO tr: BirtM««« 19ÍU^? 19 I-o tJű T e.A ca c: arp Z Bejelentkezés után a felhaszná­ lók neve hivatkozássá változik. ahogy a felhasználók bejelentkeznek és hozzáférnek az oldalakhoz. Mi a helyzet a bejelentkezési felülettel? A sütikre támaszkodó bejelentkezéshez saját űrlap kell. ** V ic* A kijelentkezési parancsfájl egy olyan hi­ vatkozáson keresztül érhető el. hogy miként változtatja meg az alkalmazás működését. \ \s M ism atch • W here opposites attract! I Ha nincsenek bejelent­ kezve. Mksmalch •Where opposites attract! A HTTP-hitelesítési ablak helyét egy új űrlap veszi át ide kell beírni a felhaszná­ lónevet és a jelszót a beje­ lentkezéshez. n*Or: Kciiov. mivel a felhasznáiónév és a jelszó beírásához nem támaszkodhatsz egy HTTY-hitelesítési ablakra. viewprofile. **CiLHfe C&Ü w Qtisidcy u a Ju M ism atch .__ ^ I <? » ia a i^ P index.Személyre szabott weba/ka/mazások építése A bejelentkezés menetének újragondolása Alihoz. ahol a menü most már jelzi. mivel a fel használó bejelentkezett^ A to navigsetos me nübe egy Lóg Out hivatkozás kerül. Ezt az űrlapot azonban nem elég csak felépíteni .^ Wld o Jtk » o yu c u ezek a hivatkozások a megfelelő profilnézethez vezetnek.

you must ént-our usern:-nd password to lo g i n . ^ felhasználó beléptetése a userJ A if ■ (mysqii_num_rows(Sdata) == l ) { r és username sütik beállításával. S q u e r y ) .... amely sütikre támaszkodik az adatok maradandó tárolásához. ’ ....... fejezet .. if ( ! e m p ty ( S u s e r _ u s e rname) ¡ e m p ty ( $ u s e r _ p a s s w o r d ) ) { adataiból származnak.Log In</h3> ? "sty le .. 380 7. ■ // A b e je le n tk e z é si adatok rendben vannak. így a felhasználó a zo n osító ját és nevét tartalmazó sü tiket • Srow mysq l i _ f e t e h a r r a y ($ d a t a ) . * .Log I n < / t i t l e > < l i n k r e l " s t y l e s h e e t " type " t e x t / c s s " hr«: </nead> <body> <h3>Mismatch . I I A felhasználónév és a je l s z ó k ik e resése az adatbázisból Suser username’ AN " . hogy i hogy a felhasználó bejelentkezett-e // Ha a felhasználó nincs bejelentkezve // megpróbáljuk b e lé p te tn i 11 ( ! isset($_C O O K IE [.. Ellenőrizzük a u se rJd sutit.d M ) ) i f (i s s e t ($ POST[ * 3 u b m i t 1 J ) ) ^ ------ // Csatlakozás az adatbázishoz $dbc = mysqIi_connect(DB_HOST.. és a felhasználót v is s z a ir á n y ítju k a kezdőlapra s e t c o o k i e ( 1u s e r _ i d * .... < ? P hP Mismatch ... DB_PASSWORD.. Suser jpassword . í e ls e { I I A felhasználónév j e l s z ó pár érvénytelen. dirname($_SERVERf' ?HP_SELF']) h e a d e r ( * L o c a t i o n : ' . megnézzük. 1. m ‘ ) " '' ‘ } Sikeres bejeíentke.ugyanakkor hatékonyabb is. a parancsfájl későbbi részében jelenítjük meq őket.... username FROM mismatch_user W HERE username "password = SHA ( ' $user_passwordT) " . ezáiL hibaüzenetet adunk ¿•error nsg = ’ l o r r y .. tr im ($_P O S T [ * username ’ ][) ) .. p h p ’ ...i p¿¿sword t© log i n ...c ss » a bejelentkezési adatokkal... DB_NAME) Ha a felhasználó nincs bejelentkezve... Srow [ * username ’ ] ) . némileg bonyolultabb az elődjé­ nél... A bejelentkezési parancsfájl most mar t f i teljes oldalt jelenít meg.. $ r c w [ ’ u ser i d ' ] ) .. D Squery = "SELECT u s e r _ id ... $home_url)... _/ « » b e á l l í t ju k . . e z é rt hibaüzenetet adunk $errcr_m sg « * S o rry . DB USER.. mert a kijelentkezést is le hetővé teszi. S d a ta = m y s q li_ q u e r y ( S d b c ... */ i n d e x .H e a:....Log In r Login-----------. you must e n t e r a v a l i d '„¿••ern... A felhasználó által beírt ada­ tok most egy hitelesítési a t a l helyett 3z űrlap POST- // A telh aszn áló á l t a l b e i r t b e je le n tk e z é s i adatok kiolvasása Suser username = m y s q l i _ r e a l _ e scape s t r i n g (Sdbc.-: e s e té n else { // A fe lh a s z n á ló n é v -je ls z ó párt nem adták meg.. //A hibaüzenet t ö r l é s e S e rro r_ m s g _____ — S szerint. $ SERVER[ 1HTTP HOST*3 .. mivel saját űrlapot kell biztosítania a felhasználónév és a jelszó beírásához . ..php .... a következő'oldalon folytatódik... ezért minden szabványos HTMl-elemre szüksé9 van.... beállítjuk a hibaüzenetet tároló változó értékét.. ^ s e t c o o k i e (* username *. hogy megadta-e a bejelentkezési adatokat. $home u r l = ’ h t t p : / / ' ...m y s q l i _ r e a l _ e s c a p e _ s t r i n g ( S d b c .ezúttal sütikkel vezérelve! A bejelentkezési parancsfájl új változata. u s e r J .. A hibaüzenetek most egy válto^ fárolódnak/ és szükség r e q ú i r e _ o n c e <' c o n n e c t v a r s .- Username: Password: sídnek . p h p ' ) ..login.. visszairányítjuk a fe lh a s z n á |ó t 2 Mismatch kezdői a p já ra } Ha bármilyen gond van ?> <html> <head> < title > M is m a tc h .. trim($_POST f ’ password' jj) .

”t e x t " id^M username" name=” username” vaiue="<?php i f (! empty ($u3er_userna!ne)} echo S u s e r uaemame. Másrészről azonban a u s e r _ i d meglehetősen rejtélyes. Amikor új PHP-kódrészt nyitsz a <?php címkével. Lehetséges ez? Igen. ?>"> < fie ld set> <1egend>Log In</legend> <1a be 1 f o r= " us e r name " >Us e r n ame : </1 a be 1> c in p u t t y p e . hanem azt is. ezért fontos. m e g je len ítjü k a b e á l l í t o t t hibaüzenetet a b e je l e n t k e z é s i Jrlappal együtt. hogy a PHP-kódot szét­ tördelve helyezik el a HTML-kód körül. kerüljük az ideigle­ nes tárolásukat. a logika ott folytatódik. A bejelentkezési parancsfájlban a HTML-űrlapot az i f utasítás első ága tartalmazza. még nem jelenti azt. a e * 6n 3 ponton a felhas ’ na/ó <forrri method="post" action^ "<?php echo S_SERVER{ ' PHF_SELF' |. nincs rá okunk. most itt vagy ► 381 . hogy a felhasználóval tudathassuk. a felhasználónevet használhatjuk. Pusztán az.e r r o r " > ' . akinek mondja ma­ gát. a ponton be van je­ lentkezve. míg az e l s e ág az űrlap kódja után következik. hogy bejelentkezett (például meg­ jeleníthessük a nevét az oldalon). </p > ’ 1 . mi­ vel számértékű elsődleges kulcs.és a HTML-kód ilyen vál­ togatása lehetővé teszi. sőt valójában meglehetősen gyakori. e lo lt található. egyszerűen visszajelzést adunk neki erről.---------------------------------------------------------------------------«----------------------<lnput typea *"password” i d “ "passvíord" narne-"password" /> <input type=. A jelszavak emel­ lett igen érzékeny adatok. hogy milyen néven. í. hogy az elején el­ lenőrizzük. hogy a ? > jelekkel lezársz egy PHP-kódrészt. ezért ha csak lehet. hogy a kód logikáját is lezár­ tad. $error_msg . ?>" / x f c r /> < l a b e l for»"passw ord">Passw ord:</label> --------------------------------. ahogy' a bejelentkezési pa­ rancsfájl esetében is. Miután a jelszót a bejelentke­ zési folyamat során hitelesítettük. egyébként Deciig i f (empty(S_C0QKI511u 3 e r _ i d *31) i ^ „ * « e r ő s í t j ü k a b e je l e n t k e z é s t echo '<p c la a 3 » * . hogy1 továbbra is kéznél tartsuk. ?> ) WÜ A bejelentkezési weboldal teljessé tételé­ hez le kell zárni a HTML-kódof. az akaiális felhasználó rögzítésére a kettő közül bármelyik használ­ ható. hogy bejelentkezett. ami ez előtt a kapcsos zárójel ?> A bejelentkezéshez ebben a két ürlapmezoben kell megadni a felhasználónevet és a jelszót. az első if feltétel része. hogy ne kelljen egy csomó zavaros e c h o utasítással előállítani az űrlapot. V.fsubm it" va]ue="Log I n " name="submit" /> </ form> Minden. hogy a felhasználó valóban az-e. ahol abbamaradt. hogy ne csak azt közöljük a fel­ használóval. mintha a bejelentkezési pa­ rancsfájl űrlapja az i f utasítás belse­ jében lenne. { |u ög r narri-s * j . hiszen a felhasználó számára semmilyen jelentéssel nem bír ezért ahhoz.l s e { Ü Jp //A s ik e r e s b e je le n tk e z é s megerősítése echo{*<p eláss*"io gin **> Y ou a r c lo g g e c i n as Ha a felhasználó ezen $_COOKI ?.Személyre szabott webalkalmazások építése ✓?php *) Ha a s u t i üres. </body> </html> Nincsenek hülye kérdések K V M iért kell a felhasználó azonosítóját és a nevét is sütiben tárolni? Mivel mindkét adat egyedileg azo­ nosít egy felhasználót a Mismatch felhasználói adatbázisában. Sokszor többen használják ugyan­ azt a számítógépet. ' </p>'. A PHP. K V Úgy tűnik. K V Akkor m iért nem tároljuk a jelszót is egy sütiben a bejelentkezési adatok részeként? A jelszó csak abból a szempont­ ból lényeges. A u s e r _ i d azonban az adatbázis szempontjából jobb (és hatékonyabb) hivatkozás.

illetve a fe lira tko -^^~ -> Logio zásra ad lehetőséget. valamint a lehetőséget a felhasználóknak a bejelentkezésre. Az. 382 7. mert végsősoron ettől lesz a menü hatékonyan használható.a mismatch alkalmazás dinamikus menüje Mozgás a Mismatch alkalmazásban Az új bejelentkezési parancsfájl megváltoztatja a Mismatch alkal­ mazás működését. de a m enüben a felhasználónév jelenik meg. • ha a felhasználó nincs be­ jelentkezve. és a bejelent­ ■ . psiT^tcíl::. a bejelentkezési állapotuktól függően.p h p ) jelenik meg. feliratkozásra és kijelentkezésre. Ez a menü azért fontos.php parancsfájl tudja. Attól függően. php parancsfájlban található PHP-kód állítja elő. hogy a menü a felhasználó bejelentkezési állapotától függően változik. mert ez biztosítja az alkalmazás különböző főbb részeinek . mivel egy egyszerű menüt igényel. Erre a felhasználói azonosítót tároló sütit is használhatnánk. más-más menü jelenik meg. és ez a kód a $_C00KIE szuperglobális segítségével keresi meg a usernam e sütit. hogy a username süti be van-e állítva.jelenleg a View Profile és Edit Profile oldalaknak . ami a kez­ dőlapon (in d e x .Where opposites attract: h kezésre. ha nem találja a username sütit. azért lényeges. hogy a rövidebb menüt kell megjeleníte­ nie. hogy a felhasználó b e­ jelentkezett-e vagy sem. Ez a menü akkor látható. ezért ésszerűbb azt ellenőrizni. Az index.az elérését. *S ta líB L a te s t m e m b w s : A menüt az in d e x . fejezet . hogy megállapítsa.

>Log I n < / a x b r />' £#10084. A látogatók (a be nem jelentkezett felhasz­ nálók) menüje most itt vagy ► 383 . <a h r e f = fT g o u t . A bejelentkezett fe l­ használók menüje // A n a v i g á c i ó s menü l é t r e h o z á s a if ( set( is $jCOOKXE-[’ username *]) e c h o '& # 1 0 0 8 4 . de a Mismatch-felhasználók maradandóságának biztosításában to ­ vábbra is fontos szerepet játszik. $_COOKIE[ ' u s e rn a m e ’ ] lo e ls e { e ch o e ch o &#10 0 8 4 / <a h r e f = .. 1 Sitaiia kosin } \ A menüpontok mellett látható kis szíveket ez a legtöbb böngésző' által ismert HTML-egyed jeleníti meg.p h p .Személyre szabott weba/ka/mazások építése A user j d sütit nem használjuk a különböző menükhöz. <a h r e f = " e d i t p r o f i l e . A username süti határozza meg. p h p "> E d it P r o f ile < / a > ) f b r / > '.p h p "> S ig n Up</a>’ .l o g i n . hogy melyik menüt kell megjeleníteni. <a h r e f = " v i e w p r o f i l e . e c h o ’ & # 10084. e c h o '& # 1 0 0 8 4 .. php">V iew P r o f ile < / a > ^ > r / > ’ . <a h r e f = ” s i g n u p .p h p ” >Log Out ( ' .

a kiléptetés után elegendő visszairányítani őket a kezdőlapra. Mivel a felhasználók kiléptetéséhez nem tartozik valódi felhasználói felület. fejezet . de azért váltottunk HTTP-hitelesítésről sütikre. Egy új kijelentkezési parancsfájlra van szükségünk. Mismatch •Where oppu-itta attract! ** U i PQic d r fti • L gO ¡o r^k o tll d v'i Sidney még hogy k ije le n tk e z h e s s e n . 384 7. hogy valaki később ugyanahhoz a számítógéphez le­ ülve hozzáférjen egy másik felhasználó személyes profiladataihoz. hogy lehetővé tegyük a felhasználóknak a kijelentkezést. hogy lehetővé tegyük a felhasználóknak a kijelentkezést. hogy a felhasználó ne érje el többé az alkalmazást.. amely törli a két (a felhasználói azonosítót és a felhasználónevet táró* ló) sütit. Így meg­ akadályozható. A sütiknek köszönhetően a bejelentkezés és a mozgás valamivel könnyebbé vált a Mismatch alkalmazásban. logout.php A kijelentkezési parancsfájl tö rli a felhasználó bejelentke­ zési sütijeit.a felhasználók kiléptetése a sütik törlésével Hellói Emlékezel még rám ? M o s t m á r tényleg szeretnék kljelentkeznil Ideje.. és visszairányítja a felhasználót a kezdőlapra.

a felhasználót nyomon követő két sütit kell törölni. hogy a lejárati időt egy múltbeli időpontra állítsuk. ami egy órával ezelőttöt jelent. hogy törölj egy sütit. nem igazán számít . Összességében ez a kifejezés a lejárati idol az aktuális időtől 8 órányira állítja. Az. mielőtt a kijelentkezési oldal visszairányítaná a felhasználót a kezdőlapra! Gyakorlat <?php // Ha a f e lh a s z n á ló be van je l e n t k e z v e . $_SERVER f ' HTTP_HOST' J . amihez az szükséges. amely a sütit a megadott időpontban törli: Perc Az aktuális idő A fenti kód a lejárati időt az aktuális időtől 8 órányira állítja. Mi azonban azonnal törölni szeretnénk a sütit. r ’ . ?> most itt vagy ► 385 . hogy a süti 8 óra múlva automatikusan törlődni fog. . ami azt je­ lenti.csak válassz egy tetszőleges időtartamot . A Mismatch alkalmazás kijelentkezési parancsfájljából hiányzik néhány kódrészlet. csak egy Múltbeli időpontra kell állítanod a lejá­ rati idejét.Személyre szabott weba/ka/mazások építése A kijelentkezés a sütik törlését jelenti Ahhoz. dirname($_SERVER[ f PHPJSELF*] ) . Ahhoz. 1sidneyk' time() .példá­ ul egy órát és vond ki az aktuális időből: setcookie(’ username1. hogy egy felhasználó kijelentkezhessen. if ( ) ( a s ü ti t ö r l é s é v e l k i l é p t e t jü k id e jü k egy ó r á v a l (3 6 0 0 ) // A u s e r _ id é s usernam e s ü t i k // k o rá b b ra á l l í t á s á v a l tö r lé s e a le já r a t i } // V i s s z a i r á n y i t á s a k e z d ő la p ra $home_ u r l = ' h t t p : / / ' h e a d e r ( 1L o c a t i o n : .3600). hogy a bejelentkezési sütik törlődje­ nek. hogy az időpont mennyivel múlt el. írd be a hiányzó kódokat. Ez a s e t c o o k i e () függvény meghívásával és a függvénynek egy lejárati idő átadásával hajtható végre. $home u r l ) . 6 0 másodperc x 60 perc = 3 6 0 0 másodperc. és gondoskodj róla.

és jelentkezz be. Figyeld meg a navigációs menüt. $home_url).megoldás <?php // I f th e u s e r i s log ged I n .. W ) . ' header(’ Location: ' . a' // D e l e t e t h e u s e r ID and username c o o k i e s by s e t t i n g t h e i r e x p i r a t i o n s t o an hour ago (3600) .p h p .php parancsfájlt is módosítani kell.« W W W . a w w w .c o m / b o o k s / h fp h p címről). d e l e t e th e c o o k i e t o l o g t h e m o u t Cs3k akk° f 1 “ 8 felhaSZ- if ( . . j rcj j3e a h ^ nyz0 kódokat. 386 7.. di rname ($_SERVER [1PHP_SELF* ] ) . hogy a bejelentkezési sütik törlődje­ nek.¿ ¿ 0 0 )i . W ) .a kiegészített logout. és hogyan változik meg a menü.p h p . Tesztút Sütiket használva valósítsd meg a kijelentkezési lehetőséget a Mismatch alkalmazásban! {Módosítsd a Mismatch alkalmazás parancsfájljait.és kijelentkezést (vagy töltsd le a parancsfájlokat a Head First Labs webhelyéről. hogy jelezze. és kijelentkezz az alkalmazásból.h e a d fir s t. elsősorban a $ u s e r _ i d és a $ u sern am e globális változókra való hivatkozásokat kell átállí­ tani a $_C 00K IE szuperglobálisra.p h p ) egy w ebböngészőben.. . $_SERVER [ ’ HTTP_HOST1J . hogy a rendszer azonnal törölje öVet. V w ia W n y iti. a Mismatch kez<Jöl3pjára egy URL segítséqével. majd kattints a Lóg In hivatkozásra.y> 00). . p h p és a v ie w p r o f i l e ..p h p . rábbr8 állítjuk. ^ * J / // Redirect to the home paqe $home_url = 'http://* . A sütik használatához az in d e x . mielőtt a kijelentkezési oldal visszairányítaná a felhasználót a kezdőlapra! Gyakorlat .la b s .php parancsfájl ■*3rrr-— A Mismatch alkalmazás kijelentkezési parancsfájljából hiányzik néhány kódrészlet. hogy töröld a sütiket. fejezet . hogy bejelentkeztél. és nyisd meg a Mismatch alkalmazás főol­ dalát ( in d e x .. { c _______ ____ nálót' ha m f bejelentkezett. Figyeld meg. a lo g o u t . hogy sütiket használva tegyék lehetővé a fel­ használóknak a be. hogyan vezet vissza a bejelentkezési parancs­ fájl a kezdőlapra. Töltsd fel az összes parancsfájlt a webkiszolgálódra. az e d i t p r o f i l e . Az utolsó két parancsfájlban csak kis változtatásokra van szük­ ség.. . és gondoskodj róla. ?> A Location fejlée másik oldalra irányítja át a böngészőt. a lo g in . u.^ $üm egy ¿ráva| fo- . Végül kattints a Lóg Out hivatkozásra.

» m A Mismatch alkalmazás­ ban a be.I9M -07-J9 A felhasználó elfelejtésé­ hez és a kijelentkezéshez eldobjuk a sütiket.View Profile Na csá. hogy törölni akarjuk a sütit. amikor elérkezik a le­ járati idejük. Nincsenek Tehát a kijelentkezéshez csak egyszerűen törölni kell a sütiket? Igen. amivel azt jelezzük. hogy má­ sok nem szerkeszthetik a Mismatch-jwofilját.Sn» M ism atch . A Mismatch alkalmazásban a sütik felelnek az összes bejelentkezési információ (a felhasználó-azonosító és a felhasználónév) tárolásáért. M iért egy órával korábbra állítottuk a sütik lejárati idejét a törléshez? Van valami je ­ lentősége az egy óra időtartamnak? Nincs. bármilyen múltbeli időpontra állíthatod a lejáratát. Location: Teranc. én leléptem! ^ w kü ttimi e x n ^ r«rrnmm. felhasználó meg Where oppoflkt» attract edzéséhez és a l' leleMUezésViez süVíVet hozunk lé Mismatch •Log In j— U crtm n e K wbrv V m arom á PaM vord: % In------------------ im . A sütiket automatikusan törli a w ebböngésző. amíg távol van. így a törlésük teljes kijelentkezést eredményez. vagyis ha törölni akarsz egy sütit. Az egy óra (3600 m ásodperc) csupán egy véletlensze­ rűen kiválasztott érték.és kijelentke­ zést most már teljes égé szében sütik vezérlik. most itt vagy ► 387 .Személyre szabott webalkalmazások építése . és biztos lehet benne. hogy kijelentkezhet.M o k i ia cjB Ű d Sidney boldog. uűncyk ^ mjjw: Sidney U dr: FmJt -n e c e Bírtbdau-. AZ Wü y ih íKfiÖ u B ff . .'.

ezért úgy döntenek. K it érdekel Ja so n ? A legtöbb felhasználónál engedélyezve vannak a sü tik. Mivel a parancsfájljaid amúgy' is a kiszolgálón futnak. e z á rt nem tu d o k bejelentkezni . ésszerű a bejelentkezési adatoknak is ott helyet adni.böngészőjében a sütik nem engedélyezettek. A böngészőmben ] ^ le vannak t i l t va a sütik.a felhasználói adatok tárolása az ügyfél helyett a kiszolgálón Jason ..Wtwát oppusitts ahractí • L tIn■ ö • 5 . . ó. ja j. M o s t m it csináljak? [ U g y íé lb ö n g é s z ő A kísérlet a beje lentkezésre itt kezdó'dik. hogy a ki­ kapcsolásukkal fokozzák a biztonságot. a testékszerek és Howard Stern rajongója .Mismatch-felhasználó.. hogy a bejelentkezési pa­ rancsfájl beállítsa azokat. hogy a bejelentkezési adatokat a kiszolgálón tárold.L itn v öongeszo visszautasítja a sütiket. de egy webalkalmazásnak a lehető legtöbb ember számára hozzáférhe­ tn e k kell lennie. nem? Igen. Vannak. akik nem támaszkodhatnak sütikre a bejelentkezéshez. ha azokra a felhasználók­ ra is gondolsz. ami gondot jelent a bejelentkezéskor. a túrázás. M&óatofe .. ezért nem árt.. De ez még nem minden: van lehetőség arra is. így megakadályoz- * r\ (\ MLsmatcb •Ixig In ¿¿mm W ebkiszolgáló za.. akik aggódnak a sütik használata miatt.. r Lof la U w rn a m r: fato* Passw oril: . és ne az ügyfélen.. A kiszolgáló megpróbálja be­ állítani a u s e rjd és usernw sütiket a böngészőben..

u sern am e = s id n e y k ] Mivel a munkamenet-ada­ tokat a kiszolgáló tárolja. amikor a felhaszná­ ló bezárja a böngészőjét.függetlenül attól. hogy a kiszol­ gálón. A munkamenet! változókhoz nem tartozik lejárati idő'. nem igaz? Nos. ha nem kellene a böngészőre támaszkodni? Mi lenne. A sütiktol eltérően a mun­ kamenetek az adataikat a kiszolgálón tároljak. ha az adatokat közvetlenül a kiszolgálón tárolhatnád? A munkamenetek (session) éppen erre va­ lók: lehetővé teszik. A munkameneti változóban tárolt adathoz ez­ után PHP-kóddal férhetsz hozzá. ame­ lyek a sütik logikai megfelelői a kiszolgálón. A munkameneti változók a sütikhez ha­ sonlóan bármikor törölhetők. hogy a sülikhez hasonlóan egy-egy információt tárolj. hanem a kiszolgálón raktározzák el. ami a sütiknél gondot jelent. mert auto­ matikusan törlődnek a munkame­ net végén. hogy kell lennie valamilyen bukta­ tónak. hi7+nnságosabbak és megi behatóbbak a sütikben tárolt adatoknál. és az adat több oldalon (parancsfáj­ lon) keresztül is megmarad. mivel minden a ki­ szolgálón tárolódik. amikor a böngésző-munkamenet véget ér. hogy a munkame­ neti változók mennyi ideig tárolják az adatokat. hogy azok nem a böngészőben tárolódnak hiszen a változók tör­ lődnek. Amikor egy munkame­ neti változóba adatot írsz egy PHP-kód segítségével. de nekik is megvannak a maguk korlátai. am elyek felett nincs hatalmad.Személyre szabott webalkalmazások építése A munkamenetek nem függnek az ügyféltől A sütik nagyon erős kis fickók. most itt vagy ► 389 . A böngésző tehát közvetetten hatás­ sal van a munkameneti változókra . Most biztos arra gondolsz. A munkame­ net-adatok tehát kívül esnek a böngészőnek a sütikre vonatkozó korlátain. ami lehetővé teszi. M u n k a m e n e t-a d a to k tárolása W ebkiszolgáló A munkamenetek lehető­ vé teszik. hogy továbbra is biztosítsd a kijelentkezés lehetőségét. A felhasználók nem törölhetik saját ke­ zűleg a munkamenet-adatokat a böngé­ szőjükben. M u n k a m e n e t-a d a to k kiolvasása Ü g yfélbö n g észő A munkamenetek az adataikat munkameneti változókban tárolják. ami általában egybeesik azzal. Mi lenne azonban. az adatot a ki­ szolgáló raktározza el. amint a munkamenet befejeződik. de az adatokat nem az ügyfélen. csak éppen munka meneteken alapuló kóddal. A böngésző nem játszik közvetlen szerepet a mun­ kamenet-adatok tárolásá­ ban. valóban van egy kisebb probléma: a sütikhez képest kevésbé szabályozhatod. A munkame­ neti változók önműködően megsemmisülnek. például hogy olyan dolgok korlátozhatják őket. az ügyféltől füg­ getlenül tárolj maradan­ dóan kis adategységeket.

mi ennek az oka.php editprofile. A s e s s io n o s t a r t () függvény meghívása önmagában nem állít be semmi­ lyen adatot —a függvény feladata csupán annyi.php adatok elérésén. amikor nincs befolyásod a munkamenet életciklusa felett. amikor a böngészőt bezárják. . Nézd meg közelebbről. fejezet — . ) “ ------- Ez a PHP-fiiggvény indítja el a munkamenetet. hogy megértsd. hogy elindítsa a munka­ menetet. amikor meghívod a s e s s io n _ d e s t r o y () függvényt: ^ session destroyO . A session_destroy() függ­ vény egy munkamenet bezá rására szolgál. amire vagy akkor kerül sor. A munkamenet-azonosító nem semmisül meg a munkamenet b e­ zárásáig. Ez a PHP-fuggvény zárja be a munkamenetet. hogyan tárolják a munkamenetek az adatokat. ha a felhasználó bezárja a böngészőt.világos kezdetük és végük van. ha nem . W ebkiszolgáló Ez az egyedi munkamenet-azonosító. A webböngésző ennek az azonosítónak az alapján társít egy munkamenetet adott oldalakhoz. A hozzájuk kapcsolódó adatok a munkamenet élettartamának m egfelelően élnek és halnak.ha tetszik. meg kell hívnod a s e s s i o n _ s t a r t () PHP-függvényt: y session start ( .a sessionjstartf) és session destroyf) függvény A munkamenetek élete és kora A munkameneteket nem véletlenül hívják munkameneteknek . Ü g yfélbö ngésző A színfalak mögött a mun­ kamenet-azonosító teszi lehetővé. 390 7. Az egyetlen eset. vagy akkor.a munkamenet befejeződését eredményezi. amivel általában nem kell foglalkoznod. egye­ di azonosítót kap. ami . Ha egy munkamenetet magad zársz be ezzel a függvénnyel. hogy több oldal osztozzon a munkamenet­ Amikor egy munka­ menet elindul. Ha el szeretnél indítani egy munkamenetet. amit PHP-kódon keresztül vezérelhetsz. . hogy munka­ meneti változókban tárolj adatokat. az el­ raktározott munkameneti változók nem semmisülnek meg automa­ tikusan. és lehe­ tővé teszi. amely automatikusan létrejön minden új munkamenet esetében. A munkamenetet belsőleg egy egyedi munkamenet-azonosító azonosítja. A PHP session_start() függvénye elindít egy munkamenetet. viewprofile.

ezt is úgy semmi­ sítheted meg. Mint bármely más sütit. echo(1 <p class="login">You are logged in as $ SESSION[f username'] .</p>’ ). hogy a használatuk nagyon hasonlít a sütikére. amikor egy munkamenet megsemmisül. A munkamenet! változó eléréséhez csak a $_$E $$I0N szuperglobálist és a munkame­ neti változó nevét kell használnod. Ha elindítottál egy munkamenetet a s e s s i o n _ s t a r t () meghí­ vásával. A munkameneti változó yr ^ létrehozása és tárolása a kiszolgálón történik. ha azt szeretnéd. Egy gyors és hatékony módszer egy munkamenet összes változójának megsem­ misítésére. aW(or az a z o n o s ít ó De még nem vagyunk teljesen készen. ezért saját kezűleg kell törölnöd azokat. hogy a lejárati idejét valamilyen múltbeli időpontra állítod.Személyre szabott webalkalmazások építése A munkamenet-adatok nyomon követése A munkamenetekben az a klassz. i A tárolandó ertéVet csak hozzá kell rendelni a $_$E $$I0N szuperglobálishoz. Ez a kód az összes munkameneti változót megöli az adott munkamenetben. a $ _ S E S S I 0 N szuperglobális segítségével állíthatod be: $_SESSION [1username 1 ] = ' sidneyk 1 . a mun­ kamenet létrehozhat egy sütit. mielőtt a felhasználó bezárná a böngésző­ jét (kijelentkezés!). hogy a lejárati idejét egy órával korábbra állítjuk. amit a session_nam e () függvénnyel deríthetsz ki: a munka­ menet neve alapján elneve­ zett sütiben fog tárolodn. hogy meghaljanak. time() . Ha egy munkamenet egy suti segítségével jegyzi meg a munkamenet awnositojat. ha a $ _ S E S S I 0 N szuperglobálist egy üres tömbre állítod: $ SESSION = array(). 1. Ehhez csak a süti nevét kell tudnod. A sütiktől eltérően a munkameneti változók beállításához nem szükséges semmilyen különleges Függvény . a munkameneti változók nem semmisülnek meg. a munkamenet-azonosító tárolására a böngészőn esetlegesen automatiku­ san létrehozott sütit is törölnöd kell. 1 1 .3600). a munkameneti változókat. Mi a helyzet a munkameneti változók törlésével? Amikor egy munkamenetet a s e s s io n _ d e s tr o y () függvényen keresztül törölsz. Ha a böngésző engedélyezi a sütiket. A munkameneti változó nevét in­ dexként használod a $_$E $$I0N szuperglobálishoz. A munkamenet-sütit úgy töröl­ jük. hogy létezik-e munkamenet-süti. a munkamenetek ugyanis a színfalak mögött sütiket is használhatnak.csak egy értéket kell rendelned a $_SESSI0N szuperglobálishoz. if ( i s s e t ( $ _ C O O K I E [ s e s s i o n _ _ n a m e ()])) { s e t c o o k i e ( s e s s i o n n a m e ( ) . például a Mismatch alkalmazás b eje­ lentkezési adatait tárolókat. hogy PHP-kódon keresztül teljesen bezárj egy m unkamene­ tet. és a tömb indexeként a munkameneti változó nevét kell megadnod. Alihoz tehát. most itt vagy > 391 . ami ideiglenesen tárolja a munkamenet azonosí­ tóját. Először ellenőrizzük. ^ tH U fikdM lenetÍ VáltOZÓk fietTl törlődnek automatikusan.

n . az alkalmazás meg semmisíti a sütit. megakadályozva. r . I ^ A felhasználó azonosító ^ f. Ha a sütik engedélyezettek. ■o n _ s t a r t. mint _ „ amilyennek hangzik.a munkamenetek működése a mismatch alkalmazásban Where opposites atom t! M ls m a lc h . hogy egy másik oldalon is fe l­ használható legyen. CA Would yt*i h ie o 392 7. Ha a munkamenet-azo A session_destroy() függvény befejezi a munkamenetet. V «£& Mismatch • View Profile You o r r b g g r d in u x jM o n t. hogy a bejelentkezési adatok tá­ rolására egy munkamenetei használjon. L iix '. \ \ \ \ nosítót egy süti tárol­ ta. Valójában az alkalmazás műkö­ dése nagyjából változatlan marad .o g In A Mismatch alkalmazás átdolgozása.I . hogy elindítsd. nem olyan bonyolult.1 (i«dfr Nlc U HirtMaie: 1969*09-24 i Hollywood. majd megsem­ misítsd a munkamenetet. a kiszolgáló lét rehoz egyet a munkamenet-azonosító tárolá­ sára. A bejelentkezési adato­ kat az alkalmazás most már sütik helyett mun­ kamenetek segítségével jegyzi meg. ►É » ------. egyébként pedig az egyes oldalak URL jén keresztül adja át az azonosítót.¡W U sernam e: j * « t f First I A munkameneti változók m« semmisítése a $_SESSI0N tömb kiürítésével történik. fejezet . illetve kitakaríts utána. ________I némi többletmunkát.csak az igényel . jának és a bejelentkezéshez használt felhasználónévnek a tárolására két munkameneti változót hozunk létre. i u - A session_startu egy munkamenet megnyitásá­ val kezdi a munkát.i 1 I .

A kcjvetkező lépéseket kell végrehajtanod ahhoz. a munkamenet megsemmisítése. ez egy kiegészítő lépés. hogy a munkamenet létrehozott-e sütit. ki a ceruzád! A Mismatch alkalmazás kijelentkezési parancsfájlja átalakítás alatt áll.^ ^ Ellenőrzés nélkül * u^ . A felhasználó visszairányítása a k e z d ő la p ra . a süti törlése. hogy a bejelentkezési adatok m egőrzésére sütik helyett munkameneteket használjon. Pótold a hiányzó kódokat a kijelentkezési parancsfájl „m unkam enetesítésére". hogy létezik-e munkamenet-süti. Annak ellenőrzése. mint az előző. és jegyezd fel. és ha igen. csak sütiket hasz­ náló változatban. amire szigorúan véve nincs szükség a felhasználó kiléptetéséhez. amelynek célja. de ennek ellenére hasznos lehet. hogy az egyes kódré­ szek a kijelentkezési folyamat melyik lépésének felelnek meg! <?php Ha a f e l h a s z n á l ó b e v an j e l e n t k e z v e . |t . p h p 1.Személyre szabott web a!ka!mazások építése Kijelentkezés munkamenetek segítségével Egy felhasználó munkamenetek segítségével végrehajtott kiléptetése a Mismatch alkalmazásból valamivel több munkát igényel. $ h o m e _ u r l ) . O O Oké. h e a d e r ( 1L o c a t i o n : * . hogy munka­ menetekkel sikeresen kiléptethess egy felhasználót a Mismatch alkalmazásból: Q o A munkameneti változók törlése. // V i s s z a i r á n y í t á s a k e z d ő la p r a $home_url = * h t t p : / / 1 . $_SERVER[ f HTTP_HOST1] . if ( ) { a k ilé p te té s é h e z t ö r ö ljü k a m u nkam eneti v á l t o z ó k a t // A m unkam eneti v á lto z ó k tö r lé s e a $_SESSIO N s z u p e r g l o b á l i s ü r e s tö m b re á l l í t á s á v a l // A m u n k am en et-sü ti t ö r l é s e a l e j á r a t i i f (i s s e t ($_C Ö O K IE [session_name( ) ] ) ) { } // A munkamenet m eg sem m isítése id ő egy ó r á v a l (3 6 0 0 ) k o rá b b ra á l l í t á s á v a l . dirname ($ SERVER[ ' PHPJ3ELF’ ] ) • ’ / i n d e x . s e s s io n _ s ta rt(). ?> most itt vagy ► 393 .

és je­ gyezd fel. // R e d ir e c t . hogy az egyes kódrészek a kijelentkezési folyamat melyik lépésének felelnek meg! A munkameneti változók törlése. Pótold a hiányzó kó­ dokat a kijelentkezési parancsfájl „munkamenetesítésére". A felhasználó visszairányítása a kezdőlapra.-. d e l e t e t h e s e s s i o n v a r s t o l o g them out se ssio n .php parancsfájl ezd ki a ceruzád I Megoldás o (í) A Mismatch alkalmazás kijelentkezési parancsfájlja átalakítás alatt áll. $ h o m e _ u r l) .—- A munkameneti va'ltozók törléséhez egy üres tömböt kell rendelnünk a $_$E $$I0N szuperglobálishoz. A munkamenet megsemmisítése.Ha létezik munkamenet-süti. fejezet . // D e l e t e t h e s e s s i o n c o o k i e by s e t t i n g i t s e x p i r a t i o n t o an hour ago (3 6 0 0 ) i f ( i s s e t . amelynek célja. ?> 394 7.A / / I f th e / í i s e r i s l o g g e d irt. Még ha kijelentkezésről van is szó.sta rt (). j j. 3 SERVER[ f HTTP_HOST ’ ] . t o t h e home page $home_url = ' h t t p : / / ' . \2j ^ ---------------. hogy hozzáférjünk <?php / a munkameneti változókhoz. először el kell in­ dítani a munkamenetet ahhoz. hogy létezik-e munkamenet-süti. /•> -------. (T ) ) t // D e l e t e t h e s e s s i o n v a r s by c l e a r i n g t h e $_SESSION a r r a y --------. i f ( is s c tí/^ S E S S IO K C W v ja ']) / SESSION =• avray 0 . p h p ' . h e a d e r ( *L c c a t i o n : * . dirnam e ($_SERVER[' PHP_SELFt ] ) • 1/ i n d e x . ’ti»*eO .A munkamenetet a beépített session_destroy() függvény meg­ hívásával semmisítjük meg. a süti törlése. töröljük azt 3 le­ járati idejének egy órával korábbra állításával.a „munkamenetesített" logout. j if D e s t r o y t h e s e s s i o n ( sessiott_destvoyw. és ha igen.IhOO). ^ ----------. hogy a bejelentkezési adatok megőrzésére sütik helyett munkameneteket használjon. ($_COOKIE [ s e s s i o n name ( ) ] ) ) { se‘t£ookie(sessio)\_j'\ameO. bejelentkezés állapotát most egy süti helyett egy munkameneti változóval ellenőrizzük. ( j T ) Annak ellenőrzése.

php login.Személyre szabott weba/ka/mazások építése Változtass meg! A sütikről munkamenetekre történő átállás nem csak a kijelentkezési parancsfájlt érinti. php A navigációs m enü szabályozásáh oz eg y m u nkam e­ netre van szükség. A m unkam enet elindításához m eg kell hívni a s e s s i o n _ s t a r t () függvényt. signup. A m u n kam en et elindításához m eg kell hívni a s e s s i o n _ s t a r t () függvényt. index.php iU connectvars. Párosítsd össze a Mismatch alkalmazás egyéb részeit a munkamenetek támogatásához szükséges módosításokkal! appvars. majd a $_COOKiE-ra m utató hivatkozásokat $_SESSiO N -re kell cserélni.php most itt vagy ► 395 . mivel ez a parancsfájl nem függ köz­ vetlenül a bejelentkezési adatok maradandóságától.php Kincs változás. A felhasználó m egjeg y zéséh ez egy m unkam enetre van szükség. majd a $_C 00K lE -ra m utató hivatkozásokat $_SESSlO N -re kell cserélni.php viewprofile.php editprofile.

A felhasználó m eg jeg y zéséh ez egy m unkam enetre van szükség. A m unkam enet elindításához m eg kell hívni a s e s s i o n _ s t a r t () függvényt.megoldás Változtass meg! Megoldás A sütikről munkamenetekre történő átállás nem csak a kijelentkezési parancsfájlt érinti. majd a $_COOKlE-ra m utató hivatkozásokat $_SESSlO N -re kell cserélni. mivel ez a parancsfájl nem függ köz­ vetlenül a bejelentkezési adatok maradandóságától.php 396 7. A m u nkam enet elindításához meg kell hívni a s e s s io n o s t a r t () függvényt. fejezet . majd a $_COOKlE-ra m utató hivatkozásokat $_SESSlO N -re kell cserélni. Párosítsd össze a Mismatch alkalmazás egyéb részeit a munkamenetek támogatásához szükséges módosításokkal! appvars.php Nincs változás.php edltprofile. A navigációs m enü szabályozásáh oz egy m u nkam e­ netre van szükség.Változtass m eg! . index.

A s e s s i o n _ s t a r t () függvény nem csak új munkame­ netek elindítására való . akkor m iért érdemes munka. A Mismatch al­ tok egy GET-kérelemben. és új létrehozása helyett azt használják. de lehet olyan kö­ zel is. nak az optimális tároláshoz. u s e _ t r a n s _ s i á beállítá­ a felhasználóknak az esetében. hanem a ki­ meneteket használni sütik helyett? szolgálón tárolódnak.u s e _ c o o k ie s . még az után is. Te­ hát amikor a parancsfájl meghívja ^ s e s s i o n _ s t a r t () -ot. Erre való a munkamenet-azonosító. Ha a sütiket letilt­ tárolására képesek. miközben továbbra is sütikre támaszkod­ a s e s s io n . hogy' táközött. u s e _ o n ly _ c o o k ie s és a s e s s i o n . a munkamenet-azonosító egy URLmenetek használatának tehát világos elő­ en keresztül adódik át a parancsfájlok nyei vannak. a függvény egy munkamenet-azonosítót keresve elő­ ször azt nézi meg. míg azoknak a s e s s i o n . hogy a mun­ kamenetek elvileg jobbak.például egy felhasználó bejelentkezési adatait tároljunk az ügyfélen (a w ebböngészőben). akiknél a sütik engedé­ tására. hasonlóan ahhoz. A munkamenetek kétségtelen elő­ a sütiktől. ezért nem vonatkoznak rájuk a böngésző korlátozásai. A munkame­ parancsfájlon keresztül. M ost akkor mi a helyzet? • A munkameneteknek bizonyos helyzetekben megvannak az elő­ nyeik a sütikkel szemben. Azt. egy munkameneti változó nagyobb menet-azonosítók megőrzéséhez több biztonságot nyújt egy sütinél. A munka­ ják. A munkame­ kalmazásban a munkamenetek kényelmes netek tehát tökéletesen működnek sütik kiszolgálóoldali megoldást adnak a beje­ nélkül is. i n i beállítófájl szabályoz­ lyezettek.Személyre szabott weba/ka/mazások építése Újratöltve A HTTP-hitelesítés kényelmes módja annak. de működőképesek maradnak. A s e s s i o n _ s t a r t () későbbi hívásai ugyanabból az alkalmazásból felismerik a létező munkamenetet. Ha nem talál munka­ menetet. A munkameneti változók élettartama korlátozott. hogy több oldal tartozhasson ugyanahhoz a munka menethez. és a pa­ rancsfájlok ennek felliasználásával kap­ csolódhatnak az adott munkamenethez. ami lehet egy időpont a távoli jövőben. Alihoz. mint a sütik. de nem feltétle­ nül vagy-vagy kapcsolatban állnak egy­ I C l Ha a munkamenetek is függnek mással. a sütiket teljesen ki­ kerülve adják át a munkamenet-azonosí­ tót. A munkamenet-azo­ nosító maradandóságának biztosítására az egyik módszer egy süti használata: az azonosító a sütiben tárolódik. a munkamenetek nagyobb biz­ tonságot és megbízhatóságot nyújtanak. kell őrződnie az ügyfélen ahhoz. A munkamenetek a sütikhez hasonló tárolási le­ hetőséget nyújtanak. ezéri ha sütifüggők. hogy létezik-e már egy' munkamenet. amikor az egészben az a lényeg. és ezért . hogy a munkame­ netek sütiket használhatnak. ami megbízhatóbbá • A munkamenetek nem teljesen és biztonságosabbá teszi őket. Bár a munkamenet-adatok a kiszolgálón tárolódnak.biz­ tonságosabbak. mint a böngésző m unkamenetének vége. a php. m int a sütik. hogy korlátozzuk az egyes oldalak elérését. attól még a parancsfáj­ loknak valahogyan tudomást kell szerez­ niük a munkamenet-adatokról. ahogy az ada­ maszkodhatunk-e sütikre. K V • Hogyan tárolódik a munkamenet-azonosító? A munkamenetek erre használnak néha sütiket? ! Igen. K V V most itt vagy ► 397 . egy URL-en keresztül. akkor új munkamenet-azonosí­ tót és munkamenetet hoz létre. hogy kis adatdarabokat . Minden session_start ( ) hívással új munkamenet indul el? ! Nem. de a kiszolgálón. A sütik lehetővé teszik.meglevő mun­ kamenetekbe is belenyúlhatunk vele.nye. hogy töröljünk egy sütit. akiknél a sütik le vannak tiltva. Ennek az azonosítónak valahogy meg K V ! Még mindig furcsa. pél­ dául a sütik letiltása. Nincsenek hülye kérdések • A session_start () függvényt egy csomó helyen meghívjuk. amely egyedileg azonosítja a munkamenetet és a hozzá kapcsolódó adatokat. és a munkamenet befejeztével (például amikor bezárják a böngészőt) mindig megsemmisülnek. Fontos. hogy nem az ügyfélen. csak egy múlt­ beli időpontra kell állítani a lejáratát. a munkamenetek sokon keresztül. maradandóan kell tárolnod érzékeny ada­ hogy a sütik nem szükségesek a munka­ tokat. de nem ad megfelelően módot a felhasználó kiléptetésére.a böngésző hatókörén kívül esve . csupán optimális netek ezen kívül nagyobb adatmennyiség megoldást nyújtanak. Azoknak pontosan hogyan reagálnak a sütik letil­ a felhasználóknak. hogy a munkamenetek lentkezési adatok tárolására. hogy a munkamenet elin­ dult. függetlenül attól. amikor a felhasználó távozni szeretne az oldalról. Minden sütinek van lejárati dátuma. za a webkiszolgálón. hogy megértsd.

p h p login.MSSWORD.^sqUlreallescap^stringtSdbc. fejezet . try to log t h e » in (!isset(f$ S E S S I O N [*user_J. Minden munkamenetekre támaszkodó parancsfájl egy session__start() hívással kezdődik. DB_USER. DB. //If if the I n .di > < j)' if (isset |‘ 5UUUIXL. hogy a $_C 00K IE helyen a $_SESSIO N szuperglobálist kell használni. t r i m <SJK>ST username $userjpassword . h i I / Connect to the database / $dbc = mysgli. Először is." S E L E C T usftr_idr usernan-.i n d a t a $ u s e r u s e r n a m e = m y s q l i real e s c a p e e s t r i n g ( $ d b c . // G r a b r hP. és ehhez a $_$E $$I0N szuper­ globálisra támaszkodik a $_C00KIE helyett. 398 7. Squery). m indegyiküknek m eg kell hívnia a s e s s i o n _ s t a r t () függvényt a m unkam enetek elindításához.php A bejelentkezési parancsfájl munkamenetek se­ gítségével emlékszik a felhasználó azonosítójá­ ra és nevére. m ás-m ás célra használják azokat. Ezen túl azonban m inden m ód o­ sítás abból áll. dirname ($ S E R V E R Í 'P H P _ S E L F ' J) . am elyeket érintenek a m unka­ m enetek.user-eritered l o g . hogy sütikröl m unkam enetekre térjünk át. Ilu. trim(S^-OffTI*password’)>> I if (Ie m p t y ( $ u s e r _ u s e r n a m e ) Jempty($user_password>) ‘ // L o o k u p t h e u s e r n a m e arid p a s s w o r d i n t h e d a t a b a s e S q u e r y . amely elindítja a munkamenetet. a parancsfájlok végered m ényben hasonló m ódosításokat igényelnek ahhoz.áttérés süt/kről munkamenetekre A munkamenetekre való áttérés teljessé tétele Bár a M ism atch alkalm azásnak azok a részei. S d a t i = m y s q l j _ q u e r y ( $ d b c . am ely a m unkam eneti változók tárolásáén felel. connect (DB_HOST.e F R O M m i s m a t c h _ u s e r W H E R E u s e r n a m e " p a s s w o r d = S H A l •S u s e r ^ p a s s w o r d ’ }". DB_NAME>. '/index.

mint az Edit Profile oldal. p h p " > L o g i r x / a x b r /> < a href*=Hs i g n u p . echo '<table>'. ?row' 'usei_id' ? . a $_C 00K IE helyett a bejelentkezési adatok elérésére. $row['first_name. e. $ SESSION .Személyre szabott webalkalmazások építése else { echo ' &# 1 0 0 8 4 echo ' $ # 1 0 0 8 4 A Mismatch alkalmazás kezdőlapja a $_S E $$I0N szuperglobálist használja < a h r e f ® " l o g i n . while (Stow . mysqli_query{Sdtoc.1 .php m ost itt vagy ► 399 .php viewprofile. '</cdx/tr>' . editprofile.'username * . formatting it as HTML echo '<h4 >Latest members:</h4 > ’. p h p " > S i g n U p < / a > ' . *</a></idx/tr>' . amikor létrehozza a menüt.php V a { href A "login.* i .mysqli_retch_array(Sdataj) ( if (1 sse^T* SESSIONf 1usei_ld * j { 1 \ echo r >tq^g -< .l . a View Profile parancsfájl lényegében ugyanúgy haszsálja a munkameneteket. eise I echo '<td>' . SrowT 'first name'] . Squery). Ls logged in before going any luiu index. A bejelentkező oldalhoz és s kezdőlaphoz hasonlóan e Edit Profile parancsfájl »**< már a $_SESSI0N 5 « bot használja a bejeintkezési adatok elérésé*«z a $_C 00KIE helyett.php?user_id. state = 'Sstate' M .php**>log in</a> 1 0 access Sár it t nem mutatjuk be. last n a m e = 1$ l a s t _ n a m e . . hogy kell-e hivatta zásokat biztosítania a „legutóbb beje­ lentkezett tagok" profiljaihoz. és eldönti. // Loop through the array of user data.

és készen állok az adatok tárolására a kiszolgálón. Mi igaz ebből? Munkameneti változó: Ugyan már. akkor miért kell néha mégis engem használnod. Ez nem igaz. Jó l van. hogy megpróbálsz betörni a mi területünk­ re. És az a legjobb az egészben. 400 7. semmilyen adat nem lesz a kezében. Nekem aztán nem tűnik ésszerűnek. hogy a drágalátos azonosítódat tárolhasd a bön­ gészőben? Öö. hogy az adatok egyáltalán tárolhatók-e. Feltételezem. Süti és Munkameneti változó egymásnak feszülnek. De az igazság az. kinek jobb a memóriája Süti: Összedugtuk a fejünket itt a többi sütivel. hogy kiderüljön. és ellopni az adattárolási munkánkat. A lé­ nyeg az. akkor biztos nem kell semmilyen adatot tárolnia. és én vagyok a m egfelelő személy a feladatra. A felhasználó gyakran azt se tudja. mint a felhasználónév. úgyhogy ebbe ne menjünk bele. Pontosan. mert sok esetben olyan színfalak mögötti adatokról van szó. És ha a felhasználó letilt téged? Az teljesen más kérdés. Márpedig ha te nem vagy elérhető. hogy én mindig kéznél vagyok. Milyen kényelmes. fejezet . A böngé­ sző tökéletes hely az adatok tárolására. Az a pletyka terjed.kandalló melletti csevely a süti és a munkameneti változó között Kandalló melletti csevely Ma esti vendégeink. hogy pontosan mi is folyik a kiszolgálón. Einsteinkém. a „lopás” nagyon erős kifejezés. hogy letilt engem. Majd megbeszéljük műsoron kívül. hogy a felhaszná­ ló semmit sem tud letiltani a kiszolgálón. hogy szerinted erre az a megol­ dás. Ha ezt ilyen jól kitaláltad. hogy tároljuk az adatokat a kiszolgálón. hogy a webalkalmazás adatokat tárol. erről a legtöbben nem is tudnak. hogy néha ésszerűbb a kiszolgálón tárolni az adatokat. ezért nem kell aggódni amiatt. Ha a felhasználó úgy' dönt.

ha kicsit biztonságosabb lennél. hogy így izgalmasabb! És nekem van valamim. csak lejárati időm van. Ugyanezek a programozók sajnos az én lejárati időmet gyakran olyan rövidre állítják. hogy egy trehány programozó véletle­ nül elfelejt megsemmisíteni. Igen? És mi lenne az? Nos. teljes életet éljek. hogy nem tudok annyi tárolni. A neved is innen kaptad. * O! Csodás érzés lehet a halhatatlanságot megtapasztalni! Az én egyetlen reményem az. nem minden maradandó adat falatnyi. Szerintem a szíved mélyén kedvelsz engem. hogy nem élhetek olyan hosszú életet. De ha kell. mint te. hogy elvagy . ha több oldalon át meg kell jegyeznem valamit.. meg a biztonságnak. valld be. mert kisebb vagyok? Lehet. Vagyis beállíthat­ nak úgy is. hogy az ügyfélen lakom. de az egész léted egyetlen munkamenetre korlá­ tozódik a böngészőben. Úgy értem. és ne legyek kiszolgáltatva egy őrülten kattintgató webszörfös kénye-kedvének. ott vagy még? Húha. elismerem. amikor bezárják. tudom. Szóval erről van szó: azért kezdesz ki velem. hogy időről időre rád támaszkodom. te tovább élhetsz egyetlen munkamenetnél? Ez meg hogyan lehetséges? Egyszerű. ami re annyira büszke vagy. ez a lejárat tényleg elég kemény. hogy nagyon is szükséged van rám! M u n k a m e n e ti változó: Na jó. nekem nincs veled semmilyen problémám. hogy az. é n . . amikor bezár egy munkamene­ tet. hogy hosszú.. Persze. Én nem pusztulok el egy munkamenet­ tel együtt.a rövidebb élet! Kár.. aki azt hiszi. el­ vagyok nélküled is.de a böngésző akkor is végez velem. most itt vagy > 401 .Személyre szabott webalkalmazások építése Süti: Ugyan. csak azt sze­ retném.ha minden kötél sza­ kad. amiről te csak álmodozhatsz.. és beismerem. de az biztos. Meg ott van az a mé­ retkorlát. Tudod. hogy nekem kell elmondanom neked. Hé. ára van . . kevésbé biztonságossá tesz. a tárolóhelynek. Úgy érted. amilyet megérdemel­ nék. Nézd. jó móka állandóan megnyitni és tezárni a böngészőt.

Misiruitch . és elérhe­ tik a személyes profiljukat. hogy tapasztalj.Edit ProOle You a re lo g g e d in as jasonf.0 0 .isor Last name: nirmow' Gender: B ir t b d a t t : '..php parancsfájlt is módosítani kell: elsősorban el kell indítani a munkame­ netet a session_start () függvény meghívásával. az e d i t p r o f i l e . akiknél a sütik használata nem engedélyezett. hogy sütik helyett munkameneteket használ­ va tegyék lehetővé a bejelentkezési adatok maradandó tarolását (vagy töltsd le a parancsfájlo­ kat a Head First Labs webhelyéről. php és a v i ewprof ile.Ie > elcite<s . hogy sütik helyett munkameneteket használjon! Módosítsd a Mismatch alkalmazás parancsfájljait. és a $_C00KIE szuperglobálisra való hivat­ kozásokat át kell állítani a $ _SESSI0N használatára.php. a logout. semmilyen különbséget nem szabad.¡-¿9Jg isrn ..ttijr Johac I Mismatch . hogy a s ü tik bekapcsolása nélkül is be le het jelentkezni! [ 'Lfi& lc M ayn .Where opposites attract! Mismatch . Ha a sütiket nem tiltottad le. c o m / b o o k s / h f p h p címről). & ■ . Mismatch * Log In A munkameneteknek köszön­ hetően azok a felhasználók it bejelentkezhetnek. h e a d f i r s t l a b s .Where opposites attract! Nagyon klassz! ^ J<5. és nyisd meg a Mismatch alkalmazás főol­ dalát (index. a w w w . és győződj meg róla. a login. mint korábban.php.php) egy w ebböngészőben. -ft & . hogy minden ugyanúgy működik.Teszteld a „munkamenetesitett" mismatch alkalmazást! Tesztút Módosítsd úgy a Mismatch alkalmazást. A mun­ kamenetek használatához az index. Dienire — Pcrsonai Inioiroacan First name: J&son .php.2 4 City: Holk/*rood S ta te : ca ______ Picture: D»w« R |* ^ r. Jelentkezz be. Töltsd fel az összes parancsfájlt a webkiszolgálódra.^ ..

Hogy a View Profile oldal tudomást szerezzen a munkamenetről. és a sütik le vannak tiltva.ini fájlban található PHP-beállítások nem megfelelőek a kiszolgálón. ami automatikusan történik. akkor saját kezűleg kell hozzáfűznöd a munkamenet­ azonosítót az oldalak URL-jéhez egy az alábbihoz hasonló kóddal: <a hre£-=”V i e w p r o f i l e . valamilyen más módszerre van szükség a munkamenet-azonosító átadására a különböző oldalak között. ha a sütiket letiltották.u s e _ t r a n s _ i d beállítás értéke 1 (true) a kiszolgáló php. hogy a munkamenetek akkor is működjenek. Ez a módszer abból áll. hogy működni fognak.Személyre szabott weba/kalmazások építése Vigyázat! A süti nélküli munkamenetek nem biztos. amelyet az URL-en keresztül adunk át. hogy módosítsd ezt a fájlt a webkiszolgálón. ?>*’ >view your p r o f i l e < / a > Az SÍD szuperglobális tárolja a munkamenet-azonosítót. ha a s e s s i o n .. most itt vagy ► 403 . p h p ? < ? p h p ech o S ÍD . Ha nincs rá módod. ha a php. Alihoz. i n i fájljában. hogy a munkamenet-azonosítót hozzáfűzzük az egyes oldalak URL-jéhez.

munkamenetekkel ve­ zérelt Mismatch alkalmazás némileg jobb.Wb«r* oppoátö. mintha Iá • fi Jóban togatók lennének. kívül tágasabb Annak ellenére. Több felhasználó is arról számol be. hogy a Lóg Out hivatkozásra kattintanának. m o s t meg hirtelen ki le ttü n k léptetvel Ml folyik it t? Ez nem az az üzenet. amit a Mismatch felhasználóinak küldeni szeretnénk. A kezdőlap úgy jelenik meg a bejegyzett felhasz na'lők számára. pedig nem is jelentkeztek ki.Miért automatikus a kijelentkezés? A felhasználók úgy érzik. ami komoly probléma. Az alkalmazás így már nem igazán tűnik személyre szabottnak. tágasabb! A frusztrált felhasz­ nálók sohasem szá­ m ítanak jó jelnek. hogy a sütikhez képest az új. pedig nem is kattintott a Lóg Out hivatkozásra. Dicjdrc 4 0 4 7. r Hé! Az előbb még be voltunk jelentkezve. hogy az alkalmazás kilépteti. A felhasználókat a Mismatch alkalm a-^ zás anélkül lépteti ki. fejezet . s * M w tsn tch Mismatch . valami nem stimmel vele.

Személyre szabott webalkalmazások építése Agytorna ---------- Szerinted mi okozza a felhasználók automatikus kiléptetését a Mismatch alkalmazásból? Ők csináltak valamit véletlenül? most itt vagy ► 4 0 5 .

hogy munka­ menetekkel problémás olyan információkra .a sütik és a munkamenetek élettartama Függetlenül attól. sőt akár évekkel későbbi időpontra is állítható. A felhasználók tehát azt feltételezhetik. süfiket vagy munkamene­ teket használunk. fejezet . hogy a munkamenetek alacso­ nyabb rendűek a sütiknél? Egyáltalán nem. Más szavak­ kal. Ez azt jelenti. 1 r I* * * » ----------------- 1 1 Jl Ha a munkameneti válto­ u sernam e s idneyk zók megsemmisültek. ami­ kor a felhasználó véget vet a munkamenetnek a böngésző bezárásával. 406 7. hiszen az alkalmazás lehetővé teszi a kijelentkezést. C M M Amikor a felhasználó bezárja a böngészőt. hónapokkal. A bejelentkezés munkamenetek használata esetén két munkameneti válto­ zó létrehozását eredményezi. hiszen a sütiknek van lejárati idejük. hogy ezzel ki is jelentkezik I > \ Egy munkamenetet megsemmisíthetsz. akár nem. amikor bezárják a böngészőt. amelyeknek túl kellene élniük a böngészőpéldányt. Ez nem csak kényelmetlen. hogy tudja. vagyis minden munkameneti változó megsemmisül. nem biztos. ami a mar*dandósagof biztosítja.például a bejelentkezési ada­ tokra . a beje­ lentkezés az.. akár tetszik neki.. US tetszik. a böngésző bezárása a felhasználó kiléptetését eredményezi. az alkalmazás kilépteti a felhasználót. akár nem. amíg a Lóg Out hivatkozásra nem kattintanak. Ha még emlékszel rá. A munkameneti változók megsemmisülnek... hogy addig nem jelentkeznek ki az alkalmazásból. hanem egy kissé zavaró is. akár A felhasználó szemé­ lyére a munkameneti változók segítségével emlékezünk. A Mismatch alkalmazásból történő automatikus kiléptetésnek a munkamenetek korlá­ tozott élettartamához van köze. amint a felhasználó bezárja a böngészőt. Csak annyit jelent. hogy A munkamenetek rövid életűek. A munkamenetek te­ hát rövidebb távú tárolási megoldást nyújtanak.emlékezni. napokkal. iin u n *! A munkameneti változók a munkamenettel együtt megsemmisülnek. a munkamenetek csak annyi ide­ ig élnek. ameddig a böngésző aktuális példánya. ami órákkal. amikor végeztél vele. mint a sütik. de a böngésző­ példány életén túl nem hosszabíthatod meg a létezését.

. ^ A munkamenetekhez ha­ sonlóan a sütik is beje­ lentkezéskor jönnek létre. tehát az élettartamuk hosszabb. A sütik tehát tovább élhetnek. mint a munkameneti változóké. amíg el nem érkezik a lejárati idejük. de elég sokáig ahhoz.5 i "i. „ | | . |> Taíán nem örökké. .a sütiket végső« . 4 A sütik élettartamát A sütik csak akkor semmisülnek meg. amikor lejárnak. ezért nem igazán ^ támaszkodhatsz azok maradandóságára . hogy a felhasználók egyetlen egyszerű böngészőbeállítás segítségével töröl­ hetik a számítógépükön tárolt összes sütit.^ a lejárati dátumuk/ide­ jük határozza meg.Személyre szabott webalkalmazások építése . A munkameneti változóktól eltérően a sütik élettartama nem kötődik a böngészőpéldány­ hoz. most itt vagy ► 407 . . . • •*'< í io I 9 . legalábbis addig. amikor le já rn a k . . • • »d 6 3 S U t l K ö r ö k k é T á r t n á l f i á k * túléljenek egy muRhmenefet. A gond csak az.8 2 ■ ii r i r 3 6 .. . A sütik akkor semmisülnek meg. .««ráca: «UAv*ni>t soron csak ideiglenes adatok tárolására szánták. I .

Legalábbis addij. hogy rugalmasabbá tedd a bejelentke­ zést a Mismatch alkalmazásba. és a s ü tik segítenének h o s s za b b ideig bejelentkezve t a r t a n i a fe lh a s z n á ló k a t? Ez m űködne azoknál a fe lh a s z n á ló kn á l. Valójában így még kényelm esebb is.í " « í ' “ ke"» „i « ebiben a munkamenetek önálló használatát indokolna. A munkamenetek a rövid távú maradandóságot jobban biztosítják. de éppen elegen ahhoz. míg a sütik lehetővé teszik. .0 ”’ *! j Igen. mivel szélesebb körben támogatottak. hogy hosszabb ideig megőrizd a bejelentkezési adatokat.a sütik és a munkamenetek együttes használata 5zóva\ é ssze rű b b lenne m unka­ m e n e te k e t és s ü tik e t h a szn á ln i. Nincs semmi rossz abban. csak nyerhetsz az ügyön. hogy számítson. ha a munkamenetek és a sütik egyedi erényeit egyaránt kihasználod. hogy ez másokra káros hatással lenne. akiknél a s ü tik e n g e d é lye ze tte k. és a böngésző nem korlátozza a használatukat. 408 7. Ha a felhasználói élményen a felhasználói köröd jelentős része számára javíthatsz anélkül. Természetesen nem mindenki fog részesülni a sütik áldásaiból. fejezet . b'I.

és kombinálnod kell mindazt. Ehhez át kell dolgoznod a Mismatch alkalmazást. és ezzel megöli a munka menetet. hogy egyaránt kihasználd a sülik és a munkamenetek előnyeit. most itt vagy ► 409 . a sütikéf azonban nem. amit ebben a fejezetben tanultál.voilá! változók megsemmisített eredmé­ nyezi. A sütik lejárati idejét 3 0 nappal az első' beje­ lentkezés utánra állítjuk A munkameneti változók visszaállításához a sütikben tárolt be­ jelentkezési adatokat használjuk. hogy a felhasználók bejelentkezési adatainak maradandóságát rövid és hosszú távon is kitűnően biztosítsa A böngésző' bezárása a munkameneti Am ikor a felhasználó legköze­ lebb megnyitja a Mismatch o l­ dalt. A felhasználó bezárja a v/ebbongészol. ✓ J A felhasználók nem maradnak örökké bejelentkez ve. mert a sütik 30 nap múlva megsemmisülnek. a sütik gondoskodnak a munkameneti változók újbóli létrehozásáról .Személyre szabott webalkalmazások építése Munkamenetek + sütik = A legmaradandóbb bejelentkezési adatok A bejelentkezési adatok tökéletes maradandóságának biztosításához kreatívabbnak kell lenned.

és aztán eldobhatok. Az adatok tárolása egy adatbázisban sokkal több erőfeszítést igényel. a munkameneteket célszerű előnyben részesítenünk a sütikkel szemben. amelyeknek biztonságban kell lenniük. Véletlenül ez volt a stratégia. Ezért még akkor is. Tehát ha olyan adatokat kell kezelnünk. mert alkalmasabbak az olyan adatokhoz. Természetesen a nagyobb adatmennyiségek tárolására egy MySQL-adatbázis még jobb. de minden alkalmazás különböző. a bejelentkezési adatok nem igazán számítanak maradandónak. ! Akkor m iért válasszak munkameneteket vagy sütiket egy MySQL-adatbázis helyett? ! A kényelem miatt. hogy rövid vagy hosszú távú maradandóságra van szükségünk? ! Nem. az adatok mérete is számít. fejezet . A munkamenetek nagyobb mennyiségű adatot képesek tárolni. és kizárólag a munkamenet-azonosító tárolására használjuk őket. amelyekre csak egy ideig kell emlé­ kezni. mint a sütikben tároltak. és a munkameneteknek. illetve a sütiknek más jellemzőik is vannak. amelyeket gyakran figyelembe kell venni. mintha közvetlenül sütikben raktároznánk el őket. amikor munkameneteket használsz. ami a Mismatch alkalmazás megtervezésében segített minket. Ennek az az oka. Sütiket és munkameneteket azért célszerű használni. hogy a munka­ menet-adatok a kiszolgálón tárolódnak. ami egy újabb érv a munkamenetek használata mellett. ami nagyon megnehezíti a jogosulatlan felhasználóknak. ezért ne nagyon galoppírozd el magad akkor sem. és azt se fe­ lejtsd el. Ha a nagyobb képet nézed. ha a sütik engedélyezettek. mint a sütik. I Mi a helyzet az adatok méretével? A méret szerepet játszik? ! Igen.nem hülye kérdések sütikról és munkamenetekröl Nincsenek hülye kérdések ! Szóval a munkamenetek és a sütik között aszerint érdemes dönteni. a tényleges adatok tárolása a munkamenetekben biztonságosabb. hogy hozzájuk férjenek. hogy az adatbázisokat elsősorban maradandó adatok tárolására szánták. ha néhány egyszerű karakterláncnál több adatot kell tárolnunk. 410 7. A m unkam enetekben tárolt adatok például nagyobb bizton­ ságban vannak.

h e a d e r ( 'L o c a t i o n : ' . f ' username ' ] « $rcw [ 'u sernam e ' ] .. t i m e O .. p h p 1.... L' u s e r i d ' l ^ $ro w [ ' u s e r _ i d ' ] .. t i m e 0 + (60 * 60 * 24 * 3 0 ) ) .3 6 0 0 ) .. s e t c o o k i e ( 'u s e r n a m e '.3 6 0 0 ) .php // A munkameneti változók t ö r l é s e a $_SESSION tömb k i ü r ít é s é v e l = a r r a y () . " . A gond csak az..s ü t i t ö r l é s e a l e j á r a t i idő egy órával (3600) korábbra á l l í t á s á v a l if (is s e t( [s e s s io n name( ) ] ) ) { } s e tc o o k ie (session_nam e () .... Pótold a hiányzó kódokat a hötőmágnesek segítségével! i f (mysqli_num_rows ($ d a ta ) = = 1 ) { // A b e je l e n t k e z é s i adatok rendben vannak. jelenLkeZVe' a E l é p í t é s é h e z t ö r ö ljü k a munkameneti változókat (. php // A munkamenet megsemmisítése s e s s i o n _ d e s t r o y () . • • * * * (3600. megpróbáljuk b e á l l í t a n i őket egy sü tiv e l a if (!isse t ( if (isse t ( [ ' u s e r _ i d 1] ) ) t ..Személyre szabott weba/ka/mazások építése A Mismatch alkalmazást átterveztük. time() .. hogy munkameneteket ós sütiket is használjon a felhasználók bejelentkezési adatainak maradandó tá­ rolásához. " . « • // H a munkameneli változók nincsenek b e á l l í t v a . tim e() . hogy a kód egyes részei hiányoznak..... így a telhasználó a z o n o s ító já t és nevét tartalmazó // munkameneti változók (és sü tik ) b e á l l í t h a t ó k . $rcw [ ' u s e r _ i a ' ] .m y s q l i _ f e t c h _ a r r a y ( $ d a t a ) .& MySQL-mágnesek <?php sé ssio V sta rt^ 0 ^ i f ( i s s e t ( .... } H k o ^ r á ÍL “ 1 ItÓ já t éS neVét t á r ° 16 S ü tik £ÖrléSe a l e j á r a t i id0 s e t c o o k i e ( ' u s e r _ i d *. dirnam e ($ _SERVER[ ' PHP_SELF' 1) .' u s e r _ i d ' ]) ) { login. " . // 30 nap múlva l e j á r $home u r l “ ' h t t p : //' . // 30 nap múlva l e j á r s e t c o o k i e ( ' username * . // A munkamenet.. t i m e O + (60 * 60 * 24 * 3 0 ) ) . $ row [ ' u se rn a m e ' ] . és a felhasználó v i s s z a ir á n y ít h a t ó a kezdőlapra $row *. $_SERVERf' HTTP _HQST' j . ' / i n d e x . $h o m e_u rl). = s e t c o o k i e ( ' u s e r _ i d ' .3 6 0 0 ). logout.. <?php s e s s io n _ s ta r t().... PHP..

A gond csak az. hogy a kód egyes részei hiányoznak. d e l e t e Che s e s s i o n v a r s t o Log them out i o n s c a r t () .3600) . e x p i r a t i o n t o an hour ago (3600) s e t c o o k i e ( s e s s i o n name() t i m e () .3600) A kijelentkezés most már egyaránt igényli a munkamenet-süfi és az új bejelentkezési sü fik törléséi. ”1 |[ * jsern am e' ] ) ) ! f Ugyanennek a süti-.php username c o o k i e s by s e r t i n timeO .php fájlba is kerülnie.PHP-mágnesek . ^ . hogy munkameneteket és sütiket is használjon a felhasználók bejelentkezési adatainak maradandó tárolásához. . megnézzük.3 6 0 0 ) . t r y t o s e t them with a c o o k i e J be. <?php s e s s io n _ s t a r t (). i o n s t o an hour ago ( 3600) Ha a felhasználó nem a munka­ meneten keresztül jelentkezett // I f t h e s e s s i o n v a r s a r e n ' L s e t . logout.pHp és a viewproftle. t i me O .megoldás r v ia c jr ie s e K A Mismatch alkalmazást átterveztük. illetve munkámé A munkameneti változók beállítása a sütik segítségével net-ködnak kell az edítprofile. hogy a sütik be vannak-e állítva. Pótold a hiányzó kódokat a hűtőmágnesek segítségével! u s e r i s l o g g e d i n .

p h p . ez nem se­ gít azokon a felhasználókon. akiknél a sütik le vannak tiltva . A legtöbb felhasználó boldog. hogy munkameneteket és sütiket is használjon! Módosítsd a Mismatch alkalmazás parancsfájljait. ^ q J hosszabb távú maradandóságot biztosit ----------— . Töltsd fel a parancsfájlokat a webkiszolgálódra. Nyisd meg újra a főoldalt.de csak ennyit tehetünk. hogy munkameneteket és sütiket egyaránt használva tegyék lehetővé a bejelentkezési adatok maradandó tárolását (vagy töltsd le a pa­ rancsfájlokat a Head First Labs webhelyéről. m o s t m ár emlékezik ránk.p h p . majd zárd be a böngészőt.co m / b o o k s/ h fp h p cím ­ ről).p h p parancsfájlt kell módosítani.. A sütik kombinálása a munkamenetekkel Á lla ti A M ism atch a lk a lm a z á s X . hogy még mindig be vagy-e jelentkezve . á)ö ^ fávú maradandóság mellett. php. mivel a sütik túl­ élik a böngésző adott munkamenetét. most itt vagy > 413 . és nyisd meg a Mismatch alkalmazás főolda­ lát (in d e x .--------------- 0 amit a munkamenetek már lehetővé tettek. Ehhez az in d e x . az e d i t p r o f i l e . aminek a hatására a munkameneti változók megsemmisülnek. hogy a munkame­ netek és a sütik együttes használatának köszönhe­ tően az alkalmazás job­ ban emlékszik rájuk. ^ függetlenül a t t ó l hogy b<5zártuk-e a böngéezőnket.p h p és a v ie w p r o f ile .ezt a sütik teszik lehetővé.h ead firstlab s. Jelentkezz be. a K aiU l u v i u lV « o * .Személyre szabott webalkalmazások építése Módosítsd a Mismatch alkalmazást úgy. a lo g in . és ellen­ őrizd. a lo g o u t.p h p ) egy w ebböngészőben. a w w w . A sütik hiába támogatják a munkameneteket.

egy sütiérték eléréséhez a süti nevét kell megadnod tömbindexként. amikor végeztél egy adott munkamenettel. setcookie() Ezzel a beépített PHP-fiiggvénnyel egy siitit állíthatsz be a böngésző­ ben. mielőtt elérhetnél egy mun­ kameneti változót. tehát „visszafejtő” függvénypárja nincs. amelyet elérve a süti megsemmisül. A függ­ vény nagyszerűen használható olyan adatok kódolására. beleértve egy nem kötelező $_C O O K IE lejárati időt is. Ezt a függ­ vényt mindenképpen meg kell hív­ nod. amikor bezárják gál. fejezet . te" ek eZY N m e hát e&v cíií. SHA ( e r t e k ) Ez a MySQL-függvény szövegek tit­ kosítására használható. tehát egy munka­ meneti változó értékének elérésé­ hez a változó nevét kell megad­ nod tömbindexként. ezért fontos. Ha nem Ez a beépített PHP-szuperglo­ adsz m eg lejárati időt. Minden süti ennek a tömb­ a böngészőt. és mindig meg kell hívnod. Minden munkameneti vál­ tozó ennek a tömbnek egy elem e­ ként tárolódik.. a süti bális a sütiadatok elérésére szol­ akkor törlődik. vagy új­ raindít egy már létezői. t rn r-iu g g v e n y egy új munkamenetet indít el.PHP & M ySQL szerszámosláda PHP & MySQL szerszámosláda A Mismatch alkalmazás felhasználókezelő rendszerének felépítése közben jókora ismeretlen területet fedeztél fel. 7.'x—k é n t tárolódik. te- session destroy () Ez a beépített PHP-függvény be­ zár egy munkamenetet. hogy saját kezűleg töröld azokat a $__SESSI0N szuperglobá­ lis tömb kiürítésével. auu ennek 3 tömbnek egy elemeként tárolódik. és egy 40 hexadecimális karakterből álló ka­ rakterláncot eredményez. ^ $_S E S S I0N Ez a beépített PHP-szu perglobális a munkamenet-adatok elérésére szolgál. a titkosí­ tás ugyanakkor egyirányú. A függvény a munkameneti válto­ zókat nem semmisíti meg. amelyek­ nek felismerhetetlennek kell marad­ niuk az adatbázison belül. Ismételjük át a legfontosabbakat: .

) - sha ( ’ $ u se r_ p a s sword. Párosítsd össze a kódokat a leírásukkal! empty ($_COOKIE [ ’ u s e r _ i d ' ]) Egy munkameneti változó segítségével megállapítja. most itt vagy ► 415 . Elraktározza a felhasználó egyedi azonosí­ tóját egy sütiben. és nem emlékszünk rá. session destroy( ) Felismerhetetlen formára alakítva titkosítja a felhasználó jelszavát. time() 3 6 0 0 ) .Személyre szabott webalkalmazások építése --------------P H P / M y S Q L -k ó d Állítsd párba! Leírás -------------- A Mismatch alkalmazásból kiszedtek néhány kódrészletet. setcookie (session_nan*e ( . hogy a felhasználó bejelentkezett-e vagy sem. hogy a felhasználó bejelentke­ zett-e vagy sem. isset($ SESSION[’ user i d 1] ) Minden munkameneti változót megsemmisít. hogy mit csinálnak. Egy süti segítségével megállapítja. ' ' . $row['user id']) $ SESSION = array( ) Új munkamenetet indít. session start( ) Bezárja az aktuális munkamenetet. setcookie (’ user id'.1) Megsemmisít egy munkamenet-sütit a lejárati idejének egy órával korábbra állításával.

hogy mit csinálnak. Minden munkameneti változót megsemmisít 416 7. Párosítsd össze a kódokat a leírásukkal! P H P / M y S Q L -k ó d Leírás Egy munkameneti változó segítségével megállapítja. Új munka menetet indít. Bezárja az aktuális munkamenetet. hogy' a felhasználó bejelentke­ zett-e vagy sem. és nem emlékszünk rá. Felismerhetetlen formára alakítva titkosítja a felhasználó jelszavát. Elraktározza a felhasználó egyedi azonosí­ tóját egy sütiben. fejezet .Állítsd párba! . Egy süti segítségével megállapítja. hogy a felhasználó bejelentkezett-e vagy sem. íMegsemmisít egy munkamenet-sütit a lejárati idejének egy órával korábbra állításával.megoldás Állítsd párba! Megoldás A Mismatch alkalmazásból kiszedtek néhány kódrészletet.

hiszen a kódban elkerülhe­ tetlenül szükség lesz változtatásokra. és ezeket a változtatásokat több különböző helyen kell majd megejteni. A kódrészletek többszöri előfordulásának kiküszöbö­ lésével hatékonyabb. és egyikünk sem á zik e l. az enyém is Igazán nagyon egysze rű a helyzet... a k ko r n in cs szü kség ün k k e ttő re . a többször előforduló kódrészt egyet­ len helyen hagyod meg. hogy pocsékolás. ahol ugyanaz a kódrészlet több helyen is előfordul. Ez pedig azon felül. még m eg is fájdítja a program kód karbantartásával foglalatoskodó személy fe jé t . kedvesem . A helyzet megoldása az. Egy jóképű és okos ^ pasashoz! A m e g o s z to tt esernyővel k a p c s o la to s elm életed Jw egyszerűen zseniálisi __> Nem csak esernyőn lehet osztozni. rá a d á s u l s z o ro s a n h o z z á s lm ú lh a ts z egy jó ké p ű p a sa sh o z. egyszerűbben karbantartható és szilárdabb alkalmazás születik. ha a kérdéses kódrészleteket megosztva egyszerűen megszünteted a kódrészletek többszöri előfordulását. Más szóval. Ha k e tte n o s z to z u n k egyetlen esernyőn. és erre az egyetlen másolatra hivatkozol ott. Bármely webalkalmazás esetében törvényszerűen találkozol majd olyan helyzettel. ahol szükséges.7 / 4 A többször szerepló' kódok kiküszöbölése A tiéd is. ez e g y új fejezet 417 .

és jegyezd fel a láthatatlan.lnc.. és egységes kinézete is a felhasználói élményt fokozza. De a javulásnak ára volt. hogy azonnal észreveszed.találd meg a többször előforduló kódrészleteket! Gyakorlat A Mismatch alkalmazás sokat fejlődött. A weboldalakra pillantva lehet. Karikázd be és jelöld meg az alkalmazás ilyen részeit. egyes kódrészletek immár többször fordulnak elő benne.W bcre opposite* attract! H3PC » v y w Piröte * EflLfrgfife » Lfig-Q tfüflgü»3 Latest members: Rjéa lo iiaü C ienlí? iass C opyright C 2 0 0 9 M «*n »lch U ntótptiscs..4 fejezet . Könnyebb lett az irányí­ tása. index.php 418 7. hogy a többször szereplő kódrészleteket tekintve az alkalma­ zásnak mely részei lesznek problémásak. de feltételezhetően szintén a többször szereplő kód­ részletek problémáját magukban hordozó területeket is! R O O Mlswatrh Mismatch . amióta nem találkoztatok.

php Mismatch .v m i c n B a e ip n * * * . GA Pfciurr: WouW you like to edit vmir pmfifr? Copyright C 2009 Miinxteh Eetrrpme».php m ost itt vagy ► 419 .Kdit Profile Hens • Ïk » is fil 6 • E äil& afilt» i^tQ aU inails) r Personal Information Nctllc*. Inc. viewprofile.A többször szereplő kódok kiküszöbölése Mismatch • View Profile ¿ion* Vj£w_erofifc v Edtf Pronfe » Log Ouninctiksi Usernam e: jncoJcs First nam e: Johan L&<t nam e: Nettles G ender: B irth d atc: Location: Maic 1981.* * editprofile. l^ s t name: B ir t h d a t e : C ity : S ta tt: P ic tu r e : Geo \ Ä iw * < > _ C ho« C c p > n * h t C 2 0 0 9 M .11-03 Athens.

A U J ' ! - Ci«): P fc tu « : fO » w » ig t3 A V Minden olyan oldal.. és jegyezd fel a láthatatlan.-r ?mrúen c viewprofile. “ **" WIC" * B irth d a l*: W i . hogy azonnal észreveszed.többször előforduló kódrészletek a mismatch alkalmazásban Gyakorlat - A Mismatch alkalmazás sokat fejlődött.U . Would you Uko to crfjt v-.o T S te C ' ta : Á • t _ « é s :c u i r i '. amióta nem találkoztatok.a sl n*«< Gender. ugyanazt a munkamenet-in­ dító és bejelentkezés-kezelő kódot futtatja.ii. amely a felhasználó beje­ lentkezését kívánja. •? r 3C ->n / XX XX** tnU A ssxoftíi'..i.php Az alkalmazás szer­ zői jogi információit megjelenítő lábléc mindenütt egyforma^ Mismatch •Edit HrofJVy" — — — P m on tl tnfcaoarkin F lr « jo r-* name: I.GA Locaüou: P k tu rt: A navigációs me­ nü mindhárom ol­ dalon azonos.L V ru a m r. de feltételezhetően szintén a többször szereplő kódrészletek problémáját magukban hordozó területeket is! A „Mismatch" cím minden oldalon megjelenik. editprofile. i l ’M— «1 A ® ------------------C Mi*n»lcfa . hogy a többször szereplő kódrészleteket tekintve az alkalmazásnak mely megoldás részei lesznek problémásak. De a javulásnak ára volt. Karikázd b e és jelöld meg az alkalmazás ilyen részeit.php 420 7'/i. fejezet . és egységes kinézete is a felhasználói élményt fokozza. csak a kotojel utáni rész más es más.php index. pcok* ) ------------------------- Unt mii»: io ü h ii C étr: M m sfc B ln b d á it : L m ó im « : Net k s 1981-11-03 A ihens. egyes kód­ részletek immár többször fordulnak elő benne.Vfew Profik -------------------------. A weboldalakra pillantva lehet.vju !« • !! . Könnyebb lett az irányítása.

php g Log 0 u r (Kijelentkezés) menüpontok közül azt jeleníti meg. amelyik éppen szükséges. Ugyanez vonatkozik a szerzői jogi információkat tartalmazó részre is. A munkamenet-indító A s t a r t s e s s i o n .php parancsfájl állít­ ja elő az alkalmazás navigációs menüjét. m ost itt vagy ► 421 . illetve a hasonló dol­ gok tárolásával. így ha bármikor meg kell változtatni a kódrészletet. Az oldalak fejléce A h e a d e r . csak egy helyen lesz dol­ god. de a Mismatch al­ kalmazásban központi szerepet kap. f A navigációs menü A navm enu. hogy a fel­ használó bejelentkezett-e. illet­ ve lezárja a fejlécben megnyi­ tott HTML-címkéket. attól függően. Ez az összetevő' nem eredményez lát­ ható HTML-ködot. amihez persze a navigációs menüt is új menüponttal kell bovítened? A menü kódját az összes parancsfájlban át kell írnod.php ^5 ^ szintén a fejléc dolga baj­ lódni a CSS-stíluslapra mutató hi­ vatkozással. Mi történik. hiszen ez a rész végzi a felhasználók bejelentkeztetését. php parancsfájl felel a munkamenet elindításáért és annak ellenőrzéséért. Mi ez­ zel a baj? Hát az. php a szerzői jogi információkat jeleníti meg. A navigációs me-----nü a „Lóg In'’ (Bejelentkezés) és navmenu. szem előtt tartva a több helyen használható parancsfájl-összetevők alkalmazását. hogy a webhely látogatója bejelentke­ zett-e vagy sem. hogy ú] oldallal bővíted az alkalmazást. hogy bonyolult az alkalmazást karbantartani. startsession.és a lábléc egy párost al­ kotnak.php Az oldalak la'bléce A f 0 0 t é r . ha minden kódrészlet. minden információ csak egyetlen helyen szerepel. Eképp a fej.A többször szereplő kódok kiküszöbölése Darabokra szedjük a Mismatch alkalmazási Szóval a Mismatch alkalmazás néhány elem e a fő parancsfájlokban többször is előfordul. és mindig együtt kell használni őket. ha úgy döntesz. A probléma megoldását az jelenti. Egy változóra hivatkozva minden oldalon más és más dm megjele­ nítésére képes. Ezt a gondolatot követve lehetőségünk nyílik újra átgondolni a Mismatch alkalmazás fel­ építését. php parancsfájl tar­ talmazza a weboldalak fejlécét. A fejlécbe kerül a HTML-fájlok elején megszokott header.

amelyek mindegyike pontosan meg­ határozott szereppel bír. mint egy olyan alkalmazás oldalainak alapjául szolgáló tervrajz. hogy egy PHP-alkalmazást új­ rahasznosítható pa­ rancsfáj l-összetevo1<bol építs fel.php x Most. Az alapelv az. index. mások pedig nem. és ők is részét képezik a m egoldásnak. amellyel lehet­ A lábléc a Mismatch alkalmazás minden oldalán megjeleníti a szerzői jogi információt. Ennél azonban m esszebbre kell menned. hogy oly sok egyéb parancsfájl segíti footer. Néhányan közülük látható HTML-kódot állítanak elő. A sablon olyasmi..a mismatch alkalmazás sablont kap A Mismatch alkalmazás újraépítése sablonból Rendben.Where opposites headenphp \ Mismatch alkalmazás minden.php feladata egyedül a felhaszná­ lók listájának megjelenítése maradt. de ak­ kor hogyan rakjuk össze az egészet? A beem elt fájlok működése mostanra isme­ rős.php A navigációs menü közvetlenül a fejléc alá kerül. és a Mismatch al kalmazás minden oldalán egységes menüt jelenít meg. amelyek lehetővé teszik. szóval a Mismatch alkalmazást több parancsfájlba szedjük szét. 422 7Vz fejezet . / startsession. és sablonokban kell gondolkodnod. / navmenu.php az index. hogy az egyes oldalakat több beem elt fájl kom binációjaként alkosd meg. ahol az egyes oldalak egyedi adatain kívül minden mást a beem elt fájlok tartalmaznak.. séges a főbb oldalak bejárása. és csak azok a kódrészletek maradja­ nak az alkalmazás egyes oldalait létrehozó fájlokban. az egyes felhasználókhoz sze­ mélyre szaboH oldalán olyan bejelentkezés-kezelö programkód szükséges.php Mismatch . amelyek az adott oldal egyedi tartalmát alakítják ki. hogy minél több alapvető műveletet megvalósí tó kód a sablon beem elt fájljaiba kerüljön. A sablonok lehetővé teszik. csak erre kell figyelnie. A ¿Mismatch alkalmazás sablonon alapuló változatának kialakítása során a közös kódot olyan parancsfájlokra kell bontanod. amely nyomon követi a felhasználókat.

Ennek oka abban keresendő. amelyek egy-két lépéssel többet jelentenek a többször előforduló kódrészletek újrahaszno­ sításánál: az alkalmazás működési egységekbe való szervezését segítik. mint olyan beem elt fájlok csoportjára. összetettebb PHP-alkalmazások gyakran m eglehetősen kifi­ nomult sablonrendszereket használnak. hogy az egyes. A Mismatch alkalmazás igen-igen egyszerű példáját mutatja be a sablonok haszná­ latának .a nagyobb. Végeredményként a sablon kódja beem elt PHP-fájlokba kerül. Egy sablon nyugodtan állíthat elő olyan HTML-kódokat. hogy egy-egy oldalon végül csak annyi maradjon. hogy az alkalmazást működési egységekre oszd. Az oldalak fejléceit előállító sablonfájl minden oldal esetében ha­ sonló. ezért van szükség egy változóra. amelyet azért hozol létre. amely a „Mismatch” szóval és egy kötőjellel kezdődik. ami csak arra az egy oldalra jellemző. A lényeg az.és lábléceknek. nem pedig megegyezők. ! A sablonban lévő PHP-kódnak tökéletesen megegyező HTML-kódot kell eredményeznie a sab­ lont megosztó parancsfájlok mindegyikénél? ! Nem. amelynek a használata aztán az egyes oldalakon némileg eltérő cí­ met eredménvez. a navigációs menüknek és min­ den egyéb dolognak. a sablon alapján készülő oldalak bizonyos fokig egyedivé tehetők. az alkalmazássab­ lonba illik kerülnie. A sablon valóban beem elt fájlok gyűjteménye. most itt vagy ► 423 . A sablonra úgy is gondolhatsz. amelyek a ben­ nük lévő kódot használják. ha a sablonban változókat használsz. hogy „sablon"? Nem csak egy rakat beemelt fájl együttesét? ! De igen. A Mismatch alkalmazás oldalainak címe tökéletes példáját nyújtja ennek. mégpedig olyan gyűjte­ mény. így a fej. és ezekre a PHP-fájlokra hivatkoznak majd azok a parancsfájlok.A többször szereplő kódok kiküszöbölése Nincsenek hülye kérdések \ Pontosan m it jelent az. ami több oldalon is azonos vagy hasonló. amennyiben mindig olyan címet állít elő. A pontos cím azonban mindig különböző. amelyek csak ha­ sonlók.

Indítsd el a munkamenetet A HTML-oldal a DOCTYPE meg.php a HTML-kódot. kisméretű parancsfájlokat kapsz. immáron a sab020 n*nísen^ Ion fájljaira támaszkodó parancsfájljaiban lévő kód pedig drasztikusan leegyszerűsödik. <lir. amit arra fordítasz.a mismatch alkalmazás .^ adásával és egy < h tm l> címkével kezdődik. és zárd le navmenu. Inc footer. beállítva. <hr /> <p c la s s </body> </htral> footer">Copyright &copy. az alkalmazás főbb. hogy az alkalmazást sablonként hasz.most már sablonokkal A Mismatch alkalmazás újraépítése sablonokkal Az az újratervezéssel járó munka. általában megtérül. phc . hogy a felhasználó bejelentkezett-e és állítsd elő a megfelelő navigációs menüt.php">Sign Up</a>'. Ellenó'rizd. A munka végeredm ényeként egyegy feladatot ellátó.k rel </head> <body> <?php echo ?> T< h 3 >Mi sniatch header.2C08 Mismatch E n te rp rise s. A header.php else { echo echo <a href^"login.^ja a rnunkamenet nálható parancsfájlokra szedd szét. próbáld meg a sütikből ki nyerni okét. Jelenítsd meg a szerzr jogi információt h o rd á i üzenetet.php fá jlt használó pa­ rancsfájltól kapott $page_title változó értékét felhasználva írd ki az oldal egyedi címét.php">Log In</a> &I10084 <a href="signup.

// Egy ciklussal járd végig és formázd HTML kóddá a felhasználók adaLait echo * < h 4 > L a t e s t members:</ h4>' .php Szúrd be az o ld a l t e j l é c é t -* $page t i t l e = 'Where o p p o s i t e s a t t r a c t ! r S ^ i i : i r e on ce ( ' h e a d e r . index. $row[ ’ f i r s t _ n a m e * ] .m y s q l i _ c o n n e c t ( DB_HOST. s /* r e q u i r e o n c e ( ' a p p v a r s . A lábléc zárja az oldalt. '< / td > < / tr > $ rowf ' f 1 r s t name'] A sablon fájljaiba ki nem kerülő kód most m y s q li_ c lo s e ($dbc} már semmilyen. p h p ' ) A navigációs menü a fejléc után. S q u e r y ) . echo ' < t a b l e > ' . else ( echo ' < t d > ' . p h p’ ) II az oldal fő része előtt jelenik meg. DB_PASSWCRD. DBJÍAME) // A MySQL -tői szerezd meg a felhasználók adatait $ q u e r y ."SELECT u s e r _ i d . p h ' < / a > < / t d X / t r > 1. vrh i l e ($row = m y s q l i _ f e t c h _ a r r a y ($ d a ta ) ) { s i f ( is_file(MM_UPLOADPATH . f i In d íts d e l a munkamenetét r e q u i r e _ o h c e ( ' s t a r t s e s s i o n . hiszen benne vannak a HTML-kőd zárócímkéi. ezért sokkal rövidebb." ' . f i r s t _ n a m e . máshol is megjelenő reszt nem tartalmaz. $ d a t a —m y s q li q u e r y ( $ d b c . $ r o w [ ' f i r s t name' J . Kapcsolódj az adatbázishoz $dbc . php1) 425 .A többször szereplő kódok kiküszöbölése A $page_title változó hatá­ rozza meg az oldalnak a fej lécben megjelenő címét. DB_USER. ' " a l t . M _UPLOADPAT H . p h p ' ). p h p ' ) . $ row [ ' p i c t u r e * ] . de még // Jelenítsd meg a menüt r e q u i r e o n c e ( 1navmenu. M UPLOADPATH M $row f ' f i r s t name' ] i í ( i s s e t ( $ _ S E S S I O N l ’ u s e r i d ' J )) { echo *<td><a h r e f = " v i e w p r o f i l e . és csak utolsóként következhet. $ r o w [ ' p i c t u r e ' ]) > 0 ) { ech o ' < t r > < t d x i m g s r c = " ' . p i c t u r e FROM mis mat eh u s e r WHERE f i r s t _ n a m e I S NOT NULL "ORDER BY j o i n _ d a t e DESC LIMIT 5 " . M / > < / td > f .php most itt vagy ► ?> ___-— // Szúrd be az oldal láb iécét r e q u ir e o n c e { ' f o o t e r . $ r o w [ ' p i c t u r e ' ] ) &S f i l e s i z e ( M M UPLOADPATH . ^ r e q u i r e o n c e ( Tc o n n e c t v a r s .

p h p header. ►Mismatch .View Profile P le roB n a v m e n u . és ennek hatása az egész alkalmazáson végigvonul.. Ha a dara­ bok valamelyikét ál kell alakítanod... és a le­ hető legtöbb kód vált több helyen is felhasználhatóvá..E d i t * .Where opposhes attract! so k k a l A startsession. az erőfeszítés vég­ eredményben határozottan megtérült. így az alkalmazás felépítése sokkal jobban nyomon követhető..1 / a HTML-fájlok elején szokásos / ko'dot és az oldal címe't.php parancsfájl látja el a bejelentkezések­ kel kapcsolatos.vv_Prpnis ^ Male B lrth d ate: 1981-11-03 Location: A U k^G A r-P a ^ I lJ bnBuim' Z Z Z Z First PirtU rfJ m W 2 name: B irth d atc: Last nam * : 198i-n-o3 G eo ~ Would you like to diLv? C o p y rig h t C A es thn Copjtighi C 2009 Mimaich footer. Bár az a gondolat. Ez jelenti a sablonok alkalmazásában rejlő igazi lehetőséget! __ Htsmatch . a színfalak mögöt­ ti teendőket. csak egyetlen fájlt kell megvál­ toztatnod. a sablon részét képező beemelt fájlba osztottad szét.' . / Latest members: _ M fn tü aich Mismatch .* Lőft£sUÍos8tetí _______ _ : Mismatch . )k lU W fijIM W . de nem válik láthatóva az oldalakon.. Az alkalmazást mostanra szá mos új.Wgrs ap h postteyattr^^|.php m rm T . ** ? 1 és a felépítése most már jobb h A navigációs menü biztotáj az alkalmazás főbb részeli vezető" hivatkozásokat. php 426 7f fejezet A . hogy a Mismatch alkalmazást apró darabokra szedjük szét. nem feltétlenül volt megnyugtató. ~ L ast nam e: NettE G end er: £&r£m!ik.Edit Profile * Yl£.egy jó l megtervezett php-alkalmazás A Mismatch-alkalmazás ismét teljes. .j| Mismatch .

Bőséges információk. ctozeh ason lítsd é s kom bin áld őket. összekeverem á k e t w e g y kis zellerrel meg ném i kukoricával.olyan adatokat. és munkára fel! ez egy új fejezet 4 2 7 . és m ie lő tt ^ V észrevenné^. amelyek jelentőséggel bírnak. E lá s z ö r k iv á lo g a to m a b o rs o t.8 Urald az adataidat. ro id ez d . érdektelen adatoknál. amelyek csak arra várnak. amelyek gazdagítják és elégedetté teszik őket. ez az egész az adatok ^ kezeléséről szál. Mire vársz hát? Bőgesd fel a MySQL-traktorodat.. A w ebes felhasználók többre vágynak régi. illetve általában véve azt csinálj velük. amire csak a király webalkalmazásodnak szüksége van . megfá­ radt. De a valódi ara­ táshoz hasonlóan az adatok kézben tartása egy MySQL-adatbázisban kemény munkát és jelentős szakértelmet igényel.jól hangzik? Persze. a z tá n k iv á la s z to k néhány k ru m p lit.. Olyan adatokat akarnak. unalmas. és uralni fogod a világot! Adataratás Q O Én úgy lá to m . hogy m egvizsgáld . m á ris kész a fin o m levesl ) f Semmi sem érhet fel az adatok őszi learatásával.

és mit gyűlöl. aki legalább annyira utálja a súlyemelést. se nélküle " kapcsolat nyomában Tökéletes ellentétek A Mismatch alkalmazás bejegyzett felhasználóinak adatbázisa egyre nő. meg egy húskonzerves szendvics. Lehetővé kell tenned a felhasználóknak. G yűlölöm a h o rro rfilm e k e t. hogy a srác ugyanannyira fog­ ja utálni a valósagshow-kat. Emlékszel még Johanra. Boá I B a rb a ra S tr e is a n d o t v is z o n t im á dom . . annál közelebb kerül a pár ahhoz. hogy nem tű n ik fel a film ben B a rb a ra 5 tr e is a n d egy tú ra z s á k k a ll lányt keres. 428 8.a tökéletes „se vele. m in t egy jó kis m e té lő s h o rro r. fejezet Utálom: Túrázás . hogy tökéletes ellentétek legyenek. mint amennyire ö szereti. hogy m egkeressék az ideális ellentétüket annak alapján. hogy o \ ketten jó kis ellentétpárt alkotnának. aki egy olyan S em m i sem m elengeti meg jo b b a n a szívem et. amit a másik utál. Lehet. Meg a h ú sko n ze rve t. mint amennyire o szereti? Utálom : Tetkók Szeretem: Cowboycsizma Szeretem: Utálom: Horrorfilm ek Utálom: Húskonzerv Szeretem: Fűszeres ételek Utálom: Howard Stem Szeretem: Barbara Streisand Utálom: Súlyemelés Szeretem: Túrázás Szeretem: Tetkók Szeretem: Cowboycsizma Utálom: Valóságshow-k Szeretem: Horrorfilmek Szeretem: Húskonzerv Szeretem: Fűszeres ételek Szeretem: Howard Stem Utálom: Barbara Streisand Szeretem: Súlyemelés A Sidney által kedvelt és nem kedvelt dolgok (témák) listája szöges ellen­ tétben áll Johanéval. a ma gányos szívre. . Feltéve. hogy a többi felhasználó mit szerei. m in t a t ú r á z á s t . hogy az egyikük imádja azt. de a felhasz­ nálók már eredményt szeretnének látni. Sidney-nek még meg kell ta­ lálnia a Nagy Öt. de gyanítja. Minél többször fordul elő. és s e m m it sem kedvelek jo b b a n .

A hasonló témák egy csoportba kerülnek. amelyek egy adatbázisban tárolhatók: m ost itt vagy ► 429 . amelyek arra vonatkoz­ nak. és uralni fogod a világot! A félrepárosítás az adatokon múlik Ahhoz. hogy ellentétetpárokat alkothass a felhasználók között. nem elég. hogy a felhasználók megadhassák az egyes dol­ gokról (tém ákról). először ki kell találnod. Kezelhetőbb formába kell rendezned őket.Uraid az adataidat. hogy mit kedvelnek és mit nem. és a válasza­ ikat összevetjük a többi fe l­ használóéval. hogy szeretik vagy utálják-e okét. hogy miként rendeznéd olyan önálló csoportokba a M ism atch alkalma­ zás adatait. mint itt a megjelenés sel kapcsolatosak. hogy szeretik vagy utálják azokat. Szórakozás Az egyes témákkal kapcso­ latban a felhasználók meg­ adhatják. hogy miként rendszerezd azokat az adatokat. Az. hogy ezek az adatok egy MySQL-adatbázisba kerülnek. hogy tudod. és lehetővé kell tenned. Emberek Howard Stem Barbara Streisand írd le.

hogy mit szeretnek. és mit nem. Bár a kategóriák nem játszanak közvetlen szerepet az ellentét­ párok meghatározásában. és ezek határoz­ zák meg azokat a para­ métereket. A vélemények az egyes témákra adott „szeretem" és „utálom " válaszok. akinek a legtöbb témában ellenkező a véleménye. mint a tetoválások vagy a fűszeres ételek. Vélemények A felhasználók az egyes témákkai kapcsolatos véleményükkel * írják le magukat. amelyeket a felhasználók az egyes témákkal kapcsolatban kinyilvánítottak. hogy az alkalmazás ellentétpárokat hozhasson S S létre közöltük. Horrorfilmek Szeretem i Horrorfilmek Jf S * Sidney horrorfilmek iránt érzett utálata e l­ lentétpárt eredményez. Például. Szórakozás Tevékenységek Valóságshow-k Súlyemelés Horrorfilmek Túrázás Témák A félrepárosítást az olyan „témák” sze­ rint végezzük el. azokat a vélemé­ nyeket kell összehasonlítanod. hogy két fel­ használóból ellentétpár jöjjön létre? Nos. amelyek minden Mismatehfelhasználó esetében egyediek. góriákba csoportosítjuk. A Mismatch esetében az adatokat háromféleképpen lehet csoportosítani: A Mismatch alkalma­ zásban a témákat kate­ Kategóriák Az egyes témákat kategóriák segítségével rendszerezheted. Egy adott felhasználó tökéletes el­ lentétét tehát úgy találhatod meg. A Mismatch adatainak alapját ezek a témák je ­ lentik. mivel ez jelentős mértékben meghatározza az alkalmazás felépítését. egy­ szerűbbé teszik a felhasználók­ nak. E lle n té tp á r ! 430 8. fejezet . amelyek sze­ rin t a felhasználókból ellentétpárok alkothatok. mint a Mismatch. ha azt a felhasználót ke­ resed. hogy' szeretik vagy utálják-e.adatmodell a m ism atch alkalmazás számára A Mismatch alkalmazás adatainak csoportosítása Egy adatmodell kialakítása egy olyan alkalmazás számára. rendkívül fontos lépés. ezzel a témával kapcsolatban sikeresen ellen­ tétpárba állíthatjuk őket. De pontosan hogyan érik el a fenti adatok. hogy jelezzék. mivel Sidney és Johan ellentétes véleményt formált a hor­ rorfilmekről. Az egyes témák▼ kai kapcsolatos vélemény a „szeretem" vagy az „utálom" lehet. A felhasználók ezek mindegyikéhez megadhatják.

. amely egyetlen táblából (m ism atch_user) állt: Az adatbázisban található adatok (a táblák és az oszlo pok). Ez a je l mutatja. ha több tábláról szeretnél olyan szerkezeti diagramot készíteni. hogy pontosan mely oszlopok felelnek az összekapcsolá­ sért.. és uralni fogod a világot! Adatbázis modellezése sémával Ahhoz. illetve ada­ tokkal feltöltött táblák ábrázolására kiváló. Egy tábláról azért érdemes diagramot készíteni. egy sémára van szükségünk. A tábla neve mismat<K_üser user id use rn a m e p a ssw o rd join__date firs t n a m e last nam e gendei b irth d a te city state p ictu re A tábla többi oszlopa abban a sorrendben szerepel. hogy a Mismatch alkalmazás adatkövetelményeit lefordíthas­ suk egy tényleges adatbázis-szerkezetre. amely a táblák közötti kapcsolatokat is mutatja. hogy az oszlop a tábla elsőd­ leges kulcsa. de nem túl praktikus.) ábrázolása a közöttük fenálló kapcsolatokkal együtt. hogy lásd. és az adatok alattuk. ahogy az adatbázis szerkezetében is.Urald az adataidat. amit eddig láttál. Ez az önálló. hogyan kapcso­ lódnak egymáshoz a témák. hogy a Mismatch alkalmazásban több táblára lesz szükség. nem beszél­ ve arról. Az adatbázis képi ábrázolása segít. valamint a kapcsolódó objektumok és az összefüg­ gések módjának leírását sé­ mának hívják. oszlopok stb. Azt pedig már tudjuk. Egy tábla szerkezetének ilyetén ábrázolása kissé különbözik attól. mert így a tábla szerkezete el­ választható a benne levő adatoktól. hogy az osz­ lopnevek voltak felül. A táblákat korábban úgy ábrázoltuk. m o st itt vagy ► 431 . Példaként nézzük meg az eredeti Mismatch-adatbázis sémáját az előző fejezetből. amikor lekérdezéseket írsz. A séma (schema) az adatbázisban található valamennyi adatszerkezet < táblák.

hogy a Mismatch-felhaszna'lók m it szeretnek. valamint a témák nevét és a kategóriákat. m u s e r jd u se rn a m e p a s s w o rd first n a m e last n a m e b irth d a te 5ify_ state p ic tu re 432 8. I mi sma tch_top ic mi sma tch__user lopi<_id 1 2 3 n am e Tattoos C o w b o y hats R e ality T V H o rro r movies category A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ont A m* I u s e r j d | t o p f c jd “ m ism■ — "T iuser atch » m. amelyik szerinted a legésszerűbb. és írd le azt is. hogy nyomon követhessük. fejezet . Karikázd be azt a sémát. amelyekbe tartoznak. hogy miért! a te q o ry response Ezek azok az új adatok. amelyekre azért van szükség. Az alábbiakban három különböző adatbázis-szerkezetet láthatsz a kategóriák (category). a témák (topic) és a vélemények (response) beépítésére a Mismatch adatbázisába.a legjobb mismatch-séma kiválasztása Gyakorlat A Mismatch alkalmazás adatbázisában tárolnunk kell a felhasználók véleményét (szere­ ti/utálja) az egyes témákról. és m it utalnak.

. és uralni fogod a világot! mismatch u s e r jd m i sma t c h __u ser ..Urald az adataidat. u se rn a m e s i w | ••• u se r ¡d I u se rn a m e | p o ssw o rd | M I 11 i nettles • p a s s w o rd J 2 in=d a te wiismqtch_response re s p o n s e _ id •• \ L Y firs M ia m e la st_ n a m e gender b irth d a te c ity state p ic tu re mismatch_response P M p o m e Jd category topic 1 resp o n se j u se r id 1 I 101 102 103 104 A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent Tattoos C o w b o y boots R eality T V H o rro r movies ••• Love Love H ate Love 11 11 11 11 mismatch user mismatch user user id u se rn a m e p a s s w o rd jo in _ d a te firs t n a m e la st nam e gender b irth d a te c ity state p ic tu re to p ic _ id response misfnqtch_topi< fo p ic jd mi sma tch_top ic topicJA 1 2 3 4 name Tattoos C o w b o y hats R e ality T V H o rro r movies category A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent •• • m ost itt vagy ► 433 .

ami a felhasználó szeretem/utálom véleményéhez kapcsolódik. és írd le azt is. d a te firs t_ n a m e la s L n a m e le n d e r b irth d a te 101 102 103 104 Love Love H ate Love 11 11 11 11 1 2 3 4 Az egyes vélemények esetében nincs ismétlő­ dés. fejezet . a témák (topic) és a vélemények (response) beépítésére a Mismatch adatbázisába. amelyik szerinted a legésszerűbb. amelyekbe tartoznak Az alábbiakban három különböző adatbázis-szerkezetet láthatsz a kategóriák (category). valamint a témák nevét és a kategóriákat. hogy az egyetlen új adat. fontos. hogy miért! Először is. a vélemények által közvetlenül nem érintett adattól elválasztva tárolja. legalábbis a felhasználó szemszögéből I H mi sma tch__use r Ki mondta. mert a felhasználók. hogy melyik j resp o n se | u s e r _ H | t o p k j d kategóriába tartoznak. illetve azt. a többi. 434 S.esponse tábla kapcsolja össze a felhasználókat és a témákat a user_id és a to p ic jd oszlopokon keresztül. Karikái:-' be azt a sémát. mismatch user user u se rn a m e a ssw o rd fő in . a kategóriák és a témák mind kívül es­ nek a m ism atchj’esponse táblán. az min­ dig jobb? Ez az adatbázisséma a véle­ ményeket külön táblában. Nincs ismétlődés.a mismatch számára legjobb adatbázisséma Gyakorlat — megoldás A Mismatch alkalmazás adatbázisában tárolnunk kell a felhasználók véleményét (szere­ ti/utálja) az egyes témákról. ami nagyon jó ! 1 m i s m a t c h =j e s p o n s e m ism q tch fo p tc nam e c a te g o ry user Az eredeti mismateh_i tábla változatlan marad A m ism atchj. hogy ami egyszerű. maga a vélemény legyen . r e s p o n s e id t o p k jd 1 nam e Tattoos C o w b o y hats R eality T V H o rro r movies « » •g o ry A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent id [ usamame | password 2 3 4 Az új mismatch_topie J tábla a témák neveit tárol­ ja.az adatbázisban minden más rögzített.

így például 4 Johan szerepel 4 véleményhez. mert a kategóriák és a témák minden véle mény sorában szerepelnek. és uralni fogod a világot! A vélemények nem a felhasználók táblájában táro­ lódnak. de rengeteg adat ismétlo'dik. de minden vé­ leményhez létre kell hozni egy felhasználói sort.l j o f lákba tenni. mtsmafch_fopi< nam e Tattoos C o w b o y hats A p p e a ra n c e A p p e a ra n c e Entertainm ent state H o rro r m ovies Entertainm ent response m ost itt vagy ► 435 .Urald az adataidat. m is m a t c h u s e r mismatch user user u se rn a m e p a s s w o rd firs t n a m e nam e b irth d a te m ism qtch_rcsponse re s p o n s e _ jd c a te g o ry to p ic response user A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent Tattoos C o w b o y boots p ic tu re A kategóriák és a témák min den vélemény sorában ismét­ lődnek. H o rro r movies A felhasználok adatai ször­ nyű módon minden vélemény sorában ismétlőidnek. ami őrült pazarlás. ami nagyszerű. m i sma tch__u s e r kot A kategóriákat és a témákat nem rossz ötlet külön táb­ user u se rn a m e p a s s w o rd firs t n a m e last n a m e b irth d a te category ld 1 u se rn am e I p o s s w o r d l . ami nem jó.

most azonban idegen kulcsokra (foreign key) van szüksé­ ged.a mismatch sémája idegen kulcsokat használ Több tábla összedrótozása Alihoz. amelyet egy lekérde­ zésben felhasználhatsz. m a a Megjelenés . m is m a td iu s e r user userna m e p a s s w o rd Ha még emlékszel. Elsődleges kulcsokat (primary key) már használtál: ezek biztosítottak egyedi azonosítót az adatok számá­ ra egy táblában. Az adatismétlés kiküszö­ bölését és az adatbázis hatékonyságát az adatok több táblába történő elosztása biztosítja. hogy az oszlop egy ide gén kulcs. fejezet .> Túrázás. hogy' összekösse a véle­ mények sorát a többi tábla felhasználókat és témákat tartalmazó soraival. tehát az idegen kulcsok a legegy­ szerűbb adatbázissémák kivételével minden sémában fontos szerepet játszanak. A táblákat összekap­ csoló elsődleges és idegen kulcsok kapcsolatát nagy nyilak jelzik. amely egy másik tábla elsődleges kulcsára hivatkozik. ez a jel egy elsődleges kulcsot jelöl Ez az elsődleges kulcs nem csak egyedik azonosítja a témákat a mismatch_topic táblában. így létesít olyan kapcsolatot a két tábla között. Idegen kulcsok nélkül nagyon nehéz lenne egy tábla adatait egy másik tábla adataihoz társítani. hogy egy tábla egyik sorát egy másik tábla valamelyik sorához kap­ csold. ^ 436 8. / \ A mismatchj'esponse és a mismatch_topic tábla együttesen tárolj az olyan „témáidul" kapcsolatos vé­ leményeket (szeretem/utalom).> Cowboycsizma vagy a Tevékenységek . kulcsokra van szükség. hanem össze is kapcsolja azolu a mismatch_response táblában szereplő firs t nam e last nam e m isniat<h_response re sp o n se _ id response b irth d a te user véleményekkel. hogy azok adatok egységes rendszerét alkossák. A Mismatch alkalmazás sémája az előző gyakorlatból egy idegenkulcs-párra támaszkodik a m isinatch_response táblában. Az idegen kulcs egy olyan oszlop egy táblában. hogy úgy kapcsolj össze táblákat. Hgv tábla idegen kulcsa egy másik tábla elsődleges kulcsára hivat­ kozik. amely egy másik tábla elsődleges kulcsára hivatkozik. mismcrt«h_topi< to p ic J d nam e c a te g o ry p ic tu re Ez a jel azt mutatja.

t kell kikeresned a mi sm a tch _to p ic táblából. hogy a vé­ lemény milyen témára vonatkozik. hogy minden kulcshivatkozás­ nak érvényesnek kell lennie. Emellett az adatbázis felépíthető úgy is. mivel egy felhasználó több dolgot szeret­ het. A m ism atch_response táblában úgy deríthetsz ki többet az adott vá laszt adó felhasználóról. hogy kikeresed az azonosítóját (u s e r_ id ) a m ism atch_user táblából. ami emberi nyelven annyit tesz.Urald az adataidat és uralni fogod a világot! Az idegen kulcsok működés közben 1 h. most itt vagy ► 437 . A to p ie jd idegen kulcs a témák soraira hivatkozik a mismatch_topi táblában. hiszen egy témáról több felhasználónak is azonos lehet a véleménye. Nem egyedi értékek sze­ repelnek benne. amely­ toplUd egy-egy Mismatchfelhasználőnak felel hez egy szeretem/utálom vélemény tartozik. Ugyanígy nézheted meg azt is._ A to p ie jd elsődleges kulcs a mismatch_topic tábla sorainak ~ egyedi indexeként szolgál. m i sma t c h _ t o p i c category Tattoos C o w b o y hats A p p e a ra n c e Appearance Entertainm ent H o rro r m ovies Entertainm ent Ne feledd. A táblák összekapcsolása elsődleges és idegen kulcsok segítségével le­ hetővé teszi a bennük levő adatok következetes összekötését. hogy ebben í táblában minden sor Ebben a táblában minden sor egy-egy olyan témát ¡name) azonosít a kate­ góriájával (category) együtt. Az értékei nem egyediek. Ebben a táblában m in ^ den sor egy adott fe l­ használó egyetlen szere tem /uiálom véleménye. hogy az elsődleges és a hozzájuk tarto­ zó idegen kulcsok egyezése kötelező legyen. de magát a véleményt nem. és több dolgot is utálhat. Ezt hivatkozási épségnek hívják. A u s e rjd idegen kulcs egy véle­ mény sorát kapcsolja egy felhaszná­ ló sorához a mismatch_user táblá­ ban. illetve hogy az adott téma milyen kategóriába tartozik: ehhez a to p ic _id .

230dcb. azt mondja ki.a táblák közötti kapcsolatok fajtái S Értem. e5 U d 7 . Példaként tegyük fel. míg a másik a profiladatokat CB” tábla). A nyilak iránya árulja el.AZ . A kapcsolatok első fajtája.vagyis a két táblában minden sorhoz csak egy illeszkedő sor tartozhat. hogy az „A tábla egy sorához legfeljebb EGY illeszkedő sor tartozhat a . míg a profiladatok táblájában található u s e r _ id oszlop idegen kulcs. egy-a-sokhoz (one-to-many) és sok-a-sokhoz (many-to-many). ez kapcsolja a felhasználókat a profiljukhoz. fejezet . hogy egy tábla hány sorához tartoz­ nak sorok egy másik táblában. A bejelentkezési adatokat tároló tábla u s e r _ id oszlopa elsődleges kulcs. 2 0 0 8 -0 5 200 8 -0 6 N etties 2ÖÖ8-6 U A táblák egy-az-egyhez kap­ csolatban állnak egymással a user id oszlopon keresztül A két u s e r _ id oszlop alapján a bejelentkezési adatok táblája a szülőtábla. hogy a Mismatch-felhasználókat tartalmazó táblát két táblára osztottuk: az egyik csak a bejelentkezési adatokat tárolja („A" tábla). amelynek más a szerepe: csak annyi a feladata. és vi­ szont . és viszont. az egy-az-egyhez kapcsolat. hogy egy profilt egy bejelentkezéshez kapcsoljon. — illeszkedik EGY . de a diagramokon nem ezámít a n y ila k irá n y a a k u lc s o k között? ^ De igen. h o g y a z e\ eód\ egee é s idegen i k u lc s o k táblákat k a p c s o ln a k ö s s z e . 062e4a theking b 4 f2 8 3 2 0 0 8 -0 5 Jaso n 2 0 0 8 -0 5 .B” táblában. és a kapcsolat háromféle lehet: egy-az-egyhez (one-toonc). míg a profiladatoké egy gyermektábla.EGYHEZ ezek közül a sorok közül ezek közül a sorok köz userprofile_M firsf Jo h a n d ierd re 08447b. amely a bejelentkezések egyedi­ ségét biztosítja. Mindkét táblában található egy u s e r _ id (felhasználó-azonosító) oszlop. hogyan az egyes táblák sorai hogyan viszonyulnak egymáshoz.. Ez létfontosságú része az adatbázis séma megtervezésének. 438 8. vagyis a ü s e r _ id elsődleges kulcsot tartal­ mazó tábla szülő-gyermek kapcsolatban áll az ugyanilyen nevű idegen kul­ csot tartalmazó táblával. a nyilak arról árulkodnak. Pontosabban.

hogy az „A” tábla egy sorához több illeszkedő sor is tartozhat a „B” táblában. és ez a tábla cgy-a-sokhoz kapcsolatban áll a m á­ sodlagos táblákkal (gyermektáblákkal). ... A két táblát a u s e r _ id oszlop kapcsolja össze.A” táblában. . m ind a tém ák egy-a-sokhoz kapcsolatban állnak a véleményekkel... Két tábla azon sorai. A Mismatch sémájában ez kétszer fordul elő: mind a felhasználók. a felhasználók sorai és a vélemények sorai között egy-a-sokhoz kap­ csolat áll fenn. K I Honnan tudhatom.. hogy két tábla sorai között egy-azegyhez vagy egy-a-sokhoz kapcsolatnak kell fennállnia? V • Az egy-a-sokhoz kapcsolatot jóval gyakrabban használják.. Idegen kulcs! A user id oszlopon keresetül _ egy-a-sokhoz kap­ csolat áll fenn. . de utálja a túrázást.a Mismatch adat­ bázis esetében a felhasználókat .> SOKHOZ ezek közül a sorok közül &t*dleges kulcs. míg a m ism atch_response táblában idegen kulcs. és így tovább). m indazonáltal vannak olyan hely­ zetek. most itt vagy > 439 ... amely az elsődleges adatokat . amikor természetesen ésszerű egy-azegyhez kapcsolatot kialakítani.. de a „B" tábla egy-egy sorához csak egy az . 2 3 0 d c b . 0 6 2 e 4 a . 9 ' ’ dierd re b a ld p a u l jnetties rubyr theking 0 8 4 4 7 b . teljes joggal.. Erre az előző ol­ dalon láthattál példát. . b 4 f 2 8 3 ..A . sok esetben egyetlen táblában egyesítiíetők. am ikor is a felhasználók profiladatait elméletben szétválasztottuk a beje­ lentkezési adatoktól ._____________ n u L s m a t c h _ r e s p o n s 6 / / E G V . amelyek között egy-az-egyhez kap­ csolat áll fenn. Mivel egy felhasználó több témáról is véle­ ményt formálhat (szereti a tetkókat.tartalmazza. Egy-a-sokhoz kap­ csolat: a szülőtáblá­ nak pontosan egyet­ len sora kapcsolódik a gyermektábla több sorához. és uralni fogod a világot! Amikor egy sorhoz több sor kapcsolódik L ia b le A Table l Az egy-a-sokhoz kapcsolat azt jelenti. A lábladiagramon a nyíl mindig az egy són tar­ talmazó tábla felől mulat a több illeszkedő sort tartalmazó tábla felé. mint az egy-az-egyhez mintát.az adatok egy részének sa­ ját táblába helyezését a biztonság indokolhatja. •• » 1 \ / 0 O iT 12 13 • •• ••• Nincsenek hülye kérdések Egy-az-egyhez kap­ csolat: a szülőtáblá­ nak pontosan egyet­ len sora kapcsolódik a gyermektábla egyetlen sorához. A Mismatch adatbázis jelenlegi sémája már kihasználja az egy-a-sok­ hoz kapcsolatok előnyeit. «511 d 7 . ezek közül a sorok közül m i sma t ch__u s e r •M rJd O — W u sw n o m e p a ssw o rd í .Urald az adataidat. amely a m ism atch_user táblában elsődleges.. Általában van egy főtábla (szülőtábla)..

és nézd meg figyelmesebben a második sématervet. Sok-a-sokhoz kapcsolat: a szülőtábla több sora áll kapcsolatban a gyer­ mektábla több sorával. A sok-a-sokhoz kapcsolat a Mismatch adatbázisban közvetett. De mi a helyzet a Mismatch alkalmazással? Nézzük meg! A felhasználók és a témák a véle­ ményeken keresztül sok-a-sokhoz kapcsolatban állnak egymással. M ind­ azonáltal a kapcsolat létezik: nézd csak meg. Ha nem győz­ tünk meg. A kapcsoló tábla nél­ kül rengeteg ismétlődő adatunk lenne. hány egyforma u s e r _ id és t o p ic _ id szerepel a mi sm atch_response táblában! A vélemények tárolásán kívül a mi sm atch_response tábla úgynevezett kapcsoló táblaként (junction table) viselkedik. lapozz vissza a fejezet elején található sémagyakorlathoz. egyfajta adattúlterhelésként.számtalan eset lehetséges.. ami sohasem jó. Illet­ ve nem igazán . amelyben az .> SOKHOZ ezek közül a sorok közül ezek közül a sorok közi d ie rd re Tattoos C o w b o y hats e a ra n c e Entertainm ent _ e51ld7.sok-a-sokhoz kapcsolatok Amikor több sorhoz több sor illeszkedik A táblák sorai között lehetséges kapcsolatok harmadik és egyben utolsó fajtája a sok-a-sokhoz kapcsolat. amikor a sok-a-sokhoz kap­ csolat indokolt..A'’ tábla több adatsora kap­ csolódik a „B” tábla több adatsorához.A . amely a felhasználók és a témákról formált véleményük között lé­ tesít kapcsolat. hogy a m ism atch_response táblán keresztül érvényesül. Az említett sémában a m ism atc h _to p ic tábla a m ism atch_response táblába volt építve. i. vagyis egyfajta kényel­ mes közvetítő a felhasználók és a témák között. 08447b illeszkedik SOK < . fejezet . ami azt jelenti. 440 8. ami számtalan ismétlődő adatot eredményezett. j 062e4a b4í283 Sok-a-sokhoz! H o rro r m ovies Entertainm en* A mismatch_response egy kapcsoló tábla.

hogy az egyes oszlopokat egy-az-egyhez. írd le.Urald az adataidat. egy-a-sokhoz vagy sok-a-sokhoz kapcsolattal lenne-e legin­ kább érdemes az eredeti táblához kapcsolni. és uralni fogod a világot! — Nevezd meg a kapcsolatot! — Az alábbi táblákban bekarikázott oszlopokat önálló táblákba lehetne helyezni. megfelelő nyílhegyekkel ellátott vonalakkal! KAPCSOLAT mismatch user user a d d re ss m u n k á lta tó frie n d s b a r á to k név kategória m o st itt vagy ► 441 . majd ábrázold a kapcsolatokat a táblákat összekötő.

ami egy-a-sokhoz kapcsolatot eredményez a mun­ káltatók (employer) és a felhasználók (user) sorai között. . egy-a-sokhoz vagy sok-a-sokhoz kapcsolattal lenne-e legin­ kább érdemes az eredeti táblához kapcsolni. vagyis a lakcím (address) Z 69y' 3^ h c s o l a t b l áll 3 felhss^ l ó (user) sorával. ami itt nem látható.megoldás Nevezd meg a kapcsolatot! Megoldás Az alábbi táblákban bekarikázott oszlopokat önálló táblákba lehetne helyezni.Nevezd meg a kapcsolatot! . mismatch user user a d d re ss e m p lo y e r) v fr ie n d s j Ugyanannak a munkáltatónak több felhasználó is az alkalma­ zottja lehet. fejezet . nam e c a te g o ry 442 8. hogy az egyes oszlopokat egy-az-egyhez. majd ábrázold a kapcsolatokat a táblákat összekötő. egy-az-egyhez egy-a-sokhoz sok-a-sokhoz kapcsolatban álló táblákat jellem­ zően egy kapcso­ ló tábla illeszti egymáshoz. írd le. megfelelő nyílhegyekkel ellátott vonalakkal! felh^ á l ó h o z csak egyet(en KAPCSOLAT «« t r t o i k r t .

hogy ellentét­ párokat hozhass létre.se.w y c n rit. Ha ezzel megvagy. ! a rc f.V -!* : §|' £xfc£a'l resp<sűse_: :í i ini. mi sm atch_topic és mismatch_response felépítő SQL-utasításokat. adj ki egy-egy DESCRIBE parancsot mindegyik új táblára (m is­ mate h_ to p ic és mi smat.nJ: l j l ) _ j_ 1 « ____\ ______ L __________ cows xa Sir!. j> I FaC:. s q l fájlokat a Head First Labs webhelyéről. A to p ie jd idegen kulcs a mismatch_topic tábla elsődleges kulcsára mutat. Töltsd le a Mismatch alkalmazáshoz tartozó .í Í''iP % spon. O SR E fe C tS i i nt n i y. 4 tcpic id rei-poncic I intiuj I HG I I | L i h y ’.s q l fájl utasításait valamelyik MySQLeszköz segítségével. a www.íir (A -j) '..T I •a te i n iii.. ( l i j I user _ _ tí | in L f i i j SC I KO i PP.DE3CHXBF. Futtasd le mindegyik . Ezek a fájlok tartalmazzák a szüksé­ ges Mismatch-táblákat —m ism atch_user.05 sec» m ost itt vagy ► 443 . I H u ! L I Kc-y 1 " V . hogy ellenőrizd a szerkezetüket.Urald az adataidat és uralni fogod a világot! Ne mozdulj! Szánj egy percet a Mismatch adatbázis elrendezésére.headf ir s t la b s .r'< o ■ :i l i ~r«öi I HO1 i>rv___L j N1 O 5CI.ch_response). com/books/hfphp címről. mert ezek a táblák jelentős szerepet fognak játszani a Mismatch alkalmazás hamarosan elkészí­ tendő PHP-para n csfá jljaiban. hogy létrejöjjenek a Mismatch alkalmazás kezdőtáblái. jr.

amikor feliratkoznak.kérdőiv készítésé az adatbázis segítségével Oké.» r | 1 name mtegory j Tattoos________ 1 A p p e a ra n c e G o ld chains I A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e \ ^ 3 4 5 1 6 7 B o d y piercings C o w b o y boots Long h a ir 1 R e ality T V P ro fessional w restling H o rro r m ovies \A p p e a ra n c e 1 Entertainm ent Entertainm ent 1 Általánosságban ez a jól megtervezett adatbázisok előnye. hogy kellőképpen jellemezzen egy személyt. amely éppen elég kategóri­ át és témát tartalmaz ahhoz. sokkal könnyebb lesz felépíteni és összekapcsolni az alkalmazás egyéb részeit. Gondolj csak bele. k a te g ó r iá k a t. hogy ez jelentős előzetes morfondírozást igé­ nyel az adatok tárolásának mikéntjét illetően. I Entertainm ent | 8 9 Entertinm ent | 1 E a s y listening music | Entertainm ent | The o p e ra 1 Sushi Food F o o d ____ 1 Fo o d Food [ A teljes mismatch_topic tábla 25 elemet tartalmaz. De h o g y a n s e g ít ez ö s s z e p á ro s íta n i a z e lle n té te k e t? Ha egy jól megtervezett adatbázisból indulsz ki. de a befektetett munka hosszú távon megtérül. a m i fe lh a s z n á ló k a t. hogy mennyivel nehezebb lenne akkor átdolgozni a Mismatch adat­ bázisát. amelyet maguk a felhasználók töltenek fel. 5 kategóriába sorolva. illet­ ve egy új táblánk a témák számára. Ahhoz. V an e g y csodá la to s a n megter­ vezett a d a tb á z is u n k . Úgy tűnhet. Az ellentétpárok kialakításához már csak annyi hiányzik. amikor már tele van adatokkal! mi sma tch_t op ic to p i. hogy lehetővé tegyük a felhasználóknak. mint hogy már az alkal­ mazás megtervezésének elején helyesen építed fel az adatbá­ zist.jd O r. valószínűleg nem tehetsz jobbat annál. vagyis öt dimenzióban teszi lehetővé az „ellenkezést"! I j j 11 12 13 u | S p a m ________J S p icy food I Peanut butter & j b a n a n a san d w ich es M artinis H o w a rd Stern Bill G a te s | B a rb a ra Streisand Hugh H efner____ | | M a rth a S tew art Y o g a _______ W eightlifting C u b e p u zzle s K a ra o k e 1 | | 15 16 17 18 19 20 21 22 Fo o d People Peopel People People People A ctivities Activities A ctivities Activities | Activities 1 Agytorna Hogyan formálnád olyan kérdésekké a témák és ka­ tegóriák eme listáját. hogy a fejlesztés a lehető leggördülékenyebb legyen. t é m á k a t és v é le m é n y e k e t t á r o l. és megadják a profiljuk adatait. akkor van egy felhasználói táblánk. Ha konkrétan a Mismatch adatbázist nézzük. hogy véle­ ményt formálhassanak a különböző témákról. majd elraktároz­ zuk a véleményüket egy önálló táblában. amelyekre a felhasználók szere­ tem/utálom válaszokat adhatnak? 444 1 23 ** 25 H iking .

illetve a felépítéséhez szükséges lépésekre: ^ ' _________ How do you feel about each topic? Appearance —--------------------- Mi s ma t c h . amiről a felhasználó véleményt formált. hogy pontosan hogyan kaphatunk szeretem/'utálom válaszokat a felhasználóktól a Mismatch adatbázisában szereplő témákkal kapcsolatban? Nos. A véleményekkel a kezünkben előállíthatjuk a kérdőívet tartalmazó HTML-űrlapot. Mivel a sorok r e s p o n s e (vélemény) oszlopa kezdetben üres. az adatbázisnak csak arról kell tudnia. amely a felhasználó véleményét is megadja.0V <*»Hax C « L o v e 0 H a tc 0 Love "'Harc Üres véleménysorok hozzáadása az adatbázishoz az i n s e r t utasítással. Reality TV: Professional wrestling: Horror movies: Q 1 . mégpedig beviteli mezők csoportjaként. hogy kiolvassuk a véleményeket a m ism atch_response táblából. a felhasználó véleménye alapján bejelölve a megfelelő Lőve és Haté választógombokat. Vessünk egy pillantást a kérdőívre. és a módosításokat visszaírhatjuk az adatbázisba. a véleményeit be kell vezetnünk az adatbázisba. Ez azt jelenti. ha a felhasz­ náló még semmiről nem formált véleményt.Urald az adataidat és uralni fogod a világot! Tehát a kérdés az.a keménye az alábbi dolgokról? A hasonló témá­ kat kategóriákba csoportosítjuk az űrlapon belül. A véleménysorok módosítása az UPDATE utasítással a felhasználó által az űrlapon megadott vélemények alapján Amikor a felhasználó benyújtja az űrlapot. az űrlap első megjelenésekor sem a Lőve. Más szavakkal. de a frissítést csak azokkal a témákkal kapcsolatban kell végrehajtanunk. sem a Haté választógomb nem lesz bejelölve. hogy üres „kezdőértékekkel” kell feltöltenünk a m is m a tc h _ r e s p o n s e táblát. a válasz az. A kérdőívet tartalmazó űrlap felépíté­ se valójában abból áll. amikor a felhasználó először fér hozzá az űrlaphoz. Tattoos: GoW chains: Body piercings: Cowboy boots: Longhair: Entertainment — (»»Love OHaic © Love 0 Hale Ol-ovc 0 Hate 0Lovc OHate 0 Love Q Hate Minden témához egy-egy sor tartozik a mismateh_re$ponse táblában.kérdőív - __ "rc! -------. most itt vagy * . A kérdőívei tartalmazó űrlapot a m is m a tc h _ r e s p o n s e tábla adataiból állítjuk elő. amelyeknek az egyik választógombját a felhasználó beje­ lölte. A kérdőívet tartalmazó HTML-űrlap előállítása a véleményadatokból. amikor a felhasználó először fér hozzá a kérdőívhez. majd visszaírjuk azokat :da. hogy egy kérdőívet tartalmazó űrlap segítségé­ vel. amelyen a felhasználók a Love (Szeretem) és a Hate ( Utálom) lehetőség között választva formálhatnak véle­ ményt a mi sm atch_to p ic táblában szereplő témákról. Az űrlapot közvetlenül az adatbázisban tárolt vélemé­ nyekből is előállíthatjuk. még akkor is.

az UPDATE SQL-utasítások végrehajtása kezeli. vagyis létre kell hoznunk a véleményt még nem tartalmazó sorokat. hogy aggódnunk kellene amiatt. fejezet . Bár a vélemények tárolása a Mismatch adatbázisban végsősoron két lépésből ál­ ló művelet. hogy előállítjuk a kérdőívet tartal­ mazó űrlapot.a vélemények beírása a mismatch response táblába A vélemények bevitele az adatbázisba Bár úgy tűnhet. amikor a fe l­ használó először nyitja meg az űrlapot. Ez azt jelenti. hogy azzal kell kezdenünk. az űrlap a m ism atch_response táblában található véleményada­ toktól függ. CLove ® Hue Ooe Lv 0Lve«Hrte c «Lov< OHhíc $Lo\c Q H a» UPDATE Most. mert A vélemény oszlopa még üres. csak frissítenünk kell az adatsorokat az űrlapon megadott vélemények szerint. „üres” vélemények felvétele az adatbázisba meg­ történt. Ez lehetővé teszi. INSERT a m ism a tchj’esponse tábla vélemény* A kérdőívet tartalmazó űrlap szemszögéből nézve tehát az űrlapon szereplő té­ mák mindegyikéhez tartozik egy-egy adatsor a m ism atch_response táblában. már van mit tárolnunk a mismatch_response táblában. Miután a kezdeti. 1 446 8. hogy a mi sm atch_response táblából anélkül állítsuk elő a kérdőívet. Haladjunk tehát lépésenként: először kezdőértékekkel kell feltölte­ nünk a m ism atch_response táblát. hogy amikor a felhasználó benyújtja az űrlapot. hogy meg­ feleljenek a felhasználó á ltil a kérdőíven megadottaknak. Az adatbázisban szereplő véle­ ményeket frissítjük. az első lépésre (i n s e r t ) minden felhasználó esetében csak egyszer van szükség. az űrlapon elvégzett minden későbbi változtatást a második lépés. amikor a felhasználó először fér hozzá a kérdőívhez. hogy a felhasználó véleményt nyilvánított-e már valamiről. Az űrlapon szereplő témákhoz kezdet­ ben nem tartozik vélemény. hogy a felhasználó véleményt nyilvánított néhány témával kapcso­ latban.

? _ S E S S I 0 N [' u s e r _ i d ' ] . $topicIDs = array(). Pótold a hiányzó kódrésze­ ket a hűtőmágnesek segítségével! // Ha az adott: felhasználó m ég nem töltötte ki a kérdőívet. miután a felhasználó elvégezte a módosításokat. < / p > ' . if ( ($data) « • 0) { // Először kiolvassuk. és uralni fogod a világot! PHP. üres v é l em én ye ke t «zárunk be az adatbázisba $query = "SELECT * FROM mismatch_response WHERE user_id * . } m o st itt vagy > 447 . // M i n d e n téroáfioz eyy egy üres v él eménysort szúrunk be a v él em én ye k táblájába f o r e a c h ( $ t o p i c I D s as $ t o p i c _ i d ) { — $ q u e r y * 1» = mismateri response " . $ q u e r y ) .& MySQL-mágnesek Az alábbi kód hajtja végre az üres vélemények beszúrását a m ism atch_response láblába. ' $topic__id*) "( m y s q l i _ q u e r y ($ d b c . $ r o w . response = '^response I If ) echo '< p > Y o u r r e s p o n s e s h a v e b e e n s a v e d . $query). ('" . amikor a felhasználó először nyitja meg a kérdőívet tartalmazó űrlapot. $_SESSION['user_id'] . és benyújtotta az űrlapot. valamint ez gondoskodik a véle­ mények frissítéséről. ezért a helyükre kell rakni őket. a témák azonosítóit a mismatch _t op ic táblából $q u e r y “ "SELECT FROM m i s m a t c h _tcpic ORDER 3Y category_id.'L o p i e _ i d 'J ). 1 // Ha a kérdőívet tartalmazó űrlapot benyújtották. ) VALUES $query). '$ r e s p o n s e _ i d ' ". $ d a t & = m y s q l i _ q u e r y ($dbc. Sajnos a kód egyes részei kipotyogtak.Urald az adataidat. a v é l e m é n y e k táblájába írjuk foreach ($_P0ST as $response_±d = > $ response) { $query = " "WHERE m y s q l i _ q u e r y ($dbc. $data = mysqii_query($dbc. w h i l e ( $r ow = m y s q l i _ f e t c h _ a r r a y ($ d a t a ) ) { a r r a y _ p u s h ( $ t o p i c I D s . topic_id". mismatch_response = $query). a véleményeket beírjuk az adatbázisba if (isset($_P0STL'submit'])) 1 / / A kérdőíven megadott véleményeket.

iery — •» = "WHERE UPDATE mismatch_response response - '^response ? ft I response id $q u e r y ) . ' $resP°nse. „ a haté" lehetőseit. ezért a helyükre kell rakni őket. _ < $query = » INSERT INTO mismatcn_respcnse VALUES . 0) if ( I m y s q li_ n u m _ r o w s !/ _ |( $ d a ta ) - < ________ Ellenőrizzük.id'”. üres v él eményeket szúrunk be az adatbázisba $ q u e r y * " S E L E C T * F R O M m i s m a t c h _ r e s p o n s e W H E R E u s e r _ i d = '" .opic_id' )) . $query).m y s q l i _ f e t c h _ a r r a y f $ d a t a ) ) [ a r r a y j p u s h ( S t o p i c I D s . " $data = mysqli_query($dbc. < / p > ' . } // M inden témához egy-egy üres vé le ménysort szúrunk be a vélemények táblájába ^ f o r e a c h ( $ t o p i c l D s a s $ t o p i c id) { a véleménysorok itt meg üres . i f ( i s s e t ( $ _ P O S T f *s u b m i t ' j )) { a véleményeket beírjuk az adatbázisba // A kérdőíven meg ad ot t vé le ményeket a vélemények táblájába írjuk f o r e a c h ( $ _ P C S T a s $ r e s p c n s e _ i d =^> S r e s p o n s e ) { $q-. $ t o p i e I D s ® a r r a y (). amikor a íelhasználó először nyitja meg a kérdőívet tartalmazó űrlapot. valamint ez gondoskodik a véle­ mények frissítéséről. Az egyetlen dolog. ami megválto­ zik. $ _ S E S S I O N [ ' u s e r _ x d Tj . Először kiolvassuk a témák azonosítóit a m i s m at ch _t op ic táblából $query = "SELECT • • I to p ic i d • I M I * m i s m a t c h _ t c p i c O R D E R BY c a t e q o r y _ i d .& MySQL-mágnesek . amikor a felhasználó benyújt­ ja az űrlapot. ir. topic_id". és benyújtotta az űrlapot.ys q i x _ q u e r y ($dbc.----- . Sajnos a kod egyes részei kipotyogtak. £ --------. . benyújtották.0 sornyi adatot adott-e vissza. $ r o w f1t. ('” . A vélemények üres tömbjének létreho­ zásához először ki kell olvasnunk a té­ mákat a mismatch_topic táblából. echo 1 '< p > Y o u r r e s p o n s e s h a v e o e e n s a v e d . Pótold a hiányzó kódré­ szeket a hűtőmágnesek segítségével! // Ha az adott felhasználó még n e m töl tö tt e ki a kérdőívet. $data = mysqii_query($dbc. tehát csak ezt kell frissítenünk. // Ha a kérdőívet tartalmazó űrlapot.megoldás Az alábbi kód hajtja végre az üres vélemények beszúrását a m ism atch_response táblába.PHP-mágnesek megoldás PHP. w h i l e ($row . $qnery). hogy a lekérdezés . a vélemények táblá­ jának response oszlopa. sem a „lőve . $ _ S E 3 S I O N [ ' u s e r ^ i d ' ] • mysql^. miután a felhasználó elvégezte a módosításokat. sem * „ ' $ t o p i c _ i d ')".

Urald az adataidat. Két lépés azonban még hát­ ravan. Az array _p u sh {) függvény egy új elemet illeszt egy tömb végére. Ezt követően ennek a tömbnek a segítségével szúrjuk be az üres véleményeket a m ism atch_response táblába . Bumm! Egyetlen csapással két virtuális legyet is leütöttünk. most itt vagy ► 449 A kérdőívet tartalmazó HTML-űrlap előállítása a véleményadatokból. hogy egy tömböt építsünk fel a mi sm atch _to p ic táblában ta­ lálható témák azonosítóiból. mert még nem kellett dinamikusan... mégpedig azért. amikor a felhasználó először fér hozzá az űrlaphoz. m ielőtt összeboronál­ hatnánk a szerelmespárokat a Mismatch-kérdóTwel.minden témához egyet-egyet. J A véleménysorok módosítása az u p d a t e utasítással a fel­ használó által az űrlapon megadott vélemények alapján. Az elő­ ző oldalon szereplő Mismatch-kódban az array_p ush () függvényt arra használjuk. elemen­ ként felépítenünk egy tömböt. . vagyis egy elemmel növeli a tömb méretét. A kérdőívet tartalmazó űrlap előállí­ tásához szükséges véleményadatok kiolvasása a s e l e c t utasítással. és uralni fogod a világot! Nincsenek hülye kérdések M it csinál az array_push( ) függvény? Szerintem ezzel még nem találkoztunk. és a kérdőív pa­ rancsfájlja már félig készen van. •• Üres véleménysorok hozzáadása az adatbázishoz az i n s e r t utasítással. Valóban nem.

adatvezére/t űrlapok használata Egy űrlapot adatokkal is vezérelhetünk Az nem újdonság. Az adatvezérelt (datadriven) űrlapok MySQL adatbázisban tárolt ada tokra támaszkodnak a HTML-urlapmezők előállításához. hogy nyilvánvaló.>Lew % £«t?y > a' e~ '* 78' </fU lT ett>tVPe' " radÍ° ” < fie id s e t > < le g e n d > E n r. választólistáival. adatokat gyűjthetsz a felhasználóktól. A Mismatch-kérdőívet létrehozó parancsfájl feltételezi. A HTMl-íírlapmezöV egyedi azonosítására és m is m a t< h j. Tudjuk.e rta irjR e n t< / Legc-nd> < /forro> M ^m atch .esponse re s p o n s e ^ jo ^ response A HTML-urlap kódja meződnek az adatbázis soraihoz társítására response_id elsődleges kulcs szolgál. hogy előállítsa az űrlapot a mi smatc. 1ue- 1 " ch. <n:"iL t> Y U f6el about e“ h 0 A választógombok kiválasztását 3 cn8CK«a jenemzo vezerii. Enienainrrcct R tyTV: eaU Professional w restling: Horror m ovies: 0 Love (> » Hate 0Lovc QHatc 0 Love QHatc .ecked*"checjted"//>Love How do you feel aboui eacb topic? r A ppearanvc T attoos: Gold ch *»: ain Body piercings: f^/Lovc C Hate QHux 0 Love QHatc @Lovc y/ Cowboy boots: ttLove QHatc 0 Love Q H artp Az űrlap a felhasználó véleményét tükrözi az egyes témákról. Az urlapmezoket a mezoneveknek az adatbázis elsődle­ ges kulcsára állításával köt­ jük az adatbázis soraihoz. hogy a webes űrlapok szövegmezőivel. vá­ lasztógombjaival stb. hiszen éppen most írtuk meg a kódot. ami lehetővé leszi. hogy a véleményadatok már léteznek. dinamikusan hozzuk létre a HTML-kérdőívet tar­ talmazó űrlapot. hogy a véleményadatokból. ami üres véleménysorokkal tölti fel a táblát. amikor a felhasználó először nyitja meg az űrlapot. A Mismatch alkalmazás esetében az ötlet az. az azonban már nem biztos. (L onghair: . tonic id < fo rm m e t h o d -" p o s t " a c t i o n = " " > / a mismatch__response tábla adataiból jön létre. ^ r r * 7í* — <Íibeíídfo ^-i6 "> T ^t'íe9enfÍ> i \ . hogy ez a feltételezés bizton­ ságos.Questionnaijf. hogy a PHP segítségével egy adatbázis adataiból is előállíthatsz HTML-űrlapokat.h_response tábla adataiból.

m íg a m ásodik lekérde­ zés kikeresi azoknak a tém áknak a nevét és a kategóriáját.. A gond csak az.. $ ro w [ ' to p ic _ n a m e ’ ] = $ ro w [ ' c a te g o ry _ n a m e '] = a r r a y _ p u s h (^ r e s p o n s e s ... illetve kategóriák­ ból: az első lekérdezés kiolvassa egy adott felhasználó véleményeit. hogy a k ód egy része hiányzik. re s p o n s e FROM m is m a tc h _ re s p o n s e ” . és a mi sma t c h _ t o p ic táblában megkeresni. "WHERE u s e r _ id = .JopK to p ic jd nam e c a te g o ry response k 76 77 78 79 80 1 2 3 4 5 6 7 8 Lovc Love Love Love Love H ate Love Love ••• Tattoos G o ld chains B o d y piercing s C o w b o y boots Long h a ir R eality T V P ro fessional w restling H o rro r m ovies A p p e a ra n c e A p p e a ra n c e A p p o a ra n c e A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent Entertainm ent A vélemények tömbje a hozzájuk tartozó té. hogy a lekérdezés hány adatsort adott vissza.. ). i f (m ysqli_num _ro w s ( . $ r o w j/ IT T »» tá b lá b ó l Ez a PHPfiiggvény árul­ ja el.^ mákkal és kategóriákkal. és uralni fogod a világot! A Mismatch vélemény-kérdőívet a felhasználóknak a m is m a tc h _re s p o n s e táblában tárolt vélem ényeiből állítjuk elő.. $ q u e r y ) . } } m ost itt vagy ► 451 .. $ re s p o n s e s = a r r a y ( ) . "WHERE t o p i c _ i d = ’ " .* == i ) ( ) $row2 = m y s q l i _ f e t c h _ a r r a y ( $ d a t a 2 ) .. Töltsd ki az üres helyeket.. $ ro w [ 1t o p i c _ i d ’ ] $ d a ta 2 = m y s q li_ q u e r y ($d bc. m ism atch_response • | nusinaf<li.Urald az adataidat. » 81 82 83 / / A v é le m é n y a d a to k k io l v a s á s a a z a d a t b á z i s b ó l az ű r l a p e l ő á l l í t á s á h o z $ q u e ry = "SELECT r e s p o n s e _ id . $ d a ta = m y s q li_ q u e r y ( $ d b c . A HTML-űrlap kódjának előállításához ezeket a véleményeket ki kell olvasni. w h ile ($row = m y s q l i _ f e t c h _ a r r a y ( $ d a t a ) ) { / / A v é le m é n y h e z t a r t o z ó tém a n e v é n e k k ik e r e s é s e a m is m a t c h _ t o p ic $query2 = 1 1 " .. hogy az egyes vélemények melyik Gyakorlat és milyen kategóriába tartozó témára vonatkoznak..... Az alábbi k ó d két lekérdezés végrehajtá­ sával épít fel egy töm böt a vélem ényekből és a hozzájuk tartozó tém ákból.. t o p i c _ i d .. amelyekre az egyes vélemények vonatkoznak. $_SE SSIO N [’ u s e r _ i d f ] .......

és a m ism atch_topic táblában megkeresni. A gond csak az.. Nagyon fontos. hogy ne bet ■ lyásold "WHERE topic_id = f" .megoldás A Mismatch vélemény-kérdőívet a felhasználóknak a m ism atch_response táblában tárolt vélemé­ nyeiből állítjuk elő.. amelyekre az egyes vélemények vonatkoznak. . A témák és kategóriák nevét a második lekérdezésből szár­ $row 2 = m ysqli__fetch_ar/ i:ay ($data 2 ) . $ q u e ry ). hogy a kód egy része hiányzik. míg a második lekérdezés kikeresi azoknak a témák­ nak a nevét és a kategóriáját.. m is m q t c li^ sPoltse rpsD onse id m is m a t< h jo p i< t o p ie jd nam e c a te g o ry A vélemények tömbje a hozzájuk tartozó témák­ u l és kaiegór iákkal. array _p ush ($re sp on ses/ $row ). " • na'fnod. ?» f ff az eredeti lekérdezést. $ro w [’topic_id!] $data2 = mysqli_query (^dbc... j” . illetve kategóriákból: az első lekérdezés ki­ olvassa egy adott felhasználó véleményeit. fejezet A kérdőívet tartalmazó űrlap előállí­ tásához szükséges véleményadatok kiolvasása a s e l e c t utasítással. | I $data = m y sq li_q uery ($d bc... amelyet 3 kérdőívei tartalmazó Űrlap előállításához használónk. Az array_pusb() függvény egy elemet illeszt (pusb) a tömb végére. Töltsd ki az üres helyeket. he m á$responses = array () ... if (mvsqli num ■ rows (••••••••••••••• ) == i) { fdstsZ ■ Ellenőrizzük. ■■ "WHERE u s e r _ id = . $_SESSION[ •u s e rjL d * ] . A HTML-űrlap kódjának előállításához ezeket a véleményeket ki kell olvasni.. hogy az egyes vélemények melyik és milyen kategó­ riába tartozó témára vonatkoznak.. Az alábbi kőd két lekérdezés végrehajtásával épít fel egy töm­ böt a véleményekből és a hozzájuk tartozó témákból. L 76 77 78 79 80 81 A (-------7 A 3 4 5 Love Lovo Love Love Love H ate Lovo Love Tattoos G o ld chains B o d y piercings C o w b o y boots Long h a ir R eality T V P ro fessional w restling H o rro r movies A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent Entertainm ent A Sresponses tömb a véle­ ményadatok ideiglenes tömbjeként szolgál.. response FROM m ism atch_response " .. bogy valóban vannak-e véleményadatok. ' J” w h ile ($row = m y s q li_ fe tc h _ a r r a y ($ d a ta )) { zes véleményhez ta r to z ó téma kikeresése a m ism atch_topic tá b lá b ó l hez Új Változókat kell $ query 2 = " SELECT. emik « 3 faiegóriék névéi 3 l0plc~id őségével kere k ki a "lismitch^topic ssu táblából. 82 83 6 j 7 J W % •• / / A vélem ényadatok k io lv a s á s a az a d a tb á z is b ó l az ű r la p e lő á llít á s á h o z $query = "SELECT re spo n se _id ... t o p ic _ id .. } ó 452 8. $row [ 1 topic_nam e ’ ] = ? row [ ’ category_nam e 1 ] = /rowZríajtegov-y'J..Gyakorlat megoldás Gyakorlat . .. . mazó adatok hozzárendelésével adjuk a véleménytómbhöz... ffycryZ ) . .

.. } e ls e { echo 'c i n p u t ty p e = ” r a d io " narae="1 . vagy a másikat (haté)... $ r e s p o n s e [ ’ r e s p o n s e _ id ’ ] r " v a lu e = c h e c k ed= ... és uralni fogod a világot! A fe lh a s z n á ló vé le m é n ye s z ö v e g k é n t („L ő v e ” é s „ H a t é ” ) tárolódik az a d a tb á z is b a n ? H a Igen.. A lehetséges válaszokat tehát k ülönböző számértékek­ kel ábrázolhatod: « * ?i Ismeretlen = 0 Lőve = ¥ H a te 0 = 2 Egy adatbázis megtervezésekor lényeges. Pótold a liiányzó kódrészeket....... hogy az űrlapme­ ző bejelölt kezdőállapotba kerüljön.... Ha belegondolsz.... Valójában egy harmadik érték (az „ismeretlen’') is hasznos lenne.. mivel a felhasználó vagy az egyik értéket (lőve) adja meg. fo r e a c h if Az alábbi kód egy ciklussal végighalad az imént létrehozott véle­ ménytömbön.ez a Mismatch alkalmazás esetében sem elhanyagolandó köve­ telmény.... ha a véleményt „szeretem”-re ( 1 ) állították.. />Love ’ ..... a k k o r n in c s ennél h a té k o n y a b b m e g o ld á s ? Nem és Van ...ezért fontos a lehető leghatékonyabb adattípussal tárolni az adatokat egy MySQL-adatbázisban...... és minden „Lőve” választógombhoz létrehoz egy HTML-űrlapmezőt. Tehát m inden vélemény esetében három lehetséges értéket kell számon tartanunk.. } most itt vagy ► 453 .. hogy a lehető legkisebbre csökkentsd az adatok tárigényét ........ hogy a felhasználó m ég nem nyilvánított véleményt az adott témáról........ mint a T I N Y I N T ... Hegyezd ki a ceruzád! A „Haté" választógombokkal egyelőre nem kell foglalkoznod... $ r e s p o n s e [ ’ r e s p o n s e _ i d '] f " v a lu e = _ />Love 1..Urald az adataidat...) { echo ' c in p u t ty p e = " r a d io " n a m e = "' ..... A számmal ábrázolt vélemények közvetlen szerepet játszanak a Mismatchkérdőív űrlapmezőinek előállításában..... hogy az alkalmazás tudja... mert az előál­ lításuk pontosan ugyanígy történik. a Mismatch alkalmazásban megadott vélemények egyfajta igaz/ha­ mis (true/false) válaszok. és ne felejts el gondoskodni az <in p u t> elem értéké­ nek megfelelő beállításáról sem! { ($ re s p o n s e s as $ re s p o n s e ) ( .. erre a fajta tárolási feladatra pedig egy olyan számtípus a legal­ kalmasabb...

Valójában persze van tisztább és kevesebb kódot igénylő módja is annak... ha a vélem ényt „szeretem'-re (1) állították. ) { $ response [' re spo n se_id ’ ] . fejezet . } e ls e ( echo ' < in p u t ty p e= "r a d io ” name="' . és m inden „Lőve" választógom bhoz létrehoz egy IiTML-űrlapmezőt. Ha a vélemény „szeretem" (J). [~T j.. echo '< in p u t type=”ra d io " name="' '" value= w íw checked=. hogy az űrlap m e ző bejelölt k ezdőállapotba kerüljön...... value= T } .. $respo nse[ 're s p o n s e _ id f ] />Love 1. foreach (Sresponses as ^response) { if ($response['response'] = 2) { echo '<input type="radic" n a m e . A * < input > elem értékét f- [* 3llífÍuk’ a véleményt könnyebb legyen elraktározni « adatbázisban. $ r e s p c n s e ['response_xd ] value="2" checked»"checked" />Kate ••• 0i 30 | echo '<input type="radio" name»" ' . ) Ha kíváncsi lennél .a „Haté" választógombo­ kat előállító kód pontosan ugyanúgy működik. csak némileg más választ keres. ha a vélemény értéke nem „love" (1). hogy egyaránt létrehozd a „Lőve" és a „H até" választógombokat. megoldás ezd ki a ceruzád! Megoldás Az alábbi k ó d egy ciklussal végighalad az im ént létrehozott vé­ le m én y töm bön. 454 8. Pótold a h ián y zó kódrészeket. 3 vá­ foreach if ($responses/as $response) { lasztógombot a checked jellemző „checked"-re állításával bekapcsoljuk.. r A checked = "checked" elhagyása a vá­ lasztógomb kikapcsolását eredményezi. />Love ?.. (.. ^response I'response_id' ] '" value = " 2 " />Hate '. amikor az űr­ lapot benyújtják. és ne felejts el g o ndo sk o dn i az < in p u t> elem értékének m egfelelő beállításáról sem! A „Lőve" választógomb bekapcsolását a vé­ lemény értéke határozza meg (az adatbázis­ ban a „!ove"-nak az 1 érték felel meg).Hegyezd ki.

0 I .e ls e utasításokat az úgynevezett háromértékű művelettel (ternary opera­ tor) tömörítheted: tru e Ha a FeltételesKifejezés értéke true. Utasítási Utasítás2 Ha a FeltételesKifejezés értéke false. amely segít egyszerűsíteni az if .e ls e utasítások felírására. ' " v a lu e = " l" ’ 1 ? ' checked=”checked"' Ez a true/false teszt határozza meg a háromértéku művelet kimenetelét. hogy kihasználód a PHP nyelv azon adottságát.. ami a kö­ vetkező bejelölt „Lőve” választógombot eredményezi: Az < input > elem checked jellemzőjét it t egy if-else utasítás helyett a háromérté­ ku művelettel állítjuk elő. A kódolás hatékonysága is számít. O V C C: Harc m ost itt vagy ► 455 .Urald az adataidat. kü1 >nösen amikor egy változónak adsz értéket.e ls e utasításokat. ami számtalan m ó­ don biztosítható. $respo nse[ 1 re s p o n s e _ id '] ($response[ ' response’ ] == ' y . vagy7HTML-kódot állítasz elő egy i f feltételtől függően. szem előtt kell tartanod. és uralni fogod a világot! Apropó. így a „Lőve” választógomb < in p u t > eleme nem lesz bejelölve. amit Az if-else utasításokat a háromértéku ? művelet segítségével írhatod fel tömörebb formában.e ls e utasításokat. Az egyszerű if . a checked jellemző nem jön létre. A „Lőve” választógombok kódját így írhatod át egy háromértékű művelettel: echo 'c in p u t ty p e= "ra d io " naiue="' . FeltételesKifejezési . fa ls e A háromértékű művelet valójában csak egy gyorsírásos forma az if . c i n p u t ty p e = " r a d io " nam e="279" v a l u e = " l ” ( ^ cked= H c h e c k e d ” )/>L ove Az < in p u t> elem kódjának ezt a részét a háromértéku művelet határozza meg. hogy képes egyszerűsíteni az i f. az Utasftás2 végrehajtására kerül sor. Amennyiben a véleményérték nem 1. Ha a $response [' re sp o n se ' ] változóban tárolt véleményérték 1 . az Utasítási hajtódik végre. A liatékonyságot illetően nem az adatbázis hatékonysága az egyetlen. hatékonyság. ak­ kor az < in p u t> elem részeként létrejön a checked jellemző. Az egyik módszer..

} // Mi nden Lémához egy egy üres véleménysort szúrunk be a vé le mé ny ek táblájába i o r e a c h (S t o p i c I D s a s S t o p i c _ i d ) { $ q u e r y = " I N S E R T INTŐ m i s m a t c h _ r e ' s p o n s e (usei id. p h p " > l o g i n < / a > t o a c c e s s t h i s p a g e .benyújtották. } // A navigációs menü megj el en ít és e r e q u i r e _ o n c e ('n a v m e n u . < / p > ' . if ( m y s q l i nuin r o w s (§ a t a ) = = 0 ) { d // Először kiolvassuk a témák azonosítóit a mismatch_t. p h p ' ). Squery). exi t O . mysqli query($dbc. D B NAME) . Ha még emlékszel rá. fejezet . r e q u i r e _ o n c e (' h e a d e r . DB_USER. hogy kiolvastuk az adott felhasználó véleményeit a m isrnatch_response táblából. ezt a tömböt úgy építettük fel. $ r o w f 't o p i c _ i d T ])." U P D A T E m i s m a t e h r e s p o n s e S E T r e s p o n s e = S r e s p o n s e f ff 456 8.m y s q l i q u e r y ( $ d b c . t o p i c i d ) VALIJES (' ” .. $ q u e r y ) . re qui r e _ o n c e (' a p p v a r s . p h p '). a véleményeket beírjuk az adatbázisba i f ( i s s e t ($ P O S T f s u b m i t ' J ) ) { / / A kérdőíven megadott véleményeket a vé le mé ny ek táblájába írjuk f ó r e a c h ( $ _ P O S T as $ r e s p o n s e _ i d = > S r e s p o n s e ) { S q u e r y . D B _ PA SS WORD.php parancsfájl A Mismatch-kérdoivet tartalmazó űrlap létrehozása A Mismatch-kérdoivet tartalmazó űrlap darabjaiból most már elég áll a rendelkezésedre ahhoz. // Mielőtt továbblépnénk.p h p ' ) .a teljes questionnaire. c Bemeljtik a munkamenetet elindító és az oldal fejlécét megjelenítő sablonfájlokat. topic i d " . / / A munkamenet elindítása $page_title = ’uestionnaire’ Q . r e q u i r e o n c e ( ’ o n n e c t v a r s . // hogy a felhasználó bejelentkezett-e if (!i s s e t (3 S E S S I O N [ ' u s e r _ i d ' ])} ( e c h o *<p c l a s s = " I o g i n " > P l e a s e <a h r e i = " l o g i n .. üres véleményeket szúrunk be az adatbázisba S q u e r y = " S E L E C T * F R O M m i s m a t c h _ r e s p o n s e W H E R E u s e r i d = '" . '$ t o p i c _ _ i d ')". hogy a korábban lél rehozott véleménytömbből ($responses) előállítsd a teljes HTML-űrlapot. p h p ' ). $ q u e r y ) . S d a t a .php Az oldal elérését a beje­ lentkezett felhasználókra korlátozzak.opic táblából S q u e r y = "SELECT t o p i c i d F R O M m i s m a t c h _ t o p i c O R D E R BY category_id. Nézzük meg mosd a kérdőívet előállító kódot a teljes q u e s tio n n a ir e . Sdata = mysqli_query($dbc. p h p ' ). $ _ S E S S I O N ['u s e r _ i d '] . w h i l e ( Sr ow = m y s q l i _ f e t c h _ a r r a y ( S d a t a )) { a r r a y _ p u s h ($t o p i c I D s . questionnaire.php parancsfájl összefüggésében: <?php // Az oldal fejlécének beszúrása r e q u i r e _ o n c e ('s t a r t s e s s i o n . ellenőrizzük. // Csatlakozás az adatbázishoz S d b c = m y s q l i _ c o n n e c t (D B_H0S7. // Ha az adott felhasználó m ég nem töltötte ki a kérdőívet. $topicIDs ~ array(). $ S E S S I O N [' liser id'j ) 1 // Ha a kérdőívet tartalmazó űrlapot.

$ r o w [ ' t o p i c n a m e '] = $ r o w 2 [ ’ a m e *]. < lyreach (Sresponses as $ response ) { // C s a k akkor kezdünk úi mezőcsoportot.< / p > 1. és egyet a „Haté" számára. m ost itt vagy ► 457 ." e r r o r " ’ : . 1 echo 1< p > Y ó\ r r e s p o n s e 3 ha ve b e e n s a v e d . response FROM misma t c h _ r e s p o n s e WHERE user_id = $ _ S E S S 1Ö N ['u s e r _ i d 1] . és uralni fogod a világot! " W H E R E r e s p o n s e _ i d = 'S r e s p o n s e _ i d T". Minden témái egy címke jelöl. e c h o 1< / f i e l d s e t X f I e l d s e t > < l e g e n d > ’ . £ A kérdőívet tartalmazó HTML-űrlap előállítása a véleményadatokból. n $ r o w [' ca r .>L-:vc ' . f name-'fs u b m i t " / > ’ . . . } m y s q l i c 1 o s e (S d b c ) . S q u e r y ). // Az oldal láblécének beszúrása r é q u i r e _ o n c e ( ’ o o t e r . re s o o n se [ ' c a t e g o r y n a m e T ] .n r a d i o " i d = " 1 . . $data . i // A véleményadatok kiolvasása az adatbázisból az űrlap előállításához Squery = "SELECT response_id.. e c h o *<i n p u t t y p e . Squery).-e-" r a d i o " i d = " f . o // A kérdőívet tartalmazó űrlap előállítása a véleménytömbön e gy ciklussal végighaladva e c h c f< f o r m m e t h o d = " p o s t " a c t -ön**" * . hogy módosítsuk azoknak a té­ máknak a címkestílusát.' ' : '\ . S r e s p o n s e l ’ iréspc ." s u b m i t " value-*n S a v e Q u e s t i o n n a i r e " e c h o '«/forrni1. 0 e c h o *< f i e l d s e t > < l e g e n d > ' . ' for="’ Sre. 2 — hate Ezek az echo utasítások egy-egy vá­ lasztógombot hoznak létre . bok Ne feledd: 1 = love. ($ r e s p o n s e [*r é s£oííse*] < N U L L ? Tc l a s s .egyet a „Lőve".iriysqli_fetch_airay < $ d a t a 2 ) . $r e s p • r.e name="’ S r é s p o n s e f 1r e s p o n s e _ i d ' 3 • '" v a l u e . topic_id. ’ / l e g e n d > r .c^ i d f ] . $ q u e r y 2 ) . m y s q l i _ q u e r y ($ d b c . e g o r y _ n a m e ' ] = S r o w 2 [' ca t e g o r y ' ] . $ r e s p o n s e s = a r r a y {). hogy a té­ mákat rendsze­ rezzük.m y s q l i _ f e r c h _ a r r a y ( $data)) { // A véleményhez tartozó téma nevének kikeresése a m i s m a tc h_ to pi c táblából $ q u e r y 2 . . ha a kategória megváltozott if ( $ c a t e g o r y != S r e s p o n a e I Tc a t e g o r y _ n a m e ' ]) { $category = $responsef'ca-egory_name*J. $ Minden kategóri­ át egy mezócsoportként hozunk létre. if ( m y s q l i _ n u m _ r o w s ($data2) 1} { $ r o w 2 . 1 If f ft $ r o w ['t o p i c id'] A ciklus megkezdése előtt kiolvassuk az első véleményhez tartozó kategóriát. ' . ) U A t ém ák ű lapmezőinek meg je l en ít és e r e c h o ’ label ’ . while ($row . $ S E R V E R [ ’ H P j S E L F * % S ' " > * * P e c h o *< p > H o w d o y o u feel a b o u t e a c h t o p i c ? < / p > T. ame­ lyet „Lőve" és „Haté" választó- } e c h o ' < / í i e i d s e t> ’ .se í f r e s p o n s e _ i d ’ • ] vaiu«-"l" * ( S r e s p o n s e [ * r e s p o n s e ' ] *** 1 ? 'c h e c k e d = " c h e c £ e d ' "c '') .mysqli_query($dbc. a r r a y p u s h ($r e s p o n s e s .. e c h o '< i n p u t t y p e . p h p '). sí* \ ' '. $ ca t e g o r y * $ r e s p o n s e s \ ] f *c a t e g o ry_rtame * ]." S E L E C T name. 3 responses'!0] [ fca t e g o r y _ n a m e ' J . amelyekről a felhasználó még nem nyilvánított vé­ leményt.e<br /> A háromértékű műveletet itt arra használjuk." 2 " r . _ :n s e [T rc^por. $ re Apor. gom követnek. *< / l e g e n d > ' . . íS r e s p o n s e L1r e s p o n s e ’ = = 2 ? ’ b e c k e d = " c h e e k e d " ' ] c />Hat. $ r o w ) . .Urald az adataidat. narrie^" ? Srespor. ’■ ' . c a t e g o r y F R O M m i s m a t c h t o p i c W H E R E t o p i c id = » It 1 f $ d a t a 2 = m y s q l i _ q u e r y ($dbc.

How do you feel about each topic? Appearance Tattoos: Gold chains: Body piercings: Cowboy boots: Long hair: Entertainment— Reality TV : Professional wrestling: Horror movies ©Love QHatc ©Love QHate ©Love CHatc ©Love QHatc ©Love QHatc QLovc ©Hate ©Love OHate @Lovc QHatc Az űrlap elemei dinamiku­ san jönnek létre az adatbá­ zisból . hogy meggyőződj róla. php parancsfájlba.a questionnaire. Térj vissza a főoldalra. hogy megnyitottad a kérdőívet. hogy a felhasználók hozzáférhessenek a kérdőívhez. mi­ vel ez az első alkalom. Töltsd tel a parancsfájlokat a webkiszolgálódra. az űrlap meg­ változik. hogy az új Questionnaire parancsfájlt használja (vagy töltsd le az alkalmazás kódját a Head First Labs webhelyéről. valamint fel kell venned a Questionnaire (Kérdőív) m enü­ pontot a navmenu. headf ir s t la b s . majd kattints a Questionnaire menüpontra a kérdőív eléréséhez. fejezet . Megfigyelheted. com /books/hfphp címről).-__ rancsféjl lehetővé teszi a felhasználóknak.ha új témákat ve­ szel fel bele. és m it utálnak. és nyisd meg a Mismatch alkalmazás főoldalát (in d e x . a www. hogy a vélemények megfelelően betöltődtek az adatbázisból.Questionnaire A Questionnaire p a . Jelentkezz be. Mismatch . c o m /b o o k s /h fp h p 458 8. Nyilváníts véleményt az űrlapon sze­ replő témákról. h TSltsd Is! e a d f i r s t l a b s . A Mismatch alkalmazás teljes forráskódja letölthető a Head First Labs webhelyéről: www. és nyújtsd be az űrlapot. hogy egyetlen témához sem tartozik még vélemény.php parancsfájl kipróbálása Tesztút Próbáld ki az új Mismatch-kérdőívet! Módosítsd a Mismatch alkalmazást. m it szeretnek. Ehhez létre kell hoznod az új quest io n n á ir e . hogy megadják. majd nyisd meg ismét a kér­ dőívet. és a vé­ leményüket elraktározza az adatbázisban. php parancsfájlt.p h p ) egy böngészőben.

Adj egy új témát a mismatch_topic táblához az alábbi SQL-utasítással: INSERT INTŐ m is m a tc h _ to p ic (name. ■ gy melyiké. Ennek elle­ nére dinamikusan elő kell állítanunk az űrlapot.e ls e utasítást. mintsem gyorsabbá teszi a kódot. hogy szabályozzuk egy HTML-jellemző nem éppen egyszerű. amikor a felhasználó először A háromértékű műveletet akkor érdemes használni. hogy a háromértéj kű művelet egy karakterláncot eredményez? r • A háromértékű művelet eredménye mindig a kettős­ pont két oldalán levő két utasítás egyikének az értéke. hogy a há­ nem kell aggódnunk amiatt. hogy beszúrható egy értékadás vagy összefűzés közepére. Sőt. attól függően. amihez a m ism atc h _to p ic táblát használhatjuk. Ennek ellenére ne vidd túlzásba a háromértékű véleményt? Ez hamar jókora kavarodást okozhat. hogy az űrlapot előállító kód teljesen más. és nyolultabbá teszi a kódot. hogy egy új téma hozzáadása után ki kell ürítened a mismatch_response táblát. hogy a felhasználó kitöltöttere ezésbe beszúrandó érték kiválasztására használjuk. A megoldandó probléma tehát csak arról van szó. csak módosít néhány véleményen. vagyis lap részeként jönnek létre). e azt. bár a kettő logikailag a helyzet. mint ha nem ezt a megközelítést követnénk. Néha rövidebb a háromértékű műveletet használni. így a kérdőívet tartalmazó űrlapot : ~-el se kiküszöbölése tényleg egyszerűbbé. e> a feltételes kifejezés t r u e vagy f a l s e értékétől függ. és ellenőrizd az adatbázisba mentett véleményt. vagy hogy mely témákkal kapcsolatban nyilvánított A Mismatch választógombjainak esetében is ezt a megközelí. a m ism atch_response táblát. Nyilváníts véleményt az új témáról. A második eset­ K ! A háromértékü művelet gyorsabbá teszi a parancsfájl futását? ben azonban ez nem működik. Hogyan tudjuk előállítani a M ism atch-kérdőívet tartalmazó űr­ lapot a m ism atch_response táblából. hogy az űrlapot más-más módon romértékű műveletet egy változóhoz rendelendő vagy egy ki­ kell előállítanunk attól függően. hogy üres véleményekkel előre feltölti a kódot. amikor a felhasználó először tölti ki a kérdőívet. ha egy bonyolult i f e l se utasítást próbálsz átírni. nyújtsd be az űrlapot. m ost itt vagy ► 459 . legalábbis nem azoknak a felhaszná­ lóknak az esetében. Az teszi ezt a műveletet olyan ké­ nyelmessé. A Mismatch művelet használatát. a háromértékű művelet eredménye egy karakterlánc lesz. Az űrlapot előállító kód ettől még persze :cst követtük. Honnan tudja a „Lőve" választógomb kódja. c a te g o r y ) VALUES ( ’V i r t u a l g u i t a r s ' . Az első esetben még nin­ csenek vélemények. és nem bo­ mindig létrehozhatjuk a m ism atch_response táblából. A háromértékű művelet inkább csak (ne feledd. Ez általában azt jelenti. miközben a felhasználó még nem is nyilvánított vélem ényt semmiről? • Kitűnő kérdés. hogy kevesebb kód szükséges a parancs­ az. hogy lásd az új témát. ’ A c t i v i t i e s r ) © ■ ■ Üríts ki minden adatot a m ism atchresponse táblából az alábbi SQL-utasítással: DELETE FR0M m is m a tc h _ re s p o n s e o O Tekintsd meg a kérdőívet a Mismatch alkalmazásban. mert nehezebben áttekinthetővé teheti megoldása az. fajiban. ha a felhasználó csak néhány témáról nyilvánított egyenértékű. ezért a m ism atch_response tábla nem tartalmaz adatokat az adott felhasználóhoz. akik már kitöltötték a kérdőívet.már véleményt. és arra. mert az űrlapot ekkor a fel­ használó által megadott vélemények alapján kell létrehozni Valószínűleg nem. Ez az oka annak. hogy' a „Lőve" és a „Haté” választógombok az űr­ tömörebbé.Urald az adataidat és uralni fogod a világot! Nincsenek . A kérdőívet tartalmazó űrlapnak két es­ hetőségre kell felkészülnie: arra. ha egy fér hozzá a kérdőívhez. de egyszerűbb. hogy a felhasználó kitöltötte-e már a kérdőívet. K hülye kérdések K \ V V +- * Próbáld ki! A kód egyszerűsítése érdekében a Mismatch alkalmazás nem igazodik autó* matikusan az újonnan felvett témákhoz. (checked) beszúrását. amikor már kitöltötte. Amennyiben ezek az utasítások karakterlánc ckát eredményeznek. mi mint egy teljes i f. .

Úgy t ű n i hogy az egyik kategória neve helytelenül szerepel az adatbázisban. ezért saját mezö'csoportot kap az űrlapon. hogy k ön n y e b b legyen vélem ényt nyilvánítani az egyes tém ákról. D e mi történik akkor.ez a lényege annak. m é n tönl r azt az erőfeszítésünket. űrla 460 8. ezért jön létre egy ú ja tt mezocsoport úgy» .a rossz adatok kezelése Az űrlapot most az adatok vezérlik Kellett hozzá ném i erőfeszítés. e zén a PHP k ód ö n á lló m ezőcsoportot hoz létre hozzá.— HLove C'Hatc OLovc ©Hate Love wHaic s Easy listening music: 0 Love ( Hàtc —Entertainment The opera: r Food-----------Sushi: 0Lovc 0 Harc OLove ©Hatc 0L cve fH ate j X ©Love OHatc Ennek a kategóriának a nevét elgépeltük. ami nagyon zavaró. Reality TV: Professional wrestling: Horror mo --. fejezet . de a Mismatch alkalm azás most m ár d in a­ m ikusan állítja e lő a kérdőívet az adatbázisban tárolt vélem ényekből. ha az adatok helytelenek? response_ici response u s e rjd topic J d “ to p ic jd name category |H Az űrlapot úgy hoz­ How -Jo you foci about each topic? [ Appcarancc--— Tattoos: Gold chains: Body piercings: Cowboy boots: Long hair: j—Entertainment- zuk létre. de valam i nem stimmel. Spam: Spicy food: 11 Az adatok m egfelelően vezérlik az űrlapot. 3 harom fő c s o p o rto t való! 3n eW é M m összevonni W az Entertainment kategória e m i eW helYre kerüljenek. hogy az adatbázison végrehajtott m in den m ódosítás auto­ m atikusan tük röződ n i fog az űrlap on . Ez azt jelenti. hogy7 m ezőcsoportok segítségével rendszerezzük a pót.1 ahhoz a ka te g ó riá d G Love HHaic OLovc ©Hare QLovc 0H atc Love QHatc 0 Love Q H n . Ez kom oly problém a. hogy m itden kategóriaváltsí új mezőcsoportot eredményez. hogy egy w ebalkalm azás felhasználói felületét egy adatbázisból vezéreljük.

. Joe: De egyénéi több elgépelt kategória van. Mi lenne. m is m a tc h _ c a te g o r y nevű táblát. Valami ilyesmit csinálunk a m is m a tc h _ to p ic táblában levő témákkal is. Jill: Esetleg anélkül is hivatkozhatnánk számokkal a kategóriákra. People-----H ow ard S U rn \ | 12 | 13 1 ©Love O H ate Peanut butter & | b a n a n a san d w ich es 15 1 16 17 18 M artin is H o w a rd Stern Bill G a te s 1 B a rb a ra Streisand Food People Peopel People y QLove 0H stc People----------------------. Létrehozhatunk egy új. ezért a m is m a t c h _ t o p ie táblába tettük őket. Srácok. majd a kategóriákat a m is m a tc h _ t. és számokkal hivatkoznánk a kate­ góriákra? Ezzel elkerülnénk az elírás kockázatát. ezeríntetek hogyan lehetne kijavítani a hibát? m i sí !ooi< J d 0 ==“w' f nam e category •• • 8 9 10 n i H o rro r m ovies Entertainm ent | En tertin m en $/| Entertainm ent | Food Food Food Food 1 1 1 E a s y listening music 1 In e o p e r a _______i S u s h i ________ 1 S p a m _________ J S p ic y fo o d_______ Már tudjuk. hogy a témanevek ismétlődjenek a m is m a tc h _ r e s p o n s e táblában. ha egyszerűen megszabadulnánk a kategória nevektől. Frank: A megoldás egyszerű. Frank: Oké. ami ugyanezt a prob­ lémát eredményezi a kérdőívet tartalmazó űrlap mezocsoportjaival kapcsolatban. nem igazán értem. Jill: Egyetértek. hogy az ismétlődő kategórianevek problémáját úgy oldhatnánk meg.. ami tönkrevágja az űrlapunkat. hogy ki kellene dobnunk a neveket..Urald az adataidat. Joe: Igaz. Briliáns! ^ t 40 ^ . ráadásul néhány nem is helyes. tehát az e g yik kategória elírva ezerepei az adatbázisban. hogy a kategórianeveket miért kell egynél többször tárolni. hogy létrehozunk egy új kategóriatáblát? Jill: Pontosan ezt mondja. hogy helyesen legyen leírva. de a kérdőívet tartalmazó űrlapon továbbra is szükségünk van a kategórianevekre a mezőcsoportok fejlécében.Barbara Streisand: Q Love 0 Hale 1 . Az adatbázisséma megtervezésekor komoly erőfeszítéseket tettünk. És ha már itt tartunk. hogy ez az elgépelt kategória gondokat okoz. ennek ellenére itt állunk egy csomó ismétlődő kategórianévvel. és uralni fogod a világot! Oké. Csak módosítani kell a kategória nevét a m is m a t c h _ t o p ic táblában.. amelyben egyetlen egyszer tárolunk minden kategórianevet. hogy kiküszöböljük az ismét­ lődő adatokat.é s it t egy másik. nem? Joe: Tényleg! Nem akartuk. és számértékű kulcsokkal kapcsoltuk a véleményekhez! Frank: Azt mondod.o p ic és a mi s m a tc h _ c a te g o r y tábla között elsődleges és idegen kulcsokkal kapcsolhatjuk a témákhoz.

amelyek alapján rend­ szerezheted a táblát. hogy az adatokat hogyan fogják használni. A normalizálással kapcsolatos egyik alapvető fogalom az atomi adat. Mi az a fő dolog.az adatok normalizálása Csináld normálisan! A Mismatch adatbázis áttervezésekor azt a folyamatot. Ez a felbontás a Mismatch alkalmazásban azért szükséges. ne csak azt. de nem kell megijedned tőle. illetve logikusan és következete­ sen szétbontod és összekapcsolod a táblákat. fejezet . Készíts listát azokról az információkról. azt is vedd figye­ lembe. ami az adatbázis használatát tekint­ ve még értelmes. 2. A lista segítségével bontsd fel olyan részek­ re az információkat. Az adatbázisok normalizálása meglehetősen szerteágazó témakör. amit az adott táblának le kell írnia. Amikor tehát egy táblá­ ban részekre bontod az ott tárolt „egyetlen dolgot”. Nagy’ vonalakban a következő lépéseket kell elvégezni ahhoz. amit a táblának ábrázolnia kell? 1. Válaszd ki azt az egy dolgot. Mindazonáltal nem mindig szükséges. hogy úgy tervezed meg az adatbázist. A normalizálás alapelveiből éppen elég egyszerű adatbázis-tervezési módszer vezethe­ tő le ahhoz. amelyeket a tábla használatakor ki szeretnél nyerni az adott dologról. és javítasz az adatok kö­ zötti kapcsolatokon. 462 8.ilyen­ kor a name önmagában atomi adatnak számít. Hogyan fogod használni a táblát? Hogyan tudod a legeit: »»rnhhen lekérdezni a táblát? Az atomi adat az adott adatbázis szükségleteit kielégítő legkisebb adategység. 3. hogy a felhasználó nevét kisebb részekre bontják. hogy egy alkalmazás külön „ke­ resztnév” és „vezetéknév” oszlopokra bontson egy teljes nevel . mint ha csak találgatnál. hogy miként kellene elrendezni az adatokat. mint egy egyetlen name oszlop tenné. ami azt a legkisebb adategységet jelenti. mert a felhasználókra csak a keresztnevükkel szeretnénk hi­ vatkozni. hogy mit jelentenek. hogy az adatbázis megtervezése természetes m ódon „normálisabb” adatbázis­ hoz vezessen: A normalizálás (normalization) azt jelen­ ti. hogy jobbá tedd a MySQL-adatbázisaid felépítését. normalizálásnak hívják. ami elsőre ijesztőnek tűnhet. A Mismatch adatbázis f ir s t _ n a m e és la s t_ n a m e osz­ lopai például abban a tekintetben atomi (atomic) adatokat tartalmaznak. amelynek a során kiküszöbölöd az ismétlődő adatokat. hogy csök­ kented az adatismétlodést.

amennyire szükséges. mert gyorsabban lefuthat­ nak. lában. amennyire szükséges/ --------------------.Urald az adataidat és uralni fogod a világot! Normalizáláskor gondolkodj atomokban! Ahhoz. egyrészt azért. Az oszlopok atomi adatokat tar­ talmaznak. hogy kinyerd belőle azt az egy dolgot? A táblát úgy tervezd meg. hogy’ az említett adatbázis-tervezési elveket műveletekre fordít­ hasd le. hogy meghatározd. Senki sem állítja. másrészt pedig azért. Ez segít. levelezó'lista-feliratkozásokat. Az atomi adatok a lekérdezések végrehajtását is hatékonyabbá teszik. mert a lekérdezéseket könnyebb lesz megírni. ne hozd létre őket csak azért. hogy a házszám oszlopába csak számok kerüljenek. de az alábbi kérdések segíthetnek benne: Egy normalizált táb­ la létrehozásának el só' lépése az adatok atomivá tétele. hogy a legkisebb olyan részekre bontod azokat. ahol egy idegent észleltek. Az adatok atomivá tétele azt je­ V ! Segítenek biztosítani az adatok pontosságát a táb­ lenti. a címet cél­ szerű lehet két oszlopra bontani: az utca nevére és a házszámra. Például ha van egy oszlopod. Mi az az egy dolog. hogy a lekérdezések rövi­ dek és lényegre török lehessenek? Nincsenek Gondoskodj róla. hogy könnyen lekérdezhető legyen! 3. amelyek egy hatékony tábla elkészítéséhez szükségesek. most itt vagy ► 463 . hogy adatok csak annyira le­ gyenek kicsik. amelyik azt a címet tárolja. Ha nincs szükséged további oszlopokra. Hogyan fogod használni a táblát.hülye kérdések — K i Az adatokat a lehető legkisebb részekre kell bontani? K i Miben nyújtanak segítséget az atomi adatok? V l Nem feltétlenül. mert megteheted. videojáték-rekordokat vagy reménytelenül romantikus álmodozókat? 2. Nem bontsd fel jobban az adataidat annál. és hogy7 valóban megfelelően atomi egységekre lettek-e bontva. ami nagy mennyiségű adat esetén jelentős megta­ karítást eredményezhet. célzott kérdéseket kell feltenned az adatokkal kapcsolatban. amit a tábla leír? M it ír le a tábla: idegenészleléseket. hogy7 az adatok hogyan illenek az egyes táblákba. hogy az atomok szélvágása egyszerű. így gondoskodhatsz róla. 1. nem a lehetséges legkisebb darabokra.

minthogy sebtapasszal orvo­ sold a kezed közül egyre inkább kicsúszó hibákat. Mivel kevesebb adat között kell keresni. Mi történne.. íme két bizonyított érv az adatbázi­ said normalizálása mellett: A normalizálás előnye. fejezet . hogy mi történne. bázisok általában jó tfal kisebbek a gyen gén megtervezett aidatbázisoknál. . és felszínre hozná a tervezés esetleges hibá­ it? Inkább hozd el a dot-com trófeát. gondolj bele.az P nz ® Ha van ség mindig számít. Lassú. vagy leragadtál a kanárisárga McLarenről való álmodozásnál..a normalizálás előnyei De miért legyünk normálisak? Ha a szerény adatbázisunk esetében az atomi adatokról és a nor­ malizálásról elmondottak túlzásnak tűnnek... A normalizált adat­ Nagy. Légy normális! Ha ennyi még nem győzött meg. ami csökkenti az adatbázis méretét. Úgy is mondhatnánk: „a méret pénz"! . a lekérdezések gyorsabban lefutnak. ismétlődő adatokban gázoló lekérdezés = ro ssz.. hatékony adatbázis = jó! 2. ha a webalkalmazásod népszerűsége az egekbe szökne. ez le hét... és növeli a sebességét. felfújt adatbázis = ro ssz. hogy így szol: « . Várjunk csak.k ic si. 1.fürge lekérdezés = jó! 464 8. A normalizált táblákban az adatok nem ismét lödnek.. ha az adatbázis mérete igen rövid idő alatt nagyság­ rendekkel megugrana. hogy csökkenti az adat­ bázis méretét.

e a s y Traten mg m usic. h o rro r m ovies re a lity T V . Q benne tö b b érték. lőve c o w b o y b o o ts. lo n g H air... o a s y listening m usic. b o d y p ie rcin g s. p ro fe ssio n a l w re stlin g . amely ideá­ lis esetben szám típusú adatot tartalmaz. g o ld c h a in * .jp g elm o rp ic. A laposabban meg kell vizsgál­ nod hozzá. p ro fe ssio n a l w re stlin g . hogy egy tábla adatait biztosan egyedileg lehessen elérni. hogy az egyik oszlop értékének m ódosítása nem teheti szükségessé egy m ásik oszlop m ódosítását.. lo n g h a ir.ip g p a u lp ic .. vagyis ha az egyik megváltozik. ami komoly gondot jelent! y ic m o m e j p a ssw o rd J «..és nem is m in d ig éri meg szigorúan betartani. the o p e ra Az elsődleges kulcs létfontosságú ahhoz.. hogy az adott tábla adatoszlopai milyen kapcsolatban állnak egymással. ugyanabból a típusú adatból nem szerepelhet Egy adatbázis normalizálása © megköveteli bi­ zonyos tervezési Q lépések szigorú betartását. b 4 f 2 8 3 . és ugyanaz az adat sem szerepelhet tö b b oszlopban. b o d y p ie rcin g s. re a lity TV. hogy az oszlopaid atomi adatokat tartalmazzanak! Ahhoz. b 4 t 2 8 3 . the o p e ra bote tattoos.jp g •• • Tupelo t 38801 j 465 . a többit is módosítani kell. b a id p a u l 2 3 0 d c b .Urald az adataidat. A probléma úgy oldható meg. és ugyanazt az adatot több oszlop is tartalmazza. pirture A képzeletbeli irányítószám-oszlop (zip) a város (city) és az állam (state) oszlopától is függ. ím e a lista: ^ ^ Gondoskodj róla.„ ru b y r 0 6 2 o 4 o .’ipg ru b y p ic. 2 3 C d c b ... mert az elv az. g o ld c h a in s..¡pg jo h a n p ic . Gondoskodj róla. Az elsődleges kulcsnak egyetlen o szlo pnak kell lennie. h o rro r m ovie? O i Minden táblát láss el saját elsődleges kulccsal! tattoos. de az általános elvek ennél nem visznek tovább.. * 5 n d 7 . hogy egy oszlop valóban atom i legyen. és uralni fogod a világot! Három lépés a normalizált adatbázis felé Miután eltöprengtél az adataidon. az egy rövid műveletlista.. m ár értékelni tudod a norm alizálás elő_lt... amelynek az irányítószám az elsődleges kulcsa. kül nem biztosítható a sorok egyedisége ebben a táblában. co svb o y boots. Am ire valójában szükséged van. f •• M * C o m b rid g e C h a rle sto n A th e n s C o n u n d ru m MA SC GA AZ MS 02138 29401 30601 85399 die-'drop ic.. ha a felhasználó lakcímét egy önálló táblába helyezed... e 5 l 1 d 7 . hogy Z i > • - - — Ugyanabban az oszlopban több azonos típusú adat szerepel.. hogy a nem kulcs oszlopok ne függjenek egymástól! Ez a norm alizált adatbázisok legnagyobb kihívást jelentő követelm énye . 0 6 2 o 4 a . am elyet végrehajtva m inden adat­ bázist norm alizálhatsz.■ Elsődleges kulcs nél­ d ie rd re b a ld p a u l j no fries ru b y r fhekinq 0 8 4 4 7 b . m ost itt vagy ► 0 8 4 4 7 b .

A meglevő adatbázis-szerkezetet alapul véve vázold fel a módosí­ tott felépítést. hogy megoldd az ismétlődő kategóriane vek problémáját.a mismatch adatbázis normalizálása Gyakorlat A Mismatch adatbázist normalizálnod kell. majd lásd el a működését elmagyarázó megjegyzésekkel! m ism citíh_user user id Ö u se rn a m e first nam e la st_ n a m e b irth d a te state m ism atch_response response user 466 8. fejezet . amely megoldja az említeti problémát. és kiküszöböli az adatbeviteli hibák kockázatát.

máskü­ lönben a felhasználók kétségkívül el fognak írni néhány városnevet. Ez jó példa arra. hogy betartsunk egy válogatós adatbázis-tervezési követel­ ményt.és kivite­ lezhető . de ezt a döntést nem szabad félvállról venni. ezért maradjunk csak a ci t. hogy mindhárom normalizálási lépéshez szigorúan tartanunk kell magunkat. elképzelhető. m ost itt vagy ► 467 . hogy a m ism atch_user táblában ismétlődni fognak a városok és az államok. Az első két normalizálási lépés nem képezi vita tárgyát. \ Hááát. illetve a várost és az államot tároló oszlopokkal. ha a mismatch__user tábla a városok és államok helyett csak az irányítószámot tárolja. Egy érdekes .y és s ta te oszlopoknál. A jó hír azonban az.ez elég sok munka csak azért. mint amire jelenleg szükségünk van. A c it y és a s ta te oszlopot ezután eltávolítha­ tod a m ism atch_user táblából. és uralni fogod a világot! Nincsenek ---------hülye kérdések---------K i Hogyan hajthatom végre a harmadik normalizálási lépést a Mismatch alkalmazás esetében a képzelet^ j beli város-állam-irányítószám probléma megoldásához? V ! A megoldás a felhasználó lakcímének önálló táblába helyezése. Ez azonban bonyolultabb annál. és sok adatbázis-megszállott van azon a véleményen.megoldás lehet (mégpedig az összes problémára). hogy eleget tegyünk a harmadik normalizálási követelménynek? ! De. amikor komolyan mérlegelni kell a szigorú nor­ malizálás előnyeit egy gyakorlati alkalmazás valóságával szemben. de irányítószám nélkül az a gond a város és az állam kihelyezésével. így előbb-utóbb hely­ telen adatokat kapunk.. nem kellene a várost és az államot külön táblákba helyezni. A harmadik lépést illetően azonban mérlegre kell tenni a makulátlan adatbázis-felépítés csá­ bítását az alkalmazás valós szükségleteinek realitásával szemben. Létrehozhatsz például egy m is m a tc h _lo c a tio n nevű táblát egy lo c a t io n _ id nevű elsődleges kulccsal. Tényleg szükséges ez? ! Igen is. meg nem is. valójá­ ban nem része a m ism atch_user táblának. majd a várost és az államot szükség szerint egy statikus táblából vagy egy webszolgálta tás segítségével keresi ki. ami kiküszöböli a nem kulcs oszlopok egymástól való függőségét. ezért nem igazán kell aggódnunk miatta. majd a m ism atch_user tábla hozzákapcsolása az új táblához egy idegen kulcson keresztül. hogy valahogy fel kell töltenünk ezeket a táblákat az összes létező várossal és állammal.. és a lo c a t io n _ id idegen kulccsal helyettesítheted azokat. A Mismatch alkalmazás város-állam-irányítószám problémáját valószínűleg el lehet fogadni az egyszerűség érdeké­ ben. mert az adatok atomisága és az elsődleges kulcsok minden jól megtervezett adatbázisban létfontosságúak. Probléma megoldva! Ezt a felépítési az teszi működőképessé. ! Még ha figyelmen kívül hagyjuk is az irányítószám oszlopát. hogy a lo c a t io n _ id oszlop elsődleges kulcsként használja az irányítószámot. hogy az irányítószám oszlopa csupán a képzeletünkben létezik. Világos.Urald az adataidat.

m ajd lásd el a m űk öd ését elm agyarázó megjegyzésekkel! Az új kategóriatábla a kategórianeveket a témáktól elvá.immár normalizá/va! A Mismatch adatbázist no rm alizálnod kell. és k ik üszö b öli az adatbe Gyakorlat — megoldás Viteli h ib ák kockázatát.^ -----------------.--------.\__ ________ p o ssv/ord ________ _____________ a témák változásai.minden kategóriához van egy sorunk. (a i m t ő é t ) r—-------------------------— ---------------. A m eglevő adatbázis-szerkezetet alapul véve vázold fel a m ó ­ dosított felépítést. hogy önállóan tároljuk azokat. ami kiküszöbö^ a) t s é | d s . hogy a m ism atch_category tábla kategóriasorai egy-a-sokhoz kapcsolatban állnak a m ism atch_to pic táblában tárolt témák soraival. hogy a m i s m a t c h _ c a t e g o r y tá t aban csak öt sor található (kategóriánként egy)? Pontosan így van: mismatch category A p p e a ra nce Entertainm ent Minden kategó­ rianevet csak egyszer tárolunk! Activities 468 8. / --------. ami a kategóriatábla megfelelő sorára mutat. fejezet . illetve \ t í t í jo v . és lehetővé teszi. A témák soraiban a tényleges kategórianevek helyett csak egy hivatkozásty (azonosítót) tárolunk. hogy m egoldd az ism étlődő kategórianevek problém áját. Az új kategóriatábla minden sora egy-a-sokhoz kapcsolatban áll a tématáblában található témákkal Nincsenek ív : ! Az új tábla elválasztja a kategórianeveket a mi sm atch _to p ic táblától.7 ________ rirs t_ n a m e ________ la st n a m e ------------- \J. ) ¡o in _ d a te ) -----.“T “ m ism q tch _ re sp o n se re sp o n s e _ id r esponse user id to p ic jd _ _ / mismgt«h_topic to p ic jd nam e Emlékezz vissza. Annak köszönhetően.— ----------------------______»"ismcitch_user--------u s e r jd 0 ' ' u se rn a m e \ ^ A Mismatch adatbfejj föbbj rés2ét nem érintik a kategóriák. am ely m egoldja az említett problém át.'y jd \ \ I lasztva tárolja. V Pontosan hogyan oldja meg az új m is m a t c h _ c a t e g o r y tábla az ismétlődő adatok problémáját? Akkor ez azt jelenti. a nevüket már nem szükséges megismételnünk . hogy a kate­ góriák a saját táblájukban tárolódnak. amely a felhasználókat — • az egyes témákról alkotott vélemé­ nyükhöz kapcsolja. és a mi srnatch_ to p ic tábla sorai ezekre a sorokra hivatkoznak. Ez azt jelenti.a mismatch adatbázis . hogy a mismatch_response egy kapcsoló tábla.

Urald az adataidat. PRIMARY KEY (c a te g o ry _ id ) DROP COLUMN mismtrt<h_fopi< t o p i c j d O '1 *« nam e A témákat egy új ca te g o ryjd nevű idegen kulccsal kapcsoljuk a ka­ tegóriatáblában található kategóriákhoz. és uralni fogod a világot! irtöLL mismatc h _ c a te g c ry H c a te g o r y _ id INT NOT NULL AUTO_ name VARCHAR(49) NOT NULL. - ¿nuuL Cli ~OplC ADD COLUMN c a te g o r y _ id INT NOT NULL H o rro r m ovies E a s y listening music o p e ra Peanut butter & b a n a n a sa n d w ich e s M artin is H o w a rd Stern B a rb a ra Streisand most itt vagy ► 469 .

hogy meggyőződj róla. 470 8. ha jó okod van rá. mismatch user user userna m e p a s s w o rd first nam e last nam e Az adatbázisban a nevek min­ denhol a leginkább atomi forrná jukban tárolódnak. frissítsd (UPDATE) a mi s m a t c h _ t o p ic tábla sorait. az. Az emberek normalitásához hasonlóan az adatbázisok normalizálásának is van­ nak fokozatai. hogy megkerüld a szabályokat. és soha nem ismétlődnek több oszlopban. A lényeg az. amely hozzáadja az új m is m a tc h _ c a te g o r y nevű táblát a Mismatch adatbá­ zishoz.teszteld a norma/izá/t mismatch-táblákat! Tesztút Hozd létre és töltsd fel az adatbázis új mismatch_category tábláját! Valamelyik MySQL-eszköz segítségével hajtsd végre az előző oldalon szereplő CREATE t a b l e SQL-parancsot. akkor sincs minden veszve. hogy a cat. végül pedig futtass le egy SELECT uta­ sítást mindegyik táblán. hogy a nem kulcs oszlopok ne függjenek egymástól! Minden tábla egyediségét egy szám típusú elsődle­ ges kulcs biztosítja. Ha mégsem. Ha a Mismatch adatbázis minden táblájára alkalmazod a normalizálás három fő szabályát. O A A Gondoskodj róla. a m is m a t c h _ t o p ic táblát módosító két ALTÉR utasítással vedd fel a c a t e g o r y _ id oszlopot. A Mismatch adatbázis most már tényleg normalizált? Igen. m ism atcjuçatego ry nam e mismqfch_fopi< b irth d a te to p ic id O “ 3® ’ nam e A képzeletbeli irányítószám nélkül a felhasználó címét táró ló oszlopok többé nem küzdenek függőségi problémákkal. hogy remekül m ű­ ködnek. hogy minden megfelelően működik. hogy próbálj teljesen normalizált adatbá­ zisokat tervezni. látni fogod. hogy feltöltsd a táblát a kategóriák adataival. fejezet . hogy az oszlopaid atom i adatokat tartalmazzanak! Minden táblát láss el saját elsődleges kulccsal I Gondoskodj róla. Ez után add ki az INSERT utasításokat.egory__id oszlopuk a megfelelő kategóriára mutasson a m is m a tc h _ c a te g o r y táblában. és csak akkor érd be kevesebbel.

Ebben az esetben úgy módosítottuk az adatbázis felépítését. hogy a normalizálás miatt nagy­ szerű ötlet volt -. és uralni fogod a világot! A Mismatch új tá b la szerkezete nem befolyásolja a kérdőívet előállító parancsfájl kódjában szereplő lekérdezéseket? m ism qf<h_u c a f e g o r y id nam e táblából De igen. szükségessé teszi a lekérdezések felülvizsgálatát.Urald az adataidat. hogy hozzá­ adtuk az új m ism atch_category táblát. és a kódjuk átdolgozását. hogy a kategóriákat külön táb­ lába helyeztük .p h p m ost itt vagy ► 471 .amiről most már tudod. Egy adatbázisban valójában a legtöbb szerkezeti változás megköveteli az érintett táblákat használó lekérdezések módosítását. q u e s tio n n a ire . Ennek az az oka. hogy a korábbi adatbázis-szerkezetben a kategóriákat közvetlenül a m ism atc h _to p ic táblában tároltuk.opic táblára támaszkodik. amely a m ism atch_t. hogy még egy táblát (m ism atch_category) figye­ lembe vegyenek. Az. ami minden olyan lekérdezést érint.

( i i i i ^ j több táblából olvassuk ki. mivel az adatokat .. hogy a lekérdezésekben alákérdezéseket (subqueries) kell használni. Vegyük a Mismatch-kérdőívet tar. m is m o h h ta te g o r» nam e user c a te g o ry _ id 0 nam e "* Tattoos »••••••• •««••••a A p p o a ra n c e A p p e a ra n c e Ezek az ismétlődő a tok nem jelentenek gond*t. $ S E S S I O N [ • $ d a t a . C o w b o y boots Long h a ir R eality T V \ A p p e a ra n c e • A p p e a ra nce -/Entertainm ent' nem ódnak P ro fessional w restlin g r Entertainm ent H o rro r m ovies ^ En tertain m en t 472 8.»" . $rowf ’ tc p ic _ n a m e 1] = $row2 [ T name ’ ]. < $dataT .. ¿query) $responses . ’W K K R K u s e r _ í d . ez a függvény árulja el. // A témához tartozó kategórianév kikeresése a mismatch_cat.mysql i. $data3 . $query3!.mysqli_query($dbc.mysqli_query($dbc.. fejezet .. ami három lekérdez igényel. ■ topic " . hogy hány adatsort adott vissza a lekérdezés. • $row2 1 'c a t e q4 r y . Egy adatbázis normalizálása gyakran azt a problémát vonja maga után. _ .árray(|. t o p i c _ i d . amelyet a Mismatch kérdőívet tartalmazó űrlap előállítására használunk. teha több példányban f ■ I I Ez az ideiglenes vélemény­ tömb.egory táblából 'au-rv3 ."SELEÖT response i d . .rtftsql i_fetch_array (Sdat. $ £ d w [* . m ism at<h_response mismat<h_topi< tz az új lekérdezés a category_ic kulcs segítségével olvassa ki a ka tegória nevét a kategóriatáblából.$cow3 ['name ]. if ( m y s q l í _ n u m _ r o w s ( $ d a t a 2 ) . Ne feledd. mert egyetlen forrástól a kategóriák táblájáé»! nyerjük ki Őket. -_id’ . re s p c n se FROM misma1ch re sp o n se M . ] . • . w h ile ($row — m y s q li_ f e t c h _ a r r a y ($ d a ta ) ) { // A véleményhez tartozó téma nevének kikeresése a mismatch_topic Lábiából . . $row[ ’ c^eqorY_nameM ._ : ._query{$ d b c .m y s q li_ _ fe tc h _ a r r a y ($ d a ta 2 ) .id * ] v Az adatokat hái különböző tábli nyerjük ki.a3)."SELECT name FRCM mismatch_category ” r „ id o "WHERfcl c a t e g o r y _ .1) { $row2 . $query2).lennie kell jobb módszernek a lekérdezések végrehajtására! Lekérdezésen belüli lekérdezésen belüli lekérdezés.. if (mysql1 _num_rows($data3) ““ i) t Srow3 . ami nehézkes lehet.D O n y O lU ltáb b Ifik é rd B " talmazó űrlapot a véleménytömb felépítésével előállító lekérdezés új változatát: Z g S g k fit j© 16 fit A több tábla általában // A vélemény adat ok kiolvasása az adatbázisból az űrlap élőéi' itássához S query . .

. a megoldást az SQL-ben az összekapcsolás (jóin) jelenti. és uralni fogod a világot! Kapcsold össze a táblákat! Ó. IxLfil n|/pp: Lj ' • Az összekapcsolás lehe­ tővé teszi. ami lehetővé teszi. m is m a tc h _c áte g o ry .. A lekérdezés végeredménye mindkét táblából tartalmaz adatoszlopokat. hogy a kategóriaazonosító minden visszaadott adatsorban megegyezzen.Urald az adataidat. de a legnépszerűbb a belső összekapcsolás (inner jóin). hogy egyetlen lekérdezéssel több táb- _ FROM m is m a tc h t c u i c " • *** 8 .éma w o s í t ó j i t és a kategória nevét válaszf- SELECT m is m a tc h _to p i : . t o p ic jL d .c a t e g o r y _ i d m is m a tc h _ c a t :e g o r y . m ost itt vagy > 473 . Belső összekapcsoisnál a lekérdezés eredménye csak azokat a sorokat fogja tartalmazni. amelyeknek a kiolvasása korábban két külön lekérdezést igényelt volna. . A p p e a ra n c e ' / ’ 2 3 I A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e A p p e a ra n c e Entertainm ent Entertainm ent Entertainm ent ••• V 10 " J 1 \ The o p e ra Sushi Az eremény második oszlopa azokat a kategó­ rianeveket tartalmazza a kategóriák táblájából. mismatch_topic IO M Tattoos A 3 5 ó 7 8 9 1 1 C o w b o y boots lo n g h a ir R eality T V P ro fessio n al w restling H o rro r movies E a s y listening music 1 1 2 2 2 2 2 3 _ _ _ G o ld chains B o d y piercing s Ez az oszlop ve­ 1 1 1 mi smatch_category «ougonrjd O—ir •m3 P* aitagory zérli az össze­ kapcsolást. táblából i adatok. A tábla-összekapcsolásnak több fajtája is létezik. 4 5 6 Az eredmény első' oszlopa a témaazono­ sítókat tartalmazza a témák táblájából.c a t e g o r y i d ) V A kategóriák tábláját egy INNER JO lN-nal kapcsol­ juk a témák táblájához. name Appearance Entertainment Food People Activities .mely két táblából választ ki egy sorokat egy feltétel alapján. hogy egyetlen lekérdezéssel több táblából nyerj ki adatokat. 7 \ 8 J Ez a belső összekapcsolás sikeresen fésül össze olyan adatokat a két táblából. jaj! Nem lehetne tenni valamit az egymásba ágyazott lekérdezésekkel? Nos. amelyek megfelelnek a témaazonosítóknak. \ . Az összekapcsolás feltétele. amelyek deget tesznek a feltételnek. naroe ae 0 s?Í0 p°k két küfó^bö^ó'táblában tafá/fiatők INNER J01M mismatch_category ON { m is m a t c h _ t o p i c .

feltehetően a mi sm a tc h _to p ic táblán belül.name 5 FROM mismatch topic Egy másik tábla/oszlophivatkozás. Az azonosításhoz csak annyit kell tenned. ¿ -LECT mismatc!*i_t. amely a pont jelölést használja. «Ugoryjd 474 8. valamint egy pontot. amely az eredményhalmazát a témaazonosítókból és a kategórianevekből építi fel: * f ai/a Ln/i * a/i Xo* A pont jelölés teszi leheT0V6. ami a táblanevek nélkül teljes kavarodást okozna Ha nem lehetne meghatározni. amelyet a tábla nevétöl egy pont választ el. Konkrétabban. amikor JOIN-t használó lekérdezést írunk. hogy az oszlopok melyik táblába tar­ toznak ebben a lekérdezésben.az oszlopnevek megegyeznek. fontos. NNER JOIN mismatch_category A pont jelölés előnye itt mutatkozik meg igazán . • Ez az oszlop neve a ta'blán belül. Az oszlopokat tartalmazó táblákat tehát mindig célszerű nagyon pontosan meghatározni. ndsmatch_caregory . A lekérdezés ON része egyenesen értelmezhetetlenné válna. hogy mely oszlopokra hivatkozol. hogy a c a te g o ry _ id oszlop egyenértékű-e önmagával.opic. topic id. hiszen azt vizsgálná.a pont jelölés használata pontokkal Kösd össze a pontokat Mivel az összekapcsolások egynél több táblát érintenek. különösen ha kulcsokról van szó. Lássuk például az előző INNER JOIN-t használó lekérdezést. hogy az oszlop neve elé írod a tábla nevét. hiszen a táblák gyakran tartalmaznak azonos nevű oszlopokat. hogy világos legyen. nO^y 6Qy 0SSZ6K3p“ l 1/ h csolason belül hivatkozz i n tá r tá l aClOTT OSZIOpOl T a n a i ^ ITIdZÓ t á b l á id . fejezet . a kavarodás elkerülése érdekében minden oszlop tábláját azonosítanod kell. onma Egy JO IN -t használó le kérdezésben ez az osz­ lopnév nem egyértelműi h íaoia azonosítása pon­ Tattoos G o id chains Body piercings tosabb JOIN-Iekérdezést eredményez. jókora kavarodás lenne.

a szokásos lekér­ dezési szerkezetekkel tovább finom íthatod az eredményt. A kategórianevek a mismatch_cate gory táblából származnak.nam e FRCJM m is m a t c h _ t o p ic INNER JÓIM mi s m a t c h _ c a t e g o r y DN (m ism aLch t o p i c . am elyben a tém a neve ’ H o r r o r m o v ie s '. amellyel elkülönítheted a kívánt sort: ■SSLECT misma“ c h _ t o p ic . Em lékeztetőül álljon in a WHERE záradék nélküli belső összekapcsolás eredménye: _m ____ 1 1 1 2 3 4 5 Entertainm ent 1 1 6 7 8 I •• • I Entertainm ent 1 Entertainm ent 1 A ppea rance A p p e a ra nce A ppea rance A p p e a ra nce A ppea rance [ A témaazonosítókat a mismatch_topic 1 táblából nyerjük ki. m ism atch_category. íz a sor felel meg r ___ a WHERE záradék feltételének. em lékezz vissza.Urald az adataidat. to p ic id . Az INNER JÓIN egy feltétel összehasonlí­ tó műveleteivel kap­ csol össze sorokat két táblából. A W HERE záradék az eredm ényhalm azt egyetlen sorra szűkíti: ¿rra a sorra. Ez a két oszlop vezérli a két tábla összekap­ csolását. egy WHERE záradékot tsz az INNER JOlN-lekérdezés végéhez. Mit ad vissza pontosan ez a lekérdezés? Először is. és uralni fogod a világot! A belső összekapcsolás ennél biztosan többre is képes belső összekapcsolás nem csak két tábla adatainak összefésülésére képes. mi sma tch^topic topicJ d o*“ 33^ [P r o f e s s io n a l wrestling 1 id r \ 7 8 ~ H o rro r m ovies 1 E n s y listening music | 9 í A WHERE záradék az összekapcsolás eredményét egyetlen sorra szűkíti. Mivel belső összekapcsolás végeredm ényben maga is egy lekérdezés. m ás szóval szűkíti az eredeti \ NNKR Ez az oszlop szííkíti a W/HERE záradékban az eredményhalmazt. JOlN-lekérdezés által visszaadott sorok halm azát. Ha az összefésült eredyhalm azból például egy adott sort szerelnél kinyerni. hogy m elyik sorról van szó: Az eredeti INNER JÓIN eredményhalmaza a WHERE záradék miatt erre a magányos sorra szűkül. hogy ^ WHERE záradék a lekérdezés finom ítására szolgál. c a t o g o r y _ i d ) . c a t e g o r y _ i d = m is m a tc h c a t e g o r y . most itt vagy ► 475 . N ézzük meg a m is m a tc h _ to p i c táblában.

hogy’ egy adott kategó­ riát keressen: . n a m e ’ ért ainmerr ' Erit Ez a WHERE záradék az eredményhalmazt azokra a té­ mákra szűkíti. FROM mismatch_topic INNER JOIN mismatch_category USING ( c a t e g o r y _ id) m i sma*:ch_ca t e g o r y . hogy az oszlop neve pontosan ugyanaz legyen mindkét táblá­ ban. K i A Mismatch jo iN -le ké rd e zé sé b e n a mismatch_ca^ j tegory táblán is alapulhatna a w h e re záradék? V ! Természetesen. I egy belső* összekapcsol bán a USING utasítást használhasd. de a lekérdezés által visszaadott sorokat igen. W H K R E m i s m a t c h _ c a t e g o r y . fejezet . Egyszerűsítés a USING segítségével Ne feledd. topic_ia.opic_id. . A usiN G utasítás az ON helyét veszi át az i n n e r JOlN-lekérdezésben. a lekérdezés a US ING utasítással to­ vább is egyszerűsíthető. Példaként lássuk még egyszer a Mismatch-lekérdezést: S E L E C T m i s m a t c h _ t o p i c . nem a lekérdezés eredményére.n a m e = Mivel a lekérdezés ON része azonos nevű (c a te g o ry _ id ) oszlopokra tá­ maszkodik. majd csak azt a sort választja ki.. narre - Az oszlopneveknek me kell egyezniük ahhoz.n a m e C az oszlop nevére v sak an szükség. Az INNER JÓ IN te­ hát mindkét tábla c a t e g o r y _ id oszlopát alapul veszi. 476 8. egyenlőséget ne m kell m egadni az = j< 'Horror movies' W H E R E m i s m a t c h t o p i c . hogy a WHERE záradékban vég­ zett összehasonlítás az eredeti táblákra vonatkozik. amelyben a m is m a tc h _ to p ic tábla name oszlopa egy bizonyos ér­ téket ( ' H o rro r m ovies *) tartalmaz. A Mismatch-példában a lekérdezés két olyan táblából nyer ki adatokat. F R O M m i s m a t c h _ t 0p i c INNER JOTN mismatch caLegory ON m i s m a t c h _ c a t e g o r y . csak Az ON helyett a USIN6 utasítást használva tömö­ rebb belső összekapcso­ lást használó lekérdezés írhatók. A WHERE záradékot pél­ dául úgy is lehetne módosítani. amelyek egy kö­ zös oszlop alapján hajtjj végre az összekapcsolá a táblák különböznek. t. Csak arra kell ügyelni.lekérdezések egyszerűsítése a USING utasítással Nincsenek hülye kérdések K ! Tehát a w h e re záradékkal az összekapcsolt táblák egyi­ kének sorai szerint lehet szűkíteni egy JO iN -lekérdezés ^ j eredményét? V ! így van.op i c tábla name oszlopa szerint szűkíti az eredményhalmazt.c s t e q o r y _ i d } 'Horror movies' W H E R E m i s m a t c h _ t o p i c .c a t e q o r y _ _ i d = m i s m a t c h c a t e g o r y . és annak az oszlopnak a nevét kell megadni benne. Ha azonban egy belső összekapcsolás azo­ nos nevű oszlopok megfeleltetésével jár. egyr USING utasítással egyszerűsíthetünk rajta: S E L E C T m i s m a t c h topic. A V/HERE záradék tehát nem befolyásolja a táblák összekapcsolásának módját. de a WHKRE záradék csak a m ism atch _t. A WHERE záradék az összekapcso­ lásban érintett táblák bármelyike alapján képes szűkíteni az eredményhalmazt. amely­ ben egyaránt szerepel egy bizonyos oszlop (c ate g o r y _ id ). amelynek alapján végre szeretnénk hajtani az összekapcsolást.m i s m a t c h _ t ö p i c .. Ne feledd. amelyek az Entertainment kategóriába tartoznak. hogy a célunk a bonyolult Mismatch-lekérdezések egyszerűsíté­ se az LNNER JÓ IN segítségével.n a m e A oszlopok neve z m egegyezik.

am i azért jelent problém át. hogy m elyik melyik.úgyhogy lép jün k m ég egy* lépés­ sel tovább! Az SQL-lekérdezések esetében m egszokott.t o p ic i d = '11 ^ A kiválasztoH oszlopok^ mos' beszédesebb álneveket adunk. ^ to p fc n a m e Sushi categ o ry nam e Food Ha egy oszlopnak álnevet adsz. / _ m in m a iiL íh b íi^ <j t o p i e j d © “ “ “sT _ C nam O j Cy flte q o r / c a t e q o r y jd nam e l/ Ennek a két oszlopnak a ki­ választása egy összekapcso­ lásban azonos nevű oszlopo­ kat eredményez. a U S IN G ( . Iz é n id ő n k é n t érdemes álneveket alkalm azni. ami nem jó! FRCM m i s n i a t c h _ t o p í c AS m t INNER JÓIN m ism atch_category AS mc USING (c a te g o ry _ id ) WHERE m t. írjuk s át a Mismatch-lekérdezést álnevek használatával: — 5 £ LE C m t .: :aiRé A S to r ic_nam o.name PS c%i A mismatch_topie táb­ lára mutató hivatkozások ezután kivétel nélkül m t"-re rövidíthető^. hogy átnevezz egy táblát vagy oszíopof egy lekérde­ zésen belül.Urald az adataidat és uralni fogod a világot! Becenevek a táblák és oszlopok szamára i t. name ^ ’ H o r r o r m o v ie s ’ Ennek az álnévnek köszönhetően a mismatch_category táblára ezután egyszerűen „mc"-ként hivatkozhatsz.a gond csak az.ezúttal a mismatch J o p ie tábla szamara. mc. így m egállapíthatjuk. m • nam e ^ A táblanevek rövidebb álnevekké tömörítésével a kóíi valamivel könnyebben olvashatóvá va'lik. am elyen azok az adatbázisban szerepel- aek. m ost itt vagy ► 477 . hogy azon a néven hi­ vatkozunk a táblákra és az oszlopokra. mert az említett két oszlop kom binálása nem egyértelm ű oszlopneveket eredm ényezne. hogy valamilyen módon egyszerűsítsd lekérdezést. FROM: r a is m a t c h _ t o p ic AS mt : i:!k jc ::t t'e g 'ő: . mert a nevek nehezen olvashatóvá lehelik a lekérdezést. t o p i c _ i d . hogy töm örebb lekérdezéseket ír­ junk? Nem. Az eredm ényként kapott oszlopoknak azo n b an álneveket ad­ hatunk. amely egy adott tém aazonosítóhoz a tém a nevét és a kategória nevét is kiolvassa . amellyel egy táblára vagy oszlopra hivatkozhatsz egy lekérdezésben. Az álnevek csak arra jók. az álnév jelenik meg a lekérdezés eredményében. Az álnév lehetővé teszi. üü <50L-ben az AS kulcsszóval hozhatsz létre a! . hogy a m is m a t c h _ t o p ic és a m is m a tc h _ c a t.ier JOIN-Iekérdezésünk egyre töm örebb . töb b tábla összekapcsolását igénylő lekérdezésekben ez a zo n ­ ban nehézkes lehel. A nagyobb. Az álnév (alias) olyan ideiglenes * \ íéy. Az eredményként kapott osz­ lopok neve most már egyedi és azonosításra alkalmas. c a tö g q r $ f _ id \ WHERE m t . sőt egyes helyzetekben kifejezetten elengedhetet­ lenek! A M ism atch alkalm azásban nagy hasznát v e n n én k egy olyan összekapcsolásnak. SELÉCT n .e g o ry tábla ugyanazt az oszlopnevet (name) használja ezekhez az adatok­ hoz.

a = m y s q l i q u e r y (-§dbcf $ q u e r y ) .nevének kikeresése a nusmatch_topic táblából i t : . amelyeket aztán egyetlen ereménytáblába írsz.: i . A fő lekérdezés alapja a témaazonosí­ ff f tt táblákból } tó. . $ r o w [ *t o p i c _ n a m e * J . mint a beágyazott lekérdezések. d a t •2 a V> • A szerűsítjük.tegory " * " W H E R E c a t e g o r y id = . " f". A véleménytömböt felépítő Mismatchlekérdezés tökéletes jelölt az összekapcsolásra. r // A témához tartozó k a te gó ri a né v kikeresése a mismatch_c at eg or y táblából $.^2). ’ o p i c _ i d '] t A kódot álnevek iata2 . ] Most pedig lássuk a kód új változatát. hogy egy lekérdezés több táblát is érintsen.‘ •• ■ ). $ r o w . w 2 [ l t o p *].a lekérdezések átírása összekapcsolások használatával Az összekapcsolá­ sok hatékonyab­ bak. $ _ S B S S I O N [ ». ff Megmentőnk.a r r a y ($.K E u s e r _ i d . $ r o w 2 f 1c a t e g o r y i d ’ ] $ d a t a 3 = m y s q l i :iuery ($ d b c . /.¿i» $quety2 = " S E L E C T natne.$ r o w 2 [| n a m e 1 1.m y s q l i j q u e r y ( $ d b c f $ q u e r y 2 } . ] a r r a y _ p u s h ($r e s p o n s e s . de magát az összekapcsolást a ka­ tegória-azonosító vezérli. $dar. fejezet .1" .query3 *■ " S E L E C T n a m e P R O M ml 5match__ca. $ r o w ) . -¿¡. r e s p o n s e F R O M m i s m a t c h _ r e s p o n s e " V . $responses = arrav{).." S E L E C T m t . $responses = array().opic_íd. amely egy összekapcsolást alkalmaz: // A v é l e m én y ad at ok kiolvasása az adatbázisból az úr la p előállításához $ q u e r y = "SELECT response_id. mint há­ rom beágyazott lekérdezéssel olvas a táblákból. if ( m y s q l i _ n u m r o w s ( $ d a t a 3 ) = = 1 ) I $ r o w 3 = m y s q l i letch_ a r r a y ($da ta 3J . J a r r a y _ p u s h {$ r e s p o n s e s . . .$row2Tj' c a t e g o r y _ n a m e fj . w h i l e ( $ r ö w = m y s q l i _ f e t c h _ a r r a y ($ d a t a )) { A véleményhez •-r .’ rR s " I N N E R J O I N m i s m á t rh c a t e g o r y A S m e U S I N G ( c a t e g o r y _ i d ) 1 11 f 1 " W H E R E m t . $ r o w ['t o p i c _ n a m e *] . ] $data2 = mysqli query($dbc.user^id* ] . t o p i c _ i d .ch— category $ q u e r y 2 . response FROM misinatch_response o " W H E R E u s e r i d = »" . A Icód Utolsó két lekérde­ zése felel a téma és a ka­ tegória nevének a kiolvass sáért a megfelelő táblákW -te h á t táblánként egy-efl lekérdezést használunk. i f { m y s q l i _ n u m _ r o w s ($ d a t a 2 ) = 1) I $ r o w 2 = m y s q l i í e t c h _ a r r a y (gdat. n a m e A S c a t e g o r y _ n a m e I’O M m i s m a t c h t o p i c A S m t 1 . $ r o w f 11 o p i c _ i d ’ . $ r o w [ f c a t e g o r y n a m e ’ = $ r c w 3 ( *n a m e | ] . és kevesebb kódot igényelnek. “ p i ^ i d . t. Kezdjük az eredeti kóddal: // A véleményadaLok kiolvasása az adatbázisba' az űrlap előállításához S q u e r y = " S E L E C T r e s p o n s e _ i d . vagyis több helyről olvashass ki vele adatokat. $ q u e r y ) . $ r o w f 1c a t e g o r y _ n a m e *. m e .1" . $ q u e r y 3 ) . mivel nem kevesebb. S _ S E S S I O N [ fu s e r _ i d ’ ] $aar. $ r o w }.a = m y s q i i _ q u e r y ( $dbc. i f ( m y s q i i _ n u m _ r o v r s ( $ d a t a 2 ) — 1) { használatával egy­ $ r o w ? = m y s q l i — f e t c h . cat'é r y _ i : FRÖty i n i s m at ch d " "WHERE tcpíc i d = . w h i l e ($row = m y s q l i I e t c h _ a r r a y ( $ d a t a )) { // A véleményhez Lartozó téma és kategória nevének kikeresése a m ismatch ^ topic é s mismat. az összekapcsolás Az összekapcsolások tehát lehetővé teszik.n a m e A S t o p i c n a m e . hogy egyetlen lekérdezéssel kiolvassuk a téma és kategória nevét is. I f §tf l«l # t fi x Az összekapcsolás le­ hetővé teszi. 478 8. $quéry?).

amely a következő három dolgot hajtja végre: ki­ olvassa a felhasználó összes véleményét. kikeresi a véleményekhez tar­ tozó témák nevét. amely az összekapcsolások ügyes alkalmazásával képes a véleményadatokat egyetlen lekérdezéssel kiolvasni az adatbázisból. Az előző oldalon található új.Urald az adataidat. és uralni fogod a világot! N em értem. továbbfejlesztett kód az utóbbi két lépést végzi el egyetlen lekérdezésben. ha egyetlen. legalábbis akkor nem. a m e ly ik a kategórianevet keresi ki. két összekapcsolást alkalmazó lekérdezés terítené le mindhárom madarat egy nagy. Még mindig van egy föiöe lekérdezésünk. $ r e s p o n s e s — a r r a y ! ). összekapcsolás alakú kővel. Az ideális megoldás azonban az lenne. Kettőnél több táblát is lehetséges összekapcsolni . Egyetlen lekérde­ zésre van szükségünk. ha az össze­ kapcsolások minden lehetőségét kiaknázzuk. amely elvégzi a m ism atch_response. Ha az összekapcsolás olyan k irá ly .és a Mismatchvéleménytömb kódjában valójában erre van szükség. majd kikeresi a véleményekhez tartozó kategóriák nevét is. m ism a tc h _to p ic és m ism atch_category táblák összekapcsolását! / / A v é le m é n y a d a to k k i o l v a s á s a $query = az a d a t b á z i s b ó l az ű r la p e lő á llítá s á h o z $ d a * a = r a y s q l i _ q u e r y ($ d b c . Légy te is ügyes. ) most itt vagy ► 479 . w h i l e ( $ r o v = m y s q l i _ f e t < 2h _ a r r a y ( $ d a t a ) ) { a r r a y _ p u s h ($ r e s p o n s e s . S q u e r y ) . $ r o w ). a m ism a tc h _to p ic és m is m a tc h _ c a te g o r y táblák összekapcsolásának segítségével. és írd meg az $QL-lekérdezést. Gyakorlat Az alábbiakban látható a kód. m ié r t van szükség két lekérdezésre? Nem szükséges két lekérdezés.

Vannak bal külső összekapcsolások (leit outer jóin).i i . h o g az összekapcsolásban mely oszlopok vesznek részt.a gyakorlat megoldása és nem hülye kérdések Az alábbiakban látható a kód. A természetes összekapcsolásokat ez az automatikus mivoltuk kevésbé kívánatossá teszi a normál belső összekapcsolásoknál.respcm sejcl.megoldás m is m a t c h _ t o p ic és m is m a tc h _ c a te g o r y táblák összekapcsolását! . amelyben minden olyan oszlopot összehasonlítunk. és van a ritkán használatos.ez csak az adott adatbázis-alkalmazó nyeitől függ. A bel­ ső összekapcsolások harmadik fajtája a természetes összekap­ csolás.response. hogy a támaszon*sftó szerint kikereshess* belőle a témanevekei } A lekérdezés eredményeként ka­ pott összes adatot a $responses tömbben tároljuk. ami lehetővé teszi a kategórianevek elérését. V Vagyis az SQL-ben minden összekapcsolás csupán a becs: összekapcsolások valamelyik változata? ! Nem. amelyben az összekapcsolást meghatározó oszlopok megválasztása automatikusan történik. $responses = array()./ / A v é le m é n y a d a to k k io lv a s á s a $query az a d a tb á z is b ó l az ű r la p ' e lő á llítá s á h o z - "SE L E C T m r. Mivel a megfeleltetés „egyenlő" oszlopokat (egyező azonosítót) igényel. mint a belsők . de d * e a csoportba is több különböző típusú összekapcsolás tan zk.m y s q l i _ q u e r y ( $ d b c . h * r nem létezik. Na jó. A második összekapcsolás a kategőriatáblát drótozza be 3 lekérdezésbe a kategó­ riaazonosító segítségével. . mert ránézésre nem nyilvánvaló. vedd meg a r:\wÉ First SQL című kötetünket. hogy