Page 1 sur 2

problème de SELECT

Posté : 24 juin 2021, 11:11
par nestor94
je souhaite afficher tous les avatars de membres présents au même endroit. Ce script ne génère pas d'erreur mais seulement une page blanche. Comme les avatars sont dans la même table que les membres, j'ai simulé deux tables (T1 et T2 ). je ne sais pas s'il y a mieux a faire.
<?php
require_once 'config.php';
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT T1.avatar FROM membres T1 INNER JOIN  membres T2 ON  T1.pos_x = T2.pos_x AND T1.pos_y = T2.pos_y  WHERE T2.id = :id ";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($avatar = $pdostat->fetch(PDO::FETCH_OBJ))
{
echo '<img src="'.$avatar.'">';  
}
?>

Re: problème de SELECT

Posté : 24 juin 2021, 12:59
par Ryle
Salutations !

As-tu essayé cette requête directement sur ta base dans phpMyAdmin ou équivalent (en remplaçant le :id par une valeur). Est-ce qu'elle retourne le résultat que tu attends ? Si aucun résultat n'est retourné, il n'y aura pas non plus d'enregistrement sur lesquels boucler pour afficher l'avatar et donc une page blanche.

Si tu as bien le résultat souhaité, c'est qu'il y a un problème dans ta boucle. $pdostat->fetch(PDO::FETCH_OBJ) retourne un objet anonyme avec les noms de propriétés qui correspondent aux noms des colonnes retournés dans le jeu de résultats. $avatar n'est dans ce cas pas une chaine de caractères, mais un objet dont il faut lire les attributs pour obtenir l'avatar.
Si tu regardes le code source de la page générée, du devrait voir plein de balises <img> mal constituée...

Re: problème de SELECT

Posté : 24 juin 2021, 23:46
par nestor94
Hello,

J'ai testé en direct dans PHP MYADMIN avec cette erreur retournée:

Erreur

Requête SQL : Documentation

SELECT T1.avatar FROM membres T1 INNER JOIN membres T2 ON T1.pos_x = T2.pos_x AND T1.pos_y = T2.pos_y WHERE T2.HIGREK = :HIGREK LIMIT 0, 25

MySQL a répondu : Documentation
#1064 - Erreur de syntaxe près de ':HIGREK LIMIT 0, 25' à la ligne 1
(je ne vois pas d'où vient ce LIMIT 0,25 du reste?)

Sinon, le code source générée par le script (sur la page blanche) marque seulement
1
2

Re: problème de SELECT

Posté : 24 juin 2021, 23:50
par or 1
Ryle disait : "en remplaçant le :id par une valeur"
et il ne faut pas copier coller le " avant la requête.

Re: problème de SELECT

Posté : 24 juin 2021, 23:54
par nestor94
oui, j'ai mis HIGREK (un pseudo) à la place de id. et pas de double quotes dans la requete.

Re: problème de SELECT

Posté : 25 juin 2021, 00:02
par or 1
T2.HIGREK =
il y a un champ dans la table avec ce nom ?
une chaine dans une requête doit être entourée de ""

Re: problème de SELECT

Posté : 25 juin 2021, 09:39
par nestor94
Oups, j'ai corrigé ma requete
SELECT T1.avatar FROM membres T1 INNER JOIN membres T2 ON T1.pos_x = T2.pos_x AND T1.pos_y = T2.pos_y WHERE T2.pseudo = "HIGREK"

Et pour mon test dans dans Php my admin , c'est concluant .
Je coince un peu avec les objets PDO... J'ai laissé à blanc après le fetch mais ce n'est pas encore cela
<?php
require_once 'config.php';
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT T1.avatar FROM membres T1 INNER JOIN  membres T2 ON  T1.pos_x = T2.pos_x AND T1.pos_y = T2.pos_y  WHERE T2.id = :id ";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
while ($avatar = $pdostat->fetch())
{
echo '<img src="'.$avatar.'">';  
}
?>

Re: problème de SELECT

Posté : 25 juin 2021, 10:44
par Ryle
Si tu as bien le résultat souhaité, c'est qu'il y a un problème dans ta boucle. $pdostat->fetch(PDO::FETCH_OBJ) retourne un objet anonyme avec les noms de propriétés qui correspondent aux noms des colonnes retournés dans le jeu de résultats. $avatar n'est dans ce cas pas une chaine de caractères, mais un objet dont il faut lire les attributs pour obtenir l'avatar.
Si tu regardes le code source de la page générée, du devrait voir plein de balises <img> mal constituée...
;)

Re: problème de SELECT

Posté : 25 juin 2021, 11:13
par nestor94
while ($avatar = $pdostat->fetch(PDO::FETCH_STR)) ne fonctionne pas non plus.

Re: problème de SELECT

Posté : 25 juin 2021, 14:04
par or 1
comment le contenu d'un champ de résultat d'une requête sql a été récupéré sur post467831.html ?

Re: problème de SELECT

Posté : 26 juin 2021, 00:42
par nestor94
? avec une condition via le if.

Re: problème de SELECT

Posté : 26 juin 2021, 00:59
par or 1
non

Re: problème de SELECT

Posté : 26 juin 2021, 10:00
par nestor94
J'ai fait un var_dump de $avatar qu'il ne trouve pas...

Re: problème de SELECT

Posté : 27 juin 2021, 10:55
par nestor94
J'ai complètement changé le script de cette façon.
<?php
require_once 'config.php';
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;
$sql = "SELECT pos_x, pos_y FROM membres WHERE id=:id";
$pdostat = $bdd->prepare($sql);
$pdostat->bindvalue(':id',$id ,PDO::PARAM_INT);
$pdostat->execute();
$resultat = $pdostat->fetch();    
if (!empty($resultat )) { 
$pos_x = $resultat['pos_x'];
$pos_y = $resultat['pos_y'];
}
$sql = "SELECT avatar FROM membres WHERE pos_x=pos_x AND pos_y=pos_y";
$pdostat = $bdd->prepare($sql);
$pdostat->execute();
$resultat = $pdostat->fetch(); 
if (!empty($resultat )) { 
$avatar = $resultat['avatar'];
}
echo '<img src="'.$avatar.'">';  
?>
cela n'affiche QUE l'avatar du "membre id" et pas les autres.
De quelle façon puis-je modifier le SELECT pour afficher les autres avatars situés sur la même position?

Re: problème de SELECT

Posté : 27 juin 2021, 12:02
par or 1
cela n'affiche qu'un résultat, non pas car la requête sql ne retourne qu'un seul résultat, mais parce qu'il n'y a qu'un seul fetch d'exécuté. il faudrait un while()