Bonjour,

Voila je rencontre un petit problème avec mon code PHP !

Ce que je fais

Lorsque je suis sur la base de donnée, lors d'une session je change par exemple le nom d'utilisateur par la suite je fais un var_dump ( $ma_variable ) la variable me sors bien mon nom d'utilisateur !

Ce que je veux

J'aimerai lorsque je modifie depuis ma base de donnée le nom d'utilisateur, je recharge la page et la valeur se modifie.

Ce que j'obtiens

Hélas.. Je dois me déconnecter de ma session et me reconnecter pour voir la modification apparaître :(

Quelqu'un aurait la solution? J'ai cherché sur internet mais je crois que je formulais mal ma question du coups j'obtenais de mauvais résultat donc j'ai décidé de posé directement la question.

Merci beaucoup les amis !

21 réponses


Bonjour,
Sans au moins le code de la modification de votre variable, cela est difficile de vous aidez.

Une fois que vous avez modifier votre variable, avez-vous aussi modifier la variable dans la session ?

Bonjour, tout d'abord merci pour votre réponse !
C'est là ou le problème se présente.. Je ne touche pas à la variable. Exemple:

$username = $_SESSION['auth']->username;
var_dump($username);

string(9) "Ahmad"

Jusque là, ok! Je vais ensuite sur la base de donnée je modifie "Ahmad" en "Ahmad2" par exemple je recharge la page la page affiche encore Ahmad et non Ahmad2

Par contre je dois me déconnecter et me reconnecter pour voir la modification, est-il possible de remédier à ça ?

Merci

Oui c'est logique car vous ne mettez pas à jour la variable de session

Ah, et aurais-tu une idée de comment mettre à jour la variable de session?

Tout simplement

$_SESSION['auth']->username = $ma_variable;

Ca ne fonctionne toujours pas :(

Montrer moi le code que vous faite pour modifier votre variable

 <h1>Bonjour <?= $_SESSION['auth']->firstname; ?></h1>

Même en essayant

$_SESSION['auth']->firstname = $prenom;
echo $prenom;

ça ne fonctionne pas !

Merci

il faut le faire, juste après avoir mis à jour la BDD

Toujours le même problème !

Montrer moi le code complet que vous faites pour modifier votre variable

Page account.php

<?php
require 'inc/functions.php';
require 'inc/db.php';
logged_only();
if(!empty($_POST)){

    if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']){
        $_SESSION['flash']['danger'] = "Les mots de passes ne correspondent pas";
    }else{
        $user_id = $_SESSION['auth']->id;
        $password= password_hash($_POST['password'], PASSWORD_BCRYPT);
        require_once 'inc/db.php';
        $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]);
        $_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour";
    }

}
require 'inc/header.php';

?>

    <h1>Bonjour <?= $_SESSION['auth']->firstname; ?></h1>

    <form action="" method="post">
        <div class="form-group">
            <input class="form-control" type="password" name="password" placeholder="Changer de mot de passe"/>
        </div>
        <div class="form-group">
            <input class="form-control" type="password" name="password_confirm" placeholder="Confirmation du mot de passe"/>
        </div>
        <button class="btn btn-primary">Changer mon mot de passe</button>
    </form>

<?php require 'inc/footer.php'; ?>

inc.header.php

<?php
if(session_status() == PHP_SESSION_NONE){
    session_start();
}
?><!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>

<nav class="navbar navbar-inverse">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">Mon super projet</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <?php if (isset($_SESSION['auth'])): ?>
                    <li><a href="logout.php">Se déconnecter</a></li>
                <?php else: ?>  
                    <li><a href="register.php">S'inscrire</a></li>
                    <li><a href="login.php">Se connecter</a></li>
                <?php endif; ?>
            </ul>
        </div><!--/.nav-collapse -->
    </div>
</nav>

<div class="container">

    <?php if(isset($_SESSION['flash'])): ?>
        <?php foreach($_SESSION['flash'] as $type => $message): ?>
            <div class="alert alert-<?= $type; ?>">
                <?= $message; ?>
            </div>
        <?php endforeach; ?>
        <?php unset($_SESSION['flash']); ?>
    <?php endif; ?>

D'accord, et la modification du nom de l'utilisateur se fait où car je ne la vois pas dans votre code ?

Page account.php (première page)

<h1>Bonjour <?= $_SESSION['auth']->firstname; ?></h1>

Non, ça c'est l'affichage.

La modification je la fais directement depuis la base de donnée (pour effectuer des tests)

Dans le bout de code PHP qui permet la modification, il faut recharger la session avec les bonnes info... Autrement, il faudrait faire un appel Ajax toutes les X secondes mais cette solution est à eviter en production...

Mais c'est nouveau ça? Je faisais directement des modifications depuis la base de donnée ensuite je le voyais sur mon site première fois que j'ai ce soucis je comprends pas..

Je ne m'y connais vraiment pas du tout en Ajax je suis un peu dégoûté qu'il y ait une réel modification à faire alors que je souhaite que les changements au niveau de la BDD s'affiche sur le compte. Donc si il y a un UPDATE qui se passe sur une page il faudra que l'utilisateur se déconnecte et se reconnecte pour voir la modification?

Pourriez-vous me guider par rapport à l'Ajax?

Merci beaucoup !

Pas forcement, tu peux faire une fonction qui à chaque chargement de page cherche le nom d'utilisateur dans la base de données

Tu peux me donner des exemples Nicolas?

Merci

comment veut tu mettre à jour cette variable?
$_SESSION['auth']->firstname;

je ne vois pas de select mysql dans ton code