You are on page 1of 22

A PHP nyelv A PHP egy szerver oldali script nyelv.

A ColdFusion-hoz, vagy az ISAPI-hoz hasonlan, a vlasz lap formtumt ler utastsok egy HTML dokumentumba gyazva helyezkednek el. A minta dokumentum azon utastsai, melyek norml HTML utastsok, vltoztats nlkl tkerlnek a vlasz lapra. A specilis, a PHP specifikus elemeket a PHP vgrehajtja, s a generlt vlasz kerl be az eredmny lapra. Ugyan a PHP ler nyelve nem adatbzis orientlt, hanem a C ltalnos programozsi nyelvre pl, mgis tartalmaz egy sor adatbzis kapcsoldsi kiegszt modult, amely lehetv teszi hogy elrhessk, s a vlasz lapon megjelenthessk a legklnbzbb adatbzisokban trolt adatokat is. Az adatbzis kapcsoldsi felletek kztt szerepel az ODBC kapcsolat is. A WEB szerver itt is a meghvott dokumentum URL jbl ismeri fel, hogy a krst a PHP szervernek kell feldolgoznia. A PHP rendszer mkdsi struktrja az emltett rendszerekhez hasonlan az albbi elemekbl pl fel: WEB szerver PHP szerver Minta dokumentum

Browser URL

WEB szerver

PHP szerver

Adatbzis szerver

Sma dokumentum

A fenti struktra alapjn a PHP krsek feldolgozsa az albbi lpsekben fut le: 1. az olvasott lapon kiadnak egy hiperlink kapcsoldst egy olyan URL-re, mely mgtt PHP hvs rejlik. Egy ilyen cm lehet pldul a kvetkez: http://kov.iit.uni-miskolc.hu/php/a.php illetve a hivatkozst ms esetekben a http://kov.iit.uni-miskolc.hu/a.php formban is megadhatjuk. Ezen hivatkozsokban az URL els rsze jelli ki, hogy mely gpen tallhat a WEB szerver s a PHP szerver. Az els mintban a /php/ rsz egy virtulis knyvtr, mely jelzi a WEB szervernek, hogy itt egy PHP dokumentumot kell kezelni, s meg kell majd hvni a PHP szervert. A virtulis tvonal kijellsnek menete WEB szerver specifikus, rendszerint a WEB szerver konfigurcis llomnyt kell mdostani a virtulis tvonal kijellshez. Az Apache szerver esetn pldul az albbi jelleg belltsokat kell elvgezni: ScriptAlias /php/ "c:/path-to-php-dir/"

A msodik mintban a nem kellett virtulis knyvtr ahhoz, hogy a WEB szerver tudja, hogy a PHP szervert kel meghivnia. Ebben az esetben ugyanis a dokumentum kiterjesztse utal arra, hogy a dokunetumot a PHP fogja kezelni. A kiterjesztsek s a kezel programok sszerendelse is a Web szerver konfigurcis llomnyban trtnik. Egy ilyen belltst mutat az albbi Apache plda: AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml Action application/x-httpd-php "/php/php.exe" Az URL utols tagja, pldnkban a a.php rsz a sma dokumentumot jelli ki, mely megadja a vlasz lap ellltsnak mdjt. 2. A WEB szerver rzkeli, hogy a meghvott URL a PHP szerverhez kapcsoldik, ezrt meghvja a PHP modult vgrehajtsra. A PHP szerver ktfle mdban is mkdhet, lehet CGI s lehet API mdban is. 3. A PHP modul megkapja a vgrehajtsi feladatot a feldolgozand sma dokumentum azonostjval egytt. A PHP szerver tolvassa, s elemzi a sma dokumentumot. A PHP specifikus utastsokat rtelmezi, s vgrehajtja a PHP szerver. 4. Ha adatbzis hozzfrsi ignyek is felmerltek a PHP specifikus utastsok kztt, akkor a PHP szerver kapcsolatba lp az adatbzis kezelvel, s vgrehajtja a kijellt mveletsort. A PHP specifikus utastsok kztt megtallhatok azon elemek is melyekkel lerhat, hogyan jelenjenek meg az eredmny adatok a vlaszdokumentumban. 5. A generlt vlaszlap a norml HTML utastsok s a dinamikus elemekbl felplve, tkerl a WEB szerverre, majd onnan eljut az t ignyl bngszhz is. A PHP szerver is egy tbbrteg, tbb komponensbl ll rendszer. A rendszer elvi felptsi vzt mutatja be a kvetkez bra: WEB Szerver

PHP szerver SAPI PHP Core Zend Core Extension API Extension (pl. MySQL)

Sma leirs

Az SAPI (Szerver Absztrakcis Rteg) a klnbz WEB szerverekhez trtn kapcsoldst oldja meg, egy egysges felletet kpezve a felette elhelyezked rtegek szmra. Jelenleg tmogatott felletek: Apache, Roxen, Java (servlet), ISAPI, AOLserver s CGI. A Zend Core modul nyelvi parser szerepet tlt be a rendszerben. Az egyes kiterjesztsek teszik lehetv az klnbz adatbzis forrsok elrst. A PHP rendszer els verzija 1994 krl jelent meg. Az els verzi kidolgozsa Rasmus Lerdorf nevhez fzdik. Az 1995-s vben jelent meg egy javtott, a FORM elemeket is kezel PHP2 verzi. Ekkor a PHP mg csak az Apache WEB szerverrel tudott egyttmkdni. A PHP3-as vltozat mr kereskedelmi termkk is kintte magt, s piaci vagy ingyenes vltozatnak is tbb szzezer felhasznlja lett vilgszerte. A 2000-es vben mr a PHP4 verzi is megjelent, melybe plt be elszr a Zend optimalizlt rtelmez s kibvtett WEB szerver kapcsolatrendszer. A szles adatbzis tmogatst mutatja, hogy a PHP4 verzija mr a kvetkez adatforrsokat tmogatja: Adabas D Dbase Empress FilePro (read-only) IBM DB2 Informix Ingres A PHP rendszer nyelvi elemei A PHP specifikus utastsok a HTML utastsok kz beillesztve, begyazva foglalnak helyet. A norml HTML utastsoktl val egyrtelm s knnyen kezelhet sztvlaszts rdekben az egyes PHP specifikus utastsokat keretbe foglaljuk, s elklntjk a norml HTML elemektl. Az elhatrols az albbi vltozatok valamelyikvel lehetsges. <? PHP elemek ?> <?php PHP elemek ?> <script language=php> PHP elemek </script> <% PHP elemek %> A fenti vltozatok kzl a msodik amelyik tmr s mgis utal arra, hogy a kzrefogott utastsok a PHP szervernek fognak szlni. A PHP elemek, mint emltettk C nyelvi kifejezsekhez hasonl formtumot ltenek. Egy tagolt rsz tbb elemi PHP kifejezst, utastst is tartalmazhat. Ekkor az egyes PHP utastsokat pontosvesszvel hatroljuk el egymstl: <?php PHP utasitas1; InterBase FrontBase mSQL Direct MS-SQL MySQL ODBC Oracle (OCI7 and OCI8) PostgreSQL Solid Sybase Velocis Unix dbm

PHP utasitas2; %> A fenti pldbl is lthat, hogy a tagolsi rsz, s maga az egyes PHP elemi utasts is tbb forrssoron keresztl is folytatdhat, s sorvgjel nem jelent utasts hatrt. Ha szvegszerkesztvel ltrehozunk egy elso.php llomnyt, melynek tartalma a kvetkez: <?php echo Hello vilag; ?> akkor e PHP sma dokumentum mr rtelmezhet s vgrehajthat a PHP szerverrel. Ehhez t kell adni egy URL krst a WEB szervernek a fenti dokumentumot megjellve: Ha a PHP utastsok kz megjegyzst szeretnnk beilleszteni, akkor erre is tbbfle szintaktikai lehetsgnk van: - /* szoveg */ : ekkor tbb sorra is kiterjedhet a megjegyzs rsz, a kzrefogott szveg nem kerl rtelmezsre a PHP szerver ltal. - // szoveg : ekkor a megjegyzs kezdettl az aktulis sor vgig terjed rsz lesz a megjegyzs rsz - # szoveg : ugyanolyan rtelmezs, mint az elz formtum, azaz ekkor a megjegyzs kezdettl az aktulis sor vgig terjed rsz lesz a megjegyzs rsz A PHP sma kifejezsek sajt memria vltozkat is tartalmazhatnak. A memria vltozkat PHP rtkad utastsokkal hozhatjuk ltre. A vltozk kezelsnl az albbi alap informcikra lehet szksgnk: - a vltozk azonostja mindig a $ jellel kezddik: $a - az rtkads legyen az els hivatkozs a vltozra $a = 34.5 - a felvett rtk szabja meg a vltoz tpust A PHP rendszer az albbi alaptpusokat tmogatja:
-

egsz pld, $a = -455; vals, pld. $b = 98.56; szveges pld $c = alma;

A szveges vltozk lehetnek egy s lehetnek tbb karakter hosszak. A szveges kifejezseknl kt szveges kifejezs sszefzhet a . opertorral: $b = fa; $c = alma . $b ; esetben a c vltoz az almafa rtket fogja trolni. A vltozk a skalr rtk mellett tmb tpusak is lehetnek. A tmb kezels egyedi vonsa, hogy

tmb ltrehozsa az elemeinek a megadsval trtnik, nem elzetes helyfoglalssal a tmbelemek indexe az egsz tpus rtkek mellett lehet asszociatv, mikor egy szveges kifejezs adja meg az index rtkeket

$b[1] = 3; $b[2] = alma; $b[peter] = 34; Tbb dimenzis tmbk esetben a C szintaktikt kvetve minden dimenzinl kln szgletes zrjelben adjuk meg az indexrtkt: $a[3][2] = 23; A vltozkat, mint a pldkbl is lthattuk, nem kell elre definilni, s tpusukat ezrt az rtkads hatrozza meg. Egyazon vltozhoz egymsutn ms s ms tpus kifejezs is rendelhet, ezrt annak tpusa a program futsa sorn dinamikusan, menetkzben megvltozhat. A PHP kdrszlet tartalmazhat fggvny defincit is. A fggvnyt a function kulcsszval kell bevezetni. A fggvny paramtereket kaphat indtsakor, melyek alapjn hatrozza meg a visszatrsi rtkt. A fggvny definilst s meghvst mutatja be a kvetkez plda: <?php function novel ($p) { return $p + 1; } $v = novel(3); ?> A pldban a $v vltoz a 4 rtket fogja felvenni. A PHP egy objektum orientlt krnyezetet valst meg, gy tbbek kztt lehetsget ad osztlyok s objektumok hasznlatra is. Egy osztlyt definlni a class kulcsszval lehetsges, melynek sorn megadjuk az osztly tulajdonsgait a var kulcsszn keresztl, s definiljuk a metdusait is a function kulcssz segtsgvel. Az osztlyok kztt rklsi mechanizmus is definilhat. A kvetkez plda egy ilyen esetet mutat be, melyben a most ltrehozott osztly a kutya, s az s osztly az allat: class kutya extends allat { var gazdi; var oltva; function beolt() { . } . } A pldban a gazdi s az oltva tulajdonsga lesz az osztlynak, mg a beolt egy metdusa. Az osztlyhoz objektum a new opertorral hozhat ltre.

$bodri = new kutya; Az objektum vltozi s metdusai az objektum->azonost formalizmussal rhet el: bodri->gazdi = anna; bodri->beolt(); A sajt vltozk mellett a rendszer egy sor gynevezett rendszervltozt is elr, melyek a futat krnyezetrl adnak valamilyen informcit. Nhny fontosabb rendszervltozt ad meg a kvetkez felsorols:
-

SERVER_NAME: a szerver gp azonostsa REMOTE_ADDR: az ignyl, bngsz gp azonostsa HTTP_COOKIE_VARS: a klienstl kapott cookie vltozk listja

A PHP rszben ltrehozott vltozk a ltrehozs helytl fggen lehetnek globlisak vagy loklisak. A globlis vltozk a sma dokumentumban a ltrehozs helytl a dokumentum vgig lthatk. A ltrehozsi hely eltt viszont nem lthatk, hiszen ekkor mg nem is lteznek. A loklis vltozk a fggvnyekben definilt vltozk, melyek alapesetben csak a fggvnyen bell lthatk. A loklis vltozk elrejtik az ugyanilyen nven ltrehozott globlis vltozkat. Ha a fggvnyen bell is a mr ltrehozott globlis vltozkat szeretnnk elrni, akkor a fggvnyben a vltozk definilsakor a global kulcsszt kell megadni: function masik() { global $x ; $v = $x + 1; } A kifejezsek kpzsekor a konstans s vltoz rtkekbl opertokkal jabb rtkeket kpezhetnk. A PHP kifejezsekben a C nyelvben megszokott opertorok alkalmazhatk: + * / % = +=,-=,*=,.. & | ^ ~ >> << == != < > <= >= sszeads Kivons Szorzs Oszts Maradk rtkads Nvels, cskkents, Bitenknti s Bitenknti vagy Bitenknti kizr vagy Bitenknti negci Bitenknti shift jobbra Bitenknti shift balra Egyezsg Nem egyezsg Kisebb Nagyobb Kisebb vagy egyenl Nagyobb vagy egyenl

`` ++ -And Or Xor ! && ||

Vgrehajts Nvels eggyel Cskkents eggyel Logikai s Logikai vagy Logikai kizr vagy Logikai tagads Logikai s Logikai vagy

A fenti opertorok kzl taln egy, a vgrehajts opertora, ami nem jelent meg a C nyelvben ilyen formban. Ha a PHP ilyen felsvesszk kz zrt sztringet tall a kifejezsben, akkor megprblja annak tartalmt shell parancsknt lefuttatni. A vgrehajts eredmnye fog ezutn a parancs sztring helybe kerlni az eredmnyben. A kvetkez plda azt mutatja, amikor egy directory listt tesznk ki az eredmny lapra: <?php echo "<pre>".`dir`."</pre>" ; ?> Az egyes opertorok kztti kirtkelsi sorrendet az opertorok precedencija hatrozza meg, mely a C-ben megszokott sorrendet tartalmazza a PHP-nl is. trsitsi irny Bal Bal Bal Bal Jobb Bal Bal Bal Bal Bal Bal Left Bal Bal Bal Jobb Jobb mvelet , or xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === !== < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new

A kifejezsek mellett a PHP nyelv vezrlsi szerkezetetek is tartalmaz, melyek szintn a C nyelvbeli szintaktikhoz hasonltanak.

Feltteles vgrehajts: a jl ismert if kulcsszval adhat meg: if ($a > $b) { print "a nagyobb mint b"; } else { print "a nem nagyobb mint b"; } A tbbszrs elgazshoz a swicth kifejezs hasznlhat: switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2: print "i equals 2"; break; } Ell tesztels ciklus : itt a while kifejezs hasznlhat: $i = 1; while ($i <= 10) { print $i; $i++; } Htul tesztels ciklus: a do .. while kifejezs: $i = 0; do { print $i; } while ($i>0); A lptetses ciklus, a for ciklus is hasznlhat: for ($i = 1; $i <= 10; $i++) { print $i; } Ciklus egy tmb minden egyes elemre: a foreach ciklus hasznlhat: foreach ($arr as $value) { echo "Value: $value<br>\n"; }

Ebben a kifejezsben az $arr volt a tmb azonost, s $value az a vltoz, amely sorban felveszi a tmb egymsutni elemeit a ciklus vgrehajtsa sorn. A ciklusokbl, a ciklus magbl menetkzben is ki lehet lpni a break; utasts segtsgvel, s t lehet ugorni a ciklusmag htralv rszt a continue; utastssal. Egy kls forrs llomny betltse vgrehajtsra az include(llomny); utastssal lehetsges. A behvott az llomnyban szintn szerepelhetnek PHP utastsok, melyeket ott is rvnyes keret szimblumok kz kell elhelyezni. !!!egnezni hogyan lehet jelszot keretni es azt felhasznalni A PHP rendszer lehetsget ad arra is, hogy a bngsz oldali vltozkat, gynevezett cookie elemeket is definiljunk. Ehhez a vlasz lapon ki kell adni egy setcookie fggvnyhvst, amellyel megadhat a cookie elem azonostja, s rtke is. Az gy belltott vltoz a legkzelebbi hvskor mr lthat lesz. A cookie elem trlsre is a setcookie fggvnyt kell meghvni. A kvetkez plda egy egyszer cookie defincit mutat be: <?php setcookie(teszt,alma); echo $teszt; ?> A pldban egy teszt elnevezs cookie elem jtt ltre, mely az alma szvegrtket fogja felvenni. A php dokumentum els meghvsakor az echo parancs mg res sztringet r ki, s csak a msodik meghvs alkalmval fog az alma szveg megjelenni a vlasz dokumentumban. A cookie elem trlshez a setcookie fggvnyben ki kell hagyni az rtk argumentumot. llomnyok kezelse a szerveren A PHP dokumentumok alkalmasak arra, hogy a kliens oldalrl tvegynk llomnyokat a szerver oldalra. Az ttlts kt lpcsben zajlik le. Egyrszt szksg van egy olyan rlapra, mely elindtja az llomny ttltst, ami az llomnyt a szerver oldalon egy ideiglenes trol helyre leteszi. Msodik lpcsben az ideiglenes trol helyrl, ahonnan automatikusan trldik az llomny, t kell vinni azt a vgleges clhelyre. Ekzben egy ellenrzst is vgre lehet hajtani, hogy megfelel-e a felkldtt llomny tpus, mret szempontjbl, mert ha nem akkor nem kerl vgleges lehelyezsre. Az ttlts lpsit, elemeit szemllteti a kvetkez plda: Az tvitelt kivlt lap tartalma:

<FORM ENCTYPE="multipart/form-data" ACTION="/e.php" METHOD=POST> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="10000"> Atkldtt llomny: <INPUT NAME="sfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Send File"> </FORM> A fogad PHP dokumentum tartalma: <?php echo ideiglenes helye $sfile; echo eredeti nev : $sfile_name; echo meret : $sfile_size; echo tipus : $sfile_type; if (!copy ($sfile,minta.txt) ) { echo hiba; } ?> A PHP kdban a hivatkozott vltoz azonostja megegyezik a feltlt rlapban megadott mezazonostval, ami esetnkben az sfile azonost volt. A program az ideiglenes helyre letett llomnyt egy fix llomnyba viszi t, msolja t a copy fggvny segtsgvel. A sikertelen tmsols esetn hiba zenetet kap vissza a felhasznl. Az llomnyok feltltse mellett lehetsg van a szerver oldalon elhelyezett llomnyok kzvetlen, rekord szint kezelsre is. A PHP is hasznlhatjuk ugyanis a C-ben megismert llomnykezel mechanizmust, vagyis pthetnk tbbek kztt az albbi fggvnyekre: chgrp llomny csoport mdosts chmod llomny elrsi md mdosts chown llomny tulajdonos mdosts copy llomny msols diskfreespace szabad hely mrete fclose llomny lezrs feof llomnyvg lekrdezs fgetc karakter beolvass fgets sor beolvass file teljes llomny beolvassa tmbbe file_exists llomny ltezs ellenrzse fileatime llomny mdosts dtuma fileowner llomny tulajdonos lekrdezs

fileperms llomny elrsi md lekrdezs filesize llomny mret lekrdezs filetype llomny tpus lekrdezs fopen llomny megnyits fputs rs llomnyba fread llomny olvass binrisan fscanf llomny olvass formtmozottan fseek pozicionls az llomnyban ftell llomny pointer pozcija ftruncate llomny csonkts fwrite llomny rsa binrisan is_dir megadja, hogy a nv mgtt llomny vagy katalgus van-e is_writeable megadja, hogy az llomny rhat-e mkdir katalgus ltrehozs rename llomny tnevezs rewind llomny pointer visszallts az llomny elejre rmdir katalgus megszntets stat informci krs az llomnyrl tmpfile ideiglenes llomny ltrehozatala unlink llomny trlse Az albbi pldban az alaprtelmezsi dokumentum knyvtrba letett minta.txt llomny tartalmt jelentjk meg a vlasz dokumentumban: <?php $file = fopen ("minta.txt", "r"); if (!$file) { echo "<p> nyitasi hiba.\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); echo "$line <br>"; } fclose($file); ?>

A minta programban az fopen nyitja meg az llomnyt. A sikeressget itt is a fggvny visszatrsi rtkn keresztl vizsgljuk. Az llomny tartalmt soronknt elbb behozzuk a $line vltozba, majd annak tartalmt kitesszk a vlasz dokumentumba is.

Az ODBC adatkapcsolat A PHP szerver lehetv teszi, hogy a PHP kdszeleten bell ne csak a sajt vagy a krnyezeti vltozkat rjk el, hanem ms adatbtzis adatforrsokbl is nyerhessnk ki adatokat. A tbb klnbz lehetsges adatforrs tipus kzl mi most az ODBC forrst fogjuk ttekinteni. E adattipus elnye, hogy egyrszt ezen keresztl szmos ms adtforrs is elrhet lesz, msrszt a PHP szerver z ODBC kapcsolatot alaprtelemezs szerint magban foglalja, igy nincs szksg kln modul bepitsre az installci sorn. Az adatkapcsolat jellege, menete hasonlit a mr megismert CLI felletekhez, hisz itt is lnyegben egy C nyelv gazdanyelvi krnyezetbe kell bepiteni az adatkezelst megvalsit utasitsokat. Az adatkezels lpsi itt is a szokott f elemeket tartalmazzk, azat itt is meg kell oldani a kvetkez feladatokat: adatforrs azonositsa, kapcsolat felvtele parancsok elkldse eredmnyek fogadsa hibakezels, tranzakci s informci kezels

A sma lap feldolgozsakor teht els lpsben majd kapcsoldni kell a kijellt adatforrshoz. Ez a lps viszonylag idignyes, hiszen azonositani kell a klienst s sikeres ellenrzs esetn alloklni kell a DBMS erforrsokat az t kiszolgl szerver processzhez. Msrszt lthat az is, hogy gyakran meg kell ismtelni, hiszen minden adatbzis kezelst vgz sma lap feldolgozsnl el kell vgezni ezt a lpst. A PHP egyik j lehetsge, hogy az gynevezett perzisztens adatbzis kapcsolat mechanizmusval cskkenti az adatbzis kapcsoldsi idignyt. Ezen mechanizmus lnyege, hogy a PHP szerver nem bontja le rgtn a ltrejtt adatbzis kapcsoldsokat, hanem mehagyja a lehetsget arra, hogy azt ksbb jra felhasznlhassa. Termszetesen csak akkor tud egy kapcsolatot jra felhasznlni, ha az pontosan ugyanarra az adatforrsra, ugyanazon felhasznli nvhez ktdik. A perziszetens adatkapcsolat nem hasznlhat abban az aesetben, ha a PHP szerver CGI mdban dolgozik. A kvetkezkben ttekintjk a ODBC forrsok kezelshez felhasznlhat fggvnyeket: Adatkapcsolat felvtele: Norml adatkapcsolat felvtele az odbc_connect fggvnnyel trtnik. Szintakikja: int odbc_connect(string dsn, string user, string password, int [cursor_type]); A paramterek kzl az els az ODBC adatforrs azonosit DSN rtkt jelenti, a msodik a felhasznl azonosit neve s a harmadik a jelszava. A negyedik opcionlis paramter az ignyelt cursor tipust hatrozza meg. A SQL_CUR_USE_ODBC bellits esetn vrhat a legkisebb konfliktus veszly az adatbziskezelvel. A sikeres kapcsolat felvtel esetn nem zsus rtkkel tr viszza az odbc_connect fggvny, mig a zrus rtk hibt jelez. A nemzsus

visszatrsi rtk esetn a visszadot azonositt egy kapcsolat azonosit vltozba helyezzk le. Ez a vltoz fogja a tovbbiakban kijellni, hogy melyik kapcsolatra is voantkozik az adatkezel utasits. Ugyanis itt is tbb kapcsolat lhet prhuzamosan. Perzisztens adatkapcsolat felvtele a odbc_pconnect fggvnnyel trtnik. Szintakikja: int odbc_pconnect(string dsn, string user, string password, int [cursor_type]); A fggvny paramterezse s hibakezelse ugyanolyan mint a odbc_connect fggvny esetben. Adatkapcsolat megszakitsa az odbc_close fggvnnyel trtnik. Szintakikja: void odbc_close(int connection_id); ahol a fggvny paramtere a lezrand kapcsolatot kijell vltoz. Az sszes ODBC kapcsolat lezrsa az odbc_close_all fggvnnyel trtnik Szintaktikja: void odbc_close_all(void); E fggvny nem is ignyel bemen paramtert. Adatkezel parancsok kiadsa Egy SQL parancs tkldse az ODBC forrshoz vgrehajtsra az odbc_exec fggvnnyel trtnik Szintaktikja: int odbc_exec(int connection_id, string query_string); A fggvny els paramtere a kapcsolat azonosit, mig a msodik a vgrehajtand SQL utasits. Ennl az alaknl a DBMS a kapott sztringet elbb rtelmezi, optimalizlja majd vgrehajtja. Ebben az esetben minden parancs egy teljesen j parancsknt kerl vgrehajtsra Ha egyazon parancsot tbbszr meg fogunk ismtelni, akkor e mdszer erforrs pazarlan dolgozik, hiszen egyes elkszit lpseket feleslegesen ismtel meg. Ekkor inkbb a kvetkezkben felvzolt megolds ajnlhat. Az odbc_exec parancs hiba esetn a hamis, 0 rtket adja vissza. Hibtlan lefuts esetn egy eredmny azonosit lesz a fggvnz visszatrsi rtke. Egy SQL parancs tkldse az ODBC forrshoz elfeldolgozsra az odbc_prepare fggvnnyel trtnik Szintaktikja: int odbc_prepare(int connection_id, string query_string); Paramterezse megegyezik a odbc_exec utasits paramterzsvel. Ebben az esetben viszont az utasits nem fog lefutni, azt egy ksbbi idpontban, esetleg tbbszr is megismtelve lehet majd elvgezni. Hogy melyik elkszitett parancsot kell elvgezni, azt a visszadatott eredmny azonositval tudjuk kijellni. Hiba esetn hamis rket ad vissza az odbc_prepare fggvny.

Elkszitett SQL parancs vgrehajtsa az ODBC forrsban az odbc_execute fggvnnyel trtnik Szintaktikja: int odbc_execute(int result_id, array [parameters_array]); A fenti fggvnyben az els paramter a prepare fggvnyben visszadott eredmny azonositt jelli. A msodik paramter egy opcionlis tmb, amely elemeivel fog a konkrt SQL utasits lefutni. Mint ebbl mr lthat, a ktfzis vgrehajts igazbl az ltal lesz elnys, hogy nem szksges, hogy a megismtelt parancsok krakterrl karakterre, rtkrl rtkre mindig ugyanaz legyen. Elegend ugyanis, ha csak a parancs, a kulcsszavak egyeznek meg. A felhasznlt paramterek rtkei eltrhetnek egymstl. Vagyis egy SELECT rsz FROM auto WHERE ar < 100; s egy SELECT rsz FROM auto WHERE ar < 200; utasits, mivel csak a paramterben trnek el egymstl, a parancs struktrja ugyanaz, nevezetesen SELECT rsz FROM auto WHERE ar < X; alak, ezrt a fenti ltalnos alakot hasznlhatjuk a parancsok elkszitsre. A konrkt futtatsnl az X szimblum helybe elbb a 100,majd a 200 rtk fog helyettesitdni. A fggvny visszatrsi rtke egy sikeressg jelz. Eredmny adatok fogadsa A lekrdezs eredmnyei itt is egy cursor struktrn keresztl rhetk el. A cursor adatinak kezelsre azonban tbblehetsges mdszer is kilkozik. A cursor megadott rekordjnak ttltse a program memriba az odbc_fetch_row fggvnnyel trtnik Szintaktikja: int odbc_fetch_row(int result_id, int [row_number]); Az els paramter az eredmny azonosit. A msodik paramter a lekrt rekord sorszma. Ha ezt nem adjuk meg akkor a soronkvetkez rekord kerl beolvassra. A visszatrsi rtk egy sikeressg jelz, mely logikai rtk. Az thozott adatokat a result fggvnnyel lehet majd elrni. A cursorbl behozott rekord mertkeinek lekrdezse az odbc_result fggvnnyel trtnik Szintaktikja: string odbc_result(int result_id, mixed field); Az els paramter az eredmny azonosit. A msodik paramter a mez kijellsre szolgl. rtke lehet egy szm, jelezve a mez sorszmt s lehet egy azonosit nv, megadva a lekrt mez nevt. A fggvny visszatrsi rtke a lekrt mez aktulis rtke. Ha a teljes eredmny tblt szeretnnk megjeleniteni egy tblzatban, akkor legclszrebb az odbc_result_all fggvnyt meghivni, melynek szintaktikja: int odbc_result_all(int result_id, string [format]);

Ez a fggvny a teljes eredmnytblhoz generl egy HTML tblzatot az eredmny adatokat megjelenitve. A fggvny msodik paramtere egy opcionlis tblzat formtum specikci. A cursor megadott rekordjnak tartalmt az odbc_fetch_into fggvnnyel tudjuk tteni egy tmbbe. Szintaktikja: int odbc_fetch_into(int result_id, int [rownumber], array result_array); A fggvny els paramtere az eredmny azonosit, a msodik a kijellt rekord sorszma, a harmadik pedig azon tmbb neve, amelybe tkerlnek az eredmnyrekord mezrtkei. Ha nem adunk meg rekord pozicit, akkor a soronkvetkez rekord kerl beolvassra. Az eredmny halmazban tartalmazott rekordok darabszmt az odbc_num_rows fggvnnyel tudjuk lekrdezni. Szintaktikja: int odbc_num_rows(int result_id); A fggvny paramtere az rintett eredmny atonositt tartalmazza. Ha a mvelet SELECT volt, akkor a visszatrsi rtk az eredmnytbla rekordjainak a darabszma. Ha a mvelet DML utasits volt, akkor a vissztrsi rtk az rintett rekordok darabszma lesz. Hiba esetn 1 lesz a visszaadott rtk. Az eredmny halmazban tartalmazott mezk darabszmt az odbc_num_fields fggvnnyel tudjuk lekrdezni. Szintaktikja: int odbc_num_fields(int result_id); A fggvny paramtere az rintett eredmny atonositt tartalmazza. A visszatrsi rtk az eredmnytbla mezinek a darabszma. Hiba esetn 1 lesz a visszaadott rtk. Az eredmny halmazban tartalmazott mezk azonosit nevt az odbc_field_name fggvnnyel tudjuk lekrdezni. Szintaktikja: string odbc_field_name(int result_id, int field_number); A fggvny els paramtere az rintett eredmny azonositt tartalmazza, a msodik parmter a keresett mez sorszma. A visszatrsi rtk a mez azonosit neve. Hiba esetn logikai hamis lesz a visszaadott rtk. Az eredmny halmazban tartalmazott mezk tipust az odbc_field_type fggvnnyel tudjuk lekrdezni. Szintaktikja: string odbc_field_type(int result_id, int field_number); A fggvny els paramtere az rintett eredmny azonositt tartalmazza, a msodik parmter a keresett mez sorszma. A visszatrsi rtk a mez tipusa. Hiba esetn logikai hamis lesz a visszaadott rtk. Az eredmny halmazban tartalmazott mezk hosszt az odbc_field_len fggvnnyel tudjuk lekrdezni. Szintaktikja:

string odbc_field_len(int result_id, int field_number); A fggvny els paramtere az rintett eredmny azonositt tartalmazza, a msodik parmter a keresett mez sorszma. A visszatrsi rtk a mez hossza. Hiba esetn logikai hamis lesz a visszaadott rtk. Hamr nincs szksg az eredmny halmazra, akkor azt az odbc_free_result fggvnnyel lehet felszabaditani. Szintaktikja: int odbc_free_result(int result_id); ahol a paramter az eredmny sruktra azonosit rtke. Tranzakci kezels Tranzakci vgelegesitse az odbc_commit fggvnnyel trtnik, alakja: int odbc_commit(int connection_id); melyben a paramter a kapcsolat azonositsa. Sikertelsg esetn logikai hamis lesz a visszatrsi rtk. Tranzakci visszagrgetse az odbc_rollback fggvnnyel trtnik, alakja: int odbc_rollback(int connection_id); melyben a paramter a kapcsolat azonositsa. A tranzakci kezels jellegt lehet bellitani az odbc_autocommit fgvvnnye, szintaktikja: int odbc_autocommit(int connection_id, int [OnOff]); Az els paramter a kapcsolat azonosit. A msodik megadja, hogy autocommit zemmdban dolgozzon-e a rendszer vagy sem. Az autcommit esetn minden vgrehajtott parancs utn a DBMS rgtn vglegesit. Kikapcsolva az autocommit mdot, a tranzakcik a commit utasitsig fognak tartani. Ha nem szerepeltetjk a msodik paramtert, akkor a fggvny nem bellitja, hanem lekrdezi az autocommit md aktulis llapott. A mveletvgrehajts tbbi paramternek bellitsra szolgl az odbc_setoption fggvny, melynek alakja: int odbc_setoption(int id, int function, int option, int param); Az els paramter a kapcsolat azonosit, a msodik a paramter jellege. Ha a paramter a kapcsolatra vonatkozik, akkor 1-et kell itt megadni, ha a parancsra akkor 2-t kell bellitni. A harmadik argumentum az ODBC paramtert azonositja, azaz azt adja meg hogy mit is kell mdositani. A negyedik argumentum az ODBC paramter j rtkt adja meg. Mintapldk

Plda 1. Az els pldban egy adatbzisban trolt tbla tartalmt jelentjk meg a vlaszlapon. A lekrdezskor a teljes tblt visszaadjuk. A tbla azonost neve PAUTO s az t tartalmaz adatbzis ODBC DSN azonostja ORAPROPA. A sma PHP llomny, a MINTA1.PHP ekkor a kvetkez tartalm: <?php $conn = odbc_connect("ORAPROBA","scott","tiger"); if (! $conn) { echo "Hibas ODBC kapcsolat felvetel"; } else { echo "ODBC kapcsolat OK <br><br>"; echo "A PAUTO tabla adatai <br><br>"; $comm = odbc_exec($conn, "select * from pauto"); odbc_result_all($comm); echo "<br><br>"; echo "Nincs tobb adat"; odbc_close($conn); } ?> Amint a pldbl lthat elbb a kapcsolatfelvtel trtnik meg az ODBC adatforrssal, ami mgtt most egy Oracle DBMS van. A kapcsolat felvtelnl megadtuk a DSN nevet, az adatbzis felhasznli nevet s a hozz tartoz jelszt. A kapcsolatfelvtel sikeressge esetn elkldnk egy SQL ASELECT parancsot vgrehajtsra. Az eredmnyt a legegyszerbb mdon, tblzatos formban jelentjk meg. A kdrszlet vgn lezrjuk a kapcsolatot. Ha le szeretnnk futtatni a fenti PHP llomnyt, akkor a bngsznkben e dokumentumot kell krni a WEB szervertl. Termszetesen, hogy vgre is hajtdjon a kdrszlet, a WEB szervert gy kell eltte konfigurlni, hogy felismerje hogy a dokumentumot a PHP szervernek kell feldolgoznia, illetve magnak a PHP szervernek is futnia kell mr a kivlasztott gpen. A hvs egy lehetsges URL cme: http://laszlo.iit.uni-miskolc.hu:88/minta1.php A hvs eredmnyekppen generlt vlaszlap a kvetkez formtum lesz: ODBC kapcsolat OK A PAUTO tabla adatai RSZ r11 rbr234 bh54 bh56 tyu561 TIPUS opel fiat skoda suzuki opel AR 2300000 1790000 2600000 1900000 4900000

Nincs tobb adat mar

Plda 2. Ebben a pldban az alaplekrdezs helyett egy szelekcis lekrdezst fogunk vgrehajtani. Az aut rekordok kzl csak azok fognak megjelenni az eredmnyben, melyek ra egy megadott r felett van. A kszb r rtkt egy induldokumentum fogja bekrdezni a felhasznltl. Ezen a dokumentumon szerepelnie kell teht egy beviteli meznek az r megadshoz s egy nyomgombnak, mely lezrja a bevitelt s meghvja a feldolgoz dokumentumot. A beviteli rlapot kezel dokumentum egy norml HTML dokumentum, mg a feldolgoz dokumentum egy PHP dokumentum lesz, hiszen ez utbbi esetben lesz szksg adatbzis hozzfrsre. A INDULO.HTM tartalma: <html> <body> <form method = get action = "./minta2.php"> Auto adatok lekerdezese <br><br> <table> <tr><td>Minimum ar:</td><td><input type=text name=minar></td></tr> <tr><td> </td><td><input type=submit value="mehet"></td></tr> </table> </form> </body> </html> A dokumentum a meghvsakor az albbi alakban fog megjelenni a bngszn:

A mehet felirat gomb aktivizlsakor az ugyanazon knyvtrban lv MINTA2.PHP fog meghvdni. Ezen PHP dokumentum tartalma a kvetkez: <?php

$conn = odbc_connect("ORAPROBA","scott","tiger"); if (! $conn) { echo "Hibas ODBC kapcsolat felvetel"; } else { echo "ODBC kapcsolat OK <br><br>"; echo "A PAUTO tabla adatai <br><br>"; $comm = odbc_exec($conn, "select * from pauto where ar > ".$minar); odbc_result_all($comm); echo "<br><br>"; echo "Nincs tobb adat mar"; odbc_close($conn); } ?> Mint lthat ez csak annyiban klnbzik az elz minttl, hogy az egyszer SELECT utasts helyett egy szelekcis felttelt is tartalmaz a lekrdezs. A szelekcis felttelt gy ptettk fel, hogy a SELECT utasts sszelltsakor a kszbrtk helyre a $minar vltozt tettk be (a . a sztring sszefzs opertora). Ez a vltoz a hv, indit dokumentumban kapott rtket, mivel a ott volt egy ilyen nev beviteli mez. A vlaszlap a kvetkez alakban jelenik meg:

Plda 3. Ebben a pldban egy sszetettebb feladatot hajtunk vgre. Az adatbzis tevkenysg egy j aut rekord felvitele lesz. Viszont itt nem egy statikus felviteli rlapot fogunk hasznlni,

hanem dinamikusat. Ugyanis a felviteli rlapon a hrom beviteli mezbl az egyik a tipus mez nem norml beviteli mez lesz, hanem egy legrdl vlasztsi lista, melynek elemeit az adatbzisbl vesszk. Ehhez az adatbzisban ltezik egy TIPUSOK tbla, mely az rvnyes aut tpusokat tartalmazza. Ebbl kell kiolvasni a vlasztsi lista elemeit. A felvitelt szintn egy PHP dokumentum fogja vgezni, melyben annyi j elem van, hogy rtkellenrzst is kell vgeznie a rendszm mezre. Egy j aut rekordot csak akkor enged felvinni, ha a rendszma mg nem szerepel a tblban. A feladathoz teht kt, PHP dokumentumot kell kszteni. Az indul felviteli rlapot az INDULO:PHP generlja, ezt kell majd indulskor meghvni. A rekordot az E.PHP dokumentum fogja majd felvinni. INDULO.PHP tartalma: <?php echo "Uj auto rekord felvitele<br><br>\n"; echo "<form method=get action=\"e.php\">\n"; echo "<table>\n"; echo "<tr><td>Rendszam :</td><td><input type=text name=ursz></td></tr>\n"; echo "<tr><td>Tipus :</td><td><select name=utip>\n"; $conn = odbc_connect("ORAPROBA","scott","tiger"); if ($conn) { $comm = odbc_exec($conn, "SELECT nev FROM tipusok ORDER BY nev"); while (odbc_fetch_row($comm)) { $v = odbc_result($comm,1); echo "<option value=\"$v\"> $v\n"; } odbc_close($conn); } echo "</select></td></tr>\n"; echo "<tr><td>Ar :</td><td><input type=text name=uar></td></tr>\n"; echo "<tr><td><input type=submit value=Felvisz></td> <td> </td></tr>\n"; echo "</table>\n"; echo "</form>\n"; ?> A fenti PHP kd fogja ellltani a felviteli rlap HTML forrs kdjt. Ehhez az echo parancsot hasznlja fel. A sorvgeket itt is a \n karakterek jelentik. A fenti PHP dokumentum lefutsa eredmnyekppen az albbi dokumentum ll el: Uj auto rekord felvitele<br><br> <form method=get action="e.php"> <table> <tr><td>Rendszam :</td><td><input type=text name=ursz></td></tr> <tr><td>Tipus :</td><td><select name=utip> <option value="fiat "> fiat <option value="lada "> lada <option value="mazda "> mazda <option value="opel "> opel

<option value="renault "> renault <option value="skoda "> skoda <option value="volvo "> volvo </select></td></tr> <tr><td>Ar :</td><td><input type=text name=uar></td></tr> <tr><td><input type=submit value=Felvisz></td><td> </td></tr> </table> </form> A lap a bngszn a kvetkez formban jelenik meg:

Ez a lap, amelyet a felhasznl ki fog tlteni, hogy megadja az j rekord mezinek rtkt. A kitlts utn a felvitel a Felvisz felirat gomb aktivizlval indul el A meghvott felviv dokumentum kdja: <?php $conn = odbc_connect("ORAPROBA","scott","tiger"); if (! $conn) { echo "Hibas ODBC kapcsolat felvetel"; } else { $comm = odbc_exec($conn, "select count(*) from pauto where RSZ ='".$ursz."'"); odbc_fetch_row($comm); $db = odbc_result($comm,1); if ($db > 0) { echo "Letezo rendszam, felvitel sikertelen"; } else { $utip = rtrim($utip); $comm = odbc_exec($conn,

"insert into pauto values('$ursz','$utip', $uar)"); if ($comm) { echo "Rekord felveve"; } else { echo "rekord felvitel sikertelen"; } } odbc_close($conn); } ?> A forrsban a kapcsolat felvtele utn a db vltozba lekrdezzk azon rekordok darabszmt ahol a rendszm mez rtke megegyezik a felvitend rekord rendszm rtkvel. Ha tallunk ilyen rekordot, akkor nem kerl sor a tnyleges felvitelre, mert ismtldne a rendszm rtk, gy hibazenettel tr vissza a kdszelet. Ha nincs ismtlds akkor megtrtnik az INSERT parancs kiadsa, s a mvelet sikeressgnek ellenrzse.

You might also like