Periode 4 · Week 5
Week 5 – Registreren;
Wat leer je deze week?
Tot nu toe werkte jouw applicatie vooral met data zoals taken, notities of opdrachten.
Deze week voeg je gebruikers toe aan je applicatie.
Je leert hoe een registratiesysteem werkt en hoe je wachtwoorden veilig opslaat in een database.
Dit is de eerste stap richting een echt login systeem.
Kernconcepten (in normale mensentaal)
Een registratiesysteem werkt eigenlijk als een aanmeldformulier voor jouw app.
Een gebruiker:
- kiest een gebruikersnaam
- kiest een wachtwoord
- verstuurt het formulier
- PHP slaat de gebruiker op in de database
Maar:
wachtwoorden sla je NOOIT letterlijk op.
Dus niet:
wachtwoord123
Waarom niet?
Als iemand toegang krijgt tot de database, kunnen alle wachtwoorden gelezen worden 😭
Daarom gebruik je hashing.
Hashing verandert een wachtwoord in een soort onleesbare code.
Bijvoorbeeld:
wachtwoord123
↓
$2y$10$8X...
PHP kan later nog steeds controleren of het wachtwoord klopt, zonder het echte wachtwoord op te slaan.
Wat moet je kennen?
1. Een registratieformulier maken
Uitleg
Een gebruiker vult een formulier in met een gebruikersnaam en wachtwoord.
Wat moet je kennen
method="POST"input type="text"input type="password"
Voorbeeld
<form method="POST">
<input
type="text"
name="username"
placeholder="Gebruikersnaam"
>
<input
type="password"
name="password"
placeholder="Wachtwoord"
>
<button type="submit">
Registreren
</button>
</form>
Onthoud:
type="password"verbergt wat de gebruiker typt.
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 een fallback zodat je geen warnings krijgt.
3. password_hash() gebruiken
Uitleg
Wachtwoorden sla je nooit letterlijk op in de database.
Daarom gebruik jepassword_hash().
Wat moet je kennen
password_hash()PASSWORD_DEFAULT- hashing
Voorbeeld
$hash = password_hash(
$password,
PASSWORD_DEFAULT
);
Resultaat
supergeheimwachtwoord
↓
$2y$10$9vM...
Onthoud: Je slaat de hash op, niet het echte wachtwoord.
4. Een gebruiker opslaan in de database
Uitleg
Nadat het wachtwoord gehashed is, kun je de gebruiker opslaan.
Wat moet je kennen
INSERT INTO- prepared statements
- placeholders
?
Voorbeeld
$stmt = $pdo->prepare("
INSERT INTO users (username, password)
VALUES (?, ?)
");
$stmt->execute([$username, $hash]);
Onthoud: De database krijgt de hash, niet het originele wachtwoord.
5. Een users tabel maken
Uitleg
Voor een login systeem heb je een aparte tabel nodig voor gebruikers.
Wat moet je kennen
CREATE TABLEVARCHARAUTO_INCREMENTPRIMARY KEY
Voorbeeld
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
password VARCHAR(255)
);
Onthoud: De password kolom moet groot genoeg zijn voor hashes.
Veelgemaakte fouten (met voorbeelden)
1. Het echte wachtwoord opslaan
Dit is onveilig.
Fout
$stmt->execute([$username, $password]);
Beter
$stmt->execute([$username, $hash]);
2. password_hash() vergeten
Dan wordt het wachtwoord leesbaar opgeslagen in de database.
Fout
$password = $_POST['password'];
Beter
$hash = password_hash(
$password,
PASSWORD_DEFAULT
);
3. type="text" gebruiken voor wachtwoorden
Dan kan iedereen meekijken 😭
Fout
<input type="text" name="password">
Beter
<input type="password" name="password">
4. Geen prepared statements gebruiken
Directe queries zijn minder veilig.
Fout
$pdo->query("
INSERT INTO users
VALUES ('$username', '$hash')
");
Beter
$stmt = $pdo->prepare("
INSERT INTO users (username, password)
VALUES (?, ?)
");
$stmt->execute([$username, $hash]);
5. Een te kleine password kolom gebruiken
Hashes zijn veel langer dan normale wachtwoorden.
Fout
password VARCHAR(20)
Beter
password VARCHAR(255)
Snippets
POST-data uitlezen
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
Wachtwoord hashen
$hash = password_hash(
$password,
PASSWORD_DEFAULT
);
Gebruiker opslaan
$stmt = $pdo->prepare("
INSERT INTO users (username, password)
VALUES (?, ?)
");
$stmt->execute([$username, $hash]);
Redirect gebruiken
header('Location: login.php');
exit;
Checken of formulier verstuurd is
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
}
Video (coming soon)
Video komt eraan
Zodra de uitlegvideo beschikbaar is, wordt alleen de YouTube-ID vervangen.