PHPműhely.hu

PHP, Javascript, Webprogramozási Fórum

Login rendszer készítése, adminnal

PHP Cikkek, segédletek

Login rendszer készítése, adminnal

HozzászólásSzerző: Bonjasky » 2012.04.17. 21:02

Üdv!

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 ide a fórumba!

Ö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:


Kód: Egész kijelölése
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:
Kód: Egész kijelölése
//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

Kód: Egész kijelölése
<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


Kód: Egész kijelölése

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!)<br><input name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
    elseif($_POST['nickname']=="")
      $reg_result = 'Üres Nick mező!<br><input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
    elseif($_POST['pass1']=="")
      $reg_result = 'Üres Jelszó mező!<br><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!<br><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)<br><input class="buttons" name="vissza" value="Vissza" onclick="history.go(-1)" type="button">';
    elseif($_POST['email']=="")
       $reg_result = ' Üres e-mail mező!<br><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!<br><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
Kód: Egész kijelölése
<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:

Kód: Egész kijelölése

<?
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:
Kód: Egész kijelölése
if( isset( $_SESSION["rank"] ) && $_SESSION["rank"] >= 3 ){  //védett tartalom }
 


home.php
Kód: Egész kijelölése
<?
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):

Kód: Egész kijelölése

<? 
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
Kód: Egész kijelölése
<?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!
Avatar
Bonjasky
Adminisztrátor
 
Hozzászólások: 472
Csatlakozott: 2011.10.30. 23:30

Vissza: Segédletek

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég

cron