Login rendszer készítése adminnal PHP-ban
Beléptető rendszer készítés. Összesen 7 fájlt fogunk létrehozni:
login.php
login_form.php
home.php
register.php
reg_form.php
config.php
admin.php
1.lépés - Adatbázis
Első lépésként létre kell hoznunk egy adatbázist a tagoknak.
A jelszavakat kódolva tároljuk a biztonság kedvéért!
users táblába lesz egy id,nickname,password,rank,email,bans,regip,regtime mező.
id - felhasználó azonosítszáma.
nickname - felhasználó neve.
password - felhasználó jelszava, md5 kódolásban.
rank - felhasználó rangja.
email-felhasználó e-mail címe.
bans - ha az értéke 1 a felhasználó tíltva lesz.
regip - A felhasználó ip címe.
regtime - regisztráció dátuma.
Ezt létrehozhatjuk phpmyadminnal, méghozzá a következő kóddal:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL,
`rank` int(20) NOT NULL DEFAULT '1',
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL,
`bans` int(20) unsigned NOT NULL DEFAULT '0',
`regtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`regip` varchar(255) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
-Ezt a kódot mentsük ki egy .sql, .txt fájlba, és importáljuk, vagy közvetlenül a phpMyadmin felületén található "SQL" fülbe illeszük be.
2.Lépés - kapcsolódás adatbázishoz, config.php fájl készítése.
Most létre kell hoznunk egy fájlt amiben kapcsolódunk az adatbázisunkhoz.
config.php:
//Config ---Kapcsolódás mysql-hez----
mysql_connect("localhost","Adatbázis szerver","Jelszó"); //kapcsolódási adatok
mysql_query("SET NAMES utf8 COLLATE utf8_hungarian_ci");//karakterkódolás kiválasztása
mysql_select_db("Adatbázis neve");
print mysql_error(); //ha hiba van kiírja
A továbbiakban ezt a fájlt behívjuk mindenhova include() segítségével.
3.Lépés - regisztrációs űrlap, regisztráció feldolgozása.
Az űrlap így nézzen ki:
form.php
<form id="register" method="post" action="" onsubmit="return check()">
<table align="center" width="60%">
<tbody>
<tr>
<td class="" ><font color="black">Nick:</td>
<td width=""><input id="name" class="text" name="nickname" style="" type="text"></td>
</tr>
<tr>
<td class="" valign="top"><font color="black">Jelszó:</td>
<td><input class="text" id="pass1" name="pass1" style="" type="password"></td>
</tr>
<tr>
<td class="" valign="top"><font color="black">Jelszó mégegyszer:</td>
<td><input class="text" id="pass2" name="pass2" style="" type="password"></td>
</tr>
<tr>
<td><font color="black">E-mail cím:</td>
<td><input class="text" id="email" name="email" style=""></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="regisztracio" class="buttons" value="Regisztráció" type="submit">
</td>
</tr>
</tbody>
</table>
</form>
Ezt a form.php-t hívjuk be a register.php-be, include() segítségével.
register.php
Ez a rész ellenőrzi a regisztrációt, feldolgozza, és ha jók az adatok adatbázisba küldi.
Feltételek:
-A felhasználónév max 25 karakter hosszú lehet
-Nem lehet üres a nick, és a jelszó mező
-A jelszónak min. 5 karakter hosszúnak kell lennie
-A két jelszónak egyeznie kell
ob_start(); session_start();
include("config.php");
if(isset($_POST['regisztracio']))
{
unset($reg_result);
if(mb_strlen($_POST['nickname'])>25)
$reg_result = ' Túl hosszú nick!(Max 25 karakter lehet!)
<input name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
elseif($_POST['nickname']=="")
$reg_result = 'Üres Nick mező!
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
elseif($_POST['pass1']=="")
$reg_result = 'Üres Jelszó mező!
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
elseif($_POST['pass1']!=$_POST['pass2'])
$reg_result = 'A két Jelszó mező különbözik!
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
elseif(mb_strlen($_POST['pass1'])<5)
$reg_result = 'Túl rövid a jelszó! (min 5 karakter lehet)
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
elseif($_POST['email']=="")
$reg_result = ' Üres e-mail mező!
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
else
{
$nick_prot = trim( $_POST['nickname'] );
$nick_prot = mysql_escape_string($nick_prot);
$sql_result = mysql_query("SELECT id FROM users WHERE nickname='$nick_prot'");
if(mysql_errno())
$reg_result = "Adatbázis hiba [1] miatt a regisztráció sikertelen!";
if(@mysql_num_rows($sql_result))
$reg_result = ' Már regisztráltak ezzel a nick névvel!
<input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
@mysql_free_result($sql_result);
}
if(!isset($reg_result))
{
mysql_query("INSERT INTO users (nickname,password,email,regip,regtime) VALUES ('$nick_prot', '".md5($_POST['pass1'])."', '".mysql_real_escape_string($_POST['email'])."','".$_SERVER['REMOTE_ADDR']."',NOW())");
if(mysql_errno())
$reg_result = "Adatbázis hiba [2] miatt a regisztráció sikertelen!";
print mysql_error();
}
}
header("Content-Type: text/html; charset=utf-8"); // html tartalom utf8 kódolás
header("Cache-Control: no-cache, no-store, must-revalidate, post-check=0, pre-check=0"); // nincs cache, mindig frissítsen
if(!isset($_POST['regisztracio']))
{
// regisztsációs form megjeleníse
include('form.php');
}
elseif(isset($_POST['regisztracio']))
{
// regisztráció eredménye
if(isset($reg_result))
// valami hiba van
print("$reg_result");
else {
// siker :-)
print('Sikeres regisztráció!');
}
}
mysql_close();
Ezzel a regisztráció kész is lenne.
4.Lépés - Beléptetés
Most jön a beléptetőrendszer:
Hozzunk létre egy login.php-t aminek tartalmaznia kell egy bejelentkező űrlapot, és egy feldolgozó részt.
Az űrlap:
login_form.php
<form action="" method="post"> <table>
<tr>
<td>Felhasználónév:</td>
<td>
<input name="nickname" type="text">
</td>
</tr>
<tr>
<td>Jelszó:</td>
<td>
<input name="password" type="password">
</td>
</tr>
</table>
<input value="Belépés" name="login" type="submit">
<a href="register.php">Nincs még felhasználóneved?</a>
</form>
És php feldolgozó rész:
ob_start();
session_start();
include('config.php');
include('login_form.php');
if(isset($_POST["login"])){
//Bejelentkezés
$nickname = $_POST["nickname"]; //Név
$password = md5($_POST["password"]); //Jelszó
$lekerdezes = mysql_query("SELECT * FROM users WHERE nickname = '".mysql_real_escape_string($nickname)."' AND password = '$password'"); //Megnézi jók-e az adatok
$vanelekerdezes = mysql_num_rows($lekerdezes);
if ($vanelekerdezes>0)//Ha van ilyen felhasználónév/jelszó páros
{
header('location: login.php'); //Ha sikerült belépni, a login.php-ra irányít
$adatok=mysql_fetch_assoc($lekerdezes); //SESSION-ba rendezi az adatokat
$_SESSION["id"]=$adatok["id"];
$_SESSION['bann'] = 0;
$_SESSION["nickname"]=$adatok["nickname"];
$_SESSION["rank"]=$adatok["rank"];
}
else
{
print 'Hibás felhasználónév vagy jelszó!'; //Ha nem jók a beírt adatok hiba
print mysql_error(); //ha esetleg adatbázis hiba van akkor kiírja
}
} else if(isset($_SESSION["nickname"])){ //Ha sikerült belépni a belső tartalom
print 'Üdv, '.$_SESSION['nickname'].''; //belépett falhasználó, ha kiírja a nevét akkor működik
Tegyük fel, hogy az adatbázisodban van minden felhasználónál egy rank mező, aminek az alapértelmezett értéke 1, az 1-es rang jelöli a sima felhasználót. Ha a mezőben 2-es van legyen mondjuk moderátor vagy akármi lehet, ha 3-ad akkor admin.
Védett részt a következőkben úgy tudsz létrehozni, hogy:
if( isset( $_SESSION["rank"] ) && $_SESSION["rank"] >= 3 ){ //védett tartalom }
Most hozzuk létre a home.php-t
home.php
ob_start()
session_start();
print('<meta http-equiv="content-type" content="text/html; charset=UTF-8" />');
include('config.php');
if(isset($_SESSION['rank']) && $_SESSION['rank'] >= 1)
{
print('Üdv, '.$_SESSION['nickname'].'<br> ezt csak a belépett felhasználók látják!<be><a href="?act=exit">kilépés</a>');
if(isset($_GET['act']) && $_GET['act'] == 'exit')
{
session_destroy(); //törli az összes sessiont
header('location: login.php');
exit();
}
} else print('Hozzáférés megtagadva!');
Ebben az esetben a tartalmat csak adminok láthatják, de ha átírod a 3-at 1-re akkor csak a belépett felhasználók fogják látni.
Ez a rész teljes fájlban így néz ki(még műveletek nélkül):
ob_start();
session_start();
if( isset( $_SESSION["rank"] ) && $_SESSION["rank"] >= 2 ){
//védett rész
} else print('Hozzáférés megtagadva!');
az ob_start() és a session_start() mindig kell a fájl elejére!
És végűl az admin rész.
Az admin részben kitílthatjuk a felhasználót, admin rangot adhatunk/vehetünk, és törölhetjük a felhasználókat.
Ezt a részt igen egyszerűen megcsinálhatjuk, a műveleteket $_GET[]-el kérjük le.
admin.php
ob_start();
session_start();
print('<meta http-equiv="content-type" content="text/html; charset=UTF-8" />');
include('config.php');
if(isset($_SESSION['rank']) && $_SESSION['rank'] == 3)
{
?>
<a href="home.php">főoldal</a>
<table width="100%">
<tr>
<td>Nick</td>
<td>Rang</td>
<td>E-mail</td>
<td>IP</td>
<td>Regisztrált</td>
<td>Műveletek</td>
</tr>
<?
$sql="SELECT * FROM users";
$qry=mysql_query($sql);
while($u=mysql_fetch_assoc($qry))
{
switch($u['bans'])
{
case 0:
$action='<a href="?act=bann&id='.$u['id'].'">Bann</a>';
break;
case 1:
$action='<a href="?act=unbann&id='.$u['id'].'">Feloldás</a>';
break;
}
switch($u['rank'])
{
case 1:
$user_rank='tag';
$rank_action='<a href="?act=admin_add&id='.$u['id'].'">Admin adása</a>';
break;
case 3:
$user_rank='<font color="red">admin</font>';
$rank_action='<a href="?act=admin_del&id='.$u['id'].'">Admin vétele</a>';
break;
}
?>
<tr>
<td><?= $u['nickname']; ?></td>
<td><?= $user_rank; ?></td>
<td><?= $u['email']; ?></td>
<td><?= $u['regip']; ?></td>
<td><?= $u['regtime']; ?></td>
<td><?= $action; ?> | <?= $rank_action; ?> | <a href="?act=del&id=<?= $u['id']; ?>">Törlés</a></td>
</tr>
<? } ?>
</table>
<?
//felhasználó kitíltása
if(isset($_GET['act']) && $_GET['act'] =='bann')
{
mysql_query('UPDATE users SET bans=1 WHERE id="'.$_GET['id'].'"');
print('A felhasználó kitíltva!<br><a href="admin.php">frissít</a>');
}
?>
<?
//felhasználó feloldása
if(isset($_GET['act']) && $_GET['act'] =='unbann')
{
mysql_query('UPDATE users SET bans=0 WHERE id="'.$_GET['id'].'"');
print('A felhasználó újra beléphet<br><a href="admin.php">frissít</a>');
}
?>
<?
//admin rang adása
if(isset($_GET['act']) && $_GET['act'] =='admin_add')
{
mysql_query('UPDATE users SET rank=3 WHERE id="'.$_GET['id'].'"');
print('A felhasználó admin rangot kapott!<br><a href="admin.php">frissít</a>');
}
?>
<?
//admin rang elvétele
if(isset($_GET['act']) && $_GET['act'] =='admin_del')
{
mysql_query('UPDATE users SET rank=1 WHERE id="'.$_GET['id'].'"');
print('A felhasználó adminja megvonva!<br><a href="admin.php">frissít</a>');
}
?>
<?
//felhasználó törlése
if(isset($_GET['act']) && $_GET['act'] =='del')
{
mysql_query('DELETE FROM users WHERE id="'.$_GET['id'].'"');
print('A felhasználó törölve!<br><a href="admin.php">frissít</a>');
}
} else print('Hozzáférés megtagadva!');
Másik módszer
<?php
session_start();
// Adatbázis kapcsolódás
$servername = "localhost";
$username = "felhasznalonev";
$password = "jelszo";
$dbname = "adatbazis_nev";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Sikertelen kapcsolódás az adatbázishoz: " . $conn->connect_error);
}
// Regisztráció
if (isset($_POST['signup'])) {
$email = $_POST['email'];
$password = md5($_POST['password']);
$sql = "INSERT INTO users (email, password) VALUES ('$email', '$password')";
if ($conn->query($sql) === TRUE) {
echo "Sikeres regisztráció!";
} else {
echo "Hiba történt a regisztráció során: " . $conn->error;
}
}
// Bejelentkezés
if (isset($_POST['login'])) {
$email = $_POST['email'];
$password = md5($_POST['password']);
$sql = "SELECT * FROM users WHERE email='$email' AND password='$password'";
$result = $conn->query($sql);
if ($result->num_rows == 1) {
$_SESSION['email'] = $email;
header("Location: welcome.php");
} else {
echo "Hibás email cím vagy jelszó!";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Regisztráció és bejelentkezés</title>
</head>
<body>
<h2>Regisztráció</h2>
<form method="post">
<input type="email" name="email" placeholder="Email cím" required>
<input type="password" name="password" placeholder="Jelszó" required>
<button type="submit" name="signup">Regisztráció</button>
</form>
<h2>Bejelentkezés</h2>
<form method="post">
<input type="email" name="email" placeholder="Email cím" required>
<input type="password" name="password" placeholder="Jelszó" required>
<button type="submit" name="login">Bejelentkezés</button>
</form>
</body>
</html>
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
<!DOCTYPE
----------------------
https://phpmuhely.hu/muhely/segedletek/olvas/login-rendszer-keszitese-adminnal
------------------------------
Welcone.php
<?php
session_start();
if (!isset($_SESSION['email'])) {
header("Location: index.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome,
}
}
<!DOCTYPE<?php echo $_SESSION['email']; ?></h1>
<a href="logout.php">Kijelentkezés</a>
</body>
</html>
ezeket hozz létre egylogout.phpfájlt, amely a következő kódot tartalmazza:
----------------------------------
Logout.php
<?php
session_start();
session_destroy();
header("Location: index.php");
?>
-----------------------------
Nincsenek megjegyzések:
Megjegyzés küldése