message flash qui ne s'affiche pas

Par AaFrederic Husson, il y a 6 ans


bonjour,

pour mon système d'inscription j'utilise les messages flash pour confirmer la validation de l'inscription cependant celui ci ne s'affiche pas
si je supprime le if et endif ça fonctionne, j'utilise wamp et php 7.1.9
voici ma page register

<?php session_start(); require ('config/constants.php'); require ('model/functions.php'); //Si le formulaire a été soumis if (isset($_POST['register'])) { extract($_POST); //Si tous les champs ont été remplis if (not_empty(['pseudo', 'genre', 'email', 'password', 'confirm'])) { $errors = []; if (mb_strlen($pseudo) < 3) { $errors[] = 'Pseudo trop court! (Minimum 3 caractères)'; } if (empty($genre)) { $errors[] = 'Veuillez préciser votre genre!'; } if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Adresse email invalide!'; } if (mb_strlen($password) < 3) { $errors[] = 'mot de passe trop court! (Minimum 3 caractères)'; } if ($password != $confirm) { $errors[] = 'Les deux mots de passe ne concordent pas!'; } if (is_already_in_use('pseudo', $pseudo, 'users')) { $errors[] = 'Pseudo déjà utilisé!'; } if (is_already_in_use('email', $email, 'users')) { $errors[] = 'Adresse email déjà utilisé!'; } if (count($errors) == 0) { //envoie du mail d'actvation $to = $email; $subject = WEBSITE_NAME." - ACTIVATION DE COMPTE"; $token = sha1($pseudo.$email.$password); ob_start(); require ('view/frontend/template/emails/activation.tmpl.php'); $activation = ob_get_clean(); $headers = 'MIME-Version: 1.0' . "\r\n"; $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; mail($to, $subject, $activation, $headers); set_flash("Mail d'activation envoyé!", "success"); } } else { $errors[] = 'Veuillez remplir tous les champs'; } }

ma page functions.php

<?php function dbConnect() { try { $db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USERNAME, DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $db; } catch (PDOException $e) { die('Erreur: '.$e->getMessage()); } } if (!function_exists('not_empty')) { function not_empty ($fields = []) { if (count($fields != 0)) { foreach ($fields as $field) { if (empty($_POST[$field]) || trim($_POST[$field]) == "") { return false; } } return true; } } } if (!function_exists('is_already_in_use')) { function is_already_in_use($field, $value, $table) { $db = dbConnect(); $q = $db->prepare("SELECT id from $table WHERE $field = ?"); $q->execute([$value]); $count = $q->rowCount(); $q->closeCursor(); return $count; } } if (!function_exists('set_flash')) { function set_flash ($message, $type = 'info') { $_SESSION['notification']['message'] = $message; $_SESSION['notification']['type'] = $type; } }

mon template flash.php

<?php if (isset($_SESSION['notifiaction']['message'])): ?> <div class="alert alert-<?= $_SESSION['notification']['type'] ?>"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> <?= $_SESSION['notification']['message']; //$_SESSION['notification']['']; ?> </div> <?php endif; ?>

et la page qui gère les inscriptions:

<?php ob_start(); ?> <main role="main" class="container"> <div class="jumbotron col-sm-6"> <?php include ('view/frontend/template/errors/errors_register.php'); include ('view/frontend/template/flash.php'); ?> <h1>Pas encore membre?</h1> <h2>Inscrivez vous maintenant!</h2> <P> <form method="post"> <div class="form-group"> <label class="control-label" for="pseudo">Choisissez un pseudo:</label> <input type="text" class="form-control" id="pseudo" name="pseudo" required="required"/> </div> <div class="form-group"> <label class="control-label" for="genre">Indiquez votre genre:</label> <select class="form-control" name="genre" id="genre" required="required"> <option value=""></option> <option value="homme">Je suis un homme</option> <option value="femme">Je suis une femme</option> <option value="couple">Nous sommes Un couple</option> </select> </div> <div class="form-group"> <label class="control-label" for="email">Indiquez votre email:</label> <input type="email" class="form-control" id="email" name="email" required="required"/> </div> <div class="form-group"> <label class="control-label" for="password">Choisissez un mot de passe:</label> <input type="password" class="form-control" id="password" name="password" required="required"/> </div> <div class="form-group"> <label class="control-label" for="confirm">Confirmez votre mot de passe:</label> <input type="text" class="form-control" id="confirm" name="confirm" required="required"/> </div> <input class="btn btn-primary" type="submit" name="register" value="Valider ces informations"> </form> </P> </div> </main> <?php $content = ob_get_clean(); require('template/accueil.php');

3 réponses

Carouge10, il y a 6 ans

Bonjour,
C'est quoi une "notifiaction" ?
Je te conseille la fonction var_dump, elle te sera très utilie pour débugger

AaFrederic Husson, il y a 6 ans

ce que je comprend c'est pourquoi dans l'état actuel ça ne fonctionne pas
voir ci-dessous

<?php if (isset($_SESSION['notifiaction']['message'])): ?> <div class="alert alert-<?= $_SESSION['notification']['type'] ?>"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> <?= $_SESSION['notification']['message']; //$_SESSION['notification']['']; ?> </div> <?php endif; ?>

par contre si je supprime le if ça s'affiche sans problèmes

<div class="alert alert-<?= $_SESSION['notification']['type'] ?>"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> <?= $_SESSION['notification']['message']; //$_SESSION['notification']['']; ?> </div> <?php
Carouge10, il y a 6 ans

lis bien ce que j'ai marqué....