JeuWeb - Crée ton jeu par navigateur
[resolu] update kaputt - 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 : [resolu] update kaputt (/showthread.php?tid=824)



[resolu] update kaputt - YVES - 17-02-2007

Ce qui fonctionne pour un affichage ne fonctionne pas (plus) pour un update
en table... :heuuu:

Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
include
'connexion.php';
//on va chercher la position du joueur
$requete = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id .";") or die(mysql_error());
$rsa= mysql_fetch_assoc($requete);
$posx = $rsa['posx'];
$posy = $rsa['posy'];
//Là, on va chercher la ressource de la case sur la map qui correspond au X/Y de ton perso
$rsb = mysql_query("SELECT ressource FROM map WHERE posx=".$rsa['posx']." AND posy=".$rsa['posy']) or die(mysql_error());
$sql = mysql_fetch_assoc($rsb);
$ressource= $sql['ressource'];
$sql ="UPDATE membres SET stock1=stock1+$ressource, qstock1=qstock1+1 WHERE id = ". $id .";";
}
}
?>



RE: update kaputt - YVES - 18-02-2007

:mauvais:
bon, j'ai posté un peu vite, car cela va mieux ainsi....
Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
include
'connexion.php';
//on va chercher la position du joueur
$requete = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id .";") or die(mysql_error());
$rsa= mysql_fetch_assoc($requete);
$posx = $rsa['posx'];
$posy = $rsa['posy'];
//Là, on va chercher la ressource de la case sur la map qui correspond au X/Y de ton perso
$rsb = mysql_query("SELECT ressource FROM map WHERE posx=".$rsa['posx']." AND posy=".$rsa['posy']) or die(mysql_error());
$sql = mysql_fetch_assoc($rsb);
$ressource= $sql['ressource'];
$sql ="UPDATE membres SET stock1= '$ressource', qstock1=qstock1+1 WHERE id = ". $id .";";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
if(
$rsb)
{
$_SESSION['stock1']= $_SESSION['stock1']+'$ressource';
$_SESSION['qstock1']=$_SESSION['qstock1']+1;
}
header("Location: page_membre.php");
mysql_close();
?>
Par contre, il reste 1 petit soucis, sur le retour sur page_membre, l'image de la ressource ne s'affiche pas de suite! (il faut faire un refresh)


RE: update kaputt - Sephi-Chan - 18-02-2007

Hello,

Je n'ai pas la réponse à ta question (je ne comprend pas trop pourquoi il y aurait un problème d'affichage), mais j'ai quelques conseils qui pourront peut-être t'aider.

Tes requêtes sont formatées bizarrement, tu n'utilises jamais la même forme !

Code PHP :
<?php 
SET stock1
= '$ressource'
Code PHP :
<?php 
WHERE id
= ". $id .";"
Code PHP :
<?php 
WHERE posx
=".$rsa['posx']."

Si tu veux faire tes requêtes sans employer la méthode que j'explique après, je te conseille d'utiliser le format de la première citation (sans forcément mettre les quotes ('), et, pour les arrays, de faire {$rsa['posx']}.

Mais la meilleur solution reste d'utiliser sprintf().

qui s'utilise ainsi :
Code PHP :
<?php 
$requete1
= sprintf("SELECT nomPersonnage, prenomPersonnage FROM personnages WHERE nomPersonnage = %s AND prenomPersonnage = %s",
securiser($_POST['nomPersonnage']),
securiser($_POST['prenomPersonnage'])
);
La voici avec une requête plus longue

Code PHP :
<?php 
$requete2
=
sprintf("INSERT INTO personnages (idUtilisateur, racePersonnage, nomPersonnage, prenomPersonnage, surnomPersonnage , carrierePersonnage, CC, CT, F, E, Ag, `Int`, FM, Soc, A, B, M, Mag, PF, PD, dateCreation, localisation) VALUES(%d, %s, %s, %s, %s, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %d)",
securiser($_SESSION['idCompte']),
securiser($_POST['racePersonnage']),
securiser($_POST['nomPersonnage']),
securiser($_POST['prenomPersonnage']),
securiser($_POST['surnomPersonnage']),
securiser($_POST['carrierePersonnage']),
$profilBase[$_POST['racePersonnage']]['CC']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['CT']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['F']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['E']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['Ag']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['Int']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['FM']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['Soc']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['A']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['B']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['M']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['Mag']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['PF']+mt_rand(2, 20),
$profilBase[$_POST['racePersonnage']]['PD']+mt_rand(2, 20),
time(),
LIEU_DEPART
);

Cela te permet d'avoir des requêtes très propre, d'utiliser des fonctions sans passer par des variables intermédiaires, d'utiliser des constantes, des variables d'array et tout!

C'est également super au moment du développement car tu peux faire
Code PHP :
<?php 
echo '<p>',$requete2,'</p>';
mysql_query($requete2) or die(mysql_error());
Ce qui te permet d'afficher ta requête :
sprintf() a écrit :INSERT INTO personnages (idUtilisateur, racePersonnage, nomPersonnage, prenomPersonnage, surnomPersonnage , carrierePersonnage, CC, CT, F, E, Ag, `Int`, FM, Soc, A, B, M, Mag, PF, PD, dateCreation, localisation) VALUES(1, 'Humain', 'Blablabla', 'Yves', '', 12, 35, 27, 33, 33, 31, 31, 35, 28, 37, 28, 36, 38, 22, 22, 1171793985, 1)
et l'éventuel message d'erreur qui l'accompagne (j'ai ici provoqué l'erreur volontairement pour te montrer) !
mysql_error() a écrit :Champ 'localisation' inconnu dans field list

C'est donc un outil de débuggage très efficace, puis une fois que tout fonctionne bien tu peux simplement mettre l'echo de ta requête en commentaire ou le supprimer complètement.

Comme tu peux le voir, sprintf() est un peu particulier au niveau des notations %s, %d et compagnie, mais tout est listé sur la documentation de la fonction.

J'espere avoir pu t'aider même si je n'ai pas répondu à ta question d'origine.


Sephi-Chan


RE: update kaputt - YVES - 20-02-2007

merci pour ces conseils de prog (h)
Il n'empeche ca s'affiche tjrs pas du premier coup, il doit y avoir un pb dans l'update et/ou la mise à jour de la session, sachant que la variable "ressource" est en table et son chemin est le suivant :
./objet/nom_de_la_ressource.gif :ninga:

ce genre d'affichage fonctionne pour d'autres scripts pourtant !
(mais dans ces cas là, tous les parametres sont déjà en variable de sessions, voilà p-etre la clef du pb que je ne situe pas vraiment en fait) :wowowow::rip:


RE: update kaputt - YVES - 20-02-2007

APRES PLUSIEURS ESSAIS, je confirme que le problème vient de la mise à jour de la session:


Code PHP :
<?php 
$_SESSION
['stock1']= $_SESSION['stock1']+'$ressource';


(en table, tout se passe comme il faut mais pas à l'affichage donc.


RE: update kaputt - Sephi-Chan - 20-02-2007

Hm. Et quand tu affiches (via un echo) cette variable, ça te donne quoi ?

Je pense que c'est normal car l'utilisation des quotes simple ' interprète la variable comme une chaîne.

Exemple :
Code PHP :
<?php 
$ressource
= 10;
echo
$ressource; // Renverra 10
echo '$ressource'; // Renverra $ressource

Si tu veux mieux comprendre : PHP.net : Les chaînes de caractères.


Sephi-Chan


RE: update kaputt - YVES - 20-02-2007

:wowowow::wowowow: (je craque, désolé)
Voici le code final, qui fait bien la mise à jour en table mais pas à l'affichage sur la page du joueur...
Ca fait deux soirées que je passe là dessus et quelque chose m'échappe.
J'ai d'autres scripts qui fonctionnent dans le meme genre mais avec des variables numériques. ici, "ressource" est en table (map) avec le chemin suivant et sous la forme
./objet/la_ressource_en question.gif
la variable "qob1" s'affiche bien (elle est numérique du reste) mais pas la variable "ressource" qui est une image gif.
vous pouvez lire le script commenté ainsi que les lignes qui fonctionnent presque (sur la fin, mise à jour des sessions...)

Code PHP :
<?php
session_start
();
$id = $_SESSION['id'];
include
'connexion.php';
//on va chercher la position du joueur
$requete = mysql_query("SELECT posx, posy FROM membres WHERE id = ". $id .";") or die(mysql_error());
$rsa= mysql_fetch_assoc($requete);
$posx = $rsa['posx'];
$posy = $rsa['posy'];
//Là, on va chercher la ressource de la case sur la map qui correspond au X/Y de ton perso
$rsb = mysql_query("SELECT ressource FROM map WHERE posx=".$rsa['posx']." AND posy=".$rsa['posy']) or die(mysql_error());
$sql = mysql_fetch_assoc($rsb);
$ressource= $sql['ressource'];
//Là, on va chercher l'objet vide qui peut accueillir ladite ressource
$sql= "SELECT ob1 FROM membres WHERE id = ". $id .";";
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
$data = mysql_result($res,0,'ob1');
if (
$data== './objet/rien.gif') {
$sql ="UPDATE membres SET ob1= '$ressource', qob1=qob1+1 WHERE id = ". $id .";";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
if(
$res)
{
// $_SESSION['ob1']= $_SESSION['ob1']='$ressource'; presque bon !
// $_SESSION['ob1']= $_SESSION['ob1']+'$ressource'; presque bon !
// $_SESSION['ob1']= '$ressource'; presque bon !
$_SESSION['qob1']=$_SESSION['qob1']+1;
}
header("Location: page_membre.php");
}
mysql_close();
?>



RE: update kaputt - Sephi-Chan - 21-02-2007

Tu as lu ma réponse précédente ?

Code PHP :
<?php 
// $_SESSION['ob1']= $_SESSION['ob1']='$ressource'; presque bon !
// $_SESSION['ob1']= $_SESSION['ob1']+'$ressource'; presque bon !
// $_SESSION['ob1']= '$ressource'; presque bon !
$_SESSION['qob1']=$_SESSION['qob1']+1;

N'encadre jamais de variable avec les quotes simples !!
Pour en connaître la raison : PHP.net : Les chaînes de caractères.


Sephi-Chan


[RESOLU] : update kaputt - YVES - 21-02-2007

ben oui, :mauvais:
voilà donc la bonne mise à jour au niveau de la session:

Code PHP :
<?php 
$_SESSION
['ob1']= $ressource;

:heuuu: