IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Block IF ignoré


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut Block IF ignoré
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    selon moi, c'est pas trés propre de faire une affectation dans une condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!$L_InventaireInfos = $this->DonnerInventaireInfos($A_InId) )
    et je pense que c'est la cause de tes soucis. (il doit manquer des parentheses d'ailleurs si tu veux le faire)

  3. #3
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    J'ai fais la modif... En terme de parenthèse, il ne manquait rien.

    Le soucis est reste exactement le même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $L_InventaireInfos = $this->DonnerInventaireInfos($A_InId);
        //on vérifie qu'on a bien la place dans l'inventaire
        if(!$L_InventaireInfos)
        {
          header("location:inventaire.php?Erreur=Vous ne possedez pas cet objet");
        }
    J'ai beau essayé des $L_InventaireInfos == false, ou === false... même combat.
    Cette condition est complètement sauté...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    tu peux peut etre essayer un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    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)
    		return $L_Requete->fetch_object();
     
         }
     
          return false;
      }

  5. #5
    Membre confirmé Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Par défaut
    Testé.

    Exactement le même soucis.

    J'y comprends vraiment rien.

    Je vous file la classe en entier, peut être qu'il y a un soucis en amont, mais ça m'étonnerait quand même

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
     
    <?php
    /*
    classe inventaire
    
    date : 18/12/2008
     */
     
    if(!defined('INC_OK'))die('Vous n\'êtes pas autorisé à voir cette page.');
     
    class inventaire
    {
      /*************************/
      /***** Les Variables *****/
      /*************************/
     
      private $Objets = array();        //liste des objets du joueur dans son inventaire
      private $NombreObjets;
     
      /***************************/
      /***** Le constructeur *****/
      /***************************/
     
      public function __construct($A_Db, $A_Pj)
      {
        $this->db = $A_Db;
        $this->Pj = $A_Pj;
      }
     
      /**************************/
      /***** les accesseurs *****/
      /**************************/
     
      /**
      * @param aucun
      * @return varchar
      * Accesseur de classe qui retourne une erreur
      * pour utiliser une erreur dans la classe : $this->erreur .= 'Il y a une erreur';
      */
     
      public function DonnerErreur()
      {
        return $this->Erreur;
      }
     
      /**
      * @param aucun
      * @return varchar
      * Accesseur de classe qui retourne un message
      * pour utiliser un message dans la classe : $this->message .= 'Il y a un message';
      */
     
      public function DonnerMessage()
      {
        return $this->Message;
      }
     
      /**
      *
      *
      */
     
      public function DonnerListeObjets()
      {
        if(!$this->ChercherListeObjets())
          return false;
        else
          return $this->Objets;
      }
     
      /**
      *
      *
      */
     
      public function DonnerNombreObjets()
      {
        return $this->NombreObjets;
      }
     
      public function DonnerObjetInventaireInfos($A_ObId)
      {
        if(is_numeric($A_ObId))
        {
          $L_Requete = $this->db->query("SELECT * FROM Inventaire AS i, Objet AS o WHERE o.Ob_Id=i.Ob_Id AND o.Ob_Id='{$A_ObId}' 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 DonnerObjetInfos($A_ObId)
      {
        if(is_numeric($A_ObId))
        {
          $L_Requete = $this->db->query("SELECT * FROM Objet WHERE Ob_Id='{$A_ObId}'");
     
          if($L_Requete->num_rows <= 0)
          {
            $L_Requete->close();
            return false;
          }
          else
            return $L_Requete->fetch_object();
        }
        else
        {
          return false;
        }
      }
     
      /**
      *
      *
      */
     
      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)
          {
            return $L_Requete->fetch_object();
          }
          else
          {
            return false;
          }
        }
        else
        {
          return false;
        }
      }
     
      /************************/
      /***** Les méthodes *****/
      /************************/
     
      /**
      *
      *
      */
     
      private function ChercherListeObjets()
      {
        $L_Requete = $this->db->query("SELECT * FROM Inventaire AS i, Objet AS o WHERE o.Ob_Id=i.Ob_Id AND Pe_Id='{$this->Pj->Pe_Caracs->Pe_Id}'");
        if($L_Requete->num_rows <= 0)
          return false;
     
        $this->NombreObjets = $L_Requete->num_rows;
        while($L_Ligne = $L_Requete->fetch_object())
        {
          $this->Objets['id'][] = $L_Ligne->Ob_Id;
        }
        $L_Requete->close();
     
        return true;
      }
     
      /***** Gestion Equiper / Desequiper *****/
     
      /**
      *
      *
      */
     
      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");
        }
     
        $L_InventaireInfos = $this->DonnerInventaireInfos($A_InId);
        //on vérifie qu'on a bien la place dans l'inventaire
        if(!$L_InventaireInfos)
        {
          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
        $this->db->query("UPDATE Inventaire SET In_Equiper=0 WHERE In_Id='{$A_InId}'");
     
        //mise à jour des données du joueur
        $this->Pj->MettreAJourXpPa(1,1);
        header("location:inventaire.php?Succes=Objet déséquipé, cette action vous coute 1PA et vous rapporte 1XP");
     
      }
     
      /**
      *
      *
      */
     
      public function EquiperObjet($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 déséquipé et qu'il est équipable
        $L_ObjetInfos = $this->DonnerObjetInfos($L_InventaireInfos->Ob_Id);
        if($L_InventaireInfos->In_Equiper =! 0 AND $L_ObjetInfos->Ob_Equipable =! 1)
        {
          header("location:inventaire.php?Alerte=Vous ne pouvez déséquiper cet objet");
        }
     
        //on déséquipe
        $this->db->query("UPDATE Inventaire SET In_Equiper=1 WHERE In_Id='{$A_InId}'");
     
        //mise à jour des données du joueur
        $this->Pj->MettreAJourXpPa(1,1);
        header("location:inventaire.php?Succes=Objet équipé, cette action vous coute 1PA et vous rapporte 1XP");
     
      }
     
    }
    A noter que maintenant que j'ai décommenté mes deux lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //mise à jour des données du joueur
        $this->Pj->MettreAJourXpPa(1,1);
        header("location:inventaire.php?Succes=Objet équipé, cette action vous coute 1PA et vous rapporte 1XP");
    Il considère que tout est tjrs un succès...

    Incompréhensible

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 44
    Par défaut
    essaie de toujours renvoyer false dans ta méthode et tu pourras peut etre isoler d'où ca vient.

Discussions similaires

  1. [cvs] Ignorer un fichier lors du synchronise
    Par lfournial dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/03/2004, 10h16
  2. [TWebBrowser][Javascript] Ignorer erreurs Javascript
    Par ludo.guy dans le forum Composants VCL
    Réponses: 3
    Dernier message: 09/01/2004, 02h07
  3. Réponses: 2
    Dernier message: 16/05/2003, 11h14
  4. [langage] Extraire un block dans une variable multiligne
    Par |DUCATI| DesMo dans le forum Langage
    Réponses: 9
    Dernier message: 11/02/2003, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo