Bonjour,
Voila je rencontre un petit problème avec mon code.
Pour commencer, j'ai terminé le tuto de gestion membre et suis passé direct sur la refactorisation.
Quelque erreurs sur la fin du tuto que j 'ai réglé.
Mais la je pense faire une crise, comme à mon habitude , j'aime trouver mes erreurs mais la trop de fatigue je pense :)
Mon header (il contient connexion deconnexion, le message de bonjour et fais le changement quand membre connecté.
`<?php
require_once 'inc/bootstrap.php';
$auth =App::getAuth();
$db = App::getDatabase();
$auth->connectFromCookie($db);
if(isset($_POST['ConnectValidation'])){
if($auth->user()){
App::redirect('account.php');
}
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password']))
{
$user = $auth->login($db,$_POST['username'],$_POST['password'],isset($_POST['remember']));
$session = Session::getInstance();
if($user)
{
echo "tesconnecte";
$session->setFlash('success','Vous êtes maintenant connecté');
App::redirect('account.php');
}
else
{
echo "tespas connecte";
$session->setFlash('danger','identifiant ou mot de passe incorrecte');
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="">
<meta name="author" content="">
<link rel="icon" href="../../favicon.ico">
<title>Mon super projet</title>
<!-- Bootstrap core CSS -->
<link href="css/app.css" rel="stylesheet">
</head>
<body>
<div id="header" class="navbar-header">
<div class="container">
<div id="gauche">
<a href="login.php"><h1>Header Demo</h1></a>
</div>
<div id="droite">
<?php if (isset($_SESSION['auth'])): ?>
<h1>Bonjour <?= $_SESSION['auth']->username; ?></h1>
<?php else: ?>
<div class="tableconnect">
<form method="POST" action="">
<div class="rowconnect">
<div class="cellconnect1">Pseudo ou email </div>
<div class="cellconnect1">Mot de passe </div>
</div>
<div class="rowconnect">
<div class="cellconnect"><input type="texte" name ="username" /></div>
<div class="cellconnect"><input type="password" name ="password" /></div>
<div class="cellconnect"><button type="submit" name="ConnectValidation" class="btn btn-primary">Se connecter</button></div>
</div>
<div class="rowconnect">
<div class="cellconnect"><label> <input type="checkbox" name ="remember" value="1" />Se souvenir de moi</label></div>
<div class="cellconnect"><label for=""><a class="fontforget" href="forget.php">(J'ai oublié mon mot de passe)</a></label></div>
</div>
</form>
</div>
<?php endif; ?>
</div>
<div id="centre">
<nav id="nav">
<ul>
<?php if (isset($_SESSION['auth'])): ?>
<li><a href="logout.php">Se déconnecter</a></li>
<?php endif; ?>
</ul>
</nav>
</div>
</div>
</div>
`
mon Login dessus deux formulaire (1 qui viens avec le header l'autre qui est le formulaire d'inscription)
<?php
require 'inc/bootstrap.php';
if(isset($_POST['submit_p'])){
if(!empty($_POST))
{
$errors =array();
$db= App::getDatabase();
$validator = new Validator($_POST);
$validator->isAlpha('username',"Votre pseudo n'est pas valide (alphanumérique)");
if($validator->isValid()){
$validator->isUniq('username',$db,'users', 'Ce pseudo est déjà pris');
}
$validator->isEmail('email',"Votre email n'est pas valide");
if($validator->isValid()){
$validator->isUniq('email',$db,'users', 'Cet email est déjà utilsé pour un autre compte');
}
$validator->isConfirmed('password', 'Vous devez rentrer un mot de passe valide');
if($validator->isValid())
{
App::getAuth()->register($db,$_POST['username'], $_POST['password'], $_POST['email']);
Session::getInstance()->setFlash('success','Un email de confirmation vous a été envoyé pour valider votre compte');
App::redirect('login.php');
}
else
{
$errors =$validator->getErrors();
}
}
}
?>
<?php require 'inc/phpheader.php'; ?>
<?php require 'inc/header.php'; ?>
<div class="corps">
<div class="errors">
<?php if(!empty($errors)): ?>
<div class="alert alert-danger">
<p>Vous n'avez pas rempli le formulaire correctement</p>
<ul>
<?php foreach($errors as $error): ?>
<li> <?= $error; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?></div>
<div id="colonne1">
</div>
<div id="colonne2">
<h1>Pas encore inscris n'hésitez pas</h1>
<form method="POST" action="">
<div class"form-group">
<label for="">Pseudo</label>
<input type="texte" name ="username" class="form-control" />
</div>
<div class"form-group">
<label for="">Email</label>
<input type="email" name ="email" class="form-control" />
</div>
<div class"form-group">
<label for="">Mot de passe</label>
<input type="password" name ="password" class="form-control" />
</div>
<div class"form-group">
<label for="">Confirmez votre mot de passe</label>
<input type="password" name ="password_confirm" class="form-control"/>
</div>
<button type="submit" name="submit_p" class="btn btn-primary">M'inscrire</button>
</form>
</div>
</div>
<?php require 'inc/footer.php'; ?>
Mon Session.php
<?php
class Session{
static $instance;
static function getInstance()
{
if(!self::$instance)
{
self::$instance = new Session();
}
return self::$instance;
}
public function __construct()
{
session_start();
}
public function setFlash($key,$message){
$_SESSION['flash'][$key] =$message;
}
public function hasFlashes(){
return isset($_SESSION['flash']);
}
public function getFlashes(){
$flash = $_SESSION['flash'];
unset($_SESSION['flash']);
return $flash;
}
public function write($key,$value){
$_SESSION[$key]= $value;
}
public function read($key){
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}
public function delete($key){
unset($_SESSION[$key]);
}
}
Mon auth pour montrer juste l echo dans le login qui passe aussi
public function login($db, $username, $password, $remember = false){
$user = $db->query('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL', ['username' => $username])->fetch();
if($user && password_verify($password, $user->password)){
$this->connect($user);
if($remember){
$this->remember($db, $user->id);
}
return $user;
}else{
echo "return-false";
return false;
}
}
Ce que je veux
Que mes message flash fonctionne pour le connexion
Les message vous etes connecté ou meme les message de validation du formulaire d'inscription etc
if($user)
{
echo "tesconnecte";
$session->setFlash('success','Vous êtes maintenant connecté');
App::redirect('account.php');
}
else
{
echo "tespas connecte";
$session->setFlash('danger','identifiant ou mot de passe incorrecte');
}
Ce que j'obtiens
Le système de connection envoi de l'émail et jusque la déconnection tout vas sauf mes message flash.
Ceux du validator fonctionne pour le formulaire d'inscription sur login.
Ceux qui sur la page header ne sont pas reconnus.
Vu que le header est injecté apres les infos php dans le login.php et comme les variables disparaisse si je me trompe pas quand la page change en php.
J'obtiens les echo placé sur le cheminement