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]Controle de parametre


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]Controle de parametre
    Bonjour,

    je ne fais que très peu de POO, en fait je débute, et j'aurais voulu votre aide pour un pb de conception.
    Voilà j'ai une classe Auteur() avec un parametre dans le constructeur,Je voudrais vérifier que ce parametre est bien numérique car quand une requete est lancée elle affiche parfois des string.
    plus facile de comprende en exemple :
    ma classe (code en php4) il existe depuis longtemps
    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
    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
    			{
    				$this->numLivre= 0;
    			}
     
    			$q .= "SELECT C.nomCollection,C.historique,E.nomEditeur,E.numEditeur,LPAD(C.numCollection,5,'0') AS padNumCollec";
    			$q .= " FROM collection AS C";
    			$q .= " LEFT JOIN editeur AS E ON (C.numEditeur=E.numEditeur)";
    			$q .= " WHERE numCollection=" . $this->numCollection;
    			$collec = $this->db->selectLine($q);
     
     
     
    			$this->nom = $collec["nomCollection"];
    			$this->editeur = $collec["nomEditeur"];
    			$this->numEditeur = $collec["numEditeur"];
    			$this->historique = $collec["historique"];
    		}
    }
    donc voilà, j'ai rajouté ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(is_integer($numLivre))
    			{
    				$this->numLivre= $numLivre;
    			}
    			else
    			{
    				$this->numLivre= 0;
    			}
    mais dans le else, est ce que je ne dois pas mettre return false à la place, et dans ce cas, ma requete sera t-elle exécutée où non ? est ce qu'avec ce code je suis sur qu'on ne rentre pas de string dans la condition de ma requete, ou je dois filtrer au niveau de la requete ?

    Merci beaucoup

  2. #2
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Bonjour,

    Si tu veux qu'on ne rentre pas de string dans ta table, ta solution est bonne, sinon tu met juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->numLivre= (int)$numLivre;
    Tout dépends de si le fait d'avoir quelque chose de non numérique dans ta table est un cas d'erreur ou non, si c'est un cas d'erreur, lance une exception et rattrape la ( comme ça ton objet n'est pas instancié ), si c'est un cas possible ( => si on met un string, on l'ignore, et ça change rien pour l'utilisateur ), on change juste le string en int ( donc on met une valeur dedans, pour ne pas provoquer de corruption des données, ou de bug foireux, donc pour que l'application marche quand même ).

    Bonne journée :-)

  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 pour ta réponse...

    en effet si c'est pas numéric j'aurais dans ma requete : select nom where num="www.truc.com from matable";

    comment puis je gérer cette erreur, il faudrait que j'affiche un message d'erreur si ce n'est pas numérique.

    je fais mon try sur le this->numLivre ?
    et le catch ? je ne sais jamais ce que l'on peut mettre exception erreur ?

    merci beaucoup !

  4. #4
    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
    Re.

    là je ne comprends rien..

    je lance donc une exception si c'est du numérique comme ça ça arrete le code et donc l'objet non généré

    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.nomCollection,C.historique,E.nomEditeur,E.numEditeur,LPAD(C.numCollection,5,'0') AS padNumCollec";
    			$q .= " FROM collection AS C";
    			$q .= " LEFT JOIN editeur AS E ON (C.numEditeur=E.numEditeur)";
    			$q .= " WHERE numCollection=" . $this->numCollection;
    			$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"];
    		}
    Eh bien, il me sort comme message

    Fatal error: Uncaught exception 'Exception' in /home/file.php:36
    Stack trace:
    #0 /home/file.php(76): Livre->Livre('http://mypregna...')
    #1 {main}
    thrown in /home/www/www.livrenpoche.com/php/CollectionInfo.php on line 36
    ce qui veut dire qu'il me met bien du string dans mon param...
    j'y comprends plus rien...

Discussions similaires

  1. Controler liste parametrée
    Par Fyvan dans le forum Grails
    Réponses: 2
    Dernier message: 12/07/2012, 20h45
  2. User control et parametres obligatoires
    Par topolino dans le forum ASP.NET
    Réponses: 3
    Dernier message: 01/04/2010, 16h23
  3. Controle des parametres d'entrées
    Par Florent Coulon dans le forum Jasper
    Réponses: 6
    Dernier message: 15/02/2007, 15h51
  4. Passer un contrôle en paramètre d'une fonction
    Par Kinian dans le forum Access
    Réponses: 6
    Dernier message: 15/05/2006, 12h15
  5. Réponses: 2
    Dernier message: 21/10/2005, 12h26

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