Problème de rafraîchissement après envoi formulaire

Par Micka Jack's, il y a 9 ans


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, il y a 9 ans

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 ;)