Skip to main content

OOP Challenge

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 PDO voor 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() en getUsername()
  • Class UserDatabase
    • Maakt verbinding via PDO (gebruik SQLite of MySQL)
    • Methodes: addUser(User $user), findUserByUsername($name)
    • Prepared statements verplicht!

🚀 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