Voordat er ingelogd kan worden moet een gebruiker zich natuurlijk kunnen registreren. Hieronder de code voor een complete registratie van een gebruiker. De gegevens worden opgeslagen in een SQL-tabel.
<?php
//====================================== SESSIE CONTROLE
//Als een gebruiker al in een sessie zit dan is hij al geregistreerd.
session_start(); 
if(isset($_SESSION['id'])) {
   header("location: manage.php");
   exit;
}
//====================================== VARIABELEN
//Deze variabele wordt gebruikt om meldingen op het scherm te tonen
//! kan worden veranderd door register_user.php
if (!isset($_SESSION['register_message']))
{
   $_SESSION['register_message'] = "";
}
?>
<!DOCTYPE html>
<html lang="nl">
<head>
   <meta charset="UTF-8">
   <title>Registreren</title>
   <link rel="stylesheet" type="text/css" href="css/w3.css" />
</head>
<body class="w3-content" style="max-width:600px">
   <div class="w3-container w3-center">
      <h2 class="w3-blue w3-center w3-margin-top">Registeren</h2>
      <?php echo $_SESSION['register_message'] ?>
      <form class="w3-panel w3-card" method="post" action="register_user.php">
            <input class="w3-input" type="text" class="form-control" name="name" placeholder="Naam">
            <input class="w3-input" type="email" class="form-control" name="email" placeholder="Email">
            <input class="w3-input" type="password" class="form-control" name="password" placeholder="Wachtwoord">
            <input class="w3-input" type="password" class="form-control" name="password_again" placeholder="Wachtwoord nogmaals">
            <br>
         <button type="submit" class="w3-button w3-black w3-round-medium">Registreer</button>
      </form>
   </div>
</body>
</html><?php
//======================================SESSIE START
session_start(); 
//======================================DB CONNECTIE
include("db_connection.php");
//======================================VARIABELEN
$name           = trim(mysqli_real_escape_string($con, $_POST['name']));
$email          = trim(mysqli_real_escape_string($con, $_POST['email']));
$password       = trim(mysqli_real_escape_string($con, $_POST['password']));
$password_again = trim(mysqli_real_escape_string($con, $_POST['password_again']));
$password_hashed = "";
//var_dump($name);var_dump($email);var_dump($$password);var_dump($password_again);
//====================================== CONTROLE INVULVELDEN
//Als er ook maar een veld leeg is, foutmelding
if (empty($email) or empty($name) or empty($password) or empty($password_again))
{
    $_SESSION['register_message']  = "<div class='w3-panel w3-red'>Voer aub alle velden in.</div>";
    header("location: register.php");
    exit;
}
//Komen de wachtwoorden overeen?
if (!($password === $password_again)) 
{
    $_SESSION['register_message']  = "<div class='w3-panel w3-red'>Wachtwoorden komen niet overeen.</div>";
    header("location: register.php");
    exit;
}
//====================================== CONTROLE OF EMAIL NIET AL IN GEBRUIK IS
$query = "SELECT * FROM users WHERE users_email = '$email'";
if (!$result = mysqli_query($con, $query))
{
   exit(mysqli_error($con));
}
if (!mysqli_num_rows($result) == 0)
{
    $_SESSION['register_message']  = "<div class='w3-panel w3-red'>Email is al in gebruik.</div>";
    header("location: register.php");
    exit;
}
//====================================== REGISTREER GEBRUIKER
$password_hashed = password_hash($password, PASSWORD_DEFAULT);
$query = "
  INSERT INTO users
      (
      users_name,
      users_email,
      users_password
      ) 
      VALUES
      (
      '$name', 
      '$email', 
      '$password_hashed'
      )
      ";
if(!mysqli_query($con, $query))
{
    exit(mysqli_error($con));
}
else
    mysqli_close();
{
    $_SESSION['register_message']  = 
   "
   <div class='w3-panel w3-red'>Registreren gelukt, u kunt nu inloggen.<br>
       <a href='index.php' class='w3-button w3-black w3-round-medium'>Login</a>
   </div>
   ";
    header("location: register.php");
    exit;
}
?>