Login rendszer készítése adminnal

Szerző: Bonjasky

A következő segédletben megmutatom, hogyan tudtok egyszerűen login rendszert készíteni rangokkal, illetve admin felülettel!(A login rendszer egy egyszerű példa a kezdőknek, nem OOP-ben készült!)

Ha a segédlettel kapcsolatban bármilyen kérdésed van, kérlek írj a fórumba!

 

Kezdjünk is bele!


Amikor egy weboldalt készítünk, és ez nem egy egy oldalas egyszerű weboldal, akkor fontos, hogy készítsünk egy beléptető rendszert, hogy a felhasználóinknak különböző szolgáltatásokat tudjunk nyújtani, például egy webshopnál. A következő segédletben ennek az elkészítésében találsz segítséget.


Ö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!');
 

Hamarosan mutatok egy másik módszert is a műveletek kezelésére!

2020-01-11 13:33:26

Értékelés 5.0 /5