Page 1 sur 1

SOUCIS REQUETE

Posté : 27 nov. 2024, 02:20
par nestor94
Bonjour,

je souhaiterai que ma requète teste si une donnée est présente entre "plusieurs positions"
<?php
$pdostat = $bdd->prepare("SELECT nom_lieu FROM galaxie LEFT JOIN membres ON galaxie.pos_x= membres.pos_x BETWEEN membres.pos_x+50  AND galaxie.pos_y= membres.pos_y BETWEEN membres.pos_y+50 WHERE membres.id=:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch(); 
$nom_lieu= $membreSession['nom_lieu'];
if($nom_lieu !=' bla bla bla')
{
bla bla bla...
}
?>

Re: SOUCIS REQUETE

Posté : 27 nov. 2024, 02:56
par two3d
Ta syntaxe "BETWEEN" est incorrecte : galaxie.pos_x= membres.pos_x BETWEEN

Lien doc SQL BETWEEN (sql.sh)

Ça devrait résoudre le problème, à tester :
$pdostat = $bdd->prepare("
    SELECT nom_lieu 
    FROM galaxie 
    LEFT JOIN membres ON (
        galaxie.pos_x BETWEEN membres.pos_x - 50 AND membres.pos_x + 50 
        AND galaxie.pos_y BETWEEN membres.pos_y - 50 AND membres.pos_y + 50
    ) 
    WHERE membres.id = :id
");
Ou en isolant les conditions AND :
$pdostat = $bdd->prepare("
    SELECT nom_lieu 
    FROM galaxie 
    LEFT JOIN membres ON (
        galaxie.pos_x BETWEEN (membres.pos_x - 50 AND membres.pos_x + 50 )
        AND
        galaxie.pos_y BETWEEN (membres.pos_y - 50 AND membres.pos_y + 50)
    ) 
    WHERE membres.id = :id
");

Re: SOUCIS REQUETE

Posté : 27 nov. 2024, 21:49
par nestor94
Les deux requètes ne retournent pas d'erreur mais ne font pas le job :?

Re: SOUCIS REQUETE

Posté : 27 nov. 2024, 23:38
par two3d
Il se peut que tu n'ai aucun enregistrement dans la base de données.

Essaye en augmentant les pos_y et pos_x pour filtrer large.

nom_lieu existe ? Vérifie l'orthographe, fait des tests sans BETWEEN pour t'assurer que ta des résultats, puis filter ensuite.

C'est parti pour un debugging :D

Re: SOUCIS REQUETE

Posté : 02 déc. 2024, 19:19
par nestor94
$pdostat = $bdd->prepare("SELECT nom_lieu FROM galaxie LEFT JOIN membres ON galaxie.pos_x BETWEEN (membres.pos_x - 50 AND membres.pos_x + 50 )   AND   galaxie.pos_y BETWEEN (membres.pos_y - 50 AND membres.pos_y + 50) )  WHERE membres.id = :id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$membreSession = $pdostat->fetch(); 
$nom_lieu= $membreSession['nom_lieu'];
if ($nom_lieu !='SATELLITE')
{
	header('Location:radio_hs.php');
	exit;
}
nom_lieu est OK, j'ai positionné le joueur "test" une case juste à coté et cela renvoie à chaque fois vers le header. :?

Re: SOUCIS REQUETE

Posté : 02 déc. 2024, 20:06
par or 1
debugger, c'est exécuter la requête dans phpmyadmin. car tant qu'elle ne retourne pas ce qui est attendu dans phpmyadmin, cela ne fonctionnera pas dans une page web.

Re: SOUCIS REQUETE

Posté : 02 déc. 2024, 20:06
par two3d
A toi de jouer, débug au mieux chef ! :D

Lors d'un débug, on ne met pas de redirections, seulement des infos concernant les résultats de la requête, tu peux utiliser var_dump() ou print_r().

Re: SOUCIS REQUETE

Posté : 09 déc. 2024, 19:25
par nestor94
La requête fonctionne à présent en appelant la table "satellites" plutot que la map de jeu (galaxie) car sur cette dernière, il y avait plusieurs 'nom_lieu' différents...
$pdostat = $bdd->prepare ("SELECT nom FROM satellites LEFT JOIN membres ON satellites.pos_x BETWEEN membres.pos_x - 10 AND membres.pos_x + 10   AND satellites.pos_y BETWEEN membres.pos_y - 10 AND membres.pos_y + 10 WHERE membres.id =:id");
$pdostat->bindvalue(':id',$idMembreSession ,PDO::PARAM_INT);
$pdostat->execute();
$membreSession = $pdostat->fetch(); 
if (!empty($membreSession)) { 
$nom= $membreSession['nom'];
}
if ($nom !='SAT-')
{
	header('Location:radio_hs.php');
	exit;
}

Re: SOUCIS REQUETE

Posté : 09 déc. 2024, 21:27
par two3d
;) passe en résolu si c'est bon pour toi