Je zal altijd hebben dat gebruikers moeten inloggen en informatie voor hun neus krijgen waar ze wat mee kunnen doen. Maar eerst zullen ze moeten inloggen en hieronder een voorbeeld hoe je dit kunt doen als een wachtwoord in een sql tabel staat opgeslagen. Daarnaast is deze login beveiligd tegen hack attempts en sql-injection.
<?php
session_start();
//====================================== ERROR REPORTING PHP (DISABLED)
//error_reporting("E_ALL");
//====================================== SQL CONNECTION
include("db_connection.php");
//====================================== SESSIE CHECK
//Als de gebruiker is ingelogd, ga dan naar manage.php
if(isset($_SESSION['id']))
{
header("location: manage.php");
exit;
}
//====================================== VARIABELEN
$error_message = "";
$email = "";
$password_given_by_user = "";
$error=false; //guilty till proven innocent...
//====================================== FORMULIER
//Als: email en wachtwoord ingediend via POST
if(isset($_POST['email']) && isset($_POST['password']))
{
//Spaties verwijderen en email en wachtwoord 'vies' opslaan
$email = trim($_POST['email']);
$password_given_by_user = trim($_POST['password']);
//Als: email en /of wachtwoord leeg zijn.
if($email == "" && $password_given_by_user == "")
{
$error_message = "<div class='w3-panel w3-red'>Voer aub uw email en uw wachtwoord in.</div>";
$error=true;
}
if($error==false)
{
//email en wachtwoord zijn dus niet leeg
//Eventueel ' en " eruit halen.
$email = mysqli_real_escape_string($con, $_POST['email']);
$password_given_by_user = mysqli_real_escape_string($con, $_POST['password']);
//Als deze karakters worden gevonden wordt er zeker geprobeerd om in te breken.
if(strpos($email,";"))
{
die("Hack attempt.");
}
if(strpos($email,"<script>"))
{
die("Hack attempt.");
}
}
//====================================== CONTROLE GEBRUIKERSGEGEVENS
if($error==false)
{
//====================================== SQL GEBRUIKERSGEGEVENS
$stmt = $con->prepare("SELECT users_nr, users_name, users_password FROM users WHERE users_email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows > 0) // numrows >2? Hoeft niet want bij registreren wordt er gecheckt op dubbele emails
{
$stmt->bind_result($id, $name, $password);
$stmt->fetch();
//====================================== CONTROLE WACHTWOORD
if (password_verify($password_given_by_user,$password))
{
session_regenerate_id(); //tegen sessie kapers
//====================================== CLOSE CONNECTION
$stmt->close(); //sluit nu de db connectie
//====================================== SESSIE VARIABELEN MET GEBRUIKERS INFO
$_SESSION['id'] = $id;
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
header("location: manage.php");
exit;
}
else
{
//====================================== CLOSE CONNECTION
$stmt->close();
$error_message = "<div class='w3-panel w3-red'>Wachtwoord Login fout, probeer opnieuw.</div>";
}
}
else
{
//====================================== LOGIN FOUT
$error_message = "<div class='w3-panel w3-red'>Email Login fout, probeer opnieuw.</div>";
}
}
}
//
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" type="text/css" href="css/w3.css<?php echo '?'.mt_rand(); ?>" />
</head>
<body class="w3-content" style="max-width:600px">
<div class="w3-container w3-center">
<h2 class="w3-blue w3-center w3-margin-top">Database Beheer Login</h2>
<?php echo $error_message ?>
<form class="w3-panel w3-card" method="post" action="index.php">
<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">
<button type="submit" class="w3-button w3-black w3-round-medium">Login</button>
</form>
</div>
</body>
</html>