Probleme d'avatar sur ma page principale

Galaktor

Galaktor Le 29 janvier 2018 à 15:36 (Édité le 25 janvier 2019 à 17:54)

Salut ^^ J'ai un soucis avec mon avatar, j'aimerais que quand on arrive sur ma page principale, donc l'index, y voir l'avatar et le pseudo de la personne connecté. Pour le pseudo j'ai réussi, mais concernant l'avatar ça ne veut pas s'afficher. 

J'ai regardé le chemin de l'image je tombe juste dans le repertoire, en fait il ne trouve pas l'image
au lieu d'avoir : localhost/account/avatars/2.png (par exemple)
j'ai : localhost/account/avatars/
et je comprends pas pourquoi,

dans le code j'ai déjà testé l'image avec le "$_SESSION" a la place de "$userinfo" mais ça ne fonctionne pas non plus. Ca m'affiche une image cassé.

Je vous poste mon code :
<?php

session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=bddtest', 'root', '');

if(isset($_SESSION['id'])){
   $getid = intval($_GET['id']);
   $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
   $requser->execute(array($getid));
   $userinfo = $requser->fetch();
   
?>
<html lang="fr">
   <head>
      <meta charset='utf-8'>
      <meta name="viewport" content="width=device-width,initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>localhost test</title>
   </head>
   <body>
      <header>
         <div class="profil">
         </div>
         <div class=profiluser>
            <?php echo $_SESSION['pseudo']; ?>
         </div>
         <div align="center" class=iconuser>
            <?php if(!empty($userinfo['avatar']))
            {
            ?>
               <img src="account/avatars/<?php echo $userinfo['avatar'] ?>" width="100" />
            <?php
            }
            ?>
         </div>
      </header>
   </body>
<?php   
} 
else {
   header('Location: ../login.php');
}
?>
Merci d'avance pour l'aide 😄
SkinDePewDiePie_

SkinDePewDiePie_ Le 30 janvier 2018 à 13:10 (Édité le 30 janvier 2018 à 13:12)

Galaktor t'as mis le bon chemin ?
Galaktor

Galaktor Le 30 janvier 2018 à 15:31

Salut CapitaineMatteo et merci d'avoir repondu, donc oui comme je l'ai cité en haut j'ai bien le bon chemin mais ca ne trouve pas l'avatar, pourtant il y est bien present dans le chemin "localhost/account/avatars/"

J'ai besoin d'aide pour résoudre ce probleme ! s'il vous plait à l'aide x(
Balatharas

Balatharas Le 30 janvier 2018 à 21:51

src="<?= $_SERVER['REQUEST_SCHEME'] ?>://<?= $_SERVER['SERVER_NAME'] ?>/account/avatars/<?= $userinfo['avatar'] ?>/"
src="<?= $_SERVER['REQUEST_SCHEME'] ?>://<?= $_SERVER['SERVER_NAME'] ?>/account/avatars/<?= $_SESSION['avatar'] ?>/"
src="<?= $_SERVER['REQUEST_SCHEME'] ?>://<?= $_SERVER['SERVER_NAME'] ?>/account/avatars/<?= $userinfo['avatar'] ?>"
Essaie les trois ?
Galaktor

Galaktor Le 30 janvier 2018 à 22:11

Salut Balatharas et merci de ton aide ^^, du coup je viens de tester les 3 lignes de code, mais ca ne fonctionne toujours pas, l'image ne veut pas s'afficher
Galaktor

Galaktor Le 30 janvier 2018 à 22:30

En fait si je vais sur 127.0.0.1/index.php?id=1
l'avatar fonctionne avec ce code :
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>account/avatars/<?= $userinfo['avatar'] ?>" />
Mais quand je veux aller sur mon index.php sans le ( ?id=1 ) Rien ne s'affiche, a part le pseudo d'ou le fait d'avoir mis "$_SESSION['pseudo']" a la place de "$userinfo" donc j'ai tenté de faire pareil avec l'avatar  :
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>account/avatars/<?=$_SESSION['avatar'] ?>" />
Donc la le probleme c'est que j'ai une image cassé et quand je clique droit pour aller voir le lien de l'avatar je tombe sur : 127.0.0.1/account/avatars/
Au lieu d'avoir normalement  :
127.0.0.1/account/avatars/1.png

Le but dans tout ça c'est que j'aimerais que quand l'utilisateur va sur ma page principal, qu'il puisse voir son pseudo et son avatar 😀
J'espere avoir été clair dans mon soucis ^^ merci d'avance pour l'aide 
Balatharas

Balatharas Le 31 janvier 2018 à 18:50 (Édité le 31 janvier 2018 à 18:59)

Bon déjà dans ta page profil ajoute ça:
if(!isset($_GET['id'])) {
   header('Location: index.php');
}

$req = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
$req->execute([$_GET['id']]);
if($req->rowCount() == 0) {
   header('Location: index.php');
}

$useravatarpath = $req->fetch()['avatar'];
Ajoute aussi ça:
foreach($_POST as $key => $value) {
   $post[$key] = trim(strip_tags($value));
}
foreach($_GET as $key => $value) {
   $get[$key] = trim(strip_tags($value));
}
Ainsi, en mettant ce code en début de page, au lieu d'utiliser $_POST pour vos variables de formulaires, utilisez plutôt $post.
Et pas besoin de
$identifiant = htmlspecialchars($_POST['identifiant']);
htmlspecialchars car les variables sont déjà sécurisées dans le foreach.

===> Mini tuto de @TheOldNoob
Ensuite, c'est plutôt bizarre que
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>account/avatars/<?=$_SESSION['avatar'] ?>" />
marche car la variable $_SERVER['REQUEST_SCHEME'] contient le protocole du serveur... C'est à dire http ou https
Donc essaie ceci:
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>://<?= $_SERVER['SERVER_NAME'] ?>/account/avatars/<?= $useravatarpath ?>" />
Ou ceci:
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>account/avatars/<?= $useravatarpath ?>" />
Galaktor

Galaktor Le 31 janvier 2018 à 20:37 (Édité le 31 janvier 2018 à 20:38)

Salut! et merci encore une fois de m'aider
Bon j'ai testé les codes et malheureusement, ça ne veut toujours pas fonctionner.

Ce code :
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>://<?= $_SERVER['SERVER_NAME'] ?>/account/avatars/<?= $useravatarpath ?>" />
m'envoie bien dans le dossier là ou se trouve tout les avatars donc : https://www.monsite.com/account/avatars/

Et ce code : 
<img src="<?= $_SERVER['REQUEST_SCHEME'] ?>account/avatars/<?= $useravatarpath ?>" />
m'envoie sur : https://www.monsite.com/httpsaccount/avatars/

Donc le premier code reste bien, étant donné que mes avatars se trouve bien dans ce répertoire, mais le truc c'est que quand je suis sur ma page principale on dirait qu'il ne veut pas récupérer l'avatar(1.png) de l'utilisateur(id=1).

L'avatar s'affiche uniquement si je vais sur ce lien : https://www.monsite.com/index.php?id=1 
Or, moi je voudrais que l'avatar s'affiche en fonction de l'utilisateur connecté sur ce lien : https://www.monsite.com/

PS : je mets www."monsite".com parce que je préfère garder mon site privé pour le moment, ce n'est pas contre vous. ^^ et je ne test pas mon site en localhost, je test directement sur internet
Ca fait 4 jours que je suis sur ce problème et je commence a désespérer :(
Galaktor

Galaktor Le 31 janvier 2018 à 20:52 (Édité le 31 janvier 2018 à 20:54)

J'ai trouvé quelque chose, mais ca ne me plait pas a 100%
En fait j'ai essayé ce code : 
   <div align="center" class=iconuser>
      <img src="account/avatars/<?= $_SESSION['id'] ?>" />
   </div>
Ça fonctionne très bien sauf que le soucis, c'est qu'il n'affiche pas le format de l'image ou l'extension comme vous préférez.
Au lieu d'avoir : https://www.monsite.com/account/avatars/1.png

j'ai : https://www.monsite.com/account/avatars/1

Si vous avez une solution pour ça je suis preneur ^-^
Balatharas

Balatharas Le 1 février 2018 à 14:17

Bon c'est bizarre. Copie colle ce code
foreach($_GET as $key => $value) {
   $get[$key] = trim(strip_tags($value));
}
$req = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
$req->execute([$get['id']]);
if($req->rowCount() == 0) {
   header('Location: index.php');
}

$infosUsr = $req->fetch();
var_dump($infosUsr);
Envoie un screen de ce que ca te donne
Galaktor

Galaktor Le 1 février 2018 à 15:30

Salut, j'ai rajouté ton code, j'obtiens ça :


et mon code en haut de la page c'est ça :
<?php
session_start();
$bdd = new PDO('mysql:host=db****.db.1and1.com;dbname=db***', 'dbo***', '***');
foreach($_GET as $key => $value) {
   $get[$key] = trim(strip_tags($value));
}
$req = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
$req->execute([$get['id']]);
if($req->rowCount() == 0) {
   header('Location: index.php');
}
$infosUsr = $req->fetch();
var_dump($infosUsr);
   
?>
Balatharas

Balatharas Le 1 février 2018 à 15:34

Remplace ça
if($req->rowCount() == 0) {
   header('Location: index.php');
}
Par ça

if($req->rowCount() == 0) {
   // header('Location: index.php');
   var_dump($_SESSION['id']);
   die('Row = 0');
}
Galaktor

Galaktor Le 2 février 2018 à 13:40

Salut Balatharas et merci de toute l'aide que tu m'as apporté. J'ai donc modifié et cette fois j'obtiens une page blanche avec ecrit : 
string(1) "9" Row = 0
Donc voila, ca fait ouais 6 jours que je suis sur ce soucis a essayer de trouver une solution pour afficher un simple petit avatar mais ca ne donne rien, j'ai écrit sur plusieurs forum, cherché pendant des heures, et en vrai la j'abandonne j'en ai ma claque, c'est pas grave, il n'y aura pas d'avatar ^^
Balatharas

Balatharas Le 3 février 2018 à 16:12 (Édité le 3 février 2018 à 22:27)

Regarde dans ta bdd membres et envoie moi un screen des membres inscrits
Ajoute moi sur discord pour parler, ce sera plus simple @Balatharas#9105
Profil introuvable

Profil introuvable Le 5 février 2018 à 20:34

afin d'eviter ces genres d'erreur, tu peux definir des constantes
j'imagine que ton site est structuer comme sa:
site:
public
avatars
src
index.php

dans ton index.php
define("AVATARS", dirname(__DIR__)."/public/avatars");
maintenant dans ta page de login
<img src="<?= AVATARS."{$userinfos['avatar']}" ?>">
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte