Problème syntaxe ET traitement donnée sur jointure de table
Résolu
nestor94
Messages postés
74
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je cale sur ce problème qui comporte plusieurs erreurs et vous remercie à l'avance de votre indulgence !
j'ai deux tables:
membres avec id, pos_x, pos_y
exemple 1 7 7
map avec tile, pos_x, pos_y
exemple foret 7 7
je souhaite récupérer pos_x et pos_y de la table map en fonction de id pos_x et pos_y
de la table membres et afficher 5 positions autour...
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y W' à la ligne 1
Undefined variable: finY in C:\wamp64\www\map_debut.php on line 49
Undefined variable: compteurY in C:\wamp64\www\map_debut.php on line 49
pour info, j'arrive à afficher "tile" (une seule case, celle de l'id membres) avec ce script mais on est loin de ce que je souhaite.
Je cale sur ce problème qui comporte plusieurs erreurs et vous remercie à l'avance de votre indulgence !
j'ai deux tables:
membres avec id, pos_x, pos_y
exemple 1 7 7
map avec tile, pos_x, pos_y
exemple foret 7 7
je souhaite récupérer pos_x et pos_y de la table map en fonction de id pos_x et pos_y
de la table membres et afficher 5 positions autour...
$sql = "SELECT map.pos_x, map.pos_y LEFT JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); if (!empty($resultat )) { //On récupère les coordonnées du joueur depuis table map ? $pos_x = $resultat['map.pos_x']; $pos_y = $resultat['map.pos_y']; //On déclare les variables de positionnement carte $compteurY = ['$pos_y + 6']; $finY = ['$pos_y - 6']; // on definit la taille de la carte $largeur = 5; $hauteur = 5; // On calcule l'aire de la mini-map $compteurX = $pos_x - 6; $compteurY = $pos_y + 6; $finX = $pos_x + 6; $finY = $pos_y - 6; $debutX = $pos_x - 6; } while($compteurY >= $finY) { echo' <div class="container">'; echo '<div class="row"> '; echo ' <div class="col-md-offset-2 col-md-8"> '; echo ' <div id="map" style="width:660px; height:660px"></div>'; echo ' </div> </div> </div> '; echo '</div>', "\n"; $compteurX++; echo '</div>', "\n"; $compteurX = $debutX; $compteurY--; }
Erreur : SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'INNER JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y W' à la ligne 1
Undefined variable: finY in C:\wamp64\www\map_debut.php on line 49
Undefined variable: compteurY in C:\wamp64\www\map_debut.php on line 49
pour info, j'arrive à afficher "tile" (une seule case, celle de l'id membres) avec ce script mais on est loin de ce que je souhaite.
$sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x AND map.pos_y = membres.pos_y WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); if (!empty($resultat )) { $tile = $resultat['tile']; echo '<img src=" '.$tile.' ">'; }
A voir également:
- Problème syntaxe ET traitement donnée sur jointure de table
- Table ascii - Guide
- Table des matières word - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce traitement de texte gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
11 réponses
Bonjour,
Première requête ... tu as oublié le FROM
Lignes 9 et 10 ... faut retirer les 'map.'
Lignes 12 et 13, tu dois, soit faire de la concaténation ... soit utiliser des doubles quotes. Sinon les variables php ne sont pas interprétées.
Première requête ... tu as oublié le FROM
Lignes 9 et 10 ... faut retirer les 'map.'
Lignes 12 et 13, tu dois, soit faire de la concaténation ... soit utiliser des doubles quotes. Sinon les variables php ne sont pas interprétées.
jordane45
Messages postés
38486
Date d'inscription
Statut
Modérateur
Dernière intervention
4 752
Lignes 12 et 13, .. faut retirer les crochets .. sinon il considère ta variable comme un array
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, je pense que l'accolade fermante en ligne 25 devrait être déplacée après la ligne 42.
Voici les modifications apportées et le code complet.
Il reste un soucis de variable et je ne sais pas quoi mettre pour les déclarer.
Undefined variable: pos_y in C:\wamp64\www\map_debut.php on line 20
Undefined variable: pos_x in C:\wamp64\www\map_debut.php on line 26
le var_dump de pos_x et pos_y est OK....
Il reste un soucis de variable et je ne sais pas quoi mettre pour les déclarer.
<?php session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); require_once 'config.php'; $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; try{ $sql = "SELECT map.pos_x, map.pos_y FROM map LEFT JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } if (!empty($resultat )) { //On déclare les variables de positionnement carte $compteurY = "$pos_y + 6"; $finY = "$pos_y - 6"; // on definit la taille de la carte $largeur = 5; $hauteur = 5; // On calcule l'aire de la mini-map $compteurX = $pos_x - 6; $compteurY = $pos_y + 6; $finX = $pos_x + 6; $finY = $pos_y - 6; $debutX = $pos_x - 6; while($compteurY >= $finY) { echo' <div class="container">'; echo '<div class="row"> '; echo ' <div class="col-md-offset-2 col-md-8"> '; echo ' <div id="map" style="width:660px; height:660px"></div>'; echo ' </div> </div> </div> '; echo '</div>', "\n"; $compteurX++; echo '</div>', "\n"; $compteurX = $debutX; $compteurY--; } } ?>
Undefined variable: pos_y in C:\wamp64\www\map_debut.php on line 20
Undefined variable: pos_x in C:\wamp64\www\map_debut.php on line 26
le var_dump de pos_x et pos_y est OK....
<?php session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); require_once 'config.php'; $id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; try{ $sql = "SELECT map.pos_x, map.pos_y FROM map LEFT JOIN membres ON membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } if (!empty($resultat )) { //On déclare les variables de positionnement carte $pos_x = $resultat ['pos_x']; $pos_y = $resultat ['pos_y']; $compteurY = "$pos_y + 6"; $finY = "$pos_y - 6"; // on definit la taille de la carte $largeur = 5; $hauteur = 5; // On calcule l'aire de la mini-map $compteurX = $pos_x - 6; $compteurY = $pos_y + 6; $finX = $pos_x + 6; $finY = $pos_y - 6; $debutX = $pos_x - 6; while($compteurY >= $finY) { echo' <div class="container">'; echo '<div class="row"> '; echo ' <div class="col-md-offset-2 col-md-8"> '; echo ' <div id="map" style="width:660px; height:660px"></div>'; echo ' </div> </div> </div> '; echo '</div>', "\n"; $compteurX++; echo '</div>', "\n"; $compteurX = $debutX; $compteurY--; } } ?>
ca affiche une page blanche...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'ai fait les var_dump suivants:
ligne 20 var_dump($resultat);
ligne 21 var_dump($pos_x);
ligne 22 var_dump($pos_y);
C:\wamp64\www\map_debut.php:20:
array (size=4)
'pos_x' => string '7' (length=1)
0 => string '7' (length=1)
'pos_y' => string '7' (length=1)
1 => string '7' (length=1)
( ! ) Notice: Undefined variable: pos_x in C:\wamp64\www\map_debut.php on line 21
C:\wamp64\www\map_debut.php:21:null
( ! ) Notice: Undefined variable: pos_y in C:\wamp64\www\map_debut.php on line 22
C:\wamp64\www\map_debut.php:22:null
ligne 20 var_dump($resultat);
ligne 21 var_dump($pos_x);
ligne 22 var_dump($pos_y);
C:\wamp64\www\map_debut.php:20:
array (size=4)
'pos_x' => string '7' (length=1)
0 => string '7' (length=1)
'pos_y' => string '7' (length=1)
1 => string '7' (length=1)
( ! ) Notice: Undefined variable: pos_x in C:\wamp64\www\map_debut.php on line 21
C:\wamp64\www\map_debut.php:21:null
( ! ) Notice: Undefined variable: pos_y in C:\wamp64\www\map_debut.php on line 22
C:\wamp64\www\map_debut.php:22:null
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
peux-tu partager le code source HTML de la page affichée?
<div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div> <div class="container"><div class="row"> <div class="col-md-offset-2 col-md-8"> <div id="map" style="width:660px; height:660px"></div> </div> </div> </div> </div> </div>
J'entends bien et c'est là que le bat blesse. Comment je mets le résultat de la requete dans mes div? cette fin de script ne semble pas valable...
while($compteurY >= $finY) { echo '<div class="case_map">'; echo' <div class="container">'; echo '<div class="row"> '; echo ' <div class="col-md-offset-2 col-md-8"> '; echo ' <div id="map" style="width:60px; height:60px"></div>'; echo ' </div> </div> </div> '; echo '</div>', "\n"; $compteurX++; echo '</div>', "\n"; $compteurX = $debutX; $compteurY--; }
je veux afficher
avec 5 positions autour.....
faudrait-il partir d'une autre base telle que:
$pos_x = $resultat ['pos_x']; $pos_y = $resultat ['pos_y'];
avec 5 positions autour.....
faudrait-il partir d'une autre base telle que:
$sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x AND map.pos_y = membres.pos_y WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); if (!empty($resultat )) { $tile = $resultat['tile']; echo '<img src=" '.$tile.' ">'; }
je crois deviner que tu veux afficher un carré de 11 * 11 positions, centré sur la position du joueur (position extraite de table membres).
Chaque case du carré doit afficher une image, extraite de la table map.
Est-ce exact?
si oui, tu dois faire deux boucles imbriquées, une avec $compteurY (pour chaque ligne du carré), l'autre avec $compteurX (pour chaque colonne du tableau).
pour chaque case du carré, faire une requête SQL telle que:
Chaque case du carré doit afficher une image, extraite de la table map.
Est-ce exact?
si oui, tu dois faire deux boucles imbriquées, une avec $compteurY (pour chaque ligne du carré), l'autre avec $compteurX (pour chaque colonne du tableau).
pour chaque case du carré, faire une requête SQL telle que:
SELECT tile FROM map WHERE pos_x = $compteurX AND pos_y = $compteurY
C'est exactement cela. Je vais tenter de m'y atteler... heu, la (ou les) requetes, c'est à positionner avant ou dans la boucle? Merci!
J'ai abandonné les boucles et suis parti sur un affichage direct dans un tableau.
puis pour affichage sur chaque case (en modifiant à chaque fois pos_x et pos_y !)
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL; // affichage de la position du joueur depuis table membres $sql = "SELECT id, 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'];
puis pour affichage sur chaque case (en modifiant à chaque fois pos_x et pos_y !)
<td style="width:60px; height:60px;"><?php $sql = "SELECT tile FROM map LEFT JOIN membres ON map.pos_x = membres.pos_x+1 AND map.pos_y = membres.pos_y-1 WHERE membres.id=:id"; $pdostat = $bdd->prepare($sql); $pdostat->bindvalue(':id',$id ,PDO::PARAM_INT); $pdostat->execute(); $resultat = $pdostat->fetch(); if (!empty($resultat )) { $tile = $resultat['tile']; } echo '<img src='.$tile.'>'?></td>