PHP Les 7: Registreren en Inloggen
Doelstelling les:
- Registeren van gebruikers
- Inloggen van gebruikers
In deze les wordt uitgewerkt hoe een gebruiker zich kan registreren en
daarna kan inloggen. In de muziekschool-database is een tabel
Gebruiker
met twee kolommen (naam
en passwordhash
). In de casus
heeft deze tabel meer kolommen, namelijk emailadres
en
gebruikersrol
. Met die laatste kolom kan er onderscheid gemaakt worden
tussen bijv. klanten en beheerders. Deze kolommen zijn niet in de
muziekschool-database, zodat er nog wat te programmeren overblijft voor
de studenten (en niet alleen copy/paste werk overblijft).
Voorbereiding
- Bestudeer uit de reader paragraaf Password hashen uit hoofdstuk Veilig gegevens verwerken
Lesprogramma
- Bespreken huiswerk
- Registreren van gebruikers
- Inloggen van gebruikers
Registreren van gebruikers
Voor de muziekdatabase gebruiken we maar twee kolommen, namelijk naam
en passwordhash
. Met deze twee kolommen kun je ook al inloggen
implementeren. Voor de casus wordt dat wat complexer met twee extra
kolommen, emailadres
en gebruikersrol
.
Van elke stap is een voorbeeld gemaakt (zie de map ./files/), maar probeer zoveel mogelijk alles "live" voor te doen en bespreek het geheel (in de WTIS-omgeving is de volledige uitwerking al opgenomen).
-
Eerst maken we een HTML-pagina waarmee gebruikers zich kunnen registeren. Dit formulier bevat maar twee inputs de gegevens op te geven. In de praktijk laat je gebruikers twee keer het wachtwoord invoeren om typfouten te ondervangen (huiswerk is om dat extra veld toe te voegen).
voorbeeld van de HTML-pagina ./files/01-registratie.html
-
Volgende stap is om er een PHP-pagina van te maken
-
Om te controleren of er op de knop registeren is geklikt, voegen we een controle in en geven een melding.
-
Nu halen we de gegevens uit het formulier en checken of de ingevulde waarden correct zijn.
-
Password hash, eerst afdrukken naar het scherm
$passwordhash = password_hash($wachtwoord, PASSWORD_DEFAULT); $melding = "password hash: $passwordhash";
-
nu naar de database toe
bovenaan aan de pagina
require_once 'db_connectie.php';
En het opslaan van de gevens (zie ./files/06-registratie.php)
// Hash the password $passwordhash = password_hash($wachtwoord, PASSWORD_DEFAULT); // database $db = maakVerbinding(); // Insert query (prepared statement) $sql = 'INSERT INTO Gebruikers(naam, passwordhash) values (:naam, :passwordhash)'; $query = $db->prepare($sql); // Send data to database $data_array = [ 'naam' => $naam, 'passwordhash' => $passwordhash ]; $succes = $query->execute($data_array); // Check results if($succes) { $melding = 'Gebruiker is geregistreerd.'; } else { $melding = 'Registratie is mislukt.'; }
- Doe een demo en laat zien dat de gevens in de database zitten.
- In de WTIS-omgeving (de docker-omgeving) is dit eindresultaat
ook opgenomen, te vinden in
./applicatie/registreren.php
.
Inloggen door gebruiker
Eigenlijk dezelfde aanpak als hierboven, zie ./files/07-inloggen.php. Dit bestand staat ook in de WTIS-omgeving (docker).
Bouw het bestand zoveel mogelijk samen op en bespreek de inhoud.
Huiswerk
-
Breid het registratieformulier uit met een extra input voor wachtwoordcontrole. De gebruiker moet dus twee keer zijn wachtwoord opgeven, in de PHP controleer je of die twee gelijk zijn. Dit om te voorkomen dat gebruikers per ongeluk een typefout maken bij het invoeren van het wachtwoord.
-
Maak een pagina
gebruiker.php
waarin je afdrukt of een gebruiker wel of niet is ingelogd. Bij het inloggen wordt er een session-variabele gevuld, die zul je dus moeten controleren of een gebruiker al dan niet is ingelogd.