Sikerült mindent megcsinálni, kivéve azt, hogy ha az illető Admin, akkor egy teljesen más oldalra irányítsa.
Nekiláttam, de sajnos sikertelenül. Elakadtam annál a résznél, ahol ellenőrzi bejelentkezéskor, hogy Admin vagy sem.
Tehát, adott egy
bejelentkezes.php:<?php
//Konfig fájl betöltése
require_once('includes/config.php');
// Ellenőrizzük, hogy be van e lépve. Ha igen, átirányítjuk a Vezérlőpult oldalra.
if( $user->is_logged_in() ){ header('Location: vezerlopult'); exit(); }
// Bejelentkezési Form(Submit)
if(isset($_POST['submit'])){
if (! isset($_POST['username'])) {
$error[] = "Az összes mező kitöltése kötelező.";
}
if (! isset($_POST['password'])) {
$error[] = "Az összes mező kitöltése kötelező.";
}
$username = $_POST['username'];
if ($user->isValidUsername($username)){
if (! isset($_POST['password'])){
$error[] = 'Kérlek írj be egy jelszót.';
}
$password = $_POST['password'];
if ($user->login($username, $password)){
$_SESSION['username'] = $username;
header('Location: vezerlopult');
exit;
} else {
$error[] = 'Hibás Felhasználónév/Jelszó vagy nem lett Aktiválva a Felhasználói fiók.';
}
}else{
$error[] = 'Usernames are required to be Alphanumeric, and between 3-16 characters long';
}
}//Bejelentkezési Form vége
//Definiáljuk az oldal leírását.
$title = 'Bejelentkezés';
//Betöltjük a fejlécet
require('layout/newheader.php');
?>
<div class="container-fluid h-100 bg-light text-dark">
<div class="row justify-content-center align-items-center">
<h1>Bejelentkezés</h1>
</div>
<hr/>
<div class="row justify-content-center align-items-center h-100">
<div class="col col-sm-6 col-md-6 col-lg-4 col-xl-3">
<form role="form" method="post" action="" autocomplete="off">
<p><a href="./" type="button" class="badge badge-danger">Vissza a főoldalra</a></p>
<?php
//Ellenőrizzük a hibákat, hogy vannak e.
if (isset($error)){
foreach ($error as $error){
echo '<p class="bg-danger">'.$error.'</p>';
}
}
if (isset($_GET['action'])){
//Ha minden rendben van, kiírjuk a felhasználónak az adott üzenetet.
switch ($_GET['action']) {
case 'active':
echo "<h2 class='bg-success'>Fiókod sikeresen aktiválva lett! Most már bejelentkezhetsz.</h2>";
break;
case 'reset':
echo "<h2 class='bg-success'>Jelszavadat visszaállításához, elküldtük a linket. Kérlek nézd meg az email fiókodat.</h2>";
break;
case 'resetAccount':
echo "<h2 class='bg-success'>Jelszavad sikeresen módosítva lett. Most már bejelentkezhetsz.</h2>";
break;
}
}
?>
<div class="form-group">
<input type="text" name="username" id="username" class="form-control input-lg" placeholder="Felhasználónév" value="<?php if(isset($error)){ echo htmlspecialchars($_POST['username'], ENT_QUOTES); } ?>" tabindex="1">
</div>
<div class="form-group">
<input type="password" name="password" id="password" class="form-control input-lg" placeholder="Jelszó" tabindex="3">
</div>
<div class="row">
<div class="col-xs-9 col-sm-9 col-md-9">
<p>Elfelejtetted a jelszavad? <a href="reset" type="button" class="badge badge-warning">Jelszó visszaállítása</a></p>
</div>
</div>
<hr>
<div class="form-group">
<div class="container">
<div class="row">
<div class="col"><input type="submit" name="submit" value="Bejelentkezés" class="btn btn-primary" tabindex="5"></div>
<div class="col"><a href="regisztracio" type="button" class="btn btn-primary">Regisztráció</a></div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<?php
//Betöltjük a Láblécet
require('layout/footer.php');
?>
Ebbe kellene beleírni, hogy bejelentkezéskor, ellenőrizze hogy a felhasználó Admin, vagy sem.
Az adatbázis jelenleg így néz ki:
Nagyobb méret: https://gyazo.com/fc599363c6d3a0ef5cea17627efdb4b5A user_type MySQL oszlopot kellene lekérni, hogy user vagy admin.
Próbálkozásaim:if (mysqli_num_rows($results) == 1) { // Felhasználó megtalálva.
// Ellenőrzi, hogy Admin vagy Felhasználó
$logged_in_user = mysqli_fetch_assoc($results);
if ($logged_in_user['user_type'] == 'admin') {
$_SESSION['user'] = $logged_in_user;
$_SESSION['success'] = "Bejelentkeztél, mint Admin!";
header('location: admin/home.php');
}else{
$_SESSION['user'] = $logged_in_user;
$_SESSION['success'] = "Bejelentkeztél, mint Felhasználó!";
header('location: vezerlopult.php');
}
}
Arra gondoltam, egyszerű logikával, hogy lekérem adatbázisból a user_type -ot, és ha admin az érték, akkor átirányítom az admin/home.php oldalra. Ha nem admin az illető, tehát a user_type érték lekérésekor user-t dob vissza, akkor a vezerlopult.php-ba irányítom át.
True vagy False értéket ad vissza(Ha az illető admin akkor True, ha nem akkor False, és ugyan ez userként is.):
function isLoggedIn()
{
if (isset($_SESSION['user'])) {
return true;
}else{
return false;
}
}
function isAdmin()
{
if (isset($_SESSION['user']) && $_SESSION['user']['user_type'] == 'admin' ) {
return true;
}else{
return false;
}
}
Nyilván, amit csak Adminisztrátor láthat oldal, az egyszerű. Lekérem hogy Admin-e az illető vagy sem. Ha admin, megnézheti az admin/home.php tartalmát, ha nem admin, átirányítom.
<?php
include('../functions.php');
// Ellenőrzi hogy admin, vagy nem.
if (!isAdmin()) {
$_SESSION['msg'] = "You must log in first";
header('location: ../login.php');
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Teszt oldal</title>
<link rel="stylesheet" type="text/css" href="../style.css">
<style>
.header {
background: #003366;
}
button[name=register_btn] {
background: #003366;
}
</style>
</head>
<body>
<div class="header">
<h2>Admin - Kezdőlap</h2>
</div>
<div class="content">
<!-- Értesítési üzenetek -->
<?php if (isset($_SESSION['success'])) : ?>
<div class="error success" >
<h3>
<?php
echo $_SESSION['success'];
unset($_SESSION['success']);
?>
</h3>
</div>
<?php endif ?>
<!-- Bejelentkezett Adminnak az információi -->
<div class="profile_info">
<img src="../images/admin_profile.png" >
<div>
<?php if (isset($_SESSION['user'])) : ?>
<strong><?php echo $_SESSION['user']['username']; ?></strong>
<small>
<i style="color: #888;">(<?php echo ucfirst($_SESSION['user']['user_type']); ?>)</i>
<br>
<a href="home.php?logout='1'" style="color: red;">Kijelentkezés</a>
</small>
<?php endif ?>
</div>
</div>
</div>
</body>
</html>
Maxi írta:
viewtopic.php?f=114&t=30179
Továbbá
regex + preg_match()-el megoldható. Ha nem sikerülne segítek még.