OOP Challenge
8 Challenge: Bouw een OOP Login Systeem
🌟 Leerdoelen
- Je past klassen, objecten, constructors en methodes toe in een realistisch scenario.
- Je gebruikt encapsulation om gebruikersgegevens te beveiligen.
- Je slaat gebruikers op met PDO en hashed wachtwoorden.
- Je maakt een registratie- en loginroutine in OOP-stijl.
💡 Opdrachtbeschrijving
Situatie: Je werkt bij een klein webbureau en een klant wil een eenvoudig maar veilig login-systeem laten bouwen in PHP. Je gaat dit project zelfstandig uitvoeren als een mini-challenge. Dit is een uitstekende kans om je OOP-vaardigheden te laten zien in je GitHub portfolio. Dat kan je helpen om sneller een stage of baan te vinden in de webdevelopment-sector!
Wat je gaat bouwen:
- Een registratiepagina waar nieuwe gebruikers zich kunnen aanmelden
- Een loginpagina waar gebruikers zich kunnen aanmelden
- Beveiligde opslag van wachtwoorden via
password_hash() - Gebruik van
PDOvoor communicatie met de database (bijv. SQLite of MySQL)
📄 Structuur en Klassen
- Class User
- Properties:
private $id,$username,$passwordHash - Constructor stelt naam + wachtwoord in (en hashed het wachtwoord)
- Methode
verifyPassword($plainText)vergelijkt met hash - Getters voor
getId()engetUsername()
- Properties:
- Class UserDatabase
- Maakt verbinding via
PDO(gebruik SQLite of MySQL) - Methodes:
addUser(User $user),findUserByUsername($name) - Prepared statements verplicht!
- Maakt verbinding via
🚀 Technische vereisten
- Gebruik password_hash() en password_verify() voor wachtwoorden
- PDO met prepared statements (geen ruwe SQL!)
- Toon foutmeldingen bij fouten (bestaande user, fout wachtwoord, etc.)
🛠️ Bestanden
User.php– beschrijft de user zelfUserDatabase.php– regelt opslag en ophalenregister.php– laat gebruiker registrerenlogin.php– laat gebruiker inloggenlogin-success.php– pagina die je ziet na succesvol inloggen
🧠 Reflectie
- Wat zijn de voordelen van wachtwoord hashing?
- Waarom gebruiken we een aparte klasse voor opslag en een voor gebruikers?
- Wat zou je uitbreiden als je dit systeem echt online wilde zetten?
📅 Bonus: Voor je portfolio
Zet dit project op GitHub met een korte uitleg in de README over hoe het werkt. Voeg schermafbeeldingen toe van het registratie- en loginproces. Dit is een mooi voorbeeldproject om te laten zien wat je kunt!
📄 Inleveren
- Alle bestanden in 1 map (
login-oop) - Reflectie in
reflectie-login-<jouw-naam>.txt - (Optioneel) Link naar je GitHub repository