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 zelf
- UserDatabase.php– regelt opslag en ophalen
- register.php– laat gebruiker registreren
- login.php– laat gebruiker inloggen
- login-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
