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

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    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 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    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 actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    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 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    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 actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    490
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    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 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    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.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    Hello, eh bien tu exécutes la requete que si c'est du int... c'est pour cela que je l'ai mise là.
    Je ne peux pas mettre d'autre code. ça fonctionne, c'est juste quand j'affiche mes requetes que j'ai quand meme un param en string dedans. Mais c'est peut etre tout simplement parce que je n'ai pas vidé mon cache

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    Par défaut
    Je comprends pas, c'est bon ou c'est pas bon alors ?

    Citation Envoyé par maysa Voir le message
    tu exécutes la requete que si c'est du int... c'est pour cela que je l'ai mise là.
    Heu, mouais ... T'as pas dû tout capter aux exceptions alors. Parce que comme tu l'utilises, un simple if/else suffit, et pas besoin d'exception.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 490
    Points : 201
    Points
    201
    Par défaut
    oui ça fonctionne, j'ai remis le code comme tu l'avais mis..
    En effet peut etre pas tout compris aux exceptions. mais bon quand on entre dans un catch l'execution s'arrete non ? c'est comme si y'avait un exit. ?
    je crois que je viens de dire une grosse bétise...

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par maysa Voir le message
    je crois que je viens de dire une grosse bétise...
    En effet.

    Pour te donner un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
       throw new Exception( 'Message' );
     
       // Le code se trouvant ici ne sera pas exécuté
       echo 'Du texte';
    }
    catch ( Exception $e ) {
       // Exception lancée
    }
     
    echo 'Fin';
    Dans cet exemple, le premier echo ne sera pas affiché, mais le second si. Le catch ne joue pas le rôle du exit, après l'exception le reste du code continue d'être exécuté.

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

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

    je comprends mieux...ça ira mieux quand je les utiliserai régulièrement

Discussions similaires

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

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