Segédletek.hu
Segédletek weblap szerkesztéshez!
Fórum:
Postaláda:
Szavazás:
Hány éves vagy?
Segédletek:
Linkek:
php + mysql alapú beléptető rendszer:
Írunk egy beléptető rendszert, melynek segítségével megoldható, hogy bizonyos lapok csak regisztrált felhasználóknak legyenek elérhetők.
A segédletben nem fogok mindent annyira részletesen magyarázni, inkább haladóknak szánom, de ne essen senki kétségbe, nem lesz túl bonyolult.
A segédlet megértéséhez nem árt tisztában lenni a session kezelés alapjaival
A segédletben felhasznált fájlok:
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
Működő demó
Forrás fájlok egyben
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
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
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
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
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
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.
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
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
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
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, ugye, hogy nem is olyan bonyolult :)
A segédletben felhasznált php függvények:
ereg()
mysql_num_rows()
mysql_query()
include()
mysql_connect()
mysql_select_db()
isset()
die()
md5()
header()
session_start()
ob_start()
ob_end_flush()
unset()
A segédlet megértéséhez nem árt tisztában lenni a session kezelés alapjaival
A segédletben felhasznált fájlok:
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
Működő demó
Forrás fájlok egyben
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)
);
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
<html>
<head>
<title>Regisztráció</title>
</head>
<body>
Regisztráció:
<form method="post" action="">
<table>
<tr>
<td>Nick:</td>
<td><input type="text" name="nick" /></td>
</tr>
<tr>
<td>E-mail cím:</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Jelszó:</td>
<td><input type="password" name="pass1" /></td>
</tr>
<tr>
<td>Jelszó mégegyszer:</td>
<td><input type="password" name="pass2" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="regisztracio" value="regisztrálok" />
</td>
</tr>
</table>
</form>
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 "<a href=\"index.php\">tovább</a>";
}
else
{
print reg_check($_POST);
}
}
?>
</body>
</html>
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";
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<table>
<tr>
<td>nick:</td>
<td><input type="text" name="nev" /></td>
<td>jelszó:</td>
<td><input type="password" name="jelszo" /></td>
<td colspan="2" align="center"><input type="submit" name="login" value="Belépés" /></td>
<td><a href="register.php">regisztráció</a></td>
</tr>
</table>
</form>
<?php
}//Nem lépett be
/********************************
* Ha már belépett
*******************************/
else
{//Be van lépve
print "bejelentkezve: ".$_SESSION['nick'];
print " <a href=\"logout.php\">kijelentkezés</a>";
}
?>
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();
?>
<html>
<head>
<title>Belépő rendszer</title>
</head>
<body>
<?php include "login.php"; ?>
<p>Ez itt a mindenki számára elérhető rész </p>
<a href="vedett.php">Védett rész</a>
</body>
</html>
<?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, ugye, hogy nem is olyan bonyolult :)
A segédletben felhasznált php függvények:
ereg()
mysql_num_rows()
mysql_query()
include()
mysql_connect()
mysql_select_db()
isset()
die()
md5()
header()
session_start()
ob_start()
ob_end_flush()
unset()
Írta: requiem - 2006-07-06 19:11:38
* Nem vagy bejelentkezve!* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!
| gaborka | 2010-05-28 01:34:09 |
| Ezeket a kódokat egy notepadba kell másolni és feltölteni a tárhelyre így ahogy vannak?? Illetve itt arró hogy hogyan kell létrehozni a kapcsolatot a mysql adatbázissal nem sok van írva. :( | |
| gaborka | 2010-05-27 20:03:00 |
| Nem rossz írás. De. Sajnos nagyon fontos dolgok maradtak ki, például, hogy ezeket a forráskódokat hová kell elhelyezni. Register.php még önmagában meg sem jelenik index.html nélkül. Szóval ez úgy lett volna jó ha minden lépésr?l lépésre pontosan le van írva,esetleg videóval mellékelve. Az index.html létrehozása, a regisztrációs oldal létrehozása, aztán a login elhelyezése az index.html-en, mysql adatbázis részletezése, kezdeti teend?kkel. Mert ilyen amat?r kezd? programozóknak, mint én is vagyok ez túl bonyolult aki meg tudja annak nem túl hasznos ez az írás. De ne vegyétek ezt a kommentet rossznéven. :) | |
| bazsi | 2010-05-17 18:25:09 |
| Nekem is hasonló problémám van mint ogrepapa-nak. Ezt írja ki csak más az elérési útvonal, de ugyen ez a problémám Warning: Cannot modify header information - headers already sent by (output started at /mnt/storage/virtual/temuki.hu/projekt/htdocs/index.php:3) in /mnt/storage/virtual/temuki.hu/projekt/htdocs/login.php on line 29 Valaki segítsen pls!!!!!!!! Köszike |
|
| ogrepapa | 2010-05-12 05:34:11 |
| body részben kell legyen a include login.php | |
| ogrepapa | 2010-05-12 05:32:54 |
| Ez lemaradt bocsi (innen html) (innen megint html) |
|
| ogrepapa | 2010-05-12 05:30:46 |
| így kezd?dik a php oldalad: session_start(); ob_start(); ?> (innen html) (innen megint html) . . . és bezárod így | |
