[[oktatas:programozás:php:php_azonositas|< PHP azonosítás]] ====== PHP alapú azonosítás MySQL adatbázisból ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2014, 2019 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== Bevezetés ===== Azonosítást többféle képen megvalósíthatunk. Csak PHP alapokon. PHP és Ajax-al keverve. Mi most szimplán PHP alapon fogjuk megvalósítani. ===== Mire van szükségünk ===== Az azonosításhoz szükségünk van egy adatbázisra, ahol a jelszavakat tároljuk. Lehetne ez éppen egy szimpla állomány is, de az a korrekt, ha adatbázis-kezelőn keresztül érjük el. Az adatbázisnak a MySQL adatbázis-kezelőt fogjuk használni, mivel ez a legelterjedtebb. Bár ha valaki az újabb népszerű MariaDB adatbázis-kezelőt használja abban is megvalósítható ugyanígy. Szükségünk lesz egy olyan felületre ahol felvesszük a felhasználókat és egy olyanra, ahol maga a bejelentkezés történik. A fentiek mellé készíthetünk egy főoldalt, amely megjelenik a belépés előtt, és egy védett oldalt, amely a belépés után jelenik csak meg. Szükséges lenne a védett oldal védelmére is, ezt session kezeléssel oldjuk meg. ===== Szervezés ===== A következő állományokkal fogunk dolgozni projekt01 |--css/ | `--style.css |--templates/ | |--admin.tpl | |--foot.tpl | |--head.tpl | |--index.tpl | |--login.tpl | `--vedett.tpl |--add.php |--admin.php |--auth.php |--config.php |--db.php |--fg.php |--index.php |--login.php |--logout.php `--vedett.php ===== Konfigurációs fájl létrehozása ===== Készítünk egy konfigurációs állományt, hogy a weboldalunk beállításait csak egy helyen kelljen megadni. A konfigurációs állományban asszociatív tömböket használunk, ami persze nem kötelező, de átláthatóbbá teszi azt. A példánkban látjuk mely beállítások tartoznak az adatbázishoz, melyek a webhely beállításai. ===== Segédfüggvények létrehozása ===== Az fg.php fájlban újrahasznosítható függvénygyűjteményeinket helyeztük el. ===== Kezdőoldal létrehozása ===== {$website["title"]}"; echo file_get_contents("{$website["templatesPath"]}/index.tpl"); htmlFoot(); ===== Adatbázis létrehozása ===== A zoldzrt.sql állomány csak egy mentés az adatbázisról. -- phpMyAdmin SQL Dump -- version 3.5.8.1deb1 -- http://www.phpmyadmin.net -- -- Hoszt: localhost -- Létrehozás ideje: 2014. Feb 11. 23:48 -- Szerver verzió: 5.5.34-0ubuntu0.13.04.1 -- PHP verzió: 5.4.9-4ubuntu2.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Adatbázis: `zoldzrt` -- -- -------------------------------------------------------- -- -- Tábla szerkezet ehhez a táblához `users` -- CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `fullname` varchar(100) COLLATE utf8_hungarian_ci NOT NULL, `user` varchar(50) COLLATE utf8_hungarian_ci NOT NULL, `pass` varchar(512) COLLATE utf8_hungarian_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT=15 ; -- -- A tábla adatainak kiíratása `users` -- INSERT INTO `users` (`id`, `fullname`, `user`, `pass`) VALUES (12, 'Teszt József', 'joska', '99aed78d829f9cdb92965b9376be888c2ebde71d3fecb07ca828ce1c61b28582a95822dd5e398c8b16a3301021798fdaa7c48de4e996cbdd1365d4f64d6b3f41'), (14, 'Teszt Mária', 'mari', '99aed78d829f9cdb92965b9376be888c2ebde71d3fecb07ca828ce1c61b28582a95822dd5e398c8b16a3301021798fdaa7c48de4e996cbdd1365d4f64d6b3f41'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; ===== Adatbázis-kezelő függvények ===== 0){ return true; } else { return false; } } function connect(){ global $db; $conn = mysqli_connect($db["host"], $db["user"], $db["pass"], $db["name"]); mysqli_set_charset($conn, $db["charset"]); if(mysqli_connect_errno()){ slog("Nem tudok kapcsolódni az adatbázishoz!"); die("Nem tudok kapcsolódni az adatbázishoz!" . mysql_error()); } return $conn; } function addUser($conn, $data){ $cryptedPass = scrypt($data['pass']); $sql = "insert into users (fullname, user, pass) values (\"{$data['fullname']}\", \"{$data['user']}\", \"$cryptedPass\")"; $res = mysqli_query($conn, $sql); //slog($res); if($res == "1"){ return true; } else { return false; } } function close($conn){ mysqli_close($conn); } ===== Regisztrációs felület létrehozása ===== {$website["title"]}"; echo file_get_contents("{$website["templatesPath"]}/admin.tpl"); htmlFoot(); "; echo "Vissza"; } else { $data['fullname'] = $_POST['fullname']; $data['user'] = $_POST['user']; $data['pass'] = $_POST['pass']; $data['passagain'] = $_POST['passagain']; if($data['pass'] == $data['passagain']){ $con = connect(); if(!existUser($con, $data['user'])){ if(addUser($con, $data)){ echo "A felhasználót sikeresen felvettük."; echo "Adminoldal"; } else { echo "Hiba! A felhasználó felvétele sikertelen!"; } } else { echo "Már van ilyen felhasználó!
"; echo "Vissza"; } close($con); } else { echo "A jelszó nem egyezik!
"; echo "Vissza a regisztrációhoz"; } } htmlFoot();
===== Beléptető felület létrehozása ===== {$website['title']}"; echo file_get_contents("{$website["templatesPath"]}/login.tpl"); htmlFoot(); Hiba! Sikertelen azonosítás!"; echo "Vissza"; } close($con); } else { echo "Hiányzó adat"; } htmlFoot(); ===== Védett felület létrehozása ===== Vegyük észre a védett oldalon a session kezelést. Megnézzük, hogy be van-e állítva egy sesssion. Ha igen, akkor az oldal megnézhető. ===== Kiléptetés ===== ===== Nézetek =====
Felhasználó felvétele



$title
Bejelentkezés

Védett oldal

===== Stílus ===== Egyszerű menü. #content { margin: 2% 10%; background-color: orange; padding: 15px; border-radius: 15px; box-shadow: 15px 15px 15px red; } #adminbox form fieldset label, #loginbox form fieldset label { display: inline-block; width: 110px; } #menu ul { list-style-type: none; } #menu ul li { display: inline-block; background-color: #F8CD1D; padding: 3px; } #menu ul li:hover { display: inline-block; background-color: #55E41B; padding: 3px; } #menu ul li a { text-decoration: none; } ===== Letöltés ===== Figyelem! Ez a link elavult! * http://szit.hu/download/peldak/php/swauth.zip