Bonjour,

Je suis en train de m'arracher les cheveux. J'ai un backoffice dans lequel j'appelle une page pour créer les utilisateurs. Cette page apparaît au-dessus du backoffice, avec en fond le BO en mode blur. L'effet est cool seulement l'apparition est conditionné à une variable que je n'arrive pas à unset, que ce soit une variable en dur ou une variable en session.
Merci par avance pour votre aide.

Le code de la vue du backoffice

<?php 
$uri = $_SERVER['REQUEST_URI'];
?>

<h1>Backoffice</h1>

<div class="bck-container">
    <div class="bck-menu">

        <div class="home bck-menu-title">
            <a href="<?= $router->generate('home'); ?>">Accueil</a>
        </div>
        <div class="creation bck-menu-title">
                <a href="<?php 
                    ob_start();
                    require_once '../templates/createuser.php';
                    $_SESSION['u_create']=ob_get_clean();
                ?>">Créer un utilisateur</a>
        </div>
        <div class="deconnexion bck-menu-title">
            <a href="<?= $router->generate('deconnexion'); ?>">Se deconnecter</a>
        </div>
        <?php 
            if(!empty($_SESSION['u_create'])):
                echo $_SESSION['u_create'];
            else:
                $router->generate('backoffice');
            endif;
        ?>
    </div>

</div>

Le code du contrôleur du backoffice

<?php 

    if(session_status()===PHP_SESSION_NONE):
        session_start();
        $_SESSION['username'];
        $_SESSION['userlogin'];
        $_SESSION['u_create'];
    endif;

    if(empty($_SESSION['u_create'])):
        dump($_SESSION);
        require_once '../utils/backoffice/backoffice.php';
    else:
        dump($_SESSION);
        require_once '../utils/backoffice/backoffice.php';
    endif;

Le code de la vue du formulaire

<?php

use App\user\Search;

$title = "Création d'un utilisateur";

$searchservice = new Search();
$dataservice = $searchservice->search('services');
$datafonction = $searchservice->search('fonctions');
$datarole = $searchservice->search('roles');

?>

<div class="create-container">
    <span class="create-closebtn" onclick="this.parentElement.style.display='none';">&times;</span> 
    <?php if(isset($_POST['password'])): 
        if ($_SESSION['username'] === $_POST['last_name']):?>
            <div class="alert">
                <span class="closebtn" onclick="this.parentElement.style.display='none';">&times;</span> 
                Un compte existe déjà.
            </div>
            <?php elseif($_SESSION['userlogin'] === $_POST['log_in']): ?>
                <div class="alert">
                    <span class="closebtn" onclick="this.parentElement.style.display='none';">&times;</span> 
                    Ce nom d'utilisateur est déjà pris.
                 </div>
            <?php else: ?>
                <div class="alert">
                    <span class="closebtn" onclick="this.parentElement.style.display='none';">&times;</span> 
                    Une erreur est survenue.
                </div>
        <?php endif ?>
    <?php
    endif;
    ?>
    <div class="form-group">
        <h1>Création d'un utilisateur:</h1>
        <form action="" method='POST'>
            <div class="required">
                <label for="first_name">Prénom</label>
                <input type="text" name="first_name" placeholder="Votre prénom" required/>
            </div>
            <div class="required">
                <label for="last_name">Nom</label>
                <input type="text" name="last_name" placeholder="Votre nom" required/>
            </div>
            <div class="required">
                <label for="log_in">Identifiant</label>
                <input type="text" name="log_in" placeholder="Votre identifiant" required/>
            </div>
            <div class="required">
                <label for="password">Mot de passe</label>
                <input type="password" name="password" placeholder="Votre mot de passe" required/>
            </div>
            <div class="required">
                <label for="e_mail">E-mail</label>
                <input type="email" name="e_mail" placeholder="Votre e-mail" required/>
            </div>
            <div class="required">
                <label for="service">Service</label>
                <select name="service" id="service" required>
                    <option value="">--- Choisissez le service ---</option>
                    <?php foreach($dataservice as $value):?>
                        <option value="<?= $value?>"><?= $value?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="required">
                <label for="fonction">Fonction</label>
                <select name="fonction" id="fonction" required>
                    <option value="">--- Choisissez le service ---</option>
                    <?php foreach($datafonction as $k => $value):?>
                        <option value="<?= $value?>"><?= $value?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="not-required">
                <label for="right">Droits</label>
                <select name="right" id="right">
                    <option value="">--- Choisissez le service ---</option>
                    <?php foreach($datarole as $k => $value):?>
                        <option value="<?= $value?>"><?= $value?></option>
                    <?php endforeach;?>
                </select>
            </div>
            <div class="form-submit">
                <button class="btn-submit click-animation" type="submit" value="S'inscrire" >S'inscrire</button>
            </div>
        </form>
    </div>
</div>

Le code du contrôleur du formulaire

<?php

use App\user\Create;
use App\user\Search;

if(!isset ($_POST['log_in']) && !isset ($_POST['password'])){
        require_once '../utils/user/creation.php';        
}else{

    $u_fname = htmlentities($_POST['first_name']);
    $u_lname = htmlentities($_POST['last_name']);
    $u_log = htmlentities($_POST['log_in']);
    $u_pass = htmlentities(hash('sha256', $_POST['password']));
    $u_mail = htmlentities($_POST['e_mail']);

    $datauser= [
        $u_fname,
        $u_lname, 
        $u_log,
        $u_pass,
        $u_mail];
    $finduser = new Search;
    $search = $finduser->searchUser($datauser);

    if($search !==true):
        $newuser = new Create();
        $user_created = $newuser->createUser($datauser);

        if($user_created === true){
            echo "L'utilisateur a bien été créé!";
            $u_create = null;
        }else{
            require_once '../utils/user/creation.php';
        };
    else:
        require_once '../utils/user/creation.php';
    endif;
};

5 réponses


Bonjour.
Pour commencer, j'aimerais comprendre ce que ferais le contenu d'une page en valeur d'un attribut href.
Ensuite, quel est l'intérêt de sauvegarder en session le contenu d'un fichier PHP ?
(Tout ceci rien que dans le premier bloc de code.)
Pour finir, tu devrais revoir comment on défini une valeur à une variable, car le code suivant (du deuxième bloc de code) est incorrect:

$_SESSION['username'];
$_SESSION['userlogin'];
$_SESSION['u_create'];

Hello Lartak,
Alors comme je l'ai dit je souhaite faire apparaître une page (le formulaire de création des utilisateurs) au dessus du backoffice. Exemple
Le seul moyen que j'ai trouvé avec mes pauv' connaissances c'est de lancé en buffer le contenu de la page et comme la page se lance depuis un lien.
Au vue des problème que j'ai avec mes variables de sessions j'imagine bien que je déclare mal mes variables.
En fait j'ai jamais bosser avec autant de fichiers et d'imbrication de fichier. Du coup, j'ai un peu de mal à suivre la route de mes variables et de comprendre quand elles persistent et quand elles sont détruitent.
A l'originie je voulais passer le contenu de la page dans une variable basique et non de session. Mais j'ai pas réussi.
A l'heure actuelle, j'ai un système D qui fonctionne avec un seul petit bug.
Si tu as des conseils à me donner pour faire ce que je souhaite sans passer par du JS.

Cordialement

Alors le lien que tu donnes de Facebook est incorrect : Désolé, ce contenu n’est pas disponible actuellement.
Donc soit la page où mène le lien n'existe pas ou alors elle n'est pas visible publiquement.
Ensuite, le fait de mettre du code PHP en valeur d'un attribut href ne veut pas dire que le code PHP ne sera exécuté que lors du click du lien, étant donné que le code PHP est exécuté avant même que le code HTML ne soit affiché à l'utilisateur.
Si tu veux faire un système de modale lors du clic sur le lien, il te faut forcément utiliser du JavaScript, tu ne peux pas le faire juste avec du PHP.
Tu dis ne pas vouloir utiliser du JavaScript pour ceci, sauf que tu utilises déjà du JavaScript, et ce dans le troisième bloc de code.
Au passage, au lieu de retranscrire à chaque fois le même code JavaScript en valeur d'un attribut HTML, il serait plus judicieux de le transcrire en JavaScript lors de l'event du clic par l'utilisateur, étant donné qu'à chaque fois l'élément HTML à toujours le même nom de classe closebtn.

je comprends ce que tu me dis. Il y a un code Js pour un bouton qui ferme la fenêtre. Je vais pas mettre de js parce que je suis en train d'apprendre le php et je ne veux pas rajouter une difficultés à la difficultés. D'autant plus que ce que je fais fonctionne il y a juste un problème de portée de variable. Mais si tu me dis que c'est moins casse tête de passer par du js alors je m'y mettrai parce que c'est la feature principale de mon site.

Edit:
J'ai trouvé une solution qui me permet de faire ce que je veux sans JS. Regarde ici:
https://codepen.io/peiche/pen/vhqym

Bonjour,

J'ai ajouté un modal en JS et effectivement c'est tellement plus simple quand on comprend comment l'intégrer. Je te remercie pour tes conseils.
Juste une dernière question, j'ai intégré le JS d'un dev de codepen, où dois-je le crédité? Au niveau du fichier du script ou ailleurs?

Cordialement