A DBM függvények használata

Ha nem is férünk hozzá valamilyen SQL adatbáziskezelõhöz (mint a MySQL vagy
az Oracle), majdnem biztos, hogy valamilyen DBM-szerû adatbázisrendszer rendelkez
ésünkre áll. Ha mégsem, a PHP akkor is képes utánozni számunkra egy
ilyen rendszer mûködését. A DBM függvények segítségével lényegében név–érték
párokat tárolhatunk és kezelhetünk.
Noha ezek a függvények nem biztosítják számunkra egy SQL adatbázis erejét, rugalmasak
és könnyen használhatók. Mivel a formátum igen elterjedt, az e függvé-
nyekre épülõ kód általában hordozható, noha maguk a DBM adatokat tartalmazó
állományok nem azok.
Ebben az órában a következõ témákkal foglalkozunk:
• Megtanuljuk a DBM adatbázisok kezelését.
• Adatokkal töltünk fel egy adatbázist.
• Visszanyerjük adatainkat egy adatbázisból.
• Elemeket módosítunk.
• Megtanuljuk, hogyan tároljunk bonyolultabb adatokat egy DBM adatbázisban.
DBM adatbázis megnyitása
A DBM adatbázisokat a dbmopen() függvénnyel nyithatjuk meg, amelynek két
paramétert kell átadnunk: a DBM fájl elérési útvonalát és a megnyitás módjára
vonatkozó kapcsolókat. A függvény egy különleges DBM azonosítóval tér vissza,
amelyet aztán a különbözõ egyéb DBM függvényekkel az adatbázis elérésére és
módosítására használhatunk fel. Mivel a dbmopen()egy fájlt nyit meg írásra vagy
olvasásra, a PHP-nek joga kell, hogy legyen az adatbázist tartalmazó könyvtár
elérésére.
A dbmopen() függvénynek a 11.1. táblázatban felsorolt kapcsolókkal adhatjuk
meg, milyen mûveleteket kívánunk végrehajtani az adatbázison.
11.1. táblázat A dbmopen() kapcsolói
Kapcsoló Jelentés
r Az adatbázist csak olvasásra nyitja meg.
w Az adatbázist írásra és olvasásra nyitja meg.
c Létrehozza az adatbázist (ha létezik, akkor írásra/olvasásra
nyitja meg).
n Létrehozza az adatbázist (ha már létezik ilyen nevû, törli
az elõzõ változatot).
A következõ kódrészlet megnyit egy adatbázist, ha pedig nem létezne a megadott
néven, újat hoz létre:
$dbm = dbmopen( "./adat/termekek", "c" ) or
å die( "Nem lehet megnyitni a DBM adatbázist." );
Vegyük észre, hogy ha nem sikerülne az adatbázis megnyitása, a program futását
a die() függvénnyel fejezzük be.
Ha befejeztük a munkát, zárjuk be az adatbázist a dbmclose() függvénnyel.
Ez azért szükséges, mert a PHP automatikusan zárolja a megnyitott DBM adatbázist,
hogy más folyamatok ne férhessenek hozzá a fájlhoz, mialatt a tartalmát olvassuk
vagy írjuk. Ha az adatbázist nem zárjuk be, a várakozó folyamatok azután sem érhetik
el az adatbázist, amikor már befejeztük a munkát. A dbmclose() függvény
paramétere egy érvényes DBM azonosító:
dbmclose ( $dbm );
194 11. óra
Adatok felvétele az adatbázisba
Új név–érték párt a dbminsert() függvénnyel vehetünk fel az adatbázisba.
A függvénynek három paramétere van: egy érvényes DBM azonosító (amelyet
a dbmopen() adott vissza), a kulcs és a tárolandó érték. A visszatérési érték 0,
ha sikeres volt a mûvelet; 1, ha az elem már szerepel az adatbázisban; és -1
bármilyen más hiba esetén (például írási kísérlet egy csak olvasásra megnyitott
adatbázisba). A dbminsert()már létezõ elemet nem ír felül.
A 11.1. programban létrehozzuk és megnyitjuk a termekek nevû adatbázist és
feltöltjük adatokkal.
11.1. program Adatok felvétele DBM adatbázisba.
1:
2:
3: 11.1. program Adatok felvétele DBM adatbázisba</<br />title><br />4: </head><br />5: <body><br />6: Termékek hozzáadása...<br />7:<br />8: <?php<br />9: $dbm = dbmopen( "./adat/termekek", "c" ) or<br />die( "Nem lehet megnyitni a DBM adatbázist." );<br />10:<br />11: dbminsert( $dbm, "Ultrahangos csavarhúzó", "23.20" );<br />12: dbminsert( $dbm, "Tricorder", "55.50" );<br />13: dbminsert( $dbm, "ORAC AI", "2200.50" );<br />14: dbminsert( $dbm, "HAL 2000", "4500.50" );<br />15:<br />16: dbmclose( $dbm );<br />17: ?><br />18: </body><br />19: </html><br />Az adatbázisba illesztés során az összes érték karakterlánccá alakul, így a termé-<br />kek árainak megadásakor idézõjeleket kell használnunk. Természetesen az adatb<br />ázisból kiolvasás után ezeket az értékeket lebegõpontos számokként is kezelhetj<br />ük, amennyiben szükséges. Vegyük észre, hogy nem csak egyszavas kulcsokat<br />használhatunk.<br />A DBM függvények használata 195<br />11<br />Ha ezek után meghívjuk a dbminsert() függvényt egy olyan kulcsértékkel,<br />amely már létezik az adatbázisban, a függvény az 1 értéket adja vissza és nem<br />módosítja az adatbázist. Bizonyos körülmények között pontosan erre van szükség,<br />de elõfordulhat olyan eset is, amikor módosítani szeretnénk egy meglévõ adatot,<br />vagy ha nem található ilyen kulcs az adatbázisban, új adatot szeretnénk felvinni.<br />Adatok módosítása az adatbázisban<br />A DBM adatbázisban a bejegyzéseket a dbmreplace() függvénnyel módosíthatjuk.<br />A függvény paraméterei: egy érvényes DBM azonosító, a kulcs neve és<br />az új érték. A visszatérési érték a hibakód: 0, ha minden rendben volt és –1,<br />ha valamilyen hiba lépett fel. A 11.2. példában az elõzõ program egy új változata<br />látható, amely a kulcsokat korábbi meglétüktõl függetlenül felveszi az adatbázisba.<br />11.2. program Elemek felvétele vagy módosítása DBM adatbázisban<br />1: <html><br />2: <head><br />3: <title>11.2. program Elemek felvétele vagy módosítása<br />DBM adatbázisban
4:
5:
6: Termékek hozzáadása...
7: 8: $dbm = dbmopen( "./adat/termekek", "c" )
9: or die( "Nem lehet megnyitni a DMB adatbá-
zist." );
10: dbmreplace( $dbm, "Ultrahangos csavarhúzó", "25.20" );
11: dbmreplace( $dbm, "Tricorder", "56.50" );
12: dbmreplace( $dbm, "ORAC AI", "2209.50" );
13: dbmreplace( $dbm, "HAL 2000", "4535.50" );
14: dbmclose( $dbm );
15: ?>
16:
17:
A program mûködésének módosításához mindössze át kell írnunk a dbminsert()
függvényhívást dbmreplace()-re.
196 11. óra
Adatok kiolvasása DBM adatbázisból
Egyetlen elemet a dbmfetch() függvény segítségével olvashatunk ki az adatbá-
zisból. Ebben az esetben két paramétert kell átadnunk: egy létezõ DBM azonosítót
és az elérni kívánt kulcs nevét. A függvény visszatérési értéke egy karakterlánc,
a kulcshoz tartozó érték lesz. A "Tricorder" elem árát például a következõ
függvényhívással kérdezhetjük le:
$ar = dbmfetch( $dbm, "Tricorder" );
Ha "Tricorder" elem nem található az adatbázisban, a dbmfetch()egy üres
karakterlánccal tér vissza.
Nem mindig ismerjük azonban az adatbázisban található kulcsokat. Mit tennénk
például akkor, ha ki kellene írni a böngészõablakba az összes terméket és a hozz
ájuk tartozó árakat, anélkül, hogy „beleégetnénk” a programba a termékek nevét?
A PHP biztosít egy módszert, amellyel az adatbázisban szereplõ összes elemen
végiglépkedhetünk.
Az adatbázis elsõ kulcsát a dbmfirstkey() függvénnyel kérdezhetjük le.
A függvény paramétere egy érvényes DBM azonosító, visszatérési értéke pedig
a legelsõ kulcs. Természetesen ez nem feltétlenül egyezik meg az elsõként beillesztett
adattal, ugyanis a DBM adatbáziskezelõk gyakran saját rendezési eljárást
használnak. Miután megkaptuk a legelsõ kulcsot, az összes rákövetkezõ elemet
a dbmnextkey() függvény ismételt hívásával kérdezhetjük le. A függvény param
éterként szintén egy érvényes DBM azonosítót vár, visszatérési értéke pedig
a következõ kulcs a sorban. Ha ezeket a függvényeket együtt használjuk
a dbmfetch()-csel, az adatbázis teljes tartalmát kiolvashatjuk.
A 11.3. példaprogram a termekek adatbázis teljes tartalmát kiírja a böngészõbe.
11.3. program DBM adatbázis összes bejegyzésének kiolvasása
1:
2:
3: 11.3. program DBM adatbázis összes bejegyzésének<br />4: kiolvasása
5:
6:
7: A Hihetetlen Kütyük Boltja
8: a következõ izgalmas termékeket kínálja
9: Önnek:
A DBM függvények használata 197
11
11.3. program (folytatás)
10:


11:


12:
13:
14:
15:
16: 17: $dbm = dbmopen( "./adat/termekek", "c" )
18: or die( "Nem lehet megnyitni a DBM adatbázist."
);
19: $kulcs = dbmfirstkey( $dbm );
20: while ( $kulcs != "" )
21: {
22: $ertek = dbmfetch( $dbm, $kulcs );
23: print "";
24: print "";
25: $kulcs = dbmnextkey( $dbm, $kulcs );
26: }
27: dbmclose( $dbm );
28: ?>
29:
Termék Ár
$kulcs \$$ertek

30:
31:
A 11.1. ábrán a 11.3. program eredménye látható.
198 11. óra
11.1. ábra
A DBM adatbázis
összes bejegyzésének
lekérdezése.
Elemek meglétének lekérdezése
Mielõtt kiolvasnánk vagy módosítanánk egy elemet, hasznos lehet tudni, hogy
létezik-e egyáltalán ilyen kulcsú elem az adatbázisban vagy sem. Erre a célra
a dbmexists() függvény szolgál, amely paraméterként egy érvényes
DBM azonosítót vár, illetve az ellenõrizendõ elem nevét. A visszatérési érték
true, ha az elem létezik.
if ( dbmexists( $dbm, "Tricorder" ) )
print dbmfetch( $dbm, "Tricorder" );
Elem törlése az adatbázisból
Az adatbázisból elemeket a dbmdelete() függvénnyel törölhetünk. A függvény
bemenõ paramétere egy érvényes DBM azonosító és a törlendõ elem neve.
Sikeres törlés esetén a visszatérési érték true, egyéb esetben (például ha az elem
nem létezik) false.
dbmdelete( $dbm, "Tricorder" );
Összetett adatszerkezetek tárolása
DBM adatbázisban
A DBM adatbázisban minden adat karaktersorozat formájában tárolódik, ezért
az egész és lebegõpontos számokon, illetve karakterláncokon kívül minden egyéb
adattípus elvész. Próbáljunk meg például egy tömböt tárolni:
$tomb = array( 1, 2, 3, 4 );
$dbm = dbmopen( "./adat/proba", "c" ) or
å die("Nem lehet megnyitni a DBM adatbázist.");
dbminsert( $dbm, "tombproba", $tomb );
print gettype( dbmfetch( $dbm, "tombproba" ) );
// A kimenet: "string"
Itt létrehozunk egy tömböt és a $tomb változóba helyezzük. Ezután megnyitjuk az
adatbázist és beszúrjuk a tömböt tombproba néven, majd megvizsgáljuk
a dbmfetch() függvény visszatérési típusát, amikor megpróbáljuk visszaolvasni
a tombproba elemet – láthatjuk, hogy karakterláncot kaptunk vissza. Ha kiírattuk
volna a tombproba elem értékét, az "Array" karakterláncot kaptuk volna.
Úgy látszik, ezzel el is úszott minden reményünk arra, hogy tömböket vagy
más összetett adatszerkezetet tároljunk a DBM adatbázisban.
A DBM függvények használata 199
11
Szerencsére a PHP rendelkezik egy olyan lehetõséggel, amely segítségével
a bonyolultabb szerkezeteket is egyszerû karaktersorozattá alakíthatjuk.
Az így „kódolt” szerkezetet már tárolhatjuk késõbbi használatra, DBM adatbázisban
vagy akár fájlban is.
Az átalakítást a serialize() függvénnyel végezhetjük el, amelynek bemenõ
paramétere egy tetszõleges típusú változó, a visszaadott érték pedig egy karakterlánc:
$tomb = array( 1, 2, 3, 4 );
print serialize( $tomb );
// A kimenet: "a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;}"
A DBM adatbázisban ezt a karakterláncot tárolhatjuk. Ha vissza akarjuk állítani
eredeti formájára, az unserialize() függvényt kell használnunk.
Ezzel a módszerrel lehetõségünk nyílik összetett adatszerkezetek tárolására
a DBM adatbázisok által kínált egyszerû eszközökkel is. A 11.4. listában egy asszociat
ív tömb tartalmazza a termékekrõl rendelkezésre álló információkat – ezt alak
ítjuk át karakterlánccá és helyezzük egy DBM adatbázisba.
11.4. program Összetett adatszerkezetek tárolása DBM adatbázisban
1:
2:
3: 11.4. program Összetett adatszerkezetek tárolása<br />DBM adatbázisban
4:
5:
6: Összetett adatok tárolása
7: 8: $termekek = array(
9: "Ultrahangos csavarhúzó" => array( "ar"=>"22.50",
10: "szallitas"=>"12.50",
11: "szin"=>"zöld" ),
12: "Tricorder" => array( "ar"=>"55.50",
13: "szallitas"=>"7.50",
14: "szin"=>"vörös" ),
15: "ORAC AI" => array( "ar"=>"2200.50",
16: "szallitas"=>"34.50",
17: "szin"=>"kék" ),
18: "HAL 2000" => array( "ar"=>"4500.50",
19: "szallitas"=>"18.50",
20: "szin"=>"rózsaszín" )
21: );
200 11. óra
11.4. program (folytatás)
22: $dbm = dbmopen( "./adat/ujtermekek", "c" )
23: or die("Nem lehet megnyitni a DBM adatbázist.");
24: foreach( $termekek as $kulcs => $ertek )
25: dbmreplace( $dbm, $kulcs, serialize( $ertek ) );
26: dbmclose( $dbm );
27: ?>
28:
29:
A listában egy többdimenziós tömböt építünk fel, amely kulcsként tartalmazza
a termék nevét és három tömbelemben tárolja a színt, az árat és a szállítás költségét.
Ezután egy ciklus segítségével feldolgozzuk az összes elemet: a termék nevét és
a karakterlánccá alakított tömböt átadjuk a dbmreplace() függvénynek. Ezután
lezárjuk az adatbázist.
A 11.5. program az adatok visszatöltésére ad megoldást.
11.5. program Összetett adatszerkezetek visszaolvasása DBM adatbázisból
1:
2:
3: 11.5. program Összetett adatszerkezetek<br />visszaolvasása<br />4: DBM adatbázisból
5:
6:
7: A Hihetetlen Kütyük Boltja
8: a következõ izgalmas termékeket kínálja
9: Önnek:
10:


11:


12:
13:
14:
15:
16:
17:
18: A DBM függvények használata 201
11
11.5. program (folytatás)
19: $dbm = dbmopen( "./adat/ujtermekek", "c" )
20: or die(“Nem lehet megnyitni
a DBM adatbázist.");
21: $kulcs = dbmfirstkey( $dbm );
22: while ( $kulcs != "" )
23: {
24: $termektomb = unserialize( dbmfetch( $dbm,
$kulcs ) );
25: print "";
26: print '";
27: print '";
28: print '\n";
29: $kulcs = dbmnextkey( $dbm, $kulcs );
30: }
31: dbmclose( $dbm );
32: ?>
33:
Termék Szín Szállítás Ár
$kulcs "$termektomb["szallitas"] ""

34:
35:
Ez a megoldás hasonló a 11.3. példában látottakhoz, de ebben az esetben több mez
õt nyomtatunk ki. Megnyitjuk az adatbázist és a dbmfirstkey(), illetve
a dbmnextkey() függvénnyel beolvassuk az összes adatot az adatbázisból.
A ciklusban az unserialize() függvénnyel létrehozzuk a termékeket tartalmazó
tömböt. Így már egyszerû feladat kiíratni az összes elemet a böngészõablakba.
A 11.2. ábrán a 11.5. program kimenete látható.
202 11. óra
11.2. ábra
Összetett adatszerkezetek
visszaolvasása
DBM adatbázisból
Egy példa
Már eleget tudunk ahhoz, hogy elkészítsünk egy mûködõképes programot
az ebben az órában tanult módszerekkel. A feladat a következõ: készítsünk egy
karbantartó oldalt, ahol a webhely szerkesztõje megváltoztathatja a 11.2. példaprogram
által létrehozott adatbázis termékeinek árát. Tegyük lehetõvé a rendszergazda
számára, hogy új elemekkel bõvítse az adatbázist, illetve hogy a régi elemeket
törölje. Az oldalt nem tesszük nyilvános kiszolgálón elérhetõvé, ezért
a biztonsági kérdésekkel most nem foglalkozunk.
Elõször is fel kell építenünk az ûrlapot, amely az adatbázis elemeit tartalmazza.
A termékek árának módosításához szükségünk lesz egy szövegmezõre és minden
elemhez tartozni fog egy jelölõnégyzet is, melynek segítségével az adott elemet
törlésre jelölhetjük ki. A lapon el kell helyeznünk két további szövegmezõt is,
az új elemek felvételéhez. A 11.6. példában az oldalt elkészítõ program olvasható.
11.6. program HTML ûrlap készítése DBM adatbázis alapján
1: 2: $dbm = dbmopen( "./adat/termekek", "c" )
3: or die("Nem lehet megnyitni
a DBM adatbázist.");
4: ?>
5:
6:
7: 11.6. program HTML ûrlap készítése<br />8: DBM adatbázis alapján
9:
10:
11:

12:
13:
14:
15:
16:
17:
18: 19: $kulcs = dbmfirstkey( $dbm );
20: while ( $kulcs != "" )
21: {
22: $ar = dbmfetch( $dbm, $kulcs );
23: print "";
25: print "";
26: print "";
28: $kulcs = dbmnextkey( $dbm, $kulcs );
29: }
30: dbmclose( $dbm );
31: ?>
32:
33:
34:
35:
36:
37:
38:
41:
42:
TörlésTermékÁr
name=\"torles[]\" ";
A DBM függvények használata 203
11
11.6. program (folytatás)
24: print "value=\"$kulcs\">
$kulcs name=\"arak[$kulcs]\" ";
27: print "value=\"$ar\">
 

39:
40:

43:

44:
45:
Szokás szerint az elsõ lépés az adatbázis megnyitása. Ezután megkezdünk egy
ûrlapot és mivel nem adunk meg céloldalt, feldolgozó programként magát
az oldalt jelöljük ki.
Elkészítjük a táblázat fejlécét, majd végigolvassuk az adatbázist a dbmfirstkey()
és dbmnextkey() függvények segítségével, az értékeket a dbmfetch()
függvénnyel olvasva ki.
A táblázat elsõ mezõje minden sorban egy jelölõnégyzetet tartalmaz. Vegyük észre,
hogy mindegyik jelölõnégyzet neve "torles[]". Ennek hatására a PHP létrehozza
a $torles tömböt, amely az összes bejelölt elemet tartalmazza. A jelölõ-
négyzetekhez tartozó értékek, így a $torles tömb elemei is azok az azonosítók
lesznek, amelyekkel a DBM adatbázis az adott terméket nyilvántartja (ezt az érté-
ket a $kulcs változóban tároljuk). Így, miután a rendszergazda kitöltötte és
elküldte az ûrlapot, a program $torles tömbje azon adatbázis-elemek kulcsait
fogja tárolni, amelyeket törölnünk kell.
204 11. óra
Ezután kiírjuk a böngészõablakba az elem nevét és létrehozunk egy szöveges
mezõt a termék árának. A mezõt ugyanolyan módon nevezzük el, mint az elõzõt,
ezúttal azonban a szögletes zárójelek közé beírjuk az azonosítót, amely alapján
a DBM adatbázis az elemet tárolja. A PHP ennek hatására létrehozza az $arak
tömböt, amelyben a kulcsok a termékek azonosítói.
Lezárjuk az adatbázist és visszatérünk HTML módba az új bejegyzés létrehozására
szolgáló uj_nev és uj_ar mezõk megjelenítéséhez. A 11.3. ábrán a 11.6. program
kimenetét láthatjuk.
Miután elkészítettük az ûrlapot, meg kell írnunk a kódot, amely a felhasználó által
megadott adatokat kezeli. A feladat nem olyan nehéz, mint amilyennek látszik.
Elõször töröljük a kijelölt elemeket az adatbázisból, majd módosítjuk az árakat,
végül felvesszük az új elemet az adatbázisba.
Miután a karbantartó kitöltötte és elküldte az ûrlapot, a törlendõ elemek listája
a $torles tömbben áll rendelkezésünkre. Mindössze annyi a dolgunk, hogy
végigolvassuk a tömböt, és az összes elemét töröljük az adatbázisból.
if ( isset ( $torles ) )
{
foreach ( $torles as $kulcs => $ertek )
{
unset( $arak[$ertek]);
dbmdelete( $dbm, $ertek );
}
}
A DBM függvények használata 205
11
11.3. ábra
HTML ûrlap készítése
DBM adatbázis
alapján
Elõször is megvizsgáljuk, hogy létezik-e a $torles változó. Ha a felhasználó
csak most érkezett az oldalra vagy nem jelölt ki törlése egyetlen terméket sem,
a változó nem létezik. Ellenkezõ esetben egy ciklus segítségével végigolvassuk és
minden elemére meghívjuk a dbmdelete() függvényt, amely eltávolítja
a DBM adatbázisból a paraméterként megadott elemet. Hasonlóan járunk el
az $arak tömb esetében is, itt azonban a PHP unset() függvényét kell haszn
álnunk a tömbelem törlésére. Az $arak tömb a felhasználótól érkezett, feltehet
õen részben módosított árakat tartalmazza. Ha nem törölnénk az $arak tömbbõl
a megfelelõ elemet, a következõ kód újra beillesztené.
Az adatbázis elemeinek frissítése során két választási lehetõségünk van. Az elsõ változatot
akkor alkalmazzuk, ha az adatbázis karbantartását nem egyetlen szerkesztõ
fogja végezni, tehát feltételezhetõ, hogy a programot egyidõben több felhasználó is
futtatni fogja – eszerint csak azokat az elemeket változtatjuk meg, amelyeket a felhaszn
áló kijelölt. A másik változat, amely az összes elemet megváltoztatja, akkor alkalmazhat
ó, ha a program csak egyetlen példányban futhat:
if ( isset ( $arak ) )
{
foreach ( $arak as $kulcs => $ertek )
dbmreplace( $dbm, $kulcs, $ertek );
}
Elõször is ellenõriznünk kell az $arak tömb meglétét. Ebben a tömbben az
adatbázis egy teljesen új változata lehet. Egy ciklus segítségével tehát végigolvassuk
az összes elemet és egyesével frissítjük az adatbázisban.
Végül ellenõriznünk kell, hogy a felhasználó kezdeményezte-e új elem felvételét
az adatbázisba:
if ( ! empty( $uj_nev ) && ! empty( $uj_ar ) )
dbminsert( $dbm, "$uj_nev", "$uj_ar" );
Ahelyett, hogy az $uj_nev és $uj_ar meglétét ellenõriznénk, azt kell ellen-
õriznünk, hogy értékük nem „üres”-e. Ez apró, de lényeges különbség. Amikor
a felhasználó elküldi az ûrlapot, a változók mindenképpen létrejönnek, de ha
a szövegmezõk nem kaptak értéket, a megfelelõ változók üres karakterláncot
tartalmaznak. Mivel nem akarunk üres elemeket tárolni az adatbázisban, fontos
ellenõrizni, hogy nem üresek-e a változók. Azért használjuk a dbminsert()
függvényt a dbmreplace() helyett, hogy elkerüljük a már bevitt termékek
véletlen felülírását.
A teljes kódot a 11.7. példa tartalmazza.
206 11. óra
11.7. program A teljes adatbázis-karbantartó program
1: 2: $dbm = dbmopen( "./adat/termekek", "c" )
3: or die("Nem lehet megnyitni
a DBM adatbázist.”);
4:
5: if ( isset ( $torles ) )
6: {
7: foreach ( $torles as $kulcs => $ertek )
8: {
9: unset( $arak[$ertek]);
10: dbmdelete( $dbm, $ertek );
11: }
12: }
13:
14: if ( isset ( $arak ) )
15: {
16: foreach ( $arak as $kulcs => $ertek )
17: dbmreplace( $dbm, $kulcs, $ertek );
18: }
19:
20: if ( ! empty( $uj_nev ) && ! empty( $uj_ar ) )
21: dbminsert( $dbm, "$uj_nev", "$uj_ar" );
22: ?>
23:
24:
25:
26: 11.7. program A teljes adatbázis-karbantartó<br />program
27:
28:
29:
30:

31:
32:
33:
34:
35:
36:
37:
38:
39: A DBM függvények használata 207
11
11.7. program (folytatás)
40: $kulcs = dbmfirstkey( $dbm );
41: while ( $kulcs != "" )
42: {
43: $ar = dbmfetch( $dbm, $kulcs );
44: print "";
46: print "";
47: print "";
49: $kulcs = dbmnextkey( $dbm, $kulcs );
50: }
51:
52: dbmclose( $dbm );
53: ?>
54:
55:
56:
57:
58:
59:
60:
61:
62:
65:
66:
67:
TörlésTermékÁr
name=\"torles[]\" ";
45: print "value=\"$kulcs\">
$kulcs name=\"arak[$kulcs]\" ";
48: print "value=\"$ar\">
 

63:
64:

68:

69:
70:
71:
208 11. óra
Összefoglalás
Ebben az órában megtanultuk, hogyan használjuk a PHP hatékony DBM függvényeit
adatok tárolására és visszaolvasására. Megtanultuk a dbmopen() használatát egy
új DBM azonosító létrehozására. Ezt az azonosítót használtuk az összes többi DBM
függvénynél is. Új adatokat adtunk az adatbázishoz a dbminsert() függvénnyel,
módosítottunk meglevõket a dbmreplace()-szel és töröltünk a dbmdelete()
használatával. Megtanultuk, hogyan használhatjuk a dbmfetch() függvényt
az adatok visszaolvasására. A serialize() és unserialize() függvényekkel
összetett adatszerkezeteket tároltunk DBM adatbázisban, végül egy gyakorlati
példán keresztül megnéztük, hogyan is használhatók fel e módszerek a valós
problémák megoldására.
Kérdések és válaszok
Mikor használjak DBM adatbázist SQL adatbázis helyett?
A DBM jó választás, ha kis mennyiségû és viszonylag egyszerû szerkezetû adatot szeretn
énk tárolni (név–érték párokat). A DBM adatbázist használó programok rendelkeznek
a hordozhatóság nagyon fontos elõnyével, de ha nagyobb mennyiségû adatot
kell tárolnunk, válasszunk inkább egy SQL adatbáziskezelõt, például a MySQL-t.
Mûhely
A mûhelyben kvízkérdések találhatók, melyek segítenek megszilárdítani az órában
szerzett tudást. A válaszokat az A függelékben helyeztük el.
Kvíz
1. Melyik függvényt használhatjuk egy DBM adatbázis megnyitásához?
2. Melyik függvénnyel szúrhatunk be új elemet egy DBM adatbázisba?
3. Melyik függvénnyel módosíthatunk egy elemet?
4. Hogyan érünk el egy elemet az adatbázisban, ha ismerjük a nevét?
5. Hogyan olvasnánk ki egy DBM adatbázisból a legelsõ elem nevét (nem az
értékét)?
6. Hogyan érjük el a további neveket?
7. Hogyan törlünk egy elemet a DBM adatbázisból, ha ismerjük a nevét?
A DBM függvények használata 209
11
Feladatok
1 Hozzunk létre egy DBM adatbázist a felhasználók azonosítóinak és jelszavainak
tárolására. Készítsünk egy programot, amellyel a felhasználók létrehozhatj
ák a rájuk vonatkozó bejegyzést. Ne feledjük, hogy két azonos nevû elem
nem kerülhet az adatbázisba.
2 Készítsünk egy bejelentkezõ programot, amely ellenõrzi a felhasználó azonos
ítóját és jelszavát. Ha a felhasználói bemenet egyezik valamelyik bejegyzéssel
az adatbázisban, akkor üdvözöljük a felhasználót valamilyen különleges
üzenettel. Egyébként jelenítsük meg újra a bejelentkezõ ûrlapot.