Bonjour,

Je suis désolé que le titre ne soit pas évocateur... mais moi même j'n'arrive pas à mettre un "mot" sur ce qui se passe.

J'ai 2 méthodes dans une classe.
L'une permet de me sortir les infos d'un Objet d'inventaire en fonction de l'ID

L'autre permet de déséquiper l'objet (s'il est équipé).

J'ai 3 tests avec 3 if... y en a un (le plus important j'dirais sur le coup) qui est "complètement ignoré"...

Il doit y avoir une erreur... mais "où" ? J'dois être trop fatigué ou trop concentré dessus pour la voir.

Voici les méthodes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
public function DonnerInventaireInfos($A_InId)
  {
    if(is_numeric($A_InId))
    {
      $L_Requete = $this->db->query("SELECT * FROM Inventaire WHERE In_Id='{$A_InId}' AND Pe_Id='{$this->Pj->Pe_Caracs->Pe_Id}'");
 
      if($L_Requete->num_rows <= 0)
      {
        $L_Requete->close();
        return false;
      }
      else
        return $L_Requete->fetch_object();
    }
    else
    {
      return false;
    }
  }
 
 
public function DesequiperObjet($A_InId)
  {
    //on vérifie que le joueur a assez de PA
    if($this->Pj->Pe_Caracs->Pe_PA < 1)
    {
      header("location:inventaire.php?Alerte=PA insuffisants");
    }
 
    //on vérifie qu'on a bien la place dans l'inventaire
    if(!$L_InventaireInfos = $this->DonnerInventaireInfos($A_InId))
    {
      header("location:inventaire.php?Erreur=Vous ne possedez pas cet objet");
    }
 
    //on vérifie que l'objet est bien équipé
    if($L_InventaireInfos->In_Equiper == 0)
    {
      header("location:inventaire.php?Alerte=Vous ne pouvez déséquiper cet objet");
    }
 
    //on déséquipe
    ...
Alors, dans la méthode DonnerInventaireInfos, j'ai bien vérifié que $this->Pj->Pe_Caracs->Pe_Id ne soit pas null... et il ne l'est pas donc le soucis ne vient pas de là. D'ailleurs pour $this->Pj->Pe_Caracs->Pe_XP, aucun soucis non plus.

Si dans la méthode 2 $A_InId = 3 (une partie de l'équipement appartenant à Pe_Id), alors aucun soucis.
Par contre, si $A_InId = 75 (une partie qui n'existe pas)... il me dit "Vous ne pouvez déséquiper cet objet"... au lieu de "Vous ne possédez pas cet objet".

J'ai testé avec ma BDD, il n'y a pas résultat pour Pe_Id = 2 AND In_Id=75.

Donc logiquement, $L_InventaireInfos est à false (car la méthode 1 retourne false) et donc on entre dans le (if!...) et il est sensé retourner "Vous ne possédez pas cet objet".

Pour vérifier, j'ai fait un var_dump sur $L_InventaireInfos et il me dit bien bool(false).

Ca doit être une bête erreur d'inattention... mais ou est-elle :'(

Merci de votre aide