PHP Inloggen met wachtwoord tekstbestand

Hier wat stukken code waarmee je kunt zorgen dat er door een beheerder kan worden ingelogd maar dat het zijn wachtwoord (gecodeerd) in een tekstbestand staat. Zo kun je snel een inlogsysteem opzetten zonder dat je sql hoeft te gebruiken. De code is in de praktijk getest en werkt prima.

Gebruik dit als er achter je website bijvoorbeeld een simpel beheersysteem zit waar een beheerder wat prijzen wil aanpassen van artikelen. Gebruik dit niet voor websites waar de beveiliging hoger moet zijn en als er met gevoelige gegevens wordt gewerkt.

Index

Startpagina

De startpagina is hier index.php waar uitgezocht wordt wie je bent. Als je al bent ingelogd wordt je gelijk doorgestuurd naar manage.php (die je zelf mag maken verder...).

<?php
session_start(); 

//** SESSIE CHECK
//Als de gebruiker al is aangemeld, dan naar beheerspagina
if($_SESSION['name'])
{
   header("location: manage.php");
   exit;
}

//** VARIABELE VOOR BERICHT OP SCHERM
$error_message = ""; 


//** CHECK OF FORMULIER AL IS INGEVULD
if(isset($_POST['email']) && isset($_POST['password']))
{
   //** CHECK OF EMAIL EN WACHTWOORD NIET LEEG ZIJN
   if($_POST['email'] == "" && $_POST['password'] == "")
   {
      $error_message = "Vul uw email en uw wachtwoord in.";
   }
   else
   {
      //** INVOER SCHOONMAKEN EN OMZETTEN
      $email = mysqli_real_escape_string($_POST['email']);
      $password = md5($_POST['password']);
      
      //** WACHTWOORDBESTAND OPENEN EN AANMAKEN VARIABELEN
      // Het wachtwoordbestand bestaat uit drie regels:
      // naam
      // email
      // wachtwoord (omgezet met md5 encryptie)
      $password_file = fopen('.pw.txt','r') or die('Wachtwoordbestand niet gevonden...');
      // naam
      $name = fgets($password_file);
      // email
      $email = fgets($password_file);
      // lees wachtwoord
      $password_saved = fgets($password_file);
      // sluit wachtwoordbestand
      fclose($password_file);

      //** NU CONTROLEREN OF INGEVOERD WACHTWOORD OVEREEN KOMT MET WACHTWOORD UIT BESTAND
      if( $password == $password_saved)
      {
         //** AANMAKEN SESSIE VARIABELEN
            $_SESSION['name'] =  $name;
            $_SESSION['email'] = $email;

         //** DOORSTUREN NAAR DE BEVEILIGDE PAGINA
         header("location: manage.php");
         exit;
      }
      else
      {
         //** LOGIN FOUT
         $error_message = "Foute login... probeer het opnieuw.";
      }
   }
}
?>
<!-- START HTML PAGINA -->
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Login</title>

   <!-- BOOTSTRAP CSS 
   In dit voorbeeld gebruik ik Bootstrap maar je kan natuurlijk ook je eigen css gebruiken
   -->
   <link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
</head>
<body>
   <div class="container">
        <div class="row">
            <div class="col-md-6">
            <div class="well">
               <h2>Website Admin Login</h2>
            </div>
            </div>
            <div class="col-md-6"></div>
        </div>
      <div class="row">
         <div class="col-md-6">
            <form method="post" action="index.php">
               <div class="form-group">
                  <?php 
                     //** TONEN FOUTMELDING
                     echo $error_message 
                  ?>
               </div>
               <div class="form-group">
                  <label for="email">Email</label>
                  <input type="email" class="form-control" name="email">
               </div>
               <div class="form-group">
                  <label for="password">Wachtwoord</label>
                  <input type="password" class="form-control" name="password">
               </div>
               <div class="form-group">
                  <button type="submit" class="btn btn-warning">Login</button>
               </div>
            </form>
         </div>
         <div class="col-md-6"></div>
      </div>
   </div>
   <!-- Jquery JS
   Ik gebruik hier jQuery, maar ook geen verplichting uiteraard
   -->
   <script type="text/javascript" src="js/jquery.min.js"></script>
</body>
</html>

Registreren en wachtwoord aanmaken voor een gebruiker

Je zag hierboven dat de naam, email en het wachtwoord werdt ingelezen, maar je zal dit natuurlijk een keertje moeten aanmaken. Goed nieuws: je hoeft dit niet met de hand te doen, gebruik hiervoor onderstaande code. De data wordt uit het formulier gelezen en doorgestuurd naar register_user.php.

<?php
//**START SESSIE
session_start();
//** CONTROLE OF JE AL INGELOGD BENT
// Als je een gebruiker zelf laat registreren, dan is het verstandig om te controleren of deze al ingelogd is. 
// Er wordt hieronder gecontroleerd op de naam van de beheerder. 
if(isset($_SESSION['name'])) {
   header("location: manage.php");
   exit;
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Registreer</title>
    
   <!-- BOOTSTRAP -->
   <link rel="stylesheet" type="text/css" href="css/bootstrap.css" />
</head>
<body>
<div class="container">
   <p>
      <a href="index.php">Login</a>
   </p>

   <div class="row">
      <div class="col-md-6">
         <h2>Register</h2>
         <div class="form-group">
            <label for="name">Naam</label>
            <input type="text" class="form-control" placeholder="Naam" id="name">
         </div>
         <div class="form-group">
            <label for="email">Email</label>
            <input type="email" class="form-control" placeholder="Email" id="email">
         </div>
         <div class="form-group">
            <label for="password">Wachtwoord</label>
            <input type="password" class="form-control" placeholder="Wachtwoord" id="password">
         </div>
         <div class="form-group">
            <label for="confirm_password">Bevestig wachtwoord</label>
            <input type="password" class="form-control" placeholder="Bevestig wachtwoord" id="confirm_password">
         </div>
         <div class="form-group">
            <!-- HIER WORDT ONS EIGEN STUKJE JAVASCRIPT GEACTIVEERD -->
            <button onclick="register()" class="btn btn-primary">Registreer</button>
         </div>
      </div>
      <div class="col-md-6"></div>
   </div>
</div>
<!-- ONS EIGEN JAVASCRIPT, CODE VERDER OP DEZE PAGINA -->
<script src="js/script.js"></script>
<!-- JQUERY -->
<script src="js/jquery.min.js"></script>
</body>
</html>

Eigen stukje Javascript voor registratie

Als je nog wakker bent zal het je opgevallen zijn dat er boven een stukje Javascript script.js wordt geactiveerd met daarin de functie register(). Hieronder de code.

function register() {
   var name = $("#name").val();
   var email = $("#email").val();
   var password = $("#password").val();
   var confirm_password = $("#confirm_password").val();
 
   if(name == "") {
      alert("Voer aub uw naam in.");
      } else if(email == "") {
         alert("Voer aub uw email in.");
      } else if(password == "") {
         alert("Voer aub uw wachtwoord in.");
      } else if(confirm_password == "") {
         alert("Bevestig aub uw wachtwoord.");
      } else if(confirm_password != password) {
         alert("De wachtwoorden komen niet overeen...");
      } else {
         $.post("register_user.php", {
         name: name,
         email: email,
         password: password
         }, function(data, status){
         alert(data);
         $(".form-control").val('');
      });
   }
}

De registratiegegevens doorsturen naar een php bestand en opslaan

De bovenstaande code wordt doorgestuurd naar register_user.php. Dit is een simpel stukje php wat de gegevens opslaat in een tekstbestand. Het wachtwoord wordt gecodeerd dus is niet direct leesbaar. Het wachtwoordbestand wordt verborgen doordat er een punt voor de bestandsnaam wordt gezet.

Het wachtwoordbestand staat hier overigens in de root-directory, ik beveel aan om dit in een aparte directory te zetten met een beetje algemene naam zoals common of sub, dit geeft bij het scannen van je directory niet direct prijs waar iets staat.

<?php
//** INLEZEN VARIABELEN
//Deze variabelen komen vanuit de Javascript functie register()
$name = $_POST['name'];
$email = $_POST['email'];
$password = md5($_POST['password']);

//**OPENEN VAN HET WACHTWOORDBESTAND
$password_file = fopen('.pw.txt','w');

//**DE GEGEVENS IN HET WACHTWOORDBESTAND SCHRIJVEN
fwrite($password_file,"{$name}\n");
fwrite($password_file,"{$email}\n");
fwrite($password_file,"{$password}");

//**SLUIT HET WACHTWOORDBESTAND
fclose($password_file);

//**MELDING OP HET SCHERM DAT ALLES GOED IS VERLOPEN
echo "Succesvolle registratie, u kunt nu inloggen.";
?>