Skip to content
Snippets Groups Projects
Commit 2abe7682 authored by Adrien KRÄHENBÜHL's avatar Adrien KRÄHENBÜHL
Browse files

Ajout d'un correction du TP3

parent fe3e2dd6
Branches
No related merge requests found
<?php
session_start();
if ( empty($_SESSION['user']) )
{
header('Location: signin.php');
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Account</title>
</head>
<body>
<p>
Hello <?= $_SESSION['user'] ?> !<br>
Welcome on your account.
</p>
<p><a href="signout.php">Sign out</a></p>
<?php if ( !empty($_SESSION['message']) ) { ?>
<section>
<p><?= $_SESSION['message'] ?></p>
</section>
<?php } ?>
</body>
</html>
<?php
/******************************************************************************
* Initialisation.
*/
session_start();
unset($_SESSION['message']);
/******************************************************************************
* Traitement des données de la requête
*/
// 1. On vérifie que la méthode HTTP utilisée est bien POST
if ( $_SERVER['REQUEST_METHOD'] != 'POST' )
{
header('Location: signup.php');
exit();
}
// 2. On vérifie que les données attendues existent
if ( empty($_POST['login']) || empty($_POST['password']) || empty($_POST['confirm']) )
{
$_SESSION['message'] = "Some POST data are missing.";
header('Location: signup.php');
exit();
}
// 3. On sécurise les données reçues
$login = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
$confirm = htmlspecialchars($_POST['confirm']);
// 4. On vérifie que les deux mots de passe correspondent
if ( $password !== $confirm )
{
$_SESSION['message'] = "The two passwords differ.";
header('Location: signup.php');
exit();
}
/******************************************************************************
* Initialisation de l'accès à la BDD
*/
try {
require_once('bdd.php');
$pdo = new PDO($SQL_DSN);
}
catch( PDOException $e ) {
$_SESSION['message'] = 'PDO error : '.$e->getMessage();
header('Location: signup.php');
exit();
}
/******************************************************************************
* Ajout de l'utilisateur
*/
// 1. On prépare la requête
$request = $pdo->prepare( "INSERT INTO Users(login,password) VALUES (:login,:password)" );
// 2. On assigne les paramètres nommés
$ok = $request->bindValue( ":login", $login, PDO::PARAM_STR );
$ok &= $request->bindValue( ":password", password_hash($password,PASSWORD_DEFAULT), PDO::PARAM_STR );
// 3. On exécute la requête
$ok &= $request->execute();
// 4. On vérifie que la requête s'est executée sans erreur
if ( !$ok )
{
$_SESSION['message'] = "Account creation error, try again.";
header('Location: signup.php');
exit();
}
// 5. On indique que le compte a bien été créé
$_SESSION['message'] = "Account created! Now, signin.";
// 6. On sollicite une redirection vers la page d'accueil
header('Location: signin.php');
exit();
<?php
/******************************************************************************
* Initialisation.
*/
session_start();
unset($_SESSION['message']);
/******************************************************************************
* Traitement des données de la requête
*/
// 1. On vérifie que la méthode HTTP utilisée est bien POST
if ( $_SERVER['REQUEST_METHOD'] != 'POST' )
{
header('Location: signin.php');
exit();
}
// 2. On vérifie que les données attendues existent
if ( empty($_POST['login']) || empty($_POST['password']) )
{
$_SESSION['message'] = "Some POST data are missing.";
header('Location: signin.php');
exit();
}
// 3. On sécurise les données reçues
$login = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
/******************************************************************************
* Initialisation de l'accès à la BDD
*/
try {
require_once('bdd.php');
$pdo = new PDO($SQL_DSN);
}
catch( PDOException $e ) {
$_SESSION['message'] = 'BDD error : '.$e->getMessage();
header('Location: signin.php');
exit();
}
/******************************************************************************
* Authentification
*/
// 1. On prépare la requête
$request = $pdo->prepare( "SELECT password FROM Users WHERE login = :login" );
// 2. On assigne les paramètres nommés
$ok = $request->bindValue( ":login", $login, PDO::PARAM_STR );
// 3. On exécute la requête
$ok &= $request->execute();
// 4. On vérifie que la requête s'est executée sans erreur
if ( !$ok )
{
$_SESSION['message'] = "Error during execute().";
header('Location: signin.php');
exit();
}
// 5. On récupère la 1ère ligne du résultat de la requête
$user = $request->fetch();
// 6. On vérifie que l'utilisateur a été trouvé
if ( !$user )
{
$_SESSION['message'] = "Wrong login.";
header('Location: signin.php');
exit();
}
// 7. On vérifie que le mot de passe de la BBD correspond
// au mot de passe transmis en POST
if ( !password_verify($password,$user['password']) )
{
$_SESSION['message'] = "Wrong password.";
header('Location: signin.php');
exit();
}
// 8. On sauvegarde le login dans la session
$_SESSION['user'] = $login;
// 9. On sollicite une redirection vers la page du compte
header('Location: account.php');
exit();
<?php
// Nom du fichier du fichier de BDD SQLite sur le serveur
$sqliteFile = $_SERVER['DOCUMENT_ROOT'].'/tp3.db';
// Exception si le fichier n'existe pas
if ( !file_exists($sqliteFile) )
throw new PDOException("DB file '".$sqliteFile."' doesn't exist");
// Varibale contenant le DSN de la BDD SQLite
$SQL_DSN = 'sqlite:'.$sqliteFile;
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Signin</title>
</head>
<body>
<h1>Signin</h1>
<form action="authenticate.php" method="post">
<label for="login">Login</label> <input type="text" id="login" name="login" required autofocus>
<label for="password">Password</label><input type="password" id="password" name="password" required>
<input type="submit" value="Signin">
</form>
<p>
If you don't have an account, <a href="signup.php">signup</a> first.
</p>
<?php if ( !empty($_SESSION['message']) ) { ?>
<section>
<p><?= $_SESSION['message'] ?></p>
</section>
<?php } ?>
</body>
</html>
<?php
session_start();
session_destroy();
header('Location: signin.php');
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Signup</title>
</head>
<body>
<h1>Signup</h1>
<form action="adduser.php" method="post">
<label for="login">Login</label> <input type="text" id="login" name="login" required autofocus>
<label for="password">Password</label> <input type="password" id="password" name="password" required>
<label for="confirm">Confirm password</label><input type="password" id="confirm" name="confirm" required>
<input type="submit" value="Signup">
</form>
<p>
If you already have an account, <a href="signin.php">signin</a>.
</p>
<?php if ( !empty($_SESSION['message']) ) { ?>
<section>
<p><?= $_SESSION['message'] ?></p>
</section>
<?php } ?>
</body>
</html>
File added
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment