Bonjour,

Je me heurte a un problème très déstabilisant concernant le rafraichissent des données après l'envoi d'un formulaire PHP. Je m'explique : je voudrais créer une page ou l'utilisateur pourrait modifier son avatar (page ACCOUNT), mais apres quelques tests, je me rends compte que l'image ne s'actualise pas.
Voici mon code:

<?php
    session_start();

    require_once 'inc/db.php';
    require_once 'inc/functions.php';

    if(!empty($_FILES)){
        if($_FILES['avatar']['error'] == 0){

            $ext = explode('.', $_FILES['avatar']['name']);
            $filename = str_rand(20) . "." . $ext[1];
            $_FILES['avatar']['name'] = $filename;

        debug($_SESSION['auth']['avatar']);
            $req = $pdo->prepare('UPDATE users SET avatar = ? WHERE id = ?');
            $req->execute([$filename, $_SESSION['auth']['id']]);
        debug($_SESSION['auth']['avatar']);

            /*$target = "usr/";
            $action = move_uploaded_file($_FILES['avatar']['tmp_name'],$target . $_FILES['avatar']['name']);
            header('location: account.php');*/
        }
    }
?>

<div class="container">
    <div class="row">
        <div class="col-12-12">
            <h1>Mon compte</h1>
        </div>
        <div class="col-12-12">
            <div class="profil-username"><?= $_SESSION['auth']['username'] ?></div>
        </div>

        <div class="sp"></div>

        <div class="col-4-12">
            <span class="profil-img"><img src="<?= 'usr/' . $_SESSION['auth']['avatar'] . '?r=' . str_rand(10) ?>"></span>
            <!--<?= debug($_SESSION['auth']); ?>-->
        </div>

        <div class="col-8-12">
            <form action="" method="POST" enctype="multipart/form-data">

                <label class="form_lbl" for="avatar">Avatar</label>
                <input class="form_input" type="file" name="avatar"/>

                <button type="submit" class="btn">Modifier l'avatar</button>
            </form>
        </div>

    </div>

J'ai tenté de cibler l'erreur mais rien que les deux 'debug($_SESSION['auth']['avatar']);' avant et après la requete SQL me donnent deux fois le même résultat:
default.jpg
default.jpg

Je ne sais plus trop ou chercher.
Merci d'avance ;)

1 réponse


Micka Jack's
Auteur
Réponse acceptée

j'ai trouvé une parade a ce problème (très rapidement je vous l'accorde). Pour ceux qui ont le même probleme, j'ai ajouté le bout de code suivant pour "réactualiser" le $_SESSION['auth'] :

                $req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
                $req->execute([$_SESSION['auth']['id']]);
                $user = $req->fetch();
                $_SESSION['auth'] = $user;

ce qui donne :

    <?php
        session_start();

        require_once 'inc/db.php';
        require_once 'inc/functions.php';

        if(!empty($_FILES)){
            if($_FILES['avatar']['error'] == 0){

                $ext = explode('.', $_FILES['avatar']['name']);
                $filename = str_rand(20) . "." . $ext[1];
                $_FILES['avatar']['name'] = $filename;

                $req = $pdo->prepare('UPDATE users SET avatar = ? WHERE id = ?');
                $req->execute([$filename, $_SESSION['auth']['id']]);

                $req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
                $req->execute([$_SESSION['auth']['id']]);
                $user = $req->fetch();
                $_SESSION['auth'] = $user;

                $target = "usr/";
                $action = move_uploaded_file($_FILES['avatar']['tmp_name'],$target . $_FILES['avatar']['name']);
                header('location: account.php');
            }
        }
    ?>

Pour ma part, c'est un peu dégeulasse mais ca marche. Si vos avez d'autres idées, je suis preneur.
A bientot ;)