login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > MySQL


Gegevens:
Geschreven door:
SickBoy
Moeilijkheidsgraad:
Normaal
Hits:
19478
Punten:
Aantal punten:
 (1.57)
Aantal stemmen:
14
Stem:
Niet ingelogd
Nota's:
 Post een nota
 Lees de nota's (18)
 

Tutorial:

Inlogsysteem met MySQL


1. Database
2. Form Verwerken
3. Login-Functie


4. Uitloggen

Voor een leden systeem met mysql heb je natuurlijk een tabel nodig ;-). Dit is een kleine tabel met alles wat we zullen gebruiken:

CREATE TABLE `leden` (
`userId` int(11) NOT NULL auto_increment,
`userName` varchar(255) NOT NULL default '',
`userPass` varchar(255) NOT NULL default '',
KEY `userId` (`userId`)
) TYPE=MyISAM;


Dit hoeft denk ik geen verdere uitleg.

Voeg alvast een gebruikersnaam en paswoord in:

INSERT INTO `leden` ( `userId` , `userName` , `userPass` )
VALUES (
'', 'SickBoy', 'ab4f63f9ac65152575886860dde480a1'
);


Een id komt vanzelf (auto_increment), een gebruikersnaam, en de md5 van een paswoord (hier 'azerty').

 top

2. Form Verwerken

Voor een form te verwerken moeten we natuurlijk eerst een form hebben, ik heb gebruik gemaakt van deze:

<form method="post" action="action.php" id="Login">
<input type="text" name="pUser" value="" size="15" />
<input type="password" name="pPass" value="" size="15" />
<input type="hidden" value="login" name="pAction" />
<input type="submit" name="pSubmit" value="Login" />
</form>


Een naam-vakje, een paswoord-vakje, een action-vakje en een knop.
Als je je afvraagt waarom er telkens een 'p' voor de naam staat: dit is voor hosts die geen gebruik maken van register globals, zo hou je je variabelen uit mekaar ;-).

Ok, nu we een form hebben, vullen we allemaal gegevens in en gaan we ze verwerken:

<?php
ob_start
(); //pas op voor header-fouten
session_start(); //en voor sessie-fouten ^^

$dbConnect = mysql_connect("localhost", "Naam", "Wachtwoord") or die ("Verbinding mislukt");
mysql_select_db("DBnaam", $dbConnect);

$action = '';//variabel leegmaken voor de zekerheid
if(isset($_POST['pAction']))
{
//Post moet gebruikt zijn
    
$action = $_POST['pAction'];
     
    if(
$action == 'login')
    {
//inloggen
        
$user = $_POST['pUser'];
        
$password = md5($_POST['pPass']); //paswoord encrypten
         
        
$loginCheckQuery = mysql_query("SELECT userId, userName, userPass FROM leden WHERE userName='".$user."' AND userPass='".$password."'");
        
$results = mysql_num_rows($loginCheckQuery);
         
        if (
$results == 1) //gebruikersnaam en paswoord kloppen
        
{
            while(
$loginFetch = mysql_fetch_array($query)) //alles selecteren
            
{
                
$_SESSION['sLogin'] = 1;
                
$_SESSION['sUser'] = $loginFetch['userName'];
                
$_SESSION['sUserId'] = $loginFetch['userId'];
                 
                
$checkValue = md5('login'.$loginFetch['userId']); //speciale cookie (kijk hieronder     
                
setcookie('cUserId', $loginFetch['userId'], time()+60*60*24*100,"/", ".domein.be"); //2 cookies, elk 100 dagen
                
setcookie('cCheck', $checkValue, time()+60*60*24*100,"/", ".domein.be");
                
setcookie('cPass', $loginFetch['userPass'], time()-60*60*24*100,"/", ".domein.be");
            }
             
            echo
'Succes!';
             
        }else
        {
            echo
'Foute gebruikersnaam of paswoord!';
        }
    }else
    {
//andere actie of geen actie
        
header("Location:login.php");
    }
}else
{
//fout
    
header("Location:login.php");
}

?>



De uitleg:
1) Zoek een rij in de database waar de ingegeven gebruikersnaam en paswoord gebruikt worden.
2) indien een rij gevonden is => cookies en sessies zetten, indien geen rij gevonden is => foutbericht weergeven.

NB: Er worden 2 cookies gezet: 1 cookie die het userId bevat en 1 cookie die de md5 van het userId en een bepaalde key bevat, om te controleren of deze cookies wel door de site zelf zijn gezet.

 top

3. Login-Functie

Nu we onze cookies en sessies hebben geplaatst, moeten we een functie maken die controleert of we wel degelijk ingelogd zijn.
De volgende functie zorgt hiervoor:

<?php
function LogIn()     
{
    
$cookieUserId = ''; //variabelen leegmaken voor de zekerheid
    
$cookieCheck = '';
    
$cookiePass = '';
    if(isset(
$_COOKIE['cUserId']))
    {
        
$cookieUserId = (int)$_COOKIE['cUserId'];
    }
    if(isset(
$_COOKIE['cCheck']) && preg_match("/^[a-z0-9]+$/i", $_COOKIE['cCheck']))
    {
        
$cookieCheck = $_COOKIE['cCheck'];
    }
    if(isset(
$_COOKIE['cPass']) && preg_match("/^[a-z0-9]+$/i", $_COOKIE['cPass']))
    {
        
$cookiePass = $_COOKIE['cPass'];
    }     
    
    
$checkGoodCookie = md5('login'.$cookieUserId);//cookie controle
    
if($checkGoodCookie == $cookieCheck && $cookiePass != '' && empty($_SESSION['sUserId']))
    {  
// wel cookie maar geen sessie
        
$checkQuery = mysql_query("SELECT userId, userName, userPass FROM leden WHERE userId='".$cookieCheck."' AND userPass='".$cookiePass."'") or die(mysql_error());
        while(
$checkResults = mysql_fetch_array($checkQuery))
        {
//sessies zetten
            
$_SESSION['sLogin'] = 1;
            
$_SESSION['sUser'] = $checkResults['userName'];
            
$_SESSION['sUserId'] = $checkResults['userId'];
        
        
$checkValue = md5('login'.$checkResults['userId']);
        
//delete cookies
        
setcookie('cUserId', '', time()-60*60*24*100,"/");
        
setcookie('cCheck', '', time()-60*60*24*100,"/");
        
setcookie('cPass', '', time()-60*60*24*100,"/");
        
// zet nieuwe cookies
        
setcookie('cUserId', $checkResults['userId'];, time()+60*60*24*100,"/", ".domein.be");
        
setcookie('cCheck', $checkValue, time()+60*60*24*100,"/", ".domein.be");
        
setcookie('cPass', $checkResults['userPass'], time()-60*60*24*100,"/", ".domein.be");
        }
        return
TRUE;
         
    }elseif(
$checkGoodCookie == $cookieCheck && $cookiePass != '' && isset($_SESSION['userId']) && is_numeric($_SESSION['userId']))
    {
//sessie en cookie
    
        
$checkValue = md5('login'.$_SESSION['userId']);
        
$setPassCookie = $cookiePass;
        
//delete cookies
        
setcookie('cUserId', '', time()-60*60*24*100,"/");
        
setcookie('cCheck', '', time()-60*60*24*100,"/");
        
setcookie('cPass', '', time()-60*60*24*100,"/");
        
// zet nieuwe cookies
        
setcookie('cUserId', $_SESSION['userId'], time()+60*60*24*100,"/", ".domein.be");
        
setcookie('cCheck', $checkValue, time()+60*60*24*100,"/", ".domein.be");
        
setcookie('cPass', $setPassCookie, time()+60*60*24*100,"/", ".domein.be");
        return
TRUE;
    }else
    {
        return
FALSE;
    }
}   

?>




De uitleg staat erbij, ik hoop dat die voldoende is. Nu moet je gewoon de functie LogIn() aanroepen om te kijken of je ingelogd bent (let op: bij cookies staat een domeinnaam!).

 top
1. Uitloggen

Als je een irritant familielid hebt dat graag eens onder jouw gebruikersnaam ongepaste zaken zegt, dan zal je het leuk vinden wanneer er een log-uit knop bestaat.
Begin alvast met een link te maken:

<a href="action.php?a=logout">Log uit </a>



We breiden action.php een beetje uit:

<?php
ob_start
(); //pas op voor header-fouten
session_start(); //en voor sessie-fouten ^^

$dbConnect = mysql_connect("localhost", "Naam", "Wachtwoord") or die ("Verbinding mislukt");
mysql_select_db("DBnaam", $dbConnect);

$action = '';//variabel leegmaken voor de zekerheid
$a = '';
if(isset(
$_POST['pAction']))
{
//met Post
    
$action = $_POST['pAction'];
     
    if(
$action == 'login')
    {
//inloggen
        
$user = $_POST['pUser'];
        
$password = md5($_POST['pPass']); //paswoord encrypten
         
        
$loginCheckQuery = mysql_query("SELECT userId, userName, userPass FROM leden WHERE userName='".$user."' AND userPass='".$password."'");
        
$results = mysql_num_rows($loginCheckQuery);
         
        if (
$results == 1) //gebruikersnaam en paswoord kloppen
        
{
            while(
$loginFetch = mysql_fetch_array($query)) //alles selecteren
            
{
                
$_SESSION['sLogin'] = 1;
                
$_SESSION['sUser'] = $loginFetch['userName'];
                
$_SESSION['sUserId'] = $loginFetch['userId'];
                 
                
$checkValue = md5('login'.$loginFetch['userId']); //speciale cookie (kijk hieronder     
                
setcookie('cUserId', $loginFetch['userId'], time()+60*60*24*100,"/", ".domein.be"); //2 cookies, elk 100 dagen
                
setcookie('cCheck', $checkValue, time()+60*60*24*100,"/", ".domein.be");
                
setcookie('cPass', $loginFetch['userPass'], time()-60*60*24*100,"/", ".domein.be");  
            }
             
            echo
'Succes!';
             
        }else
        {
            echo
'Foute gebruikersnaam of paswoord!';
        }
    }else
    {
//andere actie of geen actie
        
header("Location:login.php");
    }
}elseif(isset(
$_GET['a']))
{
//met Get
    
$a = $_GET['a'];
    if(
$action2 == 'logout' && LogIn())
    {
//uitloggen
        
session_unset();//sessies legen
        
session_destroy();//sessies verwijderen
             
        
setcookie('cUserId','', time()-60*60*24*100,'/');//cookies verwijderen
        
setcookie('cCheck', '', time()-60*60*24*100,'/');
        
setcookie('cPass', '', time()-60*60*24*100,'/');

        echo
'Je bent uitgelogd';
         
    }else
    {
//niet ingelogd of foute waarde
        
header("Location:login.php");
    }
}else
{
//fout
    
header("Location:login.php");
}

?>


Indrukken die handel, en als alles goed gaat ben je uitgelogd.

Ziezo, dat was het. Vanaf nu kan je veilig in- en uit-loggen.
Als je nog vragen hebt, plaats ze dan hier, stuur een privébericht of zend een postduif uit.

 top



« Vorige tutorial : AND en OR Volgende tutorial : Foreign Keys: Wat zijn het en hoe gebruik ik ze? »

© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.02s