Periode 4 · 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#

Een login systeem werkt eigenlijk als een digitale portier.

Een gebruiker:

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

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

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

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 je password_verify() om te controleren of het ingevoerde wachtwoord klopt.

Wat moet je kennen

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

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

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;