JeuWeb - Crée ton jeu par navigateur
Ramasser un objet - 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 : Ramasser un objet (/showthread.php?tid=5191)

Pages : 1 2 3


RE: Ramasser un objet - julp - 24-01-2011

(24-01-2011, 01:43 PM)sawk a écrit : Ensuite, le problème est presque résolu (pressque ?) oui car le soucis c'est que je fait un INSERT ou UN DUPLICATE KEY UPDATE selon si l'objet existe déjà dans le sac...
Le problème c'est que j'ai l'erreur suivante :
Array ( [0] => 00000 [1] => [2] => ) 1

(je ne sais pas ce qu'elle représente pour PDO)
Pas d'erreur mais errorInfo est invoquée du mauvais objet (PDO vs PDOStatement) :
Citation :PDO::errorInfo() retourne uniquement les informations des erreurs pour les opérations exécutées directement sur un gestionnaire de base de données. Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorInfo() ne retournera pas l'erreur depuis le gestionnaire de requête. Vous devez appeler la fonction PDOStatement::errorInfo() pour retourner les informations sur l'erreur pour une opération exécutée sur un gestionnaire de requête particulier.
C'est donc or die(print_r($query->errorInfo(), TRUE));

Et TRUE au passage en second paramètre de print_r, pour que print_r renvoie une chaîne au lieu de l'afficher directement (et de renvoyer TRUE affiché ensuite comme '1' par die - celui qui traîne après l'affichage de l'array).


Au moins cette question ne se pose plus avec le mode d'erreur basé sur les exceptions.


RE: Ramasser un objet - niahoo - 24-01-2011

(24-01-2011, 05:12 PM)sawk a écrit : Bon en me basant sur un index UNIQUE
J'ai ma table qui ressemble à ça :

[Image: 001.png]

Il faudrait donc que j'ai un truc qui ressemble à ça (en me basant sur le fait que je doit mettre ç chaque fois l'id du membre pour tel id_objet

[Image: 002.png]

C'est bien ça ?

ça semble logique, par contre ton champ id ne te sert à rien


RE: Ramasser un objet - sawk - 24-01-2011

ouais pas bête. Mais j'ai remarquer un petit shmilblik... quand je fait l'update, c'est tous les "id_objet" qui prennent la valeur de la variable nombre, et non l'id en question...
Code PHP :
<?php 
$objet
= "1";
$nombre = "1";

$query=$db->prepare('UPDATE sac SET id_objet = :objet, nombre = nombre+1 WHERE id_membre = :id_membre');
$query->execute(array(
'id_membre' => $id,
'objet' => $objet,
));



RE: Ramasser un objet - atra27 - 24-01-2011

UPDATE sac SET nombre = nombre+1 WHERE id_membre = :id_membre AND id_objet = :objet

?


RE: Ramasser un objet - sawk - 24-01-2011

Non même problème... Ca ajoute +1 aux id_objet 1, 2, 3 ..etc...


RE: Ramasser un objet - niahoo - 24-01-2011

(24-01-2011, 10:10 PM)atra27 a écrit : UPDATE sac SET nombre = nombre+1 WHERE id_membre = :id_membre AND id_objet = :objet

?

c'est pourtant incohérent avec cette requête !


RE: Ramasser un objet - sawk - 24-01-2011

Je suis perdu...


RE: Ramasser un objet - atra27 - 25-01-2011

Comment sa fait t'il qu'il edite tous les Id d'objet alros que la requete demande d'editer seulement l'objet ayant l'id spécifié du joueur spécifié.

Tu est sur de ton histoire de requete et que c'est bien celle que j'ai proposée qui est executée?


RE: Ramasser un objet - Plume - 25-01-2011

T'es sûr que ta variable id_membre a bel et bien une valeur au moment de la génération de la requête ?

Donne nous le résultat de :
<?php var_dump($id_membre);

En mettant cette instruction juste avant la requête.


RE: Ramasser un objet - sawk - 26-01-2011

C'est pas la variable $id_membre, mais la variable $id (qui est apeller dans mon fichier header.php) elle prend la valeur de $_SESSION['log'].
elle me retourne "int 2" donc elle est OK
Voici la case "fouiller" du switch
Code PHP :
<?php 
case "fouiller":
//définition d'un nombre aléatoire
$min = 1;
$max = 1;
$trouve = mt_rand($min, $max);//TEST DONC PAS D'ALEATOIRE. APRES SE SERA GERE EN %
switch($trouve)
{
case
"1":

$trouve = "potion de soin";
$objet = 1;
$nombre = "1";

$query=$db->prepare('SELECT action FROM info_animal WHERE id_membre = :id');
$query->bindValue('id',$id,PDO::PARAM_INT);
$query->execute();
$data1 = $query->fetch();
$query->closeCursor();

if(
$data1['action'] <= 0)
{
echo
'<span style="color:red">Vos Points d\'Action ne vous permettent pas de fouiller par terre</span><br>';
}
else
{
var_dump($id);
$query=$db->prepare('UPDATE sac SET nombre = nombre+1 WHERE id_membre = :id_membre AND id_objet = :objet');
$query->execute(array(
'id_membre' => $id,
'objet' => $objet,
));

$query=$db->prepare('UPDATE info_animal SET action = action-1 WHERE id_membre = :id_membre');
$query->execute(array(
'id_membre' => $id,
))or die(
print_r($db->errorInfo()));
}
break;