Ha olyan Webes
alkalmazást szeretnénk írni, melynek legfontosabb feladata az adatkezelés,
adatfeldolgozás, akkor adatainkat csak a serveren tárolhatjuk. Ekkor várható el
a rendszertől, hogy a világháló bármely pontjáról ugyanúgy láthatók és
kezelhetők lehessenek az adatok. Az adattárolásra szolgálnak az adatbázisok. A egyik legelterjedtebb adatbázis a MySql,
melyet a legtöbb szolgáltató fel is kínál használatra regisztrációnk után.
Ebben a
jegyzetben található adatbázis-hozzáférés az ultraweb szolgáltatónak a gmsoft
felhasználója adatai alapján készült. A kapcsolat leírására és létrehozására
célszerű egy különálló állományt létrehozni. Ezt az állományt minden olyan
lapon, amelyik ezt az adatbázist használja, include-olni kell. Az adatbázis
20 MB méretű, tagolatlan. Nem lehet benne több (rész-) adatbázist létrehozni.
Adattáblákat természetesen lehet, és ha logikailag ezeknek több adatbázishoz
kellene tartozni, akkor nekünk kell ezekre odafigyelnünk. A fizetős
szolgáltatóknál több adatbázist is létre lehet hozni, melynek mérete akár több-száz
MB is lehet.
Lássuk, hogyan
is néz ki egy ilyen php file. A neve legyen config.php. Ezt az állományt,
mely csak php és mysql kódokat tartalmaz, le is
tölthetjük a böngészőbe, és ha nem jelenik meg semmi, akkor létrejött a
kapcsolat, különben a listában lévő hibaüzenet egyikét láthatjuk.
<?php
$dbhost = "sql3.ultraweb.hu";
$dbuser = "gmsoft";
$dbpass = "********";
$dbconn = mysql_connect($dbhost,$dbuser,$dbpass);
$dbname = "gmsoft";
if (!$dbconn) die("Nem lehet kapcsolódni a MySQL kiszolgálóhoz!");
mysql_select_db($dbname) or die("Nem lehet megnyitni
az adatbázist: ".mysql_error() );
?>
A listából a password ki van törölve, helyette *-okat
látunk. Ez természetes, hiszen ennek közreadásával bárki, bármilyen változtatás
végre tudna hajtani az adatbázison, ami lássuk be, nem lenne célszerű. Azaz, ha
valaki egy ilyen környezetre vágyik, akkor ott a saját jelszavát kell a *-ok helyén szerepeltetni. Ez azt is jelenti, hogy a phpMyAdmin-ra sem tud más, csak gmsoft felhasználó
bejelentkezni.
A lista a
következőket tartalmazza:
$dbhost :
bejelentkezési hely;
$dbuser: felhasználó;
$dbpass: jelszó;
$dbconn: kapcsolat;
mysql_connect: a php és a MySql kapcsolatlétrehozó függvénye, visszatérési értéke kapcsolatazonosító,
vagy sikertelen kapcsolódás esetén a logikai FALSE;
$dbname: az adatbázis neve (itt, mivel csak egyetlen
adatbázis lehet, megegyezik a felhasználó nevével);
if: a php nyelvi eleme, egyszerű szelekció (if = ha);
!:
a php-ban a tagadás jele (NOT – a nyelvi elemek a C nyelv elemihez hasonlóak,
több esetben vele azonosak);
die:
a php hibakezelő függvénye, mely megjeleníti az argumentumot és kilép az
aktuális php szakaszból;
mysql_select_db: a php
adatbázis-kiválasztó függvénye, visszatérési értéke adatbázis-azonosító,
sikertelen megnyitás esetén logikai FALSE;
mysql_error: a php hibaüzenete.
Ahhoz,
hogy a kapcsolatunkat élővé tegyük, szükségünk van legalább egy adattáblára az
adatbázisban, például egy olyanra, amelyben felhasználók nevét szeretnénk
tárolni. Lépjünk be a szolgáltató által biztosított phpMyAdmin
felületre:
Válasszuk ki
az egyetlen gmsoft adatbázist és kezdeményezzük a Users nevű tábla létrehozását
kettő mezővel:
A Végrehajt
nyomógomb után leírhatjuk mezők tulajdonságait. Az
első mező azonosítója id legyen, típusa INT (egész),
ne vehessen fel nulla értéket, automatikusan növekedjen, és elsődleges kulcsa
legyen a táblának. A második mező azonosítója UName
és 32 karakter hosszú string típusú. Keressünk egy
olyan kódtáblát, mely a magyar ékezetes betűket tudja kezelni (pl.: latin2 hungarian ci), majd kérjünk
Mentést.
Ezzel a Users táblánk megszületett,
melynek tulajdonságait a következő képernyőn láthatjuk.
A
továbblépést már php-ban hajtjuk végre. Próbáljunk meg egy felhasználót nevével
felvenni az adatbázisba. Ezt egy html oldalba
beágyazott kóddal oldjuk meg.
<html>
<head>
<title>Felhasználók felvétele</title>
</head>
<body>
<h2>Kérem a felhasználó nevét:</h2>
<form name="" action="" method="POST">
<input type="text" name="username" /><br /><br />
<input type="submit" name="" value="A felhasználó felvétele az adatbázisba" /><br /><br />
</form>
<?php
include("config.php");
if ( isset($username) && ($username !== "") ){
mysql_query("INSERT INTO Users (id,UName) VALUES
('','$username')");
}
print "<h3>Az
adatbázisban szereplő felhasználók:</h3>";
$eredm = mysql_query("SELECT *
FROM Users");
while ( $sor = mysql_fetch_object($eredm) ){
$id = $sor->id;
$user = $sor->UName;
print "$id. $user<br
/>";
}
mysql_close();
?>
</body>
</html>
A
lista php tartalma:
include: a php file-beillesztő függvénye, ugyanúgy értelmezi az include-olt
listát, mint a belsőt;
isset: függvény, mely arra ad választ, hogy van-e értéke az
argumentumnak, visszatérési érték logikai;
&&:
logikai és művelet;
!==:
a nem egyenlő reláció jele;
mysql_query: php-ba ágyazott SQL
parancs hívására alkalmas függvény, visszaadott értéke egy eredménytábla;
INSERT
INTO … VALUES: az SQL-nek a táblázatba való
beszúrás parancsa;
SELECT
* FROM: az SQL-nek a táblázatból való kiválasztás parancsa, a csillag
helyett mezőlista is állhat, további bővítményei léteznek;
while: elől-tesztelő ciklus, lefut, ha a kulcsszó utáni feltétel
igaz;
mysql_fetch_object:
a php-ba ágyazott SQL lekérdezés eredménytáblájának egy sorát objektumba zárja,
ha nincs sor, visszaadott értéke logikai FALSE;
->:
a php objektum mezőlekérdezésére használt műveleti jel;
print:
a php-nek a listába-írásra szolgáló parancsa, másik
alakja: echo;
mysql_close: adatbázis-kapcsolat
zárása.
Ha a users.php fájlt
letöltjük és Gipsz Jakabot, mint felveendő felhasználó beírjuk az input mezőbe,
akkor ezt látjuk:
A
nyomógomb megnyomása után:
Látható,
hogy a felhasználók listájában Gipsz Jakab (mint egyetlen felhasználó) megjelent.
Ugyanezt a phpMyAdmin felületen is láthatjuk, ha Tartalom
megjelenítést választunk. (Struktúra nézetben a tábla mezőinek tulajdonságait
láthatjuk és módosíthatjuk, mezőt szúrhatunk be, vagy törölhetünk.)
Bővítsük
egy kicsit a users.php lapunk képességeit
azzal, hogy lehessen törölni bárkit a felvett felhasználók közül. Ehhez az
kell, hogy a visszakapott felvett felhasználók listáját ne egyszerű látványként
helyezzük a visszakapott lapra, hanem aktív elem részeként, például egy
listadobozban. Ha ezek után a listából valamelyik felhasználót kiválasztjuk, és
a kiválasztást elküldjük a kérés részeként, akkor lehetősége lesz a php-nak a
kiválasztott törlésére.
Első
lépésként vegyünk fel még néhány felhasználót:
Írjuk
át a users1.php listát úgy, hogy a felvett
felhasználók listadobozban jelenjenek meg. Helyezzük a listát egy form-ba és helyezzünk alá egy nyomógombot törlés
felirattal.
<html>
<head>
<title>Felhasználók felvétele</title>
</head>
<body>
<h2>Kérem a felhasználó nevét:</h2>
<form name="" action="" method="POST">
<input type="text" name="username" /><br /><br />
<input type="submit" name="" value="A felhasználó felvétele az adatbázisba" /><br /><br />
</form>
<?php
include("config.php");
if ( isset($username) && ($username !== "") ){
mysql_query("INSERT INTO Users (id,UName) VALUES
('','$username')");
}
print "<h3>Az
adatbázisban szereplő felhasználók:</h3>";
print "<form
name=\"\" action=\"\" method=\"POST\">\n";
print "<select name=\"userid\"
size=\"11\">\n";
print "<option selected value=\"valassz\" />Válassz!\n";
$eredm = mysql_query("SELECT *
FROM Users");
while ($sor = mysql_fetch_object($eredm)){
print "<option value=\"$sor->id\" />$sor->UName\n";
}
print "</select><br /><br />";
print "<input type=\"submit\" name=\"userdel\" value=\"A kiválasztott
felhasználó törlése az adatbázisból\" />\n";
print "</form>";
mysql_close();
?>
</body>
</html>
Lássuk
mit kaptunk:
Utolsó
feladatként keltsük életre a törlőgombot. Ehhez a userdel nevű
submit
feldolgozására van szükség php-ben.
<html>
<head>
<title>Felhasználók felvétele</title>
</head>
<body>
<h2>Kérem a felhasználó nevét:</h2>
<form name="" action="" method="POST">
<input type="text" name="username" /><br /><br />
<input type="submit" name="" value="A felhasználó felvétele az adatbázisba" /><br /><br />
</form>
<?php
include("config.php");
if ( isset($username) && ($username !== "") ){
mysql_query("INSERT INTO Users (id,UName) VALUES
('','$username')");
}
if ( isset($userdel) && ($userid !== "valassz") ){
mysql_query("DELETE FROM Users WHERE id=$userid");
}
print "<h3>Az
adatbázisban szereplő felhasználók:</h3>";
print "<form name=\"\"
action=\"\" method=\"POST\">\n";
print "<select name=\"userid\"
size=\"11\">\n";
print "<option selected value=\"valassz\" />Válassz!\n";
$eredm = mysql_query("SELECT *
FROM Users");
while ($sor = mysql_fetch_object($eredm)){
print "<option value=\"$sor->id\" />$sor->UName\n";
}
print "</select><br /><br />";
print "<input type=\"submit\" name=\"userdel\" value=\"A kiválasztott
felhasználó törlése az adatbázisból\" />\n";
print "</form>";
mysql_close();
?>
</body>
</html>
A
php kódban eddig még nem használt elemek jelentése:
DELETE
FROM … WHERE …: az SQL-nek a táblázatból való
törlés parancsa, megadandó a tábla neve, amelyből azok a sorok lesznek törölve,
amelyekre a feltétel igaz, vigyázzunk, mert ha nem adunk meg feltételt, akkor a
tábla minden sora törlődik;
print
”<option value=\”$sor->id\” />$sor->UName\n”:
a lista egy elemének elhelyezése a listadobozban, a lista értékei az id-k, a
megjelenített elemei a UName-k lettek, a sor végén a \n az újsorba való írást jelenti
lapon.
Nincsenek megjegyzések:
Megjegyzés küldése