Inloggen
Het inloggen gebeurt op de pagina login.php. We beginnen hiermee ongeveer hetzelfde als met het registreren.
login.php
<?php
include("header.php");
?>
<h1>Inloggen</h1>
<form action="login.php" method="post">
<table>
<tr>
<td>Gebruikersnaam</td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td>Wachtwoord</td>
<td><input type="password" name="password" /></tr>
</tr>
<tr>
<td />
<td><input type="submit" value="Aanmelden" />
</tr>
</table>
</form>
<?php
include("footer.php");
?>
Input verwerken
Voeg na "<h1>Inloggen</h1>" het volgende toe:
<?php
if(isset($_POST['user']))
{
//Escape de gebruikersnaam
$sUser = mysql_real_escape_string($_POST['user']);
//Maak de hashstring van het wachtwoord
$sPass = sha1($_POST['password']);
Hierin controlleert de if of er op te knop is gedrukt. Verder escapen we de gebruikersnaam om te beveiligen tegen MySQL-injecties en moeten we eerst de hash maken van het wachtwoord om deze te vergelijken met de hash in de database. Een hash kan slechts een kant op, dus we kunnen het wachtwoord in de database niet ontcijferen.
De volgende stap is kijken of er een gebruiker is in de database met de opgegeven gebruikersnaam, voeg de volgende code hier direct onder toe:
$sSQL = 'SELECT `id`, `password` FROM `users` WHERE `user` = \'' . $sUser .'\''; $rsSQL = mysql_query($sSQL); $aUser = mysql_fetch_array($rsSQL);
Als er een gebruiker is gevonden heeft de array $aUser nu twee keys, id en password. Als er geen gebruiker is gevonden, zal de waarde van $aUser gelijk zijn aan false. Met deze informatie kunnen we controlleren of de gegevens kloppen:
//Er is geen rij gevonden en $aUser is false:
//Dat betekent dat er geen user is met de opgegeven gebruikersnaam
if($aUser == false)
{
echo '<strong>Deze gebruiker is niet gevonden</strong>';
}
//Vergelijk de hashes
elseif($aUser['password'] != $sPass)
{
echo '<strong>Het wachtwoord is fout';
}
//Inloggen gelukt
else
{
De laatste stap is om een sessie aan te maken en de gebruiker door te sturen. Een sessie is een soort variabele die op iedere pagina blijf bestaan als de gebruiker actief blijft. Voeg de volgende code toe
//De combinatie is goed, maak de sessie aan
$_SESSION['login_user'] = $aUser['id'];
//Verstuur de gebruiker door
header("location: index.php");
//Mocht de redirect hierboven niet werken:
echo '<strong>Je bent ingelogd, klik <a href="index.php">hier</a> om door te gaan.</strong>';
}
}
?>
Header aanpassen
Het enige wat ons nog rest qua inloggen is het aanpassen van de variabelen $bLogin en $bAdmin. Verder maken we een variabele $aUser aan die we overal kunnen gebruiken met de data over de gebruiker. Als er is ingelogd bestaat de sessie "login_user", waar het ID is opgeslagen.
Verander de code
//Nog aan te passen, een login- en admincheck: $bLogin = false; $bAdmin = false;Door
//Login/admin test
if(isset($_SESSION['login_user']))
{
//Maak de user-array aan
$sSQL = 'SELECT * FROM `users` WHERE `id` = \'' . (int)$_SESSION['login_user'] .'\'';
$rsSQL = mysql_query($sSQL);
$aUser = mysql_fetch_assoc($rsSQL);
//Kijk of de gebruiker wel bestaat
if($aUser == false)
{
$bLogin = false;
$bAdmin = false;
//Deze sessie klopt niet, dus gooien we hem weg
session_destroy();
}
else
{
$bLogin = true;
//Admintest
if($aUser['admin'] == 1)
$bAdmin = true;
else
$bAdmin = false;
}
}
else
{
$bLogin = false;
$bAdmin = false;
}
Als je het script nu test, zal je zien dat het misschien niet werkt. Als dat zo is moet je bovenaan header.php zetten:
session_start();Waar je dit precies neerzet maakt niet uit, zolang het maar binnen <?php ?> staat en boven enige output. Op sommige server start PHP automatisch al de sessies.