JeuWeb - Crée ton jeu par navigateur
[Résolu] Traiter un champ inexistant en Base de données - 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 : [Résolu] Traiter un champ inexistant en Base de données (/showthread.php?tid=2692)



[Résolu] Traiter un champ inexistant en Base de données - Rouge - 18-06-2008

Hello

Le bout de script suivant traite un déplacement sur une map. Je ne vois pas quoi mettre si les coordonnées n'existent pas (encore) dans la table

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

$req = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id ." ") or die(mysql_error());
$rsa= mysql_fetch_assoc($req);
$posx = $rsa['posx'];
$posy = $rsa['posy'];
if (
$rsa['posx'] && $rsa['posy']== NULL) {
include
'create_relief.php';
}
else {
include
'affichemap.php';
}
?>

En fait, le but final est de permettre au joueur de créer la case (dont les coordonnées x et y sont encore inéxistantes en table) afin qu'il puisse mettre le relief qu'il souhaite :heuuu:
J'ai testé la fin du if avec des quotes ' ' mais cela ne fonctionne pas non plus, le joueur se retrouve dans le "vide" au niveau de la map.


RE: traiter 1 champ inexistant en db - Eluox - 18-06-2008

Empty ?

Mais bon je comprends pas, tu sélectionne des positions dans la table membre, donc techniquement, elle existent Confused


RE: traiter 1 champ inexistant en db - Rouge - 19-06-2008

oui et non, en fait toutes les coordonnées "x" et "y" ne sont pas rentrées en table !
Admettons que le joueur démarre au bord de la carte en x0, y0 (ces coordonnées là sont dans la table) et qu'il pointe vers le Nord, il se retrouve donc en x0, y-1. y-1 n'éxiste pas en table, il faudrait qu'il puisse "créer" cette nouvelle case de la map avec le relief de son choix... et je ne vois pas comment coder celà dans le script ci-dessus
(script qui se déclenche APRES le déplacement choisi par le joueur)


RE: traiter 1 champ inexistant en db - Rouge - 19-06-2008

le soucis vient de là
Code PHP :
<?php 
$req
= mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id ." ") or die(mysql_error());
tel quel, il est clair que posx et posy sont forcément renseignés dans la table membres...
il faudrait donc faire aussi appel à la table map dans la meme requete.....
Mais je ne sais pas comment coder celà :heuuu:


RE: traiter 1 champ inexistant en db - Shakkah - 19-06-2008

Un truc que je comprends pas, c'est que ton $posx et ton $posy sont forcément remplie puisque lié au membres par contre tu as pas forcément d'existence de cette case dans ta table gérant la map.

Concrètement, Tu veux juste savoir si la case existe dans la table de ta map c'est ça ?
Si c'est le cas pourquoi tu fais pas

Code PHP :
<?php 
//En supposant que tu connais le X et Y à tester, Mais normalement tu le connais
$req = mysql_query("SELECT posx, posy FROM MAP where posx = X AND posy = Y");
//On test le nombre de résultats renvoyés par la requête
if( mysql_num_rows($req) != 0 )
{
// La case existe
}
else
{
// La case existe pas
}



RE: traiter 1 champ inexistant en db - Rouge - 19-06-2008

Code PHP :
<?php 
$req
= mysql_query("SELECT posx, posy FROM MAP where posx = X AND posy = Y");

c'est le "X" et le "Y" qui coincent là.

j'ai testé un truc de ce genre pour recupérer les deux variables de la table membre et les comparer dans la table map pour vérifier si elles existent...
Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
$req = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id ." ") or die(mysql_error());
$rsa= mysql_fetch_assoc($req);
$posx= $data['posx'];
$posy = $data['posy'];

$sql = mysql_query("SELECT posx, posy FROM map WHERE posx= ".$data['posx']." AND posy = ".$data['posy']". ") or die(mysql_error());
if (empty
$data['posx'] || $data['posy'])
{
include
'affichemap.php';
}
else
{
// La case existe pas
include 'test.htm';
}
?>
mais j'ai toujours un message d'erreur sur la requete $sql
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /mnt/web4/40/58/51658858/htdocs/verif_position_joueur.php on line 9
il faudrait arriver à faire la liaison entre posx et posy communs dans la table membres et la table map. Pour la fin du code, le empty, je ne suis pas certain de la syntaxe :heuuu:


RE: traiter 1 champ inexistant en db - Roworll - 20-06-2008

D'abord
Code PHP :
<?php 
$rsa
= mysql_fetch_assoc($req);
Vu que deux lignes en dessous tu fais référence à $data, de ne serait pas plutôt
Code PHP :
<?php 
$data
= mysql_fetch_assoc($req);
Ensuite,
Code PHP :
<?php 
$sql
= mysql_query("SELECT posx, posy FROM map WHERE posx= ".$data['posx']." AND posy = ".$data['posy']". ") or die(mysql_error());
contient une erreur
Code PHP :
<?php 
$sql
= mysql_query("SELECT posx, posy FROM map WHERE posx= ".$data['posx']." AND posy = ".$data['posy']) or die(mysql_error());
suffit amplement. Pas besoin de rajouter je ne sais quoi à la fin
Entre nous, ces deux là, tu aurais pu les trouver.

Enfin, pour tester si ta requête a renvoyé un résultat, tu as deux solutions
Code PHP :
<?php 
mysql_num_rows
($sql);
comme proposé par Shakkah qui va te renvoyer le nombre de lignes du recordset
Code PHP :
<?php 
if($map=mysql_fetch_assoc($sql))
qui permet de tester si l'affectation du recordset à fonctionné. en cas d'échec, c'est qu'il était vide.


RE: traiter 1 champ inexistant en db - Shakkah - 20-06-2008

Une question bête , la ligne 9 s'est la quelle ? ^_^

En comptant (s'il n'y a pas d'autre ligne de code que tu nous as pas mis) je tombe sur cette ligne
Code PHP :
<?php 
if (empty $data['posx'] || $data['posy'])

Je pense pas que cette ligne peux fontionner, il vaut mieux faire
Code PHP :
<?php 
if ( empty($data['posx']) || empty($data['posy']) )

Parce que sinon tu test juste la première valeur pas la deuxième.

D'ailleurs je suis entrain de voir que dans ton premier code, tu avais fait la même erreur sur le if.
De pas tester une des valeurs, quand tu utilise les opérateurs logiques (|| , && , etc ...) il faut que de chaque coté ça soit l'équivalent d'un if simple.
Car pour faire if ($TOTO), il faut que $TOTO soit un booléen


RE: traiter 1 champ inexistant en db - Anthor - 20-06-2008

Outre les questions betes, ca vous pose pas problème ca ?
Code PHP :
<?php 
".$data['posy']". ")

Essai comme ca :
Code PHP :
<?php 
".$data['posy'])

ou

Code PHP :
<?php 
".$data['posy']. " ")

Après les double quote...


RE: traiter 1 champ inexistant en db - Rouge - 23-06-2008

Ok, ça fonctionne. merci à vous trois. Par contre, je pensais que comme en html, quand on ouvre une balise il fallait la refermer...
$sql = mysql_query("SELECT posx, posy FROM map WHERE posx= ".$data['posx']." AND posy = ".$data['posy']". ") or die(mysql_error()); :heuuu:


Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
$req = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id .";") or die(mysql_error());
$data= mysql_fetch_assoc($req);
$posx= $data['posx'];
$posy = $data['posy'];

$sql = mysql_query("SELECT posx, posy FROM map WHERE posx= ".$data['posx']." AND posy = ".$data['posy']) or die(mysql_error());
if(
$map=mysql_fetch_assoc($sql))
{
include
'affichemap.php';
}
else
{
// La case existe pas
include 'create_relief.php';
}
?>