Bonjour,
Voila je rencontre un petit problème avec mon code.
Décrivez ici votre code ou ce que vous cherchez à faire
Mon code php pour mon avatar
if(isset($_POST['change_avatar'])){
if(isset($_FILES['avatar']) AND !empty($_FILES['avatar']['name'])) {
$tailleMax = "2097152";
$extensionsValides = array('jpg', 'jpeg', 'gif', 'png');
if( $_FILES['avatar']['size'] <= $tailleMax) {
$extensionUpload = strtolower(substr(strrchr($_FILES['avatar']['name'], '.'), 1));
if(in_array($extensionUpload, $extensionsValides)) {
$chemin = "membres/avatars/".$_SESSION['auth']->id.".".$extensionUpload;
$resultat = move_uploaded_file($_FILES['avatar']['tmp_name'], $chemin);
if($resultat) {
if(file_exists("./membres/avatars/".$_SESSION['auth']->avatar)){
unlink("./membres/avatars/".$_SESSION['auth']->avatar);
}
$updateavatar = $db->query('UPDATE users SET avatar = :avatar WHERE id = :id',(array(
'avatar' => $_SESSION['auth']->id.".".$extensionUpload,
'id' => $_SESSION['auth']->id
)));
$_SESSION['auth']->avatar = $_SESSION['auth']->id.".".$extensionUpload;
}
else
{
$_SESSION['flash']['danger'] = "Erreur durant l'importation du fichier !";
}
}
else
{
$_SESSION['flash']['danger'] ="Votre photo de profil doit être au format jpg, jpeg, gif ou png!";
}
}
else
{
$_SESSION['flash']['danger'] ="Votre photo de profil ne doit pas dépasser 2 Mo !";
}
}
}
Le code ou se trouve mon avatar
<div class="editavatar">
<div class="editTailleAvatar">
<?php if(!empty($_SESSION['auth']->avatar)){?>
<img src="membres/avatars/<?= $_SESSION['auth']->avatar."?".time() ?>" width="150" height="150">
<?php } else { ?>
<img src="images/avatar_vide3.jpg" width="150" height="150" >
<?php } ?>
<div class="editInputAvatar">
<button class="btn btn-primary" id="btnphoto" onclick= "afficheAvatarBlock()">Changer photo </button>
</div>
</div>
</div>
La div ou se trouve mon changement d'avatar
<form method="POST" action="" enctype="multipart/form-data">
<div class="editAvatarBlock" id="editAvatarBlock">
<div class="editAvatar">
<div class="editInputAvatar">
<div class="fileUpload btn btn-primary">
<span>Edit photo</span>
<input type="file" class="upload" name="avatar" />
</div>
</div>
<div class="btn-right"><button class="btn btn-primary" name="change_avatar">Mettre à jour son avatar</button></div>
</div>
</div>
</form>
que mon avatar ne plante pas :)
Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(
erreur si je suis un nouvel utilisateur et que je désire mettre un avatar au lieu del'avatar par défault
Warning: unlink(./membres/avatars/): Permission denied in C:\wamp64\www\site_chat3\editionprofil.php on line 31
Serait-il possible que cette erreur fais en sorte de ne pas valider le changement car pour effacer l'erreur j 'actualise et c'est comme si il renvoit la demande d'upload et résultat une image vide.
Si je change de page, c'est ok et je déco reco pour verifier et mon avatar toujours la, mais si je désire changer d'avatar à nouveau il me mets une image vide au lieu de la nouvelle image.
Pour le moment mon avatar unlink ne fonctionne pas me crée problème, donc je vais certainement changé de système et faire un Mkdir pour mettre les anciens avatars et les renommer. Du moins , je réfléchi à comment je vais construre l'avatar mais sinon l'avatar fonctionne mais n'efface pas les doublons voir post que j avais crée avant pour .jpg .png etc qui n'efface pas les images sauf si elles sont de la même extentions.
Je termine se sujet.
Pourrait avoir la valeur de ton $_SESSION['auth']->avatar
? Et après il fautdra vérifier les droit du fichiers car tu ne peut peut être tout simplement pas y suprimer !
oui je vais te mettre cela mais le systeme d'avatar fonctionnais quand tout etait dans la meme div
du moins avant les changement que j'ai entrerpris a cause du bouton input que j'ai modifier et celui valider le forulaire me retrouvais avec deux boutons l un en desous de l autre donc pour faire plus jolie une div apparais et la je cherche mon image que je veux upload et je valide.
if(isset($_POST['change_avatar'])){
permet de jongler entre les différent formulaire sur la page et me fais rentrer dans avatar.
Mais bon la c'est juste une explication des mes chanegment et comment je les ai fais :)
$auth =App::getAuth();
Le auth.php
<?php
class Auth{
private $options = [
'restriction_msg' => "Vous n'avez pas le droit d'accéder à cette page"
];
private $session;
public function __construct($session, $options = []){
$this->options = array_merge($this->options, $options);
$this->session = $session;
}
public function hashPassword($password){
return password_hash($password, PASSWORD_BCRYPT);
}
public function register($db, $username, $password, $email){
$password = $this->hashPassword($password);
$token = Str::random(60);
$db->query("INSERT INTO users SET username = ?, password = ?, email = ?, confirmation_token = ?", [
$username,
$password,
$email,
$token
]);
$user_id = $db->lastInsertId();
mail($email, 'Confirmation de votre compte', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://localhost/site_chat3/confirm.php?id=$user_id&token=$token");
}
public function confirm($db, $user_id, $token){
$user = $db->query('SELECT * FROM users WHERE id = ?', [$user_id])->fetch();
if($user && $user->confirmation_token == $token ){
$db->query('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?', [$user_id]);
$this->session->write('auth', $user);
return true;
}
return false;
}
public function restrict(){
if(!$this->session->read('auth')){
$this->session->setFlash('danger', $this->options['restriction_msg']);
header('Location: login.php');
exit();
}
}
public function user(){
if(!$this->session->read('auth')){
return false;
}
return $this->session->read('auth');
}
public function connect($user){
$this->session->write('auth', $user);
}
public function connectFromCookie($db){
if(isset($_COOKIE['remember']) && !$this->user()){
$remember_token = $_COOKIE['remember'];
$parts = explode('==', $remember_token);
$user_id = $parts[0];
$user = $db->query('SELECT * FROM users WHERE id = ?', [$user_id])->fetch();
if($user){
$expected = $user_id . '==' . $user->remember_token . sha1($user_id . 'ratonlaveurs');
if($expected == $remember_token){
$this->connect($user);
setcookie('remember', $remember_token, time() + 60 * 60 * 24 * 7);
} else{
setcookie('remember', null, -1);
}
}else{
setcookie('remember', null, -1);
}
}
}
public function login($db, $username, $password, $remember = false){
$user = $db->query('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL', ['username' => $username])->fetch();
if($user && password_verify($password, $user->password)){
$this->connect($user);
if($remember){
$this->remember($db, $user->id);
}
return $user;
}else{
return false;
}
}
public function remember($db, $user_id){
$remember_token = Str::random(250);
$db->query('UPDATE users SET remember_token = ? WHERE id = ?', [$remember_token, $user_id]);
setcookie('remember', $user_id . '==' . $remember_token . sha1($user_id . 'ratonlaveur'), time()+60*60*24*7);
}
public function logout(){
setcookie('remember', NULL, -1);
$this->session->delete('auth');
}
public function resetPassword($db, $email){
$user = $db->query('SELECT * FROM users WHERE email = ? AND confirmed_at IS NOT NULL', [$email])->fetch();
if($user){
$reset_token = Str::random(60);
$db->query('UPDATE users SET reset_token = ?, reset_at = NOW() WHERE id = ?', [$reset_token, $user->id]);
mail($_POST['email'], 'Réinitiatilisation de votre mot de passe', "Afin de réinitialiser votre mot de passe merci de cliquer sur ce lien\n\nhttp://localhost/site_chat3/reset.php?id={$user->id}&token=$reset_token");
return $user;
}
return false;
}
public function checkResetToken($db, $user_id, $token){
return $db->query('SELECT * FROM users WHERE id = ? AND reset_token IS NOT NULL AND reset_token = ? AND reset_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)', [$user_id, $token])->fetch();
}
}
le app.php
<?php
class App{
static $db =null;
static function getDatabase(){
if(!self::$db){
self::$db = new Database('root','','tuto');
}
return self::$db;
}
static function getAuth(){
return new Auth(Session::getInstance(),['restriction_msg' => 'Lol tu es bloqué !']);
}
static function redirect($page){
header("Location: $page");
exit();
}
}
le session
<?php
class Session{
static $instance;
static function getInstance()
{
if(!self::$instance)
{
self::$instance = new Session();
}
return self::$instance;
}
public function __construct()
{
session_start();
}
public function setFlash($key,$message){
$_SESSION['flash'][$key] =$message;
}
public function hasFlashes(){
return isset($_SESSION['flash']);
}
public function getFlashes(){
$flash = $_SESSION['flash'];
unset($_SESSION['flash']);
return $flash;
}
public function write($key,$value){
$_SESSION[$key]= $value;
}
public function read($key){
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}
public function delete($key){
unset($_SESSION[$key]);
}
}
dans le code pour le deuxieme changement d avatar
<img src="membres/avatars/33.jpg?1503243518" width="150" height="150">
Dans la console pour le deuxieme changement d avatar
Failed to load resource: the server responded with a status of 404 (Not Found)
Failed to load resource: the server responded with a status of 404 (Not Found)
GET http://localhost/site_chat3/membres/avatars/33.jpg 404 (Not Found)
Il vaut mieux mettre :
<img src="membres/avatars/33.jpg?v=1503243518" width="150" height="150">