2024. március 1., péntek

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