JeuWeb - Crée ton jeu par navigateur
Update sur plusieurs tables - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Update sur plusieurs tables (/showthread.php?tid=3312)

Pages : 1 2 3


RE: Update spécial? - Rouge - 01-12-2008

Evidement, il y a 1 lézard :nonon:
Le second insert ne fonctionne pas il m'affiche "query was empty"

Code :
$requete = mysql_query("SELECT posx, posy FROM membres WHERE id = $id;");
$rsa= mysql_fetch_assoc ($requete);
$posx = $rsa['posx'];
$posy = $rsa['posy'];

$sql = "INSERT INTO ville (id, nom, image, type, population, posx, posy, date_creation) VALUES ('','". mysql_real_escape_string($ville) ."',  './relief/ville.gif', 'ville', '1', $posx, $posy, NOW())";
    mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());


$sq2= mysql_query("SELECT image FROM map WHERE posx= $posx AND posy= $posy; ");
$rsb= mysql_fetch_assoc ($sq2);
$image= $rsb['image'];

$maj= "INSERT INTO mapville (id, nom, posx, posy, image, ville_id ) VALUES ('',  '". mysql_real_escape_string($ville) ."', 0, 0, '".$image."', '' )";    
    mysql_query($smaj) or die('Erreur SQL '.$maj.'<br>'.mysql_error());



RE: Update spécial? - Anthor - 01-12-2008

$maj ... $smaj....


RE: Update spécial? - Rouge - 02-12-2008

J'ai modifié la faute de frappe avec $maj.
Le script fonctionne mais il est bancal: les insert en base se passent bien mais j'ai malgré tout cela qui s'affiche:
Code :
Erreur SQL 1
You have an error in your SQL syntax. Check the manual that corresponds
to your MySQL server version for the right syntax to use near '1' at line 1


de plus, dans le 1er insert en table, j'ai 1 id=0 et dans le second (la table "mapville" qui correspond à la map de la ville en question), j'ai 1 id=1 et un ville_id= 1....


RE: Update sur plusieurs tables - Sephi-Chan - 03-12-2008

Fais des var_dump() de tes variables et affiche tes requêtes. Ça t'aidera à savoir où ça merde.


Sephi-Chan


RE: Update sur plusieurs tables - Rouge - 13-12-2008

Ca y est c'est good.
encore 1 petit soucis sur une requete
Je n'arrive pas à trouver la syntaxe exacte destinée à afficher les images de la table "mapville" (sans doute un problème de parenthèse ou de "and" ?)

Code PHP :
<?php 
$affiche
= mysql_query("SELECT image, posx, posy FROM mapville WHERE id= $id AND ville_id= $ville_id AND posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC;") or die(mysql_error());;");

Voici le bout de script "complet".
si on enlève le where id et ville_id et qu'il s'agit de la map "général" c'est ok...
mais en l'occurence, il me faut afficher les images issues de posx et posy d'une ville donnée (via la table mapville)

Code PHP :
<?php 
$affiche
= mysql_query("SELECT image, posx, posy FROM mapville WHERE id= $id AND ville_id= $ville_id AND posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC;") or die(mysql_error());;");
while (
$data = mysql_fetch_array($affiche)) {
$TabMAP10[$data['posx']][$data['posy']] = $data['image'];
}



RE: Update sur plusieurs tables - Sephi-Chan - 13-12-2008

Je ne comprends pas. C'est réglé ou pas ? S'il y a un problème, quel est-il ?
En tout cas, le dernier bout de code proposé ne risque pas de fonctionner. Si tu utilises des guillemets doubles, tu ne mets pas de . pour concaténer tes variables.


Sephi-Chan


RE: Update sur plusieurs tables - Rouge - 18-12-2008

J'y arrive pas, désolé :pleure2:

J'essaie d'afficher la map de la ville ainsi:

Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
require_once
'connexion.php';

$requete = mysql_query("SELECT posx, posy FROM membres WHERE carte='mapville' AND id = $id;");
$sql = mysql_fetch_assoc ($requete);
$posx = $sql['posx'];
$posy = $sql['posy'];

//RECHERCHE DE LA VILLE SELON POSITION JOUEUR

$recherche= mysql_query("SELECT id FROM ville WHERE posx= $posx AND posy= $posy;");
$req= mysql_fetch_assoc ($recherche);
$id= $req['id'];
var_dump($req);

//Définition de la map
$taille = 3;// ici 3 cases autour du joueur (soit une map de 7*7)
$x_debut=$posx-$taille;//3 cases a gauche du joueur
$x_fin=$posx+$taille;//3 cases a droite du joueur
$y_debut=$posy-$taille;//3 cases au dessus du joueur
$y_fin=$posy+$taille; //3 cases au dessous du joueur
//definition des bords de la map
$i=6;//1 cases avant debordement en haut et a gauche
$j=1;
$k=295;//1 cases avant debordement en bas et a droite
while ($i >=1 and $j<=3 and $k<=300){
if (
$posx == $i) {$x_debut = $posx-$taille+$j;$x_fin = $x_fin+$j;}
if (
$posy == $i) {$y_debut = $posy-$taille+$j;$y_fin = $y_fin+$j;}
if (
$posx == $k) {$x_fin = $x_fin-$j;$x_debut = $x_debut-$j;}
if (
$posy == $k) {$y_fin = $y_fin-$j;$y_debut = $y_debut-$j;}
$j++;
$i--;
$k++;
}


/*
Vérification de la présence des autres joueurs:
on va chercher les joueurs qui sont dans le perimetre défini precedement.
*/
$sq2 = 'SELECT vehicule_actuel, posx, posy FROM membres WHERE pause="NON" AND carte="mapville" AND posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC;';
$req = mysql_query($sq2) or die(mysql_error());
while (
$data = mysql_fetch_array($req)) {
if (empty(
$TabMAP[$data['posx']][$data['posy']]))
$TabMAP[$data['posx']][$data['posy']] = $data['vehicule_actuel'];
}
mysql_free_result($req);


/* on va afficher les terrains de la map
*/
$affiche = mysql_query('SELECT image, posx, posy FROM mapville WHERE ville_id= '.$ville_id.' AND posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC;');
while (
$data = mysql_fetch_assoc($affiche)) {

$TabMAPVILLE10[$data['posx']] [$data['posy']] [$data['ville_id']]= $data['image'];
}
mysql_free_result($affiche);

echo
'<center><body background="image/fond.jpg" bgproperties="fixed">
<table border="1" cellspacing="0" cellpadding="0">'
."\n";
echo
'<tbody>'."\n";
//on affiche les positions x sur la premiere ligne
for($x=$x_debut;$x<=$x_fin;$x++)

//on affiche lignes par lignes la position y, les autres joueurs et les batiments
for ($y=$y_debut;$y<=$y_fin;$y++) {
// echo'<tr ><td align="center" valign="middle" height="60">-'.$y.'</td>'."\n";//affichage de la position

for($x=$x_debut;$x<=$x_fin;$x++) {// pour chaque lignes

if($x==$posx && $y==$posy)//si on est sur la position du joueur
echo '<td><center><img src='.$vehicule_actuel.'></center></td>';//on affiche l'avatar de votre perso
else
if(!empty(
$TabMAP[$x][$y]))//si on tombe sur un autre joueur
echo '<td><center><img src='.$TabMAP[$x][$y].'></center></td>';//on affiche l'avatar du joueur
else
if(!empty(
$TabMAPVILLE10[$x][$y]))//si on tombe sur un terrain
echo '<td><center><img src='.$TabMAPVILLE10[$x][$y].'></center></td>';//on affiche l'image du terrain
else
echo
'<td><center><img src="./relief/blank.gif"></center></td>';//si il n'y a rien...
}
echo
'</tr>';//on ferme la ligne et on passe a la ligne qui suit
}
echo
'</tbody></table>';//on ferme la table
?>

Les images de la ville (qui sont en table "mapville" et se réfèrent à ville_id)
ne s'affichent pas et j'ai les messages erreur suivants:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /mnt/web4/40/58/51658858/htdocs/affichemapville.php on line 13
NULL
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /mnt/web4/40/58/51658858/htdocs/affichemapville.php on line 54

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /mnt/web4/40/58/51658858/htdocs/affichemapville.php on line 58

Pour info, le var_dump affiche la valeur NULL.


RE: Update sur plusieurs tables - Sephi-Chan - 19-12-2008

Il faut que tu localises les requêtes qui ne fonctionnent pas. En l'occurrence, tu utilises des guillemets double pour délimiter tes chaînes de caractère au sein de ta requête. Il faut utiliser des guillemets simples.

De plus, il faut uniformiser ta façon de construire les requêtes, un coup tu utilises des guillemets doubles, puis ensuite des simples avec concaténation, etc. Ça va pas ! C'est le bordel !

De plus, pourquoi tu t'évertues à mettre tes requêtes sur une seule ligne ? Ce serait tout de même plus clair de faire une requête comme ça :
$query = "SELECT vehicule_actuel, posx, posy
FROM membres
WHERE pause = 'NON' AND carte = 'mapville'
AND posx BETWEEN {$x_debut} AND {$x_fin} AND posy BETWEEN {$y_debut} AND {$y_fin}
ORDER BY posx DESC, posy DESC;";

Plus facile à lire, plus facile à déboguer.


Sephi-Chan


RE: Update sur plusieurs tables - Rouge - 22-12-2008

Hello,

Il y a 1 mieux, j'ai réécri les requetes mais il y a toujours 1 soucis d'affichage au niveau de la ville, en fait le script affiche ce qui ne correspond pas à ville_id en table, de plus le var_dump qui suit (et
qui est censé afficher l'id de la ville en table ville) affiche NULL au lieu de 1.
Pourquoi?
Code PHP :
<?php
session_start
();
require_once
'connexion.php';

$res = "SELECT posx, posy, vehicule_actuel
FROM membres WHERE id =
$id;";


$result = mysql_query($res) or die(mysql_error());

$rsa = mysql_fetch_assoc($result);

$posx = $rsa['posx'];

$posy = $rsa['posy'];

$vehicule_actuel = $rsa['vehicule_actuel'];


//RECHERCHE DE LA VILLE SELON POSITION JOUEUR

$situ= "SELECT id FROM ville
WHERE posx=
$posx AND posy= $posy;";

$resultat = mysql_query($situ) or die(mysql_error());


$rsb= mysql_fetch_assoc($resultat);

$id = $rsb['id'];
var_dump($id);
?>



RE: Update sur plusieurs tables - Sephi-Chan - 22-12-2008

A priori, c'est simplement parce que la requête ne trouve aucune ville ayant les coordonnées que tu cherches. Smile
Si tu en doutes, affiche ta requête ($situ) et colle là dans phpMyAdmin.


Sephi-Chan