http://gorbem.hu/PHP.php

Kapcsolat az adatbázissal

 

Ha olyan Webes alkalmazást szeretnénk írni, melynek legfontosabb feladata az adatkezelés, adatfeldolgozás, akkor adatainkat csak a szerveren 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. Az 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 DotRoll szolgáltatónak a ******_gorbem 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.

 

Lássuk, hogyan is néz ki egy ilyen php fájl. A neve legyen hconfig.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.

 

http://gorbem.hu/PH/hconfig.php

 

<?php

$dbhost = "localhost";

$dbuser = "******_gorbem";

$dbpass = "********";

$dbname = "******_honlap";

$dbconn = mysql_connect($dbhost,$dbuser,$dbpass);

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 felhasználó és az adatbázis ugyanazon előnévvel rendelkezik, melyet biztonsági okok miatt nem célszerű nyilvánosságra hozni. A listából a jelszó is ki van törölve, helyette csillagokat 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 előnevét és jelszavát kell a *-ok helyén szerepeltetni. Ez azt is jelenti, hogy a phpMyAdmin-ra sem tud más, csak ******_gorbem felhasználó bejelentkezni.

 

A lista a következőket tartalmazza:

 

$dbhost : bejelentkezési hely;

$dbuser: felhasználó;

$dbpass: jelszó;

$dbconn: kapcsolat;

$dbname: az adatbázis neve (mivel több adatbázis létezik, minősítve van a felhasználó előnevével);

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;

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 a megfelelő adatbázist és kezdeményezzük a user nevű tábla létrehozását kettő mezővel:

 

 

Az Indítás 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.: utf8_general_ci), majd kérjünk Mentést.

 

 

Ezzel a user 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.

 

            http://gorbem.hu/PH/users1.php

 

<?php

     include("hconfig.php");

     if ( isset($_POST['username']) && ($_POST['username'] !== '') ){

         $username = $_POST['username'];

         mysql_query("INSERT INTO user SET UName='$username' ");

     }

     mysql_close();

?>

<html>

<head>

<title>Felhasználók felvétele</title>

</head>

<body>

<form name="" action="SQLkapcs.htm" method="POST">

<input type="submit" name="vissza" value="Vissza" />

</form>

<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

     print "<h3>Az adatbázisban szereplő felhasználók:</h3>";

     $eredm = mysql_query("SELECT * FROM user");

     while ( $sor = mysql_fetch_object($eredm) ){

         $id = $sor->id;

         $user = $sor->UName;

         print "$id. $user<br />";

     }

?>

</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 users1.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.

 

http://gorbem.hu/PH/users2.php

 

<?php

     include("hconfig.php");

     if ( isset($_POST['username']) && ($_POST['username'] !== '') ){

         $username = $_POST['username'];

         mysql_query("INSERT INTO user SET UName='$username' ");

     }

     mysql_close();

?>

<html>

<head>

<title>Felhasználók felvétele</title>

</head>

<body>

<form name="" action="SQLkapcs.htm" method="POST">

<input type="submit" name="vissza" value="Vissza" />

</form>

<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

     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 user");

     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>\n";

?>

</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.

 

http://gorbem.hu/PH/users3.php

 

<?php

     include("hconfig.php");

     if ( isset($_POST['username']) && ($_POST['username'] !== '') ){

         $username = $_POST['username'];

         mysql_query("INSERT INTO user SET UName='$username' ");

     }

     if ( isset($_POST['userdel']) ){

         $userid = $_POST['userid'];

         if ( ($userid !== 'valassz') && ($userid !== '1') ){

              mysql_query("DELETE FROM user WHERE id='$userid' ");

         }

     }

     mysql_close();

?>

<html>

<head>

<title>Felhasználók felvétele</title>

</head>

<body>

<form name="" action="SQLkapcs.htm" method="POST">

<input type="submit" name="vissza" value="Vissza" />

</form>

<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

     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 user");

     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>\n";

?>

</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.