Adatbázis-kezelés natív módon
Az adatbázis-kezelők használatához a PHP.INI-ben meg kell adni a megfelelő beállítást (vagy, mint például a MySQL-nél, eleve a támogatás a rendszer része), és programunkban használhatjuk az adatbázisra vonatkozó utasításokat.
A PHP az adatbázis-kezelésre általában az alábbi utasításfajtákat tartalmazza.
Az adatbázis-kezelő szerverrel kapcsolatot teremtő, a kapcsolatot lezáró parancsok
Az adatbázisokra vonatkozó lekérdező és adminisztrációs parancsok
Egy megnyitott adatbázisra vonatkozó adminisztrációs és lekérdező parancsok
Az SQL lekérdezéseket átküldő parancs
A lekérdezés eredményét feldolgozó parancsok.
A továbbiakban a MySQL utasításai alapján mutatom be az adatbázis-kezeléssel kapcsolatos utasításokat. Más adatbázis-kezelő esetén a változás általában csak annyi, hogy a névben az előtag más. Például:
<?php
mysql_connect() //MySQL adatbázis-kezelő esetén
pg_connect() //PostgresSQL
// a PHP5 esetén a mysql függvények helyett mysqli függvényeket kell használni.
?>
Kapcsolódás egy adatbázis-kezelőhöz, amely vagy lokális gépen helyezkedik el, vagy egy távoli, IP címmel meghatározott gépen. A kapcsolat létrehozása meg kell adni a kapcsolódási helyet (localhost, vagy IP cím), a kapcsolódó user-t, és a user jelszavát.
$link = mysql_connect(”localhost”,$username,$password);
//vagy
$link1 = mysql_connect(”127.0.0.1”,$username,$password);
vagy
$link = mysql_pconnect(”localhost”,$username,$password);
A fentiekhez egy kis magyarázat. A connect és pconnect között az a különbség, hogy a connect-tel megnyitott kapcsolat lezárul a kérdéses php oldal lefutása után, míg a pconnect kapcsolat nyitva marad (Persistent connection), és újbóli kapcsolódás során csak akkor kell egy viszonylag sokáig tartó kapcsolódási procedúrán átmennie a rendszernek, ha a kapcsolat nincsen nyitva. Egyébként a két függvény használata ugyanaz
A visszaadott érték a kapcsolat sorszáma. Ennek alapján lehet a továbbiakban azonosítani több megnyitott kapcsolat esetén, hogy éppen melyik kapcsolatot használjuk.
A kapcsolat bezárása:
mysql_close($link)
$link = mysql_connect ("127.0.0.1", "fz", "titok") or die ("Could not connect");
print ("Connected successfully");
mysql_close ($link);
Az adatbázis-kezelőn lévő adatbázisokra vonatkozó parancsok:
int mysql_list_dbs ([int link_identifier])
int mysql_create_db (string database name [, int link_identifier]) - adatbázis létrehozása
int mysql_drop_db (string database_name [, int link_identifier]) - adatbázis törlése
int mysql_select_db (string database_name [, int link_identifier]) - Lekérdezés adatbázison
<?php
$link = mysql_pconnect("127.0.0.1", "fz", "titok") or die ("Could not connect");
if (mysql_create_db ("my_db")) {
print ("Database created successfully\n");
} else {
printf ("Error creating database: %s\n", mysql_error ());
}
?>
Egy konkrét adatbázis tábláinak kilistázása
Egy adatbázis (lekérdezés) oszlopneveinek listázása. Ugyanez az utasítás a lekérdezés eredményének tetszőleges adatait is kilistázza ...
object mysql_fetch_field (int result [, int result_type])
Mezőnevek kiírása, és tárolása a mezonev tömbben
<?php
$con = mysql_connect("127.0.0.1", "fz", "titok");
$query = "SELECT * FROM tabla;";
$rs = mysql_db_query($con,$query);
$m = mysql_num_rows($rs);
$n = mysql_num_fields($rs);
for($i=0;$i<$n;$i++)
{
//Oszlopnév/mezőnév bemásolása tömbbe későbbi felhasználásra
$mezok = mysql_fetch_field($result);
$meznev[] = $mezok->name;
//Oszlop/Mező adatainak kilistázása.
echo "<PRE>
blob: $meta->blob
max_length: $meta->max_length
multiple_key: $meta->multiple_key
name: $meta->name
not_null: $meta->not_null
numeric: $meta->numeric
primary_key: $meta->primary_key
table: $meta->table
type: $meta->type
unique_key: $meta->unique_key
unsigned: $meta->unsigned
zerofill: $meta->zerofill
</PRE>";
}
mysql_close();
?>
Egy SQL parancs elküldése
resource mysql_query ( string query [, resource link_identifier])
Az adatbázis-kezelőnek adott SQL, vagy egyéb utasítás eredményének átvétele a pufferből. Az eredmény általában két dimenziós tömbbe vagy objektumba érkezik, amelyet vagy a tömbkezelő függvények segítségével lehet feldolgozni, vagy indexel és ciklussal végig kell szaladni rajta. A visszaadott paraméterről mindig meg tudjuk mondani, hogy hány sorból áll. Az alábbi függvény megadja az eredmény sorainak számát. Ha nincs eredmény sor, akkor az értéke 0.
int mysql_num_rows([resource link_identifier])
Ha Delete, Update utasítások eredményére vagyunk kiváncsiak, akkor az alábbi függvényt kell használnunk.
int mysql_affected_rows ( [resource link_identifier])
Egy sort ad vissza egy tömbbe az alábbi függvény. A tömb öt sorszámokkal lehet indexelni, a sorszámozás 0-val kezdődik. Akkor használhatjuk, ha egy lekérdezésről nem tudjuk előre, hogy hány sort ad majd vissza.
array mysql_fetch_row([resource link_identifier])
Ennél a függvénynél szükségünk lehet a visszaadott oszlopok számára is. Ezt az alábbi függvénnyel tudjuk meg:
int mysql_num_fields ( [resource result])
Ez a függvény a sort szintén egy tömbben adja vissza, de a tömbelemek sorszámozva és a mezőnévvel is, mint asszociatív tömb indexxel elérhetők.
array mysql_fetch_array([resource link_identifier)
Az alábbi példa elküld egy lekérdezést, az eredmény oszlopneveit lekérdezi, majd megjeleníti táblázatos formában.
int mysql_fetch_object([resource link_identifier])
Az alábbi példa elküld egy lekérdezést, az eredmény oszlopneveit lekérdezi, majd megjeleníti táblázatos formában.
<?php
$qry = ”SELECT * FROM tabla”;
$result = mysql_db_query($qry,$query);
$m = mysql_num_rows($result);
$n = mysql_num_fields($result);
echo ”<TABLE><TR>”;
for($i=0;$i<$n;$i++)
{
$mezok=mysql_fetch_field($result);
echo "<TD>".$mezok->name."</TD>";
$meznev[] = $mezok->name;
}
echo"</TR>"; // mezők kiírásának vége
// mezőkben lévő adatok kiírása
for($i=0;$i<$m;$i++)
{
echo "<TR>";
$adat=mysql_fetch_array($result);
for($j=0;$j<$n;$j++)
echo "<TD>".$adat[$meznev[$j]]."</TD>";
echo"</TR>";
}
echo ”</TABLE>”;
?>
Tipikus adatbázis-kezelési feladatok
Egy adatbázis-kezelő használata során az alábbi tipikusnak mondható feladatokat kell megoldani PHP-ban, (de hasonlóképpen más programozási nyelveken is).
Kapcsolódunk a szerveren lévő adatbázishoz.(láttunk mintát hozzá)
Elküldünk egy SQL lekérdezést az adatbázis-kezelő programnak (Láttunk mintát hozzá)
Az elküldött lekérdezésre kapott válasz általában egy táblázattal, vagy két-dimenziós tömbbel reprezentálható. Ezt szokás rekordszet-nek hívni. Egy ilyen rekordszetet megjelenítünk, célszerűen táblázatos formában. Ha a rekordszet túl sok sorból áll, akkor vagy a lekérdezéskor adunk olyan feltételeket, amely kevesebb sort ad eredményül, vagy megalkotjuk annak a lehetőségét, hogy a táblázat eredményét görgetni, vagy lapozni lehessen. (később általános mintát láttunk, az előző fejezetben bizonyos speciális eseteket néztünk)
A rekordszet egyes sorait „űrlap” formájában meg akarjuk jeleníteni (később látunk mintát a fejezetben)
Az űrlap vagy a rekordset eredményét ki akarjuk nyomtatni
Az adatbázisba új adatot akarunk bevinni.
Egy rekordszethez illeszkedő új sorral
Egy rekordszethez illeszkedő új sor-űrlap formájában bevitt adatokkal.
Minden adatbevitelnél valamilyen tipizálható ellenőrzési feladatot illik elvégezni, vagy a bevitt adatokat szintaktikailag és/vagy szemantikailag ellenőrizni illik.
Adatok bevitelekor vagy módosításkakor, amikor csak lehet az adatokat egy felkínált listából kelljen kiválasztani – a tévedések elkerülése miatt.
Adatok módosítása lehetőség szerint az új adat bevitelével azonos formátumban és módon történjen.
Egyes adatok, adatsorok, rekordok törlése, ellenőrzött módon.
Az adatok bevitele vagy módosítása során, hibás adatfelvitel miatti ismétléskor a korábban bevitt vagy meglévő adat jelenjen meg a beviteli űrlapon.
A fenti feladatokhoz az alábbi nem igazán PHP-ben megvalósított fogalmakat társíthatunk:
Az adatok táblázatos megjelenéséhez az alábbi séma szerint érdemes eljárni abban az esetben, ha két dimenziós táblázatban kapom meg az adatokat.
<?php
print( ”<table>”);
For($i=0;i<$maxsor;$i++){
Print(”<tr>”);
for( $j=0; $j < $maxoszlop; $j++ )
{
print ( "<td>" . adat[$i][$j]) . "</td>" );
}
print(”</tr>”);
}
print(”</table>”);
?>
Természetesen a táblázat formázását, a szegélyeket, stb… mindenki a saját ízlése szerint alkothatja meg.
Ha az adatokat soronként veszem át az adatbázis-kezelőtől, akkor a fenti algoritmus kicsit megváltozik. Azt is megmutatom a következő példában, ha lekérdezett rekordszetben nem az oszlopok sorszáma szerint veszem át az adatokat - bár ezt is mindig meg lehet tudni egy adott esetben - hanem a mezőnevekkel, asszociatív módon hivatkozom egy sorra. Erre az előző fejezetben láttunk példát.
<?php
//egyszerű rekord megjelenítése
$con = mysql_connect("127.0.0.1","fz","titok");
$result = mysql_db_query("teszt","SELECT * FROM tabla");
$sor = mysql_num_rows($result);
$n = mysql_num_fields($result);
print(”<table>”);
for($i=0;$i<$n;$i++)
{
print(”<tr>”);
//Oszlopnév/mezőnév bemásolása tömbbe későbbi felhasználásra
$mezok = mysql_fetch_field($result);
$meznev[] = $mezok->name;
//Oszlop/Mező adatainak kilistázása.
print(”<td align=right>”);
print($meznev[$i]); //A mező neve
print(”</td>”)
print(”<td>”);
print($sor[$meznev]); //A mező értéke
print(”</td>”)
print(”</tr>”);
}
print(”</table>”);
mysql_close();
?>
A fenti megjelenítés még elemi módon sem alkalmas új adatok bevitelére, hiszen új adatokat WEB böngésző esetén csakis FORM-okon keresztül vihetünk fel. Mindezek mellett meg kell oldanunk a mezők ellenőrzését is. Ennek megfelelően módosítanunk kell a fenti megoldást kissé. A példáról annyit, hogy egy űrlap jelenik meg, amely a megjeleníti a mezőket egy INPUT HTML tag segítségével, amivel az értéket rögtön módosítani is lehet. A bevitt adatokat minden mező esetén a böngésző javascript kódja rögtön ellenőrzi is (Hogy egyáltalán ki van-e töltve). Ha nincsen kitöltve, akkor hibaüzenet érkezik.
<!Doctype HTML>
<HTML>
<HEAD>
</HEAD>
<SCRIPT LANGUAGE="JavaScript">
function elenoriz()
{
var k=document.form1.text.value;
if (k.length<1){
alert("Nincs kitöltve az adat!!");
return false;
} else{
return true;
}
}
</SCRIPT>
<BODY>
<?php
//egyszerű rekord megjelenítése
$con = mysql_connect("127.0.0.1", "fz", "titok");
mysql_select_db("teszt",$con);
$rs = mysql_db_query($querydb,$query);
$sor = mysql_num_rows($rs);
$n = mysql_num_fields($rs);
print('<FORM name=”form1” ACTION=urlap.php method="get" '>
print(”<table>”);
for( $i=0;$i<$n;$i++ )
{
print(”<tr>”);
//Oszlopnév/mezőnév bemásolása tömbbe későbbi felhasználásra
$mezok=mysql_fetch_field($rs);
$meznev[]=$mezok->name;
//Oszlop/Mező adatainak kilistázása.
print(”<td align=right>”);
print($meznev[$i]); //A mező neve
print(”</td>”);
print(”<td>”);
print('<INPUT name=”'.$meznev[$i].'” type="text" value=”'.$sor[$meznev].'\”
onchange=”javascript:ellenoriz('.$meznev[$i].')”>');
print($sor[$meznev]); //A mező értéke
print(”</td>”)
print(”</tr>”);
}
print(”<tr>”);
print(”<td>”);
print('<INPUT name="OK" type="submit" value="Ok">');
print('<INPUT name="Törlés" type="reset" value="Mégse">');
print('</td>')
print('<td>');
print('</td>');
print(”</tr>”);
print(”</table>”);
mysql_close();
?>
</BODY>
</HTML>
Adatbázis hibakezelés
A MySQL szerver a lekérdezések során hibakódot és szöveges üzenetet is küld vissza a kliensnek. A hibák kezelésére az alábbi függvények használhatók:
string mysql_error ([int link_identifier])
A MySQL szerver által visszaadott hiba szövegesen
int mysql_errno ([int link_identifier])
A MySQL szerver által visszaadott hiba kódja.
<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nincsadatbazis");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nincsadattabla");
echo mysql_errno().": ".mysql_error()."<BR>";
?>
A fenti lehetőségek csak a MySQL-re vonatkoznak, de hasonlóan lehet használni őket más adatbázisok esetén is.
mysqli adatbázis kezelő PHP-ban
A PHP 5.3.0-tól a hagyományos mysql függvények nem javasoltak és a PHP 7.0.0-tól pedig kivették a PHP-ból. Innentől kezdve a mysqli változatot kötelező használni. Ennek alapvető szabálya az, hogy OOP stílusban kell programozni.
Itt található példa a mysqli függvények használatára
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// Kapcsolat létrehozása
$conn = mysqli_connect($servername, $username, $password);
// Kapcsolat ellenőrzése
if (!$conn) {
die("Hibás kapcsolódás: " . mysqli_connect_error());
}
echo "Sikeres kapcsolódás";
...
...
...
...
//Adatbázis kapcsolat zárása
mysqli_close();
?>
A mysqli driver használata szinte ugyanaz, mint az eredeti mysql használata, de a modernebb drivert lehet OOP módon is használni.
MySQL használata PDO drivereken keresztül
A MYSQL-nek és egyéb adatbázis kezelőknek az egyik tipikus problémája az, hogyha egy FORM adatait átküldjük és a szerver oldalon abból SQL utasítást készítünk, akkor nagy biztonsági rést ütünk a rendszerünkön, mert megfelelően preparált lekérdezésekkel nagyon sok kárt lehet okozni. Ezt hívják SQL injection-nak.
A PDO driverek - mindegyik adatbázis kezelőnek van saját drivere - ezen a problémán segítenek.
A PDO driverek egységes felületet hoznak létre a különböző adatbázis-kezelőkhöz, ezért a programozóknak a dolga egyszerűsödik. A másik előnye ennek a megoldásnak az, hogy a PDO driverekbe a bemenő adatok tisztítása is be van építve így csökkentve az SQL injection problémák lehetőségét.
Az alábbiakban a tipikus felhasználási módokat adom meg.
Kapcsolódás adatbázishoz
$host = '127.0.0.1';
$db = 'test';
$user = 'root';
$pass = '';
$port = "3306";
$charset = 'utf8mb4';
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false,
];
//Kapcsolat: szerver ip cím adatbázis neve karakterkészlet port
$dsn = "mysql:host=$host;dbname=$db;charset=$charset;port=$port";
try {
$pdo = new \PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
Egy létrehozott kapcsolat használata lekérdezéshez. Meghívjuk az alábbi függvényt a fent létrehozott PDO driver azonosítóval, és a lekérdezendő sor ID-jével. A függvény visszaadja a lekérdezett sor adatait
function getData($pdo, $id){
$qry = $pdo->prepare("SELECT * FROM user WHERE id=?");
$qry->execute([$id]);
return $qry->fetch();
}
Adatok lekérdezése
Lekérdezés paraméterek nélkül
// minden sor lekérdezése
$qry = $pdo->query("SELECT * FROM users");
Egy sor lekérdezése egy táblából
// Az utoljára regisztrált felhasználó lekérdezése
$qry = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 1");
$user = $qry->fetch();
A PHP az objektum orientált programozás használata során képes láncolni a metódusokat is az alábbi módon.
// Az utoljára regisztrált felhasználó lekérdezése
$user = $pdo->query("SELECT * FROM users ORDER BY id DESC LIMIT 1")->fetch();
Egy tábla összes sorának lekérdezése.
// Az utoljára regisztrált felhasználó lekérdezése
$qry = $pdo->query("SELECT * FROM users");
while ($row = $qry->fetch()) {
echo $row['name']."<br />\n";
}
A while ciklus addig fut, amíg az összes sor adatait fel nem dolgozza.
Ugyanezt egy kicsit gyorsabban és egyszerűbben is meg lehet csinálni. A fetchAll() metódus gyorsabb, mint külön-külön lekérdezni a sorokat.
$data = $pdo->query("SELECT * FROM users")->fetchAll();
// és később ilyet futtatunk le
foreach ($data as $row) {
echo $row['name']."<br />\n";
}
Lekérdezés paraméterezetten. ebben a megoldásban a ? karakter jelzi a behelyettesítendő string helyét. Ahány kérdőjel (?), annyi paramétert vár az execute() metódus tömbben. Ez nem túl szerencsés, mert hibakezelés esetén a kérdőjelek kicsit áttekinthetetlenné tehetik a kódot.
//egy Id-vel valéó kiválasztás
$qry = $pdo->prepare("SELECT * FROM users WHERE id=?");
$qry->execute([$id]);
$user = $qry->fetch();
Egy helyörzővel végrehajtott lekérdezés. A nevesített helyörző jobb megoldás.
//egy helyörzővel valóó kiválasztás
$qry = $pdo->prepare("SELECT * FROM users WHERE id=:id");
$qry->execute( ['id' => $id] );
$user = $qry->fetch();
Több paraméter átadása a lekérdezésnek. Ha több átadandó paraméter van, akkor a nevesített helyörzők használata a célszerűbb.
$qry = $pdo->prepare("SELECT * FROM users LIMIT :limit, :offset");
$qry->execute(['limit' => $limit, 'offset' => $offset]);
$data = $qry->fetchAll();
// később pedig ezt hívjuk:
foreach ($data as $row) {
echo $row['name']."<br />\n";
}
Új adatok felvitele (INSERT)
$sql = "INSERT INTO users (name, surname, sex) VALUES (?,?,?)";
$qry= $pdo->prepare($sql);
$qry->execute([$name, $surname, $sex]);
Vagy a lekérdezések láncolásával
$sql = "INSERT INTO users (name, surname, sex) VALUES (?,?,?)";
$pdo->prepare($sql)->execute([$name, $surname, $sex]);
Adatok felvitele nevesített helyörzővel
$data = [
'name' => $name,
'surname' => $surname,
'sex' => $sex,
];
$sql = "INSERT INTO users (name, surname, sex) VALUES (:name, :surname, :sex)";
$pdo->prepare($sql)->execute($data);
Adatok módosítása (UPDATE).
$data = [
'name' => $name,
'surname' => $surname,
'sex' => $sex,
'id' => $id,
];
$sql = "UPDATE users SET name=:name, surname=:surname, sex=:sex WHERE id=:id";
$qry= $pdo->prepare($sql);
$qry->execute($data);
Adatok törlése (DELETE FROM...)
$data = [ 'id' => $id ];
$sql = "DELET FROM users WHERE id=:id";
$qry= $pdo->prepare($sql);
$qry->execute($data);
------------
<?php
session_start();
$jelszo = "titok123"; // Itt adhatja meg a kívánt jelszót
if (isset($_POST['password']) && $_POST['password'] === $jelszo) {
$_SESSION['belepve'] = true;
}
if (isset($_GET['kijelentkezes'])) {
session_destroy();
header("Location: index.php");
exit;
}
?>
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<title>Belépés</title>
</head>
<body>
<?php if (empty($_SESSION['belepve'])): ?>
<!-- Bejelentkező űrlap -->
<form method="POST">
<input type="password" name="password" placeholder="Jelszó" required>
<button type="submit">Belépés</button>
</form>
<?php else: ?>
<!-- Védett tartalom -->
<h1>Sikeres belépés!</h1>
<p>Ez a szöveg csak bejelentkezés után látható.</p>
<a href="?kijelentkezes=1">Kijelentkezés</a>
<?php endif; ?>
</body>
</html>
----------------------
<form action="auth.php" method="POST">
<div>
<label for="username">Felhasználónév:</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Jelszó:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Belépés</button>
</form>
-------------
<?php
session_start();
// Példa statikus ellenőrzésre (élesben adatbázisból/hash-ből olvasd!)
$helyes_user = "admin";
$helyes_pass = "titok123";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$user = trim($_POST["username"] ?? "");
$pass = $_POST["password"] ?? "";
if ($user === $helyes_user && $pass === $helyes_pass) {
$_SESSION["belepve"] = true;
$_SESSION["user"] = $user;
header("Location: vedett_oldal.php");
exit;
} else {
echo "Hibás felhasználónév vagy jelszó!";
}
}
----------------
<?php
session_start();
if (!isset($_SESSION["belepve"]) || $_SESSION["belepve"] !== true) {
header("Location: login.php");
exit;
}
echo "Üdvözöllek, " . htmlspecialchars($_SESSION["user"]) . "!";
--------------
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user = $_POST['username'];
$pass = password_hash($_POST['password'], PASSWORD_DEFAULT); // Biztonságos jelszó titkosítás
if (!empty($user) && !empty($_POST['password'])) {
// Elmentjük a felhasználónevet és a titkosított jelszót a users.txt fájlba
file_put_contents('users.txt', $user . ":" . $pass . PHP_EOL, FILE_APPEND);
echo "Sikeres regisztráció!";
} else {
echo "Minden mezőt ki kell tölteni!";
}
}
?>
<form method="post">
<input type="text" name="username" placeholder="Felhasználónév" required><br>
<input type="password" name="password" placeholder="Jelszó" required><br>
<button type="submit">Regisztráció</button>
</form>
----------------
<?php
// 1. Kapcsolódás az adatbázishoz
$host = 'localhost';
$db = 'adatbazis_neve';
$user = 'felhasznalonev';
$pass = 'jelszo';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new PDO($dsn, $user, $pass);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// 2. Keresendő kifejezés (pl. egy keresőmezőből érkezik)
$keresett_szo = "példa termék";
// 3. A kereső SQL lekérdezés előkészítése (biztonságos forma)
$sql = "SELECT * FROM termekek WHERE termek_neve LIKE :kereses";
$stmt = $pdo->prepare($sql);
// 4. Lekérdezés futtatása a paraméterrel
$stmt->execute(['kereses' => '%' . $keresett_szo . '%']);
// 5. Találatok kilistázása
$talalatok = $stmt->fetchAll();
foreach ($talalatok as $sor) {
echo $sor['termek_neve'] . "<br>";
}
?>
--------------
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$felhasznalo = trim($_POST['user']);
$jelszo = password_hash($_POST['pass'], PASSWORD_BCRYPT);
$szerep = ($felhasznalo === 'admin') ? 'admin' : 'user';
if (!empty($felhasznalo) && !empty($_POST['pass'])) {
$sor = $felhasznalo . ";" . $jelszo . ";" . $szerep . "\n";
file_put_contents('felhasznalok.txt', $sor, FILE_APPEND);
echo "Sikeres regisztráció! <a href='login.php'>Bejelentkezés</a>";
} else {
echo "Minden mezőt tölts ki!";
}
}
?>
<form method="POST">
<h2>Regisztráció</h2>
<input type="text" name="user" placeholder="Felhasználónév" required><br><br>
<input type="password" name="pass" placeholder="Jelszó" required><br><br>
<button type="submit">Regisztráció</button>
</form>
-------------
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$be_user = trim($_POST['user']);
$be_pass = $_POST['pass'];
$siker = false;
if (file_exists('felhasznalok.txt')) {
$fajl = file('felhasznalok.txt', FILE_IGNORE_NEW_LINES);
foreach ($fajl as $sor) {
list($user, $pass, $szerep) = explode(';', $sor);
if ($user === $be_user && password_verify($be_pass, $pass)) {
$_SESSION['user'] = $user;
$_SESSION['role'] = $szerep;
$siker = true;
header("Location: admin.php");
exit;
}
}
}
echo $siker ? "" : "Hibás felhasználónév vagy jelszó!";
}
?>
<form method="POST">
<h2>Bejelentkezés</h2>
<input type="text" name="user" placeholder="Felhasználónév" required><br><br>
<input type="password" name="pass" placeholder="Jelszó" required><br><br>
<button type="submit">Belépés</button>
</form>
--------------
<?php
session_start();
// Ellenőrzés: be van-e lépve és admin-e?
if (!isset($_SESSION['user']) || $_SESSION['role'] !== 'admin') {
echo "Hozzáférés megtagadva! Csak adminisztrátorok léphetnek be. <a href='login.php'>Bejelentkezés</a>";
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Admin Panel</title>
</head>
<body>
<h1>Üdvözöllek a titkos Admin Felületen, <?php echo htmlspecialchars($_SESSION['user']); ?>!</h1>
<p>Itt különböző adminisztrációs feladatokat láthatsz el.</p>
<br>
<a href="logout.php">Kijelentkezés (Exit)</a>
</body>
</html>
---------------
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>
-------------
Nincsenek megjegyzések:
Megjegyzés küldése