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

3 réponses


Jinou
Réponse acceptée

De ce que je vois dans ton code, c'est que tu fais un setFlash (donc tu le créer ) mais tu ne l'affiche pas. Utilise ta fonction getFlash.

sty
Auteur

salut Jinou,
Oui au final me manque le principal affiché mon flash, j'ai regarder un peu et à force de faire des changements en étant fatigué, bah j'ai zapper un block de lignes :)


   <?php if(Session::getInstance()->hasFlashes()): ?>
    <?php foreach(Session::getInstance()->getFlashes() as $type => $message): ?>
      <div class="alert alert-<?= $type; ?>">
        <?= $message; ?>
      </div>  

    <?php endforeach; ?>

  <?php endif; ?>

Pk la fatigue existe?
D'habitude , je vais me coucher et le lendemain se qui me prenais la tête des heures la soirée ,c'est vite réglé au réveil.
Mais merci d'avoir donné ton avis sur mon problème

C'était pas un avis, mais la solution :p