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