Periode 4 · Week 6
Week 6 – Login;
Wat leer je deze week?
Vorige week leerde je hoe je gebruikers registreert en wachtwoorden veilig opslaat.
Deze week ga je gebruikers echt laten inloggen.
Je leert hoe PHP controleert of een gebruikersnaam bestaat en of het wachtwoord klopt.
Ook maak je kennis met sessions, zodat een gebruiker ingelogd kan blijven.
Kernconcepten (in normale mensentaal)
Een login systeem werkt eigenlijk als een digitale portier.
Een gebruiker:
- vult een gebruikersnaam in
- vult een wachtwoord in
- PHP zoekt de gebruiker op in de database
- PHP controleert of het wachtwoord klopt
- als alles goed is, wordt de gebruiker “ingelogd”
Maar:
het wachtwoord in de database is gehashed.
Dus PHP kan niet gewoon vergelijken:
$password == $user['password']
Dat werkt niet 😭
Daarom gebruik je:
password_verify()
Die functie controleert:
“hoort dit wachtwoord bij deze hash?”
Wat moet je kennen?
1. Een loginformulier maken
Uitleg
De gebruiker vult een gebruikersnaam en wachtwoord in.
Wat moet je kennen
method="POST"type="password"- formulierdata versturen
Voorbeeld
<form method="POST">
<input
type="text"
name="username"
placeholder="Gebruikersnaam"
>
<input
type="password"
name="password"
placeholder="Wachtwoord"
>
<button type="submit">
Login
</button>
</form>
Onthoud: Het formulier verstuurt de logingegevens naar PHP.
2. POST-data uitlezen
Uitleg
PHP ontvangt de formulierdata via$_POST.
Wat moet je kennen
$_POST?? ''- formulierdata uitlezen
Voorbeeld
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
Onthoud: Gebruik altijd een fallback om warnings te voorkomen.
3. Een gebruiker ophalen uit de database
Uitleg
PHP zoekt eerst naar de gebruiker in de database.
Wat moet je kennen
SELECTWHERE username = ?fetch(PDO::FETCH_ASSOC)
Voorbeeld
$stmt = $pdo->prepare("
SELECT * FROM users
WHERE username = ?
");
$stmt->execute([$username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
Onthoud: Je zoekt één gebruiker op basis van de gebruikersnaam.
4. password_verify() gebruiken
Uitleg
Het wachtwoord in de database is gehashed.
Daarom gebruik jepassword_verify()om te controleren of het ingevoerde wachtwoord klopt.
Wat moet je kennen
password_verify()- hashes controleren
- boolean resultaat (
trueoffalse)
Voorbeeld
if (password_verify($password, $user['password'])) {
echo "Correct!";
}
Onthoud:
password_verify()vergelijkt het echte wachtwoord met de hash.
5. Een session gebruiken
Uitleg
Als de login klopt, wil je onthouden dat de gebruiker ingelogd is.
Daarvoor gebruik je sessions.
Wat moet je kennen
session_start()$_SESSION- loginstatus opslaan
Voorbeeld
session_start();
$_SESSION['user'] = $user['username'];
Onthoud: Sessions werken als tijdelijk geheugen voor PHP.
6. Redirect gebruiken na login
Uitleg
Na een succesvolle login stuur je de gebruiker meestal door naar het overzicht of dashboard.
Wat moet je kennen
header()exit- redirect flow
Voorbeeld
header('Location: index.php');
exit;
Onthoud: Zonder redirect blijft de gebruiker op de loginpagina hangen.
Veelgemaakte fouten (met voorbeelden)
1. Het wachtwoord vergelijken met ==
Dat werkt niet met hashes.
Fout
if ($password == $user['password']) {
}
Beter
if (password_verify($password, $user['password'])) {
}
2. Geen gebruiker ophalen uit de database
Dan bestaat $user niet.
Fout
password_verify($password, $user['password']);
Beter
$user = $stmt->fetch(PDO::FETCH_ASSOC);
password_verify($password, $user['password']);
3. session_start() vergeten
Dan werken sessions niet.
Fout
$_SESSION['user'] = $user['username'];
Beter
session_start();
$_SESSION['user'] = $user['username'];
4. Geen fallback gebruiken bij POST-data
Dan krijg je warnings als velden ontbreken.
Fout
$username = $_POST['username'];
Beter
$username = $_POST['username'] ?? '';
5. Geen redirect gebruiken na login
Dan blijft de gebruiker op de loginpagina.
Fout
echo "Welkom!";
Beter
header('Location: index.php');
exit;
Snippets
POST-data uitlezen
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
Gebruiker ophalen
$stmt = $pdo->prepare("
SELECT * FROM users
WHERE username = ?
");
$stmt->execute([$username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
Wachtwoord controleren
if (password_verify($password, $user['password'])) {
}
Session opslaan
session_start();
$_SESSION['user'] = $user['username'];
Redirect gebruiken
header('Location: index.php');
exit;
Video (coming soon)
Video komt eraan
Zodra de uitlegvideo beschikbaar is, wordt alleen de YouTube-ID vervangen.