Modérateur PHPfrance |
10684 Messages
30 juin 2021, 11:47
Il y a quelques problèmes avec ce code à mon sens.
Le premier, c'est que si $resultat est vide, les variables $pos_x et $pos_y ne seront pas déclarées, et la seconde requête ne pourra pas fonctionner. Il faudrait à mon sens mettre tout le code qui suit dans le if() puisque si pas de résultat, il n'y aura de toute façon pas d'avatar à afficher. Ou s'il y a forcément un résultat parce que l'utilisateur "id" est forcément quelque part, le if() ne sert à rien
Le deuxième problème concerne la construction de la deuxième requête. Comme évoqué précédemment par @rthur, il ne faut pas mettre de variables php dans la construction d'une requête préparée. Ça n'est ni propre, ni sécurisé. Pour passer des valeurs à une requête préparée, on utilise un flag dans la requête, et on passe la valeur associée à ce flag avec un bind ou lors de l'exécution. C'est ce que tu fais correctement pour la première requête.
En revanche pour la seconde, tes variables sont en dur dans ta requête et si tu fais bien un bindvalue, tu donnes une valeur pour le flag :id qui n'existe pas dans cette requête
$sql = "SELECT * FROM membres WHERE pos_x=:x AND pos_y=:y"; // pas de variable $pos_x/y, mais des flag :x et :y
...
$pdostat->bindvalue(':x',$pos_x ,PDO::PARAM_STR); // pour chaque flag, on associe la valeur que l'on veut utiliser
$pdostat->bindvalue(':y',$pos_y ,PDO::PARAM_STR);
Et enfin, je pense que tu vas avoir des problèmes avec ton lien qui ouvre toujours la même page quel que soit l'avatar spécifié, il te faudra sans doute récupérer un identifiant pour savoir sur quel avatar l'utilisateur a cliqué, mais j'imagine que c'est en cours

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...