[RESOLU] problème affichage avec variable

Eléphant du PHP | 345 Messages

20 mai 2022, 16:40

Je galère depuis quelques temps sur ce sujet et ne trouve pas la soluce adéquate?
Je souhaite afficher tous les avatars des joueurs sur la map de jeu.

Ce qui fonctionne actuellement: (ici, on affiche seulement que les tiles "terrain")
$sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x= membres.pos_x-3 AND map.pos_y = membres.pos_y+3  WHERE membres.id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch(); 
if (!empty($membreSession )) { 
$tile = $membreSession['tile'];}
else {
$tile = '/relief/tile_blank.gif';}    
echo '<img src='.$tile.'>';?></td>

Ce qui ne fonctionne pas et que je souhaite mettre en place (affichage de la tile terrain OU tile avatar si présent).

$sql = "SELECT tile, tile_avatar FROM map LEFT JOIN membres ON map.pos_x= membres.pos_x-3 AND map.pos_y = membres.pos_y+3 WHERE membres.id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch(); 
if (!empty($membreSession )) { 
$tile = $membreSession['tile'];
$tile_avatar = $membreSession['tile_avatar'];}
if($tile_avatar!= '') {
echo '<img src='.$tile_avatar.'>';}	
else {
echo '<img src='.$tile.'>';} ?></td>
le message d'erreur:
Notice: Undefined variable: tile_avatar in /home/clients/78f15c369c0786c4a419608e9e60028a/web/map.php on line 86...

tile_avatar est bien présent en table (par défaut "vide") mais incrémenté lors du déplacement du joueur sur la map.

Mammouth du PHP | 2703 Messages

20 mai 2022, 16:49

il faudrait indenter le code correctement.
if (!empty($membreSession )) { 
  $tile = $membreSession['tile'];
  $tile_avatar = $membreSession['tile_avatar'];
}
après ce code, la variable $tile_avatar peut ne pas exister si cela ne rentre pas dans le if, d'où le warning.

Eléphant du PHP | 345 Messages

21 mai 2022, 21:56

non, non, le code est correct.. l'accolade fermante est en bout de ligne....
if (!empty($membreSession )) { 
$tile = $membreSession['tile'];
$tile_avatar = $membreSession['tile_avatar'];}

Mammouth du PHP | 2703 Messages

21 mai 2022, 22:04

je n'ai pas dit qu'il n'était pas valide.

Avatar du membre
Mammouth du PHP | 1564 Messages

22 mai 2022, 09:46

le message d'erreur:
Notice: Undefined variable: tile_avatar in /home/clients/78f15c369c0786c4a419608e9e60028a/web/map.php on line 86...
Quelle est la ligne 86 dans map.php ?

or1 a raison, ton code est mal indenté, valide mais mal indenté, regarde la correction qu'il ta fait et prend exemple, ya un minimum de règles à respecter quand on écrit du code, (dans tous les langages), certes chacun aura sa touche perso (comme accolade en dessous de la condition ou juste après la condition mais l'accolade fermante pas après le point-virgule)

Perso, j’écrirais ton code comme ceci :
if(!empty($membreSession)){
    $tile = $membreSession['tile'];
    $tile_avatar = $membreSession['tile_avatar'];
}
Certains l'écrivent comme ceci :
if(!empty($membreSession))
{
    $tile = $membreSession['tile'];
    $tile_avatar = $membreSession['tile_avatar'];
}
D'autres l'écrivent comme ceci :
if( !empty( $membreSession ) ) {
    $tile = $membreSession['tile'];
    $tile_avatar = $membreSession['tile_avatar'];
}

référence : https://pear.php.net/manual/en/standards.php
traduit : https://pear-php-net.translate.goog/man ... x_tr_hl=fr