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 :

[POO] gestion des exceptions


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Par défaut [POO] gestion des exceptions
    bonjour,

    j'ai un petit soucis, bon c'est la premiere fois que j'utilise les exceptions. voici une partie de ma classe .
    Je voudrais que si le parametre numLivre n'est pas numérique, je veux que la requete ne soit pas exécutée.
    je lui demande donc que si mon param n'est pas un entier, on lance une exception ensuite on essaye de faire la requete et on attrape l'exception..
    mais ça marche pas...
    Je bloque depuis hier, alors toute aide est la bienvenue

    Merci
    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
    class Livre extends BaseApp
    	{
    		var $numLivre; 
    		var $jaquette; 
    		var $nom;
    		var $editeur;
    		var $numEditeur;
     
    		var $historique;
     
    		function LivreInfo($numLivre)
    		{
    			global $basePath;
     
    			$this->BaseApp();
     
    			if(is_integer($numLivre))
    			{
    				$this->numLivre= $numLivre;
    			}
    			else
    			{
    				throw new Exception();
    			}
    			try{
    			$q .= "SELECT C.nomLivre,C.historique,E.nomEditeur,E.numEditeur,LPAD(C.numLivre,5,'0') AS padNumCollec";
    			$q .= " FROM Livre AS C";
    			$q .= " LEFT JOIN editeur AS E ON (C.numEditeur=E.numEditeur)";
    			$q .= " WHERE numLivre=" . $this->numLivre;
    			$collec = $this->db->selectLine($q);
                            } 
    catch(Exception $e)
    {
     $e->getMessage();
    }
     
     
    			$this->nom = $collec["nomCollection"];
    			$this->editeur = $collec["nomEditeur"];
    			$this->numEditeur = $collec["numEditeur"];
    			$this->historique = $collec["historique"];
    		}

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Ton throw new Exception doit être dans un try pour être capturé, que ce soit à même le try, ou dans une fonction appelée dans le try.

    Dans ton cas, on pourrait l'utiliser comme ça :

    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
    try {
       if(is_integer($numLivre)) {
          $this->numLivre= $numLivre;
       }
       else {
          throw new Exception('Le numéro du livre est erroné.');
       }
     
       $q .= "SELECT C.nomLivre,C.historique,E.nomEditeur,E.numEditeur,LPAD(C.numLivre,5,'0') AS padNumCollec";
       $q .= " FROM Livre AS C";
       $q .= " LEFT JOIN editeur AS E ON (C.numEditeur=E.numEditeur)";
       $q .= " WHERE numLivre=" . $this->numLivre;
       $collec = $this->db->selectLine($q);
    } 
    catch(Exception $e) {
       echo $e->getMessage();
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Par défaut
    Merci ,

    bon finalement j'ai fait comme tu m'as dit. Mais je ne comprends pas car si le mets une chaine de caractère au lieu d'un numéro, j'affiche ma requete pour tester et j'ai bien le message d'erreur mais la requete s'exécute tout de meme avec le string dans le where .
    Pourtant je dis bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     if(is_integer($numLivre)) {
          $this->numLivre= $numLivre;
       }
    donc comme dans mon where j'ai $this->numLivre, elle ne devrait pas le connaitre ??

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Normalement, si ton script passe dans le else, il ne devrait pas exécuter le reste du try.
    Donc soit ton numLivre est bien un entier, soit tu n'exécutes pas ta requête au bon endroit.

    Peut-on voir le code que tu as maintenant ? Et nous dire à quel endroit s'exécute ta requête ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Par défaut
    et voilà, merci pour ta réponse
    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
    try {
       if(is_integer($numLivre)) {
          $this->numLivre= $numLivre;
    $q .= "SELECT C.nomLivre,C.historique,E.nomEditeur,E.numEditeur,LPAD(C.numLivre,5,'0') AS padNumCollec";
       $q .= " FROM Livre AS C";
       $q .= " LEFT JOIN editeur AS E ON (C.numEditeur=E.numEditeur)";
       $q .= " WHERE numLivre=" . $this->numLivre;
       $collec = $this->db->selectLine($q);
       }
       else {
          throw new Exception('Le numéro du livre est erroné.');
       }
    }
    catch (Exception $e)
    {
    $this->erreur = $e->getMessage();
    }
     
     
    }

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Heu, pourquoi as-tu mis la requête dans le if et non pas comme je l'ai mise ?

    Et je pense qu'on aimerait avoir un exemple complet du code qui ne fonctionne pas.

Discussions similaires

  1. [POO] Gestion des exception avec php4
    Par mulot49 dans le forum Langage
    Réponses: 1
    Dernier message: 26/04/2007, 10h18
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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