PHP ​és MySQL webfejlesztőknek - Hogyan építsünk webáruházat?
 9789639929135, 9639929131 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

PH P és MySQL® webfejlesztöknek Hogyan építsünk webáru házat?

Lu ke Weiling Laura Thomsan

PHP és MySQL webfejlesztöknek - Hogyan építsünk webácuházat? © 2010 Perfact-Pro Kft. Minden jog fenntartva!

ISBN 978-963-9929-13-5

A könyv eredeti címe: PHP and MySQL Web Development, 4th Edition A magyar kiadásért felelős a Perfact-Pro Kft. Authorized translation from the English Language edition, entided PHP and MySQL Web Development, 4th Edition 0672329166, by W ELLING, LUKE; T HOMSON, LAURA, published by Pearson Education, Inc. publishing as Addison­ Wesley Professional, Copyright© 2009 Addison-Wesley. Ali rights reserverd. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, indudig photocopying, recording or by any information starage retrieval system, without pertnission from Pearson Education, Inc. HUNGARIAN language edition published by Perfact-Pro Kft., Copyright© 2010 Perfact-Pro Kft.

Bármilyen másolás, sokszorosítás, illetve adatfeldolgozó rendszerben történő tárolás a kiadó előzetes írásbeli hozzájárulása nélkül tilos. Az itt közölt információk kizárólag az olvasó személyes használatára készültek. Jelen mű felhasználása más köny­ vekben, kereskedelmi szoftverekben, adatbázisokban csak a kiadó előzetes írásbeli hozzájárulásával lehetséges. A szerző és a kiadó a tőle elvárható legnagyobb gondossággal járt el a könyv és a prograrnek készítése során. A könyvben, illet­ ve a programokban található esetleges hibákért, használatukból eredő esetleges károkért sem a szerző, sem a kiadó nem vállal semminemű felelősséget.

Fordította: Lénárt Szabolcs Szakmailag lektorálta: Kiss Kálmán Nyelvileg lektorálta: Kósa György Tördelte: Fontoló Stúdió

Felelős kiadó a Perfact-Pro Kft. ügyvezető igazgatója l101 Budapest, Pongrác út 9/b. Tel: 260-0990 Fax: 431-0028 [email protected] .perfactkiado.hu

www

Tarralern

Tartalom

Bevezetés

Miért érdemes elolvasni a könyvet?

l

Változó változók

21

Állandók deklarálása és használata

21

Mit tanulhatunk a könyvből?

l

Változók hatóköre

22

Mi a PHP?

2

Műveleti jelek használata

22

Mi a MySQL?

2

Aritmetikai műveleti jelek

23

Miért használjunk PHP-t és MySQL-t?

2

Karakterláncokon alkalmazható műveleti jelek

23

A PHP legfőbb erősségei

3

Értékadó műveleti jelek

23

Melyek a PHP 5 újdonságai?

4

Összehasonlító műveleti jelek

25

A PHP 5.3 főbb jellemzői

5

Logikai műveleti jelek

26

A MySQL legfőbb erősségei

5

Bitműveleti jelek

26

Támogatás elérhetősége

6

Egyéb műveleti jelek

27

Melyek a MySQL 5 újdonságai?

6

Az űrlap végösszegének kiszámítása

28

Hogyan épül fel a könyv?

7

Műveletek elsőbbségi sorrendje és

Végezetül

7

I. rész A PHP használata

9

l. fejezet

a csoportosíthatóság

29

Változókhoz kapcsolódó függvények

30

Változók típusának ellenőrzése és beállítása

30

Változók állapotának ellenőrzése

31

Változók típuskonverziója

31

Döntéshozatal feltételes utasításokkal

31

PHP gyorstalpaló

ll

Kódblokkok

32

Kezdés előtt: a PHP elérése

ll

A különböző feltételes utasítások összehasonlítása

34

Mintaalkalmazás létrehozása: Bob autóalkatrészek

12

Műveletek ismétlése iterációval

35

Rendelési űrlap létrehozása

12

Kiugrás vezérlési szerkezetből vagy kódból

37

Az űrlap feldolgozása

13

Alternatív vezérlési szerkezetek alkalmazása

38

PHP beágyazása HTML-be

13

A dec l a re szerkezet használata

38

PHP címkék

14

Hogyan tovább?

38

PHP utasítások

15

Fehérköz karakterek

15

2. fejezet

Megjegyzések

15

Adatok tárolása és visszakeresése

39

Dinamikus tartalom hozzáadása

16

Adatok elmentése későbbi használat céljából

39

Függvényhívások

16

Bob megrendeléseinek el tárolása és visszakeresése

39

A da te ( ) függvény használata

17

Fájlok feldolgozása

40

Az űrlapváltozók elérése

17

Fájl megnyitása

40

Rövid, közepes és hosszú változók

17

A megfelelő megnyitási mód kiválasztása

40

Karakterláncok összefűzése

19

Eijl megnyitása az fopen() függvénnyel

41

Változók és literálok

19

Fájlok megnyitása FTP-n vagy HTTP-n keresztül

42

Az azonosítók

20

Fájlmegnyitási problémák kezelése

43

Változótípusok

20

Fájlba írás

44

A PHP adattípusai

20

Az fwri te ( ) függvény paramécerei

44

Típuserősség foka

20

Fájlformátumok

44

Típuskényszerítés

21

Fájl bezárása

45

III

IV

Tartalom

Olvasás fájlból

47

Fájl megnyitása olvasásra: fopen ()

48

Ahol meg kell állnunk: feof()

48

Tómbön belüli navigálás: each(),current (),reset (), end(),next (),pos

( ) és p rev() függvény

69

Függvény alkalmazása tömb minden egyes elemére: arra y_

Beolvasás soronként: fgets() , fgetss() és fgetcsv ()

69

walk()

48

Tömbelemek számlálása: count(),sizeof () és array_ ()függvény

70

49

Tómbök átalakítása skaláris változókká: extract ()

70

Karakter beolvasása: fgetc ()

49

További olvasnivaló

71

Tetszőleges mennyiségü adat beolvasása: freact()

50

Hogyan tovább?

71

Egyéb hasznos fájlfüggvények

50

A teljes fájl beolvasása: readfile(), fpassthru () és file()

count_values

Fájl meglétének ellenőrzése: file_exists ()

50

4.

Fájlméret meghatározása: fil esi z e()

50

Karakterláncok kezelése és reguláris kifejezések

Fájl törlése: unlink()

50

Mintaalkalmazás létrehozása: intelligens üzenetküldő

50

Karakterláncok formázása

Fájlok zárolása

51

Karakterláncok megvágása: tr im(),ltrim () és rtrim()

Egy jobb módszer: adatbázis-kezelő rendszerek

52

Fájlon belüli navigálás: rewind(), fseek () és ftell ( )

fejezet

űrlap

73 75

függvény

75

Egyszerű fájlok használata esetén jelentkező problémák 52

Karakterláncok formázása megjelenítés céljából

Hogyan oldják meg a relációs adatbázis-kezelő

Tárolni kívánt karakterláncok formázása:

rendszerek ezeket a problémákat?

52

További olvasnivaló

53

Hogyan tovább?

53

73

addslashes ()

és stripslashes () függvény

75

78

Karakterláncok egyesítése és felosztása sztringkezelő függvényekkel

79

Az explode(),implode () és j oin ()függvény 3.

fejezet

használata

79

Tömbök használata

55

Az strtok ()függvény használata

79

Mit nevezünk tömbnek?

55

A substr ( ) függvény használata

80

Numerikusan indexelt tömbök

56

Karakterláncok összehasonlítása

80

Numerikusan indexelt tömbök létrehozása

56

Karakterláncok sorba rendezése: strcmp(),

Tömb tartalmának elérése

56

Tömbelemek elérése ciklusokkal

57

Nem numerikusan indexelt tömbök

57

Tömb inicializálása

57

Tömbelemek elérése

57

Ciklusok használata

58

Tömbműveleti jelek

59

strchr (),strrchr

Többdimenziós tömbök

59

stristr

Tömbök rendezése

62

A sort() függvény használata

62

Tömbök rendezéseasort () és ksort ()

strcasecmp ( )

és strnatcmp() függvény

Karakterlánc hosszának megállapítása

az

80

strlen ()

függvénnyel

81

Részsztringek keresése és cseréje sztringkezelő függvényekkel

81

Karakterláncok keresése karakterláncban: strstr(), ( ) és

() függvény

82

Részszering pozíciójának megkeresése: strpos () és strrpos()

82

Részsztringek cseréje: str_replace ( ) és substr_

függvényekkel

62

Fordított rendezés

63

Ismerkedés a reguláris kifejezésekkel

83

Többdimenziós tömbök rendezése

63

Az alapok

84

Felhasználó által meghatározott rendezés

63

Karakterkészletek és -osztályok

84

Fordított sorrendbe történő felhasználói rendezés

64

Ismétlődés

85

Tömbök átrendezése

64

Részkifejezések

85

A shuffle ()függvény használata

65

Számolt részkifejezések

85

Az array_reverse ()függvény használata

66

Karakterlánc elejéhez vagy végéhez rögzítés

85

Tömbök feltöltése fájlokból

66

Ágaztatás

86

További tömbkezelési eljárások

68

Literális különleges karakterekhez illesztés

86

replace() függvény

83

Tartalom

A különleges karakterek áttekintése

86

Osztálypéldányok létrehozása

110

Az eddig tanultak alkalmazása az intelligens űrlapban

87

Osztályattribútumok használata

110

Részsztringek keresése reguláris kifejezésekkel

87

Hozzáférés-szabályozás private és public

Részsztringek cseréje reguláris kifejezésekkel

88

Karakterláncok szétbontása reguláris kifejezésekkel

88

Osztálymetódusok hívása

112

További olvasnivaló

88

Öröklődés megvalósítása PHP-ben

113

Hogyan tovább?

88

Láthatóság szabályozása öröklődés esetén a pr i vate

kulcsszóval

és a proteeted kulcsszóval Felülírás

5. fejezet

112

113 114

Öröklődés és felülírás megakadályozása a final

Kód többszöri felhasználása és függvényírás

89

Kód többszöri felhasználásának előnyei

89

Költség

89

A többszörös öröklődés

Megbízhatóság

89

Interfészek megvalósítása

116

Egységesség

90

Osztálytervezés

117

kulcsszóval

115 116

A require ( ) és az include () utasítás használata

90

Az osztály kódjának megírása

117

Fájlnévkitetjesztések és a require {) utasítás

90

Haladó objektumorientált funkciók PHP-ben

124

A require {) urasírás használata weboldalsablonokra

91

Osztályon belüli kanstansok használata

124

Statikus metódusok létrehozása

124

95

Osztálytípus ellenőrzése és típusjelzés

125

Függvények használata PHP-ben

96

Késői statikus kötések

125

Függvényhívás

96

Objektumok klónozása

126

Nem létező függvény hívása

97

Elvont osztályok használata

126

Az auto_prepend_file és

az

auto_append_file

beállítás használata

Metódusok többszörös definiálása a -call()

Kis- és nagybetűle megkülönböztetése függvénynevekben

97

metódussal

126

Saját függvények definiálása

97

Az_autoleact {) függvény használata

127

Függvények alapszerkezete

98

Iterátorak és iteráció létrehozása

127

Függvényeink elnevezése

98

Osztályaink átalakitása karakterláncokká

129

Paraméterek használata

99

A Reflection API használata

129

Hogyan tovább?

130

A hatókör fogalma

100

Cím és érték szerinti paraméterátadás

102

A return kulcsszó használata

103

7. fejezet

Értékvisszaadás függvényekből

103

Hiba- és kivételkezelés

131

Rekurzió megvalósítása

104

Kivételkezelési fogalmak

131

Névterek

105

Az Exception osztály

132

További olvasnivaló

105

Felhasználó által meghatározott kivételek

133

Hogyan tovább?

106

Kivételek Bob autóalkatrész-értékesítő alkalmazásában 135 Kivételek és a PHP további hibakezelő mechanizmusai

6. fejezet

Objektumorientált PHP

107

Ismerkedés az objektumorientált programozás fogalmaival

138

További olvasnivaló

138

Hogyan tovább?

138

107

Osztályok és objektumok

107

II. rész

Többalakúság

108

A MySQL használata

Öröklődés

108

139

8. fejezet

Osztályok, attribútumok és metódusok létrehozása 109

Webes adatbázis megtervezése

141

Osztályszerkezet

109

Relációs adatbázissal kapcsolatos fogalmak

141

Konstruktorok

109

Táblák

141

Destruktorok

110

Oszlopok

142

PHP-ben

v

VI

Tartalom

Sorok

142

10. fejezet

Értékek

142

Munkavégzés MySQL adatbázisunkkal

165

Kulcsok

142

Mi az SQL?

165

Sémák

143

Adatok beszúrása adatbázisba

165

Kapcsolatok

143

Adatok visszakeresése adatbázisból

167

Webes adatbázis megtervezése

144

Adott feltételeknek megfelelő adatok visszakeresése

168

Adatok visszakeresése több táblázatból

169

144

Adatok visszakeresése meghatározott sorrendben

173

Redundáns adatok tárolásának elkerülése

144

Adatok csoportosítása és összesítése

173

Atomi oszlopértékek használata

145

V isszakapni kívánt sorok kiválasztása

175

Válasszunk értelmes kulcsokat!

146

Egymásba ágyazott lekérdezések használata

175

Adatbázisban lévő rekordok frissítése

177

Gondoljuk végig a modellezett, valós világbeli objektumokat!

Gondoljuk végig, rnit szeretnénk az adatbázisból megtudnil

146

Kerüljük a sok üres tulajdonságot tartalmazó

Táblák megváltoztatása létrehozásuk után

177

Rekordok törlése adatbázisból

179

146

Táblák törlése

179

Táblatípusok összefoglalása

147

Teljes adatbázis törlése

179

Webes adatbázis architektúrája

147

További olvasnivaló

179

További olvasnivaló

148

Hogyan tovább?

179

Hogyan tovább?

148

kialakítást!

ll. fejezet 9. fejezet

MySQL adatbázis elérése a webről PHP-vel

181

Webes adatbázis létrehozása

149

Hogyan működnek a webes adatbázis-architektúrák?

181

A MySQL monitor használata

150

Adatbázis lekérdezése a webről

184

Bejelentkezés MySQL-be

150

A felhasználótól érkező adatok ellenőrzése és szűrése

184

Adatbázisok és felhasznáJók létrehozása

151

Kapcsolat létrehozása

184

Felhasználók és jogosultságok beállítása

151

A használni kívánt adatbázis kiválasztása

185

A MySQL jogosuJtsági rendszerének bemutatása

151

Az adatbázis lekérdezése

185

A legkisebb jogosultság elve

151

A lekérdezés eredményeinek visszakeresése

186

Felhasználó beállítása: a GRANT parancs

151

Kapcsolat bontása az adatbázissal

187

Jogosultságok típusai és szintjei

152

Új információ felvitele az adatbázisba

187

A REVOKE parancs

154

Előfordított utasítások használata

189

Példák a GRANT és a REVOKE használatára

154

Egyéb PHP adatbázis-illesztések használata

190

Webes felhasználó beállítása

155

Altalános adatbázis-illesztés használata: PEAR MDB2 190

A megfelelő adatbázis használata

155

További olvasnivaló

192

Adatbázistáblák létrehozása

156

Hogyan tovább?

192

A többi kulcsszó jelentésének megismerése

157

Az oszloptípusok

157

Az adatbázis megtekintése a SHOW és a DESCRIBE paranccsal

159

12. fejezet

Haladó MySQL-adminisztráció

193

A jogosultsági rendszer alaposabb megismerése

193

Indexek létrehozása

159

A user tábla

194

MySQL azonosítók

160

A db és a host tábla

195

Oszlopok adattípusainak kiválasztása

160

A tables_pr�v, a colurnns priv és a

Numerikus típusok

160

Dátum és idő típusok

162

Karakterlánc-típusok

162

További olvasnivaló

164

Hogyan tovább?

164

-

procs_priv tábla

196

Hozzáférés-szabályozás: Hogyan használja a MySQL a jogosuJtsági táblákat?

197

Jogosultságok frissítése: Mikor lépnek életbe a változtatások?

197

MySQL adatbázisunk biztonságossá tétele

198

MySQL az operációs rendszer szemszögéből

198

Tartalom

Jelszavak

198

Felhasználói jogosultságok

198

Szolgáltatások vagy digitális termékek értékesítése

felvétele

Webes kérdések

199

Többletérték hozzáadása termékekhez vagy

További információk begyűjtése az adatbázisokról

199

lnformációszerzés a SHOW utasítással

199

szolgáltatásokhoz

223 226 226

Költségcsökkentés

227

lnformációszerzés oszlopokról a DESCRIBE utasítással 201

Kockázatok és veszélyforrások megismerése

227

A lekérdezések működésének megismerése az

Crackerek

227

201

A kívánt üzleti eredmény elmaradása

228

Adatbázisunk optimalizálása

205

Számítógépes hardverhibák

228

Optimálisra tervezés

205

Elektromos, kommunikációs vagy hálózati hibák

228

Jogosultságok

205

Erős verseny

228

Táblaoptimalizálás

205

Szaftverhibák

228

lndexek használata

205

Változó szabályozási környezet és adójogszabályok

229

Alapértelmezett értékek használata

205

Rendszer-kapacitásbeli korlátok

229

További tippek

205

A megfelelő stratégia kiválasztása

229

Biztonsági mentés készítése MySQL adatbázisunkról

206

Következő lépések

229

MySQL adatbázisunk helyreállítása

206

Replikáció megvalósítása

206

15. fejezet

A master kiszolgáló beállítása

207

Az e-kereskedelem biztonsági kérdései

231

A kezdeti adatátvitel megvalósítása

207

A birtokunkban lévő információ fontossága

231

A slave kiszolgáló vagy kiszolgálók beállítása

208

Biztonsági fenyegetések

232

További olvasnivaló

208

Bizalmas adataink kitettsége

232

Hogyan tovább?

208

Adatvesztés vagy -rongálás

233

Adatmódosítás

234

Denial of Service támadás

234

EXPLAIN utasítással

13. fejezet Haladó MySQL-programozás

209

Szaftverhibák

235

A LOAD DATA INFILE utasítás

209

Le tagadás

235

Tárolómotorok

209

Használhatóság, teljesítmény, költség és biztonság

236

Tranzakciók

210

Biztonsági házirend létrehozása

236

A tranzakciókkal kapcsolatos definíciók megismerése 210 Tranzakciók használata InnoDB táblákkal

210

A felhasználói hitelesítés alapelvei

237

A titkosítás alapjai

238

Külső kulcsok

211

Privát kulcsú titkosítás

239

Tárolt eljárások

212

Nyilvános kulcsú titkosítás

239

Alappélda

212

Digitális aláírások

239

Helyi változók

214

Digitális tanúsítványok

240

Kurzorok és vezérlési szerkezetek

214

Biztonságos webszerverek

240

További olvasnivaló

217

Auditálás és naplózás

241

Hogyan tovább?

217

Tűzfalak

242

Biztonsági mentés készítése az adatokról

242

Biztonsági mentés készítése általános fájlokról

242

III. rész E-kereskedelem és biztonság

219

MySQL adatbázisunk biztonsági mentése és helyreállítása

14. fejezet E-kereskedelmi honlap üzemeltetése

221

Mi a célunk?

221

Az üzleti weboldalak típusai

221

Céges információ megjelenítése online katalógusként 221 Fontos információ közzétételének elmulasztása Termékekre vagy szolgáltatásokra irányuló rendelések

222

242

Fizikai biztonság

242

Hogyan tovább?

243

16. fejezet Webes alkalmazások biztonsága

245

Biztonságkezelési stratégiák

245

Megfelelő gondolkodásmód már a tervezéstől

245

VII

VIII

Tartalom

A biztonság és a használhatóság közötti egyensúly keresése

17. fejezet 245

Hitelesítés megvalósítása PHP-vel és MySQL-lel

265

Biztonsági felügyelet

246

Látogatók azonosítása

265

Alapvető megközelítésünk

246

Hozzáférés-szabályozás megvalósítása

266

A ránk váró fenyegetések azonosítása

246

Jelszavak tárolása

267

Bizalmas adatok elérése vagy módosítása

246

Jelszavak titkosítása

269

Adatvesztés vagy -rongálás

247

Több oldal védelme

270

Denial of Service támadás

247

Alapszintű hitelesítés használata

270

Rosszindulatú kód befecskendezése

247

Alapszintű hitelesítés PHP-ben

Feltört szerver

248

Alapszintű hitelesítés az Apache

271 .

htaccess fájljaival 272

Kikkel állunk szemben?

248

A mod_auth_mysql hitelesítés használata

275

Crackerek

248

Amod_auth_mysql modul telepítése

275

Fertőzött gépek tájékozatlan felhasználói

248

A mod_auth_mysql modul használata

275

Elégedetlen alkalmazottak

248

Egyéni hitelesítési folyamat létrehozása

276

Hardvertolvajok

248

További olvasnivaló

276

Saját magunk

248

Hogyan tovább?

276

Kódunk biztonságossá tétele

249

Felhasználó által bevitt értékek szürése

249

18. fejezet

A kimenet értékeinek szürése védőkarakterekkel

252

Biztonságos tranzakciók végrehajtása PHP-vel és

Kódjaink szervezése

253

MySQL-lel

Mi kerül a kódunkba?

254

Biztonságos tranzakciók megteremtése

277

A felhasználó gépe

278

254

Az internet

278

255

Saját rendszerünk

279

255

A Secure Sockets Layer (SSL) protokoll használata

280

Webszerverünk és a PHP biztonságossá tétele

256

Felhasználói bevitel szürése

282

Tartsuk szaftvereinket naprakészen!

256

Biztonságos tárolás megvalósítása

282

A php. ini fáj l tartalma

257

Hitelkártyaadatok tárolása

283

A webszerver konfigurálása

258

T itkosítás használata PHP-ben

283

A GPG telepítése

283

258

A GPG tesztelése

285

Az adatbázisszerverek biztonsága

259

További olvasnivaló

289

Felhasználók és a jogosuJtsági rendszer

259

Hogyan tovább?

289

Adatküldés a szerverre

260

Kapcsolódás a szerverhez

260

IV. rész

A kiszolgáló futtatása

260

Haladó PHP-módszerek

A hálózat védelme

261

Tűzfalak telepítése

261

19. fejezet

DMZ használata

261

A fájlrendszer és a kiszolgáló elérése

293

Felkészülés a DoS és DDoS támadásokra

262

Fájlfeltöltés

293

Számítógépünk és az operációs rendszer biztonsága

262

A fájlfeltöltés HT ML kódja

294

Tartsuk naprakészen operációs rendszerünket!

262

A fájlt kezelő PHP kód megírása

295

Csak azt futtassuk, amire valóban szükség van!

262

A gyakori feltöltési problémák megelőzése

298

Kiszolgálónk fizikai biztonsága

263

Könyvtárfüggvények használata

298

Katasztrófa -elhárítási terv

263

Olvasás könyvtárakból

298

Hogyan tovább?

263

lnformációszerzés az aktuális könyvtárról

301

A fájlrendszerrel kapcsolatos, megfontolandó szempontok A kód stabilitása és kódhibák Végrehajtó operátor és az

ex ee

parancs

Webes alkalmazások hasztolása fizetős szolgáltatás igénybevételével

277

291

Könyvtárak létrehozása és törlése

301

A fájlrendszer elérése

302

Fájlinformációk gyüjtése

302

Tartalom

Fájltulajdonságok módosítása

304

Rajzolás vagy szöveg írása képre

334

Fájlok létrehozása, törlése és áthelyezése

304

Kimenet készítése a kész grafikáról

335

Programfuttató függvények használata

304

Erőforrások felszabadítása

335

Környezeti változók elérése: a getenv () és a putenv () függvény

Automatikusan létrehozott képek használata más 306

oldalakon

336

További olvasnivaló

306

Szöveg és betük használatával létrehozott képek

336

Hogyan tovább?

306

A rajzvászon beállítása

338

A szöveg hozzáigazítása a gombhoz

339

20. fejezet Hálózati és protokollfüggvények használata

307

A szöveg elhelyezése

341

A szöveg gombra írása

341

A használható protokollok áttekintése

307

Befejezés

341

E-mail küldése és olvasása

307

Ábrák és grafikonadatok rajzolása

342

Más weboldalak tartalmának felhasználása

308

További képkezelő függvények használata

348

Hálózati keresőfüggvények használata

310

További olvasnivaló

348

Biztonsági mentés készítése vagy fájl tükrözése

313

Hogyan tovább?

348

23. fejezet

Biztonsági mentés készítése vagy fájl tükrözése FTP-vel

313

Fájlfeltöltés

318

Munkamenet-vezérlés PHP-ben

349

Időtúllépés elkerülése

318

Mi a munkamenet-vezérlés?

349

További FTP függvények használata

318

A munkamenet alapjai

349

További olvasnivaló

319

Mi a süti?

349

Hogyan tovább?

319

Sütik beállitása PHP-ból

350

Sütik használata munkamenetekkel

350

Munkamenet-azonosító tárolása

350

21. fejezet Dátum és idő kezelése

321

Egyszerű munkamenetek megvalósítása

351

Dátum és idő megállapítása PHP-ból

321

Munkamenet indítása

351

A date ( ) függvény használata

321

Munkamenet- változók regisztrálása

351

Unix-időbélyegek kezelése

322

Munkamenet-változók használata

351

A getdate () függvény használata

323

Változók törlése és a munkamenet megszüntetése

351

Dátumok ellenőrzése a checkdate ( ) függvénnyel

324

Egyszerű példa munkamenetre

352

Időbélyegek formázása

324

Munkamenet-vezérlés konfigurálása

353

Váltás PHP és MySQL dátumformátumok között

326

Hitelesítés munkamenet-vezérléssel

354

Számolás dátumokkal PHP-ben

327

További olvasnivaló

359

Számolás dátumokkal MySQL-ben

328

Hogyan tovább?

359

Míkroszekundumok használata

329

Naptárfüggvények használata

329

24. fejezet

További olvasnivaló

329

További hasznos lehetőségek PHP-ben

361

Hogyan tovább?

329

Karakterláncok kiértékelése az ev al () függvénnyel

361

22. fejezet

Végrehajtás leállítása: die (} és exit (}

361

Változók és objektumok szerializálása

362

Képek előállitása

331

Információgyűjtés a PHP-környezetről

363

Képi támogatás beállítása PHP-ben

331

Milyen bővitmények lettek betöltve?

363

Képformátumok

332

A kód tulajdonosának azonosítása

363

JPEG

332

A kód utolsó módosítási időpontjának megállapítása

363

PNG

332

A futtatási környezet átmeneti módosítása

364

WBMP

332

Forráskód szinkiemelése

364

GIF

332

PHP használata parancssorban

365

Képek létrehozása

333

Hogyan tovább?

365

Rajzvászon létrehozása

333

IX

X

Tartalom

Az adatbázis létrehozása

394

A nyitóoldal létrehozása

395

A felhasználói hitelesítés megvalósítása

396

Felhasználók regisztrálása

397

Bejelentkezés

401

Kijelentkezés

404

Jelszóváltoztatás

405

Elfelejtett jelszó visszaállítása

407

370

Könyvjelzök tárolása és visszakeresése

411

Kód többszöri felhasználása

370

Könyvjelzök hozzáadása

411

Kezelhetö kód írása

371

Könyvjelzök megjelenítése

413

Programozási szabályok

371

Könyvjelzök törlése

414

Kódunk darabokra bontása

373

Könyvjelzök ajánlása

416

Egységes könyvtárstruktúra használata

373

A projekt továbbfejlesztésének lehetséges irányai

418

Hogyan tovább?

418

V. rész Gyakorlati PHP és MySQL projektek fejlesztése

367

25. fejezet A PHP és a MySQL használata nagyobb projektekben

369

A szaftverfejlesztés gyakorlatainak alkalmazása webfejlesztésre

369

Webes alkalmazás projektjének tervezése és megvalósítása

Függvények dokumentálása és megosztása fejlesztői csapaton belül

374

Verziókövetés megvalósítása

374

A fejlesztőkörnyezet kiválasztása

375

Kosár funkció programozása

419

Projektjeink dokumentálása

375

A megoldás alkotóelemei

419

Prototípuskészítés

375

Online katalógus létrehozása

419

A müködés és a tartalom szétválasztása

376

A felhasznáJók által vásárlás közben megrendelt

Kódoptimalizálás

376

Egyszerű optimalizációs lépések

376

Fizetési rendszer megvalósítása

420

28. fejezet

termékek nyomon követése

419

Zend termékek használata

377

Adminisztrációs felület programozása

420

Tesztelés

377

A megoldás áttekintése

420

További olvasnivaló

378

Az adatbázis létrehozása

423

Hogyan tovább?

378

Az online katalógus létrehozása

425

Kategóriák listázása

426

Adott kategória könyveinek listázása

428

26. fejezet Hibakeresés

379

A könyv részletes adatainak megjelenítése

430

Programozási hibák

379

A kosár funkció megvalósítása

431

Szintaktikai hibák

379

A kosar_megjelenitese.php kód használata

431

Futásidejű hibák

380

A kosár megjelenítése

433

Logikai hibák

384

Termékek hozzáadása a kosárhoz

435

Hibakeresés a változók tartalmának kiíratásával

385

A módosított tartalmú kosár mentése

437

Hibajelentési szintek

387

A fejlécen látható összefoglaló adatok megjelenítése

437

A hibajelentési beállítások módosítása

388

A pénztárnál

438

Saját hibák kiváltása

389

A fizetés feldolgozása

442

A hibakezelés elegáns módja

389

Az adminisztrációs felület megvalósítása

444

Hogyan tovább?

390

A projekt továbbfejlesztése

450

Meglévő rendszer használata

450

Hogyan tovább?

450

27. fejezet Felhasználói hitelesítés megvalósítása és személyre

29. fejezet

szabott tartalom megjelenítése

391

A megoldás alkotóelemei

391

Webalapú levelezöszolgáltatás létrehozása

451

Felhasználói azonosítás és személyre szabás

391

A megoldás alkotóelemei

451

A könyvjelzök tárolása

392

Levelezöprotokollok: a POP3 és az !MAP

Könyvjelzök ajánlása

392

A megoldás áttekintése

392

összehasonlítása POP3 és !MAP támogatása PHP-ben

451 451

Tartalom

A megoldás áttekintése

452

31. fejezet

Az adatbázis létrehozása

454

Webes fórum fejlesztése

A kód architektúrájának vizsgálata

455

Gondoljuk végig a feladatot!

517

Be- és kijelentkezés

460

A megoldás alkotóelemei

517

Felhasználói fiókok beállítása

462

A megoldás áttekintése

518

Új felhasználói fiók létrehozása

463

Az adatbázis megtervezése

519

Meglévő felhasználói fiók módosítása

464

A hozzászólások fanézetének megtekintése

521

Felhasználói fiók törlése

464

Kibontás és összecsukás

523

Levél olvasása

465

A hozzászólások megjelenítése

525

Postafiók kiválasztása

465

A

526

Postafiók tartalmának megtekintése

467

A hozzászólások egyenkénti megtekintése

530

Levélüzenet olvasása

469

Új hozzászólás írása

532

Üzenetfejlécek megjelenítése

472

A projekt továbbfejlesztése

538

Üzenet törlése

472

Meglévő rendszer használata

538

Levélküldés

473

Hogyan tovább?

538

cs

omopont osztály használata

517

Új üzenet küldése

473

Válaszküldés vagy levél továbbítása

474

32. fejezet

A projekt továbbfejlesztése

476

Perszonalízált PDF dokumentumok előállitása

539

Hogyan tovább?

476

A projekt áttekintése

539

Dokumentumformátumok összehasonlítása

539

A megoldás alkotóelemei

542

30. fejezet Levelezölista-kezelő alkalmazás fejlesztése

477

Vizsgáztatórendszer

542

A megoldás alkotóelemei

477

A dokumentum-előállító szoftver

542

A megoldás áttekintése

544

A levelezőlisták és a feliratkozott felhasznáJók adatbázisának létrehozása

478

A tesztkérdések lekérdezése

545

Hírlevelek feltöltése

478

A válaszok értékelése

546

Csatolt állományokat tartalmazó levelek küldése

478

RTF formátumú oklevél létrehozása

548

A megoldás áttekintése

478

PDF formátumú oklevél létrehozása sablonból

550

Az adatbázis létrehozása

480

PDF dokumentum előállitása PDFlib függvényekkel

553

A kód architektúrájának meghatározása

482

"Helló, világ!" kód PDFlib függvényekkel

553

A bejelentkezés megvalósítása

488

Az oklevél előállítása PDFlib függvényekkel

556

Új felhasználói fiók létrehozása

488

Fejlécekkel kapcsolatos problémák kezelése

562

Bejelentkezés

490

A projekt továbbfejlesztése

562

Felhasználói funkciók megvalósítása

492

Hogyan tovább?

562

Levelezőlisták megtekintése

493

Listainformációk megjelenítése

496

33. fejezet

Levelezőlisták archívumának megtekintése

498

Kapcsolódás az Amazon Web Services felülethez

Fel- és leiratkozás

499

A felhasználói fiók beállításainak megváltoztatása

500

Jelszavak megváltoztatása

500

Kijelentkezés

502

Ismerkedés az XML-lel

564

Adminisztrátori funkciók megvalósítása

502

Web Services

566

Új levelezőlista létrehozása

503

A megoldás alkotóelemei

567

Új hírlevél feltöltése

504

Az Amazon Web Services felület használata

567

Egyszerre több fájl feltöltésének kezelése

506

XML értelmezése: REST válaszok

568

A hírlevél előnézetének megtekintése

510

SOAP használata PHP-vel

568

A hírlevél kiküldése

511

Gyorsítótárazás

568

A projekt továbbfejlesztése

515

A megoldás áttekintése

568

Hogyan tovább?

515

Az alkalmazás magja

571

XML és SOAP segítségével

563

A projekt áttekintése: XML és a Web Services használata

563

XI

XII

Tartalom

Adott kategóriában lévő könyvek megjelemtése

576

AmazonResultSet objektum lekérése

578

Kérés intézése és az eredmény visszakeresése REST segítségével

585

Kérés intézése és eredmény visszakeresése SOAP segítségével

591

Ajax elemek hozzáadása a PHPbookmark alkalmazáshoz

609

További információ

618

Bővebben a Document Object Modelről (DOM)

618

JavaScript könyvtárak Ajax alkalmazásokhoz

618

Ajax-fejlesztői weboldalak

619

A kérésből származó adatok gyorsítótárazása

592

Vásárlói kosár fejlesztése

594

A függelék

Fizetés az Amazonnál

597

A PHP és a MySQL telepítése

621

A projekt kódjának telepítése

597

Az Apache, a PHP és a MySQL telepítése Unix alatt

621

A projekt továbbfejlesztése

598

Bináris fájlok telepítése

622

További olvasnivaló

598

Forrás telepítése

622

A httpd. conf fájl: kóddarabok

626

34. fejezet

A PHP támogatás is működik?

626

Web 2.0-s alkalmazások fejlesztése

Az SSL működik?

627

Ajax-programozással

599

Az Apache, a PHP és a MySQL telepítése Windows alatt

628

Mi az Ajax?

599

HTTP kérések és válaszok

600

A MySQL telepítése Windows alatt

628

DHTML ésX HTML

600

Az Apache telepítése Windows alatt

629

Cascading Style Sheets (CSS)

601

A PHP telepítése Windows alatt

630

Kliensoldali programozás

601

A PEAR telepítése

631

Szerveroldali programozás

602

Egyéb konfigurációk beállítása

632

XML ésX SLT

602

Ajax alapok

602

B függelék

Az XMLHTTPRequest objektum

602

Webes források

633

Kommunikáció a szerverrel

604

Források a PHP-ről

633

A kiszolgáló válaszának feldolgozása

605

MySQL-lel és SQL-lel foglalkozó források

634

Tegyük össze az egészet!

606

Források az Apache-ról

634

Ajax elemek hozzáadása korábbi projektjeinkhez

609

Webfejlesztés

635

Tartalom

Szerzők Laura Thomson vezető szoftvermérnök a Mozilla CorporationnéL Korábban az OmniTI

és a Tangled Web Design egyik

vezetőjeként tevékenykedett. Rendszeresen dolgozik együtt az RMI T Universiry-vel és a Boston Consuleing GrouppaLAl­ kalmazorc tudományokból (informatika), illerve informatikai mérnöki területen szerzere egyetemi diplomát. Szabadidejében szívesen lovagol, érvel az ingyenes és nyílt forráskódú szoftverek mellett, és nagyon szeret aludni.

Luke Weiling webes fejlesztő az OmniTI-náLA nyílt forráskódú és webes fejlesztésekkel foglalkozó konferenciák, így egye­ bek közöte az OSCON, a ZendCon, a MySQLUC, a PHPCon, az OSDC és a LinuxTag rendszeres előadója.Az OmniTI előtt a webes anaütikával foglalkozó Hicwise.com-nál, az adatbázis-fejlesztő MySQL AB-nál, illetve független tanácsadóként a Tangled Web Designnál dolgozort.Alkalmazott tudományok (informatika) diplomát szerzerc, és informatikát oktatott a Mel­ bourne-i RMI T Universiry-n. Szabadidejében az álmadanságát próbálja meg tökélyre fejleszteni.

Társszerzők Julie C. Meloni a Los Altos-i (Kalifornia) székhelyű i2i I nteractive (www.i2ii.com) multimédiás vállalat műszaki igazgatója. Az internet megszületése óta fejleszt webalapú alkalmazásokat, és soha nem fogja elfelejteni az első grafikus kezelőfelületű böngészőt övező izgalmakat. Számos könyvec és cikket írt a webalapú programozási nyelvek és az adatbázisok témakörében, amelyek közül érdemes megemliteni a Sams Teach Yourself PHP. MySQL, and Apache Ali in One című kiadványt.

Adam DeFields webes alkalmazásfejlesztésre és projektmenedzsmentre szakosodott tanácsadó.A Michigan állambeli Grand Rapidsben él, ahol 2002-ben alapított saját cégét irányítja (Emanation Syscems, LLC - www.emanationsyscemsllc. com). Számtalan, különböző technológiára építő webfejlesztési projekeben részt vere, de leginkább a PHP /MySQL alapú fej­ lesztési munkákat kedveli.

Marc Wandschneider szabadúszó fejlesztő, szerző és előadó, aki a világ számtalan különböző pontján dolgozott már érdekes projektekben. Utóbbi években idejének nagy részét arra fordítja, hogy robusztus és skálázható webes alkalmazásokat fejlesszen. 2005-ben írta Core Web Application Programming with PHP and MySQL című könyvét. Korábban a SWiK (http:/ /swik.net) nyílt forrású közösségi oldal vezető fejlesztője volt. Marc jelenleg Pekingben él, ahol a kínai nyelvet töri, és programoz.

Köszönetnyilvánítás Szeretnénk köszönetet mondani a Pearson csapatának kemény munkájáért. Külön köszönjük Shelley Johnstonnak, akinek áldozatvállalása és türelme nélkül a könyv első három kiadása nem születhecett volna meg. és Mark Tabernek, aki a negyedik kiadásnál átvette Shelley munkáját. Nagyra értékeljük a PHP- és MySQL-fejlesztői csapatok által végzere munkát. Sok éve könnyícik meg a dolgunkat, és így lesz ez a jövőben is rninden nap. Köszönjük az eSec-nél dolgozó Adrian Close-nak, arniért még 1998-ban azt mondta:.,Ezt meg tudjátok csinálni PHP-ben:' Úgy vélte, szeremi fogjuk a PHP-t, és azt kell mondanunk, igaza lett. Végezetül szeretnénk köszönetet mondani családunknak és barátainknak, akik elviselik antiszociális viselkedésünket, amíg könyveinken dolgozunk. Külön köszönjük Nektek, hogy segítetek családtagjainknak: Julie, Robert, Martin, Lesley, Adam, Paul, Archer és Barton.

A magyar kiadáshoz A könyv példáinak forráskódja és a melléklecek letölthetők regisztráció után a www.perfacrkiado.hu/melleklecek oldalról. A könyvben használt, jelenleg ingyenes szoftverek szintén letölthetőek weboldalunkról (www.perfacckiado.hu/melleklecek). Érdemes azonban az interneten megkeresni ezen szoftverek frissítéseit, újabb verzióit és azokat használni.

XIII

Segovia vízvezetéke a római építészet egyik legnagyszerűbb, a mai napig meglévő műemléke. Traianus császár uralkodása alatt, az időszámításunk szerinti első században épült vezeték feladata az volt, hogy vizet szállítson a ma Sierra de Guadarrama né­ ven ismert hegy lábától az onnan mintegy 18 kilométer távolságra lévő hispániai városba, Segoviába. Az építményt több mint húszezer, kézzel vágort gránittömbből emelték, és sem cementet, sem kapcsokat nem használtak a tömbök rögzítésére. A vízvezetéknek a város középpontján áthaladó, 278 mérer hosszú szakasza duplasoros boltívekkel rendel­ kezik, amelyek a földtől 34 mérer magasan futva elegáns képet kölcsönöznek az urcáknak. A természet és az ember okozta viszontagságoknak kérezer éve ellenálló építmény az emberi ügyesség időrlen példája: a mai napig hozzájárul a város vízellárásához.

Bevezetés

Köszöntjük a PHP és

MYSQL webfejlesztöknek című kiadványunk olvasóit! Könyvünk oldalaiba igyekeztünk belesűríteni

a PHP és a MySQL- napjaink két legelterjedtebb webfejlesztő eszközének- használata során szerzett minden tudásunkat. A bevezetésben az alábbiakról lesz szó: Miért érdemes elolvasni a könyvet? Mire leszünk képesek a könyv segítségéve!? Mi a PHP és a MySQL,és miért olyan nagyszerűek? Mi változott a PHP és a MySQL legutolsó verzióiban? Hogyan épül fel a könyv? Vágjunk bele!

Miért érdemes elolvasni a könyvete Könyvünk megranírja, hogyan hozzunk létre interaktív weboldalakat - legyen az a legegyszerűbb rendelési űrlap vagy össze­ tett, biztonságos e-kereskedelmi portál,esetleg interaktív Web 2.0-s oldal. Ráadásul rnindezt nyílt forráskódú technológiák használatával tanuljuk meg előállítani. A könyv azon olvasóknak szól, akik legalább a HTML alapjaival tisztában vannak,és korábban legalább alapszínten prog­ ramoztak valamilyen modern programozási nyelvben - még ha az nem is feltétlenül internetes programozás volt-,vagy dol­ goztak már relációs adatbázissal. Kezdő programozók is minden bizonnyal hasznosnak fogják találni a kötetet, de nekik kicsit tovább tarthat az itt leírtak megemésztése. Megpróbáltunk egyetlen alapfogalmat sem kihagyni,ám viszonylag gyorsan vesszük át őket. A könyv azokat célozza meg, akik összetett vagy üzleti weboldal létrehozása szándékával kivánják magas szinten elsa­ játítani a PHP-t és a MySQL-t. Amennyiben dolgoztunk már más webfejlesztő nyelvvel,akkor a kötet olvasása során gyorsan képbe kerülhetünk. A könyv első kiadását annak idején azért írtuk meg,mert elegünk volt abból,hogy csak olyan PHP könyveket találtunk, amelyek függvények referenciagyűjteményeként szolgáltak. Az ilyen kiadványok is hasznosak,ám nem sokat segítenek,amikor a főnök vagy az ügyfél azt kéri,hogy .. készíts nekem bevásárlókosaras online boltot': Ebben a könyvben minden tőlünk telhetőt megrettünk, hogy hasznos példákkal álljunk elő. Számtalan kód készen áll arra, hogy az olvasó saját weboldalán azonnal alkal­ mazza azokat,rnig a többi apróbb módosítások után lesz használható.

Mit tanulhatunk a könyvböH Ha elolvassuk,képesek leszünk valóban dinamikus weboldalakat építeni. Ha készítettünk már honlapokat egyszerű HTML használatával, minden bizonnyal beleütköztünk már ennek a megközelítésnek a korlátaival. A tisztán HTML weboldal stati­ kus tartalma pontosan ilyen - statikus. Amíg fizikailag nem frissírjük,ugyanaz marad. Látogatói semmilyen interaktív módon nem léphernek kapcsolatba az oldallal. Ha olyan nyelvet és adatbázist használunk, mint a PHP, illerve a MySQL, dinamikussá, vagyis testre szabhatóvá és valós idejű információkban gazdaggá tehetjük oldalainkat. A könyvben szándékosan használunk - még az alapozó fejezetekben is- a való világból vett alkalmazásokat. Kezdésképpen árteleintünk egy egyszerű online rendelési rendszert, és átrágjuk magunkat a PHP és a MySQL különböző területein. Ezt követően különböző szempontok szerint megvizsgáljuk az elektronikus kereskedelmet és ehhez kapcsolódóan a bizton­ ságot, illerve azt, hogy miként jönnek ezek elő valódi weboldal elkészítésekor. Azt is megmutatjuk,hogyan lehet az itt megfo­ galmazott elvárásokat PHP-ben és MySQL-ben megvalósítani. A könyv utolsó részében áttekintjük, hogyan érdemes közelíreni az igazi projektekhez,és végigmegyünk az alább felsorolt projektek előkészítési, tervezési és megvalósírási szakaszán: Felhasználók hitelesítése és személyre szabott tartalom a hitelesítés alapján Bevásárlókosaras online bolt

2

B evezetés

Webalapú levelezőalkalmazás Levelezőlista-kezelök Online fórumok PDF dokumentumok előállítása Webszolgáltatások XML-lel és SOAP-pal Web 2.0-s alkalmazás létrehozása Ajaxszal Ezen projektek rnindegyike a könyvben megtalálható állapotában is működik, de természetesen egyéni igényeinknek meg­ felelően módosíthatók. Azért ezekre esett a választásunk, mert meglárásunk szerint ezek tartoznak a programozók által leg­ gyakrabban fejlesztert webes alkalmazások közé. A könyv ugyanakkor ezektől eltérő igények esetén is nagy segítséget jelenther céljaink elérésében.

MiaPHP� A PHP kifejezetten az internetre kifejlesztett, szerveroldali szkriptnyelv. A HTML oldalakba az oldal minden egyes megnyi­ tásakor lefutó PHP kódot ágyazhatunk. A PHP kód értelmezése a webszerveren történik, ami a látogató által megtekinthető HTML-t vagy egyéb kimenetet hoz létre. A PHP első verziója 1994-ben készült el, és eredetileg egyetlen ember, Rasmus Lerdorf munkája volt. Más tehetséges emberek is elkezdtek dolgozni vele, és négy jelentős újraíráson ment keresztül, amíg elérkeztünk a jelenleg széles körben hasz­ nálható, érett termékhez. 2007. júliusi adatok szerint világszerte több mint 21 millió domaínre telepíterték, és ez a szám igen gyorsan nő. (A PHP terjedésének aktuális állását a http://www.php.net/usage.php oldalon tekinthetjük meg.) A PHP nyílt forráskódú projekt, ami azt jelenti, hogy bárki hozzáférher a forráskódhoz, és ingyenesen használhatja, módo­ síthatja, illetve terjesztheti azt. A PHP erederileg a Personal Home Page (személyes honlap) rövidítése volt, de a GNU rekurzív rövidítésének (GNU= Gnu's Not Unix, azaz a Gnu nem Unix) elfogadásával együtt ez is megválrozort, és most a PHP Hypertext Preprocessor (PHP hiperszöveg előfeldolgozó) kifejezés rövidítését jelenti. A PHP jelenlegi fő változata az 5-ös. Ezt a verziót a nyelv mögött álló virtuális gép, a Zend motor teljes újraírása, illetve a nyelv néhány jelentős javítása jellemzi. A PHP honlapja a htrp://www.php.net címen érhető el. A Zend Technologies weboldala a http://www.zend.com.

MiaMySQU A MySQL egy nagyon gyors, srabil, relációs adatbázis-kezelő rendszer (angol rövidítéssel RDBMS). Az adatbázis lehetövé teszi az adatok hatékony tárolását, keresését, rendezését és kinyerését. A MySQL kiszolgáló az adatokhoz való hozzáférést szabályozva biztosítja, hogy egyidejűleg többen is használhassák az adatokat, gyorsabb hozzáférést kínál hozzájuk, és garan­ tálja, hogy csak a jogosult Felhasználók szerezhetnek hozzáférést. Ezért a MySQL röbbfelhasználós, többszálú kiszolgáló. Strukturált lekérdező nyelvet (Structured Query Language- SQL), a szabványos adatbázis-lekérdező nyelvet használja.

A MySQL 1996 óta elérhető a nyilvánosság számára, de fejlesztési története 1979-ig nyúlik vissza. A világ legnépszerűbb nyílt forráskódú adatbázisa, amely számtalan alkalommal elnyerte a Linux Journal szaklap "Readers' Choice Award" -ját (Ol­ vasóink választása díját). A MySQL kettős licencelési rendszerben érhető el. Amennyiben elfogadjuk a nyílt forráskódú licenc (a GPL) feltételeit, ingye­ nesen használhatjuk. Ha MySQL-t tartalmazó nem GPL alkalmazást kívánunk terjeszteni, fizetős licencet kell vásárolnunk. A MySQL honlapja a http://mysql.com címen érhető el.

Miért használjunk PHP�t és MySQL�t� Ha weboldalfejlesztésre adjuk a fejünket, számralan termék közül választhatunk Az alábbi kategóriákban kell döntést hoznunk: A webszervert futtató hardver Operációs rendszer A webszerver szoftvere Adatbázis-kezelő rendszer Programozási vagy szkriptnyelv Az egyes választások összefügghetnek egymással. Például nem mindegyik operációs rendszer fut bármilyen hardveren, nem rninden webszerver támogatja az összes programozási nyelvet stb.

Bevezetés

Ebben a könyvben alig foglalkozunk a hardverrel, az operációs rendszerekkel vagy a webszerver szaftveréveL Nincs rá szük­ ségünk. A PHP és a MySQL egyik legnagyszerűbb tulajdonsága, hogy minden fő operációs rendszeren, sőt a kisebbek közül is sok rendszeren használható. A PHP kódok nagy része megírható úgy, hogy operációs rendszerektől és webszerverektől függetlenül futtatható legyen. Egyes PHP függvények az operációs rendszertől függö fájlrendszerhez kötődnek, ám ezeket egyértelműen megjelölik a kézi­ könyvekben, és mi is jelezzük, amikor ilyennel dolgozunk. Akármilyen hardvert, operációs rendszert és webszervert válasszunk is, szeriotünk mindenképpen érdemes a PHP és a MySQL mellett dönteni.

A PHP legfőbb erősségei A PHP elsődleges versenytársai a Perl, a Microsoft ASP.NET, a Ruby (Rails keretrendszeren vagy másként), aJavaServer Pages (JSP) és a ColdFusion. Ezekkel összehasonlírva a PHP-nak számos erőssége van, amelyek közül a legfontosabbak: Teljesítmény Skálázhatóság Csatlakozási lehetőség (interfész) számtalan különböző adatbázisrendszerhez Beépített könyvtárak a leggyakoribb webes feladatokhoz Alacsony költség Egyszerű elsajátíthatóság és használhatóság Objektumorientált programozás széles körű támogatása Hordozhatóság (platformfüggetlenség) A fejlesztői megközelítés rugalmassága Hozzáférhető forráskód Hozzáférhető támogatás és dokumentáció Fejtsük ki ezeket az erősségeket kicsit bövebben is!

Teljesítmény

A PHP nagyon gyors. Még egyszerű, olcsó szervert használva is több millió letöltése szolgálhatunk ki naponta. A Zend Technolo­ gies (http://www.zend.com) által publikált összehasonlító adatok alapján a PHP nagyobb teljesítményre képes versenytársainál.

Skálázhatóság

A PHP-Rasmus Lerdorf szavaival élve-.,megosztott elem nélküli" (shared-nothing) archicektúrával rendelkezik. Ez azt jelenti, hogy hatékonyarr és olcsón, akár belépő szintű szerverekkel is lehet horizontálisan bővíteni.

Adatbázis-integráció

A PHP számos adatbázisrendszerhez tud natív módon kapcsolódni. A MySQL-en túlmenően közvetlenül kapcsolódhatunk egyebek között PostgreSQL, Oracle, dbm, FilePro, DB2, Hyperwave, lnformix, lnterBase és Sybase adatbázisokhoz. A PHP 5-ös verziója SQLite nevű, beépített SQL felülettel rendelkezik az egyszerű fájlokhoz. Open Database Connectivity Standard (ODBC), vagyis nyílt adatbázis-kapcsolás használatával bármilyen, ODBC driverrel rendelkező adatbázishoz kapcsolódhatunk. Sok egyéb mellett a Microsoft-termékek tartoznak ide. A PHP-hoz a natív könyvtárak mellett PHP Database Objects (PDO), azaz egy PHP adatbázis-objektumok nevű adatbázis­ absztrakciós réteg is tartozik, amely következetes hozzáférést tesz lehetövé, és elősegíti a biztonságos programozási megoldások használatát.

Beépített könyvtárak

Mivel a PHP-t interneten való használatta alakították ki, számtalan beépített függvénnyel rendelkezik a különféle, internettel kapcsolatos feladatok elvégzésére. Mindössze néhány sornyi kódra van szükség ahhoz, hogy menet közben állítsunk elő képeket, webes vagy egyéb hálózati szolgáltatásokhoz kapcsoló

Az összefűző operátort (.) használva egyetlen sorba is írhatnánk ugyanezt:

A kódban használt, beépített date () PHP függvény közli a vevővel rendelése feldolgozásának dátumát és idejét. Ez az információ a kód minden egyes lefutásakor más és más lesz. Az 1.3 ábrán a kód egy adott időpontban történő lefuttatásának kimenetét láthatjuk.

t.ll



tttaf

���*

��� ������-Bob autóalkatrészek

-

··?r-:-.11-.:,w

Rendelési nedmények

1.3 ábra: A PHP date ()

függvénye formázott dátumot ad vissza.

Függvényhívások Vizsgáljuk meg a date () függvény meghívását! Ez a függvényhívás álcalános formája. A PHP webes alkalmazások fejleszté­ sekor használható függvények széles választékával rendelkezik. A függvények többségének valamilyen adatot (paramétert) kell átadni, és a függvények maguk is valamilyen értékkel térnek vissza. Nézzük meg újra ezt a függvényhívást: date('H:i,

jS

F');

PHP gyorstalpaló

17

Láthatjuk, hogy a hívással egy karakterlánc (szöveges adat) adódík át a zárójelek közt a függvénynek. A zárójelben lévő elemet a függvény paraméterének, más néven argumentumának hívjuk. Az ilyen paramétereker a függvény bemeneti adarként

l

használja valamilyen konkrét eredmény (kimenet) elöállítására.

A da te ( ) függvény használata A date

()

függvény formázó karakterláncot (formar string) vár paraméterként, ami meghatározza a kivánt kimenet stílusát.

A karakterlánc minden betűje a dátum és idő egy-egy részét jelképezi. A H az óra a 24 órás időformátumban (az egyszámjegyű órák előtt bevezető nullával), az i a percek (szükség eserén szinrén bevezető nullával), a j a hónap napja (mindíg nulla nél­ kül), az S a sorszárnnév képzője ( jelen esetben ez th, hiszen angolul írjuk ki a dátumot), az A date

()

F

pedig a hónap teljes neve.

függvény által támogatott formáromok teljes list:iját a Dátum és idő kezelése ámű 21. fejezerben találjuk meg.

Az űrlapváltozók elérése A megrendelési űrlap használatának célja az ügyfélrendelések begyűjtése. Az ügyfelek által begépelt adatokat könnyen megsze­ rezhetjük PHP-ben, de a ténylegesen alkalmazandó módszer az általunk használt PHP verziójáról és php. ini fájlunk egyik beállírásától függ.

Rövid, közepes és hosszú változók A PHP kódon belül az űrlapmezőket az azok nevéhez kapcsolódó nevű PHP változókként érhetjük el. A változók neveit on­ nan ismerjük fel könnyen a PHP-ben, hogy dollárjellel ($) kezdődnek. (A dollárjel kiírásának elmulasztása gyakran elkövetett programozói hiba.) A használt PHP-verziótól és annak beállírásairól függően háromféleképpen érhetjük el az űrlapadarokat változókkal. Ezek­ nek a módszereknek nincsen hivatalos nevük, mi ezért rövid, közepes és hosszú stílusnak fogjuk nevezni őket. Mindháromra igaz, hogy a PHP kódnak elküldött oldalon levő űrlapmezők mindegyike elérhető az adott kódban. Az abroncs_db mező tartalmát az alábbi módokon érhetjük el: $abroncs_db

ll

rövid stílus

$_POST['abroncs_db']

ll

$HTTP_POST_VARS['abroncs

közepes stílus

db']

ll

hosszú stílus

Példánkban és a könyv egészében a közepes stílussal (vagyis a $_POST[ 'abroncs_db' ] formával) fogunk hivatkozni az űrlapválrozókra, ám az egyszerűség kedvéért a változók rövidebb változatát is létrehozzuk. De a kódban, nem pedig auto­ matikusan tesszük ezt, mert automatikus létrehozásuk biztonsági problémát vetne fel a kódban. Saját kódjaink esetében választhatunk ettől eltérő megközelítést. Hogy megalapozott dönrést hozhassunk, tekintsük ár a különböző módszereket: A rövid stílus ( $abroncs_db) kényelmes ugyan, de használata a register _globals konfigurációs beállítás bekap­ csolását igényli. Ez a beállirás biztonsági okokból alapértelmezésben ki van kapcsolva. A stílus használarakor könnyen követhetünk el a kódot megbízhatarianná (nem biztonságossá) tevő hibákat, éppen ezért ez a stílus napjainkban már nem igazán ajánlott. Nem lenne értelme egy új kódban használni, mert a PHP 6-os verziójából valószínűleg el fog tűnni. Az ajánlott megközelírés a közepes stílus ( $_POST [ 'abroncs_db' l). Amennyiben a közepes stílus alapján a változó nevek rövid változatát hozzuk létre (ahogy tesszük a könyvben is), nem kell biztonsági kérdésekkel foglalkoznunk, rá­ adásul változóink viszonylag könnyen használhatók lesznek.

A hosszú stílus ( $HTTP _POST_VARS [ 'abroncs_db' l) a leginkább szószáryár. Meg kell említenünk, hogy újabban sokat kifogásolják, így hosszú rávon minden bizonnyal el fog tűnni. Korábban ez volt a leginkább platformfüggeden stílus, de ma már a teljesítményt növelő register _l ong_arra ys konfigurációs dírektívával kiikratható. Új kódban - a rövid stílushoz hasonlóan - ezt sem érdemes már használni, kivéve, ha biztosak vagyunk abban, hogy szoftverünket csak régi szerverekre fogják telepíteni. Rövid stílus használata esetén a kódban lévő változók neve megegyezik a HTML űrlapon lévő űrlapmezők nevével. Nem kell a változókar a kódban deklarálni vagy bármilyen művelertel lérrehozni. Lényegében úgy adódnak ár a kódnak, ahogy

a függvények megkapják paramétereiket. Ha ezt a stílust választjuk, a változókat egyszerűen, például $abroncs_db - ként használhatj uk. Az űrlapon lévő abroncs_ db mező létrehozza az űrlapot feldolgozó kód $abroncs_db változóját. A változókhoz való ilyen kényelmes hozzáférés vonzó lehet, ám mielőrt egyszerűen bekapcsolnánk a regis ter_ globals

beállítást, érdemes végiggondolni, hogy a PHP fejlesztői csapata miért döntött annak kikapcsolása mellett.

18

2. fejezer

A változókhoz való ilyen közverlen hozzáférés igen kényelmes lehet, ám lehetőséger ad arra, hogy a kódok biztonságát veszélyezterő hibákar kövessünk el. Ha az űrlapváltozókar automatikusan ilyen globális változókká alakítjuk, akkor nem

l

lehet egyértelműen megkülönböztetni az általunk létrehozorr és a közverlenül felhasználéktól érkező, nem megbízható vál­ tozókat. Ha nem járunk el kellő gondossággal, és nem rendelünk minden változóhoz kezdőértéket, akkor a felhasználék saját változóinkkal keveredő változókat és értékeket adhatnak át űrlapválrozókénr. Amennyiben a változók elérésének kényelmes, rövid stílusár használjuk, ügyeljünk arra, hogy minden saját változónak kezdőértéket adjunk! A közepes stílus esetén az űrlapváltozókar a $_POST, $_GET vagy $_REQUEST tömb valamelyikéből keressük vissza. A $_GET vagy $_POST tömb közül az egyik tárolja az űrlapváltozók minden részletét. Hogy melyik tömböt használjuk, az attól függ, hogy az űrlap elküldése GET vagy POST metódussal történe-e. A GET vagy POST metódussal elküldött min­ den adat kombinációja elérhető a $_REQUEST tömbön keresztül is. Amennyiben az űrlap a POST metódussal lett elküldve, az abroncs_ db mezőbe bevitt adat a$_POST [ 'abroncs_ db' J elemben lett eltárolva. Ha az elküldés GET metódussal történt, az adarot a$_GET['abroncs_db' l elemben fogjuk

megtalálni.Az adat mindkét esetben elérhető a $_REQUEST [ 'abroncs_db' l

tömbelemben is.

Ezek a tömbök aszuperglobális tömbök közé tartoznak. E fogalomhoz a későbbiekben, amikor a változók hatókörét tár­ gyaljuk, még visszatérünk. Nézzünk meg egy példát, amelyben a változók egyszerűbben használható másolatát hozzák létre! Egy változó ércékének egy másikba másolásához az értékadó (hozzárendelő) műveleti jelet (operátorr) használjuk; ez PHP-ben nem más, mint az egyenlőségjel (=).A következő utasítás annyir tesz, hogy létrehoz egy új, $abroncs_db nevű válrozót, és belemásolja a$ POST ['abroncs_db' J $abroncs_db

=

tartalmár:

$_POST['abroncs_db');

Helyezzük az alábbi kódblokkot a feldolgozó kód elejére! A könyv összes, űrlapból érkező adatokat kezelő kódja hasonló blokkot tartalmaz az elején. Mivel ez a kód nem állít elő semmilyen kimenetet, mindegy, hogy a és az oldalt indító más HTML címkék alá vagy fölé helyezzük. A könnyebb megtalálhatóság érdekében mi általában a kód elejére szaktuk helyezni az ilyen blokkokat.