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

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

Wat moet je kennen

  • password_verify()
  • hashes controleren
  • boolean resultaat (true of false)

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.