Webprogramozás - PHP és MYSQL alapú beléptető rendszer

Nyomtatóbarát változat
Informatika
webprogramozás
szakmázó szintű

A minap készítettem egy PHP és MYSQl alapú beléptető rendszert egy weblaphoz!

Úgy gondoltam , hogy leírom nektek hogy hogy csináltam!

 

Nagyon hasznos kis védelmi funkció is van benne (hash)

 

Csináljátok meg ti is!

 

GO:

A fájlok, amiket el kell készítenünk hozzá a következők : 

install.sql - Az adatbázist létrehozó fájl.
config.php - A beállításokat tartalmazó fájl
index.php - A nyitó oldal
login.php - A bejelentkező lap
register.php - A regisztrációs lap
vedett.php - A rejtett(csak regisztráltaknak elérhető) oldal.
reg_check.php - A regisztrációs adatok helyességét ellenőrzi

 

Akkor vágjunk is bele.

Először az adatbázist kell megterveznünk.
mindössze egy táblára lesz szükségünk. Legyen a neve users. Kell benne egy azonosító(id), egy nick, egy jelszó, és egy e-mail cím mező. ez SQL nyelven így néz ki:

 

install.sql

CREATE TABLE users(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nick VARCHAR(30),
jelszo VARCHAR(32),
email VARCHAR(60)
);

 

Ezt futtassuk le mondjuk phpmyadmin - ban, vagy akár hol, és már kész is van az adatbázisunk.

Akkor jöjjön a config.php Ezt fogjuk majd includolni a többi lapba

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "login";
?>

 

Itt definiáltuk a csatlakozáshoz szükséges adatokat, természetesen mindenki a saját adatait írja ide.
Van adatbázisunk, van config fájlunk, írjuk meg a regisztrációs részt.

register.php


  Regisztráció

Regisztráció:

 method="post" action="">

  


    

       Nick:


        type="text" name="nick" />


    


    

       E-mail cím:


        type="text" name="email" />


    


    

       Jelszó:


        type="password" name="pass1" />


    


    

       Jelszó mégegyszer:


        type="password" name="pass2" />


    


    

      
 colspan="2">
 type="submit" name="regisztracio"value="regisztrálok" />
      


    


  


 

Ezzel létrehoztunk egy formot, amin keresztül a felhasználó beírhatja az adatait. Már csak a letároló részt kell megírnunk bele. Akkor folytassuk:
Itt állnék meg egy szóra. Minden olyan adat, ami a felhasználótól érkezik, potenciális veszélyforrás, ugyanis nagyon sok a rosszindulatu user. Ezért minden formból jövő adatot ellenőrizni kell. Amit mi most ellenőrizni forunk, azok a következők: 

-az összes mezőt kitöltötték - e
-a nickben csak a magyar ábécé betűi, számok, _ és - vannak - e
-valós e-mail címet adtak - e meg
-regisztráltak - e már a megadott nickkel
-a két jelszó egyezik - e

ez php nyelven így néz ki:

reg_check.php

<?php
function reg_check($adatok){
  if($adatok['nick'] == "" | $adatok['email'] == "" | $adatok['pass1'] == "")
  {
    return "Minden mező kitöltése kötelező";
        break;
  } 
  elseif(!ereg('^[a-zA-Z\-\_áéíóöüóűÁÉÍÓÖÜŐŰ]+$'$adatok['nick' ]))
  {
    return "A nickben csak a magyar ábécé kis - és nagybetűi, a számok, illetve a  _ és - jelek engedélyezettek";
        break;
  }
  elseif($adatok['email'] == (!eregi("^[_\.0-9a-z-]+@
([0-9a-z][0-9a-z-]+\.)+[a-z]{2,6}$"
,$adatok['email'])))
  {
    return "Hibás e - mail cím!";
        break;
  }
  elseif(mysql_num_rows(mysql_query("SELECT nick FROM users WHERE (nick='".$adatok['nick']."')")) > 0)
  {
    return "Már regisztráltak ezzel a nickkel";
    break;
  }
  elseif($adatok['pass1'] !== $adatok['pass2'])
  {
    return "A két jelszó nem egyezik";
        break;  
  }   
  else
  {
    return "rendben";
  }
}
?>

Ez egy függvény, kér egy tömböt, ami a mi esetünkben majd a $_POST tömb lesz (ebben lesznek a megadott adatok) és visszatér vagy a hibaüzenettel, vagy a rendben szóval.
Akkor jöjjön, aminek jönnie kell, a formból bekért adatokat ellenőrzés után írjuk mysql - be
folytassunk a register.php - t

<?php
include "config.php";
include "reg_check.php";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

if (isset($_POST['regisztracio']))
{
  if (reg_check($_POST) == "rendben")
  {
    $sql = "INSERT INTO users (id,nick,jelszo,email) ";
    $sql.= "VALUES('','".$_POST['nick']."','";
    $sql.= md5($_POST['pass1'])."','".$_POST['email']."')";
    $query = mysql_query($sql) or die ("Valami baj van az adatbázissal.");
    print "sikeres regisztráció!";
          print "\"index.php\">tovább";
  }
  else
  {
    print reg_check($_POST);
  }
}
?>

 

beincludoltuk a két fájlt, csatlakoztunk a mysql - hez. Ezután az előbb megírt függvényünket használjuk a regisztráció ellenőrzésére. ha a "rendben" - el tér vissza, akkor beíratjuk az adatokat az adatbázisba. Ami feltűnő lehet, az az md5() függvény. Ezzel csináltunk egy hash értéket a jelszóból. Így egy kicsit biztonságosabbá tettünk az adatokat, mert ha netalántán illetéktelen kezekbe kerülnének az adatok, akkor az illető csak egy hash értéket lát, ami nem mond sokat. Ez is egy alapszabály: adatbázisban tilos közvetlenül tárolni a jelszavakat.

Most, hogy már regisztrálni is tudnak a felhasználóink, valahol be kéne őket léptetni. Hát akkor feküdjünk neki a login.php - nek.

<?php
include "config.php";

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

/**************************************************
 * Ha még nem lépett be
 ***************************************************/

if ($_SESSION['belepett']!== true)
{
  if (isset($_POST['login']))
  { //Ha postolt adatokat
    $nick = addslashes($_POST['nev']);
    $pass = md5($_POST['jelszo']);

    $sql = "SELECT * FROM users ";
    $sql.= "WHERE (nick='".$nick."'";
    $sql.= " AND jelszo='".$pass."')";

    $query = mysql_query($sql);

    if (mysql_num_rows($query) !== 0)
    { //Helyes nick+pass
      $_SESSION['nick'] = addslashes($_POST['nev']);
      $_SESSION['belepett'] = true;

      header("Location: ".$_SERVER['PHP_SELF']);
    }

    else
    {//Hibás nick+pass
      print "hibás nick/pass";
    }
  }
?>
"<?php echo $_SERVER['PHP_SELF'];?>" method="post">
 

   
     

     

     

     

     

     

   

 

nick: "text" name="nev" /> jelszó: "password" name="jelszo" /> "2" align="center">"submit" name="login"value="Belépés" /> "register.php">regisztráció

<?php 
}//Nem lépett be

/********************************
 * Ha már belépett
 *******************************/

else
  {//Be van lépve
    print "bejelentkezve: ".$_SESSION['nick'];
    print " \"logout.php\">kijelentkezés";
  }
?>

Ezzel kiíratunk egy belépő formot, és egy linket a regisztrációra. Ha postolnak, akkor ellenőrizzük az adatokat, és ha passzol minden, akkor a $_SESSION['nick'] változóba tesszük a felhasználó nevét, és a $_SESSION['belepett'] értékét true - ra állítjuk.
Ez szép, és jó, de önmagában semmit nem ér.
Csináljunk egy lapot:

index.php

<?php
session_start();
ob_start();
?>


  Belépő rendszer


  <?php include "login.php"?>
 

Ez itt a mindenki számára elérhető rész

  "vedett.php">Védett rész



<?php
ob_end_flush();
?>

 

Remélem, ez nem szorul különösebb magyarázatra. Ami feltűnő lehet, az az ob_start, valamint a ob_end_flush sorok. Ez a header() fgv miatt van, ami a login.php - ben van.
Most, hogy be tudnak lépni felhasználóink, ki is kéne tudni őket léptetni. 

logout.php

<?php
session_start();
unset($_SESSION['belepett']);
unset($_SESSION['nick']);
header("location: index.php");
?>

gyakorlatilag a kiléptetés azt jelenti, hogy töröljük a session változókat.

És akkor most a végén jöjjön a leg fontosabb dolog. Hozzunk létre védett tartalmat, amit csak regisztrált felhasználóink olvashatnak

vedett.php

<?php
session_start();

if($_SESSION['belepett'] == true)
{
  print "Védett tartalom, ha ezt olvasod, sikerült belépned, gratulálok";
}
else
{
  print "Csak szeretnéd... :)";
}

?>

Vizsgáljuk a $_SESSION['belepett'] értékét (a bejelentkezéskor állítottuk true - re).
Ezzel gyakorlatilag el is készültünk. Minden védett lapunk elejére be kell illeszteni a login.php -t (include "login.php";). a session_start - ról se feledkezzünk meg.

Hát ennyi volt!

 

Akinek nem volt annyira világos annak leírom a használandó függvényeket, aminek utána is nézhet:

 

ereg

mysql num rows

mysql query

include

mysql conncet

mysql select db

isset

die

md5

header

session start

ob start

ob end flush

unset

 

Nézzétek meg a használatukat ha nem lenne világos!

 

Köszönöm a figyelmet!

Még találkozunk!

Hozzászólás

A mező tartalma nem nyilvános.