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

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).

  1. 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

  2. Volgende stap is om er een PHP-pagina van te maken

    zie ./files/02-registratie.php

  3. Om te controleren of er op de knop registeren is geklikt, voegen we een controle in en geven een melding.

    zie ./files/03-registratie.php

  4. Nu halen we de gegevens uit het formulier en checken of de ingevulde waarden correct zijn.

    ./files/04-registratie.php

  5. Password hash, eerst afdrukken naar het scherm

    $passwordhash = password_hash($wachtwoord, PASSWORD_DEFAULT);
    $melding = "password hash: $passwordhash";
    
  6. 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

  1. 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.

  2. 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.