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
Réponse acceptée

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

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

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