We gaan in deze opdracht een login pagina script maken. Dit script is net als de connect.php op elke pagina te gebruiken die je wilt beveiligen.
Een beveiligde pagina kan er dan alsvolgt uit zien
<?php include "connect_firstchoice.php"; include "login.php"; //hier de rest van je pagina, alleen zichtbaar als je bent ingelogd echo "Je kan dit alleen zien als je bent ingelogd";
Hieronder volgen een aantal blokken met code. Deze blokken moeten in de juiste volgorde worden gezet om een werkende login.php te krijgen. Copy-paste de blokken en zit in de juiste volgorde. Let op, aan de code zelf hoeft niets aangepast te worden.
Je connect_firstchoice.php ziet er alsvolgt uit
<?php $server = "localhost"; $user = "root"; $pw = "usbw"; $db = "firstchoice"; //verbinding met database maken $link = mysqli_connect($server,$user,$pw,$db) or die ("Kan geen verbinding maken: ".mysqli_connect_error() );
Blok 1 - Opmaak van het inlogformulier
<?php //////////////////////// /// css voor de opmaak /// /////////////////// ?> <style> div.login { border: 5px outset red; margin-left: 40%; margin-top: 20%; padding: 3em; width: 300px; border-radius: 25px; } div input { margin-bottom: 1em; border-radius: 5px; padding-left: 0.5em; font-size: 1.5em; } .btn { border-radius: 10px; height: 2em; background-color: lightskyblue; } h3 { margin-bottom: 2em; } </style> <?php ////////////////////// einde opmaak ?>
Blok 2 - Een button om uit te loggen (optioneel) en alleen tonen als je ingelogd bent
<?php ////////////////////Blok logout button of logout link ////////// ?> <form method="post"> <input type="hidden" name="logout" value="1"/> <input type="submit" value="Uitloggen"> </form> <br> <br> <a href="<?php echo $_SERVER["REQUEST_URI"]; ?>?logout=1">Uitloggen</a> <?php /////////////////////einde blok logout button ?>
Blok 3 - script om de uitlogbutton te laten werken
<?php /////////////////Blok uitloggen ////////////////// if (isset($_POST['logout']) OR isset($_GET['logout'])) { unset($_SESSION['user']); //zou eigenlijk niet moeten, maar soms werkt session destroy met zo snel als je zou willen session_destroy(); } /////////////////einde blok uitloggen ///////////// ?>
Blok 4 - starten van de sessie
<?php session_start(); ?>
Blok 5 - valideren of een gebruiker in de database bestaat
<?php ////////////////////////// blok check of `user` in database en zetten van session['user'] (ingelogd) if (isset($_POST['login'])) { $user = mysqli_real_escape_string($link, $_POST['user']); $password = mysqli_real_escape_string($link, $_POST['password']); $result = mysqli_query($link , "SELECT * FROM users WHERE `name`='$user' LIMIT 1" ); //or die mysqli_error($link)); $user = mysqli_fetch_assoc($result); //$user bevat nu een array met alle kolommen van de gebruiker (als deze bestaat) if (count($user)) { //kijken of er data zit in $user, zo ja dan mag je naar binnen if(password_verify($password,$user['password'])){ //Alle user gegevens zetten we in de session zodat je erg makkelijk gegevens van de user kan tonen //zonder de database te hoeven gebruiken. bv: echo $_SESSION['user']['name']; $_SESSION['user'] = $user; }else{ //password is niet juist dus willen we ook geen session hebben session_destroy(); } } else { //alle sessies verwijderen, want het was geen geldige login session_destroy(); } } //////////////////////////// einde blok check //////////////////////////// ?>
Blok 6 - Het inlogformulier
<?php /////////////// BLOK inlog formulier if (!isset($_SESSION['user'])) { ?> <form method="post"> <div class="login"> <input type="text" placeholder="Gebruikersnaam" name="user" required><br> <input type="password" placeholder="Wachtwoord" name="password" required><br> <input type="submit" value="Inloggen" name="login" class="btn"> </div> </form> <?php //stop met verder uitvoeren van alle code die hieronder komt exit(); } ////////////////////// Einde blok inlogformulier ?>
Tips, bepaal een juiste volgorde van de scripts denk logisch na welke stappen het eerste uitgevoerd moeten worden.
Let op dat je wel een gebruiker in de database moet hebben zitten. Om gebruikers toe te voegen moet je het script gebruiken van de theorie.